From a03f915338cf4d165a4c4a4f4d8ab2b5aefd661e Mon Sep 17 00:00:00 2001 From: Ade Attwood Date: Mon, 24 Oct 2022 19:48:49 +0100 Subject: [PATCH] chore: initial commit --- .eslintrc.js | 20 + .gitignore | 3 + .prettierrc.js | 7 + README.md | 7 + assets/example-output.png | Bin 0 -> 30931 bytes bin/diff-cov.js | 3 + data/1.diff | 41 + data/1.lcov.info | 980 +++++ jest.config.ts | 197 + package.json | 47 + src/diff-parser.js | 231 ++ src/exec.ts | 28 + src/index.ts | 37 + src/lcov-parser.js | 130 + src/report.ts | 84 + tests/__snapshots__/parse-diff.spec.ts.snap | 231 ++ tests/__snapshots__/parse-lcov.spec.ts.snap | 3792 +++++++++++++++++++ tests/parse-diff.spec.ts | 11 + tests/parse-lcov.spec.ts | 11 + tsconfig.json | 104 + yarn.lock | 2875 ++++++++++++++ 21 files changed, 8839 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .prettierrc.js create mode 100644 README.md create mode 100644 assets/example-output.png create mode 100755 bin/diff-cov.js create mode 100644 data/1.diff create mode 100644 data/1.lcov.info create mode 100644 jest.config.ts create mode 100644 package.json create mode 100644 src/diff-parser.js create mode 100644 src/exec.ts create mode 100644 src/index.ts create mode 100644 src/lcov-parser.js create mode 100644 src/report.ts create mode 100644 tests/__snapshots__/parse-diff.spec.ts.snap create mode 100644 tests/__snapshots__/parse-lcov.spec.ts.snap create mode 100644 tests/parse-diff.spec.ts create mode 100644 tests/parse-lcov.spec.ts create mode 100644 tsconfig.json create mode 100644 yarn.lock diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..7e0a966 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,20 @@ +module.exports = { + env: { node: true, es6: true }, + parser: "@typescript-eslint/parser", + extends: ["eslint:recommended", "plugin:prettier/recommended", "plugin:@typescript-eslint/recommended"], + settings: { + jsdoc: { mode: "typescript" }, + }, + rules: { + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/ban-types": [ + "error", + { + extendDefaults: true, + types: { + "{}": false, + }, + }, + ], + }, +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1261f4a --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +lib +coverage diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..041ed12 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,7 @@ +module.exports = { + tabWidth: 2, + printWidth: 120, + singleQuote: false, + trailingComma: "es5", + semi: true, +}; diff --git a/README.md b/README.md new file mode 100644 index 0000000..b09bbb9 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +
+ +# Diff Cov + +Simple CLI to print diffs highlighted with test coverage status + +
diff --git a/assets/example-output.png b/assets/example-output.png new file mode 100644 index 0000000000000000000000000000000000000000..f86d877ea66e86d7004748035dd720ab8977147c GIT binary patch literal 30931 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%0A|+fv-X#X)oN%hRpRLt9XGAU7+@pD zo($JKVSeUTPtg8kV9(!!Yn>Mb>Fvgd#MlV%Dk@k%+78o~=JNUNT>MjPax{}TQ|LXJ zGDiNQXF%oN+3EYvy`U@vFCy~xIPi#5`Ex;_8mu-3 zGYezVDzHdW^gnm^e6$hy%-vc*;Jy1CNe0 zj{fouTWb!RA3l`*E185YqUDt@q=wG>{yI7ftYvJ7O?DFbNvbo|9uChQ=pTzlU`phj3#?5i9 zb6@}H+8c{$WYI+gf#2p9w1*l3y4snP2N@`~_@@7vI?jo?P>8lQL}VvurgtL(u?kx! z-n@*&w^UayQmZ>zkLE=!s$LK9tS*^W@@JnNY)&7{s~k0$0eK7ELY}fEFSk2T`S~|@ zaG24o;?pAugn|g(s{`tI!V{F9kOyv4Y3LMq@IF^9*>6Om++^I|;74I5o7m0-%c=`< zHu5DD_%N!@$i@2N4ppHwvAKz3Rxz;_y$A=*OOgIw0!K0LSD9Svlj)ud91Y9_J$NsOP7@k6$WdS|UTd z$dCp5FwQgV)xs|~OyKXyn$DCM^kJpN$wkB3osb8_jl3+mjJCd16^!+mE=7-XmML}v6_|s=d~I0gTOFjNd`I#XH=PVaW+Rgb z!7tc@Pb|0ydx>5zOXZA0-Urq9qtITh$H(h~YIAMoBs|?>R}NF@4h^kO=e5M56@bzF^kWH|szE_;kAjsGZcpv8PUVz)E6y*qPKbom z)}b6d&pw~)4{-Sp4hF7RK78DAk%ejCl3SU2`RbLuc5jwun6`qRrkS|{A{A^03w7_7 z(}@m)Y~KM{1W%+zbSRcXtcA1C%Ol&yAOFvwv9^yqrU6ljvIY2tlQ@i|w;0D2u^=%E-Uc_JshZZT7OwWJW^QPU|px)SuT zP2CI0pZ36s$p-B6GnZvM;3%5QO?;7q^j=_dgToD)P_9pGz5BKa6d@;5m{bXs1v}HT zaY;&wZEu2ZAA&U64x^O{?mW3Ar*#|0eprB2O3_!uVX3_ztsmTZ?984s8?o;?65i%p zx5ysai9uai5^#hc89FHc&Rus{fZ^W%@mBJ7BY-w_Y;uNik?(RB|HJosBcoFuA)!^$ z=1G&^H(6#QX*daThj9`)B+TRw-oJ-ld((J4&}WA8M(NyuAoNwD~CLa`4rhpAQ7J)GKY zuQPZs{s&C3iuhFd(Y9`*^naUqer_B-SbEJoO9z4p-h|}zmS3c~rzzs|^+av4=H6`} zXJpN0%7$>0i>IaYAs0`}GrszO za7OR`2J`+OM+d~ik*(K+eRC|K%!8{g8sk6mQSlWAVnZIK!`5DR*L*VppE^TIN>{|GhCE@fLKE`Qc@OG?h}sjlcuFZpx7;SZ44)b;Zjr!1y#rFAQ=yMHcN zJZN6jYC(T7J|>u2!Cl*_bZv%8)K=W4M0-D67kf!%49!iti;?GykXX(xCy#60SRQJ= zymJq546MSM6KZ~N79~4ndX}FguCpgwDu`Rb_ckO##IhNw*|4vztI`(~ZCW&gFcyA5 zL+kncZC}69A{5ImZE5q1#z)rD{7JZE%@psR4X^4+d5EX?WKk5FKkP}(Ij@HD^sJr? zv&C93&IPc>WXCVa71=ttzFlx5PmtZTnA1DG7c4%0%xsmKG7R#_1zfGc`#!p%M$+(- z^Dq_U=a+c8JA67-!2`OZt~+2M{#KV?p5|6Mtj}^z>+ z)LXI-Zb6n`CUt~}aRyz+oW2|`wY2e|EU`3ba@3J-jZA7qlM)YR$hun&4Sg0!8J&I4 zT_)ek8DbH-PUMjh);t6$-Y$PQ!(ra7H@^P?_rZbT`KiM-Q){iRE|GV;`gwDzK@sK4 z>}7`~1LNl>=2#kw!G7(EssPm!sndMz#QV z(=W|<5w9z9(cn~@kq^QM-yQ_3KsZgREQ6sL){_w{&?$2`D*94Q`D$)zJpyeuuVbRO zw&mm(*Mc&_sN@?ETI0imzGE^0IUMsgd94 zdeXhPjq2EQn?Z~z?NQKDASP?cmIMt*Lvm8EuSaBoYjdFHtgHMzTSVQq*n+*R(OW(D z#@86|gh-J(V5U)H9V{QmX`hxM;8EF$F&yzVTgy-PNLt4aEhhJH<+ZLO51RqFrCS=} zMXVW())^;gAMv^MRFr_v=4= z->-iofB(7p_v2T6`PYd3zaRhW<{#qkzkl}s_p8P|C%A9l5mJFKKW%L2HvAF|$D zYR6l)O)$S7)_=K2lHk(4JALsR8el;A@H)|lNDCwsig+P&Se`0$=jJ5Yoa!?$R*x+p z^+4VX@*oq3ZmEj!eJKqDq6nk5EO$5j}hK zB}NnQG^YHD`k9uyxH#mGAr$@XL|=u05td_iNc;~J`)TmPrz?PQE@zA zPo_I@G~O(`^gMUvAGuesSS<%^(X{n1Y5=Kl-Dr zrQWl-8__+cYs59Z_^kQ_aH4GQitdVy2R4J*@;N(1SmFZ0{SMo{+@*NRSsxVO!#BDO zQcH)|_m)M2dxu~DCJzPadRp-K~W z;@8k2x7t;TRmzI|R)qMf#d0=4DQ>3AK|if7Q>V%Tvs2nSWav?0pXk{AMtw7$FPXAQ zSfobQMsoq}#%BbBQ)5`vcbP>1_h}8N7ekK*Ct&ZX6PddkdN<`pZJug1Yr%n~7!Vo^ zz0`4{4X)d783WN-UQC9!9+WN^Ty~`5 z-`SA3QiiByH)VA242el{Tx1NnChovA?sg03`BL_@=4S}z3JPWmi}-Q^*HqM-7AYBQ zvX{u>rg+RfB}85KK5;+qHQPXPeQ?wjw{eBXA2{qSJ+#OcKIK^FmKT3TEpi?f)3m~t z3j3}M!$8Ascy5kvNg`xPx*o-{No=(;iQ--UT zWNULmH>wrUC(Fm&?SoJ1es3()t69H-XriWT7_MLyouHKUiapqm<>@6=Iy_znsz;Hv@2WUsE}g-HPbD&&ZS3ZH+CTN0O{+%SuZN%6Z;zI&C~Z0%GLm34}KD0=$TRt zt{1hG|3KOK!WK|%{%W5At`KYEv?@A>k~<~yQ2U~FDDkRHs;0WW%1CMniQv!KB|6tG z_REw{i|>u+lU4`ly)c73ua%WCn$;Hl( z3P}D>`w5ez0n^5p0*EKy$E4k?&HmYXFF(74e8e|7usOF#hy%obyXH{0j{c(9eEO#p z^-o>upHkG@f3HjZ+c7`uILhnNtJc4E1R!iwePGsS^Ju+*C41Rr0Uj27B0|7yz3aO$ z8*U#d*~p%H{Sg(ifs$jgm+yA_$G%+zE`N}{Bi^i6R*_S&fUX(ax4&~1I15cGw)(mh zJdvoUax}b$tt6D2`aNHJ@1iALIIs{BJU%W}X23#hHbZAV0u;3X*=@bo-KjYEWT z#2=^I*|OlbGyF0tyZS*g@GvY`{acBUQv@23VP;=c(a`JPvB0JI2qo*e)GWvaLeAwp zVO?Bz~UTR^};<`Y*==_R%sZLpuynRyUgwjbedxaHD z+)>(dzfP9@KTBAznTu-QHwJY(ANXW9j3!9Tud{!VwFlDmZ`OJtA4b zM}({F?koOFr~5IeuX_WI{Jni$PpsKug}&ozd%8F-oBR4~mJ;!UJKp|G8&Q~yoP%&*i7zu|nr~^8Wse(dH+24+|Kv}0bQn?zd;At2@6h-N>Z9*COuzOuESfOv-3m@q_W5j9A3zsu z$y7v2UybyMi}+<0KBV?UlWwL8T7FP!63SiGm(6VuMeTeEwgil2+sGUCN8gTiT_@z02QT>FEiz8 z((%+6RD}%knJ8&E1yuRh0Gcy4+l!F7U-3Z0A5<=@2TH2Dmg?!#p13K0oOjR3C~InA zdhHIG3XIep(=V^m1^;R-xU$L|sWQxJI71&;^j`SkH=QdE(hw99(l7O>nz?w8fpRJe zVwzck2RAU%`4Sk_*tvRmCuJyd1OZ7l58XJ z;$OkHFnMs$d5E#08whINmvD2)+U<2^ew4q8Kx=Q&2ata{Fw479MKk#-0F-_0gtC{~ zFa|G%ahl&`x|Ubux!MtM`n=0K0S}i?*i|Wzt(I$KQHd;ko{R57xpeRT0qx6MvAaT1 zm6iRRqP_Yi=e6rkn8*C2SuCg5*SUMy;L^z^E$qt3B1cb9baT;lVQ7;@m;CObN8Erl zt$!XxnSEZ7=4IK5r>!oOTZZL{^gE5mYgk|I*~A|0Zo!i+EXcZkHGhA(97^bE7zKBp z^<|sdI>D)mKKGBU26R1uh6=EKK4z|Ne8418Oy)%jaQKch%M6U>@M8MY&h-HcDePj| zg?Qnfr>aUZVfqI-7dg($FY?spzlihFK^cEroBu=6{I3KLFG_%CbmIJ^p&``We@}ns z#vwQuWX-N_0G92{vGZ;9eeV<&^Jqk_kB`;z@HUO++eJst3wAqw2)tc0Z=SvnYiF}S zVvDVyJY^Y6jGL5l6s%o?Pchyz3qx3Bsx8nfI5V;kExUQpf=jWr!A6=kZ^Dg%-$j>|oc5@n{S7@bl6plt1UCn;l3d}~H1ml6^nwAzhm(kCAnZ4cY^5JmMl%}*K zX}O%KnkgJe2snK;7TxsBygVMX{63(ZtWB#AD=+~v$^hKqU!IhDit+_px8pY+4*gQET zIYlO3b~YVhH`oXraue1`byuj~?QG&0=eEzTB#{8~wCmJii7B$2^&=sz3@%tgAw-e> z&90hq!0TF+LNB&6h*$L7%kaY*2|2}-TKmN`8gs1w%KqFyCMX}uP1m_pd4g%I?&-b? zleBkwcQB$eS(brvLZCE7o3_R~J-Z?=^FJ$|i+ZT#tOLGp_{G&FysZDORSHRk5>{z) z0hmzAP>*Vn7U8yYp(3o|X21K0f*~D`jBbP270Xdlg20?nB=Pam$z2(92V%jMM3-qY z<3N*t9J}*XD!HbaTrbL!TTa(oL(Zh__Xz&Dfakc-FFgHT{>kAAtGUtlBLiGamdMCf zks|&y?HMe&;>;!wmFfx^%b}B-=U-9}0Hij~Rm{DY*{r=mxu423;+(z+pZebD*0O%D zIH+{W`?I%nCh&*EWzFE>;q<+-{ugE2k=D^7F4Mnt&x~30%1FoX(mvk0z8zah+DAr) z+|CkWP8Cg{r0T}@SPh}Mpwobki(C~0)sBuEAC{cc?!#M*=X;j+oQ)Pm0^aSrSqRn+vjv5hO z{WC_UH3f5Arf1~~SB#HIZ@xXr)e($`apVQC0uAF#tFa`Vf5!^qUrmdjjB6&mZ;z=L znOBPK>D}gk;Vq=(P@gKzUeS-OI4RgkNH*=@FQ&;#GsUBQx?e35In@L!g2#=2PI0BR zHTX|3{MO?@M|J8r)3tX)C(=X43{AS0;?6bevA}`PdEdk)=Mv6~_3?`M3x$~l!Opv6 zXd~vWCmeu-9i@{@>5ulK{Og1E1-7b&^zMPaSMiSMdRR;k(@Qq!3B9*LA#g{kP_I9q zD0|rn3wZus-*y{z`_5j>t2`CK&XrZ3CEms(;XPL@KQv;Jzk%OB=y;Fw8Jm=32JQ)? z_&W_oGC)@SFn5~gzqhJT!^ zoxiBP3vC*2YG`V8?8#3G0Igw~|HhvT38D&TZ&1cx#gzd(Y%3FwmcW(vM+=MPvVhyV zWH`+|m4O5a^L1B#ZTuRJ`=t#+iG#o5qYw8Lj_TzX5_Fu-9q2)8V;jE8O;{v7nVT}4 zErv3_{S?pLvT7jf3w=US?^u++lQUZP-tYRU)f!Qs<#@2iU64)tFbh1s3KKNXy*0&C zGCINZ7tsm?$vLGG3HQaC%#RyK6Z2z>@q8;9sZTdZ> z`Z&CWf8Z@Bk?zO~5rs#3Gdb1_w)2T%hfTKP&tP)O-7S7Ajd@Npp7H7eAhB4J+HWcI zD-@#n4*vj^WvnomHY)^M`pA5wLTt#9?t$zW5zwZ7N7%qpeS{COk40$Wi4!#R1_fS^ zK|HlbqR0sa)2`D;AE!2MQu({O*kVLuH+cq9y* zyi0*Ww~F9PU`fos3L{6Zp0XCZKYHyrmU#RrG8I#gCVanrXO*$op2@xDKvgM5E4PpK o>FqzVuESj3;4i6XN&P5#M0C|*-Q!*T*V12EDJ98Daiie>1M!-?g#Z8m literal 0 HcmV?d00001 diff --git a/bin/diff-cov.js b/bin/diff-cov.js new file mode 100755 index 0000000..41f5410 --- /dev/null +++ b/bin/diff-cov.js @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +require("..").run(); diff --git a/data/1.diff b/data/1.diff new file mode 100644 index 0000000..5fbfff7 --- /dev/null +++ b/data/1.diff @@ -0,0 +1,41 @@ +diff --git a/src/index.ts b/src/index.ts +index d70a331..9515bb8 100644 +--- a/src/index.ts ++++ b/src/index.ts +@@ -1,3 +1,8 @@ ++export * from "./attribute-context"; ++export * from "./check-group"; ++export * from "./form-context"; + export * from "./form"; + export * from "./input-group"; ++export * from "./list-group"; ++export * from "./radio-group"; + export * from "./select-group"; +diff --git a/tests/index.spec.tsx b/tests/index.spec.tsx +new file mode 100644 +index 0000000..778e42f +--- /dev/null ++++ b/tests/index.spec.tsx +@@ -0,0 +1,22 @@ ++import * as ReactForm from "../src"; ++ ++test.each([ ++ // Components ++ "CheckGroup", ++ "Form", ++ "InputGroup", ++ "ListGroup", ++ "ListOption", ++ "RadioGroup", ++ "RadioOption", ++ "SelectGroup", ++ ++ // Hooks ++ "useAttributeContext", ++ "useCheckboxAttribute", ++ "useFormContext", ++ "useSelectAttribute", ++ "useTextAttribute", ++])("'%s' is exported from the index file", (variable: string) => { ++ expect(ReactForm[variable as keyof typeof ReactForm]).not.toBeUndefined(); ++}); diff --git a/data/1.lcov.info b/data/1.lcov.info new file mode 100644 index 0000000..87acd7f --- /dev/null +++ b/data/1.lcov.info @@ -0,0 +1,980 @@ +TN: +SF:src/attribute-context.tsx +FN:22,AttributeContextProvider +FN:30,useAttributeContext +FNF:2 +FNH:2 +FNDA:20,AttributeContextProvider +FNDA:20,useAttributeContext +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,20 +DA:23,20 +DA:24,20 +DA:25,20 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,20 +DA:31,20 +DA:32,20 +LF:32 +LH:32 +BRDA:22,0,0,20 +BRDA:30,1,0,20 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/attribute-hook.ts +FN:1,(empty-report) +FNF:1 +FNH:0 +FNDA:0,(empty-report) +DA:1,0 +DA:2,0 +DA:3,0 +DA:4,0 +DA:5,0 +DA:6,0 +DA:7,0 +DA:8,0 +DA:9,0 +DA:10,0 +DA:11,0 +DA:12,0 +DA:13,0 +DA:14,0 +DA:15,0 +DA:16,0 +DA:17,0 +DA:18,0 +DA:19,0 +DA:20,0 +DA:21,0 +DA:22,0 +DA:23,0 +DA:24,0 +DA:25,0 +DA:26,0 +DA:27,0 +DA:28,0 +DA:29,0 +DA:30,0 +DA:31,0 +DA:32,0 +DA:33,0 +DA:34,0 +DA:35,0 +DA:36,0 +DA:37,0 +DA:38,0 +DA:39,0 +DA:40,0 +DA:41,0 +DA:42,0 +DA:43,0 +DA:44,0 +DA:45,0 +DA:46,0 +DA:47,0 +LF:47 +LH:0 +BRDA:1,0,0,0 +BRF:1 +BRH:0 +end_of_record +TN: +SF:src/base-group-props.ts +FN:1,(empty-report) +FNF:1 +FNH:0 +FNDA:0,(empty-report) +DA:1,0 +DA:2,0 +DA:3,0 +DA:4,0 +DA:5,0 +DA:6,0 +DA:7,0 +DA:8,0 +DA:9,0 +DA:10,0 +DA:11,0 +DA:12,0 +DA:13,0 +LF:13 +LH:0 +BRDA:1,0,0,0 +BRF:1 +BRH:0 +end_of_record +TN: +SF:src/check-group.tsx +FN:8,useCheckboxAttribute +FN:18,onChange +FN:37,CheckGroup +FNF:3 +FNH:3 +FNDA:3,useCheckboxAttribute +FNDA:2,onChange +FNDA:3,CheckGroup +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,3 +DA:10,3 +DA:11,3 +DA:12,3 +DA:13,3 +DA:14,3 +DA:15,3 +DA:16,3 +DA:17,3 +DA:18,3 +DA:19,2 +DA:20,3 +DA:21,3 +DA:22,3 +DA:23,3 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,3 +DA:39,3 +DA:40,1 +DA:41,1 +LF:41 +LH:41 +BRDA:8,0,0,3 +BRDA:18,1,0,2 +BRDA:37,2,0,3 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/dot-notation.ts +FN:15,get +FN:37,set +FNF:2 +FNH:2 +FNDA:104,get +FNDA:25,set +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,104 +DA:16,104 +DA:17,1 +DA:18,1 +DA:19,103 +DA:20,104 +DA:21,60 +DA:22,60 +DA:23,103 +DA:24,104 +DA:25,131 +DA:26,131 +DA:27,49 +DA:28,49 +DA:29,131 +DA:30,54 +DA:31,54 +DA:32,54 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,25 +DA:38,25 +DA:39,0 +DA:40,0 +DA:41,25 +DA:42,25 +DA:43,25 +DA:44,25 +DA:45,25 +DA:46,25 +DA:47,16 +DA:48,16 +DA:49,0 +DA:50,0 +DA:51,16 +DA:52,16 +DA:53,1 +DA:54,1 +DA:55,16 +DA:56,16 +DA:57,16 +DA:58,25 +DA:59,25 +DA:60,25 +DA:61,0 +DA:62,0 +DA:63,25 +DA:64,25 +DA:65,25 +LF:65 +LH:59 +BRDA:15,0,0,104 +BRDA:16,1,0,1 +BRDA:19,2,0,103 +BRDA:20,3,0,60 +BRDA:23,4,0,103 +BRDA:24,5,0,131 +BRDA:26,6,0,49 +BRDA:30,7,0,54 +BRDA:37,8,0,25 +BRDA:38,9,0,0 +BRDA:46,10,0,16 +BRDA:48,11,0,0 +BRDA:52,12,0,1 +BRDA:60,13,0,0 +BRF:14 +BRH:11 +end_of_record +TN: +SF:src/form-context.tsx +FN:14,useFormContext +FNF:1 +FNH:1 +FNDA:59,useFormContext +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,59 +DA:15,59 +DA:16,59 +LF:16 +LH:16 +BRDA:14,0,0,59 +BRF:1 +BRH:1 +end_of_record +TN: +SF:src/form.tsx +FN:66,Form +FN:113,Form.submit +FN:128,Form.getAttribute +FN:135,Form.setAttribute +FN:157,Form.firstError +FN:166,Form.queueValidation +FN:185,Form.validateTimeout +FN:204,Form.validate +FN:237,Form.validateAttribute +FN:260,Form.getContextValue +FN:212,validateInternal +FN:271,render +FNF:12 +FNH:11 +FNDA:8,Form +FNDA:12,Form.submit +FNDA:58,Form.getAttribute +FNDA:23,Form.setAttribute +FNDA:42,Form.firstError +FNDA:23,Form.queueValidation +FNDA:0,Form.validateTimeout +FNDA:12,Form.validate +FNDA:15,Form.validateAttribute +FNDA:32,Form.getContextValue +FNDA:16,validateInternal +FNDA:32,render +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,1 +DA:40,1 +DA:41,1 +DA:42,1 +DA:43,1 +DA:44,1 +DA:45,1 +DA:46,1 +DA:47,1 +DA:48,1 +DA:49,1 +DA:50,1 +DA:51,1 +DA:52,1 +DA:53,1 +DA:54,1 +DA:55,1 +DA:56,1 +DA:57,1 +DA:58,1 +DA:59,1 +DA:60,1 +DA:61,1 +DA:62,1 +DA:63,1 +DA:64,1 +DA:65,1 +DA:66,8 +DA:67,8 +DA:68,8 +DA:69,8 +DA:70,8 +DA:71,8 +DA:72,8 +DA:73,8 +DA:74,8 +DA:75,8 +DA:76,8 +DA:77,8 +DA:78,8 +DA:79,8 +DA:80,8 +DA:81,8 +DA:82,8 +DA:83,8 +DA:84,8 +DA:85,8 +DA:86,8 +DA:87,8 +DA:88,8 +DA:89,8 +DA:90,8 +DA:91,8 +DA:92,8 +DA:93,8 +DA:94,8 +DA:95,8 +DA:96,8 +DA:97,8 +DA:98,8 +DA:99,8 +DA:100,8 +DA:101,8 +DA:102,8 +DA:103,8 +DA:104,8 +DA:105,8 +DA:106,8 +DA:107,8 +DA:108,8 +DA:109,8 +DA:110,8 +DA:111,8 +DA:112,8 +DA:113,8 +DA:114,12 +DA:115,12 +DA:116,12 +DA:117,1 +DA:118,1 +DA:119,11 +DA:120,11 +DA:121,11 +DA:122,11 +DA:123,8 +DA:124,8 +DA:125,8 +DA:126,8 +DA:127,8 +DA:128,8 +DA:129,58 +DA:130,8 +DA:131,8 +DA:132,8 +DA:133,8 +DA:134,8 +DA:135,8 +DA:136,23 +DA:137,23 +DA:138,23 +DA:139,23 +DA:140,23 +DA:141,23 +DA:142,23 +DA:143,23 +DA:144,0 +DA:145,0 +DA:146,0 +DA:147,0 +DA:148,0 +DA:149,23 +DA:150,23 +DA:151,8 +DA:152,8 +DA:153,8 +DA:154,8 +DA:155,8 +DA:156,8 +DA:157,8 +DA:158,42 +DA:159,8 +DA:160,8 +DA:161,8 +DA:162,8 +DA:163,8 +DA:164,8 +DA:165,8 +DA:166,8 +DA:167,23 +DA:168,8 +DA:169,8 +DA:170,23 +DA:171,23 +DA:172,17 +DA:173,17 +DA:174,23 +DA:175,23 +DA:176,8 +DA:177,8 +DA:178,8 +DA:179,8 +DA:180,8 +DA:181,8 +DA:182,8 +DA:183,8 +DA:184,8 +DA:185,8 +DA:186,0 +DA:187,0 +DA:188,0 +DA:189,0 +DA:190,0 +DA:191,0 +DA:192,0 +DA:193,0 +DA:194,0 +DA:195,0 +DA:196,0 +DA:197,8 +DA:198,8 +DA:199,8 +DA:200,8 +DA:201,8 +DA:202,8 +DA:203,8 +DA:204,8 +DA:205,12 +DA:206,12 +DA:207,12 +DA:208,12 +DA:209,12 +DA:210,8 +DA:211,8 +DA:212,8 +DA:213,16 +DA:214,16 +DA:215,16 +DA:216,16 +DA:217,16 +DA:218,16 +DA:219,19 +DA:220,19 +DA:221,4 +DA:222,4 +DA:223,4 +DA:224,15 +DA:225,15 +DA:226,19 +DA:227,1 +DA:228,1 +DA:229,1 +DA:230,19 +DA:231,16 +DA:232,8 +DA:233,8 +DA:234,8 +DA:235,8 +DA:236,8 +DA:237,8 +DA:238,15 +DA:239,15 +DA:240,2 +DA:241,2 +DA:242,1 +DA:243,1 +DA:244,2 +DA:245,15 +DA:246,15 +DA:247,15 +DA:248,1 +DA:249,1 +DA:250,1 +DA:251,1 +DA:252,1 +DA:253,15 +DA:254,15 +DA:255,8 +DA:256,8 +DA:257,8 +DA:258,8 +DA:259,8 +DA:260,8 +DA:261,32 +DA:262,32 +DA:263,32 +DA:264,32 +DA:265,32 +DA:266,32 +DA:267,32 +DA:268,32 +DA:269,8 +DA:270,8 +DA:271,8 +DA:272,32 +DA:273,32 +DA:274,32 +DA:275,32 +DA:276,32 +DA:277,32 +DA:278,8 +DA:279,1 +DA:280,1 +LF:280 +LH:264 +BRDA:66,0,0,8 +BRDA:113,1,0,12 +BRDA:116,2,0,1 +BRDA:119,3,0,11 +BRDA:128,4,0,58 +BRDA:129,5,0,12 +BRDA:135,6,0,23 +BRDA:143,7,0,0 +BRDA:157,8,0,42 +BRDA:166,9,0,23 +BRDA:167,10,0,8 +BRDA:171,11,0,17 +BRDA:204,12,0,12 +BRDA:237,13,0,15 +BRDA:239,14,0,2 +BRDA:241,15,0,1 +BRDA:242,16,0,0 +BRDA:247,17,0,1 +BRDA:242,18,0,1 +BRDA:260,19,0,32 +BRDA:212,20,0,16 +BRDA:218,21,0,19 +BRDA:219,22,0,5 +BRDA:219,23,0,14 +BRDA:220,24,0,4 +BRDA:224,25,0,15 +BRDA:226,26,0,1 +BRDA:271,27,0,32 +BRF:28 +BRH:26 +end_of_record +TN: +SF:src/index.ts +FNF:0 +FNH:0 +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +LF:8 +LH:8 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/input-group.tsx +FN:12,useTextAttribute +FN:21,onChange +FN:43,InputGroup +FNF:3 +FNH:3 +FNDA:29,useTextAttribute +FNDA:15,onChange +FNDA:29,InputGroup +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,29 +DA:14,29 +DA:15,29 +DA:16,29 +DA:17,29 +DA:18,29 +DA:19,29 +DA:20,29 +DA:21,29 +DA:22,15 +DA:23,29 +DA:24,29 +DA:25,29 +DA:26,29 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,1 +DA:40,1 +DA:41,1 +DA:42,1 +DA:43,1 +DA:44,29 +DA:45,29 +DA:46,1 +DA:47,1 +LF:47 +LH:47 +BRDA:12,0,0,29 +BRDA:21,1,0,15 +BRDA:43,2,0,29 +BRF:3 +BRH:3 +end_of_record +TN: +SF:src/list-group.tsx +FN:22,ListGroup +FN:30,add +FN:38,newItem +FN:55,ListOption +FNF:4 +FNH:3 +FNDA:17,ListGroup +FNDA:2,add +FNDA:0,newItem +FNDA:17,ListOption +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,17 +DA:24,17 +DA:25,17 +DA:26,17 +DA:27,0 +DA:28,0 +DA:29,17 +DA:30,17 +DA:31,2 +DA:32,17 +DA:33,17 +DA:34,17 +DA:35,17 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,1 +DA:40,1 +DA:41,1 +DA:42,1 +DA:43,1 +DA:44,1 +DA:45,1 +DA:46,1 +DA:47,1 +DA:48,1 +DA:49,1 +DA:50,1 +DA:51,1 +DA:52,1 +DA:53,1 +DA:54,1 +DA:55,1 +DA:56,17 +DA:57,17 +DA:58,17 +DA:59,17 +DA:60,17 +DA:61,24 +DA:62,24 +DA:63,24 +DA:64,17 +DA:65,17 +DA:66,17 +DA:67,17 +DA:68,1 +DA:69,1 +LF:69 +LH:67 +BRDA:22,0,0,17 +BRDA:26,1,0,0 +BRDA:30,2,0,2 +BRDA:55,3,0,17 +BRDA:60,4,0,24 +BRF:5 +BRH:4 +end_of_record +TN: +SF:src/radio-group.tsx +FN:29,RadioGroup +FN:40,RadioOption +FN:58,onChange +FNF:3 +FNH:3 +FNDA:3,RadioGroup +FNDA:3,RadioOption +FNDA:2,onChange +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,1 +DA:16,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:29,1 +DA:30,3 +DA:31,3 +DA:32,3 +DA:33,3 +DA:34,3 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,1 +DA:40,1 +DA:41,3 +DA:42,3 +DA:43,3 +DA:44,3 +DA:45,3 +DA:46,3 +DA:47,3 +DA:48,3 +DA:49,3 +DA:50,6 +DA:51,6 +DA:52,6 +DA:53,6 +DA:54,6 +DA:55,6 +DA:56,6 +DA:57,6 +DA:58,6 +DA:59,6 +DA:60,6 +DA:61,3 +DA:62,3 +DA:63,3 +DA:64,3 +DA:65,1 +DA:66,1 +LF:66 +LH:66 +BRDA:29,0,0,3 +BRDA:40,1,0,3 +BRDA:49,2,0,6 +BRDA:58,3,0,2 +BRF:4 +BRH:4 +end_of_record +TN: +SF:src/select-group.tsx +FN:8,filterOptions +FN:14,useSelectAttribute +FN:24,onChange +FN:40,SelectGroup +FNF:4 +FNH:4 +FNDA:1,filterOptions +FNDA:4,useSelectAttribute +FNDA:2,onChange +FNDA:4,SelectGroup +DA:1,1 +DA:2,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:15,4 +DA:16,4 +DA:17,4 +DA:18,4 +DA:19,4 +DA:20,4 +DA:21,4 +DA:22,4 +DA:23,4 +DA:24,4 +DA:25,2 +DA:26,4 +DA:27,4 +DA:28,4 +DA:29,4 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,1 +DA:40,1 +DA:41,4 +DA:42,4 +DA:43,1 +DA:44,1 +LF:44 +LH:44 +BRDA:8,0,0,1 +BRDA:10,1,0,1 +BRDA:11,2,0,1 +BRDA:14,3,0,4 +BRDA:22,4,0,2 +BRDA:22,5,0,2 +BRDA:24,6,0,2 +BRDA:25,7,0,1 +BRDA:25,8,0,1 +BRDA:40,9,0,4 +BRF:10 +BRH:10 +end_of_record diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000..3c2238a --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,197 @@ +/* + * For a detailed explanation regarding each configuration property and type check, visit: + * https://jestjs.io/docs/configuration + */ + +export default { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "/tmp/jest_rs", + + // Automatically clear mock calls, instances, contexts and results before every test + clearMocks: true, + + // Indicates whether the coverage information should be collected while executing the test + // collectCoverage: false, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + collectCoverageFrom: ["src/**/**"], + + // The directory where Jest should output its coverage files + // coverageDirectory: undefined, + + // An array of regexp pattern strings used to skip coverage collection + // coveragePathIgnorePatterns: [ + // "/node_modules/" + // ], + + // Indicates which provider should be used to instrument code for coverage + coverageProvider: "v8", + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // "json", + // "text", + // "lcov", + // "clover" + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: undefined, + + // A path to a custom dependency extractor + // dependencyExtractor: undefined, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // The default configuration for fake timers + // fakeTimers: { + // "enableGlobally": false + // }, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: undefined, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: undefined, + + // A set of global variables that need to be available in all test environments + // globals: {}, + + // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. + // maxWorkers: "50%", + + // An array of directory names to be searched recursively up from the requiring module's location + // moduleDirectories: [ + // "node_modules" + // ], + + // An array of file extensions your modules use + // moduleFileExtensions: [ + // "js", + // "mjs", + // "cjs", + // "jsx", + // "ts", + // "tsx", + // "json", + // "node" + // ], + + // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module + // moduleNameMapper: {}, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + preset: "ts-jest", + + // Run tests from one or more projects + // projects: undefined, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state before every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: undefined, + + // Automatically restore mock state and implementation before every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: undefined, + + // A list of paths to directories that Jest should use to search for files in + // roots: [ + // "" + // ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + + // The number of seconds after which a test is considered as slow and reported as such in the results. + // slowTestThreshold: 5, + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + // testEnvironment: "jsdom", + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + // testMatch: [ + // "**/__tests__/**/*.[jt]s?(x)", + // "**/?(*.)+(spec|test).[tj]s?(x)" + // ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // "/node_modules/" + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: undefined, + + // This option allows use of a custom test runner + // testRunner: "jest-circus/runner", + + // A map from regular expressions to paths to transformers + transform: { + "^.+\\.[jt]s$": "ts-jest", + }, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "/node_modules/", + // "\\.pnp\\.[^\\/]+$" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: undefined, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..272321e --- /dev/null +++ b/package.json @@ -0,0 +1,47 @@ +{ + "name": "@adeattwood/diff-cov", + "version": "0.0.1", + "description": "Simple CLI to get test coverage on a diff", + "main": "./lib/index.js", + "types": "./lib/index.d.ts", + "author": { + "name": "Ade Attwood", + "email": "code@adeattwood.co.uk", + "url": "https://adeattwood.co.uk" + }, + "bin": { + "diff-cov": "./bin/diff-cov.js" + }, + "files": [ + "lib/**/*", + "bin/**/*", + "README.md" + ], + "keywords": [ + "diff", + "coverage", + "lcov" + ], + "scripts": { + "test": "jest", + "lint": "eslint src tests", + "build": "tsc" + }, + "dependencies": { + "@types/node": "^18.11.4", + "yargs": "^17.3.1" + }, + "devDependencies": { + "@types/jest": "^29.1.1", + "@typescript-eslint/eslint-plugin": "^5.38.1", + "@typescript-eslint/parser": "^5.38.1", + "eslint": "^8.25.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.2.1", + "jest": "^29.1.2", + "prettier": "^2.7.1", + "ts-jest": "^29.0.3", + "ts-node": "^10.9.1", + "typescript": "^4.8.4" + } +} diff --git a/src/diff-parser.js b/src/diff-parser.js new file mode 100644 index 0000000..b0ba7fc --- /dev/null +++ b/src/diff-parser.js @@ -0,0 +1,231 @@ +export const parseDiff = (input) => { + if (!input) return []; + if (typeof input !== "string" || input.match(/^\s+$/)) return []; + + const lines = input.split("\n"); + if (lines.length === 0) return []; + + const files = []; + let currentFile = null; + let currentChunk = null; + let deletedLineCounter = 0; + let addedLineCounter = 0; + let currentFileChanges = null; + + const normal = (line) => { + currentChunk?.changes.push({ + type: "normal", + normal: true, + ln1: deletedLineCounter++, + ln2: addedLineCounter++, + content: line, + }); + currentFileChanges.oldLines--; + currentFileChanges.newLines--; + }; + + const start = (line) => { + const [fromFileName, toFileName] = parseFiles(line) ?? []; + + currentFile = { + chunks: [], + deletions: 0, + additions: 0, + from: fromFileName, + to: toFileName, + }; + + files.push(currentFile); + }; + + const restart = () => { + if (!currentFile || currentFile.chunks.length) start(); + }; + + const newFile = () => { + restart(); + currentFile.new = true; + currentFile.from = "/dev/null"; + }; + + const deletedFile = () => { + restart(); + currentFile.deleted = true; + currentFile.to = "/dev/null"; + }; + + const index = (line) => { + restart(); + currentFile.index = line.split(" ").slice(1); + }; + + const fromFile = (line) => { + restart(); + currentFile.from = parseOldOrNewFile(line); + }; + + const toFile = (line) => { + restart(); + currentFile.to = parseOldOrNewFile(line); + }; + + const toNumOfLines = (number) => +(number || 1); + + const chunk = (line, match) => { + if (!currentFile) return; + + const [oldStart, oldNumLines, newStart, newNumLines] = match.slice(1); + + deletedLineCounter = +oldStart; + addedLineCounter = +newStart; + currentChunk = { + content: line, + changes: [], + oldStart: +oldStart, + oldLines: toNumOfLines(oldNumLines), + newStart: +newStart, + newLines: toNumOfLines(newNumLines), + }; + currentFileChanges = { + oldLines: toNumOfLines(oldNumLines), + newLines: toNumOfLines(newNumLines), + }; + currentFile.chunks.push(currentChunk); + }; + + const del = (line) => { + if (!currentChunk) return; + + currentChunk.changes.push({ + type: "del", + del: true, + ln: deletedLineCounter++, + content: line, + }); + currentFile.deletions++; + currentFileChanges.oldLines--; + }; + + const add = (line) => { + if (!currentChunk) return; + + currentChunk.changes.push({ + type: "add", + add: true, + ln: addedLineCounter++, + content: line, + }); + currentFile.additions++; + currentFileChanges.newLines--; + }; + + const eof = (line) => { + if (!currentChunk) return; + + const [mostRecentChange] = currentChunk.changes.slice(-1); + + currentChunk.changes.push({ + type: mostRecentChange.type, + [mostRecentChange.type]: true, + ln1: mostRecentChange.ln1, + ln2: mostRecentChange.ln2, + ln: mostRecentChange.ln, + content: line, + }); + }; + + const schemaHeaders = [ + [/^diff\s/, start], + [/^new file mode \d+$/, newFile], + [/^deleted file mode \d+$/, deletedFile], + [/^index\s[\da-zA-Z]+\.\.[\da-zA-Z]+(\s(\d+))?$/, index], + [/^---\s/, fromFile], + [/^\+\+\+\s/, toFile], + [/^@@\s+-(\d+),?(\d+)?\s+\+(\d+),?(\d+)?\s@@/, chunk], + [/^\\ No newline at end of file$/, eof], + ]; + + const schemaContent = [ + [/^-/, del], + [/^\+/, add], + [/^\s+/, normal], + ]; + + const parseContentLine = (line) => { + for (const [pattern, handler] of schemaContent) { + const match = line.match(pattern); + if (match) { + handler(line, match); + break; + } + } + if (currentFileChanges.oldLines === 0 && currentFileChanges.newLines === 0) { + currentFileChanges = null; + } + }; + + const parseHeaderLine = (line) => { + for (const [pattern, handler] of schemaHeaders) { + const match = line.match(pattern); + if (match) { + handler(line, match); + break; + } + } + }; + + const parseLine = (line) => { + if (currentFileChanges) { + parseContentLine(line); + } else { + parseHeaderLine(line); + } + return; + }; + + for (const line of lines) parseLine(line); + + return files; +}; + +const fileNameDiffRegex = /a\/.*(?=["']? ["']?b\/)|b\/.*$/g; +const gitFileHeaderRegex = /^(a|b)\//; +const parseFiles = (line) => { + let fileNames = line?.match(fileNameDiffRegex); + return fileNames?.map((fileName) => fileName.replace(gitFileHeaderRegex, "").replace(/("|')$/, "")); +}; + +const qoutedFileNameRegex = /^\\?['"]|\\?['"]$/g; +const parseOldOrNewFile = (line) => { + let fileName = leftTrimChars(line, "-+").trim(); + fileName = removeTimeStamp(fileName); + return fileName.replace(qoutedFileNameRegex, "").replace(gitFileHeaderRegex, ""); +}; + +const leftTrimChars = (string, trimmingChars) => { + string = makeString(string); + if (!trimmingChars && String.prototype.trimLeft) return string.trimLeft(); + + let trimmingString = formTrimmingString(trimmingChars); + + return string.replace(new RegExp(`^${trimmingString}+`), ""); +}; + +const timeStampRegex = /\t.*|\d{4}-\d\d-\d\d\s\d\d:\d\d:\d\d(.\d+)?\s(\+|-)\d\d\d\d/; +const removeTimeStamp = (string) => { + const timeStamp = timeStampRegex.exec(string); + if (timeStamp) { + string = string.substring(0, timeStamp.index).trim(); + } + return string; +}; + +const formTrimmingString = (trimmingChars) => { + if (trimmingChars === null || trimmingChars === undefined) return "\\s"; + else if (trimmingChars instanceof RegExp) return trimmingChars.source; + return `[${makeString(trimmingChars).replace(/([.*+?^=!:${}()|[\]/\\])/g, "\\$1")}]`; +}; + +const makeString = (itemToConvert) => (itemToConvert ?? "") + ""; + +export default parseDiff; diff --git a/src/exec.ts b/src/exec.ts new file mode 100644 index 0000000..9d53641 --- /dev/null +++ b/src/exec.ts @@ -0,0 +1,28 @@ +import { exec, ExecException } from "child_process"; + +interface ExecResult { + code: number; + stderr: string; + stdout: string; +} + +const getCode = (error: ExecException | null) => { + if (!error) { + return 0; + } + + return error.code || 127; +}; + +export const run = (command: string) => + new Promise((resolve) => { + exec(command, (error, stdout, stderr) => { + resolve({ + code: getCode(error), + stderr, + stdout, + }); + }); + }); + +export default run; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..754ed11 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,37 @@ +import yargs from "yargs"; +import type { Options } from "yargs"; +import { hideBin } from "yargs/helpers"; +import exec from "./exec"; + +import report from "./report"; + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const parseDiff = require("./diff-parser"); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const parseLcov = require("./lcov-parser"); + +export const error = (message: string) => { + console.error(message); +}; + +const options: { [key: string]: Options } = { + coverageFile: { + default: "./lcov.info", + description: "The path to the lcov report file", + type: "string", + }, +}; + +export const run = async (argv = process.argv) => { + const parsed: any = yargs(hideBin(argv)).options(options).argv; + + const diffText = await exec(`git diff origin/HEAD...HEAD`); + if (diffText.code > 0) { + return error("Error loading the diff\n\n" + diffText.stderr); + } + + const diff = parseDiff.default(diffText.stdout); + const coverage = await parseLcov.default(parsed.coverageFile); + + report(diff, coverage); +}; diff --git a/src/lcov-parser.js b/src/lcov-parser.js new file mode 100644 index 0000000..9ef4c75 --- /dev/null +++ b/src/lcov-parser.js @@ -0,0 +1,130 @@ +/* +Copyright (c) 2012, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://yuilibrary.com/license/ +*/ + +import fs from "fs"; + +const exists = fs.exists; + +var walkFile = function (str, cb) { + var data = [], + item; + + ["end_of_record"].concat(str.split("\n")).forEach(function (line) { + line = line.trim(); + var allparts = line.split(":"), + parts = [allparts.shift(), allparts.join(":")], + lines, + fn; + + switch (parts[0].toUpperCase()) { + case "TN": + item.title = parts[1].trim(); + break; + case "SF": + item.file = parts.slice(1).join(":").trim(); + break; + case "FNF": + item.functions.found = Number(parts[1].trim()); + break; + case "FNH": + item.functions.hit = Number(parts[1].trim()); + break; + case "LF": + item.lines.found = Number(parts[1].trim()); + break; + case "LH": + item.lines.hit = Number(parts[1].trim()); + break; + case "DA": + lines = parts[1].split(","); + item.lines.details.push({ + line: Number(lines[0]), + hit: Number(lines[1]), + }); + break; + case "FN": + fn = parts[1].split(","); + item.functions.details.push({ + name: fn[1], + line: Number(fn[0]), + }); + break; + case "FNDA": + fn = parts[1].split(","); + item.functions.details.some(function (i, k) { + if (i.name === fn[1] && i.hit === undefined) { + item.functions.details[k].hit = Number(fn[0]); + return true; + } + }); + break; + case "BRDA": + fn = parts[1].split(","); + item.branches.details.push({ + line: Number(fn[0]), + block: Number(fn[1]), + branch: Number(fn[2]), + taken: fn[3] === "-" ? 0 : Number(fn[3]), + }); + break; + case "BRF": + item.branches.found = Number(parts[1]); + break; + case "BRH": + item.branches.hit = Number(parts[1]); + break; + } + + if (line.indexOf("end_of_record") > -1) { + data.push(item); + item = { + lines: { + found: 0, + hit: 0, + details: [], + }, + functions: { + hit: 0, + found: 0, + details: [], + }, + branches: { + hit: 0, + found: 0, + details: [], + }, + }; + } + }); + + data.shift(); + + if (data.length) { + cb(null, data); + } else { + cb("Failed to parse string"); + } +}; + +const parseInternal = function (file, cb) { + exists(file, function (x) { + if (!x) { + return walkFile(file, cb); + } + fs.readFile(file, "utf8", function (err, str) { + walkFile(str, cb); + }); + }); +}; + +export const parse = (file) => + new Promise((resolve, reject) => { + parseInternal(file, (error, coverage) => { + error ? reject(error) : resolve(coverage); + }); + }); + +export default parse; diff --git a/src/report.ts b/src/report.ts new file mode 100644 index 0000000..923e2ce --- /dev/null +++ b/src/report.ts @@ -0,0 +1,84 @@ +const getCoverageForFile = (file: any, coverage: any) => { + for (const cov of coverage) { + const report: { [k: number]: number } = {}; + if (cov.file === file.to) { + for (const detail of cov.lines.details) { + report[detail.line] = detail.hit; + } + + for (const detail of cov.functions.details) { + if (!report[detail.line]) { + report[detail.line] = detail.hit; + } + } + + return report; + } + } +}; + +interface Change { + type: string; + ln: number; + ln2: number; + content: string; +} + +interface Chunk { + content: string; + changes: Change[]; +} + +interface Diff { + to: string; + chunks: Chunk[]; +} + +export const printReport = (diff: Diff[], coverage: any) => { + const report = { total: 0, covered: 0 }; + + for (const file of diff) { + const fileCoverage = getCoverageForFile(file, coverage); + if (typeof fileCoverage === "undefined") { + continue; + } + + console.log(); + console.log(file.to); + + for (const chunk of file.chunks) { + console.log(); + console.log(chunk.content); + console.log(); + for (const change of chunk.changes) { + if (change.type === "del") { + continue; + } + const line = change.ln || change.ln2; + let color = "\x1b[0m"; + if (typeof fileCoverage[line] !== "undefined") { + color = fileCoverage[line] > 0 ? "\x1b[32m" : "\x1b[31m"; + + report.total++; + if (fileCoverage[line] > 0) { + report.covered++; + } + } + + console.log(line.toString().padStart(4, " "), color, change.content.substring(1), "\x1b[0m"); + } + } + } + + const percentage = (report.covered / report.total) * 100; + const color = percentage > 90 ? "\x1b[32m" : "\x1b[31m"; + + console.log(""); + console.log("Total Lines: ", report.total.toString()); + console.log("Lines Covered: ", report.covered.toString()); + console.log("Coverage Percentage", color, percentage.toString() + "%", "\x1b[0m"); + + return report; +}; + +export default printReport; diff --git a/tests/__snapshots__/parse-diff.spec.ts.snap b/tests/__snapshots__/parse-diff.spec.ts.snap new file mode 100644 index 0000000..6dae6bd --- /dev/null +++ b/tests/__snapshots__/parse-diff.spec.ts.snap @@ -0,0 +1,231 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`parse 1.diff 1`] = ` +[ + { + "additions": 5, + "chunks": [ + { + "changes": [ + { + "add": true, + "content": "+export * from "./attribute-context";", + "ln": 1, + "type": "add", + }, + { + "add": true, + "content": "+export * from "./check-group";", + "ln": 2, + "type": "add", + }, + { + "add": true, + "content": "+export * from "./form-context";", + "ln": 3, + "type": "add", + }, + { + "content": " export * from "./form";", + "ln1": 1, + "ln2": 4, + "normal": true, + "type": "normal", + }, + { + "content": " export * from "./input-group";", + "ln1": 2, + "ln2": 5, + "normal": true, + "type": "normal", + }, + { + "add": true, + "content": "+export * from "./list-group";", + "ln": 6, + "type": "add", + }, + { + "add": true, + "content": "+export * from "./radio-group";", + "ln": 7, + "type": "add", + }, + { + "content": " export * from "./select-group";", + "ln1": 3, + "ln2": 8, + "normal": true, + "type": "normal", + }, + ], + "content": "@@ -1,3 +1,8 @@", + "newLines": 8, + "newStart": 1, + "oldLines": 3, + "oldStart": 1, + }, + ], + "deletions": 0, + "from": "src/index.ts", + "index": [ + "d70a331..9515bb8", + "100644", + ], + "to": "src/index.ts", + }, + { + "additions": 22, + "chunks": [ + { + "changes": [ + { + "add": true, + "content": "+import * as ReactForm from "../src";", + "ln": 1, + "type": "add", + }, + { + "add": true, + "content": "+", + "ln": 2, + "type": "add", + }, + { + "add": true, + "content": "+test.each([", + "ln": 3, + "type": "add", + }, + { + "add": true, + "content": "+ // Components", + "ln": 4, + "type": "add", + }, + { + "add": true, + "content": "+ "CheckGroup",", + "ln": 5, + "type": "add", + }, + { + "add": true, + "content": "+ "Form",", + "ln": 6, + "type": "add", + }, + { + "add": true, + "content": "+ "InputGroup",", + "ln": 7, + "type": "add", + }, + { + "add": true, + "content": "+ "ListGroup",", + "ln": 8, + "type": "add", + }, + { + "add": true, + "content": "+ "ListOption",", + "ln": 9, + "type": "add", + }, + { + "add": true, + "content": "+ "RadioGroup",", + "ln": 10, + "type": "add", + }, + { + "add": true, + "content": "+ "RadioOption",", + "ln": 11, + "type": "add", + }, + { + "add": true, + "content": "+ "SelectGroup",", + "ln": 12, + "type": "add", + }, + { + "add": true, + "content": "+", + "ln": 13, + "type": "add", + }, + { + "add": true, + "content": "+ // Hooks", + "ln": 14, + "type": "add", + }, + { + "add": true, + "content": "+ "useAttributeContext",", + "ln": 15, + "type": "add", + }, + { + "add": true, + "content": "+ "useCheckboxAttribute",", + "ln": 16, + "type": "add", + }, + { + "add": true, + "content": "+ "useFormContext",", + "ln": 17, + "type": "add", + }, + { + "add": true, + "content": "+ "useSelectAttribute",", + "ln": 18, + "type": "add", + }, + { + "add": true, + "content": "+ "useTextAttribute",", + "ln": 19, + "type": "add", + }, + { + "add": true, + "content": "+])("'%s' is exported from the index file", (variable: string) => {", + "ln": 20, + "type": "add", + }, + { + "add": true, + "content": "+ expect(ReactForm[variable as keyof typeof ReactForm]).not.toBeUndefined();", + "ln": 21, + "type": "add", + }, + { + "add": true, + "content": "+});", + "ln": 22, + "type": "add", + }, + ], + "content": "@@ -0,0 +1,22 @@", + "newLines": 22, + "newStart": 1, + "oldLines": 0, + "oldStart": 0, + }, + ], + "deletions": 0, + "from": "/dev/null", + "index": [ + "0000000..778e42f", + ], + "new": true, + "to": "tests/index.spec.tsx", + }, +] +`; diff --git a/tests/__snapshots__/parse-lcov.spec.ts.snap b/tests/__snapshots__/parse-lcov.spec.ts.snap new file mode 100644 index 0000000..683b873 --- /dev/null +++ b/tests/__snapshots__/parse-lcov.spec.ts.snap @@ -0,0 +1,3792 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`parse 1.lcov.info 1`] = ` +[ + { + "branches": { + "details": [ + { + "block": 0, + "branch": 0, + "line": 22, + "taken": 20, + }, + { + "block": 1, + "branch": 0, + "line": 30, + "taken": 20, + }, + ], + "found": 2, + "hit": 2, + }, + "file": "src/attribute-context.tsx", + "functions": { + "details": [ + { + "hit": 20, + "line": 22, + "name": "AttributeContextProvider", + }, + { + "hit": 20, + "line": 30, + "name": "useAttributeContext", + }, + ], + "found": 2, + "hit": 2, + }, + "lines": { + "details": [ + { + "hit": 1, + "line": 1, + }, + { + "hit": 1, + "line": 2, + }, + { + "hit": 1, + "line": 3, + }, + { + "hit": 1, + "line": 4, + }, + { + "hit": 1, + "line": 5, + }, + { + "hit": 1, + "line": 6, + }, + { + "hit": 1, + "line": 7, + }, + { + "hit": 1, + "line": 8, + }, + { + "hit": 1, + "line": 9, + }, + { + "hit": 1, + "line": 10, + }, + { + "hit": 1, + "line": 11, + }, + { + "hit": 1, + "line": 12, + }, + { + "hit": 1, + "line": 13, + }, + { + "hit": 1, + "line": 14, + }, + { + "hit": 1, + "line": 15, + }, + { + "hit": 1, + "line": 16, + }, + { + "hit": 1, + "line": 17, + }, + { + "hit": 1, + "line": 18, + }, + { + "hit": 1, + "line": 19, + }, + { + "hit": 1, + "line": 20, + }, + { + "hit": 1, + "line": 21, + }, + { + "hit": 20, + "line": 22, + }, + { + "hit": 20, + "line": 23, + }, + { + "hit": 20, + "line": 24, + }, + { + "hit": 20, + "line": 25, + }, + { + "hit": 1, + "line": 26, + }, + { + "hit": 1, + "line": 27, + }, + { + "hit": 1, + "line": 28, + }, + { + "hit": 1, + "line": 29, + }, + { + "hit": 20, + "line": 30, + }, + { + "hit": 20, + "line": 31, + }, + { + "hit": 20, + "line": 32, + }, + ], + "found": 32, + "hit": 32, + }, + "title": "", + }, + { + "branches": { + "details": [ + { + "block": 0, + "branch": 0, + "line": 1, + "taken": 0, + }, + ], + "found": 1, + "hit": 0, + }, + "file": "src/attribute-hook.ts", + "functions": { + "details": [ + { + "hit": 0, + "line": 1, + "name": "(empty-report)", + }, + ], + "found": 1, + "hit": 0, + }, + "lines": { + "details": [ + { + "hit": 0, + "line": 1, + }, + { + "hit": 0, + "line": 2, + }, + { + "hit": 0, + "line": 3, + }, + { + "hit": 0, + "line": 4, + }, + { + "hit": 0, + "line": 5, + }, + { + "hit": 0, + "line": 6, + }, + { + "hit": 0, + "line": 7, + }, + { + "hit": 0, + "line": 8, + }, + { + "hit": 0, + "line": 9, + }, + { + "hit": 0, + "line": 10, + }, + { + "hit": 0, + "line": 11, + }, + { + "hit": 0, + "line": 12, + }, + { + "hit": 0, + "line": 13, + }, + { + "hit": 0, + "line": 14, + }, + { + "hit": 0, + "line": 15, + }, + { + "hit": 0, + "line": 16, + }, + { + "hit": 0, + "line": 17, + }, + { + "hit": 0, + "line": 18, + }, + { + "hit": 0, + "line": 19, + }, + { + "hit": 0, + "line": 20, + }, + { + "hit": 0, + "line": 21, + }, + { + "hit": 0, + "line": 22, + }, + { + "hit": 0, + "line": 23, + }, + { + "hit": 0, + "line": 24, + }, + { + "hit": 0, + "line": 25, + }, + { + "hit": 0, + "line": 26, + }, + { + "hit": 0, + "line": 27, + }, + { + "hit": 0, + "line": 28, + }, + { + "hit": 0, + "line": 29, + }, + { + "hit": 0, + "line": 30, + }, + { + "hit": 0, + "line": 31, + }, + { + "hit": 0, + "line": 32, + }, + { + "hit": 0, + "line": 33, + }, + { + "hit": 0, + "line": 34, + }, + { + "hit": 0, + "line": 35, + }, + { + "hit": 0, + "line": 36, + }, + { + "hit": 0, + "line": 37, + }, + { + "hit": 0, + "line": 38, + }, + { + "hit": 0, + "line": 39, + }, + { + "hit": 0, + "line": 40, + }, + { + "hit": 0, + "line": 41, + }, + { + "hit": 0, + "line": 42, + }, + { + "hit": 0, + "line": 43, + }, + { + "hit": 0, + "line": 44, + }, + { + "hit": 0, + "line": 45, + }, + { + "hit": 0, + "line": 46, + }, + { + "hit": 0, + "line": 47, + }, + ], + "found": 47, + "hit": 0, + }, + "title": "", + }, + { + "branches": { + "details": [ + { + "block": 0, + "branch": 0, + "line": 1, + "taken": 0, + }, + ], + "found": 1, + "hit": 0, + }, + "file": "src/base-group-props.ts", + "functions": { + "details": [ + { + "hit": 0, + "line": 1, + "name": "(empty-report)", + }, + ], + "found": 1, + "hit": 0, + }, + "lines": { + "details": [ + { + "hit": 0, + "line": 1, + }, + { + "hit": 0, + "line": 2, + }, + { + "hit": 0, + "line": 3, + }, + { + "hit": 0, + "line": 4, + }, + { + "hit": 0, + "line": 5, + }, + { + "hit": 0, + "line": 6, + }, + { + "hit": 0, + "line": 7, + }, + { + "hit": 0, + "line": 8, + }, + { + "hit": 0, + "line": 9, + }, + { + "hit": 0, + "line": 10, + }, + { + "hit": 0, + "line": 11, + }, + { + "hit": 0, + "line": 12, + }, + { + "hit": 0, + "line": 13, + }, + ], + "found": 13, + "hit": 0, + }, + "title": "", + }, + { + "branches": { + "details": [ + { + "block": 0, + "branch": 0, + "line": 8, + "taken": 3, + }, + { + "block": 1, + "branch": 0, + "line": 18, + "taken": 2, + }, + { + "block": 2, + "branch": 0, + "line": 37, + "taken": 3, + }, + ], + "found": 3, + "hit": 3, + }, + "file": "src/check-group.tsx", + "functions": { + "details": [ + { + "hit": 3, + "line": 8, + "name": "useCheckboxAttribute", + }, + { + "hit": 2, + "line": 18, + "name": "onChange", + }, + { + "hit": 3, + "line": 37, + "name": "CheckGroup", + }, + ], + "found": 3, + "hit": 3, + }, + "lines": { + "details": [ + { + "hit": 1, + "line": 1, + }, + { + "hit": 1, + "line": 2, + }, + { + "hit": 1, + "line": 3, + }, + { + "hit": 1, + "line": 4, + }, + { + "hit": 1, + "line": 5, + }, + { + "hit": 1, + "line": 6, + }, + { + "hit": 1, + "line": 7, + }, + { + "hit": 1, + "line": 8, + }, + { + "hit": 3, + "line": 9, + }, + { + "hit": 3, + "line": 10, + }, + { + "hit": 3, + "line": 11, + }, + { + "hit": 3, + "line": 12, + }, + { + "hit": 3, + "line": 13, + }, + { + "hit": 3, + "line": 14, + }, + { + "hit": 3, + "line": 15, + }, + { + "hit": 3, + "line": 16, + }, + { + "hit": 3, + "line": 17, + }, + { + "hit": 3, + "line": 18, + }, + { + "hit": 2, + "line": 19, + }, + { + "hit": 3, + "line": 20, + }, + { + "hit": 3, + "line": 21, + }, + { + "hit": 3, + "line": 22, + }, + { + "hit": 3, + "line": 23, + }, + { + "hit": 1, + "line": 24, + }, + { + "hit": 1, + "line": 25, + }, + { + "hit": 1, + "line": 26, + }, + { + "hit": 1, + "line": 27, + }, + { + "hit": 1, + "line": 28, + }, + { + "hit": 1, + "line": 29, + }, + { + "hit": 1, + "line": 30, + }, + { + "hit": 1, + "line": 31, + }, + { + "hit": 1, + "line": 32, + }, + { + "hit": 1, + "line": 33, + }, + { + "hit": 1, + "line": 34, + }, + { + "hit": 1, + "line": 35, + }, + { + "hit": 1, + "line": 36, + }, + { + "hit": 1, + "line": 37, + }, + { + "hit": 3, + "line": 38, + }, + { + "hit": 3, + "line": 39, + }, + { + "hit": 1, + "line": 40, + }, + { + "hit": 1, + "line": 41, + }, + ], + "found": 41, + "hit": 41, + }, + "title": "", + }, + { + "branches": { + "details": [ + { + "block": 0, + "branch": 0, + "line": 15, + "taken": 104, + }, + { + "block": 1, + "branch": 0, + "line": 16, + "taken": 1, + }, + { + "block": 2, + "branch": 0, + "line": 19, + "taken": 103, + }, + { + "block": 3, + "branch": 0, + "line": 20, + "taken": 60, + }, + { + "block": 4, + "branch": 0, + "line": 23, + "taken": 103, + }, + { + "block": 5, + "branch": 0, + "line": 24, + "taken": 131, + }, + { + "block": 6, + "branch": 0, + "line": 26, + "taken": 49, + }, + { + "block": 7, + "branch": 0, + "line": 30, + "taken": 54, + }, + { + "block": 8, + "branch": 0, + "line": 37, + "taken": 25, + }, + { + "block": 9, + "branch": 0, + "line": 38, + "taken": 0, + }, + { + "block": 10, + "branch": 0, + "line": 46, + "taken": 16, + }, + { + "block": 11, + "branch": 0, + "line": 48, + "taken": 0, + }, + { + "block": 12, + "branch": 0, + "line": 52, + "taken": 1, + }, + { + "block": 13, + "branch": 0, + "line": 60, + "taken": 0, + }, + ], + "found": 14, + "hit": 11, + }, + "file": "src/dot-notation.ts", + "functions": { + "details": [ + { + "hit": 104, + "line": 15, + "name": "get", + }, + { + "hit": 25, + "line": 37, + "name": "set", + }, + ], + "found": 2, + "hit": 2, + }, + "lines": { + "details": [ + { + "hit": 1, + "line": 1, + }, + { + "hit": 1, + "line": 2, + }, + { + "hit": 1, + "line": 3, + }, + { + "hit": 1, + "line": 4, + }, + { + "hit": 1, + "line": 5, + }, + { + "hit": 1, + "line": 6, + }, + { + "hit": 1, + "line": 7, + }, + { + "hit": 1, + "line": 8, + }, + { + "hit": 1, + "line": 9, + }, + { + "hit": 1, + "line": 10, + }, + { + "hit": 1, + "line": 11, + }, + { + "hit": 1, + "line": 12, + }, + { + "hit": 1, + "line": 13, + }, + { + "hit": 1, + "line": 14, + }, + { + "hit": 104, + "line": 15, + }, + { + "hit": 104, + "line": 16, + }, + { + "hit": 1, + "line": 17, + }, + { + "hit": 1, + "line": 18, + }, + { + "hit": 103, + "line": 19, + }, + { + "hit": 104, + "line": 20, + }, + { + "hit": 60, + "line": 21, + }, + { + "hit": 60, + "line": 22, + }, + { + "hit": 103, + "line": 23, + }, + { + "hit": 104, + "line": 24, + }, + { + "hit": 131, + "line": 25, + }, + { + "hit": 131, + "line": 26, + }, + { + "hit": 49, + "line": 27, + }, + { + "hit": 49, + "line": 28, + }, + { + "hit": 131, + "line": 29, + }, + { + "hit": 54, + "line": 30, + }, + { + "hit": 54, + "line": 31, + }, + { + "hit": 54, + "line": 32, + }, + { + "hit": 1, + "line": 33, + }, + { + "hit": 1, + "line": 34, + }, + { + "hit": 1, + "line": 35, + }, + { + "hit": 1, + "line": 36, + }, + { + "hit": 25, + "line": 37, + }, + { + "hit": 25, + "line": 38, + }, + { + "hit": 0, + "line": 39, + }, + { + "hit": 0, + "line": 40, + }, + { + "hit": 25, + "line": 41, + }, + { + "hit": 25, + "line": 42, + }, + { + "hit": 25, + "line": 43, + }, + { + "hit": 25, + "line": 44, + }, + { + "hit": 25, + "line": 45, + }, + { + "hit": 25, + "line": 46, + }, + { + "hit": 16, + "line": 47, + }, + { + "hit": 16, + "line": 48, + }, + { + "hit": 0, + "line": 49, + }, + { + "hit": 0, + "line": 50, + }, + { + "hit": 16, + "line": 51, + }, + { + "hit": 16, + "line": 52, + }, + { + "hit": 1, + "line": 53, + }, + { + "hit": 1, + "line": 54, + }, + { + "hit": 16, + "line": 55, + }, + { + "hit": 16, + "line": 56, + }, + { + "hit": 16, + "line": 57, + }, + { + "hit": 25, + "line": 58, + }, + { + "hit": 25, + "line": 59, + }, + { + "hit": 25, + "line": 60, + }, + { + "hit": 0, + "line": 61, + }, + { + "hit": 0, + "line": 62, + }, + { + "hit": 25, + "line": 63, + }, + { + "hit": 25, + "line": 64, + }, + { + "hit": 25, + "line": 65, + }, + ], + "found": 65, + "hit": 59, + }, + "title": "", + }, + { + "branches": { + "details": [ + { + "block": 0, + "branch": 0, + "line": 14, + "taken": 59, + }, + ], + "found": 1, + "hit": 1, + }, + "file": "src/form-context.tsx", + "functions": { + "details": [ + { + "hit": 59, + "line": 14, + "name": "useFormContext", + }, + ], + "found": 1, + "hit": 1, + }, + "lines": { + "details": [ + { + "hit": 1, + "line": 1, + }, + { + "hit": 1, + "line": 2, + }, + { + "hit": 1, + "line": 3, + }, + { + "hit": 1, + "line": 4, + }, + { + "hit": 1, + "line": 5, + }, + { + "hit": 1, + "line": 6, + }, + { + "hit": 1, + "line": 7, + }, + { + "hit": 1, + "line": 8, + }, + { + "hit": 1, + "line": 9, + }, + { + "hit": 1, + "line": 10, + }, + { + "hit": 1, + "line": 11, + }, + { + "hit": 1, + "line": 12, + }, + { + "hit": 1, + "line": 13, + }, + { + "hit": 59, + "line": 14, + }, + { + "hit": 59, + "line": 15, + }, + { + "hit": 59, + "line": 16, + }, + ], + "found": 16, + "hit": 16, + }, + "title": "", + }, + { + "branches": { + "details": [ + { + "block": 0, + "branch": 0, + "line": 66, + "taken": 8, + }, + { + "block": 1, + "branch": 0, + "line": 113, + "taken": 12, + }, + { + "block": 2, + "branch": 0, + "line": 116, + "taken": 1, + }, + { + "block": 3, + "branch": 0, + "line": 119, + "taken": 11, + }, + { + "block": 4, + "branch": 0, + "line": 128, + "taken": 58, + }, + { + "block": 5, + "branch": 0, + "line": 129, + "taken": 12, + }, + { + "block": 6, + "branch": 0, + "line": 135, + "taken": 23, + }, + { + "block": 7, + "branch": 0, + "line": 143, + "taken": 0, + }, + { + "block": 8, + "branch": 0, + "line": 157, + "taken": 42, + }, + { + "block": 9, + "branch": 0, + "line": 166, + "taken": 23, + }, + { + "block": 10, + "branch": 0, + "line": 167, + "taken": 8, + }, + { + "block": 11, + "branch": 0, + "line": 171, + "taken": 17, + }, + { + "block": 12, + "branch": 0, + "line": 204, + "taken": 12, + }, + { + "block": 13, + "branch": 0, + "line": 237, + "taken": 15, + }, + { + "block": 14, + "branch": 0, + "line": 239, + "taken": 2, + }, + { + "block": 15, + "branch": 0, + "line": 241, + "taken": 1, + }, + { + "block": 16, + "branch": 0, + "line": 242, + "taken": 0, + }, + { + "block": 17, + "branch": 0, + "line": 247, + "taken": 1, + }, + { + "block": 18, + "branch": 0, + "line": 242, + "taken": 1, + }, + { + "block": 19, + "branch": 0, + "line": 260, + "taken": 32, + }, + { + "block": 20, + "branch": 0, + "line": 212, + "taken": 16, + }, + { + "block": 21, + "branch": 0, + "line": 218, + "taken": 19, + }, + { + "block": 22, + "branch": 0, + "line": 219, + "taken": 5, + }, + { + "block": 23, + "branch": 0, + "line": 219, + "taken": 14, + }, + { + "block": 24, + "branch": 0, + "line": 220, + "taken": 4, + }, + { + "block": 25, + "branch": 0, + "line": 224, + "taken": 15, + }, + { + "block": 26, + "branch": 0, + "line": 226, + "taken": 1, + }, + { + "block": 27, + "branch": 0, + "line": 271, + "taken": 32, + }, + ], + "found": 28, + "hit": 26, + }, + "file": "src/form.tsx", + "functions": { + "details": [ + { + "hit": 8, + "line": 66, + "name": "Form", + }, + { + "hit": 12, + "line": 113, + "name": "Form.submit", + }, + { + "hit": 58, + "line": 128, + "name": "Form.getAttribute", + }, + { + "hit": 23, + "line": 135, + "name": "Form.setAttribute", + }, + { + "hit": 42, + "line": 157, + "name": "Form.firstError", + }, + { + "hit": 23, + "line": 166, + "name": "Form.queueValidation", + }, + { + "hit": 0, + "line": 185, + "name": "Form.validateTimeout", + }, + { + "hit": 12, + "line": 204, + "name": "Form.validate", + }, + { + "hit": 15, + "line": 237, + "name": "Form.validateAttribute", + }, + { + "hit": 32, + "line": 260, + "name": "Form.getContextValue", + }, + { + "hit": 16, + "line": 212, + "name": "validateInternal", + }, + { + "hit": 32, + "line": 271, + "name": "render", + }, + ], + "found": 12, + "hit": 11, + }, + "lines": { + "details": [ + { + "hit": 1, + "line": 1, + }, + { + "hit": 1, + "line": 2, + }, + { + "hit": 1, + "line": 3, + }, + { + "hit": 1, + "line": 4, + }, + { + "hit": 1, + "line": 5, + }, + { + "hit": 1, + "line": 6, + }, + { + "hit": 1, + "line": 7, + }, + { + "hit": 1, + "line": 8, + }, + { + "hit": 1, + "line": 9, + }, + { + "hit": 1, + "line": 10, + }, + { + "hit": 1, + "line": 11, + }, + { + "hit": 1, + "line": 12, + }, + { + "hit": 1, + "line": 13, + }, + { + "hit": 1, + "line": 14, + }, + { + "hit": 1, + "line": 15, + }, + { + "hit": 1, + "line": 16, + }, + { + "hit": 1, + "line": 17, + }, + { + "hit": 1, + "line": 18, + }, + { + "hit": 1, + "line": 19, + }, + { + "hit": 1, + "line": 20, + }, + { + "hit": 1, + "line": 21, + }, + { + "hit": 1, + "line": 22, + }, + { + "hit": 1, + "line": 23, + }, + { + "hit": 1, + "line": 24, + }, + { + "hit": 1, + "line": 25, + }, + { + "hit": 1, + "line": 26, + }, + { + "hit": 1, + "line": 27, + }, + { + "hit": 1, + "line": 28, + }, + { + "hit": 1, + "line": 29, + }, + { + "hit": 1, + "line": 30, + }, + { + "hit": 1, + "line": 31, + }, + { + "hit": 1, + "line": 32, + }, + { + "hit": 1, + "line": 33, + }, + { + "hit": 1, + "line": 34, + }, + { + "hit": 1, + "line": 35, + }, + { + "hit": 1, + "line": 36, + }, + { + "hit": 1, + "line": 37, + }, + { + "hit": 1, + "line": 38, + }, + { + "hit": 1, + "line": 39, + }, + { + "hit": 1, + "line": 40, + }, + { + "hit": 1, + "line": 41, + }, + { + "hit": 1, + "line": 42, + }, + { + "hit": 1, + "line": 43, + }, + { + "hit": 1, + "line": 44, + }, + { + "hit": 1, + "line": 45, + }, + { + "hit": 1, + "line": 46, + }, + { + "hit": 1, + "line": 47, + }, + { + "hit": 1, + "line": 48, + }, + { + "hit": 1, + "line": 49, + }, + { + "hit": 1, + "line": 50, + }, + { + "hit": 1, + "line": 51, + }, + { + "hit": 1, + "line": 52, + }, + { + "hit": 1, + "line": 53, + }, + { + "hit": 1, + "line": 54, + }, + { + "hit": 1, + "line": 55, + }, + { + "hit": 1, + "line": 56, + }, + { + "hit": 1, + "line": 57, + }, + { + "hit": 1, + "line": 58, + }, + { + "hit": 1, + "line": 59, + }, + { + "hit": 1, + "line": 60, + }, + { + "hit": 1, + "line": 61, + }, + { + "hit": 1, + "line": 62, + }, + { + "hit": 1, + "line": 63, + }, + { + "hit": 1, + "line": 64, + }, + { + "hit": 1, + "line": 65, + }, + { + "hit": 8, + "line": 66, + }, + { + "hit": 8, + "line": 67, + }, + { + "hit": 8, + "line": 68, + }, + { + "hit": 8, + "line": 69, + }, + { + "hit": 8, + "line": 70, + }, + { + "hit": 8, + "line": 71, + }, + { + "hit": 8, + "line": 72, + }, + { + "hit": 8, + "line": 73, + }, + { + "hit": 8, + "line": 74, + }, + { + "hit": 8, + "line": 75, + }, + { + "hit": 8, + "line": 76, + }, + { + "hit": 8, + "line": 77, + }, + { + "hit": 8, + "line": 78, + }, + { + "hit": 8, + "line": 79, + }, + { + "hit": 8, + "line": 80, + }, + { + "hit": 8, + "line": 81, + }, + { + "hit": 8, + "line": 82, + }, + { + "hit": 8, + "line": 83, + }, + { + "hit": 8, + "line": 84, + }, + { + "hit": 8, + "line": 85, + }, + { + "hit": 8, + "line": 86, + }, + { + "hit": 8, + "line": 87, + }, + { + "hit": 8, + "line": 88, + }, + { + "hit": 8, + "line": 89, + }, + { + "hit": 8, + "line": 90, + }, + { + "hit": 8, + "line": 91, + }, + { + "hit": 8, + "line": 92, + }, + { + "hit": 8, + "line": 93, + }, + { + "hit": 8, + "line": 94, + }, + { + "hit": 8, + "line": 95, + }, + { + "hit": 8, + "line": 96, + }, + { + "hit": 8, + "line": 97, + }, + { + "hit": 8, + "line": 98, + }, + { + "hit": 8, + "line": 99, + }, + { + "hit": 8, + "line": 100, + }, + { + "hit": 8, + "line": 101, + }, + { + "hit": 8, + "line": 102, + }, + { + "hit": 8, + "line": 103, + }, + { + "hit": 8, + "line": 104, + }, + { + "hit": 8, + "line": 105, + }, + { + "hit": 8, + "line": 106, + }, + { + "hit": 8, + "line": 107, + }, + { + "hit": 8, + "line": 108, + }, + { + "hit": 8, + "line": 109, + }, + { + "hit": 8, + "line": 110, + }, + { + "hit": 8, + "line": 111, + }, + { + "hit": 8, + "line": 112, + }, + { + "hit": 8, + "line": 113, + }, + { + "hit": 12, + "line": 114, + }, + { + "hit": 12, + "line": 115, + }, + { + "hit": 12, + "line": 116, + }, + { + "hit": 1, + "line": 117, + }, + { + "hit": 1, + "line": 118, + }, + { + "hit": 11, + "line": 119, + }, + { + "hit": 11, + "line": 120, + }, + { + "hit": 11, + "line": 121, + }, + { + "hit": 11, + "line": 122, + }, + { + "hit": 8, + "line": 123, + }, + { + "hit": 8, + "line": 124, + }, + { + "hit": 8, + "line": 125, + }, + { + "hit": 8, + "line": 126, + }, + { + "hit": 8, + "line": 127, + }, + { + "hit": 8, + "line": 128, + }, + { + "hit": 58, + "line": 129, + }, + { + "hit": 8, + "line": 130, + }, + { + "hit": 8, + "line": 131, + }, + { + "hit": 8, + "line": 132, + }, + { + "hit": 8, + "line": 133, + }, + { + "hit": 8, + "line": 134, + }, + { + "hit": 8, + "line": 135, + }, + { + "hit": 23, + "line": 136, + }, + { + "hit": 23, + "line": 137, + }, + { + "hit": 23, + "line": 138, + }, + { + "hit": 23, + "line": 139, + }, + { + "hit": 23, + "line": 140, + }, + { + "hit": 23, + "line": 141, + }, + { + "hit": 23, + "line": 142, + }, + { + "hit": 23, + "line": 143, + }, + { + "hit": 0, + "line": 144, + }, + { + "hit": 0, + "line": 145, + }, + { + "hit": 0, + "line": 146, + }, + { + "hit": 0, + "line": 147, + }, + { + "hit": 0, + "line": 148, + }, + { + "hit": 23, + "line": 149, + }, + { + "hit": 23, + "line": 150, + }, + { + "hit": 8, + "line": 151, + }, + { + "hit": 8, + "line": 152, + }, + { + "hit": 8, + "line": 153, + }, + { + "hit": 8, + "line": 154, + }, + { + "hit": 8, + "line": 155, + }, + { + "hit": 8, + "line": 156, + }, + { + "hit": 8, + "line": 157, + }, + { + "hit": 42, + "line": 158, + }, + { + "hit": 8, + "line": 159, + }, + { + "hit": 8, + "line": 160, + }, + { + "hit": 8, + "line": 161, + }, + { + "hit": 8, + "line": 162, + }, + { + "hit": 8, + "line": 163, + }, + { + "hit": 8, + "line": 164, + }, + { + "hit": 8, + "line": 165, + }, + { + "hit": 8, + "line": 166, + }, + { + "hit": 23, + "line": 167, + }, + { + "hit": 8, + "line": 168, + }, + { + "hit": 8, + "line": 169, + }, + { + "hit": 23, + "line": 170, + }, + { + "hit": 23, + "line": 171, + }, + { + "hit": 17, + "line": 172, + }, + { + "hit": 17, + "line": 173, + }, + { + "hit": 23, + "line": 174, + }, + { + "hit": 23, + "line": 175, + }, + { + "hit": 8, + "line": 176, + }, + { + "hit": 8, + "line": 177, + }, + { + "hit": 8, + "line": 178, + }, + { + "hit": 8, + "line": 179, + }, + { + "hit": 8, + "line": 180, + }, + { + "hit": 8, + "line": 181, + }, + { + "hit": 8, + "line": 182, + }, + { + "hit": 8, + "line": 183, + }, + { + "hit": 8, + "line": 184, + }, + { + "hit": 8, + "line": 185, + }, + { + "hit": 0, + "line": 186, + }, + { + "hit": 0, + "line": 187, + }, + { + "hit": 0, + "line": 188, + }, + { + "hit": 0, + "line": 189, + }, + { + "hit": 0, + "line": 190, + }, + { + "hit": 0, + "line": 191, + }, + { + "hit": 0, + "line": 192, + }, + { + "hit": 0, + "line": 193, + }, + { + "hit": 0, + "line": 194, + }, + { + "hit": 0, + "line": 195, + }, + { + "hit": 0, + "line": 196, + }, + { + "hit": 8, + "line": 197, + }, + { + "hit": 8, + "line": 198, + }, + { + "hit": 8, + "line": 199, + }, + { + "hit": 8, + "line": 200, + }, + { + "hit": 8, + "line": 201, + }, + { + "hit": 8, + "line": 202, + }, + { + "hit": 8, + "line": 203, + }, + { + "hit": 8, + "line": 204, + }, + { + "hit": 12, + "line": 205, + }, + { + "hit": 12, + "line": 206, + }, + { + "hit": 12, + "line": 207, + }, + { + "hit": 12, + "line": 208, + }, + { + "hit": 12, + "line": 209, + }, + { + "hit": 8, + "line": 210, + }, + { + "hit": 8, + "line": 211, + }, + { + "hit": 8, + "line": 212, + }, + { + "hit": 16, + "line": 213, + }, + { + "hit": 16, + "line": 214, + }, + { + "hit": 16, + "line": 215, + }, + { + "hit": 16, + "line": 216, + }, + { + "hit": 16, + "line": 217, + }, + { + "hit": 16, + "line": 218, + }, + { + "hit": 19, + "line": 219, + }, + { + "hit": 19, + "line": 220, + }, + { + "hit": 4, + "line": 221, + }, + { + "hit": 4, + "line": 222, + }, + { + "hit": 4, + "line": 223, + }, + { + "hit": 15, + "line": 224, + }, + { + "hit": 15, + "line": 225, + }, + { + "hit": 19, + "line": 226, + }, + { + "hit": 1, + "line": 227, + }, + { + "hit": 1, + "line": 228, + }, + { + "hit": 1, + "line": 229, + }, + { + "hit": 19, + "line": 230, + }, + { + "hit": 16, + "line": 231, + }, + { + "hit": 8, + "line": 232, + }, + { + "hit": 8, + "line": 233, + }, + { + "hit": 8, + "line": 234, + }, + { + "hit": 8, + "line": 235, + }, + { + "hit": 8, + "line": 236, + }, + { + "hit": 8, + "line": 237, + }, + { + "hit": 15, + "line": 238, + }, + { + "hit": 15, + "line": 239, + }, + { + "hit": 2, + "line": 240, + }, + { + "hit": 2, + "line": 241, + }, + { + "hit": 1, + "line": 242, + }, + { + "hit": 1, + "line": 243, + }, + { + "hit": 2, + "line": 244, + }, + { + "hit": 15, + "line": 245, + }, + { + "hit": 15, + "line": 246, + }, + { + "hit": 15, + "line": 247, + }, + { + "hit": 1, + "line": 248, + }, + { + "hit": 1, + "line": 249, + }, + { + "hit": 1, + "line": 250, + }, + { + "hit": 1, + "line": 251, + }, + { + "hit": 1, + "line": 252, + }, + { + "hit": 15, + "line": 253, + }, + { + "hit": 15, + "line": 254, + }, + { + "hit": 8, + "line": 255, + }, + { + "hit": 8, + "line": 256, + }, + { + "hit": 8, + "line": 257, + }, + { + "hit": 8, + "line": 258, + }, + { + "hit": 8, + "line": 259, + }, + { + "hit": 8, + "line": 260, + }, + { + "hit": 32, + "line": 261, + }, + { + "hit": 32, + "line": 262, + }, + { + "hit": 32, + "line": 263, + }, + { + "hit": 32, + "line": 264, + }, + { + "hit": 32, + "line": 265, + }, + { + "hit": 32, + "line": 266, + }, + { + "hit": 32, + "line": 267, + }, + { + "hit": 32, + "line": 268, + }, + { + "hit": 8, + "line": 269, + }, + { + "hit": 8, + "line": 270, + }, + { + "hit": 8, + "line": 271, + }, + { + "hit": 32, + "line": 272, + }, + { + "hit": 32, + "line": 273, + }, + { + "hit": 32, + "line": 274, + }, + { + "hit": 32, + "line": 275, + }, + { + "hit": 32, + "line": 276, + }, + { + "hit": 32, + "line": 277, + }, + { + "hit": 8, + "line": 278, + }, + { + "hit": 1, + "line": 279, + }, + { + "hit": 1, + "line": 280, + }, + ], + "found": 280, + "hit": 264, + }, + "title": "", + }, + { + "branches": { + "details": [], + "found": 0, + "hit": 0, + }, + "file": "src/index.ts", + "functions": { + "details": [], + "found": 0, + "hit": 0, + }, + "lines": { + "details": [ + { + "hit": 1, + "line": 1, + }, + { + "hit": 1, + "line": 2, + }, + { + "hit": 1, + "line": 3, + }, + { + "hit": 1, + "line": 4, + }, + { + "hit": 1, + "line": 5, + }, + { + "hit": 1, + "line": 6, + }, + { + "hit": 1, + "line": 7, + }, + { + "hit": 1, + "line": 8, + }, + ], + "found": 8, + "hit": 8, + }, + "title": "", + }, + { + "branches": { + "details": [ + { + "block": 0, + "branch": 0, + "line": 12, + "taken": 29, + }, + { + "block": 1, + "branch": 0, + "line": 21, + "taken": 15, + }, + { + "block": 2, + "branch": 0, + "line": 43, + "taken": 29, + }, + ], + "found": 3, + "hit": 3, + }, + "file": "src/input-group.tsx", + "functions": { + "details": [ + { + "hit": 29, + "line": 12, + "name": "useTextAttribute", + }, + { + "hit": 15, + "line": 21, + "name": "onChange", + }, + { + "hit": 29, + "line": 43, + "name": "InputGroup", + }, + ], + "found": 3, + "hit": 3, + }, + "lines": { + "details": [ + { + "hit": 1, + "line": 1, + }, + { + "hit": 1, + "line": 2, + }, + { + "hit": 1, + "line": 3, + }, + { + "hit": 1, + "line": 4, + }, + { + "hit": 1, + "line": 5, + }, + { + "hit": 1, + "line": 6, + }, + { + "hit": 1, + "line": 7, + }, + { + "hit": 1, + "line": 8, + }, + { + "hit": 1, + "line": 9, + }, + { + "hit": 1, + "line": 10, + }, + { + "hit": 1, + "line": 11, + }, + { + "hit": 1, + "line": 12, + }, + { + "hit": 29, + "line": 13, + }, + { + "hit": 29, + "line": 14, + }, + { + "hit": 29, + "line": 15, + }, + { + "hit": 29, + "line": 16, + }, + { + "hit": 29, + "line": 17, + }, + { + "hit": 29, + "line": 18, + }, + { + "hit": 29, + "line": 19, + }, + { + "hit": 29, + "line": 20, + }, + { + "hit": 29, + "line": 21, + }, + { + "hit": 15, + "line": 22, + }, + { + "hit": 29, + "line": 23, + }, + { + "hit": 29, + "line": 24, + }, + { + "hit": 29, + "line": 25, + }, + { + "hit": 29, + "line": 26, + }, + { + "hit": 1, + "line": 27, + }, + { + "hit": 1, + "line": 28, + }, + { + "hit": 1, + "line": 29, + }, + { + "hit": 1, + "line": 30, + }, + { + "hit": 1, + "line": 31, + }, + { + "hit": 1, + "line": 32, + }, + { + "hit": 1, + "line": 33, + }, + { + "hit": 1, + "line": 34, + }, + { + "hit": 1, + "line": 35, + }, + { + "hit": 1, + "line": 36, + }, + { + "hit": 1, + "line": 37, + }, + { + "hit": 1, + "line": 38, + }, + { + "hit": 1, + "line": 39, + }, + { + "hit": 1, + "line": 40, + }, + { + "hit": 1, + "line": 41, + }, + { + "hit": 1, + "line": 42, + }, + { + "hit": 1, + "line": 43, + }, + { + "hit": 29, + "line": 44, + }, + { + "hit": 29, + "line": 45, + }, + { + "hit": 1, + "line": 46, + }, + { + "hit": 1, + "line": 47, + }, + ], + "found": 47, + "hit": 47, + }, + "title": "", + }, + { + "branches": { + "details": [ + { + "block": 0, + "branch": 0, + "line": 22, + "taken": 17, + }, + { + "block": 1, + "branch": 0, + "line": 26, + "taken": 0, + }, + { + "block": 2, + "branch": 0, + "line": 30, + "taken": 2, + }, + { + "block": 3, + "branch": 0, + "line": 55, + "taken": 17, + }, + { + "block": 4, + "branch": 0, + "line": 60, + "taken": 24, + }, + ], + "found": 5, + "hit": 4, + }, + "file": "src/list-group.tsx", + "functions": { + "details": [ + { + "hit": 17, + "line": 22, + "name": "ListGroup", + }, + { + "hit": 2, + "line": 30, + "name": "add", + }, + { + "hit": 0, + "line": 38, + "name": "newItem", + }, + { + "hit": 17, + "line": 55, + "name": "ListOption", + }, + ], + "found": 4, + "hit": 3, + }, + "lines": { + "details": [ + { + "hit": 1, + "line": 1, + }, + { + "hit": 1, + "line": 2, + }, + { + "hit": 1, + "line": 3, + }, + { + "hit": 1, + "line": 4, + }, + { + "hit": 1, + "line": 5, + }, + { + "hit": 1, + "line": 6, + }, + { + "hit": 1, + "line": 7, + }, + { + "hit": 1, + "line": 8, + }, + { + "hit": 1, + "line": 9, + }, + { + "hit": 1, + "line": 10, + }, + { + "hit": 1, + "line": 11, + }, + { + "hit": 1, + "line": 12, + }, + { + "hit": 1, + "line": 13, + }, + { + "hit": 1, + "line": 14, + }, + { + "hit": 1, + "line": 15, + }, + { + "hit": 1, + "line": 16, + }, + { + "hit": 1, + "line": 17, + }, + { + "hit": 1, + "line": 18, + }, + { + "hit": 1, + "line": 19, + }, + { + "hit": 1, + "line": 20, + }, + { + "hit": 1, + "line": 21, + }, + { + "hit": 1, + "line": 22, + }, + { + "hit": 17, + "line": 23, + }, + { + "hit": 17, + "line": 24, + }, + { + "hit": 17, + "line": 25, + }, + { + "hit": 17, + "line": 26, + }, + { + "hit": 0, + "line": 27, + }, + { + "hit": 0, + "line": 28, + }, + { + "hit": 17, + "line": 29, + }, + { + "hit": 17, + "line": 30, + }, + { + "hit": 2, + "line": 31, + }, + { + "hit": 17, + "line": 32, + }, + { + "hit": 17, + "line": 33, + }, + { + "hit": 17, + "line": 34, + }, + { + "hit": 17, + "line": 35, + }, + { + "hit": 1, + "line": 36, + }, + { + "hit": 1, + "line": 37, + }, + { + "hit": 1, + "line": 38, + }, + { + "hit": 1, + "line": 39, + }, + { + "hit": 1, + "line": 40, + }, + { + "hit": 1, + "line": 41, + }, + { + "hit": 1, + "line": 42, + }, + { + "hit": 1, + "line": 43, + }, + { + "hit": 1, + "line": 44, + }, + { + "hit": 1, + "line": 45, + }, + { + "hit": 1, + "line": 46, + }, + { + "hit": 1, + "line": 47, + }, + { + "hit": 1, + "line": 48, + }, + { + "hit": 1, + "line": 49, + }, + { + "hit": 1, + "line": 50, + }, + { + "hit": 1, + "line": 51, + }, + { + "hit": 1, + "line": 52, + }, + { + "hit": 1, + "line": 53, + }, + { + "hit": 1, + "line": 54, + }, + { + "hit": 1, + "line": 55, + }, + { + "hit": 17, + "line": 56, + }, + { + "hit": 17, + "line": 57, + }, + { + "hit": 17, + "line": 58, + }, + { + "hit": 17, + "line": 59, + }, + { + "hit": 17, + "line": 60, + }, + { + "hit": 24, + "line": 61, + }, + { + "hit": 24, + "line": 62, + }, + { + "hit": 24, + "line": 63, + }, + { + "hit": 17, + "line": 64, + }, + { + "hit": 17, + "line": 65, + }, + { + "hit": 17, + "line": 66, + }, + { + "hit": 17, + "line": 67, + }, + { + "hit": 1, + "line": 68, + }, + { + "hit": 1, + "line": 69, + }, + ], + "found": 69, + "hit": 67, + }, + "title": "", + }, + { + "branches": { + "details": [ + { + "block": 0, + "branch": 0, + "line": 29, + "taken": 3, + }, + { + "block": 1, + "branch": 0, + "line": 40, + "taken": 3, + }, + { + "block": 2, + "branch": 0, + "line": 49, + "taken": 6, + }, + { + "block": 3, + "branch": 0, + "line": 58, + "taken": 2, + }, + ], + "found": 4, + "hit": 4, + }, + "file": "src/radio-group.tsx", + "functions": { + "details": [ + { + "hit": 3, + "line": 29, + "name": "RadioGroup", + }, + { + "hit": 3, + "line": 40, + "name": "RadioOption", + }, + { + "hit": 2, + "line": 58, + "name": "onChange", + }, + ], + "found": 3, + "hit": 3, + }, + "lines": { + "details": [ + { + "hit": 1, + "line": 1, + }, + { + "hit": 1, + "line": 2, + }, + { + "hit": 1, + "line": 3, + }, + { + "hit": 1, + "line": 4, + }, + { + "hit": 1, + "line": 5, + }, + { + "hit": 1, + "line": 6, + }, + { + "hit": 1, + "line": 7, + }, + { + "hit": 1, + "line": 8, + }, + { + "hit": 1, + "line": 9, + }, + { + "hit": 1, + "line": 10, + }, + { + "hit": 1, + "line": 11, + }, + { + "hit": 1, + "line": 12, + }, + { + "hit": 1, + "line": 13, + }, + { + "hit": 1, + "line": 14, + }, + { + "hit": 1, + "line": 15, + }, + { + "hit": 1, + "line": 16, + }, + { + "hit": 1, + "line": 17, + }, + { + "hit": 1, + "line": 18, + }, + { + "hit": 1, + "line": 19, + }, + { + "hit": 1, + "line": 20, + }, + { + "hit": 1, + "line": 21, + }, + { + "hit": 1, + "line": 22, + }, + { + "hit": 1, + "line": 23, + }, + { + "hit": 1, + "line": 24, + }, + { + "hit": 1, + "line": 25, + }, + { + "hit": 1, + "line": 26, + }, + { + "hit": 1, + "line": 27, + }, + { + "hit": 1, + "line": 28, + }, + { + "hit": 1, + "line": 29, + }, + { + "hit": 3, + "line": 30, + }, + { + "hit": 3, + "line": 31, + }, + { + "hit": 3, + "line": 32, + }, + { + "hit": 3, + "line": 33, + }, + { + "hit": 3, + "line": 34, + }, + { + "hit": 1, + "line": 35, + }, + { + "hit": 1, + "line": 36, + }, + { + "hit": 1, + "line": 37, + }, + { + "hit": 1, + "line": 38, + }, + { + "hit": 1, + "line": 39, + }, + { + "hit": 1, + "line": 40, + }, + { + "hit": 3, + "line": 41, + }, + { + "hit": 3, + "line": 42, + }, + { + "hit": 3, + "line": 43, + }, + { + "hit": 3, + "line": 44, + }, + { + "hit": 3, + "line": 45, + }, + { + "hit": 3, + "line": 46, + }, + { + "hit": 3, + "line": 47, + }, + { + "hit": 3, + "line": 48, + }, + { + "hit": 3, + "line": 49, + }, + { + "hit": 6, + "line": 50, + }, + { + "hit": 6, + "line": 51, + }, + { + "hit": 6, + "line": 52, + }, + { + "hit": 6, + "line": 53, + }, + { + "hit": 6, + "line": 54, + }, + { + "hit": 6, + "line": 55, + }, + { + "hit": 6, + "line": 56, + }, + { + "hit": 6, + "line": 57, + }, + { + "hit": 6, + "line": 58, + }, + { + "hit": 6, + "line": 59, + }, + { + "hit": 6, + "line": 60, + }, + { + "hit": 3, + "line": 61, + }, + { + "hit": 3, + "line": 62, + }, + { + "hit": 3, + "line": 63, + }, + { + "hit": 3, + "line": 64, + }, + { + "hit": 1, + "line": 65, + }, + { + "hit": 1, + "line": 66, + }, + ], + "found": 66, + "hit": 66, + }, + "title": "", + }, + { + "branches": { + "details": [ + { + "block": 0, + "branch": 0, + "line": 8, + "taken": 1, + }, + { + "block": 1, + "branch": 0, + "line": 10, + "taken": 1, + }, + { + "block": 2, + "branch": 0, + "line": 11, + "taken": 1, + }, + { + "block": 3, + "branch": 0, + "line": 14, + "taken": 4, + }, + { + "block": 4, + "branch": 0, + "line": 22, + "taken": 2, + }, + { + "block": 5, + "branch": 0, + "line": 22, + "taken": 2, + }, + { + "block": 6, + "branch": 0, + "line": 24, + "taken": 2, + }, + { + "block": 7, + "branch": 0, + "line": 25, + "taken": 1, + }, + { + "block": 8, + "branch": 0, + "line": 25, + "taken": 1, + }, + { + "block": 9, + "branch": 0, + "line": 40, + "taken": 4, + }, + ], + "found": 10, + "hit": 10, + }, + "file": "src/select-group.tsx", + "functions": { + "details": [ + { + "hit": 1, + "line": 8, + "name": "filterOptions", + }, + { + "hit": 4, + "line": 14, + "name": "useSelectAttribute", + }, + { + "hit": 2, + "line": 24, + "name": "onChange", + }, + { + "hit": 4, + "line": 40, + "name": "SelectGroup", + }, + ], + "found": 4, + "hit": 4, + }, + "lines": { + "details": [ + { + "hit": 1, + "line": 1, + }, + { + "hit": 1, + "line": 2, + }, + { + "hit": 1, + "line": 3, + }, + { + "hit": 1, + "line": 4, + }, + { + "hit": 1, + "line": 5, + }, + { + "hit": 1, + "line": 6, + }, + { + "hit": 1, + "line": 7, + }, + { + "hit": 1, + "line": 8, + }, + { + "hit": 1, + "line": 9, + }, + { + "hit": 1, + "line": 10, + }, + { + "hit": 1, + "line": 11, + }, + { + "hit": 1, + "line": 12, + }, + { + "hit": 1, + "line": 13, + }, + { + "hit": 1, + "line": 14, + }, + { + "hit": 4, + "line": 15, + }, + { + "hit": 4, + "line": 16, + }, + { + "hit": 4, + "line": 17, + }, + { + "hit": 4, + "line": 18, + }, + { + "hit": 4, + "line": 19, + }, + { + "hit": 4, + "line": 20, + }, + { + "hit": 4, + "line": 21, + }, + { + "hit": 4, + "line": 22, + }, + { + "hit": 4, + "line": 23, + }, + { + "hit": 4, + "line": 24, + }, + { + "hit": 2, + "line": 25, + }, + { + "hit": 4, + "line": 26, + }, + { + "hit": 4, + "line": 27, + }, + { + "hit": 4, + "line": 28, + }, + { + "hit": 4, + "line": 29, + }, + { + "hit": 1, + "line": 30, + }, + { + "hit": 1, + "line": 31, + }, + { + "hit": 1, + "line": 32, + }, + { + "hit": 1, + "line": 33, + }, + { + "hit": 1, + "line": 34, + }, + { + "hit": 1, + "line": 35, + }, + { + "hit": 1, + "line": 36, + }, + { + "hit": 1, + "line": 37, + }, + { + "hit": 1, + "line": 38, + }, + { + "hit": 1, + "line": 39, + }, + { + "hit": 1, + "line": 40, + }, + { + "hit": 4, + "line": 41, + }, + { + "hit": 4, + "line": 42, + }, + { + "hit": 1, + "line": 43, + }, + { + "hit": 1, + "line": 44, + }, + ], + "found": 44, + "hit": 44, + }, + "title": "", + }, +] +`; diff --git a/tests/parse-diff.spec.ts b/tests/parse-diff.spec.ts new file mode 100644 index 0000000..604d51d --- /dev/null +++ b/tests/parse-diff.spec.ts @@ -0,0 +1,11 @@ +import fs from "fs"; +import path from "path"; + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const parseDiff = require("../src/diff-parser"); + +test.each(["1.diff"])("parse %s", async (diffFile) => { + const diffFilePath = path.resolve(__dirname, "..", "data", diffFile); + const diffContent = fs.readFileSync(diffFilePath).toString(); + expect(parseDiff.default(diffContent)).toMatchSnapshot(); +}); diff --git a/tests/parse-lcov.spec.ts b/tests/parse-lcov.spec.ts new file mode 100644 index 0000000..4262027 --- /dev/null +++ b/tests/parse-lcov.spec.ts @@ -0,0 +1,11 @@ +import fs from "fs"; +import path from "path"; + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const parseLcov = require("../src/lcov-parser"); + +test.each(["1.lcov.info"])("parse %s", async (lcovFile) => { + const lcovFilePath = path.resolve(__dirname, "..", "data", lcovFile); + const lcovContent = fs.readFileSync(lcovFilePath).toString(); + expect(await parseLcov.default(lcovContent)).toMatchSnapshot(); +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..aa012c7 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,104 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + "jsx": "react" /* Specify what JSX code is generated. */, + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "CommonJS" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */, + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./lib" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "include": ["src"] +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..6decbfb --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2875 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.19.3": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.4.tgz#95c86de137bf0317f3a570e1b6e996b427299747" + integrity sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.6.tgz#7122ae4f5c5a37c0946c066149abd8e75f81540f" + integrity sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.6" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-module-transforms" "^7.19.6" + "@babel/helpers" "^7.19.4" + "@babel/parser" "^7.19.6" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.6" + "@babel/types" "^7.19.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.19.6", "@babel/generator@^7.7.2": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.6.tgz#9e481a3fe9ca6261c972645ae3904ec0f9b34a1d" + integrity sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA== + dependencies: + "@babel/types" "^7.19.4" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz#a10a04588125675d7c7ae299af86fa1b2ee038ca" + integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== + dependencies: + "@babel/compat-data" "^7.19.3" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== + dependencies: + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.19.6": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz#6c52cc3ac63b70952d33ee987cbee1c9368b533f" + integrity sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.19.4" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.6" + "@babel/types" "^7.19.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.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" + integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== + +"@babel/helper-simple-access@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz#be553f4951ac6352df2567f7daa19a0ee15668e7" + integrity sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg== + dependencies: + "@babel/types" "^7.19.4" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helpers@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.4.tgz#42154945f87b8148df7203a25c31ba9a73be46c5" + integrity sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw== + dependencies: + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.4" + "@babel/types" "^7.19.4" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.6": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.6.tgz#b923430cb94f58a7eae8facbffa9efd19130e7f8" + integrity sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/template@^7.18.10", "@babel/template@^7.3.3": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.19.4", "@babel/traverse@^7.19.6", "@babel/traverse@^7.7.2": + version "7.19.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.6.tgz#7b4c865611df6d99cb131eec2e8ac71656a490dc" + integrity sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.19.6" + "@babel/types" "^7.19.4" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.4.tgz#0dd5c91c573a202d600490a35b33246fed8a41c7" + integrity sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + 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" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.11.6": + version "0.11.6" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.6.tgz#6a51d603a3aaf8d4cf45b42b3f2ac9318a4adc4b" + integrity sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.2.1.tgz#5f2c62dcdd5ce66e94b6d6729e021758bceea090" + integrity sha512-MF8Adcw+WPLZGBiNxn76DOuczG3BhODTcMlDCA4+cFi41OkaY/lyI0XUUhi73F88Y+7IHoGmD80pN5CtxQUdSw== + dependencies: + "@jest/types" "^29.2.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.2.1" + jest-util "^29.2.1" + slash "^3.0.0" + +"@jest/core@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.2.1.tgz#30af794ebd73bfb87cd8ba36718738dfe38b772e" + integrity sha512-kuLKYqnqgerXkBUwlHVxeSuhSnd+JMnMCLfU98bpacBSfWEJPegytDh3P2m15/JHzet32hGGld4KR4OzMb6/Tg== + dependencies: + "@jest/console" "^29.2.1" + "@jest/reporters" "^29.2.1" + "@jest/test-result" "^29.2.1" + "@jest/transform" "^29.2.1" + "@jest/types" "^29.2.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.2.0" + jest-config "^29.2.1" + jest-haste-map "^29.2.1" + jest-message-util "^29.2.1" + jest-regex-util "^29.2.0" + jest-resolve "^29.2.1" + jest-resolve-dependencies "^29.2.1" + jest-runner "^29.2.1" + jest-runtime "^29.2.1" + jest-snapshot "^29.2.1" + jest-util "^29.2.1" + jest-validate "^29.2.1" + jest-watcher "^29.2.1" + micromatch "^4.0.4" + pretty-format "^29.2.1" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.2.1.tgz#acb1994fbd5ad02819a1a34a923c531e6923b665" + integrity sha512-EutqA7T/X6zFjw6mAWRHND+ZkTPklmIEWCNbmwX6uCmOrFrWaLbDZjA+gePHJx6fFMMRvNfjXcvzXEtz54KPlg== + dependencies: + "@jest/fake-timers" "^29.2.1" + "@jest/types" "^29.2.1" + "@types/node" "*" + jest-mock "^29.2.1" + +"@jest/expect-utils@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.2.1.tgz#eae61c90f2066540f60d23b8f254f03b7869b22f" + integrity sha512-yr4aHNg5Z1CjKby5ozm7sKjgBlCOorlAoFcvrOQ/4rbZRfgZQdnmh7cth192PYIgiPZo2bBXvqdOApnAMWFJZg== + dependencies: + jest-get-type "^29.2.0" + +"@jest/expect@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.2.1.tgz#8d99be3886ebfcffd6cabb2b46602a301b976ffe" + integrity sha512-o14R2t2tHHHudwji43UKkzmmH49xfF5T++FQBK2tl88qwuBWQOcx7fNUYl+mA/9TPNAN0FkQ3usnpyS8FUwsvQ== + dependencies: + expect "^29.2.1" + jest-snapshot "^29.2.1" + +"@jest/fake-timers@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.2.1.tgz#786d60e8cb60ca70c9f913cb49fcc77610c072bb" + integrity sha512-KWil+8fef7Uj/P/PTZlPKk1Pw117wAmr71VWFV8ZDtRtkwmTG8oY4IRf0Ss44J2y5CYRy8d/zLOhxyoGRENjvA== + dependencies: + "@jest/types" "^29.2.1" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + jest-message-util "^29.2.1" + jest-mock "^29.2.1" + jest-util "^29.2.1" + +"@jest/globals@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.2.1.tgz#6933beb8b4e43b990409a19c462fde7b71210e63" + integrity sha512-Z4EejYPP1OPVq2abk1+9urAwJqkgw5jB2UJGlPjb5ZwzPQF8WLMcigKEfFzZb2OHhEVPP0RZD0/DbVTY1R6iQA== + dependencies: + "@jest/environment" "^29.2.1" + "@jest/expect" "^29.2.1" + "@jest/types" "^29.2.1" + jest-mock "^29.2.1" + +"@jest/reporters@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.2.1.tgz#599e4376823751fdda50f2ca97243e013da10c4d" + integrity sha512-sCsfUKM/yIF4nNed3e/rIgVIS58EiASGMDEPWqItfLZ9UO1ALW2ASDNJzdWkxEt0T8o2Ztj619G0KKrvK+McAw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.2.1" + "@jest/test-result" "^29.2.1" + "@jest/transform" "^29.2.1" + "@jest/types" "^29.2.1" + "@jridgewell/trace-mapping" "^0.3.15" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.2.1" + jest-util "^29.2.1" + jest-worker "^29.2.1" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.0.0": + version "29.0.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" + integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/source-map@^29.2.0": + version "29.2.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.2.0.tgz#ab3420c46d42508dcc3dc1c6deee0b613c235744" + integrity sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.15" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.2.1.tgz#f42dbf7b9ae465d0a93eee6131473b8bb3bd2edb" + integrity sha512-lS4+H+VkhbX6z64tZP7PAUwPqhwj3kbuEHcaLuaBuB+riyaX7oa1txe0tXgrFj5hRWvZKvqO7LZDlNWeJ7VTPA== + dependencies: + "@jest/console" "^29.2.1" + "@jest/types" "^29.2.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.2.1.tgz#cafd2c5f3528c70bd4cc243800459ac366e480cc" + integrity sha512-O/pnk0/xGj3lxPVNwB6HREJ7AYvUdyP2xo/s14/9Dtf091HoOeyIhWLKQE/4HzB8lNQBMo6J5mg0bHz/uCWK7w== + dependencies: + "@jest/test-result" "^29.2.1" + graceful-fs "^4.2.9" + jest-haste-map "^29.2.1" + slash "^3.0.0" + +"@jest/transform@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.2.1.tgz#f3d8154edd19cdbcaf1d6646bd8f4ff7812318a2" + integrity sha512-xup+iEuaIRSQabQaeqxaQyN0vg1Dctrp9oTObQsNf3sZEowTIa5cANYuoyi8Tqhg4GCqEVLTf18KW7ii0UeFVA== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.2.1" + "@jridgewell/trace-mapping" "^0.3.15" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.2.1" + jest-regex-util "^29.2.0" + jest-util "^29.2.1" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" + +"@jest/types@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.2.1.tgz#ec9c683094d4eb754e41e2119d8bdaef01cf6da0" + integrity sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw== + dependencies: + "@jest/schemas" "^29.0.0" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@sinclair/typebox@^0.24.1": + version "0.24.50" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.50.tgz#35ee4db4ab8f3a8ff56490c51f92445d2776451e" + integrity sha512-k8ETQOOQDg5FtK7y9KJWpsGLik+QlPmIi8zzl/dGUgshV2QitprkFlCR/AemjWOTyKn9UwSSGRTzLVotvgCjYQ== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/babel__core@^7.1.14": + version "7.1.19" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.2.tgz#235bf339d17185bdec25e024ca19cce257cc7309" + integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== + dependencies: + "@babel/types" "^7.3.0" + +"@types/graceful-fs@^4.1.3": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^29.1.1": + version "29.2.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.0.tgz#fa98e08b46ab119f1a74a9552c48c589f5378a96" + integrity sha512-KO7bPV21d65PKwv3LLsD8Jn3E05pjNjRZvkm+YTacWhVmykAb07wW6IkZUmQAltwQafNcDUEUrMO2h3jeBSisg== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/node@*", "@types/node@^18.11.4": + version "18.11.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.4.tgz#7017a52e18dfaad32f55eebd539993014441949c" + integrity sha512-BxcJpBu8D3kv/GZkx/gSMz6VnTJREBj/4lbzYOQueUOELkt8WrO6zAcSPmp9uRPEW/d+lUO8QK0W2xnS1hEU0A== + +"@types/prettier@^2.1.5": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e" + integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== + +"@types/semver@^7.3.12": + version "7.3.12" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.12.tgz#920447fdd78d76b19de0438b7f60df3c4a80bf1c" + integrity sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.13" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.13.tgz#34cced675ca1b1d51fcf4d34c3c6f0fa142a5c76" + integrity sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.38.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.1.tgz#3203a6ff396b1194083faaa6e5110c401201d7d5" + integrity sha512-FsWboKkWdytGiXT5O1/R9j37YgcjO8MKHSUmWnIEjVaz0krHkplPnYi7mwdb+5+cs0toFNQb0HIrN7zONdIEWg== + dependencies: + "@typescript-eslint/scope-manager" "5.40.1" + "@typescript-eslint/type-utils" "5.40.1" + "@typescript-eslint/utils" "5.40.1" + debug "^4.3.4" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.38.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.40.1.tgz#e7f8295dd8154d0d37d661ddd8e2f0ecfdee28dd" + integrity sha512-IK6x55va5w4YvXd4b3VrXQPldV9vQTxi5ov+g4pMANsXPTXOcfjx08CRR1Dfrcc51syPtXHF5bgLlMHYFrvQtg== + dependencies: + "@typescript-eslint/scope-manager" "5.40.1" + "@typescript-eslint/types" "5.40.1" + "@typescript-eslint/typescript-estree" "5.40.1" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz#a7a5197dfd234622a2421ea590ee0ccc02e18dfe" + integrity sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg== + dependencies: + "@typescript-eslint/types" "5.40.1" + "@typescript-eslint/visitor-keys" "5.40.1" + +"@typescript-eslint/type-utils@5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.40.1.tgz#091e4ce3bebbdb68f4980bae9dee2e4e1725f601" + integrity sha512-DLAs+AHQOe6n5LRraXiv27IYPhleF0ldEmx6yBqBgBLaNRKTkffhV1RPsjoJBhVup2zHxfaRtan8/YRBgYhU9Q== + dependencies: + "@typescript-eslint/typescript-estree" "5.40.1" + "@typescript-eslint/utils" "5.40.1" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.40.1.tgz#de37f4f64de731ee454bb2085d71030aa832f749" + integrity sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw== + +"@typescript-eslint/typescript-estree@5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz#9a7d25492f02c69882ce5e0cd1857b0c55645d72" + integrity sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA== + dependencies: + "@typescript-eslint/types" "5.40.1" + "@typescript-eslint/visitor-keys" "5.40.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.40.1.tgz#3204fb73a559d3b7bab7dc9d3c44487c2734a9ca" + integrity sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.40.1" + "@typescript-eslint/types" "5.40.1" + "@typescript-eslint/typescript-estree" "5.40.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz#f3d2bf5af192f4432b84cec6fdcb387193518754" + integrity sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw== + dependencies: + "@typescript-eslint/types" "5.40.1" + eslint-visitor-keys "^3.3.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +babel-jest@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.2.1.tgz#213c47e28072de11bdb98c9d29b89f2ab99664f1" + integrity sha512-gQJwArok0mqoREiCYhXKWOgUhElJj9DpnssW6GL8dG7ARYqHEhrM9fmPHTjdqEGRVXZAd6+imo3/Vwa8TjLcsw== + dependencies: + "@jest/transform" "^29.2.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.2.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz#23ee99c37390a98cfddf3ef4a78674180d823094" + integrity sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz#3048bea3a1af222e3505e4a767a974c95a7620dc" + integrity sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA== + dependencies: + babel-plugin-jest-hoist "^29.2.0" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.3: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001400: + version "1.0.30001423" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001423.tgz#57176d460aa8cd85ee1a72016b961eb9aca55d91" + integrity sha512-09iwWGOlifvE1XuHokFMP7eR38a0JnajoyL3/i87c8ZjRWRrdKo1fqjNfugfBD0UDBIOz0U+jtNhJ0EPm1VleQ== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +ci-info@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.5.0.tgz#bfac2a29263de4c829d806b1ab478e35091e171f" + integrity sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.2.0.tgz#4c55b5b40706c7b5d2c5c75999a50c56d214e8f6" + integrity sha512-413SY5JpYeSBZxmenGEmCVQ8mCgtFJF0w9PROdaS6z987XC2Pd2GOKqOITLtMftmyFZqgtCOb/QA7/Z3ZXfzIw== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +electron-to-chromium@^1.4.251: + version "1.4.284" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" + integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== + +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-plugin-prettier@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.25.0: + version "8.26.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.26.0.tgz#2bcc8836e6c424c4ac26a5674a70d44d84f2181d" + integrity sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" + integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^29.0.0, expect@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.2.1.tgz#25752d0df92d3daa5188dc8804de1f30759658cf" + integrity sha512-BJtA754Fba0YWRWHgjKUMTA3ltWarKgITXHQnbZ2mTxTXC4yMQlR0FI7HkB3fJYkhWBf4qjNiqvg3LDtXCcVRQ== + dependencies: + "@jest/expect-utils" "^29.2.1" + jest-get-type "^29.2.0" + jest-matcher-utils "^29.2.1" + jest-message-util "^29.2.1" + jest-util "^29.2.1" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.2.0.tgz#b6598daa9803ea6a4dce7968e20ab380ddbee289" + integrity sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.2.1.tgz#1385353d9bca6acf58f916068bbeffcfc95bef02" + integrity sha512-W+ZQQ5ln4Db2UZNM4NJIeasnhCdDhSuYW4eLgNAUi0XiSSpF634Kc5wiPvGiHvTgXMFVn1ZgWIijqhi9+kLNLg== + dependencies: + "@jest/environment" "^29.2.1" + "@jest/expect" "^29.2.1" + "@jest/test-result" "^29.2.1" + "@jest/types" "^29.2.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^29.2.1" + jest-matcher-utils "^29.2.1" + jest-message-util "^29.2.1" + jest-runtime "^29.2.1" + jest-snapshot "^29.2.1" + jest-util "^29.2.1" + p-limit "^3.1.0" + pretty-format "^29.2.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.2.1.tgz#fbfa90b87b27a04e1041cc9d33ee80f32e2f2528" + integrity sha512-UIMD5aNqvPKpdlJSaeUAoLfxsh9TZvOkaMETx5qXnkboc317bcbb0eLHbIj8sFBHdcJAIAM+IRKnIU7Wi61MBw== + dependencies: + "@jest/core" "^29.2.1" + "@jest/test-result" "^29.2.1" + "@jest/types" "^29.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^29.2.1" + jest-util "^29.2.1" + jest-validate "^29.2.1" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.2.1.tgz#2182af014d6c73978208626335db5134803dd183" + integrity sha512-EV5F1tQYW/quZV2br2o88hnYEeRzG53Dfi6rSG3TZBuzGQ6luhQBux/RLlU5QrJjCdq3LXxRRM8F1LP6DN1ycA== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.2.1" + "@jest/types" "^29.2.1" + babel-jest "^29.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.2.1" + jest-environment-node "^29.2.1" + jest-get-type "^29.2.0" + jest-regex-util "^29.2.0" + jest-resolve "^29.2.1" + jest-runner "^29.2.1" + jest-util "^29.2.1" + jest-validate "^29.2.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.2.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.2.1.tgz#027e42f5a18b693fb2e88f81b0ccab533c08faee" + integrity sha512-gfh/SMNlQmP3MOUgdzxPOd4XETDJifADpT937fN1iUGz+9DgOu2eUPHH25JDkLVcLwwqxv3GzVyK4VBUr9fjfA== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.2.0" + jest-get-type "^29.2.0" + pretty-format "^29.2.1" + +jest-docblock@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.2.0.tgz#307203e20b637d97cee04809efc1d43afc641e82" + integrity sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.2.1.tgz#6b0a88ee85c2ba27b571a6010c2e0c674f5c9b29" + integrity sha512-sGP86H/CpWHMyK3qGIGFCgP6mt+o5tu9qG4+tobl0LNdgny0aitLXs9/EBacLy3Bwqy+v4uXClqJgASJWcruYw== + dependencies: + "@jest/types" "^29.2.1" + chalk "^4.0.0" + jest-get-type "^29.2.0" + jest-util "^29.2.1" + pretty-format "^29.2.1" + +jest-environment-node@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.2.1.tgz#f90311d0f0e8ef720349f83c97a076e403f90665" + integrity sha512-PulFKwEMz6nTAdLUwglFKei3b/LixwlRiqTN6nvPE1JtrLtlnpd6LXnFI1NFHYJGlTmIWilMP2n9jEtPPKX50g== + dependencies: + "@jest/environment" "^29.2.1" + "@jest/fake-timers" "^29.2.1" + "@jest/types" "^29.2.1" + "@types/node" "*" + jest-mock "^29.2.1" + jest-util "^29.2.1" + +jest-get-type@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" + integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== + +jest-haste-map@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.2.1.tgz#f803fec57f8075e6c55fb5cd551f99a72471c699" + integrity sha512-wF460rAFmYc6ARcCFNw4MbGYQjYkvjovb9GBT+W10Um8q5nHq98jD6fHZMDMO3tA56S8XnmNkM8GcA8diSZfnA== + dependencies: + "@jest/types" "^29.2.1" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.2.0" + jest-util "^29.2.1" + jest-worker "^29.2.1" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.2.1.tgz#ec551686b7d512ec875616c2c3534298b1ffe2fc" + integrity sha512-1YvSqYoiurxKOJtySc+CGVmw/e1v4yNY27BjWTVzp0aTduQeA7pdieLiW05wTYG/twlKOp2xS/pWuikQEmklug== + dependencies: + jest-get-type "^29.2.0" + pretty-format "^29.2.1" + +jest-matcher-utils@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.2.1.tgz#2bf876c5f891b33786aadf5d65d5da5970744122" + integrity sha512-hUTBh7H/Mnb6GTpihbLh8uF5rjAMdekfW/oZNXUMAXi7bbmym2HiRpzgqf/zzkjgejMrVAkPdVSQj+32enlUww== + dependencies: + chalk "^4.0.0" + jest-diff "^29.2.1" + jest-get-type "^29.2.0" + pretty-format "^29.2.1" + +jest-message-util@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.2.1.tgz#3a51357fbbe0cc34236f17a90d772746cf8d9193" + integrity sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.2.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.2.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.2.1.tgz#a0d361cffcb28184fa9c5443adbf591fa5759775" + integrity sha512-NDphaY/GqyQpTfnTZiTqqpMaw4Z0I7XnB7yBgrT6IwYrLGxpOhrejYr4ANY4YvO2sEGdd8Tx/6D0+WLQy7/qDA== + dependencies: + "@jest/types" "^29.2.1" + "@types/node" "*" + jest-util "^29.2.1" + +jest-pnp-resolver@^1.2.2: + version "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@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.2.0.tgz#82ef3b587e8c303357728d0322d48bbfd2971f7b" + integrity sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA== + +jest-resolve-dependencies@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.2.1.tgz#8d717dd41dc615fef1d412d395ea3deccfb1b9fa" + integrity sha512-o3mUGX2j08usj1jIAIE8KmUVpqVAn54k80kI27ldbZf2oJn6eghhB6DvJxjrcH40va9CQgWTfU5f2Ag/MoUqgQ== + dependencies: + jest-regex-util "^29.2.0" + jest-snapshot "^29.2.1" + +jest-resolve@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.2.1.tgz#a4d2f76db88aeb6ec5f5453c9a40b52483d17799" + integrity sha512-1dJTW76Z9622Viq4yRcwBuEXuzGtE9B2kdl05RC8Om/lAzac9uEgC+M8Q5osVidbuBPmxm8wSrcItYhca2ZAtQ== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.2.1" + jest-pnp-resolver "^1.2.2" + jest-util "^29.2.1" + jest-validate "^29.2.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.2.1.tgz#885afe64661cb2f51f84c1b97afb713d1093c124" + integrity sha512-PojFI+uVhQ4u4YZKCN/a3yU0/l/pJJXhq1sW3JpCp8CyvGBYGddRFPKZ1WihApusxqWRTHjBJmGyPWv6Av2lWA== + dependencies: + "@jest/console" "^29.2.1" + "@jest/environment" "^29.2.1" + "@jest/test-result" "^29.2.1" + "@jest/transform" "^29.2.1" + "@jest/types" "^29.2.1" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.10.2" + graceful-fs "^4.2.9" + jest-docblock "^29.2.0" + jest-environment-node "^29.2.1" + jest-haste-map "^29.2.1" + jest-leak-detector "^29.2.1" + jest-message-util "^29.2.1" + jest-resolve "^29.2.1" + jest-runtime "^29.2.1" + jest-util "^29.2.1" + jest-watcher "^29.2.1" + jest-worker "^29.2.1" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.2.1.tgz#62e3a23c33710ae4d9c3304dda851a5fb225b574" + integrity sha512-PSQ880OoIW9y8E6/jjhGn3eQNgNc6ndMzCZaKqy357bv7FqCfSyYepu3yDC6Sp1Vkt+GhP2M/PVgldS2uZSFZg== + dependencies: + "@jest/environment" "^29.2.1" + "@jest/fake-timers" "^29.2.1" + "@jest/globals" "^29.2.1" + "@jest/source-map" "^29.2.0" + "@jest/test-result" "^29.2.1" + "@jest/transform" "^29.2.1" + "@jest/types" "^29.2.1" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.2.1" + jest-message-util "^29.2.1" + jest-mock "^29.2.1" + jest-regex-util "^29.2.0" + jest-resolve "^29.2.1" + jest-snapshot "^29.2.1" + jest-util "^29.2.1" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.2.1.tgz#f3843b3099c8fec7e6218dea18cc506f10ea5d30" + integrity sha512-KZdLD7iEz5M4ZYd+ezZ/kk73z+DtNbk/yJ4Qx7408Vb0CCuclJIZPa/HmIwSsCfIlOBNcYTKufr7x/Yv47oYlg== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.2.1" + "@jest/transform" "^29.2.1" + "@jest/types" "^29.2.1" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.2.1" + graceful-fs "^4.2.9" + jest-diff "^29.2.1" + jest-get-type "^29.2.0" + jest-haste-map "^29.2.1" + jest-matcher-utils "^29.2.1" + jest-message-util "^29.2.1" + jest-util "^29.2.1" + natural-compare "^1.4.0" + pretty-format "^29.2.1" + semver "^7.3.5" + +jest-util@^29.0.0, jest-util@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.2.1.tgz#f26872ba0dc8cbefaba32c34f98935f6cf5fc747" + integrity sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g== + dependencies: + "@jest/types" "^29.2.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.2.1.tgz#db814ce12c4c7e4746044922762e56eb177d066c" + integrity sha512-DZVX5msG6J6DL5vUUw+++6LEkXUsPwB5R7fsfM7BXdz2Ipr0Ib046ak+8egrwAR++pvSM/5laxLK977ieIGxkQ== + dependencies: + "@jest/types" "^29.2.1" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.2.0" + leven "^3.1.0" + pretty-format "^29.2.1" + +jest-watcher@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.2.1.tgz#1cb91f8aa9e77b1332af139944ad65e51430d7c3" + integrity sha512-7jFaHUaRq50l4w/f6RuY713bvI5XskMmjWCE54NGYcY74fLkShS8LucXJke1QfGnwDSCoIqGnGGGKPwdaBYz2Q== + dependencies: + "@jest/test-result" "^29.2.1" + "@jest/types" "^29.2.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^29.2.1" + string-length "^4.0.1" + +jest-worker@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.2.1.tgz#8ba68255438252e1674f990f0180c54dfa26a3b1" + integrity sha512-ROHTZ+oj7sBrgtv46zZ84uWky71AoYi0vEV9CdEtc1FQunsoAGe5HbQmW76nI5QWdvECVPrSi1MCVUmizSavMg== + dependencies: + "@types/node" "*" + jest-util "^29.2.1" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.1.2: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.2.1.tgz#352ec0b81a0e436691d546d984cd7d8f72ffd26a" + integrity sha512-K0N+7rx+fv3Us3KhuwRSJt55MMpZPs9Q3WSO/spRZSnsalX8yEYOTQ1PiSN7OvqzoRX4JEUXCbOJRlP4n8m5LA== + dependencies: + "@jest/core" "^29.2.1" + "@jest/types" "^29.2.1" + import-local "^3.0.2" + jest-cli "^29.2.1" + +js-sdsl@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.5.tgz#1ff1645e6b4d1b028cd3f862db88c9d887f26e2a" + integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +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.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +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== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +pretty-format@^29.0.0, pretty-format@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.2.1.tgz#86e7748fe8bbc96a6a4e04fa99172630907a9611" + integrity sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA== + dependencies: + "@jest/schemas" "^29.0.0" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + +resolve@^1.20.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +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== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +semver@7.x, semver@^7.3.5, semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-jest@^29.0.3: + version "29.0.3" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.0.3.tgz#63ea93c5401ab73595440733cefdba31fcf9cb77" + integrity sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.1" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "^21.0.1" + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +typescript@^4.8.4: + version "4.8.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" + integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + +update-browserslist-db@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^21.0.0, yargs-parser@^21.0.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.0.tgz#e134900fc1f218bc230192bdec06a0a5f973e46c" + integrity sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==