KOdklP;W@WS`eL4dbDC{O9eoT8E|pyHS&{@BYQgbXMv
z<^3?fxNJn|I0?{Y~b%Z`R1+EX7$zwT-~fa);n&dUsQHOQodBE
zsAeOB;eMO6fuxY8AvWc1BUky>B}8Tq;k9Ws-*6%%W6HEjtJT`9>We8N@+1AO<*?Px
z5M6VQqtrYW{*&v=qWe-xJqCf}+0Ej8^?XCs_~B2w6P-vw89my$XOMc$^VsiHnxc7D
ztvHN>pk+#2jgZz(Ir_`TIXQEut=We*{wddXF6mg)CFp?FGI>|Vg*YjxN?d{!Fu1%h
zek*~nSXth_snO
zx8Q!R2dTcjDsEJr+zGb@q*L#bOw>V#^v$cIIqoI-_TCVt=I-Ox+U3}EqHKGvtk4@=
zU;T>XF^gNOwlnA|%2|l7F>>x|N>$t@+goQa+ssHi>WV8Z$!{8NeO7sI5wqCBY~wLO
z^Ve@)@~!`nY0rCIQAo4K45i}Mr^2R~bX}q_*18CGQQYgr6@AZa=2-mjZh6rZ{y;QD8=PLw|
zN#iQ~5vAQT;t)&0*%E=ga|aM6@{|B5(iQkS4f{J7yGDG7L#{lMeE3obIEXp^o0pL;^@lO3R2z%7{tdG?kQtN-98Qq1LEU%v{NFY|uO9v(+A#dJaYnl$p_;^(0TSusi~^)@
zny}?N6Qx)GBQ%i@8hT6>)&Gu{h#Oeyszu?xtw#Zb1mO{pgX9699l+Qppw7jXaYf~-84xW
z)w4x8?=youko|}Vr~(D$UXIbiXABHh`p1?nn8Po~fxRJv}|0e(BPs|G`(TT%kKVJAdg5*Z|x0leQq0
zkdUBvb#>9F()jo|T~kx@OM8$9wzs~t2l;K=woNssA3l6|sx2r3+kdfVW@e^8e*E}v
zA1y5{bRi+3Z`uD3{F7LgFJDdvm;nJilkzDku>BwXH(8ItVCXk*-lSJnR?-2UN%hJ){&rlvg`CDTj
z)Bzo!3v7Ou#83zEDEFcKt(f1E0~=rqeEbTnMvWR#{+9pg%7G8y>u1OVRUSoox-ovF
z2Ydma(;=YuBY(eI|04{hXzZD6_f(v~H;C~y5=DhAC{MMS>2fm~1H_t2$56pc$NH8(
z5bH|<)71dV-_oCHIrzrT`2s-5w_+2CM0$95I6X8p^r!gHp+j_gd;9O<1~CEQQGS8)
zS9Qh3#p&JM-G8rHekNmKVewU;pJRcTAog68KYo^dRo}(M>36U4Us
zfgYWSiHZL3;lpWT=zNAW>Dh#mB!_@Lg%$ms8N-;aPqMn+C2HqZgz&9~Eu
z4|Kp<`$q)Uw1R?y(~S>ePdonHxpV1#eSP1B;Ogo+-Pk}6#0GsZZ5!||ev2MGdh}_m
z{DeR7?0-1^zVs&`AV6Vt;r3`I`OI_wgs*w=eO%_#7Kepl{B@xiyCANc(l
zzIyd4y|c6PXWq9-|KM8(zIk8LPk(>a)zyFWjhT!$HJ$qX1vo@d25W<fvZQ2zUz5WRc(UnFMKHwe1|
zWmlB1qdbiA(C0jmnV<}GfbKtmcu^2*P^O?MBLZKt|As~ge8&AAO~2K@zbXelK|4T<{|y4`raF{=72kC2Kn(L4YyenWgrPiv
z@^mr$t{#X5VuIMeL!7Ab6_kG$&5p*Z{+?5U|TZ`B!7llpVmp@skYz&n^8QfPJzL
z0G6K_OJM9x+Wu2gfN45phANGt{7=C>i34CV{Xqlx(fWpeAoj^N0Biu`w+MVcCUyU*
zDZuzO0>4Z6fbu^T_arWW5n!E45vX8N=bxTVeFoep_G#VmNlQzAI_KTIc{6>c+04vr
zx@W}zE5JNSU>!THJ{J=cqjz+4{L4A{Ob9$ZJ*S1?Ggg3klFp!+Y1@K+pK1DqI|_gq
z5ZDXVpge8-cs!o|;K73#YXZ3AShj50wBvuq3NTOZ`M&qtjj#GOFfgExjg8Gn8>Vq5
z`85n+9|!iLCZF5$HJ$Iu($dm?8~-ofu}tEc+-pyke=3!im#6pk_Wo8IA|fJwD&~~F
zc16osQ)EBo58U7XDuMexaPRjU@h8tXe%S{fA0NH3vGJFhuyyO!Uyl2^&EOpX{9As0
zWj+P>{@}jxH)8|r;2HdupP!vie{sJ28b&bo!8`D^x}TE$%zXNb^X1p@0PJ86`dZyj
z%ce7*{^oo+6%&~I!8hQy-vQ7E)0t0ybH4l%KltWOo~8cO`T=157JqL(oq_rC%ea&4
z2NcTJe-HgFjNg-gZ$6!Y`SMHrlj}Etf7?r!zQTPPSv}{so2e>Fjs1{gzk~LGeesX%r(Lh6rbhSo_n)@@G-FTQy93;l#E)hgP@d_SGvyCp0~o(Y;Ee8{
zdVUDbHm5`2taPUOY^MAGOw*>=s7=Gst=D+p+2yON!0%Hk`
zz5mAhyT4lS*T3LS^WSxUy86q&GnoHxzQ6vm8)VS}_zuqG?+3td68_x;etQAdu@sc6
zQJ&5|4(I?~3d-QOAODHpZ=hlSg(lBZ!JZWCtHHSj`0Wh93-Uk)_S%zsJ~aD>{`A0~
z9{AG(e|q3g5B%wYKRxiL2Y$8(4w6bzchKuloQW#e&S3n+P-
z8!ds-%f;TJ1>)v)##>gd{PdS2Oc3VaR`fr=`O8QIO(6(N!A?pr5C#6fc~Ge@N%Vvu
zaoAX2&(a6eWy_q&UwOhU)|P3J0Qc%OdhzW=F4D|pt0E4osw;%<%Dn58hAWD^XnZD=
z>9~H(3bmLtxpF?a7su6J7M*x1By7YSUbxGi)Ot0P77`}P3{)&5Un{KD?`-e?r21!4vTTnN(4Y6Lin?UkSM
z`MXCTC1@4A4~mvz%Rh2&EwY))LeoT=*`tMoqcEXI>TZU9WTP#l?uFv+@Dn~b(>xh2
z;>B?;Tz2SR&KVb>vGiBSB`@U7VIWFSo=LDSb9F{GF^DbmWAfpms8Sx9OX4CnBJca3
zlj9(x!dIjN?OG1X4l*imJNvRCk}F%!?SOfiOq5y^mZW)jFL@a|r-@d#f7
z2gmU8L3IZq0ynIws=}~m^#@&C%J6QFo~Mo4V`>v7MI-_!EBMMtb%_M&kvAaN)@ZVw
z+`toz&WG#HkWDjnZE!6nk{e-oFdL^$YnbOCN}JC&{$#$O27@|Tn-skXr)2ml2~O!5
zX+gYoxhoc7qoU?C^3~&!U?kRFtnSEecWuH0B0OvLodgUAi}8p1
zrO6RSXHH}DMc$&|?D004DiOVMHV8kXCP@7NKB
zgaZq^^O<7PoKEp72kby@W0Z!Y*Ay{&vfg#C&gG@YVR9g?FEocMUi1gSN$+V+ayF45{a
zuDZDTN}mS|;BO%gEf}pjBfN2-gIrU#G5~cucA;dokXW89%>AyXJJI
z9X4UlIWA|ZYHgbI
z5?oFk@A=Ik7lrEQPDH!H+b`7_Y~aDb_qa=B2^Y&Ow41cU=4WDd40dp5(QS-WMN-=Y
z9g;6_-JdNU;|6cPwf$ak*aJIcwL@1n$#l~zi{c{EW?T;DaW*E8DYq?Umtz{nJ&w-M
zEMyTDrC&9K$d|kZe2#ws6)L=7K+{
zQw{XnV6UC$6-rW0emqm8wJoeZK)wJIcV?dST}Z;G0Arq{dVDu0&4kd%N!3F1*;*pW
zR&qUiFzK=@44#QGw7k1`3t_d8&*kBV->O##t|tonFc2YWrL7_eqg+=+k;!F-`^b8>
z#KWCE8%u4k@EprxqiV$VmmtiWxDLgnGu$Vs<8rppV5EajBXL4nyyZM$SWVm!wnCj-B!Wjqj5-5dNXukI2$$|Bu3Lrw}z65Lc=1G
z^-#WuQOj$hwNGG?*CM_TO8Bg-1+qc>J7k5c51U8g?ZU5n?HYor;~JIjoWH-G>AoUP
ztrWWLbRNqIjW#RT*WqZgPJXU7C)VaW5}MiijYbABmzoru6EmQ*N8cVK7a3|aOB#O&
zBl8JY2WKfmj;h#Q!pN%9o@VNLv{OUL?rixHwOZuvX7{IJ{(EdPpuVFoQqIOa7giLVkBOKL@^smUA!tZ1CKRK}#SSM)iQHk)*R~?M!qkCruaS!#oIL1c
z?J;U~&FfH#*98^G?i}pA{
z9Jg36t4=%6mhY(quYq*vSxptes9qy|7xSlH?G=S@>u>Ebe;|LVhs~@+06N<4CViBk
zUiY$thvX;>Tby6z9Y1edAMQaiH
zm^r3v#$Q#2T=X>bsY#D%s!bhs^M9PMAcHbCc0FMHV{u-dwlL;a1eJ63v5U*?Q_8JO
zT#50!RD619#j_Uf))0ooADz~*9&lN!bBDRUgE>Vud-i5ck%vT=r^yD*^?Mp@Q^v+V
zG#-?gKlr}Eeqifb{|So?HM&g91P8|av8hQoCmQXkd?7wIJwb
z_^v8bbg`SAn{I*4bH$u(RZ6*xUhuA~hc=8czK8SHEKTzSxgbwi~9(OqJB&gwb^l4+m`k*Q;_?>Y-APi1{k
zAHQ)P)G)f|AyjSgcCFps)Fh6Bca*Xznq36!pV6Az&m{O8$wGFD?
zY&O*3*J0;_EqM#jh6^gMQKpXV?#1?>$ml1xvh8nSN>-?H=V;nJIwB07YX$e6vLxH(
zqYwQ>qxwR(i4f)DLd)-$P>T-no_c!LsN@)8`e;W@)-Hj0>nJ-}Kla4-ZdPJzI&Mce
zv)V_j;(3ERN3_@I$N<^|4Lf`B;8n+bX@bHbcZTopEmDI*Jfl)-pFDvo6svPRoo@(x
z);_{lY<;);XzT`dBFpRmGrr}z5u1=pC^S-{ce6iXQlLGcItwJ^mZx{m$&DA_oEZ)B{_bYPq-HA
zcH8WGoBG(aBU_j)vEy+_71T34@4dmSg!|M8Vf92Zj6WH7Q7t#OHQqWgFE3ARt+%!T
z?oLovLVlnf?2c7pTc)~cc^($_8nyKwsN`RA-23ed3sdj(ys%pjjM+9JrctL;dy8a(
z@en&CQmnV(()bu|Y%G1-4a(6x{aLytn$T-;(&{QIJB9vMox11U-1HpD@d(QkaJdEb
zG{)+6Dos_L+O3NpWo^=gR?evp|CqEG?L&Ut#D*KLaRFOgOEK(Kq1@!EGcTfo+%A&I
z=dLbB+d$u{sh?u)xP{PF8L%;YPPW53+@{>5W=Jt#wQpN;0_HYdw1{ksf_XhO4#2F=
zyPx6Lx2<92L-;L5PD`zn6zwIH`Jk($?Qw({erA$^bC;q33hv!d!>%wRhj#
zal^hk+WGNg;rJtb-EB(?czvOM=H7dl=vblBwAv>}%1@{}mnpUznfq1cE^sgsL0*4I
zJ##!*B?=vI_OEVis5o+_IwMIRrpQyT_Sq~ZU%oY7c5JMIADzpD!Upz9h@iWg_>>~j
zOLS;wp^i$-E?4<_cp?RiS%Rd?i;f*mOz=~(&3lo<=@(nR!_Rqiprh@weZlL!t#NCc
zO!QTcInq|%#>OVgobj{~ixEUec`E25zJ~*DofsQdzIa@5^nOXj2T;8O`l--(QyU^$t?TGY^7#&FQ+2SS3B#qK*k3`ye?8jUYSajE5iBbJls75CCc(m3dk{t?-
zopcER9{Z?TC)mk~gpi^kbbu>b-+a{m#8-y2^p$ka4n60w;Sc2}HMf<8JUvhCL0B&Btk)T`ctE$*qNW8L$`7!r^9T+>=<=2qaq-;ll2{`{Rg
zc5a0ZUI$oG&j-qVOuKa=*v4aY#IsoM+1|c4Z)<}lEDvy;5huB@1RJPquU2U*U-;gu
z=En2m+qjBzR#DEJDO`WU)hdd{Vj%^0V*KoyZ|5lzV87&g_j~NCjwv0uQVqXOb*QrQ
zy|Qn`hxx(58c70$E;L(X0uZZ72M1!6oeg)(cdKO
ze0gDaTz+ohR-#d)NbAH4x{I(21yjwvBQfmpLu$)|m{XolbgF!pmsqJ#D}(ylp6uC>
z{bqtcI#hT#HW=wl7>p!38sKsJ`r8}lt-q%Keqy%u(xk=yiIJiUw6|5IvkS+#?JTBl
z8H5(Q?l#wzazujH!8o>1xtn8#_w+397*_cy8!pQGP%K(Ga3pAjsaTbbXJlQF_+m+-UpUUent@xM
zg%jqLUExj~o^vQ3Gl*>wh=_gOr2*|U64_iXb+-111aH}$TjeajM+I20xw(((>fej-@CIz4S1pi$(#}P7`4({6QS2CaQS4NPENDp>sAqD
z$bH4KGzXGffkJ7R>V>)>tC)uax{UsN*dbeNC*v}#8Y#OWYwL4t$ePR?VTyIs!wea+
z5Urmc)X|^`MG~*dS6pGSbU+gPJoq*^a=_>$n4|P^w$sMBBy@f*Z^Jg6?n5?oId6f{
z$LW4M|4m502z0t7g<#Bx%X;9<=)smFolV&(V^(7Cv2-sxbxopQ!)*#ZRhTBpx1)Fc
zNm1T%bONzv6@#|dz(w02AH8OXe>kQ#1FMCzO}2J_mST)+ExmBr9cva-@?;wnmWMOk
z{3_~EX_xadgJGv&H@zK_8{(x84`}+c?oSBX*Ge3VdfTt&F}yCpFP?CpW+BE^cWY0^
zb&uBN!Ja3UzYHK-CTyA5=L
zEMW{l3Usky#ly=7px648W31UNV@K)&Ub&zP1c7%)`{);I4b0Q<)B}3;NMG2JH=X$U
zfIW4)4n9ZM`-yRj67I)YSLDK)qfUJ_ij}a#aZN~9EXrh8eZY2&=uY%2N0UFF7<~%M
zsB8=erOWZ>Ct_#^tHZ|*q`H;A)5;ycw*IcmVxi8_0Xk}aJA^ath+E;xg!x+As(M#0=)3!NJR6H&9+zd#iP(m0PIW8$
z1Y^VX`>jm`W!=WpF*{ioM?C9`yOR>@0q=u7o>BP-eSHqCgMDj!2anwH?s%i2p+Q7D
zzszIf5XJpE)IG4;d_(La-xenmF(tgAxK`Y4sQ}BSJEPs6N_U2vI{8=0C_F?@7<(G;
zo$~G=8p+076G;`}>{MQ>t>7cm=zGtfbdDXm6||jUU|?X?CaE?(<6bKDYKeHlz}DA8
zXT={X=yp_R;HfJ9h%?eWvQ!dRgz&Su*JfNt!Wu>|XfU&68iRikRrHRW|ZxzRR^`eIGt
zIeiDgVS>IeExKVRWW8-=A=yA`}`)ZkWBrZD`hpWIxBGkh&f#ijr449~m`j6{4jiJ*C!oVA8ZC?$1RM#K(_b
zL9TW)kN*Y4%^-qPpMP7d4)o?Nk#>aoYHT(*g)qmRUb?**F@pnNiy6Fv9rEiUqD(^O
zzyS?nBrX63BTRYduaG(0VVG2yJRe%o&rVrLjbxTaAFTd8s;<<@Qs>u(<193R8>}2_
zuwp{7;H2a*X7_jryzriZXMg?bTuegABb^87@SsKkr2)0Gyiax8KQWstw^v#ix45EVrcEhr>!NMhprl$InQMzjSFH54x5k9qHc`@9uKQzvL4ihcq{^B
zPrVR=o_ic%Y>6&rMN)hTZsI7I<3&`#(nl+3y3ys9A~&^=4?PL&nd8)`OfG#n
zwAMN$1&>K++c{^|7<4P=2y(B{jJsQ0a#U;HTo4ZmWZYvI{+s;Td{Yzem%0*k#)vjpB
zia;J&>}ICate44SFYY3vEelqStQWFihx%^vQ@Do(sOy7yR2@WNv7Y9I^yL=nZr3mb
zXKV5t@=?-Sk|b{XMhA7ZGB@2hqsx}4xwCW!in#C
zI@}scZlr3-NFJ@NFaJlhyfcw{k^vvtGl`N9xSo**rDW4S}i
zM9{fMPWo%4wYDG~BZ18BD+}h|GQKc-g^{++3MY>}W_uq7jGHx{mwE9fZiPCoxN$+7
zrODGGJrOkcPQUB(FD5aoS4g~7#6NR^ma7-!>mHuJfY5kTe6PpNNKC9GGRiu^L31uG
z$7v`*JknQHsYB!Tm_W{a32TM099djW%5e+j0Ve_ct}IM>XLF1Ap+YvcrLV=|CKo6S
zb+9Nl3_YdKP6%Cxy@6TxZ>;4&nTneadr
z_ES90ydCev)LV!dN=#(*f}|ZORFdvkYBni^aLbUk>BajeWIOcmHP#8S)*2U~QKI%S
zyrLmtPqb&TphJ;>yAxri#;{uyk`JJqODDw%(Z=2`1uc}br^V%>j!gS)D*q*f_-qf8&D;W1dJgQMlaH5er
zN2U<%Smb7==vE}dDI8K7cKz!vs^73o9f>2sgiTzWcwY|BMYHH5%Vn7#kiw&eItCqa
zIkR2~Q}>X=Ar8W|^Ms41Fm8o6IB2_j60eOeBB1Br!boW7JnoeX6Gs)?7rW0^5psc-
zjS16yb>dFn>KPOF;imD}e!enuIniFzv}n$m2#gCCv4jM#ArwlzZ$7@9&XkFxZ4n!V
zj3dyiwW4Ki2QG{@i>yuZXQizw_OkZI^-3otXC{!(lUpJF33gI60ak;Uqitp74|B6I
zgg{b=Iz}WkhCGj1M=hu4#Aw173YxIVbISaoc
z-nLZC*6Tgivd5V`K%GxhBsp@SUU60-rfc$=wb>zdJzXS&-5(NRRodFk;Kxk!S(O(a0e7oY=E(
zAyS;Ow?6Q&XA+cnkCb{28_1N8H#?J!*$MmIwLq^*T_9-z^&UE@A(z9oGYtFy6EZef
LrJugUA?W`A8`#=m
diff --git a/apps/demo/scripts/manifest.mjs b/apps/demo/scripts/manifest.mjs
deleted file mode 100644
index 33a57edc..00000000
--- a/apps/demo/scripts/manifest.mjs
+++ /dev/null
@@ -1,29 +0,0 @@
-import fs from "node:fs";
-
-const baseUrl = (process.env.BASE_PATH ?? "") + "/";
-
-fs.writeFileSync(
- new URL("../public/manifest.json", import.meta.url),
- JSON.stringify(
- {
- name: "Tango",
- short_name: "Tango",
- categories: ["utilities", "developer"],
- description: "ADB in your browser",
- scope: baseUrl,
- start_url: baseUrl,
- background_color: "#ffffff",
- display: "standalone",
- icons: [
- {
- src: "favicon-256.png",
- type: "image/png",
- sizes: "256x256",
- },
- ],
- },
- undefined,
- 4
- ),
- "utf8"
-);
diff --git a/apps/demo/src/components/command-bar-spacer-item.tsx b/apps/demo/src/components/command-bar-spacer-item.tsx
deleted file mode 100644
index ebf1c09f..00000000
--- a/apps/demo/src/components/command-bar-spacer-item.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import { useEffect, useState } from "react";
-
-export function CommandBarSpacerItem() {
- const [container, setContainer] = useState(null);
-
- useEffect(() => {
- if (!container) {
- return;
- }
-
- const parent = container.parentElement!;
- const originalFlexGrow = parent.style.flexGrow;
- parent.style.flexGrow = "1";
- return () => {
- parent.style.flexGrow = originalFlexGrow;
- };
- }, [container]);
-
- return ;
-}
diff --git a/apps/demo/src/components/command-bar.tsx b/apps/demo/src/components/command-bar.tsx
deleted file mode 100644
index 0773eaaf..00000000
--- a/apps/demo/src/components/command-bar.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { CommandBar as FluentCommandBar, ICommandBarProps, StackItem } from '@fluentui/react';
-import { withDisplayName } from '../utils/with-display-name';
-
-const ContainerStyles = {
- root: {
- borderBottom: '1px solid rgb(243, 242, 241)',
- }
-} as const;
-
-export const CommandBar = withDisplayName('CommandBar')((props: ICommandBarProps) => {
- return (
-
-
-
- );
-});
diff --git a/apps/demo/src/components/connect.tsx b/apps/demo/src/components/connect.tsx
deleted file mode 100644
index 39e66c14..00000000
--- a/apps/demo/src/components/connect.tsx
+++ /dev/null
@@ -1,389 +0,0 @@
-import {
- DefaultButton,
- Dialog,
- Dropdown,
- IDropdownOption,
- PrimaryButton,
- ProgressIndicator,
- Stack,
- StackItem,
-} from "@fluentui/react";
-import {
- Adb,
- AdbDaemonDevice,
- AdbDaemonTransport,
- AdbPacketData,
- AdbPacketInit,
-} from "@yume-chan/adb";
-import AdbWebCredentialStore from "@yume-chan/adb-credential-web";
-import AdbDaemonDirectSocketsDevice from "@yume-chan/adb-daemon-direct-sockets";
-import {
- AdbDaemonWebUsbDeviceManager,
- AdbDaemonWebUsbDeviceWatcher,
-} from "@yume-chan/adb-daemon-webusb";
-import AdbDaemonWebSocketDevice from "@yume-chan/adb-daemon-ws";
-import {
- Consumable,
- InspectStream,
- ReadableStream,
- WritableStream,
- pipeFrom,
-} from "@yume-chan/stream-extra";
-import { observer } from "mobx-react-lite";
-import { useCallback, useEffect, useMemo, useState } from "react";
-import { GLOBAL_STATE } from "../state";
-import { CommonStackTokens, Icons } from "../utils";
-
-const DropdownStyles = { dropdown: { width: "100%" } };
-
-const CredentialStore = new AdbWebCredentialStore();
-
-function ConnectCore(): JSX.Element | null {
- const [selected, setSelected] = useState();
- const [connecting, setConnecting] = useState(false);
-
- const [usbSupported, setUsbSupported] = useState(true);
- const [usbDeviceList, setUsbDeviceList] = useState([]);
- const updateUsbDeviceList = useCallback(async () => {
- const devices: AdbDaemonDevice[] =
- await AdbDaemonWebUsbDeviceManager.BROWSER!.getDevices();
- setUsbDeviceList(devices);
- return devices;
- }, []);
-
- useEffect(
- () => {
- // Only run on client
- const supported = !!AdbDaemonWebUsbDeviceManager.BROWSER;
- setUsbSupported(supported);
-
- if (!supported) {
- GLOBAL_STATE.showErrorDialog(
- "Your browser does not support WebUSB standard, which is required for this site to work.\n\nLatest version of Google Chrome, Microsoft Edge, or other Chromium-based browsers are required."
- );
- return;
- }
-
- updateUsbDeviceList();
-
- const watcher = new AdbDaemonWebUsbDeviceWatcher(
- async (serial?: string) => {
- const list = await updateUsbDeviceList();
-
- if (serial) {
- setSelected(
- list.find((device) => device.serial === serial)
- );
- return;
- }
- },
- globalThis.navigator.usb
- );
-
- return () => watcher.dispose();
- },
- /* eslint-disable-next-line react-hooks/exhaustive-deps */
- []
- );
-
- const [webSocketDeviceList, setWebSocketDeviceList] = useState<
- AdbDaemonWebSocketDevice[]
- >([]);
- useEffect(() => {
- const savedList = localStorage.getItem("ws-backend-list");
- if (!savedList) {
- return;
- }
-
- const parsed = JSON.parse(savedList) as { address: string }[];
- setWebSocketDeviceList(
- parsed.map((x) => new AdbDaemonWebSocketDevice(x.address))
- );
- }, []);
-
- const addWebSocketDevice = useCallback(() => {
- const address = window.prompt("Enter the address of WebSockify server");
- if (!address) {
- return;
- }
- setWebSocketDeviceList((list) => {
- const copy = list.slice();
- copy.push(new AdbDaemonWebSocketDevice(address));
- globalThis.localStorage.setItem(
- "ws-backend-list",
- JSON.stringify(copy.map((x) => ({ address: x.serial })))
- );
- return copy;
- });
- }, []);
-
- const [tcpDeviceList, setTcpDeviceList] = useState<
- AdbDaemonDirectSocketsDevice[]
- >([]);
- useEffect(() => {
- if (!AdbDaemonDirectSocketsDevice.isSupported()) {
- return;
- }
-
- const savedList = localStorage.getItem("tcp-backend-list");
- if (!savedList) {
- return;
- }
-
- const parsed = JSON.parse(savedList) as {
- address: string;
- port: number;
- }[];
- setTcpDeviceList(
- parsed.map(
- (x) => new AdbDaemonDirectSocketsDevice(x.address, x.port)
- )
- );
- }, []);
-
- const addTcpDevice = useCallback(() => {
- const host = window.prompt("Enter the address of device");
- if (!host) {
- return;
- }
-
- const port = window.prompt("Enter the port of device", "5555");
- if (!port) {
- return;
- }
-
- const portNumber = Number.parseInt(port, 10);
-
- setTcpDeviceList((list) => {
- const copy = list.slice();
- copy.push(new AdbDaemonDirectSocketsDevice(host, portNumber));
- globalThis.localStorage.setItem(
- "tcp-backend-list",
- JSON.stringify(
- copy.map((x) => ({
- address: x.host,
- port: x.port,
- }))
- )
- );
- return copy;
- });
- }, []);
-
- const handleSelectedChange = (
- e: React.FormEvent,
- option?: IDropdownOption
- ) => {
- setSelected(option?.data as AdbDaemonDevice);
- };
-
- const addUsbDevice = useCallback(async () => {
- const device =
- await AdbDaemonWebUsbDeviceManager.BROWSER!.requestDevice();
- setSelected(device);
- await updateUsbDeviceList();
- }, [updateUsbDeviceList]);
-
- const connect = useCallback(async () => {
- if (!selected) {
- return;
- }
-
- setConnecting(true);
-
- let readable: ReadableStream;
- let writable: WritableStream>;
- try {
- const streams = await selected.connect();
-
- // Use `InspectStream`s to intercept and log packets
- readable = streams.readable.pipeThrough(
- new InspectStream((packet) => {
- GLOBAL_STATE.appendLog("in", packet);
- })
- );
-
- writable = pipeFrom(
- streams.writable,
- new InspectStream((packet: Consumable) => {
- GLOBAL_STATE.appendLog("out", packet.value);
- })
- );
- } catch (e: any) {
- GLOBAL_STATE.showErrorDialog(e);
- setConnecting(false);
- return;
- }
-
- async function dispose() {
- // Adb won't close the streams,
- // so manually close them.
- try {
- readable.cancel();
- } catch {}
- try {
- await writable.close();
- } catch {}
- GLOBAL_STATE.setDevice(undefined, undefined);
- }
-
- try {
- const device = new Adb(
- await AdbDaemonTransport.authenticate({
- serial: selected.serial,
- connection: { readable, writable },
- credentialStore: CredentialStore,
- })
- );
-
- device.disconnected.then(
- async () => {
- await dispose();
- },
- async (e) => {
- GLOBAL_STATE.showErrorDialog(e);
- await dispose();
- }
- );
-
- GLOBAL_STATE.setDevice(selected, device);
- } catch (e: any) {
- GLOBAL_STATE.showErrorDialog(e);
- await dispose();
- } finally {
- setConnecting(false);
- }
- }, [selected]);
-
- const disconnect = useCallback(async () => {
- try {
- await GLOBAL_STATE.adb!.close();
- } catch (e: any) {
- GLOBAL_STATE.showErrorDialog(e);
- }
- }, []);
-
- const deviceList = useMemo(
- () =>
- ([] as AdbDaemonDevice[]).concat(
- usbDeviceList,
- webSocketDeviceList,
- tcpDeviceList
- ),
- [usbDeviceList, webSocketDeviceList, tcpDeviceList]
- );
-
- const deviceOptions = useMemo(() => {
- return deviceList.map((device) => ({
- key: device.serial,
- text: `${device.serial} ${device.name ? `(${device.name})` : ""}`,
- data: device,
- }));
- }, [deviceList]);
-
- useEffect(() => {
- setSelected((old) => {
- if (old) {
- const current = deviceList.find(
- (device) => device.serial === old.serial
- );
- if (current) {
- return current;
- }
- }
-
- return deviceList.length ? deviceList[0] : undefined;
- });
- }, [deviceList]);
-
- const addMenuProps = useMemo(() => {
- const items = [];
-
- if (usbSupported) {
- items.push({
- key: "usb",
- text: "USB",
- onClick: addUsbDevice,
- });
- }
-
- items.push({
- key: "websocket",
- text: "WebSocket",
- onClick: addWebSocketDevice,
- });
-
- if (AdbDaemonDirectSocketsDevice.isSupported()) {
- items.push({
- key: "direct-sockets",
- text: "Direct Sockets TCP",
- onClick: addTcpDevice,
- });
- }
-
- return {
- items,
- };
- }, [usbSupported, addUsbDevice, addWebSocketDevice, addTcpDevice]);
-
- return (
-
-
-
- {!GLOBAL_STATE.adb ? (
-
-
-
-
-
-
-
-
- ) : (
-
- )}
-
-
-
- );
-}
-
-export const Connect = observer(ConnectCore);
diff --git a/apps/demo/src/components/demo-mode-panel.tsx b/apps/demo/src/components/demo-mode-panel.tsx
deleted file mode 100644
index 10eb3a13..00000000
--- a/apps/demo/src/components/demo-mode-panel.tsx
+++ /dev/null
@@ -1,407 +0,0 @@
-import {
- Dropdown,
- IDropdownOption,
- Position,
- Separator,
- SpinButton,
- Toggle,
-} from "@fluentui/react";
-import {
- DemoMode,
- DemoModeMobileDataType,
- DemoModeMobileDataTypes,
- DemoModeSignalStrength,
- DemoModeStatusBarMode,
- DemoModeStatusBarModes,
-} from "@yume-chan/android-bin";
-import { autorun, makeAutoObservable, reaction, runInAction } from "mobx";
-import { observer } from "mobx-react-lite";
-import { CSSProperties, useCallback } from "react";
-import { GLOBAL_STATE } from "../state";
-
-const SignalStrengthOptions = Object.values(DemoModeSignalStrength).map(
- (key) => ({
- key,
- text: {
- [DemoModeSignalStrength.Hidden]: "Hidden",
- [DemoModeSignalStrength.Level0]: "Level 0",
- [DemoModeSignalStrength.Level1]: "Level 1",
- [DemoModeSignalStrength.Level2]: "Level 2",
- [DemoModeSignalStrength.Level3]: "Level 3",
- [DemoModeSignalStrength.Level4]: "Level 4",
- }[key],
- })
-);
-
-const MobileDataTypeOptions = DemoModeMobileDataTypes.map((key) => ({
- key,
- text: {
- "1x": "1X",
- "3g": "3G",
- "4g": "4G",
- "4g+": "4G+",
- "5g": "5G",
- "5ge": "5GE",
- "5g+": "5G+",
- e: "EDGE",
- // cspell: disable-next-line
- g: "GPRS",
- // cspell: disable-next-line
- h: "HSPA",
- // cspell: disable-next-line
- "h+": "HSPA+",
- lte: "LTE",
- "lte+": "LTE+",
- dis: "Disabled",
- not: "Not default SIM",
- null: "Unknown",
- }[key],
-}));
-
-const StatusBarModeOptions = DemoModeStatusBarModes.map((key) => ({
- key,
- text: {
- opaque: "Opaque",
- translucent: "Translucent",
- "semi-transparent": "Semi-transparent",
- transparent: "Transparent",
- warning: "Warning",
- }[key],
-}));
-
-class DemoModePanelState {
- demoMode: DemoMode | undefined;
-
- allowed = false;
- enabled = false;
- features: Map = new Map();
-
- constructor() {
- makeAutoObservable(this);
-
- reaction(
- () => GLOBAL_STATE.adb,
- async (device) => {
- if (device) {
- runInAction(() => (this.demoMode = new DemoMode(device)));
- const allowed = await this.demoMode!.getAllowed();
- runInAction(() => (this.allowed = allowed));
- if (allowed) {
- const enabled = await this.demoMode!.getEnabled();
- runInAction(() => (this.enabled = enabled));
- }
- } else {
- this.demoMode = undefined;
- this.allowed = false;
- this.enabled = false;
- this.features.clear();
- }
- },
- { fireImmediately: true }
- );
-
- // Apply all features when enable
- autorun(() => {
- if (this.enabled) {
- for (const group of FEATURES) {
- for (const feature of group) {
- feature.onChange(
- this.features.get(feature.key) ?? feature.initial
- );
- }
- }
- }
- });
- }
-}
-
-const state = new DemoModePanelState();
-
-interface FeatureDefinition {
- key: string;
- label: string;
- type: string;
- min?: number;
- max?: number;
- step?: number;
- options?: { key: string; text: string }[];
- initial: unknown;
- onChange: (value: unknown) => void;
-}
-
-const FEATURES: FeatureDefinition[][] = [
- [
- {
- key: "batteryLevel",
- label: "Battery Level",
- type: "number",
- min: 0,
- max: 100,
- step: 1,
- initial: 100,
- onChange: (value) =>
- state.demoMode!.setBatteryLevel(value as number),
- },
- {
- key: "batteryCharging",
- label: "Battery Charging",
- type: "boolean",
- initial: false,
- onChange: (value) =>
- state.demoMode!.setBatteryCharging(value as boolean),
- },
- {
- key: "powerSaveMode",
- label: "Power Save Mode",
- type: "boolean",
- initial: false,
- onChange: (value) =>
- state.demoMode!.setPowerSaveMode(value as boolean),
- },
- ],
- [
- {
- key: "wifiSignalStrength",
- label: "Wifi Signal Strength",
- type: "select",
- options: SignalStrengthOptions,
- initial: DemoModeSignalStrength.Level4,
- onChange: (value) =>
- state.demoMode!.setWifiSignalStrength(
- value as DemoModeSignalStrength
- ),
- },
- {
- key: "airplaneMode",
- label: "Airplane Mode",
- type: "boolean",
- initial: false,
- onChange: (value) =>
- state.demoMode!.setAirplaneMode(value as boolean),
- },
- {
- key: "mobileDataType",
- label: "Mobile Data Type",
- type: "select",
- options: MobileDataTypeOptions,
- initial: "lte",
- onChange: (value) =>
- state.demoMode!.setMobileDataType(
- value as DemoModeMobileDataType
- ),
- },
- {
- key: "mobileSignalStrength",
- label: "Mobile Signal Strength",
- type: "select",
- options: SignalStrengthOptions,
- initial: DemoModeSignalStrength.Level4,
- onChange: (value) =>
- state.demoMode!.setMobileSignalStrength(
- value as DemoModeSignalStrength
- ),
- },
- ],
- [
- {
- key: "statusBarMode",
- label: "Status Bar Mode",
- type: "select",
- options: StatusBarModeOptions,
- initial: "transparent",
- onChange: (value) =>
- state.demoMode!.setStatusBarMode(
- value as DemoModeStatusBarMode
- ),
- },
- {
- key: "vibrateMode",
- label: "Vibrate Mode Indicator",
- type: "boolean",
- initial: false,
- onChange: (value) =>
- state.demoMode!.setVibrateModeEnabled(value as boolean),
- },
- {
- key: "bluetoothConnected",
- label: "Bluetooth Indicator",
- type: "boolean",
- initial: false,
- onChange: (value) =>
- state.demoMode!.setBluetoothConnected(value as boolean),
- },
- {
- key: "locatingIcon",
- label: "Locating Icon",
- type: "boolean",
- initial: false,
- onChange: (value) =>
- state.demoMode!.setLocatingIcon(value as boolean),
- },
- {
- key: "alarmIcon",
- label: "Alarm Icon",
- type: "boolean",
- initial: false,
- onChange: (value) => state.demoMode!.setAlarmIcon(value as boolean),
- },
- {
- key: "notificationsVisibility",
- label: "Notifications Visibility",
- type: "boolean",
- initial: true,
- onChange: (value) =>
- state.demoMode!.setNotificationsVisibility(value as boolean),
- },
- {
- key: "hour",
- label: "Clock Hour",
- type: "number",
- min: 0,
- max: 23,
- step: 1,
- initial: 12,
- onChange: (value) =>
- state.demoMode!.setTime(
- value as number,
- (state.features.get("minute") as number | undefined) ?? 34
- ),
- },
- {
- key: "minute",
- label: "Clock Minute",
- type: "number",
- min: 0,
- max: 59,
- step: 1,
- initial: 34,
- onChange: (value) =>
- state.demoMode!.setTime(
- (state.features.get("hour") as number | undefined) ?? 34,
- value as number
- ),
- },
- ],
-];
-
-const FeatureBase = ({ feature }: { feature: FeatureDefinition }) => {
- const handleChange = useCallback(
- (e: unknown, value: unknown) => {
- switch (feature.type) {
- case "select":
- value = (value as IDropdownOption).key;
- break;
- case "number":
- value = parseFloat(value as string);
- default:
- break;
- }
-
- feature.onChange(value);
- runInAction(() => {
- state.features.set(feature.key, value);
- state.enabled = true;
- });
- },
- [feature]
- );
-
- const value = state.features.get(feature.key) ?? feature.initial;
-
- switch (feature.type) {
- case "boolean":
- return (
-
- );
- case "number":
- return (
-
- );
- case "select":
- return (
-
- );
- default:
- return null;
- }
-};
-
-const Feature = observer(FeatureBase);
-
-export interface DemoModePanelProps {
- style?: CSSProperties;
-}
-
-export const DemoModePanel = observer(({ style }: DemoModePanelProps) => {
- const handleAllowedChange = useCallback(
- async (e: unknown, value?: boolean) => {
- await state.demoMode!.setAllowed(value!);
- runInAction(() => {
- state.allowed = value!;
- state.enabled = false;
- });
- },
- []
- );
-
- const handleEnabledChange = useCallback(
- async (e: unknown, value?: boolean) => {
- await state.demoMode!.setEnabled(value!);
- runInAction(() => (state.enabled = value!));
- },
- []
- );
-
- return (
-
-
-
-
-
-
- Note:
-
- Device may not support all options.
-
- {FEATURES.map((group, index) => (
-
-
-
- {group.map((feature) => (
-
- ))}
-
- ))}
-
- );
-});
diff --git a/apps/demo/src/components/device-view.tsx b/apps/demo/src/components/device-view.tsx
deleted file mode 100644
index b20cfd53..00000000
--- a/apps/demo/src/components/device-view.tsx
+++ /dev/null
@@ -1,161 +0,0 @@
-import { StackItem } from "@fluentui/react";
-import { makeStyles } from "@griffel/react";
-import {
- CSSProperties,
- ComponentType,
- HTMLAttributes,
- ReactNode,
- useImperativeHandle,
- useMemo,
- useRef,
- useState,
-} from "react";
-import { forwardRef } from "../utils/with-display-name";
-import { ResizeObserver, Size } from "./resize-observer";
-
-export interface DeviceViewProps extends HTMLAttributes {
- width: number;
-
- height: number;
-
- BottomElement?: ComponentType<{
- className: string;
- style: CSSProperties;
- children: ReactNode;
- }>;
-
- children?: ReactNode;
-}
-
-export interface DeviceViewRef {
- enterFullscreen(): void;
-}
-
-const useClasses = makeStyles({
- outer: {
- width: "100%",
- height: "100%",
- backgroundColor: "black",
- },
- inner: {
- position: "absolute",
- transformOrigin: "top left",
- },
- bottom: {
- position: "absolute",
- },
-});
-
-export const DeviceView = forwardRef("DeviceView")(
- (
- { width, height, BottomElement, children, ...props }: DeviceViewProps,
- ref
- ) => {
- const classes = useClasses();
-
- const [containerSize, setContainerSize] = useState({
- width: 0,
- height: 0,
- });
- const [bottomSize, setBottomSize] = useState({
- width: 0,
- height: 0,
- });
-
- // Container size minus bottom element size
- const usableSize = useMemo(
- () => ({
- width: containerSize.width,
- height: containerSize.height - bottomSize.height,
- }),
- [containerSize, bottomSize]
- );
-
- // Compute sizes after scaling
- const childrenStyle = useMemo(() => {
- let scale: number;
- let childrenWidth: number;
- let childrenHeight: number;
- let childrenTop: number;
- let childrenLeft: number;
-
- if (width === 0 || usableSize.width === 0) {
- scale = 1;
- childrenWidth = 0;
- childrenHeight = 0;
- childrenTop = 0;
- childrenLeft = 0;
- } else {
- const videoRatio = width / height;
- const containerRatio = usableSize.width / usableSize.height;
-
- if (videoRatio > containerRatio) {
- scale = usableSize.width / width;
- childrenWidth = usableSize.width;
- childrenHeight = height * scale;
- childrenTop = (usableSize.height - childrenHeight) / 2;
- childrenLeft = 0;
- } else {
- scale = usableSize.height / height;
- childrenWidth = width * scale;
- childrenHeight = usableSize.height;
- childrenTop = 0;
- childrenLeft = (usableSize.width - childrenWidth) / 2;
- }
- }
-
- return {
- scale,
- width: childrenWidth,
- height: childrenHeight,
- top: childrenTop,
- left: childrenLeft,
- };
- }, [width, height, usableSize]);
-
- const containerRef = useRef(null);
- useImperativeHandle(
- ref,
- () => ({
- enterFullscreen() {
- containerRef.current!.requestFullscreen();
- },
- }),
- []
- );
-
- return (
-
-
-
-
-
- {children}
-
-
- {!!width && !!BottomElement && (
-
-
-
- )}
-
-
- );
- }
-);
diff --git a/apps/demo/src/components/error-dialog.tsx b/apps/demo/src/components/error-dialog.tsx
deleted file mode 100644
index 6c8d4e29..00000000
--- a/apps/demo/src/components/error-dialog.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import {
- Dialog,
- DialogFooter,
- DialogType,
- PrimaryButton,
-} from "@fluentui/react";
-import { observer } from "mobx-react-lite";
-import { PropsWithChildren } from "react";
-import { GLOBAL_STATE } from "../state";
-
-export const ErrorDialogProvider = observer((props: PropsWithChildren<{}>) => {
- return (
- <>
- {props.children}
-
-
- >
- );
-});
diff --git a/apps/demo/src/components/external-link.tsx b/apps/demo/src/components/external-link.tsx
deleted file mode 100644
index d33024a8..00000000
--- a/apps/demo/src/components/external-link.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Link } from '@fluentui/react';
-import { ReactNode } from 'react';
-import { withDisplayName } from '../utils/with-display-name';
-
-export interface ExternalLinkProps {
- href: string;
- spaceBefore?: boolean;
- spaceAfter?: boolean;
- children?: ReactNode;
-}
-
-export const ExternalLink = withDisplayName('ExternalLink')(({
- href,
- spaceBefore,
- spaceAfter,
- children,
-}: ExternalLinkProps) => {
- return (
- <>
- {spaceBefore && ' '}
- {children ?? href}
- {spaceAfter && ' '}
- >
- );
-});
diff --git a/apps/demo/src/components/grid.tsx b/apps/demo/src/components/grid.tsx
deleted file mode 100644
index 220ea15a..00000000
--- a/apps/demo/src/components/grid.tsx
+++ /dev/null
@@ -1,384 +0,0 @@
-import { makeStyles, mergeClasses, shorthands } from "@griffel/react";
-import {
- CSSProperties,
- ComponentType,
- HTMLAttributes,
- useEffect,
- useMemo,
- useState,
-} from "react";
-import { useStableCallback, withDisplayName } from "../utils";
-import { ResizeObserver, Size } from "./resize-observer";
-
-const useClasses = makeStyles({
- container: {
- display: "flex",
- flexDirection: "column",
- outlineStyle: "none",
- ...shorthands.overflow("hidden"),
- },
- header: {
- position: "relative",
- },
- body: {
- position: "relative",
- flexGrow: 1,
- height: 0,
- ...shorthands.overflow("auto"),
- },
- placeholder: {
- // make horizontal scrollbar visible
- minHeight: "1px",
- },
- row: {
- position: "absolute",
- top: 0,
- left: 0,
- right: 0,
- willChange: "transform",
- },
- cell: {
- position: "absolute",
- top: 0,
- left: 0,
- willChange: "transform",
- },
-});
-
-export interface GridCellProps {
- className: string;
- style: CSSProperties;
- rowIndex: number;
- columnIndex: number;
-}
-
-export interface GridCellWrapperProps {
- CellComponent: ComponentType;
- rowIndex: number;
- rowHeight: number;
- columnIndex: number;
- columnWidth: number;
- columnOffset: number;
-}
-
-const GridCellWrapper = withDisplayName("GridCellWrapper")(
- ({
- CellComponent,
- rowIndex,
- rowHeight,
- columnIndex,
- columnWidth,
- columnOffset,
- }: GridCellWrapperProps) => {
- const classes = useClasses();
-
- const styles = useMemo(
- () => ({
- width: columnWidth,
- height: rowHeight,
- transform: `translateX(${columnOffset}px)`,
- }),
- [rowHeight, columnWidth, columnOffset]
- );
-
- return (
-
- );
- }
-);
-
-export interface GridRowProps {
- className: string;
- style: CSSProperties;
- rowIndex: number;
- children: React.ReactNode;
-}
-
-export interface GridColumn {
- width: number;
- minWidth?: number;
- maxWidth?: number;
- flexGrow?: number;
- flexShrink?: number;
- CellComponent: ComponentType;
-}
-
-interface GridRowWrapperProps {
- RowComponent: ComponentType;
- rowIndex: number;
- rowHeight: number;
- columns: (GridColumn & { offset: number })[];
-}
-
-const GridRowWrapper = withDisplayName("GridRowWrapper")(
- ({ RowComponent, rowIndex, rowHeight, columns }: GridRowWrapperProps) => {
- const classes = useClasses();
-
- const styles = useMemo(
- () => ({
- height: rowHeight,
- transform: `translateY(${rowIndex * rowHeight}px)`,
- }),
- [rowIndex, rowHeight]
- );
-
- return (
-
- {columns.map((column, columnIndex) => (
-
- ))}
-
- );
- }
-);
-
-export interface GridHeaderProps {
- className: string;
- columnIndex: number;
- style: CSSProperties;
-}
-
-export interface GridProps extends HTMLAttributes {
- rowCount: number;
- rowHeight: number;
- columns: GridColumn[];
- HeaderComponent: ComponentType;
- RowComponent: ComponentType;
-}
-
-export const Grid = withDisplayName("Grid")(
- ({
- className,
- rowCount,
- rowHeight,
- columns,
- HeaderComponent,
- RowComponent,
- ...props
- }: GridProps) => {
- const classes = useClasses();
-
- const [scrollLeft, setScrollLeft] = useState(0);
- const [scrollTop, setScrollTop] = useState(0);
-
- const [bodyRef, setBodyRef] = useState(null);
- const [bodySize, setBodySize] = useState({ width: 0, height: 0 });
-
- const [autoScroll, setAutoScroll] = useState(true);
-
- const handleScroll = useStableCallback(() => {
- if (bodyRef && bodyRef.scrollTop !== scrollTop) {
- if (autoScroll) {
- if (
- scrollTop <
- bodyRef.scrollHeight - bodyRef.clientHeight &&
- bodyRef.scrollTop < scrollTop
- ) {
- setAutoScroll(false);
- }
- } else if (
- bodyRef.scrollTop + bodyRef.offsetHeight >=
- bodyRef.scrollHeight - 10
- ) {
- setAutoScroll(true);
- }
-
- setScrollLeft(bodyRef.scrollLeft);
- setScrollTop(bodyRef.scrollTop);
- }
- });
-
- useEffect(() => {
- if (bodyRef) {
- setScrollLeft(bodyRef.scrollLeft);
- setScrollTop(bodyRef.scrollTop);
- }
- }, [bodyRef]);
-
- const rowRange = useMemo(() => {
- const start = Math.min(rowCount, Math.floor(scrollTop / rowHeight));
- const end = Math.min(
- rowCount,
- Math.ceil((scrollTop + bodySize.height) / rowHeight)
- );
- return { start, end, offset: scrollTop - start * rowHeight };
- }, [scrollTop, bodySize.height, rowCount, rowHeight]);
-
- const columnMetadata = useMemo(() => {
- if (bodySize.width === 0) {
- return {
- columns: [],
- totalWidth: 0,
- };
- }
-
- const result = [];
- let requestedWidth = 0;
- let columnsCanGrow = [];
- let totalFlexGrow = 0;
- let columnsCanShrink = [];
- let totalFlexShrink = 0;
- for (const column of columns) {
- const copy = { ...column, offset: 0 };
- result.push(copy);
-
- requestedWidth += copy.width;
-
- if (copy.flexGrow !== undefined) {
- columnsCanGrow.push(copy);
- totalFlexGrow += copy.flexGrow;
- }
-
- if (copy.flexShrink !== 0) {
- if (copy.flexShrink === undefined) {
- copy.flexShrink = 1;
- }
- if (copy.minWidth === undefined) {
- copy.minWidth = 0;
- }
- columnsCanShrink.push(copy);
- totalFlexShrink += copy.flexShrink;
- }
- }
-
- let extraWidth = bodySize.width - requestedWidth;
- while (extraWidth > 1 && columnsCanGrow.length > 0) {
- const growPerRatio = extraWidth / totalFlexGrow;
- columnsCanGrow = columnsCanGrow.filter((column) => {
- let canGrowFurther = true;
- const initialWidth = column.width;
- column.width += column.flexGrow! * growPerRatio;
- if (
- column.maxWidth !== undefined &&
- column.width > column.maxWidth
- ) {
- column.width = column.maxWidth;
- canGrowFurther = false;
- }
- extraWidth -= column.width - initialWidth;
- return canGrowFurther;
- });
- }
-
- while (extraWidth < -1 && columnsCanShrink.length > 0) {
- const shrinkPerRatio = -extraWidth / totalFlexShrink;
- columnsCanShrink = columnsCanShrink.filter((column) => {
- let canShrinkFurther = true;
- const initialWidth = column.width;
- column.width -= column.flexShrink! * shrinkPerRatio;
- if (column.width < column.minWidth!) {
- column.width = column.minWidth!;
- canShrinkFurther = false;
- }
- extraWidth += initialWidth - column.width;
- return canShrinkFurther;
- });
- }
-
- let offset = 0;
- for (const column of result) {
- column.offset = offset;
- offset += column.width;
- }
-
- return {
- columns: result,
- totalWidth: offset,
- };
- }, [columns, bodySize.width]);
-
- useEffect(() => {
- if (autoScroll && bodyRef) {
- void bodyRef.offsetLeft;
- bodyRef.scrollTop = bodyRef.scrollHeight;
- }
- });
-
- const headers = useMemo(
- () =>
- columnMetadata.columns.map((column, index) => (
-
- )),
- [columnMetadata, HeaderComponent, classes, rowHeight]
- );
-
- const headerStyle = useMemo(
- () => ({
- height: rowHeight,
- transform: `translateX(-${scrollLeft}px)`,
- }),
- [rowHeight, scrollLeft]
- );
-
- const placeholder = useMemo(
- () => (
-
- ),
- [classes, columnMetadata, rowCount, rowHeight]
- );
-
- return (
-
-
- {headers}
-
-
-
- {placeholder}
- {Array.from(
- { length: rowRange.end - rowRange.start },
- (_, rowIndex) => (
-
- )
- )}
-
-
- );
- }
-);
diff --git a/apps/demo/src/components/hex-viewer.tsx b/apps/demo/src/components/hex-viewer.tsx
deleted file mode 100644
index 3140ed5c..00000000
--- a/apps/demo/src/components/hex-viewer.tsx
+++ /dev/null
@@ -1,113 +0,0 @@
-import { makeStyles, mergeClasses } from "@griffel/react";
-import { ReactNode, useMemo } from "react";
-import { withDisplayName } from "../utils";
-
-const useClasses = makeStyles({
- root: {
- width: "100%",
- height: "100%",
- overflowY: "auto",
- },
- flex: {
- display: "flex",
- },
- cell: {
- fontFamily: '"Cascadia Code", Consolas, monospace',
- },
- lineNumber: {
- textAlign: "right",
- },
- hex: {
- marginLeft: "40px",
- fontVariantLigatures: "none",
- },
-});
-
-const PRINTABLE_CHARACTERS: [number, number][] = [
- [33, 126],
- [161, 172],
- [174, 255],
-];
-
-export function isPrintableCharacter(code: number) {
- return PRINTABLE_CHARACTERS.some(
- ([start, end]) => code >= start && code <= end
- );
-}
-
-export function toCharacter(code: number) {
- if (isPrintableCharacter(code)) {
- return String.fromCharCode(code);
- }
- return ".";
-}
-
-export function toText(data: Uint8Array) {
- let result = "";
- for (const code of data) {
- result += toCharacter(code);
- }
- return result;
-}
-
-const PER_ROW = 16;
-
-export interface HexViewerProps {
- className?: string;
- data: Uint8Array;
-}
-
-export const HexViewer = withDisplayName("HexViewer")(
- ({ className, data }: HexViewerProps) => {
- const classes = useClasses();
-
- // Because ADB packets are usually small,
- // so don't add virtualization now.
-
- const children = useMemo(() => {
- const lineNumbers: ReactNode[] = [];
- const hexRows: ReactNode[] = [];
- const textRows: ReactNode[] = [];
- for (let i = 0; i < data.length; i += PER_ROW) {
- lineNumbers.push({i.toString(16)} );
-
- let hex = "";
- for (let j = i; j < i + PER_ROW && j < data.length; j++) {
- hex += data[j].toString(16).padStart(2, "0") + " ";
- }
- hexRows.push({hex} );
-
- textRows.push(
- {toText(data.slice(i, i + PER_ROW))}
- );
- }
-
- return {
- lineNumbers,
- hexRows,
- textRows,
- };
- }, [data]);
-
- return (
-
-
-
- {children.lineNumbers}
-
-
- {children.hexRows}
-
-
- {children.textRows}
-
-
-
- );
- }
-);
diff --git a/apps/demo/src/components/index.ts b/apps/demo/src/components/index.ts
deleted file mode 100644
index ed4285e5..00000000
--- a/apps/demo/src/components/index.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-export * from "./command-bar";
-export * from "./connect";
-export * from "./demo-mode-panel";
-export * from "./device-view";
-export * from "./error-dialog";
-export * from "./external-link";
-export * from "./grid";
-export * from "./hex-viewer";
-export * from "./list-selection";
-export * from "./log-view";
-export * from "./resize-observer";
-export * from "./tabby-frame-manager";
diff --git a/apps/demo/src/components/list-selection.ts b/apps/demo/src/components/list-selection.ts
deleted file mode 100644
index c66761fe..00000000
--- a/apps/demo/src/components/list-selection.ts
+++ /dev/null
@@ -1,150 +0,0 @@
-import { BTree, BTreeNode } from "@yume-chan/b-tree";
-import {
- IAtom,
- IObservableValue,
- createAtom,
- makeAutoObservable,
- observable,
- onBecomeUnobserved,
-} from "mobx";
-
-const IS_MAC =
- typeof window != "undefined" &&
- /Mac|iPod|iPhone|iPad/.test(globalThis.navigator.platform);
-
-export function isModKey(e: { metaKey: boolean; ctrlKey: boolean }): boolean {
- if (IS_MAC) {
- return e.metaKey;
- } else {
- return e.ctrlKey;
- }
-}
-
-export class ObservableBTree implements Omit {
- data: BTree;
- hasMap: Map>;
- keys: IAtom;
-
- constructor(order: number) {
- this.data = new BTree(order);
- this.hasMap = new Map();
- this.keys = createAtom("ObservableBTree.keys");
- }
-
- get order(): number {
- return this.data.order;
- }
-
- get size(): number {
- this.keys.reportObserved();
- return this.data.size;
- }
-
- has(value: number): boolean {
- if (!this.hasMap.has(value)) {
- const observableHasValue = observable.box(this.data.has(value));
- onBecomeUnobserved(observableHasValue, () =>
- this.hasMap.delete(value)
- );
- this.hasMap.set(value, observableHasValue);
- }
- return this.hasMap.get(value)!.get();
- }
-
- add(value: number): boolean {
- if (this.data.add(value)) {
- this.hasMap.get(value)?.set(true);
- this.keys.reportChanged();
- return true;
- }
- return false;
- }
-
- delete(value: number): boolean {
- if (this.data.delete(value)) {
- this.hasMap.get(value)?.set(false);
- this.keys.reportChanged();
- return true;
- }
- return false;
- }
-
- clear(): void {
- if (this.data.size === 0) {
- return;
- }
- this.data.clear();
- for (const entry of this.hasMap) {
- entry[1].set(false);
- }
- this.keys.reportChanged();
- }
-
- [Symbol.iterator](): Generator {
- this.keys.reportObserved();
- return this.data[Symbol.iterator]();
- }
-}
-
-export class ObservableListSelection {
- selected = new ObservableBTree(6);
- rangeStart = 0;
- selectedIndex: number | null = null;
-
- constructor() {
- makeAutoObservable(this);
- }
-
- get size() {
- return this.selected.size;
- }
-
- has(index: number) {
- return this.selected.has(index);
- }
-
- select(index: number, ctrlKey: boolean, shiftKey: boolean) {
- if (this.rangeStart !== null && shiftKey) {
- if (!ctrlKey) {
- this.selected.clear();
- }
-
- let [start, end] = [this.rangeStart, index];
- if (start > end) {
- [start, end] = [end, start];
- }
- for (let i = start; i <= end; i += 1) {
- this.selected.add(i);
- }
- this.selectedIndex = index;
- return;
- }
-
- if (ctrlKey) {
- if (this.selected.has(index)) {
- this.selected.delete(index);
- this.selectedIndex = null;
- } else {
- this.selected.add(index);
- this.selectedIndex = index;
- }
- this.rangeStart = index;
- return;
- }
-
- this.selected.clear();
- this.selected.add(index);
- this.rangeStart = index;
- this.selectedIndex = index;
- }
-
- clear() {
- this.selected.clear();
- this.rangeStart = 0;
- this.selectedIndex = null;
- }
-
- [Symbol.iterator]() {
- return this.selected[Symbol.iterator]();
- }
-}
diff --git a/apps/demo/src/components/log-view.tsx b/apps/demo/src/components/log-view.tsx
deleted file mode 100644
index d89c7daf..00000000
--- a/apps/demo/src/components/log-view.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { PropsWithChildren, useEffect, useState } from 'react';
-
-export function NoSsr({ children }: PropsWithChildren<{}>) {
- const [showChild, setShowChild] = useState(false);
-
- // Wait until after client-side hydration to show
- useEffect(() => {
- setShowChild(true);
- }, []);
-
- if (!showChild) {
- return null;
- }
-
- return <>{children}>;
-}
diff --git a/apps/demo/src/components/resize-observer.tsx b/apps/demo/src/components/resize-observer.tsx
deleted file mode 100644
index 2113ed09..00000000
--- a/apps/demo/src/components/resize-observer.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import { makeStyles } from "@griffel/react";
-import { useEffect, useState } from 'react';
-import { useStableCallback, withDisplayName } from '../utils';
-
-export interface Size {
- width: number;
-
- height: number;
-}
-
-export interface ResizeObserverProps {
- onResize: (size: Size) => void;
-}
-
-const useClasses = makeStyles({
- observer: {
- position: 'absolute',
- top: 0,
- left: 0,
- width: '100%',
- height: '100%',
- visibility: 'hidden',
- }
-});
-
-export const ResizeObserver = withDisplayName('ResizeObserver')(({
- onResize,
-}: ResizeObserverProps): JSX.Element | null => {
- const classes = useClasses();
-
- const [iframe, setIframe] = useState(null);
-
- const handleResize = useStableCallback(() => {
- const { width, height } = iframe!.getBoundingClientRect();
- onResize({ width, height });
- });
-
- useEffect(() => {
- if (iframe) {
- void iframe.offsetLeft;
- iframe.contentWindow!.addEventListener('resize', handleResize);
- handleResize();
- }
- }, [iframe, handleResize]);
-
- return (
-
- );
-});
diff --git a/apps/demo/src/components/scrcpy/audio-decode-stream.ts b/apps/demo/src/components/scrcpy/audio-decode-stream.ts
deleted file mode 100644
index 906f29fb..00000000
--- a/apps/demo/src/components/scrcpy/audio-decode-stream.ts
+++ /dev/null
@@ -1,119 +0,0 @@
-import { ScrcpyMediaStreamPacket } from "@yume-chan/scrcpy";
-import { TransformStream } from "@yume-chan/stream-extra";
-
-export class AacDecodeStream extends TransformStream<
- ScrcpyMediaStreamPacket,
- Float32Array[]
-> {
- constructor(config: AudioDecoderConfig) {
- let decoder: AudioDecoder;
- super({
- start(controller) {
- decoder = new AudioDecoder({
- error(error) {
- console.log("audio decoder error: ", error);
- controller.error(error);
- },
- output(output) {
- controller.enqueue(
- Array.from({ length: 2 }, (_, i) => {
- const options: AudioDataCopyToOptions = {
- // AAC decodes to "f32-planar",
- // converting to another format may cause audio glitches on Chrome.
- format: "f32-planar",
- planeIndex: i,
- };
- const buffer = new Float32Array(
- output.allocationSize(options) /
- Float32Array.BYTES_PER_ELEMENT
- );
- output.copyTo(buffer, options);
- return buffer;
- })
- );
- },
- });
- },
- transform(chunk) {
- switch (chunk.type) {
- case "configuration":
- // https://www.w3.org/TR/webcodecs-aac-codec-registration/#audiodecoderconfig-description
- // Raw AAC stream needs `description` to be set.
- decoder.configure({
- ...config,
- description: chunk.data,
- });
- break;
- case "data":
- decoder.decode(
- new EncodedAudioChunk({
- data: chunk.data,
- type: "key",
- timestamp: 0,
- })
- );
- }
- },
- async flush() {
- await decoder!.flush();
- },
- });
- }
-}
-
-export class OpusDecodeStream extends TransformStream<
- ScrcpyMediaStreamPacket,
- Float32Array
-> {
- constructor(config: AudioDecoderConfig) {
- let decoder: AudioDecoder;
- super({
- start(controller) {
- decoder = new AudioDecoder({
- error(error) {
- console.log("audio decoder error: ", error);
- controller.error(error);
- },
- output(output) {
- // Opus decodes to "f32",
- // converting to another format may cause audio glitches on Chrome.
- const options: AudioDataCopyToOptions = {
- format: "f32",
- planeIndex: 0,
- };
- const buffer = new Float32Array(
- output.allocationSize(options) /
- Float32Array.BYTES_PER_ELEMENT
- );
- output.copyTo(buffer, options);
- controller.enqueue(buffer);
- },
- });
- decoder.configure(config);
- },
- transform(chunk) {
- switch (chunk.type) {
- case "configuration":
- // configuration data is a opus-in-ogg identification header,
- // but stream data is raw opus,
- // so it has no use here.
- break;
- case "data":
- if (chunk.data.length === 0) {
- break;
- }
- decoder.decode(
- new EncodedAudioChunk({
- type: "key",
- timestamp: 0,
- data: chunk.data,
- })
- );
- }
- },
- async flush() {
- await decoder!.flush();
- },
- });
- }
-}
diff --git a/apps/demo/src/components/scrcpy/command-bar.tsx b/apps/demo/src/components/scrcpy/command-bar.tsx
deleted file mode 100644
index 3f92b68c..00000000
--- a/apps/demo/src/components/scrcpy/command-bar.tsx
+++ /dev/null
@@ -1,290 +0,0 @@
-import {
- CommandBar,
- ContextualMenuItemType,
- ICommandBarItemProps,
-} from "@fluentui/react";
-import {
- AndroidKeyCode,
- AndroidKeyEventAction,
- AndroidScreenPowerMode,
-} from "@yume-chan/scrcpy";
-import { action, computed } from "mobx";
-import { observer } from "mobx-react-lite";
-import { Icons } from "../../utils";
-import { CommandBarSpacerItem } from "../command-bar-spacer-item";
-import { RECORD_STATE } from "./recorder";
-import { STATE } from "./state";
-
-const ITEMS = computed(() => {
- const result: ICommandBarItemProps[] = [];
-
- result.push({
- key: "stop",
- iconProps: { iconName: Icons.Stop },
- text: "Stop",
- onClick: STATE.stop as VoidFunction,
- });
-
- result.push(
- RECORD_STATE.recording
- ? {
- key: "Record",
- iconProps: {
- iconName: Icons.Record,
- style: { color: "red" },
- },
- // prettier-ignore
- text: `${
- RECORD_STATE.hours ? `${RECORD_STATE.hours}:` : ""
- }${
- RECORD_STATE.minutes.toString().padStart(2, "0")
- }:${
- RECORD_STATE.seconds.toString().padStart(2, "0")
- }`,
- onClick: action(() => {
- STATE.fullScreenContainer!.focus();
-
- RECORD_STATE.recorder.stop();
- RECORD_STATE.recording = false;
- }),
- }
- : {
- key: "Record",
- disabled: !STATE.running,
- iconProps: { iconName: Icons.Record },
- text: "Record",
- onClick: action(() => {
- STATE.fullScreenContainer!.focus();
-
- RECORD_STATE.recorder.start();
- RECORD_STATE.recording = true;
- }),
- }
- );
-
- result.push({
- key: "fullscreen",
- disabled: !STATE.running,
- iconProps: { iconName: Icons.FullScreenMaximize },
- iconOnly: true,
- text: "Fullscreen",
- onClick: action(() => {
- STATE.fullScreenContainer!.focus();
-
- STATE.fullScreenContainer!.requestFullscreen();
- STATE.isFullScreen = true;
- }),
- });
-
- result.push(
- {
- key: "volumeUp",
- disabled: !STATE.running,
- iconProps: { iconName: Icons.Speaker2 },
- iconOnly: true,
- text: "Volume Up",
- onClick: (async () => {
- STATE.fullScreenContainer!.focus();
-
- // TODO: Auto repeat when holding
- await STATE.client?.controlMessageWriter!.injectKeyCode({
- action: AndroidKeyEventAction.Down,
- keyCode: AndroidKeyCode.VolumeUp,
- repeat: 0,
- metaState: 0,
- });
- await STATE.client?.controlMessageWriter!.injectKeyCode({
- action: AndroidKeyEventAction.Up,
- keyCode: AndroidKeyCode.VolumeUp,
- repeat: 0,
- metaState: 0,
- });
- }) as () => void,
- },
- {
- key: "volumeDown",
- disabled: !STATE.running,
- iconProps: { iconName: Icons.Speaker1 },
- iconOnly: true,
- text: "Volume Down",
- onClick: (async () => {
- STATE.fullScreenContainer!.focus();
-
- await STATE.client?.controlMessageWriter!.injectKeyCode({
- action: AndroidKeyEventAction.Down,
- keyCode: AndroidKeyCode.VolumeDown,
- repeat: 0,
- metaState: 0,
- });
- await STATE.client?.controlMessageWriter!.injectKeyCode({
- action: AndroidKeyEventAction.Up,
- keyCode: AndroidKeyCode.VolumeDown,
- repeat: 0,
- metaState: 0,
- });
- }) as () => void,
- },
- {
- key: "volumeMute",
- disabled: !STATE.running,
- iconProps: { iconName: Icons.SpeakerOff },
- iconOnly: true,
- text: "Toggle Mute",
- onClick: (async () => {
- STATE.fullScreenContainer!.focus();
-
- await STATE.client?.controlMessageWriter!.injectKeyCode({
- action: AndroidKeyEventAction.Down,
- keyCode: AndroidKeyCode.VolumeMute,
- repeat: 0,
- metaState: 0,
- });
- await STATE.client?.controlMessageWriter!.injectKeyCode({
- action: AndroidKeyEventAction.Up,
- keyCode: AndroidKeyCode.VolumeMute,
- repeat: 0,
- metaState: 0,
- });
- }) as () => void,
- }
- );
-
- result.push(
- {
- key: "rotateDevice",
- disabled: !STATE.running,
- iconProps: { iconName: Icons.Orientation },
- iconOnly: true,
- text: "Rotate Device",
- onClick: () => {
- STATE.fullScreenContainer!.focus();
-
- STATE.client!.controlMessageWriter!.rotateDevice();
- },
- },
- {
- key: "rotateVideoLeft",
- disabled: !STATE.running,
- iconProps: { iconName: Icons.RotateLeft },
- iconOnly: true,
- text: "Rotate Video Left",
- onClick: action(() => {
- STATE.fullScreenContainer!.focus();
-
- STATE.rotation -= 1;
- if (STATE.rotation < 0) {
- STATE.rotation = 3;
- }
- }),
- },
- {
- key: "rotateVideoRight",
- disabled: !STATE.running,
- iconProps: { iconName: Icons.RotateRight },
- iconOnly: true,
- text: "Rotate Video Right",
- onClick: action(() => {
- STATE.fullScreenContainer!.focus();
-
- STATE.rotation = (STATE.rotation + 1) & 3;
- }),
- }
- );
-
- result.push(
- {
- key: "turnScreenOff",
- disabled: !STATE.running,
- iconProps: { iconName: Icons.Lightbulb },
- iconOnly: true,
- text: "Turn Screen Off",
- onClick: () => {
- STATE.fullScreenContainer!.focus();
-
- STATE.client!.controlMessageWriter!.setScreenPowerMode(
- AndroidScreenPowerMode.Off
- );
- },
- },
- {
- key: "turnScreenOn",
- disabled: !STATE.running,
- iconProps: { iconName: Icons.LightbulbFilament },
- iconOnly: true,
- text: "Turn Screen On",
- onClick: () => {
- STATE.fullScreenContainer!.focus();
-
- STATE.client!.controlMessageWriter!.setScreenPowerMode(
- AndroidScreenPowerMode.Normal
- );
- },
- }
- );
-
- if (STATE.running) {
- result.push({
- key: "fps",
- text: `FPS: ${STATE.fps}`,
- disabled: true,
- });
- }
-
- result.push(
- {
- // HACK: make CommandBar overflow on far items
- // https://github.com/microsoft/fluentui/issues/11842
- key: "spacer",
- onRender: () => ,
- },
- {
- // HACK: add a separator in CommandBar overflow menu
- // https://github.com/microsoft/fluentui/issues/10035
- key: "separator",
- disabled: true,
- itemType: ContextualMenuItemType.Divider,
- }
- );
-
- result.push(
- {
- key: "NavigationBar",
- iconProps: { iconName: Icons.PanelBottom },
- canCheck: true,
- checked: STATE.navigationBarVisible,
- text: "Navigation Bar",
- iconOnly: true,
- onClick: action(() => {
- STATE.navigationBarVisible = !STATE.navigationBarVisible;
- }),
- },
- {
- key: "Log",
- iconProps: { iconName: Icons.TextGrammarError },
- canCheck: true,
- checked: STATE.logVisible,
- text: "Log",
- iconOnly: true,
- onClick: action(() => {
- STATE.logVisible = !STATE.logVisible;
- }),
- },
- {
- key: "DemoMode",
- iconProps: { iconName: Icons.Wand },
- canCheck: true,
- checked: STATE.demoModeVisible,
- text: "Demo Mode",
- iconOnly: true,
- onClick: action(() => {
- STATE.demoModeVisible = !STATE.demoModeVisible;
- }),
- }
- );
-
- return result;
-});
-
-export const ScrcpyCommandBar = observer(function ScrcpyCommandBar() {
- return ;
-});
diff --git a/apps/demo/src/components/scrcpy/fetch-server.ts b/apps/demo/src/components/scrcpy/fetch-server.ts
deleted file mode 100644
index 108271b9..00000000
--- a/apps/demo/src/components/scrcpy/fetch-server.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-import { EventEmitter } from "@yume-chan/event";
-import { BIN } from "@yume-chan/fetch-scrcpy-server";
-
-class FetchWithProgress {
- public readonly promise: Promise;
-
- private _downloaded = 0;
- public get downloaded() {
- return this._downloaded;
- }
-
- private _total = 0;
- public get total() {
- return this._total;
- }
-
- private progressEvent = new EventEmitter<
- [download: number, total: number]
- >();
- public get onProgress() {
- return this.progressEvent.event;
- }
-
- public constructor(url: string | URL) {
- this.promise = this.fetch(url);
- }
-
- private async fetch(url: string | URL) {
- const response = await globalThis.fetch(url);
- this._total = Number.parseInt(
- response.headers.get("Content-Length") ?? "0",
- 10
- );
- this.progressEvent.fire([this._downloaded, this._total]);
-
- const reader = response.body!.getReader();
- const chunks: Uint8Array[] = [];
- while (true) {
- const result = await reader.read();
- if (result.done) {
- break;
- }
- chunks.push(result.value);
- this._downloaded += result.value.byteLength;
- this.progressEvent.fire([this._downloaded, this._total]);
- }
-
- this._total = chunks.reduce(
- (result, item) => result + item.byteLength,
- 0
- );
- const result = new Uint8Array(this._total);
- let position = 0;
- for (const chunk of chunks) {
- result.set(chunk, position);
- position += chunk.byteLength;
- }
- return result;
- }
-}
-
-let cachedValue: FetchWithProgress | undefined;
-export function fetchServer(
- onProgress?: (e: [downloaded: number, total: number]) => void
-) {
- if (!cachedValue) {
- cachedValue = new FetchWithProgress(BIN);
- cachedValue.promise.catch(() => {
- cachedValue = undefined;
- });
- }
-
- if (onProgress) {
- cachedValue.onProgress(onProgress);
- onProgress([cachedValue.downloaded, cachedValue.total]);
- }
-
- return cachedValue.promise;
-}
diff --git a/apps/demo/src/components/scrcpy/index.ts b/apps/demo/src/components/scrcpy/index.ts
deleted file mode 100644
index c115c761..00000000
--- a/apps/demo/src/components/scrcpy/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export * from "./command-bar";
-export * from "./fetch-server";
-export * from "./navigation-bar";
-export * from "./settings";
-export * from "./state";
-export * from "./video-container";
diff --git a/apps/demo/src/components/scrcpy/input.ts b/apps/demo/src/components/scrcpy/input.ts
deleted file mode 100644
index 27cb7e5c..00000000
--- a/apps/demo/src/components/scrcpy/input.ts
+++ /dev/null
@@ -1,224 +0,0 @@
-import { AdbScrcpyClient } from "@yume-chan/adb-scrcpy";
-import { AoaHidDevice, HidKeyCode, HidKeyboard } from "@yume-chan/aoa";
-import { Disposable } from "@yume-chan/event";
-import {
- AndroidKeyCode,
- AndroidKeyEventAction,
- AndroidKeyEventMeta,
-} from "@yume-chan/scrcpy";
-
-export interface KeyboardInjector extends Disposable {
- down(key: string): Promise;
- up(key: string): Promise;
- reset(): Promise;
-}
-
-export class ScrcpyKeyboardInjector implements KeyboardInjector {
- private readonly client: AdbScrcpyClient;
-
- private _controlLeft = false;
- private _controlRight = false;
- private _shiftLeft = false;
- private _shiftRight = false;
- private _altLeft = false;
- private _altRight = false;
- private _metaLeft = false;
- private _metaRight = false;
-
- private _capsLock = false;
- private _numLock = true;
-
- private _keys: Set = new Set();
-
- public constructor(client: AdbScrcpyClient) {
- this.client = client;
- }
-
- private setModifier(keyCode: AndroidKeyCode, value: boolean) {
- switch (keyCode) {
- case AndroidKeyCode.ControlLeft:
- this._controlLeft = value;
- break;
- case AndroidKeyCode.ControlRight:
- this._controlRight = value;
- break;
- case AndroidKeyCode.ShiftLeft:
- this._shiftLeft = value;
- break;
- case AndroidKeyCode.ShiftRight:
- this._shiftRight = value;
- break;
- case AndroidKeyCode.AltLeft:
- this._altLeft = value;
- break;
- case AndroidKeyCode.AltRight:
- this._altRight = value;
- break;
- case AndroidKeyCode.MetaLeft:
- this._metaLeft = value;
- break;
- case AndroidKeyCode.MetaRight:
- this._metaRight = value;
- break;
- case AndroidKeyCode.CapsLock:
- if (value) {
- this._capsLock = !this._capsLock;
- }
- break;
- case AndroidKeyCode.NumLock:
- if (value) {
- this._numLock = !this._numLock;
- }
- break;
- }
- }
-
- private getMetaState(): AndroidKeyEventMeta {
- let metaState = 0;
- if (this._altLeft) {
- metaState |=
- AndroidKeyEventMeta.AltOn | AndroidKeyEventMeta.AltLeftOn;
- }
- if (this._altRight) {
- metaState |=
- AndroidKeyEventMeta.AltOn | AndroidKeyEventMeta.AltRightOn;
- }
- if (this._shiftLeft) {
- metaState |=
- AndroidKeyEventMeta.ShiftOn | AndroidKeyEventMeta.ShiftLeftOn;
- }
- if (this._shiftRight) {
- metaState |=
- AndroidKeyEventMeta.ShiftOn | AndroidKeyEventMeta.ShiftRightOn;
- }
- if (this._controlLeft) {
- metaState |=
- AndroidKeyEventMeta.CtrlOn | AndroidKeyEventMeta.CtrlLeftOn;
- }
- if (this._controlRight) {
- metaState |=
- AndroidKeyEventMeta.CtrlOn | AndroidKeyEventMeta.CtrlRightOn;
- }
- if (this._metaLeft) {
- metaState |=
- AndroidKeyEventMeta.MetaOn | AndroidKeyEventMeta.MetaLeftOn;
- }
- if (this._metaRight) {
- metaState |=
- AndroidKeyEventMeta.MetaOn | AndroidKeyEventMeta.MetaRightOn;
- }
- if (this._capsLock) {
- metaState |= AndroidKeyEventMeta.CapsLockOn;
- }
- if (this._numLock) {
- metaState |= AndroidKeyEventMeta.NumLockOn;
- }
- return metaState;
- }
-
- public async down(key: string): Promise {
- const keyCode = AndroidKeyCode[key as keyof typeof AndroidKeyCode];
- if (!keyCode) {
- return;
- }
-
- this.setModifier(keyCode, true);
- this._keys.add(keyCode);
- await this.client.controlMessageWriter?.injectKeyCode({
- action: AndroidKeyEventAction.Down,
- keyCode,
- metaState: this.getMetaState(),
- repeat: 0,
- });
- }
-
- public async up(key: string): Promise {
- const keyCode = AndroidKeyCode[key as keyof typeof AndroidKeyCode];
- if (!keyCode) {
- return;
- }
-
- this.setModifier(keyCode, false);
- this._keys.delete(keyCode);
- await this.client.controlMessageWriter?.injectKeyCode({
- action: AndroidKeyEventAction.Up,
- keyCode,
- metaState: this.getMetaState(),
- repeat: 0,
- });
- }
-
- public async reset(): Promise {
- this._controlLeft = false;
- this._controlRight = false;
- this._shiftLeft = false;
- this._shiftRight = false;
- this._altLeft = false;
- this._altRight = false;
- this._metaLeft = false;
- this._metaRight = false;
- for (const key of this._keys) {
- this.up(AndroidKeyCode[key]);
- }
- this._keys.clear();
- }
-
- public dispose(): void {
- // do nothing
- }
-}
-
-export class AoaKeyboardInjector implements KeyboardInjector {
- public static async register(
- device: USBDevice
- ): Promise {
- const keyboard = await AoaHidDevice.register(
- device,
- 0,
- HidKeyboard.DESCRIPTOR
- );
- return new AoaKeyboardInjector(keyboard);
- }
-
- private readonly aoaKeyboard: AoaHidDevice;
- private readonly hidKeyboard = new HidKeyboard();
-
- public constructor(aoaKeyboard: AoaHidDevice) {
- this.aoaKeyboard = aoaKeyboard;
- }
-
- public async down(key: string): Promise {
- const keyCode = HidKeyCode[key as keyof typeof HidKeyCode];
- if (!keyCode) {
- return;
- }
-
- this.hidKeyboard.down(keyCode);
- await this.aoaKeyboard.sendInputReport(
- this.hidKeyboard.serializeInputReport()
- );
- }
-
- public async up(key: string): Promise {
- const keyCode = HidKeyCode[key as keyof typeof HidKeyCode];
- if (!keyCode) {
- return;
- }
-
- this.hidKeyboard.up(keyCode);
- await this.aoaKeyboard.sendInputReport(
- this.hidKeyboard.serializeInputReport()
- );
- }
-
- public async reset(): Promise {
- this.hidKeyboard.reset();
- await this.aoaKeyboard.sendInputReport(
- this.hidKeyboard.serializeInputReport()
- );
- }
-
- public async dispose(): Promise {
- await this.aoaKeyboard.unregister();
- }
-}
diff --git a/apps/demo/src/components/scrcpy/navigation-bar.tsx b/apps/demo/src/components/scrcpy/navigation-bar.tsx
deleted file mode 100644
index 98bb69ee..00000000
--- a/apps/demo/src/components/scrcpy/navigation-bar.tsx
+++ /dev/null
@@ -1,183 +0,0 @@
-import { IconButton, Stack } from "@fluentui/react";
-import { makeStyles, mergeClasses } from "@griffel/react";
-import { AndroidKeyCode, AndroidKeyEventAction } from "@yume-chan/scrcpy";
-import { observer } from "mobx-react-lite";
-import { CSSProperties, PointerEvent, ReactNode } from "react";
-import { Icons } from "../../utils";
-import { STATE } from "./state";
-
-const useClasses = makeStyles({
- container: {
- height: "40px",
- backgroundColor: "#999",
- },
- bar: {
- width: "100%",
- maxWidth: "300px",
- },
- icon: {
- color: "white",
- },
- back: {
- transform: "rotate(180deg)",
- },
-});
-
-function handlePointerDown(e: PointerEvent) {
- if (!STATE.client) {
- return false;
- }
-
- if (e.button !== 0) {
- return false;
- }
-
- STATE.fullScreenContainer!.focus();
- e.currentTarget.setPointerCapture(e.pointerId);
- e.preventDefault();
- e.stopPropagation();
-
- return true;
-}
-
-function handlePointerUp(e: PointerEvent) {
- if (!STATE.client) {
- return false;
- }
-
- if (e.button !== 0) {
- return false;
- }
-
- return true;
-}
-
-function handleBackPointerDown(e: PointerEvent) {
- if (!handlePointerDown(e)) {
- return;
- }
-
- STATE.client!.controlMessageWriter!.backOrScreenOn(
- AndroidKeyEventAction.Down
- );
-}
-
-function handleBackPointerUp(e: PointerEvent) {
- if (!handlePointerUp(e)) {
- return;
- }
-
- STATE.client!.controlMessageWriter!.backOrScreenOn(
- AndroidKeyEventAction.Up
- );
-}
-
-function handleHomePointerDown(e: PointerEvent) {
- if (!handlePointerDown(e)) {
- return;
- }
-
- STATE.client!.controlMessageWriter!.injectKeyCode({
- action: AndroidKeyEventAction.Down,
- keyCode: AndroidKeyCode.AndroidHome,
- repeat: 0,
- metaState: 0,
- });
-}
-
-function handleHomePointerUp(e: PointerEvent) {
- if (!handlePointerUp(e)) {
- return;
- }
-
- STATE.client!.controlMessageWriter!.injectKeyCode({
- action: AndroidKeyEventAction.Up,
- keyCode: AndroidKeyCode.AndroidHome,
- repeat: 0,
- metaState: 0,
- });
-}
-
-function handleAppSwitchPointerDown(e: PointerEvent) {
- if (!handlePointerDown(e)) {
- return;
- }
-
- STATE.client!.controlMessageWriter!.injectKeyCode({
- action: AndroidKeyEventAction.Down,
- keyCode: AndroidKeyCode.AndroidAppSwitch,
- repeat: 0,
- metaState: 0,
- });
-}
-
-function handleAppSwitchPointerUp(e: PointerEvent) {
- if (!handlePointerUp(e)) {
- return;
- }
-
- STATE.client!.controlMessageWriter!.injectKeyCode({
- action: AndroidKeyEventAction.Up,
- keyCode: AndroidKeyCode.AndroidAppSwitch,
- repeat: 0,
- metaState: 0,
- });
-}
-
-export const NavigationBar = observer(function NavigationBar({
- className,
- style,
- children,
-}: {
- className: string;
- style: CSSProperties;
- children: ReactNode;
-}) {
- const classes = useClasses();
-
- if (!STATE.navigationBarVisible) {
- return (
-
- {children}
-
- );
- }
-
- return (
-
- {children}
-
-
-
-
-
-
-
- );
-});
diff --git a/apps/demo/src/components/scrcpy/recorder.ts b/apps/demo/src/components/scrcpy/recorder.ts
deleted file mode 100644
index 1fbd9ee2..00000000
--- a/apps/demo/src/components/scrcpy/recorder.ts
+++ /dev/null
@@ -1,456 +0,0 @@
-// cspell: ignore MPEGH
-// cspell: ignore rbsp
-// cspell: ignore Nalus
-
-import {
- H265NaluRaw,
- ScrcpyAudioCodec,
- ScrcpyMediaStreamDataPacket,
- ScrcpyMediaStreamPacket,
- ScrcpyVideoCodecId,
- ScrcpyVideoStreamMetadata,
- annexBSplitNalu,
- h264SearchConfiguration,
- h265ParseSequenceParameterSet,
- h265ParseVideoParameterSet,
- h265SearchConfiguration,
-} from "@yume-chan/scrcpy";
-import { action, makeAutoObservable, reaction } from "mobx";
-import { ArrayBufferTarget, Muxer as WebMMuxer } from "webm-muxer";
-import { saveFile } from "../../utils";
-
-// https://ffmpeg.org/doxygen/0.11/avc_8c-source.html#l00106
-function h264ConfigurationToAvcDecoderConfigurationRecord(
- sequenceParameterSet: Uint8Array,
- pictureParameterSet: Uint8Array
-) {
- const buffer = new Uint8Array(
- 11 + sequenceParameterSet.byteLength + pictureParameterSet.byteLength
- );
- buffer[0] = 1;
- buffer[1] = sequenceParameterSet[1];
- buffer[2] = sequenceParameterSet[2];
- buffer[3] = sequenceParameterSet[3];
- buffer[4] = 0xff;
- buffer[5] = 0xe1;
- buffer[6] = sequenceParameterSet.byteLength >> 8;
- buffer[7] = sequenceParameterSet.byteLength & 0xff;
- buffer.set(sequenceParameterSet, 8);
- buffer[8 + sequenceParameterSet.byteLength] = 1;
- buffer[9 + sequenceParameterSet.byteLength] =
- pictureParameterSet.byteLength >> 8;
- buffer[10 + sequenceParameterSet.byteLength] =
- pictureParameterSet.byteLength & 0xff;
- buffer.set(pictureParameterSet, 11 + sequenceParameterSet.byteLength);
- return buffer;
-}
-
-function h265ConfigurationToHevcDecoderConfigurationRecord(
- videoParameterSet: H265NaluRaw,
- sequenceParameterSet: H265NaluRaw,
- pictureParameterSet: H265NaluRaw
-) {
- const {
- profileTierLevel: {
- generalProfileTier: {
- profile_space: general_profile_space,
- tier_flag: general_tier_flag,
- profile_idc: general_profile_idc,
- profileCompatibilitySet: generalProfileCompatibilitySet,
- constraintSet: generalConstraintSet,
- },
- general_level_idc,
- },
- vps_max_layers_minus1,
- vps_temporal_id_nesting_flag,
- } = h265ParseVideoParameterSet(videoParameterSet.rbsp);
-
- const {
- chroma_format_idc,
- bit_depth_luma_minus8,
- bit_depth_chroma_minus8,
- vuiParameters: { min_spatial_segmentation_idc = 0 } = {},
- } = h265ParseSequenceParameterSet(sequenceParameterSet.rbsp);
-
- const buffer = new Uint8Array(
- 23 +
- 5 * 3 +
- videoParameterSet.data.length +
- sequenceParameterSet.data.length +
- pictureParameterSet.data.length
- );
-
- /* unsigned int(8) configurationVersion = 1; */
- buffer[0] = 1;
-
- /*
- * unsigned int(2) general_profile_space;
- * unsigned int(1) general_tier_flag;
- * unsigned int(5) general_profile_idc;
- */
- buffer[1] =
- (general_profile_space << 6) |
- (Number(general_tier_flag) << 5) |
- general_profile_idc;
-
- /* unsigned int(32) general_profile_compatibility_flags; */
- buffer[2] = generalProfileCompatibilitySet[0];
- buffer[3] = generalProfileCompatibilitySet[1];
- buffer[4] = generalProfileCompatibilitySet[2];
- buffer[5] = generalProfileCompatibilitySet[3];
-
- /* unsigned int(48) general_constraint_indicator_flags; */
- buffer[6] = generalConstraintSet[0];
- buffer[7] = generalConstraintSet[1];
- buffer[8] = generalConstraintSet[2];
- buffer[9] = generalConstraintSet[3];
- buffer[10] = generalConstraintSet[4];
- buffer[11] = generalConstraintSet[5];
-
- /* unsigned int(8) general_level_idc; */
- buffer[12] = general_level_idc;
-
- /*
- * bit(4) reserved = '1111'b;
- * unsigned int(12) min_spatial_segmentation_idc;
- */
- buffer[13] = 0xf0 | (min_spatial_segmentation_idc >> 8);
- buffer[14] = min_spatial_segmentation_idc;
-
- /*
- * bit(6) reserved = '111111'b;
- * unsigned int(2) parallelismType;
- */
- buffer[15] = 0xfc;
-
- /*
- * bit(6) reserved = '111111'b;
- * unsigned int(2) chromaFormat;
- */
- buffer[16] = 0xfc | chroma_format_idc;
-
- /*
- * bit(5) reserved = '11111'b;
- * unsigned int(3) bitDepthLumaMinus8;
- */
- buffer[17] = 0xf8 | bit_depth_luma_minus8;
-
- /*
- * bit(5) reserved = '11111'b;
- * unsigned int(3) bitDepthChromaMinus8;
- */
- buffer[18] = 0xf8 | bit_depth_chroma_minus8;
-
- /* bit(16) avgFrameRate; */
- buffer[19] = 0;
- buffer[20] = 0;
-
- /*
- * bit(2) constantFrameRate;
- * bit(3) numTemporalLayers;
- * bit(1) temporalIdNested;
- * unsigned int(2) lengthSizeMinusOne;
- */
- buffer[21] =
- ((vps_max_layers_minus1 + 1) << 3) |
- (Number(vps_temporal_id_nesting_flag) << 2) |
- 3;
-
- /* unsigned int(8) numOfArrays; */
- buffer[22] = 3;
-
- let i = 23;
-
- for (const nalu of [
- videoParameterSet,
- sequenceParameterSet,
- pictureParameterSet,
- ]) {
- /*
- * bit(1) array_completeness;
- * unsigned int(1) reserved = 0;
- * unsigned int(6) NAL_unit_type;
- */
- buffer[i] = nalu.nal_unit_type;
- i += 1;
-
- /* unsigned int(16) numNalus; */
- buffer[i] = 0;
- i += 1;
- buffer[i] = 1;
- i += 1;
-
- /* unsigned int(16) nalUnitLength; */
- buffer[i] = nalu.data.length >> 8;
- i += 1;
- buffer[i] = nalu.data.length;
- i += 1;
-
- buffer.set(nalu.data, i);
- i += nalu.data.length;
- }
-
- return buffer;
-}
-
-function h264StreamToAvcSample(buffer: Uint8Array) {
- const nalUnits: Uint8Array[] = [];
- let totalLength = 0;
-
- for (const unit of annexBSplitNalu(buffer)) {
- nalUnits.push(unit);
- totalLength += unit.byteLength + 4;
- }
-
- const sample = new Uint8Array(totalLength);
- let offset = 0;
- for (const nalu of nalUnits) {
- sample[offset] = nalu.byteLength >> 24;
- sample[offset + 1] = nalu.byteLength >> 16;
- sample[offset + 2] = nalu.byteLength >> 8;
- sample[offset + 3] = nalu.byteLength & 0xff;
- sample.set(nalu, offset + 4);
- offset += 4 + nalu.byteLength;
- }
- return sample;
-}
-
-// https://github.com/FFmpeg/FFmpeg/blob/adb5f7b41faf354a3e0bf722f44aeb230aefa310/libavformat/matroska.c
-const MatroskaVideoCodecNameMap: Record = {
- [ScrcpyVideoCodecId.H264]: "V_MPEG4/ISO/AVC",
- [ScrcpyVideoCodecId.H265]: "V_MPEGH/ISO/HEVC",
- [ScrcpyVideoCodecId.AV1]: "V_AV1",
-};
-
-const MatroskaAudioCodecNameMap: Record = {
- [ScrcpyAudioCodec.RAW.mimeType]: "A_PCM/INT/LIT",
- [ScrcpyAudioCodec.AAC.mimeType]: "A_AAC",
- [ScrcpyAudioCodec.OPUS.mimeType]: "A_OPUS",
-};
-
-export class MatroskaMuxingRecorder {
- public running = false;
-
- public videoMetadata: ScrcpyVideoStreamMetadata | undefined;
- public audioCodec: ScrcpyAudioCodec | undefined;
-
- private muxer: WebMMuxer | undefined;
- private videoCodecDescription: Uint8Array | undefined;
- private configurationWritten = false;
- private _firstTimestamp = -1;
- private _packetsFromLastKeyframe: {
- type: "video" | "audio";
- packet: ScrcpyMediaStreamDataPacket;
- }[] = [];
-
- private addVideoChunk(packet: ScrcpyMediaStreamDataPacket) {
- if (this._firstTimestamp === -1) {
- this._firstTimestamp = Number(packet.pts!);
- }
-
- const sample = h264StreamToAvcSample(packet.data);
- this.muxer!.addVideoChunkRaw(
- sample,
- packet.keyframe ? "key" : "delta",
- Number(packet.pts) - this._firstTimestamp,
- this.configurationWritten
- ? undefined
- : {
- decoderConfig: {
- // Not used
- codec: "",
- description: this.videoCodecDescription,
- },
- }
- );
- this.configurationWritten = true;
- }
-
- public addVideoPacket(packet: ScrcpyMediaStreamPacket) {
- if (!this.videoMetadata) {
- throw new Error("videoMetadata must be set");
- }
-
- try {
- if (packet.type === "configuration") {
- switch (this.videoMetadata.codec) {
- case ScrcpyVideoCodecId.H264: {
- const { sequenceParameterSet, pictureParameterSet } =
- h264SearchConfiguration(packet.data);
- this.videoCodecDescription =
- h264ConfigurationToAvcDecoderConfigurationRecord(
- sequenceParameterSet,
- pictureParameterSet
- );
- this.configurationWritten = false;
- break;
- }
- case ScrcpyVideoCodecId.H265: {
- const {
- videoParameterSet,
- sequenceParameterSet,
- pictureParameterSet,
- } = h265SearchConfiguration(packet.data);
- this.videoCodecDescription =
- h265ConfigurationToHevcDecoderConfigurationRecord(
- videoParameterSet,
- sequenceParameterSet,
- pictureParameterSet
- );
- this.configurationWritten = false;
- break;
- }
- }
- return;
- }
-
- // To ensure the first frame is a keyframe
- // save the last keyframe and the following frames
- if (packet.keyframe === true) {
- this._packetsFromLastKeyframe.length = 0;
- }
- this._packetsFromLastKeyframe.push({ type: "video", packet });
-
- if (!this.muxer) {
- return;
- }
-
- this.addVideoChunk(packet);
- } catch (e) {
- console.error(e);
- }
- }
-
- private addAudioChunk(chunk: ScrcpyMediaStreamDataPacket) {
- if (this._firstTimestamp === -1) {
- return;
- }
-
- const timestamp = Number(chunk.pts) - this._firstTimestamp;
- if (timestamp < 0) {
- return;
- }
-
- if (!this.muxer) {
- return;
- }
-
- this.muxer.addAudioChunkRaw(chunk.data, "key", timestamp);
- }
-
- public addAudioPacket(packet: ScrcpyMediaStreamDataPacket) {
- this._packetsFromLastKeyframe.push({ type: "audio", packet });
- this.addAudioChunk(packet);
- }
-
- public start() {
- if (!this.videoMetadata) {
- throw new Error("videoMetadata must be set");
- }
-
- this.running = true;
-
- const options: ConstructorParameters[0] = {
- target: new ArrayBufferTarget(),
- type: "matroska",
- firstTimestampBehavior: "permissive",
- video: {
- codec: MatroskaVideoCodecNameMap[this.videoMetadata.codec!],
- width: this.videoMetadata.width ?? 0,
- height: this.videoMetadata.height ?? 0,
- },
- };
-
- if (this.audioCodec) {
- options.audio = {
- codec: MatroskaAudioCodecNameMap[this.audioCodec.mimeType!],
- sampleRate: 48000,
- numberOfChannels: 2,
- bitDepth:
- this.audioCodec === ScrcpyAudioCodec.RAW ? 16 : undefined,
- };
- }
-
- this.muxer = new WebMMuxer(options as any);
-
- if (this._packetsFromLastKeyframe.length > 0) {
- for (const { type, packet } of this._packetsFromLastKeyframe) {
- if (type === "video") {
- this.addVideoChunk(packet);
- } else {
- this.addAudioChunk(packet);
- }
- }
- }
- }
-
- public stop() {
- if (!this.muxer) {
- return;
- }
-
- this.muxer.finalize()!;
- const buffer = this.muxer.target.buffer;
- const now = new Date();
- const stream = saveFile(
- // prettier-ignore
- `Recording ${
- now.getFullYear()
- }-${
- (now.getMonth() + 1).toString().padStart(2, '0')
- }-${
- now.getDate().toString().padStart(2, '0')
- } ${
- now.getHours().toString().padStart(2, '0')
- }-${
- now.getMinutes().toString().padStart(2, '0')
- }-${
- now.getSeconds().toString().padStart(2, '0')
- }.mkv`
- );
- const writer = stream.getWriter();
- writer.write(new Uint8Array(buffer));
- writer.close();
-
- this.muxer = undefined;
- this.configurationWritten = false;
- this.running = false;
- }
-}
-
-export const RECORD_STATE = makeAutoObservable({
- recorder: new MatroskaMuxingRecorder(),
- recording: false,
- intervalId: -1,
- hours: 0,
- minutes: 0,
- seconds: 0,
-});
-
-reaction(
- () => RECORD_STATE.recording,
- (recording) => {
- if (recording) {
- RECORD_STATE.intervalId = globalThis.setInterval(
- action(() => {
- RECORD_STATE.seconds += 1;
- if (RECORD_STATE.seconds >= 60) {
- RECORD_STATE.seconds = 0;
- RECORD_STATE.minutes += 1;
- }
- if (RECORD_STATE.minutes >= 60) {
- RECORD_STATE.minutes = 0;
- RECORD_STATE.hours += 1;
- }
- }),
- 1000
- ) as unknown as number;
- } else {
- globalThis.clearInterval(RECORD_STATE.intervalId);
- RECORD_STATE.intervalId = -1;
- RECORD_STATE.hours = 0;
- RECORD_STATE.minutes = 0;
- RECORD_STATE.seconds = 0;
- }
- }
-);
diff --git a/apps/demo/src/components/scrcpy/settings.tsx b/apps/demo/src/components/scrcpy/settings.tsx
deleted file mode 100644
index b236febe..00000000
--- a/apps/demo/src/components/scrcpy/settings.tsx
+++ /dev/null
@@ -1,607 +0,0 @@
-import {
- Dropdown,
- IDropdownOption,
- Icon,
- IconButton,
- Position,
- SpinButton,
- Stack,
- TextField,
- Toggle,
- TooltipHost,
-} from "@fluentui/react";
-import { makeStyles } from "@griffel/react";
-import { AdbSyncError } from "@yume-chan/adb";
-import { AdbScrcpyClient, AdbScrcpyOptionsLatest } from "@yume-chan/adb-scrcpy";
-import { VERSION } from "@yume-chan/fetch-scrcpy-server";
-import {
- DEFAULT_SERVER_PATH,
- ScrcpyDisplay,
- ScrcpyEncoder,
- ScrcpyLogLevel,
- ScrcpyOptionsInitLatest,
- ScrcpyOptionsLatest,
- ScrcpyVideoOrientation,
-} from "@yume-chan/scrcpy";
-import {
- ScrcpyVideoDecoderConstructor,
- TinyH264Decoder,
-} from "@yume-chan/scrcpy-decoder-tinyh264";
-import { ConcatStringStream, DecodeUtf8Stream } from "@yume-chan/stream-extra";
-import {
- autorun,
- computed,
- makeAutoObservable,
- observable,
- runInAction,
-} from "mobx";
-import { observer } from "mobx-react-lite";
-import { GLOBAL_STATE } from "../../state";
-import { Icons } from "../../utils";
-import { STATE } from "./state";
-
-export type Settings = ScrcpyOptionsInitLatest;
-
-export interface ClientSettings {
- turnScreenOff?: boolean;
- decoder?: string;
- ignoreDecoderCodecArgs?: boolean;
-}
-
-export type SettingKeys = keyof (Settings & ClientSettings);
-
-export interface SettingDefinitionBase {
- group: "settings" | "clientSettings";
- key: SettingKeys;
- type: string;
- label: string;
- labelExtra?: JSX.Element;
- description?: string;
-}
-
-export interface TextSettingDefinition extends SettingDefinitionBase {
- type: "text";
- placeholder?: string;
-}
-
-export interface DropdownSettingDefinition extends SettingDefinitionBase {
- type: "dropdown";
- placeholder?: string;
- options: IDropdownOption[];
-}
-
-export interface ToggleSettingDefinition extends SettingDefinitionBase {
- type: "toggle";
- disabled?: boolean;
-}
-
-export interface NumberSettingDefinition extends SettingDefinitionBase {
- type: "number";
- min?: number;
- max?: number;
- step?: number;
-}
-
-export type SettingDefinition =
- | TextSettingDefinition
- | DropdownSettingDefinition
- | ToggleSettingDefinition
- | NumberSettingDefinition;
-
-interface SettingItemProps {
- definition: SettingDefinition;
- value: any;
- onChange: (definition: SettingDefinition, value: any) => void;
-}
-
-const useClasses = makeStyles({
- labelRight: {
- marginLeft: "4px",
- },
- item: {
- width: "100%",
- maxWidth: "300px",
- },
-});
-
-export const SettingItem = observer(function SettingItem({
- definition,
- value,
- onChange,
-}: SettingItemProps) {
- const classes = useClasses();
-
- let label: JSX.Element = (
-
- {definition.label}
- {!!definition.description && (
-
-
-
- )}
- {definition.labelExtra}
-
- );
-
- switch (definition.type) {
- case "text":
- return (
- onChange(definition, value)}
- />
- );
- case "dropdown":
- return (
- onChange(definition, option!.key)}
- />
- );
- case "toggle":
- return (
- onChange(definition, checked)}
- />
- );
- case "number":
- return (
-
- onChange(definition, Number.parseInt(value!, 10))
- }
- />
- );
- }
-});
-
-export interface DecoderDefinition {
- key: string;
- name: string;
- Constructor: ScrcpyVideoDecoderConstructor;
-}
-
-const DEFAULT_SETTINGS = {
- maxSize: 1080,
- videoBitRate: 4_000_000,
- videoCodec: "h264",
- lockVideoOrientation: ScrcpyVideoOrientation.Unlocked,
- displayId: 0,
- crop: "",
- powerOn: true,
- audio: true,
- audioCodec: "aac",
-} as Settings;
-
-export const SETTING_STATE = makeAutoObservable(
- {
- displays: [] as ScrcpyDisplay[],
- encoders: [] as ScrcpyEncoder[],
- decoders: [
- {
- key: "tinyh264",
- name: "TinyH264 (Software)",
- Constructor: TinyH264Decoder,
- },
- ] as DecoderDefinition[],
-
- settings: DEFAULT_SETTINGS,
-
- clientSettings: {} as ClientSettings,
- },
- {
- decoders: observable.shallow,
- settings: observable.deep,
- clientSettings: observable.deep,
- }
-);
-
-export const SCRCPY_SETTINGS_FILENAME = "/data/local/tmp/.tango.json";
-
-autorun(() => {
- if (GLOBAL_STATE.adb) {
- (async () => {
- const sync = await GLOBAL_STATE.adb!.sync();
- try {
- const settings = JSON.parse(
- await sync
- .read(SCRCPY_SETTINGS_FILENAME)
- .pipeThrough(new DecodeUtf8Stream())
- .pipeThrough(new ConcatStringStream())
- );
- runInAction(() => {
- SETTING_STATE.settings = {
- ...DEFAULT_SETTINGS,
- ...settings.settings,
- };
- SETTING_STATE.clientSettings = settings.clientSettings;
- });
- } catch (e) {
- if (!(e instanceof AdbSyncError)) {
- throw e;
- }
- } finally {
- await sync.dispose();
- }
- })();
-
- runInAction(() => {
- SETTING_STATE.encoders = [];
- SETTING_STATE.displays = [];
- SETTING_STATE.settings.displayId = undefined;
- });
- }
-});
-
-autorun(() => {
- SETTING_STATE.clientSettings.decoder = SETTING_STATE.decoders[0].key;
-});
-
-export const SETTING_DEFINITIONS = computed(() => {
- const result: SettingDefinition[] = [];
-
- result.push(
- {
- group: "settings",
- key: "powerOn",
- type: "toggle",
- label: "Wake device up on start",
- },
- {
- group: "clientSettings",
- key: "turnScreenOff",
- type: "toggle",
- label: "Turn screen off during mirroring",
- },
- {
- group: "settings",
- key: "stayAwake",
- type: "toggle",
- label: "Stay awake during mirroring (if plugged in)",
- },
- {
- group: "settings",
- key: "powerOffOnClose",
- type: "toggle",
- label: "Turn device off on stop",
- }
- );
-
- result.push({
- group: "settings",
- key: "displayId",
- type: "dropdown",
- label: "Display",
- placeholder: "Press refresh to update available displays",
- labelExtra: (
- {
- try {
- await STATE.pushServer();
-
- const displays = await AdbScrcpyClient.getDisplays(
- GLOBAL_STATE.adb!,
- DEFAULT_SERVER_PATH,
- VERSION,
- new AdbScrcpyOptionsLatest(
- new ScrcpyOptionsLatest({
- logLevel: ScrcpyLogLevel.Debug,
- })
- )
- );
-
- runInAction(() => {
- SETTING_STATE.displays = displays;
- if (
- !SETTING_STATE.settings.displayId ||
- !SETTING_STATE.displays.some(
- (x) =>
- x.id ===
- SETTING_STATE.settings.displayId
- )
- ) {
- SETTING_STATE.settings.displayId =
- SETTING_STATE.displays[0]?.id;
- }
- });
- } catch (e: any) {
- GLOBAL_STATE.showErrorDialog(e);
- }
- }}
- />
- ),
- options: SETTING_STATE.displays.map((item) => ({
- key: item.id,
- text: `${item.id}${item.resolution ? ` (${item.resolution})` : ""}`,
- })),
- });
-
- result.push({
- group: "settings",
- key: "crop",
- type: "text",
- label: "Crop",
- placeholder: "W:H:X:Y",
- });
-
- result.push(
- {
- group: "settings",
- key: "maxSize",
- type: "number",
- label: "Max Resolution (longer side, 0 = unlimited)",
- min: 0,
- max: 2560,
- step: 50,
- },
- {
- group: "settings",
- key: "videoBitRate",
- type: "number",
- label: "Max Video Bitrate (bps)",
- min: 100,
- max: 100_000_000,
- step: 100,
- },
- {
- group: "settings",
- key: "videoCodec",
- type: "dropdown",
- label: "Video Codec",
- options: [
- {
- key: "h264",
- text: "H.264",
- },
- {
- key: "h265",
- text: "H.265",
- },
- ],
- },
- {
- group: "settings",
- key: "videoEncoder",
- type: "dropdown",
- label: "Video Encoder",
- placeholder:
- SETTING_STATE.encoders.length === 0
- ? "Press refresh button to update encoder list"
- : "(default)",
- labelExtra: (
- {
- try {
- await STATE.pushServer();
-
- const encoders = await AdbScrcpyClient.getEncoders(
- GLOBAL_STATE.adb!,
- DEFAULT_SERVER_PATH,
- VERSION,
- new AdbScrcpyOptionsLatest(
- new ScrcpyOptionsLatest({
- logLevel: ScrcpyLogLevel.Debug,
- })
- )
- );
-
- runInAction(() => {
- SETTING_STATE.encoders = encoders;
- });
- } catch (e: any) {
- GLOBAL_STATE.showErrorDialog(e);
- }
- }}
- />
- ),
- options: SETTING_STATE.encoders
- .filter(
- (item) =>
- item.type === "video" &&
- (!item.codec ||
- item.codec === SETTING_STATE.settings.videoCodec!)
- )
- .map((item) => ({
- key: item.name,
- text: item.name,
- })),
- }
- );
-
- result.push({
- group: "settings",
- key: "lockVideoOrientation",
- type: "dropdown",
- label: "Lock Video Orientation",
- options: [
- {
- key: ScrcpyVideoOrientation.Unlocked,
- text: "Unlocked",
- },
- {
- key: ScrcpyVideoOrientation.Initial,
- text: "Current",
- },
- {
- key: ScrcpyVideoOrientation.Portrait,
- text: "Portrait",
- },
- {
- key: ScrcpyVideoOrientation.Landscape,
- text: "Landscape",
- },
- {
- key: ScrcpyVideoOrientation.PortraitFlipped,
- text: "Portrait (Flipped)",
- },
- {
- key: ScrcpyVideoOrientation.LandscapeFlipped,
- text: "Landscape (Flipped)",
- },
- ],
- });
-
- if (SETTING_STATE.decoders.length > 1) {
- result.push({
- group: "clientSettings",
- key: "decoder",
- type: "dropdown",
- label: "Video Decoder",
- options: SETTING_STATE.decoders.map((item) => ({
- key: item.key,
- text: item.name,
- data: item,
- })),
- });
- }
-
- result.push({
- group: "clientSettings",
- key: "ignoreDecoderCodecArgs",
- type: "toggle",
- label: `Ignore video decoder's codec options`,
- description: `Some decoders don't support all H.264 profile/levels, so they request the device to encode at their highest-supported codec. However, some super old devices may not support that codec so their encoders will fail to start. Use this option to let device choose the codec to be used.`,
- });
-
- result.push(
- {
- group: "settings",
- key: "audio",
- type: "toggle",
- label: "Forward Audio (Requires Android 11)",
- },
- {
- group: "settings",
- key: "audioCodec",
- type: "dropdown",
- label: "Audio Codec",
- options: [
- {
- key: "raw",
- text: "Raw",
- },
- {
- key: "aac",
- text: "AAC",
- },
- {
- key: "opus",
- text: "Opus",
- },
- ],
- },
- {
- group: "settings",
- key: "audioEncoder",
- type: "dropdown",
- placeholder:
- SETTING_STATE.encoders.length === 0
- ? "Press refresh button to update encoder list"
- : "(default)",
- label: "Audio Encoder",
- labelExtra: (
- {
- try {
- await STATE.pushServer();
-
- const encoders = await AdbScrcpyClient.getEncoders(
- GLOBAL_STATE.adb!,
- DEFAULT_SERVER_PATH,
- VERSION,
- new AdbScrcpyOptionsLatest(
- new ScrcpyOptionsLatest({
- logLevel: ScrcpyLogLevel.Debug,
- })
- )
- );
-
- runInAction(() => {
- SETTING_STATE.encoders = encoders;
- });
- } catch (e: any) {
- GLOBAL_STATE.showErrorDialog(e);
- }
- }}
- />
- ),
- options: SETTING_STATE.encoders
- .filter(
- (x) =>
- x.type === "audio" &&
- x.codec === SETTING_STATE.settings.audioCodec
- )
- .map((item) => ({
- key: item.name,
- text: item.name,
- })),
- }
- );
-
- return result;
-});
-
-autorun(() => {
- if (SETTING_STATE.encoders.length === 0) {
- SETTING_STATE.settings.videoEncoder = "";
- SETTING_STATE.settings.audioEncoder = "";
- return;
- }
-
- const encodersForCurrentVideoCodec = SETTING_STATE.encoders.filter(
- (item) =>
- item.type === "video" &&
- item.codec === SETTING_STATE.settings.videoCodec
- );
- if (
- SETTING_STATE.settings.videoEncoder &&
- encodersForCurrentVideoCodec.every(
- (item) => item.name !== SETTING_STATE.settings.videoEncoder
- )
- ) {
- SETTING_STATE.settings.videoEncoder = "";
- }
-
- const encodersForCurrentAudioCodec = SETTING_STATE.encoders.filter(
- (item) =>
- item.type === "audio" &&
- item.codec === SETTING_STATE.settings.audioCodec
- );
- if (
- SETTING_STATE.settings.audioEncoder &&
- encodersForCurrentAudioCodec.every(
- (item) => item.name !== SETTING_STATE.settings.audioEncoder
- )
- ) {
- SETTING_STATE.settings.audioEncoder = "";
- }
-});
diff --git a/apps/demo/src/components/scrcpy/state.tsx b/apps/demo/src/components/scrcpy/state.tsx
deleted file mode 100644
index 5aa736ea..00000000
--- a/apps/demo/src/components/scrcpy/state.tsx
+++ /dev/null
@@ -1,637 +0,0 @@
-import { ADB_SYNC_MAX_PACKET_SIZE, encodeUtf8 } from "@yume-chan/adb";
-import { AdbDaemonWebUsbDevice } from "@yume-chan/adb-daemon-webusb";
-import { AdbScrcpyClient, AdbScrcpyOptionsLatest } from "@yume-chan/adb-scrcpy";
-import { VERSION } from "@yume-chan/fetch-scrcpy-server";
-import {
- Float32PcmPlayer,
- Float32PlanerPcmPlayer,
- Int16PcmPlayer,
- PcmPlayer,
-} from "@yume-chan/pcm-player";
-import {
- AndroidScreenPowerMode,
- CodecOptions,
- DEFAULT_SERVER_PATH,
- ScrcpyAudioCodec,
- ScrcpyDeviceMessageType,
- ScrcpyHoverHelper,
- ScrcpyInstanceId,
- ScrcpyLogLevel,
- ScrcpyMediaStreamPacket,
- ScrcpyOptionsLatest,
- ScrcpyVideoCodecId,
- clamp,
- h264ParseConfiguration,
- h265ParseConfiguration,
-} from "@yume-chan/scrcpy";
-import { ScrcpyVideoDecoder } from "@yume-chan/scrcpy-decoder-tinyh264";
-import {
- Consumable,
- DistributionStream,
- InspectStream,
- ReadableStream,
- WritableStream,
-} from "@yume-chan/stream-extra";
-import { action, autorun, makeAutoObservable, runInAction } from "mobx";
-import { GLOBAL_STATE } from "../../state";
-import { ProgressStream } from "../../utils";
-import { AacDecodeStream, OpusDecodeStream } from "./audio-decode-stream";
-import { fetchServer } from "./fetch-server";
-import {
- AoaKeyboardInjector,
- KeyboardInjector,
- ScrcpyKeyboardInjector,
-} from "./input";
-import { MatroskaMuxingRecorder, RECORD_STATE } from "./recorder";
-import { SCRCPY_SETTINGS_FILENAME, SETTING_STATE } from "./settings";
-
-const NOOP = () => {
- // no-op
-};
-
-export class ScrcpyPageState {
- running = false;
-
- fullScreenContainer: HTMLDivElement | null = null;
- rendererContainer: HTMLDivElement | null = null;
-
- isFullScreen = false;
-
- logVisible = false;
- log: string[] = [];
- demoModeVisible = false;
- navigationBarVisible = true;
-
- width = 0;
- height = 0;
- rotation = 0;
-
- get rotatedWidth() {
- return STATE.rotation & 1 ? STATE.height : STATE.width;
- }
- get rotatedHeight() {
- return STATE.rotation & 1 ? STATE.width : STATE.height;
- }
-
- client: AdbScrcpyClient | undefined = undefined;
- hoverHelper: ScrcpyHoverHelper | undefined = undefined;
- keyboard: KeyboardInjector | undefined = undefined;
- audioPlayer: PcmPlayer | undefined = undefined;
-
- async pushServer() {
- const serverBuffer = await fetchServer();
- await AdbScrcpyClient.pushServer(
- GLOBAL_STATE.adb!,
- new ReadableStream>({
- start(controller) {
- controller.enqueue(new Consumable(serverBuffer));
- controller.close();
- },
- })
- );
- }
-
- decoder: ScrcpyVideoDecoder | undefined = undefined;
- fpsCounterIntervalId: any = undefined;
- fps = "0";
-
- connecting = false;
- serverTotalSize = 0;
- serverDownloadedSize = 0;
- debouncedServerDownloadedSize = 0;
- serverDownloadSpeed = 0;
- serverUploadedSize = 0;
- debouncedServerUploadedSize = 0;
- serverUploadSpeed = 0;
-
- constructor() {
- makeAutoObservable(this, {
- start: false,
- stop: action.bound,
- dispose: action.bound,
- setFullScreenContainer: action.bound,
- setRendererContainer: action.bound,
- clientPositionToDevicePosition: false,
- });
-
- autorun(() => {
- if (!GLOBAL_STATE.adb) {
- this.dispose();
- }
- });
-
- if (typeof document === "object") {
- document.addEventListener("fullscreenchange", () => {
- if (!document.fullscreenElement) {
- runInAction(() => {
- this.isFullScreen = false;
- });
- }
- });
- }
-
- autorun(() => {
- if (this.rendererContainer && this.decoder) {
- while (this.rendererContainer.firstChild) {
- this.rendererContainer.firstChild.remove();
- }
- this.rendererContainer.appendChild(this.decoder.renderer);
- }
- });
- }
-
- start = async () => {
- if (!GLOBAL_STATE.adb) {
- return;
- }
-
- try {
- if (!SETTING_STATE.clientSettings.decoder) {
- throw new Error("No available decoder");
- }
-
- runInAction(() => {
- this.serverTotalSize = 0;
- this.serverDownloadedSize = 0;
- this.debouncedServerDownloadedSize = 0;
- this.serverUploadedSize = 0;
- this.debouncedServerUploadedSize = 0;
- this.connecting = true;
- });
-
- let intervalId = setInterval(
- action(() => {
- this.serverDownloadSpeed =
- this.serverDownloadedSize -
- this.debouncedServerDownloadedSize;
- this.debouncedServerDownloadedSize =
- this.serverDownloadedSize;
- }),
- 1000
- );
-
- let serverBuffer: Uint8Array;
- try {
- serverBuffer = await fetchServer(
- action(([downloaded, total]) => {
- this.serverDownloadedSize = downloaded;
- this.serverTotalSize = total;
- })
- );
- runInAction(() => {
- this.serverDownloadSpeed =
- this.serverDownloadedSize -
- this.debouncedServerDownloadedSize;
- this.debouncedServerDownloadedSize =
- this.serverDownloadedSize;
- });
- } finally {
- clearInterval(intervalId);
- }
-
- intervalId = setInterval(
- action(() => {
- this.serverUploadSpeed =
- this.serverUploadedSize -
- this.debouncedServerUploadedSize;
- this.debouncedServerUploadedSize = this.serverUploadedSize;
- }),
- 1000
- );
-
- try {
- await AdbScrcpyClient.pushServer(
- GLOBAL_STATE.adb!,
- new ReadableStream>({
- start(controller) {
- controller.enqueue(new Consumable(serverBuffer));
- controller.close();
- },
- })
- // In fact `pushServer` will pipe the stream through a DistributionStream,
- // but without this pipeThrough, the progress will not be updated.
- .pipeThrough(
- new DistributionStream(ADB_SYNC_MAX_PACKET_SIZE)
- )
- .pipeThrough(
- new ProgressStream(
- action((progress) => {
- this.serverUploadedSize = progress;
- })
- )
- )
- );
-
- runInAction(() => {
- this.serverUploadSpeed =
- this.serverUploadedSize -
- this.debouncedServerUploadedSize;
- this.debouncedServerUploadedSize = this.serverUploadedSize;
- });
- } finally {
- clearInterval(intervalId);
- }
-
- const decoderDefinition =
- SETTING_STATE.decoders.find(
- (x) => x.key === SETTING_STATE.clientSettings.decoder
- ) ?? SETTING_STATE.decoders[0];
-
- const videoCodecOptions = new CodecOptions();
- if (!SETTING_STATE.clientSettings.ignoreDecoderCodecArgs) {
- const capability =
- decoderDefinition.Constructor.capabilities[
- SETTING_STATE.settings.videoCodec!
- ];
- if (capability) {
- videoCodecOptions.value.profile = capability.maxProfile;
- videoCodecOptions.value.level = capability.maxLevel;
- }
- }
-
- // Disabled due to https://github.com/Genymobile/scrcpy/issues/2841
- // Less recording delay
- // codecOptions.value.iFrameInterval = 1;
- // Less latency
- // codecOptions.value.intraRefreshPeriod = 10000;
-
- const options = new AdbScrcpyOptionsLatest(
- new ScrcpyOptionsLatest({
- ...SETTING_STATE.settings,
- logLevel: ScrcpyLogLevel.Debug,
- scid: ScrcpyInstanceId.random(),
- sendDeviceMeta: false,
- sendDummyByte: false,
- videoCodecOptions,
- })
- );
-
- runInAction(() => {
- this.log = [];
- this.log.push(`[client] Server version: ${VERSION}`);
- this.log.push(
- `[client] Server arguments: ${options
- .serialize()
- .join(" ")}`
- );
- });
-
- const client = await AdbScrcpyClient.start(
- GLOBAL_STATE.adb!,
- DEFAULT_SERVER_PATH,
- VERSION,
- options
- );
-
- client.stdout.pipeTo(
- new WritableStream({
- write: action((line) => {
- this.log.push(line);
- }),
- })
- );
-
- const sync = await GLOBAL_STATE.adb!.sync();
- try {
- await sync.write({
- filename: SCRCPY_SETTINGS_FILENAME,
- file: new ReadableStream>({
- start(controller) {
- controller.enqueue(
- new Consumable(
- encodeUtf8(
- JSON.stringify({
- settings: SETTING_STATE.settings,
- clientSettings:
- SETTING_STATE.clientSettings,
- })
- )
- )
- );
- controller.close();
- },
- }),
- });
- } finally {
- sync.dispose();
- }
-
- RECORD_STATE.recorder = new MatroskaMuxingRecorder();
-
- client.videoStream!.then(({ stream, metadata }) => {
- runInAction(() => {
- RECORD_STATE.recorder.videoMetadata = metadata;
- });
-
- const decoder = new decoderDefinition.Constructor(
- metadata.codec
- );
-
- runInAction(() => {
- this.decoder = decoder;
-
- let lastFrameRendered = 0;
- let lastFrameSkipped = 0;
- this.fpsCounterIntervalId = setInterval(
- action(() => {
- const deltaRendered =
- decoder.frameRendered - lastFrameRendered;
- const deltaSkipped =
- decoder.frameSkipped - lastFrameSkipped;
- // prettier-ignore
- this.fps = `${
- deltaRendered
- }${
- deltaSkipped ? `+${deltaSkipped} skipped` : ""
- }`;
- lastFrameRendered = decoder.frameRendered;
- lastFrameSkipped = decoder.frameSkipped;
- }),
- 1000
- );
- });
-
- let lastKeyframe = 0n;
- const handler = new InspectStream(
- (packet) => {
- RECORD_STATE.recorder.addVideoPacket(packet);
-
- if (packet.type === "configuration") {
- let croppedWidth: number;
- let croppedHeight: number;
- switch (metadata.codec) {
- case ScrcpyVideoCodecId.H264:
- ({ croppedWidth, croppedHeight } =
- h264ParseConfiguration(packet.data));
- break;
- case ScrcpyVideoCodecId.H265:
- ({ croppedWidth, croppedHeight } =
- h265ParseConfiguration(packet.data));
- break;
- default:
- throw new Error("Codec not supported");
- }
-
- runInAction(() => {
- this.log.push(
- `[client] Video size changed: ${croppedWidth}x${croppedHeight}`
- );
- this.width = croppedWidth;
- this.height = croppedHeight;
- });
- } else if (
- packet.keyframe &&
- packet.pts !== undefined
- ) {
- if (lastKeyframe) {
- const interval =
- (Number(packet.pts - lastKeyframe) / 1000) |
- 0;
- runInAction(() => {
- this.log.push(
- `[client] Keyframe interval: ${interval}ms`
- );
- });
- }
- lastKeyframe = packet.pts!;
- }
- }
- );
-
- stream.pipeThrough(handler).pipeTo(decoder.writable);
- });
-
- client.audioStream?.then(async (metadata) => {
- switch (metadata.type) {
- case "disabled":
- runInAction(() =>
- this.log.push(
- `[client] Demuxer audio: stream explicitly disabled by the device`
- )
- );
- return;
- case "errored":
- runInAction(() =>
- this.log.push(
- `[client] Demuxer audio: stream configuration error on the device`
- )
- );
- return;
- case "success":
- // Code is after this `switch`
- break;
- default:
- throw new Error(
- `Unexpected audio metadata type ${
- metadata["type"] as unknown as string
- }`
- );
- }
-
- const [recordStream, playbackStream] = metadata.stream.tee();
- switch (metadata.codec) {
- case ScrcpyAudioCodec.RAW: {
- const audioPlayer = new Int16PcmPlayer(48000);
- this.audioPlayer = audioPlayer;
-
- playbackStream.pipeTo(
- new WritableStream({
- write: (chunk) => {
- audioPlayer.feed(
- new Int16Array(
- chunk.data.buffer,
- chunk.data.byteOffset,
- chunk.data.byteLength /
- Int16Array.BYTES_PER_ELEMENT
- )
- );
- },
- })
- );
-
- await this.audioPlayer.start();
- break;
- }
- case ScrcpyAudioCodec.OPUS: {
- const audioPlayer = new Float32PcmPlayer(48000);
- this.audioPlayer = audioPlayer;
-
- playbackStream
- .pipeThrough(
- new OpusDecodeStream({
- codec: metadata.codec.webCodecId,
- numberOfChannels: 2,
- sampleRate: 48000,
- })
- )
- .pipeTo(
- new WritableStream({
- write: (chunk) => {
- audioPlayer.feed(chunk);
- },
- })
- );
- await audioPlayer.start();
- break;
- }
- case ScrcpyAudioCodec.AAC: {
- const audioPlayer = new Float32PlanerPcmPlayer(48000);
- this.audioPlayer = audioPlayer;
-
- playbackStream
- .pipeThrough(
- new AacDecodeStream({
- codec: metadata.codec.webCodecId,
- numberOfChannels: 2,
- sampleRate: 48000,
- })
- )
- .pipeTo(
- new WritableStream({
- write: (chunk) => {
- audioPlayer.feed(chunk);
- },
- })
- );
- await audioPlayer.start();
- break;
- }
- default:
- throw new Error(
- `Unsupported audio codec ${metadata.codec.optionValue}`
- );
- }
-
- runInAction(() => {
- RECORD_STATE.recorder.audioCodec = metadata.codec;
- });
-
- recordStream.pipeTo(
- new WritableStream({
- write: (packet) => {
- if (packet.type === "data") {
- RECORD_STATE.recorder.addAudioPacket(packet);
- }
- },
- })
- );
- });
-
- client.exit.then(this.dispose);
-
- client.deviceMessageStream!.pipeTo(
- new WritableStream({
- write(message) {
- switch (message.type) {
- case ScrcpyDeviceMessageType.Clipboard:
- globalThis.navigator.clipboard.writeText(
- message.content
- );
- break;
- }
- },
- })
- );
-
- if (SETTING_STATE.clientSettings.turnScreenOff) {
- await client.controlMessageWriter!.setScreenPowerMode(
- AndroidScreenPowerMode.Off
- );
- }
-
- runInAction(() => {
- this.client = client;
- this.hoverHelper = new ScrcpyHoverHelper();
- this.running = true;
- });
-
- const device = GLOBAL_STATE.device!;
- if (device instanceof AdbDaemonWebUsbDevice) {
- this.keyboard = await AoaKeyboardInjector.register(device.raw);
- } else {
- this.keyboard = new ScrcpyKeyboardInjector(client);
- }
- } catch (e: any) {
- GLOBAL_STATE.showErrorDialog(e);
- } finally {
- runInAction(() => {
- this.connecting = false;
- });
- }
- };
-
- async stop() {
- // Request to close client first
- await this.client?.close();
- this.dispose();
- }
-
- dispose() {
- // Otherwise some packets may still arrive at decoder
- this.decoder?.dispose();
- this.decoder = undefined;
-
- if (RECORD_STATE.recording) {
- RECORD_STATE.recorder.stop();
- RECORD_STATE.recording = false;
- }
-
- this.keyboard?.dispose();
- this.keyboard = undefined;
-
- this.audioPlayer?.stop();
- this.audioPlayer = undefined;
-
- this.fps = "0";
- clearTimeout(this.fpsCounterIntervalId);
-
- if (this.isFullScreen) {
- document.exitFullscreen();
- this.isFullScreen = false;
- }
-
- this.client = undefined;
- this.running = false;
- }
-
- setFullScreenContainer(element: HTMLDivElement | null) {
- this.fullScreenContainer = element;
- }
-
- setRendererContainer(element: HTMLDivElement | null) {
- this.rendererContainer = element;
- }
-
- clientPositionToDevicePosition(clientX: number, clientY: number) {
- const viewRect = this.rendererContainer!.getBoundingClientRect();
- let pointerViewX = clamp((clientX - viewRect.x) / viewRect.width, 0, 1);
- let pointerViewY = clamp(
- (clientY - viewRect.y) / viewRect.height,
- 0,
- 1
- );
-
- if (this.rotation & 1) {
- [pointerViewX, pointerViewY] = [pointerViewY, pointerViewX];
- }
- switch (this.rotation) {
- case 1:
- pointerViewY = 1 - pointerViewY;
- break;
- case 2:
- pointerViewX = 1 - pointerViewX;
- pointerViewY = 1 - pointerViewY;
- break;
- case 3:
- pointerViewX = 1 - pointerViewX;
- break;
- }
-
- return {
- x: pointerViewX * this.width,
- y: pointerViewY * this.height,
- };
- }
-}
-
-export const STATE = new ScrcpyPageState();
diff --git a/apps/demo/src/components/scrcpy/video-container.tsx b/apps/demo/src/components/scrcpy/video-container.tsx
deleted file mode 100644
index c0abb585..00000000
--- a/apps/demo/src/components/scrcpy/video-container.tsx
+++ /dev/null
@@ -1,180 +0,0 @@
-import { makeStyles } from "@griffel/react";
-import {
- AndroidMotionEventAction,
- AndroidMotionEventButton,
- ScrcpyPointerId,
-} from "@yume-chan/scrcpy";
-import { MouseEvent, PointerEvent, useEffect, useState } from "react";
-import { STATE } from "./state";
-
-const useClasses = makeStyles({
- video: {
- transformOrigin: "center center",
- touchAction: "none",
- },
-});
-
-function handleWheel(e: WheelEvent) {
- if (!STATE.client) {
- return;
- }
-
- STATE.fullScreenContainer!.focus();
- e.preventDefault();
- e.stopPropagation();
-
- const { x, y } = STATE.clientPositionToDevicePosition(e.clientX, e.clientY);
- STATE.client!.controlMessageWriter!.injectScroll({
- screenWidth: STATE.client!.screenWidth!,
- screenHeight: STATE.client!.screenHeight!,
- pointerX: x,
- pointerY: y,
- scrollX: -e.deltaX / 100,
- scrollY: -e.deltaY / 100,
- buttons: 0,
- });
-}
-
-const MOUSE_EVENT_BUTTON_TO_ANDROID_BUTTON = [
- AndroidMotionEventButton.Primary,
- AndroidMotionEventButton.Tertiary,
- AndroidMotionEventButton.Secondary,
- AndroidMotionEventButton.Back,
- AndroidMotionEventButton.Forward,
-];
-
-function injectTouch(
- action: AndroidMotionEventAction,
- e: PointerEvent
-) {
- if (!STATE.client) {
- return;
- }
-
- const { pointerType } = e;
- let pointerId: bigint;
- if (pointerType === "mouse") {
- // Android 13 has bug with mouse injection
- // https://github.com/Genymobile/scrcpy/issues/3708
- pointerId = ScrcpyPointerId.Finger;
- } else {
- pointerId = BigInt(e.pointerId);
- }
-
- const { x, y } = STATE.clientPositionToDevicePosition(e.clientX, e.clientY);
-
- const messages = STATE.hoverHelper!.process({
- action,
- pointerId,
- screenWidth: STATE.client.screenWidth!,
- screenHeight: STATE.client.screenHeight!,
- pointerX: x,
- pointerY: y,
- pressure: e.pressure,
- actionButton: MOUSE_EVENT_BUTTON_TO_ANDROID_BUTTON[e.button],
- // `MouseEvent.buttons` has the same order as Android `MotionEvent`
- buttons: e.buttons,
- });
- for (const message of messages) {
- STATE.client.controlMessageWriter!.injectTouch(message);
- }
-}
-
-function handlePointerDown(e: PointerEvent) {
- if (!STATE.client) {
- return;
- }
-
- STATE.fullScreenContainer!.focus();
- e.preventDefault();
- e.stopPropagation();
-
- e.currentTarget.setPointerCapture(e.pointerId);
- injectTouch(AndroidMotionEventAction.Down, e);
-}
-
-function handlePointerMove(e: PointerEvent) {
- if (!STATE.client) {
- return;
- }
-
- e.preventDefault();
- e.stopPropagation();
- injectTouch(
- e.buttons === 0
- ? AndroidMotionEventAction.HoverMove
- : AndroidMotionEventAction.Move,
- e
- );
-}
-
-function handlePointerUp(e: PointerEvent) {
- if (!STATE.client) {
- return;
- }
-
- e.preventDefault();
- e.stopPropagation();
- injectTouch(AndroidMotionEventAction.Up, e);
-}
-
-function handlePointerLeave(e: PointerEvent) {
- if (!STATE.client) {
- return;
- }
-
- e.preventDefault();
- e.stopPropagation();
- // Because pointer capture on pointer down, this event only happens for hovering mouse and pen.
- // Release the injected pointer, otherwise it will stuck at the last position.
- injectTouch(AndroidMotionEventAction.HoverExit, e);
- injectTouch(AndroidMotionEventAction.Up, e);
-}
-
-function handleContextMenu(e: MouseEvent) {
- e.preventDefault();
-}
-
-export function VideoContainer() {
- const classes = useClasses();
-
- const [container, setContainer] = useState(null);
-
- useEffect(() => {
- STATE.setRendererContainer(container);
-
- if (!container) {
- return;
- }
-
- container.addEventListener("wheel", handleWheel, {
- passive: false,
- });
-
- return () => {
- container.removeEventListener("wheel", handleWheel);
- };
- }, [container]);
-
- return (
-
- );
-}
diff --git a/apps/demo/src/components/tabby-frame-manager.tsx b/apps/demo/src/components/tabby-frame-manager.tsx
deleted file mode 100644
index 01bec9f7..00000000
--- a/apps/demo/src/components/tabby-frame-manager.tsx
+++ /dev/null
@@ -1,178 +0,0 @@
-import { AdbIncomingSocketHandler, AdbTransport } from "@yume-chan/adb";
-import {
- WrapConsumableStream,
- WrapWritableStream,
-} from "@yume-chan/stream-extra";
-import { ValueOrPromise } from "@yume-chan/struct";
-import * as Comlink from "comlink";
-import { autorun } from "mobx";
-import getConfig from "next/config";
-import { GLOBAL_STATE } from "../state";
-
-let port: MessagePort | undefined;
-let resizeObserver: ResizeObserver | undefined;
-let frame: HTMLIFrameElement | undefined;
-
-export interface AdbProxyTransportServer {
- disconnected: Promise;
-
- connect(
- service: string,
- callback: (
- readable: ReadableStream,
- writable: WritableStream,
- close: () => ValueOrPromise
- ) => void
- ): void;
-
- addReverseTunnel(
- handler: AdbIncomingSocketHandler,
- address?: string
- ): ValueOrPromise;
-
- removeReverseTunnel(address: string): ValueOrPromise;
-
- clearReverseTunnels(): ValueOrPromise;
-
- close(): ValueOrPromise;
-}
-
-class AdbProxyTransportServerImpl implements AdbProxyTransportServer {
- private _transport: AdbTransport;
-
- public get disconnected() {
- return this._transport.disconnected;
- }
-
- public constructor(transport: AdbTransport) {
- this._transport = transport;
- }
-
- public async connect(
- service: string,
- callback: (
- readable: ReadableStream,
- writable: WritableStream,
- close: () => ValueOrPromise
- ) => void
- ) {
- const socket = await this._transport.connect(service);
- const writable = new WrapWritableStream(
- socket.writable
- ).bePipedThroughFrom(new WrapConsumableStream());
- callback(
- Comlink.transfer(socket.readable, [socket.readable]),
- Comlink.transfer(writable, [writable]),
- Comlink.proxy(() => socket.close())
- );
- }
-
- public addReverseTunnel(
- handler: AdbIncomingSocketHandler,
- address?: string
- ): ValueOrPromise {
- return this._transport.addReverseTunnel(handler, address);
- }
-
- public removeReverseTunnel(address: string): ValueOrPromise {
- return this._transport.removeReverseTunnel(address);
- }
-
- public clearReverseTunnels(): ValueOrPromise {
- return this._transport.clearReverseTunnels();
- }
-
- public close(): ValueOrPromise {
- return this._transport.close();
- }
-}
-
-function syncDevice() {
- if (!frame) {
- return;
- }
-
- if (port) {
- port.close();
- port = undefined;
- }
-
- const { adb: adb } = GLOBAL_STATE;
- if (adb) {
- const channel = new MessageChannel();
- port = channel.port1;
-
- const server = new AdbProxyTransportServerImpl(adb.transport);
- Comlink.expose(server, port);
-
- const { product, model, device, features } = adb.banner;
- frame.contentWindow?.postMessage(
- {
- type: "adb-connect",
- serial: adb.serial,
- maxPayloadSize: adb.maxPayloadSize,
- banner: {
- product,
- model,
- device,
- features,
- },
- port: channel.port2,
- },
- "*",
- [channel.port2]
- );
- }
-}
-
-export function attachTabbyFrame(container: HTMLDivElement | null) {
- if (container === null) {
- if (resizeObserver !== undefined) {
- resizeObserver.disconnect();
- }
- if (frame !== undefined) {
- frame.style.visibility = "hidden";
- }
- return;
- }
-
- if (!frame) {
- const {
- publicRuntimeConfig: { basePath },
- } = getConfig();
-
- frame = document.createElement("iframe");
- frame.src = `${basePath}/tabby-frame`;
- frame.style.display = "block";
- frame.style.position = "fixed";
- frame.style.border = "none";
- document.body.appendChild(frame);
-
- globalThis.addEventListener("message", (e) => {
- // Wait for Tabby to be ready
- if (e.source === frame?.contentWindow && e.data === "adb-ready") {
- syncDevice();
- }
- });
-
- // Sync device when it's changed
- autorun(syncDevice);
- }
-
- // Because re-parent an iframe will cause it to reload,
- // use visibility to show/hide it
- // and use a ResizeObserver to put it in the right place.
- frame.style.visibility = "visible";
- resizeObserver = new ResizeObserver(() => {
- const { top, left, width, height } = container.getBoundingClientRect();
- if (width === 0 || height === 0) {
- // zero size makes xterm.js wrap lines incorrectly
- return;
- }
- frame!.style.top = `${top}px`;
- frame!.style.left = `${left}px`;
- frame!.style.width = `${width}px`;
- frame!.style.height = `${height}px`;
- });
- resizeObserver.observe(container);
-}
diff --git a/apps/demo/src/hooks/add-event-listener.ts b/apps/demo/src/hooks/add-event-listener.ts
deleted file mode 100644
index a70f313f..00000000
--- a/apps/demo/src/hooks/add-event-listener.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { useEffect } from "react";
-
-type CommonEventMaps = T extends typeof globalThis
- ? WindowEventMap
- : T extends Window
- ? WindowEventMap
- : T extends Document
- ? DocumentEventMap
- : T extends HTMLElement
- ? HTMLElementEventMap
- : T extends SVGElement
- ? SVGElementEventMap
- : { [type: string]: unknown };
-
-const useClientAddEventListener = <
- T extends EventTarget,
- U extends keyof CommonEventMaps
->(
- target: T | (() => T),
- type: U,
- listener: (this: T, ev: CommonEventMaps[U]) => any,
- options?: AddEventListenerOptions,
- deps?: readonly unknown[]
-) => {
- useEffect(() => {
- const targetValue = typeof target === "function" ? target() : target;
- targetValue.addEventListener(type as any, listener as any, options);
-
- return () =>
- targetValue.removeEventListener(
- type as any,
- listener as any,
- options
- );
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, deps);
-};
-
-export const useAddEventListener =
- typeof window !== "undefined" ? useClientAddEventListener : () => {};
diff --git a/apps/demo/src/hooks/index.ts b/apps/demo/src/hooks/index.ts
deleted file mode 100644
index 1b72e28c..00000000
--- a/apps/demo/src/hooks/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export * from "./add-event-listener";
-export * from "./layout-effect";
-export * from "./local-storage";
-export * from "./stable-callback";
diff --git a/apps/demo/src/hooks/layout-effect.ts b/apps/demo/src/hooks/layout-effect.ts
deleted file mode 100644
index 896e22a1..00000000
--- a/apps/demo/src/hooks/layout-effect.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { useLayoutEffect as useReactLayoutEffect } from "react";
-
-export const useLayoutEffect =
- typeof window !== "undefined" ? useReactLayoutEffect : () => {};
diff --git a/apps/demo/src/hooks/local-storage.ts b/apps/demo/src/hooks/local-storage.ts
deleted file mode 100644
index 1b4c86dd..00000000
--- a/apps/demo/src/hooks/local-storage.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { useState } from "react";
-
-import { useAddEventListener } from "./add-event-listener";
-import { useStableCallback } from "./stable-callback";
-
-function useClientLocalStorage(
- key: string,
- fallbackValue: T
-) {
- const [value, setValue] = useState(
- () => (localStorage.getItem(key) as T) || fallbackValue
- );
-
- useAddEventListener(
- globalThis,
- "storage",
- () =>
- setValue((localStorage.getItem(key) as T | null) ?? fallbackValue),
- { passive: true },
- [key, fallbackValue]
- );
-
- const handleChange = useStableCallback((value: T) => {
- setValue(value);
- localStorage.setItem(key, value);
- });
-
- return [value, handleChange] as const;
-}
-
-export const useLocalStorage: typeof useClientLocalStorage =
- typeof localStorage !== "undefined"
- ? useClientLocalStorage
- : (key, fallbackValue) => [fallbackValue, () => {}];
diff --git a/apps/demo/src/hooks/stable-callback.ts b/apps/demo/src/hooks/stable-callback.ts
deleted file mode 100644
index e4678693..00000000
--- a/apps/demo/src/hooks/stable-callback.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { MutableRefObject, useRef } from "react";
-
-import { useLayoutEffect } from "./layout-effect";
-
-const UNINITIALIZED = Symbol("UNINITIALIZED");
-
-export function useConstLazy(initializer: () => T): T {
- const ref = useRef(UNINITIALIZED);
- if (ref.current === UNINITIALIZED) {
- ref.current = initializer();
- }
- return ref.current;
-}
-
-export function useConst(value: T): T {
- const ref = useRef(value);
- return ref.current;
-}
-
-export function useLatestRef(value: T): MutableRefObject {
- const ref = useRef(value);
- useLayoutEffect(() => {
- ref.current = value;
- }, [value]);
- return ref;
-}
-
-export function useStableCallback void>(
- callback: T
-): T {
- const callbackRef = useLatestRef(callback);
- return useConst(function (...args) {
- return callbackRef.current(...args);
- } as T);
-}
diff --git a/apps/demo/src/pages/_app.tsx b/apps/demo/src/pages/_app.tsx
deleted file mode 100644
index 1d15dd24..00000000
--- a/apps/demo/src/pages/_app.tsx
+++ /dev/null
@@ -1,224 +0,0 @@
-import {
- IComponentAsProps,
- INavButtonProps,
- IconButton,
- Nav,
- Stack,
- StackItem,
-} from "@fluentui/react";
-import { makeStyles, mergeClasses, shorthands } from "@griffel/react";
-import type { AppProps } from "next/app";
-import getConfig from "next/config";
-import Head from "next/head";
-import Link from "next/link";
-import { useRouter } from "next/router";
-import { useCallback, useEffect, useState } from "react";
-import { Connect, ErrorDialogProvider } from "../components";
-import "../styles/globals.css";
-import { Icons } from "../utils";
-import { register as registerIcons } from "../utils/icons";
-
-registerIcons();
-
-const ROUTES = [
- {
- url: "/",
- icon: Icons.Bookmark,
- name: "README",
- },
- {
- url: "/device-info",
- icon: Icons.Phone,
- name: "Device Info",
- },
- {
- url: "/file-manager",
- icon: Icons.Folder,
- name: "File Manager",
- },
- {
- url: "/framebuffer",
- icon: Icons.Camera,
- name: "Screen Capture",
- },
- {
- url: "/shell",
- icon: Icons.WindowConsole,
- name: "Interactive Shell",
- },
- {
- url: "/scrcpy",
- icon: Icons.PhoneLaptop,
- name: "Scrcpy",
- },
- {
- url: "/tcpip",
- icon: Icons.WifiSettings,
- name: "ADB over WiFi",
- },
- {
- url: "/install",
- icon: Icons.Box,
- name: "Install APK",
- },
- {
- url: "/logcat",
- icon: Icons.BookSearch,
- name: "Logcat",
- },
- {
- url: "/power",
- icon: Icons.Power,
- name: "Power Menu",
- },
- {
- url: "/chrome-devtools",
- icon: Icons.WindowDevTools,
- name: "Chrome Remote Debugging",
- },
- {
- url: "/bug-report",
- icon: Icons.Bug,
- name: "Bug Report",
- },
- {
- url: "/packet-log",
- icon: Icons.TextGrammarError,
- name: "Packet Log",
- },
-];
-
-function NavLink({
- link,
- defaultRender: DefaultRender,
- ...props
-}: IComponentAsProps) {
- if (!link) {
- return null;
- }
-
- return (
-
-
-
- );
-}
-
-const useClasses = makeStyles({
- titleContainer: {
- ...shorthands.borderBottom("1px", "solid", "rgb(243, 242, 241)"),
- },
- hidden: {
- display: "none",
- },
- title: {
- ...shorthands.padding("4px", "0"),
- fontSize: "20px",
- textAlign: "center",
- },
- leftColumn: {
- width: "270px",
- paddingRight: "8px",
- ...shorthands.borderRight("1px", "solid", "rgb(243, 242, 241)"),
- overflowY: "auto",
- },
-});
-
-const {
- publicRuntimeConfig: { basePath },
-} = getConfig();
-
-function App({ Component, pageProps }: AppProps) {
- const classes = useClasses();
-
- const [leftPanelVisible, setLeftPanelVisible] = useState(false);
- const toggleLeftPanel = useCallback(() => {
- setLeftPanelVisible((value) => !value);
- }, []);
- useEffect(() => {
- setLeftPanelVisible(innerWidth > 650);
- }, []);
-
- const router = useRouter();
-
- if ("noLayout" in Component) {
- return ;
- }
-
- return (
-
-
-
-
-
-
-
-
-
-
- Tango
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-export default App;
diff --git a/apps/demo/src/pages/_document.tsx b/apps/demo/src/pages/_document.tsx
deleted file mode 100644
index 07260eb7..00000000
--- a/apps/demo/src/pages/_document.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import { resetIds, Stylesheet } from "@fluentui/react";
-import { enableStaticRendering } from "mobx-react-lite";
-import Document, { DocumentContext, DocumentInitialProps } from "next/document";
-
-enableStaticRendering(true);
-
-const stylesheet = Stylesheet.getInstance();
-
-export default class MyDocument extends Document {
- static async getInitialProps(
- context: DocumentContext
- ): Promise {
- resetIds();
-
- const { html, head, styles, ...rest } = await Document.getInitialProps(
- context
- );
-
- return {
- ...rest,
- html,
- head: [
- ...(head ?? []),
- ,
- ],
- styles: (
- <>
- {styles}
-
- >
- ),
- };
- }
-}
diff --git a/apps/demo/src/pages/_offline.tsx b/apps/demo/src/pages/_offline.tsx
deleted file mode 100644
index d8b98a21..00000000
--- a/apps/demo/src/pages/_offline.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import Router from "next/router";
-import { useEffect } from "react";
-
-export default function Fallback() {
- useEffect(() => {
- Router.replace(location.href);
- }, []);
-
- return null;
-}
diff --git a/apps/demo/src/pages/audio.tsx b/apps/demo/src/pages/audio.tsx
deleted file mode 100644
index 9cb188fd..00000000
--- a/apps/demo/src/pages/audio.tsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import { DefaultButton, PrimaryButton } from "@fluentui/react";
-import { AdbDaemonWebUsbDevice } from "@yume-chan/adb-daemon-webusb";
-import {
- aoaGetProtocol,
- aoaSetAudioMode,
- aoaStartAccessory,
-} from "@yume-chan/aoa";
-import { observer } from "mobx-react-lite";
-import { useCallback, useState } from "react";
-import { GLOBAL_STATE } from "../state";
-
-function AudioPage() {
- const [supported, setSupported] = useState(undefined);
- const handleQuerySupportClick = useCallback(async () => {
- const transport = GLOBAL_STATE.device as AdbDaemonWebUsbDevice;
- const device = transport.raw;
- const version = await aoaGetProtocol(device);
- setSupported(version >= 2);
- }, []);
-
- const handleEnableClick = useCallback(async () => {
- const transport = GLOBAL_STATE.device as AdbDaemonWebUsbDevice;
- const device = transport.raw;
- const version = await aoaGetProtocol(device);
- if (version < 2) {
- return;
- }
- await aoaSetAudioMode(device, 1);
- await aoaStartAccessory(device);
- }, []);
- const handleDisableClick = useCallback(async () => {
- const transport = GLOBAL_STATE.device as AdbDaemonWebUsbDevice;
- const device = transport.raw;
- const version = await aoaGetProtocol(device);
- if (version < 2) {
- return;
- }
- await aoaSetAudioMode(device, 0);
- await aoaStartAccessory(device);
- }, []);
-
- if (
- !GLOBAL_STATE.device ||
- !(GLOBAL_STATE.device instanceof AdbDaemonWebUsbDevice)
- ) {
- return (
- Audio forward can only be used with WebUSB connection.
- );
- }
-
- return (
-
-
- Supported:{" "}
- {supported === undefined ? "Unknown" : supported ? "Yes" : "No"}
-
-
-
- Query Support
-
-
- Enable
-
-
- Disable
-
-
-
- );
-}
-
-export default observer(AudioPage);
diff --git a/apps/demo/src/pages/bug-report.tsx b/apps/demo/src/pages/bug-report.tsx
deleted file mode 100644
index 9ba94985..00000000
--- a/apps/demo/src/pages/bug-report.tsx
+++ /dev/null
@@ -1,165 +0,0 @@
-// cspell: ignore bugreport
-// cspell: ignore bugreportz
-
-import {
- MessageBar,
- MessageBarType,
- PrimaryButton,
- Stack,
- StackItem,
-} from "@fluentui/react";
-import { BugReport } from "@yume-chan/android-bin";
-import {
- action,
- autorun,
- makeAutoObservable,
- observable,
- runInAction,
-} from "mobx";
-import { observer } from "mobx-react-lite";
-import { NextPage } from "next";
-import Head from "next/head";
-import { GLOBAL_STATE } from "../state";
-import { RouteStackProps, saveFile } from "../utils";
-
-class BugReportState {
- bugReport: BugReport | undefined = undefined;
-
- bugReportZInProgress = false;
-
- bugReportZProgress: string | undefined = undefined;
-
- bugReportZTotalSize: string | undefined = undefined;
-
- constructor() {
- makeAutoObservable(this, {
- generateBugReport: action.bound,
- generateBugReportZStream: action.bound,
- generateBugReportZ: action.bound,
- });
-
- autorun(() => {
- if (GLOBAL_STATE.adb) {
- (async () => {
- const bugreport = await BugReport.queryCapabilities(
- GLOBAL_STATE.adb!,
- );
- runInAction(() => {
- this.bugReport = bugreport;
- });
- })();
- } else {
- runInAction(() => {
- this.bugReport = undefined;
- });
- }
- });
- }
-
- async generateBugReport() {
- await this.bugReport!.bugReport().pipeTo(saveFile("bugreport.txt"));
- }
-
- async generateBugReportZStream() {
- await this.bugReport!.bugReportZStream().pipeTo(
- saveFile("bugreport.zip"),
- );
- }
-
- async generateBugReportZ() {
- runInAction(() => {
- this.bugReportZInProgress = true;
- });
-
- const filename = await this.bugReport!.bugReportZ({
- onProgress: this.bugReport!.supportsBugReportZProgress
- ? action((progress, total) => {
- this.bugReportZProgress = progress;
- this.bugReportZTotalSize = total;
- })
- : undefined,
- });
-
- const sync = await GLOBAL_STATE.adb!.sync();
- await sync.read(filename).pipeTo(saveFile("bugreport.zip"));
-
- sync.dispose();
-
- runInAction(() => {
- this.bugReportZInProgress = false;
- this.bugReportZProgress = undefined;
- this.bugReportZTotalSize = undefined;
- });
- }
-}
-
-const state = new BugReportState();
-
-const BugReportPage: NextPage = () => {
- return (
-
-
- BugReport - Tango
-
-
-
- This is the `bugreport`/`bugreportz` tool in Android
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {state.bugReportZInProgress && (
-
- {state.bugReportZTotalSize ? (
-
- Progress: {state.bugReportZProgress} /{" "}
- {state.bugReportZTotalSize}
-
- ) : (
-
- Generating... Please wait
- {!state.bugReport!
- .supportsBugReportZProgress &&
- " (this device does not support progress)"}
-
- )}
-
- )}
-
-
-
- );
-};
-
-export default observer(BugReportPage);
diff --git a/apps/demo/src/pages/chrome-devtools-frame.tsx b/apps/demo/src/pages/chrome-devtools-frame.tsx
deleted file mode 100644
index ec99d06e..00000000
--- a/apps/demo/src/pages/chrome-devtools-frame.tsx
+++ /dev/null
@@ -1,124 +0,0 @@
-import { Stack } from "@fluentui/react";
-import { makeStyles } from "@griffel/react";
-import { useEffect } from "react";
-
-const useClasses = makeStyles({
- body: {
- "@media (prefers-color-scheme: dark)": {
- backgroundColor: "rgb(41, 42, 45)",
- color: "#ddd",
- },
- },
-});
-
-function ChromeDevToolsFrame() {
- const classes = useClasses();
-
- useEffect(() => {
- var WebSocketOriginal = globalThis.WebSocket;
- globalThis.WebSocket = class WebSocket extends EventTarget {
- public static readonly CONNECTING: 0 = 0;
- public static readonly OPEN: 1 = 1;
- public static readonly CLOSING: 2 = 2;
- public static readonly CLOSED: 3 = 3;
-
- public readonly CONNECTING: 0 = 0;
- public readonly OPEN: 1 = 1;
- public readonly CLOSING: 2 = 2;
- public readonly CLOSED: 3 = 3;
-
- public binaryType: BinaryType = "arraybuffer";
- public readonly bufferedAmount: number = 0;
- public readonly extensions: string = "";
-
- public readonly protocol: string = "";
- public readonly readyState: number = 1;
- public readonly url: string;
-
- private _port: MessagePort;
-
- public onclose: ((this: WebSocket, ev: CloseEvent) => any) | null =
- null;
- /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/error_event) */
- public onerror: ((this: WebSocket, ev: Event) => any) | null = null;
- /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/message_event) */
- public onmessage:
- | ((this: WebSocket, ev: MessageEvent) => any)
- | null = null;
- /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/open_event) */
- public onopen: ((this: WebSocket, ev: Event) => any) | null = null;
-
- constructor(url: string) {
- super();
-
- console.log("WebSocket constructor", url);
- this.url = url;
-
- var channel = new MessageChannel();
- this._port = channel.port1;
-
- if (url.includes("/_next/")) {
- this._port.close();
- // @ts-ignore
- return new WebSocketOriginal(url);
- }
-
- this._port.onmessage = (e) => {
- switch (e.data.type) {
- case "open":
- this.onopen?.(new Event("open"));
- break;
- case "message":
- this.onmessage?.(
- new MessageEvent("message", {
- data: e.data.message,
- })
- );
- break;
- case "close":
- this.onclose?.(new CloseEvent("close"));
- this._port.close();
- break;
- }
- };
- globalThis.postMessage({ type: "AdbWebSocket", url }, "*", [
- channel.port2,
- ]);
- }
-
- send(data: ArrayBuffer) {
- this._port.postMessage({ type: "message", message: data });
- }
-
- public close() {
- this._port.postMessage({ type: "close" });
- this._port.close();
- }
- } as typeof WebSocket;
- console.log("WebSocket hooked");
-
- const script = document.createElement("script");
- script.type = "module";
- script.src = new URLSearchParams(location.search).get(
- "script"
- ) as string;
- document.body.appendChild(script);
- }, []);
-
- // DevTools will set `document.title` to debugged page's title.
- return (
-
- Loading DevTools...
- (requires network connection)
-
- );
-}
-
-ChromeDevToolsFrame.noLayout = true;
-
-export default ChromeDevToolsFrame;
diff --git a/apps/demo/src/pages/chrome-devtools.tsx b/apps/demo/src/pages/chrome-devtools.tsx
deleted file mode 100644
index e5af1b85..00000000
--- a/apps/demo/src/pages/chrome-devtools.tsx
+++ /dev/null
@@ -1,458 +0,0 @@
-import { Link, Stack } from "@fluentui/react";
-import { makeStyles } from "@griffel/react";
-import { AdbSocket } from "@yume-chan/adb";
-import {
- Consumable,
- ReadableStreamDefaultReader,
- WritableStreamDefaultWriter,
-} from "@yume-chan/stream-extra";
-import {
- Agent,
- Client,
- Duplex,
- Pool,
- Symbols,
- WebSocket,
- request,
-} from "@yume-chan/undici-browser";
-import {
- action,
- makeAutoObservable,
- observable,
- reaction,
- runInAction,
-} from "mobx";
-import { observer } from "mobx-react-lite";
-import { NextPage } from "next";
-import getConfig from "next/config";
-import Head from "next/head";
-import type { Socket } from "node:net";
-import { useCallback, useEffect } from "react";
-import { GLOBAL_STATE } from "../state";
-import { RouteStackProps } from "../utils";
-
-class AdbUndiciSocket extends Duplex {
- private _socket: AdbSocket;
- private _reader: ReadableStreamDefaultReader;
- private _writer: WritableStreamDefaultWriter>;
-
- constructor(socket: AdbSocket) {
- super();
- this._socket = socket;
- this._reader = this._socket.readable.getReader();
- this._writer = this._socket.writable.getWriter();
- this._reader.closed.then(() => this.emit("end"));
- }
-
- async _read(size: number): Promise {
- try {
- const result = await this._reader.read();
- if (result.done) {
- this.emit("end");
- } else {
- this.push(result.value);
- }
- } catch {
- //ignore
- }
- }
-
- async _write(
- chunk: any,
- encoding: BufferEncoding,
- callback: (error?: Error | null | undefined) => void
- ): Promise {
- const consumable = new Consumable(chunk);
- try {
- await this._writer.write(consumable);
- callback();
- } catch (e) {
- callback(e as Error);
- }
- }
-
- async _destroy(
- error: Error | null,
- callback: (error: Error | null) => void
- ): Promise {
- await this._socket.close();
- callback(error);
- }
-}
-
-const agent = new Agent({
- factory(origin, opts) {
- const pool = new Pool(origin, {
- ...opts,
- factory(origin, opts) {
- const client = new Client(origin, opts);
- // Remote debugging validates `Host` header to defend against DNS rebinding attacks.
- // But we can only pass socket name using hostname, so we need to override it.
- (client as any)[Symbols.kHostHeader] = "Host: localhost\r\n";
- return client;
- },
- });
- return pool;
- },
- async connect(options, callback) {
- try {
- const socket = await GLOBAL_STATE.adb!.createSocket(
- "localabstract:" + options.hostname
- );
- callback(null, new AdbUndiciSocket(socket) as unknown as Socket);
- } catch (e) {
- callback(e as Error, null);
- }
- },
-});
-
-interface Page {
- description: string;
- devtoolsFrontendUrl: string;
- id: string;
- title: string;
- type: string;
- url: string;
- webSocketDebuggerUrl: string;
-}
-
-interface Version {
- "Android-Package": string;
- Browser: string;
- "Protocol-Version": string;
- "User-Agent": string;
- "V8-Version": string;
- "WebKit-Version": string;
- webSocketDebuggerUrl: string;
-}
-
-// https://source.chromium.org/chromium/chromium/src/+/refs/heads/main:chrome/browser/devtools/device/devtools_device_discovery.cc;l=36;drc=4651cec294d1542d6673a89190e192e20de03240
-
-async function getPages(socket: string) {
- const response = await request(`http://${socket}/json`, {
- dispatcher: agent,
- });
- const body = await response.body.json();
- return body as Page[];
-}
-
-async function getVersion(socket: string) {
- const response = await request(`http://${socket}/json/version`, {
- dispatcher: agent,
- });
- const body = await response.body.json();
- return body as Version;
-}
-
-async function focusPage(socket: string, page: Page) {
- await request(`http://${socket}/json/activate/${page.id}`, {
- dispatcher: agent,
- });
-}
-
-async function closePage(socket: string, page: Page) {
- await request(`http://${socket}/json/close/${page.id}`, {
- dispatcher: agent,
- });
-}
-
-const {
- publicRuntimeConfig: { basePath },
-} = getConfig();
-
-// Use a fixed version from Chrome's distribution, updated regularly.
-// Opera: doesn't host its own frontend
-// Edge: only have versions for Canary version, have license issues
-// Brave: `frontendUrl` points to Google's but version number is invalid
-const FRONTEND_SCRIPT =
- "https://chrome-devtools-frontend.appspot.com/serve_internal_file/@3c3641f7c28cf564edd441cc4ca2838b32c4e52a/front_end/entrypoints/inspector/inspector.js";
-
-function getPopupParams(page: Page) {
- const frontendUrl = page.devtoolsFrontendUrl;
- const [, params] = frontendUrl.split("?");
- return {
- script: FRONTEND_SCRIPT,
- params,
- };
-}
-
-interface Browser {
- socket: string;
- version: Version;
- pages: Page[];
-}
-
-const STATE = makeAutoObservable(
- {
- browsers: [] as Browser[],
- intervalId: null as NodeJS.Timeout | null,
- visible: false,
- },
- {
- browsers: observable.deep,
- }
-);
-
-const SOCKET_NAMES = [
- "@(.*)_devtools_remote(_\\d+)?",
- "@com\\.opera\\.browser(\\.beta)?\\.devtools",
-];
-
-const GET_SOCKET_COMMAND = [
- "cat /proc/net/unix",
- `grep -E "${SOCKET_NAMES.join("|")}"`,
- "awk '{print substr($8, 2)}'",
-];
-
-async function getBrowsers() {
- const device = GLOBAL_STATE.adb!;
- const sockets = await device.subprocess.spawnAndWaitLegacy(
- GET_SOCKET_COMMAND.join(" | ")
- );
- const browsers: Browser[] = [];
- for (const socket of sockets.split("\n").filter(Boolean)) {
- if (browsers.some((browser) => browser.socket == socket)) {
- continue;
- }
-
- try {
- const version = await getVersion(socket);
- const pages = await getPages(socket);
- console.log(socket, version, pages);
- browsers.push({ socket, version, pages });
- } catch (e) {
- console.error(socket, e);
- }
- }
- runInAction(() => {
- STATE.browsers = browsers;
- });
-}
-
-reaction(
- () => [GLOBAL_STATE.adb, STATE.visible] as const,
- ([device, visible]) => {
- if (!device || !visible) {
- STATE.browsers = [];
- if (STATE.intervalId) {
- clearInterval(STATE.intervalId);
- STATE.intervalId = null;
- }
- return;
- }
-
- STATE.intervalId = setInterval(() => {
- getBrowsers();
- }, 5000);
-
- getBrowsers();
- }
-);
-
-const PACKAGE_NAMES: Record = {
- "com.android.chrome": "Google Chrome",
- "com.chrome.beta": "Google Chrome Beta",
- "com.chrome.dev": "Google Chrome Dev",
- "com.chrome.canary": "Google Chrome Canary",
- "com.microsoft.emmx": "Microsoft Edge",
- "com.microsoft.emmx.beta": "Microsoft Edge Beta",
- "com.microsoft.emmx.dev": "Microsoft Edge Dev",
- "com.microsoft.emmx.canary": "Microsoft Edge Canary",
- "com.opera.browser": "Opera",
- "com.opera.browser.beta": "Opera Beta",
- "com.vivaldi.browser": "Vivaldi",
-};
-
-function getBrowserName(version: Version) {
- const [, versionNumber] = version.Browser.split("/");
- const name =
- PACKAGE_NAMES[version["Android-Package"]] || version["Android-Package"];
- return `${name} (${versionNumber})`;
-}
-
-const useClasses = makeStyles({
- header: {
- marginTop: "4px",
- marginBottom: "4px",
- },
- url: {
- marginLeft: "8px",
- color: "#999",
- },
- link: {
- marginRight: "12px",
- },
-});
-
-const ChromeDevToolsPage: NextPage = observer(function ChromeDevTools() {
- const classes = useClasses();
-
- useEffect(() => {
- runInAction(() => {
- STATE.visible = true;
- });
-
- return action(() => {
- STATE.visible = false;
- });
- }, []);
-
- const handleInspectClick = useCallback((socket: string, page: Page) => {
- const { script, params } = getPopupParams(page);
- const childWindow = window.open(
- `${basePath}/chrome-devtools-frame?script=${script}&${params}`,
- "_blank",
- "popup"
- )!;
- childWindow.addEventListener("message", (e) => {
- if (
- typeof e.data !== "object" ||
- !"type in e.data" ||
- e.data.type !== "AdbWebSocket"
- ) {
- return;
- }
-
- const url = new URL(e.data.url as string);
- url.host = socket;
-
- const port = e.ports[0];
-
- const ws = new WebSocket(url, {
- dispatcher: agent,
- });
- ws.binaryType = "arraybuffer";
- ws.onopen = () => {
- port.postMessage({ type: "open" });
- };
- ws.onclose = () => {
- port.postMessage({ type: "close" });
- port.close();
- };
- ws.onmessage = (e) => {
- const { data } = e;
- port.postMessage({
- type: "message",
- message: data,
- });
- };
-
- port.onmessage = (e) => {
- switch (e.data.type) {
- case "message":
- ws.send(e.data.message);
- break;
- case "close":
- ws.close();
- break;
- }
- };
-
- childWindow.addEventListener("close", () => {
- ws.close();
- });
-
- globalThis.addEventListener("beforeunload", () => {
- port.postMessage({ type: "close" });
- port.close();
- });
- });
- }, []);
-
- const handleFocusClick = useCallback((socket: string, page: Page) => {
- focusPage(socket, page);
- }, []);
-
- const handleCloseClick = useCallback((socket: string, page: Page) => {
- closePage(socket, page);
- getBrowsers();
- }, []);
-
- return (
-
-
- Chrome Remote Debugging - Tango
-
-
- {STATE.browsers.length === 0 ? (
- <>
- Supported browsers:
-
- - Google Chrome (stable/beta/dev/canary)
- - Microsoft Edge (stable/beta/dev/canary)
- - Opera (stable/beta)
- - Vivaldi
- - Any WebView with remote debugging on
-
- >
- ) : (
- STATE.browsers.map((browser) => (
- <>
- {browser.version && (
-
- {getBrowserName(browser.version)}
-
- )}
-
- {browser.pages.map((page) => (
-
-
- {page.title ? (
-
- ) : (
- No Title
- )}
-
-
- {page.url || No URL}
-
-
-
-
- handleInspectClick(
- browser.socket,
- page
- )
- }
- >
- Inspect
-
-
- handleFocusClick(
- browser.socket,
- page
- )
- }
- >
- Focus
-
-
- handleCloseClick(
- browser.socket,
- page
- )
- }
- >
- Close
-
-
-
- ))}
- >
- ))
- )}
-
- );
-});
-
-export default ChromeDevToolsPage;
diff --git a/apps/demo/src/pages/device-info.tsx b/apps/demo/src/pages/device-info.tsx
deleted file mode 100644
index 9de9e65e..00000000
--- a/apps/demo/src/pages/device-info.tsx
+++ /dev/null
@@ -1,106 +0,0 @@
-import {
- Icon,
- MessageBar,
- Separator,
- Stack,
- TooltipHost,
-} from "@fluentui/react";
-import { AdbFeature } from "@yume-chan/adb";
-import { observer } from "mobx-react-lite";
-import type { NextPage } from "next";
-import Head from "next/head";
-import { GLOBAL_STATE } from "../state";
-import { Icons, RouteStackProps } from "../utils";
-
-const KNOWN_FEATURES: Record = {
- [AdbFeature.ShellV2]: `"shell" command now supports separating child process's stdout and stderr, and returning exit code`,
- // 'cmd': '',
- [AdbFeature.StatV2]:
- '"sync" command now supports "STA2" (returns more information of a file than old "STAT") and "LST2" (returns information of a directory) sub command',
- [AdbFeature.ListV2]:
- '"sync" command now supports "LST2" sub command which returns more information when listing a directory than old "LIST"',
- [AdbFeature.FixedPushMkdir]:
- "Android 9 (P) introduced a bug that pushing files to a non-existing directory would fail. This feature indicates it's fixed (Android 10)",
- // 'apex': '',
- // 'abb': '',
- // 'fixed_push_symlink_timestamp': '',
- [AdbFeature.AbbExec]:
- 'Supports "abb_exec" variant that can be used to install App faster',
- // 'remount_shell': '',
- // 'track_app': '',
- // 'sendrecv_v2': '',
- sendrecv_v2_brotli:
- 'Supports "brotli" compression algorithm when pushing/pulling files',
- sendrecv_v2_lz4:
- 'Supports "lz4" compression algorithm when pushing/pulling files',
- sendrecv_v2_zstd:
- 'Supports "zstd" compression algorithm when pushing/pulling files',
- // 'sendrecv_v2_dry_run_send': '',
-};
-
-const DeviceInfo: NextPage = () => {
- return (
-
-
- Device Info - Tango
-
-
-
- ro.product.name
- field in Android Build Props
-
- Product Name: {GLOBAL_STATE.adb?.banner.product}
-
-
-
- ro.product.model
- field in Android Build Props
-
- Model Name: {GLOBAL_STATE.adb?.banner.model}
-
-
-
- ro.product.device
- field in Android Build Props
-
- Device Name: {GLOBAL_STATE.adb?.banner.device}
-
-
-
-
- Feature list decides how each individual commands should
- behavior.
-
-
-
-
- For example, it may indicate the availability of a new
- command,{" "}
-
- {`or a workaround for an old bug is not required because it's already been fixed.`}
-
-
-
- Features:
- {GLOBAL_STATE.adb?.banner.features.map((feature, index) => (
-
- {index !== 0 && , }
- {feature}
- {KNOWN_FEATURES[feature] && (
- {KNOWN_FEATURES[feature]}}
- >
-
-
- )}
-
- ))}
-
-
- );
-};
-
-export default observer(DeviceInfo);
diff --git a/apps/demo/src/pages/file-manager.tsx b/apps/demo/src/pages/file-manager.tsx
deleted file mode 100644
index 47676cf0..00000000
--- a/apps/demo/src/pages/file-manager.tsx
+++ /dev/null
@@ -1,954 +0,0 @@
-import {
- Breadcrumb,
- ContextualMenu,
- ContextualMenuItem,
- DetailsListLayoutMode,
- Dialog,
- DirectionalHint,
- IBreadcrumbItem,
- IColumn,
- IContextualMenuItem,
- IDetailsHeaderProps,
- IRenderFunction,
- Icon,
- Layer,
- MarqueeSelection,
- Overlay,
- ProgressIndicator,
- Selection,
- ShimmeredDetailsList,
- Stack,
- StackItem,
- concatStyleSets,
- mergeStyleSets,
-} from "@fluentui/react";
-import {
- FileIconType,
- getFileTypeIconProps,
- initializeFileTypeIcons,
-} from "@fluentui/react-file-type-icons";
-import { useConst } from "@fluentui/react-hooks";
-import { getIcon } from "@fluentui/style-utilities";
-import {
- AdbFeature,
- AdbSync,
- LinuxFileType,
- type AdbSyncEntry,
-} from "@yume-chan/adb";
-import { WrapConsumableStream, WritableStream } from "@yume-chan/stream-extra";
-import { EMPTY_UINT8_ARRAY } from "@yume-chan/struct";
-import { Zip, ZipPassThrough } from "fflate";
-import {
- action,
- autorun,
- makeAutoObservable,
- observable,
- runInAction,
-} from "mobx";
-import { observer } from "mobx-react-lite";
-import { NextPage } from "next";
-import Head from "next/head";
-import Router, { useRouter } from "next/router";
-import path from "path";
-import { useCallback, useEffect, useState } from "react";
-import { CommandBar, NoSsr } from "../components";
-import { GLOBAL_STATE } from "../state";
-import {
- Icons,
- ProgressStream,
- RouteStackProps,
- asyncEffect,
- createFileStream,
- formatSize,
- formatSpeed,
- pickFile,
- saveFile,
-} from "../utils";
-
-initializeFileTypeIcons();
-
-interface ListItem extends AdbSyncEntry {
- key: string;
-}
-
-function toListItem(item: AdbSyncEntry): ListItem {
- (item as ListItem).key = item.name;
- return item as ListItem;
-}
-
-const classNames = mergeStyleSets({
- name: {
- cursor: "pointer",
- "&:hover": {
- textDecoration: "underline",
- },
- },
-});
-
-const renderDetailsHeader: IRenderFunction = (
- props?,
- defaultRender?
-) => {
- if (!props || !defaultRender) {
- return null;
- }
-
- return defaultRender({
- ...props,
- styles: concatStyleSets(props.styles, { root: { paddingTop: 0 } }),
- });
-};
-
-function compareCaseInsensitively(a: string, b: string) {
- let result = a.toLocaleLowerCase().localeCompare(b.toLocaleLowerCase());
- if (result !== 0) {
- return result;
- } else {
- return a.localeCompare(b);
- }
-}
-
-class FileManagerState {
- initial = true;
- visible = false;
- path = "/";
- loading = false;
- items: ListItem[] = [];
- sortKey: keyof ListItem = "name";
- sortDescending = false;
-
- uploading = false;
- uploadPath: string | undefined = undefined;
- uploadedSize = 0;
- uploadTotalSize = 0;
- debouncedUploadedSize = 0;
- uploadSpeed = 0;
-
- selectedItems: ListItem[] = [];
- contextMenuTarget: MouseEvent | undefined = undefined;
-
- get breadcrumbItems(): IBreadcrumbItem[] {
- let part = "";
- const list: IBreadcrumbItem[] = this.path
- .split("/")
- .filter(Boolean)
- .map((segment) => {
- part += "/" + segment;
- return {
- key: part,
- text: segment,
- onClick: (e, item) => {
- if (!item) {
- return;
- }
- this.pushPathQuery(item.key);
- },
- };
- });
- list.unshift({
- key: "/",
- text: "Device",
- onClick: () => this.pushPathQuery("/"),
- });
- list[list.length - 1].isCurrentItem = true;
- delete list[list.length - 1].onClick;
- return list;
- }
-
- get menuItems() {
- let result: IContextualMenuItem[] = [];
-
- switch (this.selectedItems.length) {
- case 0:
- result.push({
- key: "upload",
- text: "Upload",
- iconProps: {
- iconName: Icons.CloudArrowUp,
- style: { height: 20, fontSize: 20, lineHeight: 1.5 },
- },
- disabled: !GLOBAL_STATE.adb,
- onClick: () => {
- (async () => {
- const files = await pickFile({ multiple: true });
- for (let i = 0; i < files.length; i++) {
- const file = files.item(i)!;
- await this.upload(file);
- }
- })();
-
- return false;
- },
- });
- break;
- default:
- result.push(
- {
- key: "download",
- text: "Download",
- iconProps: {
- iconName: Icons.CloudArrowDown,
- style: {
- height: 20,
- fontSize: 20,
- lineHeight: 1.5,
- },
- },
- onClick: () => {
- void this.download();
- return false;
- },
- },
- {
- key: "delete",
- text: "Delete",
- iconProps: {
- iconName: Icons.Delete,
- style: {
- height: 20,
- fontSize: 20,
- lineHeight: 1.5,
- },
- },
- onClick: () => {
- (async () => {
- try {
- for (const item of this.selectedItems) {
- const output =
- await GLOBAL_STATE.adb!.rm(
- path.resolve(
- this.path,
- item.name!
- )
- );
- if (output) {
- GLOBAL_STATE.showErrorDialog(
- output
- );
- return;
- }
- }
- } catch (e: any) {
- GLOBAL_STATE.showErrorDialog(e);
- } finally {
- this.loadFiles();
- }
- })();
- return false;
- },
- }
- );
- break;
- }
-
- return result;
- }
-
- get sortedList() {
- const list = this.items.slice();
- list.sort((a, b) => {
- const aIsFile = a.type === LinuxFileType.File ? 1 : 0;
- const bIsFile = b.type === LinuxFileType.File ? 1 : 0;
-
- let result: number;
- if (aIsFile !== bIsFile) {
- result = aIsFile - bIsFile;
- } else {
- const aSortKey = a[this.sortKey]!;
- const bSortKey = b[this.sortKey]!;
-
- if (aSortKey === bSortKey) {
- // use name as tie breaker
- result = compareCaseInsensitively(a.name!, b.name!);
- } else if (typeof aSortKey === "string") {
- result = compareCaseInsensitively(
- aSortKey,
- bSortKey as string
- );
- } else {
- result =
- (aSortKey as number) < (bSortKey as number) ? -1 : 1;
- }
- }
-
- if (this.sortDescending) {
- result *= -1;
- }
- return result;
- });
- return list;
- }
-
- get columns(): IColumn[] {
- const ICON_SIZE = 20;
-
- const list: IColumn[] = [
- {
- key: "type",
- name: "File Type",
- iconName: Icons.Document20,
- isIconOnly: true,
- minWidth: ICON_SIZE,
- maxWidth: ICON_SIZE,
- isCollapsible: true,
- onRender(item: AdbSyncEntry) {
- let iconName: string;
-
- switch (item.type) {
- case LinuxFileType.Link:
- // larger sizes of `linkedFolder` icon now have a person symbol on it,
- // We want to use it for symbolic links, so use the 16px version
- // cspell:disable-next-line
- iconName = "linkedfolder16_svg";
- break;
- case LinuxFileType.Directory:
- ({ iconName } = getFileTypeIconProps({
- type: FileIconType.folder,
- }));
- break;
- case LinuxFileType.File:
- ({ iconName } = getFileTypeIconProps({
- extension: path.extname(item.name!),
- }));
- break;
- default:
- ({ iconName } = getFileTypeIconProps({
- type: FileIconType.genericFile,
- }));
- break;
- }
-
- // `@fluentui/react-file-type-icons` doesn't export icon src.
- const iconSrc = (
- getIcon(iconName)!.code as unknown as JSX.Element
- ).props.src;
- return (
-
- );
- },
- },
- {
- key: "name",
- name: "Name",
- minWidth: 0,
- isRowHeader: true,
- onRender(item: AdbSyncEntry) {
- return (
-
- {item.name}
-
- );
- },
- },
- {
- key: "permission",
- name: "Permission",
- minWidth: 0,
- isCollapsible: true,
- onRender(item: AdbSyncEntry) {
- return `${((item.mode >> 6) & 0b100).toString(8)}${(
- (item.mode >> 3) &
- 0b100
- ).toString(8)}${(item.mode & 0b100).toString(8)}`;
- },
- },
- {
- key: "size",
- name: "Size",
- minWidth: 0,
- isCollapsible: true,
- onRender(item: AdbSyncEntry) {
- if (item.type === LinuxFileType.File) {
- return formatSize(Number(item.size));
- }
- return "";
- },
- },
- {
- key: "mtime",
- name: "Last Modified Time",
- minWidth: 150,
- isCollapsible: true,
- onRender(item: AdbSyncEntry) {
- return new Date(Number(item.mtime) * 1000).toLocaleString();
- },
- },
- ];
-
- if (GLOBAL_STATE.adb?.supportsFeature(AdbFeature.ListV2)) {
- list.push(
- {
- key: "ctime",
- name: "Creation Time",
- minWidth: 150,
- isCollapsible: true,
- onRender(item: AdbSyncEntry) {
- return new Date(
- Number(item.ctime!) * 1000
- ).toLocaleString();
- },
- },
- {
- key: "atime",
- name: "Last Access Time",
- minWidth: 150,
- isCollapsible: true,
- onRender(item: AdbSyncEntry) {
- return new Date(
- Number(item.atime!) * 1000
- ).toLocaleString();
- },
- }
- );
- }
-
- for (const item of list) {
- item.onColumnClick = (e, column) => {
- if (this.sortKey === column.key) {
- runInAction(
- () => (this.sortDescending = !this.sortDescending)
- );
- } else {
- runInAction(() => {
- this.sortKey = column.key as keyof ListItem;
- this.sortDescending = false;
- });
- }
- };
-
- if (item.key === this.sortKey) {
- item.isSorted = true;
- item.isSortedDescending = this.sortDescending;
- }
- }
-
- return list;
- }
-
- constructor() {
- makeAutoObservable(this, {
- initial: false,
- items: observable.shallow,
- pushPathQuery: false,
- changeDirectory: action.bound,
- loadFiles: false,
- });
-
- autorun(() => {
- if (GLOBAL_STATE.adb) {
- if (this.initial && this.visible) {
- this.initial = false;
- this.loadFiles();
- }
- } else {
- this.initial = true;
- }
- });
- }
-
- private getFileStream(sync: AdbSync, basePath: string, name: string) {
- return sync.read(path.resolve(basePath, name));
- }
-
- private async addDirectory(
- sync: AdbSync,
- zip: Zip,
- basePath: string,
- relativePath: string
- ) {
- if (relativePath !== ".") {
- // Add empty directory
- const file = new ZipPassThrough(relativePath + "/");
- zip.add(file);
- file.push(EMPTY_UINT8_ARRAY, true);
- }
-
- for (const entry of await sync.readdir(
- path.resolve(basePath, relativePath)
- )) {
- if (entry.name === "." || entry.name === "..") {
- continue;
- }
-
- switch (entry.type) {
- case LinuxFileType.Directory:
- await this.addDirectory(
- sync,
- zip,
- basePath,
- path.resolve(relativePath, entry.name)
- );
- break;
- case LinuxFileType.File:
- await this.addFile(
- sync,
- zip,
- basePath,
- path.resolve(relativePath, entry.name)
- );
- break;
- }
- }
- }
-
- private async addFile(
- sync: AdbSync,
- zip: Zip,
- basePath: string,
- name: string
- ) {
- const file = new ZipPassThrough(name);
- zip.add(file);
- await this.getFileStream(sync, basePath, name).pipeTo(
- new WritableStream({
- write(chunk) {
- file.push(chunk);
- },
- close() {
- file.push(EMPTY_UINT8_ARRAY, true);
- },
- })
- );
- }
-
- private async download() {
- const sync = await GLOBAL_STATE.adb!.sync();
- try {
- if (this.selectedItems.length === 1) {
- const item = this.selectedItems[0];
- switch (item.type) {
- case LinuxFileType.Directory: {
- const stream = saveFile(
- `${this.selectedItems[0].name}.zip`
- );
- const writer = stream.getWriter();
- const zip = new Zip((err, data, final) => {
- writer.write(data);
- if (final) {
- writer.close();
- }
- });
- await this.addDirectory(
- sync,
- zip,
- path.resolve(this.path, item.name),
- "."
- );
- zip.end();
- break;
- }
- case LinuxFileType.File:
- await this.getFileStream(
- sync,
- this.path,
- item.name
- ).pipeTo(saveFile(item.name, Number(item.size)));
- break;
- }
- return;
- }
-
- const stream = saveFile(`${path.basename(this.path)}.zip`);
- const writer = stream.getWriter();
- const zip = new Zip((err, data, final) => {
- writer.write(data);
- if (final) {
- writer.close();
- }
- });
- for (const item of this.selectedItems) {
- switch (item.type) {
- case LinuxFileType.Directory:
- await this.addDirectory(
- sync,
- zip,
- this.path,
- item.name
- );
- break;
- case LinuxFileType.File:
- await this.addFile(sync, zip, this.path, item.name);
- break;
- }
- }
- zip.end();
- } catch (e: any) {
- GLOBAL_STATE.showErrorDialog(e);
- } finally {
- sync.dispose();
- }
- }
-
- pushPathQuery = (path: string) => {
- Router.push({ query: { ...Router.query, path } });
- };
-
- changeDirectory(path: string) {
- if (this.path === path) {
- return;
- }
-
- this.path = path;
-
- if (!GLOBAL_STATE.adb) {
- return;
- }
-
- this.loadFiles();
- }
-
- loadFiles = asyncEffect(async (signal) => {
- const currentPath = this.path;
-
- runInAction(() => (this.items = []));
-
- if (!GLOBAL_STATE.adb) {
- return;
- }
-
- runInAction(() => (this.loading = true));
-
- const sync = await GLOBAL_STATE.adb.sync();
-
- const items: ListItem[] = [];
- const linkItems: AdbSyncEntry[] = [];
- const intervalId = setInterval(() => {
- if (signal.aborted) {
- return;
- }
-
- runInAction(() => (this.items = items.slice()));
- }, 1000);
-
- try {
- for await (const entry of sync.opendir(currentPath)) {
- if (signal.aborted) {
- return;
- }
-
- if (entry.name === "." || entry.name === "..") {
- continue;
- }
-
- if (entry.type === LinuxFileType.Link) {
- linkItems.push(entry);
- } else {
- items.push(toListItem(entry));
- }
- }
-
- for (const entry of linkItems) {
- if (signal.aborted) {
- return;
- }
-
- if (
- !(await sync.isDirectory(
- path.resolve(currentPath, entry.name!)
- ))
- ) {
- entry.mode = (LinuxFileType.File << 12) | entry.permission;
- entry.size = 0n;
- }
-
- items.push(toListItem(entry));
- }
-
- if (signal.aborted) {
- return;
- }
-
- runInAction(() => (this.items = items));
- } finally {
- if (!signal.aborted) {
- runInAction(() => (this.loading = false));
- }
- clearInterval(intervalId);
- sync.dispose();
- }
- });
-
- upload = async (file: File) => {
- const sync = await GLOBAL_STATE.adb!.sync();
- try {
- const itemPath = path.resolve(this.path!, file.name);
- runInAction(() => {
- this.uploading = true;
- this.uploadPath = file.name;
- this.uploadedSize = 0;
- this.uploadTotalSize = file.size;
- this.debouncedUploadedSize = 0;
- this.uploadSpeed = 0;
- });
-
- const intervalId = setInterval(
- action(() => {
- this.uploadSpeed =
- this.uploadedSize - this.debouncedUploadedSize;
- this.debouncedUploadedSize = this.uploadedSize;
- }),
- 1000
- );
-
- try {
- const start = Date.now();
-
- await sync.write({
- filename: itemPath,
- file: createFileStream(file)
- .pipeThrough(new WrapConsumableStream())
- .pipeThrough(
- new ProgressStream(
- action((uploaded) => {
- this.uploadedSize = uploaded;
- })
- )
- ),
- type: LinuxFileType.File,
- permission: 0o666,
- mtime: file.lastModified / 1000,
- });
-
- console.log(
- "Upload speed:",
- (
- ((file.size / (Date.now() - start)) * 1000) /
- 1024 /
- 1024
- ).toFixed(2),
- "MB/s"
- );
-
- runInAction(() => {
- this.uploadSpeed =
- this.uploadedSize - this.debouncedUploadedSize;
- this.debouncedUploadedSize = this.uploadedSize;
- });
- } finally {
- clearInterval(intervalId);
- }
- } catch (e: any) {
- GLOBAL_STATE.showErrorDialog(e);
- } finally {
- sync.dispose();
- this.loadFiles();
- runInAction(() => {
- this.uploading = false;
- });
- }
- };
-}
-
-const state = new FileManagerState();
-
-const UploadDialog = observer(() => {
- return (
-
- );
-});
-
-const FileManager: NextPage = (): JSX.Element | null => {
- useEffect(() => {
- runInAction(() => {
- state.visible = true;
- });
-
- return () => {
- runInAction(() => {
- state.visible = false;
- });
- };
- });
-
- const router = useRouter();
- useEffect(() => {
- let pathQuery = router.query.path;
- if (!pathQuery) {
- router.replace({ query: { ...router.query, path: state.path } });
- return;
- }
-
- if (Array.isArray(pathQuery)) {
- pathQuery = pathQuery[0];
- }
-
- state.changeDirectory(pathQuery);
- }, [router]);
-
- const [previewUrl, setPreviewUrl] = useState();
- const previewImage = useCallback(async (path: string) => {
- const sync = await GLOBAL_STATE.adb!.sync();
- try {
- const readable = sync.read(path);
- // @ts-ignore ReadableStream definitions are slightly incompatible
- const response = new Response(readable);
- const blob = await response.blob();
- const url = globalThis.URL.createObjectURL(blob);
- setPreviewUrl(url);
- } finally {
- sync.dispose();
- }
- }, []);
- const hidePreview = useCallback(() => {
- setPreviewUrl(undefined);
- }, []);
-
- const handleItemInvoked = useCallback(
- (item: AdbSyncEntry) => {
- switch (item.type) {
- case LinuxFileType.Link:
- case LinuxFileType.Directory:
- state.pushPathQuery(path.resolve(state.path!, item.name!));
- break;
- case LinuxFileType.File:
- switch (path.extname(item.name!)) {
- case ".jpg":
- case ".png":
- case ".svg":
- case ".gif":
- previewImage(path.resolve(state.path!, item.name!));
- break;
- }
- break;
- }
- },
- [previewImage]
- );
-
- const selection = useConst(
- () =>
- new Selection({
- onSelectionChanged() {
- runInAction(() => {
- state.selectedItems =
- selection.getSelection() as ListItem[];
- });
- },
- })
- );
-
- const showContextMenu = useCallback(
- (item?: AdbSyncEntry, index?: number, e?: Event) => {
- if (!e) {
- return false;
- }
-
- if (state.menuItems.length) {
- runInAction(() => {
- state.contextMenuTarget = e as MouseEvent;
- });
- }
-
- return false;
- },
- []
- );
- const hideContextMenu = useCallback(() => {
- runInAction(() => (state.contextMenuTarget = undefined));
- }, []);
-
- return (
-
-
- File Manager - Tango
-
-
-
-
-
-
-
-
-
-
-
- {previewUrl && (
-
-
-
- {/* eslint-disable-next-line @next/next/no-img-element */}
- 
-
-
-
- )}
-
-
-
- (
-
- )}
- />
-
-
-
-
- );
-};
-
-export default observer(FileManager);
diff --git a/apps/demo/src/pages/framebuffer.tsx b/apps/demo/src/pages/framebuffer.tsx
deleted file mode 100644
index 5bc1aa20..00000000
--- a/apps/demo/src/pages/framebuffer.tsx
+++ /dev/null
@@ -1,168 +0,0 @@
-import { ICommandBarItemProps, Stack } from "@fluentui/react";
-import { AdbFrameBuffer, AdbFrameBufferV2 } from "@yume-chan/adb";
-import { action, autorun, computed, makeAutoObservable } from "mobx";
-import { observer } from "mobx-react-lite";
-import { NextPage } from "next";
-import Head from "next/head";
-import { useCallback, useEffect, useRef } from "react";
-import { CommandBar, DemoModePanel, DeviceView } from "../components";
-import { GLOBAL_STATE } from "../state";
-import { Icons, RouteStackProps } from "../utils";
-
-class FrameBufferState {
- width = 0;
- height = 0;
- imageData: ImageData | undefined = undefined;
- demoModeVisible = false;
-
- constructor() {
- makeAutoObservable(this, {
- toggleDemoModeVisible: action.bound,
- });
- }
-
- setImage(image: AdbFrameBuffer) {
- this.width = image.width;
- this.height = image.height;
- this.imageData = new ImageData(
- new Uint8ClampedArray(image.data),
- image.width,
- image.height
- );
- }
-
- toggleDemoModeVisible() {
- this.demoModeVisible = !this.demoModeVisible;
- }
-}
-
-const state = new FrameBufferState();
-
-const FrameBuffer: NextPage = (): JSX.Element | null => {
- const canvasRef = useRef(null);
-
- const capture = useCallback(async () => {
- if (!GLOBAL_STATE.adb) {
- return;
- }
-
- try {
- const start = Date.now();
- const framebuffer = await GLOBAL_STATE.adb.framebuffer();
- console.log(
- "Framebuffer speed",
- (
- (((AdbFrameBufferV2.size + framebuffer.size) /
- (Date.now() - start)) *
- 1000) /
- 1024 /
- 1024
- ).toFixed(2),
- "MB/s"
- );
- state.setImage(framebuffer);
- } catch (e: any) {
- GLOBAL_STATE.showErrorDialog(e);
- }
- }, []);
-
- useEffect(() => {
- return autorun(() => {
- const canvas = canvasRef.current;
- if (canvas && state.imageData) {
- canvas.width = state.width;
- canvas.height = state.height;
- const context = canvas.getContext("2d")!;
- context.putImageData(state.imageData, 0, 0);
- }
- });
- }, []);
-
- const commandBarItems = computed(() => [
- {
- key: "start",
- disabled: !GLOBAL_STATE.adb,
- iconProps: {
- iconName: Icons.Camera,
- style: { height: 20, fontSize: 20, lineHeight: 1.5 },
- },
- text: "Capture",
- onClick: capture,
- },
- {
- key: "Save",
- disabled: !state.imageData,
- iconProps: {
- iconName: Icons.Save,
- style: { height: 20, fontSize: 20, lineHeight: 1.5 },
- },
- text: "Save",
- onClick: () => {
- const canvas = canvasRef.current;
- if (!canvas) {
- return;
- }
-
- const url = canvas.toDataURL();
- const a = document.createElement("a");
- a.href = url;
- a.download = `Screenshot of ${GLOBAL_STATE.device!.name}.png`;
- a.click();
- },
- },
- ]);
-
- const commandBarFarItems = computed((): ICommandBarItemProps[] => [
- {
- key: "DemoMode",
- iconProps: {
- iconName: Icons.Wand,
- style: { height: 20, fontSize: 20, lineHeight: 1.5 },
- },
- checked: state.demoModeVisible,
- text: "Demo Mode",
- onClick: state.toggleDemoModeVisible,
- },
- {
- key: "info",
- iconProps: {
- iconName: Icons.Info,
- style: { height: 20, fontSize: 20, lineHeight: 1.5 },
- },
- iconOnly: true,
- tooltipHostProps: {
- content:
- "Use ADB FrameBuffer command to capture a full-size, high-resolution screenshot.",
- calloutProps: {
- calloutMaxWidth: 250,
- },
- },
- },
- ]);
-
- return (
-
-
- Screen Capture - Tango
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-export default observer(FrameBuffer);
diff --git a/apps/demo/src/pages/index.mdx b/apps/demo/src/pages/index.mdx
deleted file mode 100644
index 37ad7cff..00000000
--- a/apps/demo/src/pages/index.mdx
+++ /dev/null
@@ -1,58 +0,0 @@
-import { Stack } from "@fluentui/react";
-import Head from "next/head";
-import { ExternalLink } from "../components";
-import { RouteStackProps } from "../utils";
-
-{/* cspell: ignore cybojenix */}
-
-This is a demo for my ya-webadb project, which can use ADB protocol to control Android phones, directly from Web browsers (or Node.js).
-
-It started because I want to try the WebUSB API, and because I have an Android phone. It's not production-ready, and I don't recommend normal users to try it. If you have any questions or suggestions, please file an issue at here.
-
-It was called "ya-webadb" (Yet Another WebADB), because there have already been several similar projects, for example:
-
--
- webadb/webadb.js
-
--
- cybojenix/WebADB
-
-
-However, they are all pretty simple and not maintained, so I decided to make my own.
-
-## Security concerns
-
-Accessing USB devices (especially your phone) directly from a web page can be **very dangerous**. Firefox developers even refused to implement the WebUSB standard because they considered it to be **harmful**.
-
-However, I'm pretty confident about this demo, and here is a few reasons:
-
-1. Unlike native apps, web apps can't access your devices silently. In addition to the connection verification popup that comes with ADB, browsers ask users for permission and web apps can only access the device you choose.
-2. All source code of this project is open sourced on GitHub. You can review it yourself (or find someone you trust and knows coding to review it).
-3. This site is built and deployed by GitHub Actions to ensure that what you see is exactly the same as the source code.
-
-## Compatibility
-
-Currently, only Chromium-based browsers (Chrome, Microsoft Edge, Opera) support the WebUSB API. As mentioned before, it's unlikely for Firefox to implement it.
-
-## FAQ
-
-### Got "Unable to claim interface" error
-
-One USB device can only be accessed by one application at a time. Please make sure:
-
-1. Official ADB server is not running (stop it by `adb kill-server`).
-2. No other Android management tools are running.
-3. No other WebADB tabs have already connected to your device.
-
-### Can I connect my device wirelessly (ADB over WiFi)?
-
-Extra software is required to bridge the connection. See this discussion.
-
-export default ({ children }) => (
-
-
- Tango
-
- {children}
-
-);
diff --git a/apps/demo/src/pages/install.tsx b/apps/demo/src/pages/install.tsx
deleted file mode 100644
index 8a67ec4c..00000000
--- a/apps/demo/src/pages/install.tsx
+++ /dev/null
@@ -1,188 +0,0 @@
-import {
- Checkbox,
- PrimaryButton,
- ProgressIndicator,
- Stack,
-} from "@fluentui/react";
-import {
- PackageManager,
- PackageManagerInstallOptions,
-} from "@yume-chan/android-bin";
-import { WrapConsumableStream, WritableStream } from "@yume-chan/stream-extra";
-import { action, makeAutoObservable, observable, runInAction } from "mobx";
-import { observer } from "mobx-react-lite";
-import { NextPage } from "next";
-import Head from "next/head";
-import { GLOBAL_STATE } from "../state";
-import {
- ProgressStream,
- RouteStackProps,
- createFileStream,
- pickFile,
-} from "../utils";
-
-enum Stage {
- Uploading,
-
- Installing,
-
- Completed,
-}
-
-interface Progress {
- filename: string;
-
- stage: Stage;
-
- uploadedSize: number;
-
- totalSize: number;
-
- value: number | undefined;
-}
-
-class InstallPageState {
- installing = false;
-
- progress: Progress | undefined = undefined;
-
- log: string = "";
-
- options: Partial = {
- bypassLowTargetSdkBlock: false,
- };
-
- constructor() {
- makeAutoObservable(this, {
- progress: observable.ref,
- install: false,
- options: observable.deep,
- });
- }
-
- install = async () => {
- const file = await pickFile({ accept: ".apk" });
- if (!file) {
- return;
- }
-
- runInAction(() => {
- this.installing = true;
- this.progress = {
- filename: file.name,
- stage: Stage.Uploading,
- uploadedSize: 0,
- totalSize: file.size,
- value: 0,
- };
- this.log = "";
- });
-
- const pm = new PackageManager(GLOBAL_STATE.adb!);
- const start = Date.now();
- const log = await pm.installStream(
- file.size,
- createFileStream(file)
- .pipeThrough(new WrapConsumableStream())
- .pipeThrough(
- new ProgressStream(
- action((uploaded) => {
- if (uploaded !== file.size) {
- this.progress = {
- filename: file.name,
- stage: Stage.Uploading,
- uploadedSize: uploaded,
- totalSize: file.size,
- value: (uploaded / file.size) * 0.8,
- };
- } else {
- this.progress = {
- filename: file.name,
- stage: Stage.Installing,
- uploadedSize: uploaded,
- totalSize: file.size,
- value: 0.8,
- };
- }
- })
- )
- )
- );
-
- const elapsed = Date.now() - start;
- await log.pipeTo(
- new WritableStream({
- write: action((chunk) => {
- this.log += chunk;
- }),
- })
- );
-
- const transferRate = (
- file.size /
- (elapsed / 1000) /
- 1024 /
- 1024
- ).toFixed(2);
- this.log += `Install finished in ${elapsed}ms at ${transferRate}MB/s`;
-
- runInAction(() => {
- this.progress = {
- filename: file.name,
- stage: Stage.Completed,
- uploadedSize: file.size,
- totalSize: file.size,
- value: 1,
- };
- this.installing = false;
- });
- };
-}
-
-const state = new InstallPageState();
-
-const Install: NextPage = () => {
- return (
-
-
- Install APK - Tango
-
-
-
- {
- if (checked === undefined) {
- return;
- }
- runInAction(() => {
- state.options.bypassLowTargetSdkBlock = checked;
- });
- }}
- />
-
-
-
-
-
-
- {state.progress && (
-
- )}
-
- {state.log && {state.log} }
-
- );
-};
-
-export default observer(Install);
diff --git a/apps/demo/src/pages/logcat.tsx b/apps/demo/src/pages/logcat.tsx
deleted file mode 100644
index 3096a1cb..00000000
--- a/apps/demo/src/pages/logcat.tsx
+++ /dev/null
@@ -1,833 +0,0 @@
-import {
- ContextualMenuItemType,
- ICommandBarItemProps,
- Stack,
- StackItem,
- isMac,
-} from "@fluentui/react";
-import { makeStyles, mergeClasses, shorthands } from "@griffel/react";
-import {
- AndroidLogEntry,
- AndroidLogPriority,
- Logcat,
- LogcatFormat,
-} from "@yume-chan/android-bin";
-import {
- AbortController,
- ReadableStream,
- WritableStream,
-} from "@yume-chan/stream-extra";
-import { encodeUtf8 } from "@yume-chan/struct";
-import {
- action,
- autorun,
- makeAutoObservable,
- observable,
- runInAction,
-} from "mobx";
-import { observer } from "mobx-react-lite";
-import { NextPage } from "next";
-import Head from "next/head";
-import { KeyboardEvent, PointerEvent, useCallback } from "react";
-
-import {
- CommandBar,
- Grid,
- GridColumn,
- GridHeaderProps,
- GridRowProps,
- ObservableListSelection,
- isModKey,
-} from "../components";
-import { CommandBarSpacerItem } from "../components/command-bar-spacer-item";
-import { GLOBAL_STATE } from "../state";
-import { Icons, RouteStackProps, saveFile, useStableCallback } from "../utils";
-
-const LINE_HEIGHT = 32;
-
-const useClasses = makeStyles({
- grid: {
- height: "100%",
- marginLeft: "-16px",
- marginRight: "-16px",
- },
- header: {
- textAlign: "center",
- lineHeight: `${LINE_HEIGHT}px`,
- },
- row: {
- "&:hover": {
- backgroundColor: "#f3f2f1",
- },
- },
- selected: {
- backgroundColor: "#edebe9",
- },
- code: {
- fontFamily: "monospace",
- textOverflow: "ellipsis",
- whiteSpace: "nowrap",
- lineHeight: LINE_HEIGHT + "px",
- cursor: "default",
- ...shorthands.overflow("hidden"),
- },
- // Android Studio Classic Light theme
- rowVerbose: {
- color: "#000000",
- },
- rowDebug: {
- color: "#000000",
- },
- rowInfo: {
- color: "#000000",
- },
- rowWarn: {
- color: "#645607",
- },
- rowError: {
- color: "#CD0000",
- },
- rowFatal: {
- color: "#CD0000",
- },
-});
-
-export interface Column extends GridColumn {
- title: string;
-}
-
-export interface LogRow extends AndroidLogEntry {
- timeString?: string;
-}
-
-const state = makeAutoObservable(
- {
- logcat: undefined as Logcat | undefined,
- running: false,
- buffer: [] as LogRow[],
- flushRequested: false,
- list: [] as LogRow[],
- selection: new ObservableListSelection(),
- count: 0,
- stream: undefined as ReadableStream | undefined,
- stopSignal: undefined as AbortController | undefined,
- animationFrameId: undefined as number | undefined,
-
- format: LogcatFormat.ThreadTime,
- formatModifierUid: false,
- formatModifierTimezone: false,
- formatTime: "default" as "year" | "default" | "epoch" | "monotonic",
- formatNanosecond: "millisecond" as
- | "millisecond"
- | "microsecond"
- | "nanosecond",
-
- formatEntry(entry: LogRow) {
- return entry.toString(this.format, {
- uid: this.formatModifierUid,
- year: this.formatTime === "year",
- epoch: this.formatTime === "epoch",
- monotonic: this.formatTime === "monotonic",
- microseconds: this.formatNanosecond === "microsecond",
- nanoseconds: this.formatNanosecond === "nanosecond",
- timezone: this.formatModifierTimezone,
- });
- },
-
- start() {
- if (this.running) {
- return;
- }
-
- // Logcat has its internal buffer,
- // it will output all logs in the buffer when started.
- // so clear the list before starting.
- this.list = [];
-
- this.running = true;
- this.stream = this.logcat!.binary();
- this.stopSignal = new AbortController();
- this.stream
- .pipeTo(
- new WritableStream({
- write: (chunk) => {
- this.buffer.push(chunk);
- if (!this.flushRequested) {
- this.flushRequested = true;
- requestAnimationFrame(this.flush);
- }
- },
- }),
- { signal: this.stopSignal.signal }
- )
- .catch((e) => {
- if (this.stopSignal?.signal.aborted) {
- return;
- }
-
- throw e;
- });
- },
- flush() {
- this.list.push(...this.buffer);
- this.buffer = [];
- this.flushRequested = false;
- },
- stop() {
- this.running = false;
- this.stopSignal!.abort();
- },
- clear() {
- this.list = [];
- this.selection.clear();
- },
- get empty() {
- return this.list.length === 0;
- },
- get commandBar(): ICommandBarItemProps[] {
- return [
- this.running
- ? {
- key: "stop",
- text: "Stop",
- iconProps: { iconName: Icons.Stop },
- onClick: () => this.stop(),
- }
- : {
- key: "start",
- text: "Start",
- disabled: this.logcat === undefined,
- iconProps: { iconName: Icons.Play },
- onClick: () => this.start(),
- },
- {
- key: "clear",
- text: "Clear",
- disabled: this.empty,
- iconProps: { iconName: Icons.Delete },
- onClick: () => this.clear(),
- },
- {
- key: "select-all",
- disabled: this.empty,
- iconProps: { iconName: Icons.Wand },
- text: "Select All",
- onClick: action(() => {
- this.selection.clear();
- this.selection.select(
- this.list.length - 1,
- false,
- true
- );
- }),
- },
- {
- key: "copy",
- text: "Copy Selected",
- disabled: this.selection.size === 0,
- iconProps: { iconName: Icons.Copy },
- onClick: () => {
- let text = "";
- for (const index of this.selection) {
- text += this.formatEntry(this.list[index]) + "\n";
- }
- // Chrome on Windows can't copy null characters
- text = text.replace(/\u0000/g, "");
- navigator.clipboard.writeText(text);
- },
- },
- {
- key: "save",
- text: "Save Selected",
- disabled: this.selection.size === 0,
- iconProps: { iconName: Icons.Save },
- onClick: () => {
- const stream = saveFile(`logcat.txt`);
- const writer = stream.getWriter();
- for (const index of this.selection) {
- writer.write(
- encodeUtf8(
- this.formatEntry(this.list[index]) + "\n"
- )
- );
- }
- writer.close();
- },
- },
-
- {
- // HACK: make CommandBar overflow on far items
- // https://github.com/microsoft/fluentui/issues/11842
- key: "spacer",
- onRender: () => ,
- },
- {
- // HACK: add a separator in CommandBar overflow menu
- // https://github.com/microsoft/fluentui/issues/10035
- key: "separator",
- disabled: true,
- itemType: ContextualMenuItemType.Divider,
- },
-
- {
- key: "format",
- iconProps: { iconName: Icons.TextGrammarSettings },
- text: "Format",
- subMenuProps: {
- items: [
- {
- key: "format",
- text: "Format",
- itemType: ContextualMenuItemType.Header,
- },
- {
- key: "brief",
- text: "Brief",
- canCheck: true,
- itemProps: {
- radioGroup: "format",
- },
- checked: this.format === LogcatFormat.Brief,
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.format = LogcatFormat.Brief;
- }),
- },
- {
- key: "process",
- text: "Process",
- canCheck: true,
- itemProps: {
- radioGroup: "format",
- },
- checked: this.format === LogcatFormat.Process,
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.format = LogcatFormat.Process;
- }),
- },
- {
- key: "tag",
- text: "Tag",
- canCheck: true,
- itemProps: {
- radioGroup: "format",
- },
- checked: this.format === LogcatFormat.Tag,
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.format = LogcatFormat.Tag;
- }),
- },
- {
- key: "thread",
- text: "Thread",
- canCheck: true,
- itemProps: {
- radioGroup: "format",
- },
- checked: this.format === LogcatFormat.Thread,
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.format = LogcatFormat.Thread;
- }),
- },
- {
- key: "raw",
- text: "Raw",
- canCheck: true,
- itemProps: {
- radioGroup: "format",
- },
- checked: this.format === LogcatFormat.Raw,
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.format = LogcatFormat.Raw;
- }),
- },
- {
- key: "time",
- text: "Time",
- canCheck: true,
- itemProps: {
- radioGroup: "format",
- },
- checked: this.format === LogcatFormat.Time,
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.format = LogcatFormat.Time;
- }),
- },
- {
- key: "thread-time",
- text: "ThreadTime",
- canCheck: true,
- itemProps: {
- radioGroup: "format",
- },
- checked:
- this.format === LogcatFormat.ThreadTime,
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.format = LogcatFormat.ThreadTime;
- }),
- },
- {
- key: "long",
- text: "Long",
- canCheck: true,
- itemProps: {
- radioGroup: "format",
- },
- checked: this.format === LogcatFormat.Long,
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.format = LogcatFormat.Long;
- }),
- },
-
- {
- key: "modifiers",
- text: "Modifiers",
- itemType: ContextualMenuItemType.Header,
- },
- {
- key: "uid",
- text: "UID",
- canCheck: true,
- checked: this.formatModifierUid,
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.formatModifierUid =
- !this.formatModifierUid;
- }),
- },
- {
- key: "timezone",
- text: "Timezone",
- canCheck: true,
- checked: this.formatModifierTimezone,
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.formatModifierTimezone =
- !this.formatModifierTimezone;
- }),
- },
-
- {
- key: "time-header",
- text: "Time Format",
- itemType: ContextualMenuItemType.Header,
- },
- {
- key: "default",
- text: "Default",
- canCheck: true,
- itemProps: {
- radioGroup: "time",
- },
- checked: this.formatTime === "default",
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.formatTime = "default";
- }),
- },
- {
- key: "year",
- text: "Year",
- canCheck: true,
- itemProps: {
- radioGroup: "time",
- },
- checked: this.formatTime === "year",
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.formatTime = "year";
- }),
- },
- {
- key: "epoch",
- text: "Epoch",
- canCheck: true,
- itemProps: {
- radioGroup: "time",
- },
- checked: this.formatTime === "epoch",
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.formatTime = "epoch";
- }),
- },
- {
- key: "monotonic",
- text: "Monotonic",
- canCheck: true,
- itemProps: {
- radioGroup: "time",
- },
- checked: this.formatTime === "monotonic",
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.formatTime = "monotonic";
- }),
- },
-
- {
- key: "nanosecondFormat",
- text: "Nanosecond Format",
- itemType: ContextualMenuItemType.Header,
- },
- {
- key: "millisecond",
- text: "Millisecond",
- canCheck: true,
- itemProps: {
- radioGroup: "nanosecond",
- },
- checked:
- this.formatNanosecond === "millisecond",
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.formatNanosecond = "millisecond";
- }),
- },
- {
- key: "microsecond",
- text: "Microsecond",
- canCheck: true,
- itemProps: {
- radioGroup: "nanosecond",
- },
- checked:
- this.formatNanosecond === "microsecond",
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.formatNanosecond = "microsecond";
- }),
- },
- {
- key: "nanosecond",
- text: "Nanosecond",
- canCheck: true,
- itemProps: {
- radioGroup: "nanosecond",
- },
- checked: this.formatNanosecond === "nanosecond",
- onClick: action((e) => {
- e?.preventDefault();
- e?.stopPropagation();
- this.formatNanosecond = "nanosecond";
- }),
- },
- ],
- },
- },
- ];
- },
- get columns(): Column[] {
- return [
- {
- width: 200,
- title: "Time",
- CellComponent: ({
- rowIndex,
- columnIndex,
- className,
- ...rest
- }) => {
- const item = this.list[rowIndex];
- if (!item.timeString) {
- item.timeString = new Date(
- item.seconds * 1000
- ).toISOString();
- }
-
- const classes = useClasses();
-
- return (
-
- {item.timeString}
-
- );
- },
- },
- {
- width: 60,
- title: "PID",
- CellComponent: ({
- rowIndex,
- columnIndex,
- className,
- ...rest
- }) => {
- const item = this.list[rowIndex];
-
- const classes = useClasses();
-
- return (
-
- {item.pid}
-
- );
- },
- },
- {
- width: 60,
- title: "TID",
- CellComponent: ({
- rowIndex,
- columnIndex,
- className,
- ...rest
- }) => {
- const item = this.list[rowIndex];
-
- const classes = useClasses();
-
- return (
-
- {item.tid}
-
- );
- },
- },
- {
- width: 80,
- title: "Priority",
- CellComponent: ({
- rowIndex,
- columnIndex,
- className,
- ...rest
- }) => {
- const item = this.list[rowIndex];
-
- const classes = useClasses();
-
- return (
-
- {AndroidLogPriority[item.priority]}
-
- );
- },
- },
- {
- width: 300,
- title: "Tag",
- CellComponent: ({
- rowIndex,
- columnIndex,
- className,
- ...rest
- }) => {
- const item = this.list[rowIndex];
-
- const classes = useClasses();
-
- return (
-
- {item.tag}
-
- );
- },
- },
- {
- width: 300,
- flexGrow: 1,
- title: "Message",
- CellComponent: ({
- rowIndex,
- columnIndex,
- className,
- ...rest
- }) => {
- const item = this.list[rowIndex];
- const classes = useClasses();
-
- return (
-
- {item.message}
-
- );
- },
- },
- ];
- },
- },
- {
- buffer: false,
- list: observable.shallow,
- flush: action.bound,
- }
-);
-
-autorun(() => {
- if (GLOBAL_STATE.adb) {
- runInAction(() => {
- state.logcat = new Logcat(GLOBAL_STATE.adb!);
- });
- } else {
- runInAction(() => {
- state.logcat = undefined;
- if (state.running) {
- state.stop();
- }
- });
- }
-});
-
-const Header = observer(function Header({
- className,
- columnIndex,
- ...rest
-}: GridHeaderProps) {
- const classes = useClasses();
-
- return (
-
- {state.columns[columnIndex].title}
-
- );
-});
-
-const PRIORITY_COLORS: Record<
- AndroidLogPriority,
- keyof ReturnType
-> = {
- [AndroidLogPriority.Default]: "rowVerbose",
- [AndroidLogPriority.Unknown]: "rowVerbose",
- [AndroidLogPriority.Silent]: "rowVerbose",
- [AndroidLogPriority.Verbose]: "rowVerbose",
- [AndroidLogPriority.Debug]: "rowDebug",
- [AndroidLogPriority.Info]: "rowInfo",
- [AndroidLogPriority.Warn]: "rowWarn",
- [AndroidLogPriority.Error]: "rowError",
- [AndroidLogPriority.Fatal]: "rowFatal",
-};
-
-const Row = observer(function Row({
- className,
- rowIndex,
- ...rest
-}: GridRowProps) {
- const classes = useClasses();
-
- const handlePointerDown = useStableCallback(
- action((e: PointerEvent) => {
- if (e.shiftKey) {
- e.preventDefault();
- }
- state.selection.select(rowIndex, isModKey(e), e.shiftKey);
- })
- );
-
- return (
-
- );
-});
-
-const LogcatPage: NextPage = () => {
- const classes = useClasses();
-
- const handleKeyDown = useCallback((e: KeyboardEvent) => {
- if ((isMac() ? e.metaKey : e.ctrlKey) && e.code === "KeyA") {
- e.preventDefault();
- e.stopPropagation();
- state.selection.clear();
- state.selection.select(state.list.length - 1, false, true);
- return;
- }
-
- if (e.code === "Escape") {
- e.preventDefault();
- e.stopPropagation();
- state.selection.clear();
- return;
- }
- }, []);
-
- return (
-
-
- Logcat - Tango
-
-
-
-
-
-
-
-
- );
-};
-
-export default observer(LogcatPage);
diff --git a/apps/demo/src/pages/packet-log.tsx b/apps/demo/src/pages/packet-log.tsx
deleted file mode 100644
index 62425ff5..00000000
--- a/apps/demo/src/pages/packet-log.tsx
+++ /dev/null
@@ -1,358 +0,0 @@
-import { ICommandBarItemProps, Stack, StackItem } from "@fluentui/react";
-import { makeStyles, mergeClasses, shorthands } from "@griffel/react";
-import { AdbCommand, decodeUtf8 } from "@yume-chan/adb";
-import { action, autorun, makeAutoObservable, runInAction } from "mobx";
-import { observer } from "mobx-react-lite";
-import { NextPage } from "next";
-import Head from "next/head";
-import { PointerEvent } from "react";
-import {
- CommandBar,
- Grid,
- GridCellProps,
- GridColumn,
- GridHeaderProps,
- GridRowProps,
- HexViewer,
- ObservableListSelection,
- isModKey,
- toText,
-} from "../components";
-import { GLOBAL_STATE } from "../state";
-import {
- Icons,
- RouteStackProps,
- useStableCallback,
- withDisplayName,
-} from "../utils";
-
-const ADB_COMMAND_NAME = {
- [AdbCommand.Auth]: "AUTH",
- [AdbCommand.Close]: "CLSE",
- [AdbCommand.Connect]: "CNXN",
- [AdbCommand.OK]: "OKAY",
- [AdbCommand.Open]: "OPEN",
- [AdbCommand.Write]: "WRTE",
-};
-
-interface Column extends GridColumn {
- title: string;
-}
-
-const LINE_HEIGHT = 32;
-
-function uint8ArrayToHexString(array: Uint8Array) {
- return Array.from(array)
- .map((byte) => byte.toString(16).padStart(2, "0"))
- .join(" ");
-}
-
-const state = new (class {
- get empty() {
- return !GLOBAL_STATE.logs.length;
- }
-
- get commandBarItems(): ICommandBarItemProps[] {
- return [
- {
- key: "clear",
- disabled: this.empty,
- iconProps: { iconName: Icons.Delete },
- text: "Clear",
- onClick: action(() => GLOBAL_STATE.clearLog()),
- },
- {
- key: "select-all",
- disabled: this.empty,
- iconProps: { iconName: Icons.Wand },
- text: "Select All",
- onClick: action(() => {
- this.selection.clear();
- this.selection.select(
- GLOBAL_STATE.logs.length - 1,
- false,
- true
- );
- }),
- },
- {
- key: "copy",
- disabled: this.selection.size === 0,
- iconProps: { iconName: Icons.Copy },
- text: "Copy",
- onClick: () => {
- let text = "";
- for (const index of this.selection) {
- const entry = GLOBAL_STATE.logs[index];
- // prettier-ignore
- text += `${
- entry.timestamp!.toISOString()
- }\t${
- entry.direction === 'in' ? "IN" : "OUT"
- }\t${
- ADB_COMMAND_NAME[entry.command as keyof typeof ADB_COMMAND_NAME]
- }\t${
- entry.arg0.toString(16).padStart(8,'0')
- }\t${
- entry.arg1.toString(16).padStart(8,'0')
- }\t${
- uint8ArrayToHexString(entry.payload)
- }\n`;
- }
- navigator.clipboard.writeText(text);
- },
- },
- ];
- }
-
- selection = new ObservableListSelection();
-
- constructor() {
- makeAutoObservable(this, {});
-
- autorun(() => {
- if (GLOBAL_STATE.logs.length === 0) {
- runInAction(() => this.selection.clear());
- }
- });
- }
-})();
-
-const useClasses = makeStyles({
- grow: {
- height: 0,
- },
- grid: {
- height: "100%",
- },
- header: {
- textAlign: "center",
- lineHeight: `${LINE_HEIGHT}px`,
- },
- row: {
- "&:hover": {
- backgroundColor: "#f3f2f1",
- },
- },
- selected: {
- backgroundColor: "#edebe9",
- },
- code: {
- fontFamily: "monospace",
- textOverflow: "ellipsis",
- whiteSpace: "nowrap",
- lineHeight: LINE_HEIGHT + "px",
- cursor: "default",
- ...shorthands.overflow("hidden"),
- },
- hexViewer: {
- ...shorthands.padding("12px"),
- ...shorthands.borderTop("1px", "solid", "rgb(243, 242, 241)"),
- },
-});
-
-const columns: Column[] = [
- {
- title: "Direction",
- width: 100,
- CellComponent: withDisplayName("Direction")(
- ({ className, rowIndex, ...rest }: GridCellProps) => {
- const item = GLOBAL_STATE.logs[rowIndex];
-
- const classes = useClasses();
-
- return (
-
- {item.direction}
-
- );
- }
- ),
- },
- {
- title: "Command",
- width: 100,
- CellComponent: withDisplayName("Command")(
- ({ className, rowIndex, ...rest }: GridCellProps) => {
- const item = GLOBAL_STATE.logs[rowIndex];
-
- if (!item.commandString) {
- item.commandString =
- ADB_COMMAND_NAME[item.command as AdbCommand] ??
- decodeUtf8(new Uint32Array([item.command]));
- }
-
- const classes = useClasses();
-
- return (
-
- {item.commandString}
-
- );
- }
- ),
- },
- {
- title: "Arg0",
- width: 100,
- CellComponent: withDisplayName("Command")(
- ({ className, rowIndex, ...rest }: GridCellProps) => {
- const item = GLOBAL_STATE.logs[rowIndex];
-
- if (!item.arg0String) {
- item.arg0String = item.arg0.toString(16).padStart(8, "0");
- }
-
- const classes = useClasses();
-
- return (
-
- {item.arg0String}
-
- );
- }
- ),
- },
- {
- title: "Arg1",
- width: 100,
- CellComponent: withDisplayName("Command")(
- ({ className, rowIndex, ...rest }: GridCellProps) => {
- const item = GLOBAL_STATE.logs[rowIndex];
-
- if (!item.arg1String) {
- item.arg1String = item.arg1.toString(16).padStart(8, "0");
- }
-
- const classes = useClasses();
-
- return (
-
- {item.arg1String}
-
- );
- }
- ),
- },
- {
- title: "Payload",
- width: 200,
- flexGrow: 1,
- CellComponent: withDisplayName("Command")(
- ({ className, rowIndex, ...rest }: GridCellProps) => {
- const item = GLOBAL_STATE.logs[rowIndex];
-
- if (!item.payloadString) {
- item.payloadString = toText(item.payload.subarray(0, 100));
- }
-
- const classes = useClasses();
-
- return (
-
- {item.payloadString}
-
- );
- }
- ),
- },
-];
-
-const Header = withDisplayName("Header")(
- ({ className, columnIndex, ...rest }: GridHeaderProps) => {
- const classes = useClasses();
-
- return (
-
- {columns[columnIndex].title}
-
- );
- }
-);
-
-const Row = observer(function Row({
- className,
- rowIndex,
- ...rest
-}: GridRowProps) {
- const classes = useClasses();
-
- const handlePointerDown = useStableCallback(
- (e: PointerEvent) => {
- runInAction(() => {
- if (e.shiftKey) {
- e.preventDefault();
- }
- state.selection.select(rowIndex, isModKey(e), e.shiftKey);
- });
- }
- );
-
- return (
-
- );
-});
-
-const PacketLog: NextPage = () => {
- const classes = useClasses();
-
- return (
-
-
- Packet Log - Tango
-
-
-
-
-
-
-
-
- {state.selection.selectedIndex !== null &&
- GLOBAL_STATE.logs[state.selection.selectedIndex].payload
- .length > 0 && (
-
-
-
- )}
-
- );
-};
-
-export default observer(PacketLog);
diff --git a/apps/demo/src/pages/power.tsx b/apps/demo/src/pages/power.tsx
deleted file mode 100644
index 4ede7b81..00000000
--- a/apps/demo/src/pages/power.tsx
+++ /dev/null
@@ -1,130 +0,0 @@
-// cspell: ignore bootloader
-// cspell: ignore fastboot
-
-import {
- DefaultButton,
- Icon,
- MessageBar,
- MessageBarType,
- Stack,
- TooltipHost,
-} from "@fluentui/react";
-import { observer } from "mobx-react-lite";
-import { NextPage } from "next";
-import Head from "next/head";
-import { GLOBAL_STATE } from "../state";
-import { Icons, RouteStackProps } from "../utils";
-
-const Power: NextPage = () => {
- return (
-
-
- Power Menu - Tango
-
-
-
- GLOBAL_STATE.adb!.power.reboot()}
- />
-
-
-
- GLOBAL_STATE.adb!.power.powerOff()}
- />
-
-
-
- GLOBAL_STATE.adb!.power.powerButton()}
- />
-
-
-
-
- Danger Zone Below
-
-
-
-
- GLOBAL_STATE.adb!.power.bootloader()}
- />
-
-
-
- GLOBAL_STATE.adb!.power.fastboot()}
- />
-
-
-
- GLOBAL_STATE.adb!.power.recovery()}
- />
-
-
-
- GLOBAL_STATE.adb!.power.sideload()}
- />
-
-
-
- GLOBAL_STATE.adb!.power.qualcommEdlMode()}
- />
- Only works on some Qualcomm devices.}
- >
-
-
-
-
-
- GLOBAL_STATE.adb!.power.samsungOdin()}
- />
- Only works on Samsung devices.}
- >
-
-
-
-
- );
-};
-
-export default observer(Power);
diff --git a/apps/demo/src/pages/reverse.tsx b/apps/demo/src/pages/reverse.tsx
deleted file mode 100644
index cb531ca4..00000000
--- a/apps/demo/src/pages/reverse.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import { NOOP, decodeUtf8 } from "@yume-chan/adb";
-import { WritableStream } from "@yume-chan/stream-extra";
-import { makeAutoObservable, reaction, runInAction } from "mobx";
-import { observer } from "mobx-react-lite";
-import { NextPage } from "next";
-import { GLOBAL_STATE } from "../state";
-
-const state = makeAutoObservable({
- log: [] as string[],
-});
-
-reaction(
- () => GLOBAL_STATE.adb,
- async (device) => {
- if (!device) {
- return;
- }
-
- await device.reverse.remove("tcp:3000").catch(NOOP);
- await device.reverse.add("tcp:3000", (socket) => {
- runInAction(() => {
- state.log.push(`received stream`);
- });
- socket.readable.pipeTo(
- new WritableStream({
- write: (chunk) => {
- runInAction(() => {
- state.log.push(
- `received data: ${decodeUtf8(chunk)}`
- );
- });
- },
- })
- );
- });
- },
- { fireImmediately: true }
-);
-
-const ReverseTesterPage: NextPage = () => {
- return (
-
- {state.log.map((line, index) => (
- {line}
- ))}
-
- );
-};
-
-export default observer(ReverseTesterPage);
diff --git a/apps/demo/src/pages/scrcpy.tsx b/apps/demo/src/pages/scrcpy.tsx
deleted file mode 100644
index a0d3800b..00000000
--- a/apps/demo/src/pages/scrcpy.tsx
+++ /dev/null
@@ -1,335 +0,0 @@
-import {
- Dialog,
- LayerHost,
- Link,
- PrimaryButton,
- ProgressIndicator,
- Stack,
- StackItem,
-} from "@fluentui/react";
-import { useId } from "@fluentui/react-hooks";
-import { makeStyles, shorthands } from "@griffel/react";
-import { WebCodecsDecoder } from "@yume-chan/scrcpy-decoder-webcodecs";
-import { action, runInAction } from "mobx";
-import { observer } from "mobx-react-lite";
-import { NextPage } from "next";
-import Head from "next/head";
-import { KeyboardEvent, useEffect, useState } from "react";
-import { DemoModePanel, DeviceView, ExternalLink } from "../components";
-import {
- NavigationBar,
- SETTING_DEFINITIONS,
- SETTING_STATE,
- STATE,
- ScrcpyCommandBar,
- SettingItem,
- VideoContainer,
-} from "../components/scrcpy";
-import { useLocalStorage } from "../hooks";
-import { GLOBAL_STATE } from "../state";
-import { CommonStackTokens, RouteStackProps, formatSpeed } from "../utils";
-
-const useClasses = makeStyles({
- layerHost: {
- position: "absolute",
- top: 0,
- bottom: 0,
- left: 0,
- right: 0,
- pointerEvents: "none",
- ...shorthands.margin(0),
- },
- fullScreenContainer: {
- flexGrow: 1,
- display: "flex",
- flexDirection: "column",
- backgroundColor: "black",
- ":focus-visible": {
- ...shorthands.outline("0"),
- },
- },
- fullScreenStatusBar: {
- display: "flex",
- color: "white",
- columnGap: "12px",
- ...shorthands.padding("8px", "20px"),
- },
- spacer: {
- flexGrow: 1,
- },
-});
-
-const ConnectingDialog = observer(() => {
- const classes = useClasses();
- const layerHostId = useId("layerHost");
-
- const [isClient, setIsClient] = useState(false);
-
- useEffect(() => {
- setIsClient(true);
- }, []);
-
- if (!isClient) {
- return null;
- }
-
- return (
- <>
-
-
-
- >
- );
-});
-
-async function handleKeyEvent(e: KeyboardEvent) {
- if (!STATE.client) {
- return;
- }
-
- e.preventDefault();
- e.stopPropagation();
-
- const { type, code } = e;
- STATE.keyboard;
-}
-
-function handleBlur() {
- if (!STATE.client) {
- return;
- }
-
- STATE.keyboard?.reset();
-}
-
-const FullscreenHint = observer(function FullscreenHint({
- keyboardLockEnabled,
-}: {
- keyboardLockEnabled: boolean;
-}) {
- const classes = useClasses();
-
- const [hintHidden, setHintHidden] = useLocalStorage<`${boolean}`>(
- "scrcpy-hint-hidden",
- "false"
- );
-
- if (!keyboardLockEnabled || !STATE.isFullScreen || hintHidden === "true") {
- return null;
- }
-
- return (
-
- {GLOBAL_STATE.device?.serial}
- FPS: {STATE.fps}
-
-
-
- Press and hold ESC to exit full screen
-
- setHintHidden("true")}>
- {`Don't show again`}
-
-
- );
-});
-
-const Scrcpy: NextPage = () => {
- const classes = useClasses();
-
- useEffect(() => {
- // Detect WebCodecs support at client side
- if (
- SETTING_STATE.decoders.length === 1 &&
- WebCodecsDecoder.isSupported()
- ) {
- runInAction(() => {
- SETTING_STATE.decoders.unshift({
- key: "webcodecs",
- name: "WebCodecs",
- Constructor: WebCodecsDecoder,
- });
- });
- }
- }, []);
-
- const [keyboardLockEnabled, setKeyboardLockEnabled] = useState(false);
- useEffect(() => {
- if (!("keyboard" in navigator)) {
- return;
- }
-
- // Keyboard Lock is only effective in fullscreen mode,
- // but the `lock` method can be called at any time.
-
- // @ts-expect-error
- navigator.keyboard.lock();
- setKeyboardLockEnabled(true);
-
- return () => {
- // @ts-expect-error
- navigator.keyboard.unlock();
- };
- }, []);
-
- useEffect(() => {
- window.addEventListener("blur", handleBlur);
-
- return () => {
- window.removeEventListener("blur", handleBlur);
- };
- }, []);
-
- return (
-
-
- Scrcpy - Tango
-
-
- {STATE.running ? (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
- {STATE.log.map((line, index) => (
- {line}
- ))}
-
-
-
-
- >
- ) : (
- <>
-
-
- Scrcpy
-
- can mirror device display and audio with low latency and
- control the device, all without root access.
-
-
- This is a TypeScript re-implementation of the client
- part. Paired with official pre-built server binary.
-
-
-
-
-
-
- {SETTING_DEFINITIONS.get().map((definition) => (
-
- ((SETTING_STATE[definition.group] as any)[
- definition.key
- ] = value)
- )}
- />
- ))}
-
-
- >
- )}
-
- );
-};
-
-export default observer(Scrcpy);
diff --git a/apps/demo/src/pages/shell.tsx b/apps/demo/src/pages/shell.tsx
deleted file mode 100644
index a8314004..00000000
--- a/apps/demo/src/pages/shell.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { makeStyles } from "@griffel/react";
-import { observer } from "mobx-react-lite";
-import { NextPage } from "next";
-import Head from "next/head";
-import { useCallback } from "react";
-import { attachTabbyFrame } from "../components";
-
-const useClasses = makeStyles({
- container: {
- height: "100%",
- display: "flex",
- alignItems: "center",
- justifyContent: "center",
- },
-});
-
-const Shell: NextPage = (): JSX.Element | null => {
- const classes = useClasses();
-
- const handleContainerRef = useCallback(
- (container: HTMLDivElement | null) => {
- // invoke it with `null` to hide the iframe
- attachTabbyFrame(container);
- },
- []
- );
-
- return (
- <>
-
- Interactive Shell - Tango
-
-
-
- >
- );
-};
-
-export default observer(Shell);
diff --git a/apps/demo/src/pages/tabby-frame.tsx b/apps/demo/src/pages/tabby-frame.tsx
deleted file mode 100644
index c1d9b989..00000000
--- a/apps/demo/src/pages/tabby-frame.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { useEffect } from "react";
-
-function TabbyFrame() {
- useEffect(() => {
- // Only run at client side.
- try {
- require("@yume-chan/tabby-launcher");
- } catch (e) {
- console.error(e);
- }
- }, []);
-
- return (
-
-
-
- {/* @ts-expect-error */}
-
-
- );
-}
-
-TabbyFrame.noLayout = true;
-
-export default TabbyFrame;
diff --git a/apps/demo/src/pages/tcpip.tsx b/apps/demo/src/pages/tcpip.tsx
deleted file mode 100644
index 927c2666..00000000
--- a/apps/demo/src/pages/tcpip.tsx
+++ /dev/null
@@ -1,252 +0,0 @@
-// cspell: ignore addrs
-
-import {
- ICommandBarItemProps,
- MessageBar,
- Stack,
- StackItem,
- Text,
- TextField,
- Toggle,
-} from "@fluentui/react";
-import { autorun, makeAutoObservable, runInAction } from "mobx";
-import { observer } from "mobx-react-lite";
-import { NextPage } from "next";
-import Head from "next/head";
-import { useCallback, useEffect } from "react";
-import { CommandBar, ExternalLink } from "../components";
-import { GLOBAL_STATE } from "../state";
-import { Icons, RouteStackProps, asyncEffect } from "../utils";
-
-class TcpIpState {
- initial = true;
- visible = false;
- serviceListenAddresses: string[] | undefined = undefined;
- servicePortEnabled = false;
- servicePort: string = "";
- persistPortEnabled = false;
- persistPort: string | undefined = undefined;
-
- constructor() {
- makeAutoObservable(this, {
- initial: false,
- queryInfo: false,
- applyServicePort: false,
- });
-
- autorun(() => {
- if (GLOBAL_STATE.adb) {
- if (this.initial && this.visible) {
- this.initial = false;
- this.queryInfo();
- }
- } else {
- this.initial = true;
- }
- });
- }
-
- get commandBarItems(): ICommandBarItemProps[] {
- return [
- {
- key: "refresh",
- disabled: !GLOBAL_STATE.adb,
- iconProps: { iconName: Icons.ArrowClockwise },
- text: "Refresh",
- onClick: this.queryInfo as VoidFunction,
- },
- {
- key: "apply",
- disabled: !GLOBAL_STATE.adb,
- iconProps: { iconName: Icons.Save },
- text: "Apply",
- onClick: this.applyServicePort,
- },
- ];
- }
-
- queryInfo = asyncEffect(async (signal) => {
- if (!GLOBAL_STATE.adb) {
- runInAction(() => {
- this.serviceListenAddresses = undefined;
- this.servicePortEnabled = false;
- this.servicePort = "";
- this.persistPortEnabled = false;
- this.persistPort = undefined;
- });
- return;
- }
-
- const { serviceListenAddresses, servicePort, persistPort } =
- await GLOBAL_STATE.adb.tcpip.getListenAddresses();
-
- if (signal.aborted) {
- return;
- }
-
- runInAction(() => {
- this.serviceListenAddresses = serviceListenAddresses;
-
- if (servicePort) {
- this.servicePortEnabled = !serviceListenAddresses;
- this.servicePort = servicePort.toString();
- } else {
- this.servicePortEnabled = false;
- this.servicePort = "5555";
- }
-
- if (persistPort) {
- this.persistPortEnabled =
- !serviceListenAddresses && !servicePort;
- this.persistPort = persistPort.toString();
- } else {
- this.persistPortEnabled = false;
- this.persistPort = undefined;
- }
- });
- });
-
- applyServicePort = async () => {
- if (!GLOBAL_STATE.adb) {
- return;
- }
-
- if (state.servicePortEnabled) {
- await GLOBAL_STATE.adb.tcpip.setPort(
- Number.parseInt(state.servicePort, 10),
- );
- } else {
- await GLOBAL_STATE.adb.tcpip.disable();
- }
- };
-}
-
-const state = new TcpIpState();
-
-const TcpIp: NextPage = () => {
- useEffect(() => {
- runInAction(() => {
- state.visible = true;
- });
-
- return () => {
- runInAction(() => {
- state.visible = false;
- });
- };
- });
-
- const handleServicePortEnabledChange = useCallback(
- (e: unknown, value?: boolean) => {
- runInAction(() => {
- state.servicePortEnabled = !!value;
- });
- },
- [],
- );
-
- const handleServicePortChange = useCallback(
- (e: unknown, value?: string) => {
- if (value === undefined) {
- return;
- }
- runInAction(() => (state.servicePort = value));
- },
- [],
- );
-
- return (
-
-
- ADB over WiFi - Tango
-
-
-
-
-
-
-
- For Tango to wirelessly connect to your device,
-
- extra software
-
- is required.
-
-
-
-
-
-
- Your device will disconnect after changing ADB over WiFi
- config.
-
-
-
-
-
-
- {state.serviceListenAddresses?.map((address) => (
-
- ))}
-
-
-
-
-
-
-
-
-
- {state.persistPort && (
-
- )}
-
-
- );
-};
-
-export default observer(TcpIp);
diff --git a/apps/demo/src/state/global.ts b/apps/demo/src/state/global.ts
deleted file mode 100644
index 597a7eae..00000000
--- a/apps/demo/src/state/global.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import { Adb, AdbDaemonDevice, AdbPacketData } from "@yume-chan/adb";
-import { action, makeAutoObservable, observable } from "mobx";
-
-export type PacketLogItemDirection = "in" | "out";
-
-export interface PacketLogItem extends AdbPacketData {
- direction: PacketLogItemDirection;
-
- timestamp?: Date;
- commandString?: string;
- arg0String?: string;
- arg1String?: string;
- payloadString?: string;
-}
-
-export class GlobalState {
- device: AdbDaemonDevice | undefined = undefined;
- adb: Adb | undefined = undefined;
-
- errorDialogVisible = false;
- errorDialogMessage = "";
-
- logs: PacketLogItem[] = [];
-
- constructor() {
- makeAutoObservable(this, {
- hideErrorDialog: action.bound,
- logs: observable.shallow,
- });
- }
-
- setDevice(device: AdbDaemonDevice | undefined, adb: Adb | undefined) {
- this.device = device;
- this.adb = adb;
- }
-
- showErrorDialog(message: Error | string) {
- this.errorDialogVisible = true;
- if (message instanceof Error) {
- this.errorDialogMessage = message.stack || message.message;
- } else {
- this.errorDialogMessage = message;
- }
- }
-
- hideErrorDialog() {
- this.errorDialogVisible = false;
- }
-
- appendLog(direction: PacketLogItemDirection, packet: AdbPacketData) {
- this.logs.push({
- ...packet,
- direction,
- timestamp: new Date(),
- payload: packet.payload.slice(),
- } as PacketLogItem);
- }
-
- clearLog() {
- this.logs.length = 0;
- }
-}
-
-export const GLOBAL_STATE = new GlobalState();
diff --git a/apps/demo/src/state/index.ts b/apps/demo/src/state/index.ts
deleted file mode 100644
index 7afcc369..00000000
--- a/apps/demo/src/state/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './global';
diff --git a/apps/demo/src/styles/globals.css b/apps/demo/src/styles/globals.css
deleted file mode 100644
index 8cdb3160..00000000
--- a/apps/demo/src/styles/globals.css
+++ /dev/null
@@ -1,27 +0,0 @@
-html,
-body {
- width: 100%;
- height: 100%;
- padding: 0;
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
- Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
-}
-
-#__next {
- width: 100%;
- height: 100%;
-}
-
-a {
- color: inherit;
- text-decoration: none;
-}
-
-* {
- box-sizing: border-box;
-}
-
-.ms-Dialog-subText {
- white-space: pre-wrap;
-}
diff --git a/apps/demo/src/utils/async-effect.ts b/apps/demo/src/utils/async-effect.ts
deleted file mode 100644
index 6b59c175..00000000
--- a/apps/demo/src/utils/async-effect.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-export function asyncEffect(effect: (signal: AbortSignal, ...args: Args) => Promise void)>) {
- let cancelLast = () => { };
-
- return async (...args: Args) => {
- cancelLast();
- cancelLast = () => {
- // Effect finished before abortion
- // Call cleanup
- if (typeof cleanup === 'function') {
- cleanup();
- }
-
- // Request abortion
- abortController.abort();
- };
-
- const abortController = new AbortController();
- let cleanup: void | (() => void);
-
- try {
- cleanup = await effect(abortController.signal, ...args);
-
- // Abortion requested but the effect still finished
- // Immediately call cleanup
- if (abortController.signal.aborted) {
- if (typeof cleanup === 'function') {
- cleanup();
- }
- }
- } catch (e) {
- if (e instanceof DOMException) {
- // Ignore errors from AbortSignal-aware APIs
- // (e.g. `fetch`)
- if (e.name === 'AbortError') {
- return;
- }
- }
-
- console.error(e);
- }
- };
-}
diff --git a/apps/demo/src/utils/file-size.ts b/apps/demo/src/utils/file-size.ts
deleted file mode 100644
index 7f901af6..00000000
--- a/apps/demo/src/utils/file-size.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-import { useSetInterval } from "@fluentui/react-hooks";
-import { Consumable, InspectStream } from "@yume-chan/stream-extra";
-import { useEffect, useRef, useState } from "react";
-
-const units = [" B", " KB", " MB", " GB"];
-
-export function formatSize(value: number): string {
- let index = 0;
- while (index < units.length && value > 1024) {
- index += 1;
- value /= 1024;
- }
- return (
- value.toLocaleString(undefined, { maximumFractionDigits: 2 }) +
- units[index]
- );
-}
-
-export function formatSpeed(
- completed: number,
- total: number,
- speed: number
-): string | undefined {
- if (total === 0) {
- return undefined;
- }
- return `${formatSize(completed)} of ${formatSize(total)} (${formatSize(
- speed
- )}/s)`;
-}
-
-export function useSpeed(
- completed: number,
- total: number
-): [completed: number, speed: number] {
- const completedRef = useRef(completed);
- completedRef.current = completed;
-
- const [debouncedCompleted, setDebouncedCompleted] = useState(completed);
- const [speed, setSpeed] = useState(0);
-
- const { setInterval, clearInterval } = useSetInterval();
- const intervalIdRef = useRef();
- useEffect(() => {
- intervalIdRef.current = setInterval(() => {
- setDebouncedCompleted((debouncedCompleted) => {
- setSpeed(completedRef.current - debouncedCompleted);
- return completedRef.current;
- });
- }, 1000);
-
- return () => {
- clearInterval(intervalIdRef.current!);
- };
- }, [clearInterval, setInterval, total]);
-
- useEffect(() => {
- if (total !== 0 && completed === total) {
- setDebouncedCompleted((debouncedCompleted) => {
- setSpeed(total - debouncedCompleted);
- return total;
- });
- clearInterval(intervalIdRef.current!);
- }
- }, [clearInterval, completed, total]);
-
- return [debouncedCompleted, speed];
-}
-
-export function delay(time: number): Promise {
- return new Promise((resolve) => {
- globalThis.setTimeout(resolve, time);
- });
-}
-
-/**
- * Because of internal buffer of upstream/downstream streams,
- * the progress value won't be 100% accurate. But it's usually good enough.
- */
-export class ProgressStream extends InspectStream> {
- public constructor(onProgress: (value: number) => void) {
- let progress = 0;
- super((chunk) => {
- progress += chunk.value.byteLength;
- onProgress(progress);
- });
- }
-}
diff --git a/apps/demo/src/utils/file.ts b/apps/demo/src/utils/file.ts
deleted file mode 100644
index 48a8c209..00000000
--- a/apps/demo/src/utils/file.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import {
- WrapReadableStream,
- WritableStream,
- type ReadableStream,
-} from "@yume-chan/stream-extra";
-import getConfig from "next/config";
-
-interface PickFileOptions {
- accept?: string;
-}
-
-export function pickFile(
- options: { multiple: true } & PickFileOptions
-): Promise;
-export function pickFile(
- options: { multiple?: false } & PickFileOptions
-): Promise;
-export function pickFile(
- options: { multiple?: boolean } & PickFileOptions
-): Promise {
- return new Promise((resolve) => {
- const input = document.createElement("input");
- input.type = "file";
-
- if (options.multiple) {
- input.multiple = true;
- }
-
- if (options.accept) {
- input.accept = options.accept;
- }
-
- input.onchange = () => {
- if (options.multiple) {
- resolve(input.files!);
- } else {
- resolve(input.files!.item(0));
- }
- };
-
- input.click();
- });
-}
-
-let StreamSaver: typeof import("@yume-chan/stream-saver");
-if (typeof window !== "undefined") {
- const {
- publicRuntimeConfig: { basePath },
- } = getConfig();
- // Can't use `import` here because ESM is read-only (can't set `mitm` field)
- StreamSaver = require("@yume-chan/stream-saver");
- StreamSaver.mitm = basePath + "/StreamSaver/mitm.html";
- // Pre-register the service worker for offline usage.
- // Request for service worker script won't go through another service worker
- // so can't be cached.
- if ("serviceWorker" in navigator) {
- navigator.serviceWorker.register(basePath + "/StreamSaver/sw.js", {
- scope: basePath + "/StreamSaver/",
- });
- }
-}
-
-export function saveFile(fileName: string, size?: number | undefined) {
- return StreamSaver!.createWriteStream(fileName, {
- size,
- }) as unknown as WritableStream;
-}
-
-export function createFileStream(file: File) {
- // `@types/node` typing messed things up
- // https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/58079
- // TODO: demo: remove the wrapper after switching to native stream implementation.
- return new WrapReadableStream(
- file.stream() as unknown as ReadableStream
- );
-}
diff --git a/apps/demo/src/utils/icons.tsx b/apps/demo/src/utils/icons.tsx
deleted file mode 100644
index 459a7fbe..00000000
--- a/apps/demo/src/utils/icons.tsx
+++ /dev/null
@@ -1,189 +0,0 @@
-import { registerIcons } from "@fluentui/react";
-import {
- AddCircleRegular,
- WindowDevToolsRegular,
- ArrowClockwiseRegular,
- ArrowRotateClockwiseRegular,
- ArrowRotateCounterclockwiseRegular,
- ArrowSortDownRegular,
- ArrowSortUpRegular,
- BookSearchRegular,
- BookmarkRegular,
- BoxRegular,
- BugRegular,
- CameraRegular,
- CheckmarkRegular,
- ChevronDownRegular,
- ChevronRightRegular,
- ChevronUpRegular,
- CircleRegular,
- CloudArrowDownRegular,
- CloudArrowUpRegular,
- CopyRegular,
- DeleteRegular,
- DocumentRegular,
- FilterRegular,
- FolderRegular,
- FullScreenMaximizeRegular,
- InfoRegular,
- LightbulbFilamentRegular,
- LightbulbRegular,
- MoreHorizontalRegular,
- NavigationRegular,
- OrientationRegular,
- PanelBottomRegular,
- PersonFeedbackRegular,
- PhoneLaptopRegular,
- PhoneRegular,
- PhoneSpeakerRegular,
- PlayRegular,
- PlugConnectedRegular,
- PlugDisconnectedRegular,
- PowerRegular,
- RecordRegular,
- SaveRegular,
- SearchRegular,
- SettingsRegular,
- Speaker1Regular,
- Speaker2Regular,
- SpeakerOffRegular,
- StopRegular,
- TextGrammarErrorRegular,
- TextGrammarSettingsRegular,
- WandRegular,
- WarningRegular,
- WifiSettingsRegular,
- WindowConsoleRegular,
-} from "@fluentui/react-icons";
-
-const STYLE = {};
-
-export function register() {
- registerIcons({
- icons: {
- // General use
- AddCircle: ,
- ArrowClockwise: ,
- Bookmark: ,
- BookSearch: ,
- Box: ,
- Bug: ,
- Camera: ,
- ChevronDown: ,
- ChevronRight: ,
- ChevronUp: ,
- Circle: ,
- Copy: ,
- CloudArrowUp: ,
- CloudArrowDown: ,
- Delete: ,
- Document: ,
- Folder: ,
- FullScreenMaximize: ,
- Info: ,
- Lightbulb: ,
- LightbulbFilament: ,
- Navigation: ,
- Orientation: ,
- PanelBottom: ,
- PersonFeedback: ,
- Phone: ,
- PhoneLaptop: ,
- PhoneSpeaker: ,
- Play: ,
- PlugConnected: ,
- PlugDisconnected: ,
- Power: ,
- Record: ,
- RotateLeft: ,
- RotateRight: ,
- Save: ,
- Settings: ,
- Speaker1: ,
- Speaker2: ,
- SpeakerOff: ,
- Stop: ,
- TextGrammarError: ,
- TextGrammarSettings: ,
- Wand: ,
- Warning: ,
- WifiSettings: ,
- WindowConsole: ,
- WindowDevTools: ,
-
- // Required by @fluentui/react
- Checkmark: ,
- StatusCircleCheckmark: ,
- ChevronUpSmall: ,
- ChevronDownSmall: ,
- CircleRing: ,
- More: ,
- SortUp: ,
- SortDown: ,
- Search: ,
- Filter: ,
-
- // Required by file manager page
- Document20: (
-
- ),
- },
- });
-}
-
-const Icons = {
- AddCircle: "AddCircle",
- ArrowClockwise: "ArrowClockwise",
- Bookmark: "Bookmark",
- BookSearch: "BookSearch",
- Box: "Box",
- Bug: "Bug",
- Camera: "Camera",
- Copy: "Copy",
- Circle: "Circle",
- ChevronDown: "ChevronDown",
- ChevronRight: "ChevronRight",
- ChevronUp: "ChevronUp",
- CloudArrowUp: "CloudArrowUp",
- CloudArrowDown: "CloudArrowDown",
- Delete: "Delete",
- Document: "Document",
- Folder: "Folder",
- FullScreenMaximize: "FullScreenMaximize",
- Lightbulb: "Lightbulb",
- LightbulbFilament: "LightbulbFilament",
- Info: "Info",
- Navigation: "Navigation",
- Orientation: "Orientation",
- PanelBottom: "PanelBottom",
- PersonFeedback: "PersonFeedback",
- Phone: "Phone",
- PhoneLaptop: "PhoneLaptop",
- PhoneSpeaker: "PhoneSpeaker",
- Play: "Play",
- PlugConnected: "PlugConnected",
- PlugDisconnected: "PlugDisconnected",
- Power: "Power",
- Record: "Record",
- RotateLeft: "RotateLeft",
- RotateRight: "RotateRight",
- Save: "Save",
- Settings: "Settings",
- Speaker1: "Speaker1",
- Speaker2: "Speaker2",
- SpeakerOff: "SpeakerOff",
- Stop: "Stop",
- TextGrammarError: "TextGrammarError",
- TextGrammarSettings: "TextGrammarSettings",
- Wand: "Wand",
- Warning: "Warning",
- WifiSettings: "WifiSettings",
- WindowConsole: "WindowConsole",
- WindowDevTools: "WindowDevTools",
-
- Document20: "Document20",
-};
-
-export default Icons;
diff --git a/apps/demo/src/utils/index.ts b/apps/demo/src/utils/index.ts
deleted file mode 100644
index 36b50e73..00000000
--- a/apps/demo/src/utils/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export * from './async-effect';
-export * from './file';
-export * from './file-size';
-export { default as Icons } from './icons';
-export * from './styles';
-export * from './with-display-name';
diff --git a/apps/demo/src/utils/styles.ts b/apps/demo/src/utils/styles.ts
deleted file mode 100644
index d48d0e14..00000000
--- a/apps/demo/src/utils/styles.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { AnimationClassNames, IStackProps } from "@fluentui/react";
-
-export const CommonStackTokens = { childrenGap: 8 };
-
-export const DefaultStackProps: IStackProps = {
- tokens: { childrenGap: 8, padding: 16 },
- verticalFill: true,
-};
-
-export const RouteStackProps: IStackProps = {
- ...DefaultStackProps,
- className: AnimationClassNames.slideUpIn10!,
- styles: { root: { overflow: 'auto', position: 'relative' } },
- disableShrink: true,
-};
diff --git a/apps/demo/src/utils/with-display-name.ts b/apps/demo/src/utils/with-display-name.ts
deleted file mode 100644
index 3c2fab45..00000000
--- a/apps/demo/src/utils/with-display-name.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import React, { memo, useCallback, useEffect, useRef } from 'react';
-
-export function withDisplayName(name: string) {
- return (Component: React.FunctionComponent ) => {
- Component.displayName = name;
- return memo(Component);
- };
-}
-
-export function forwardRef(name: string) {
- return (Component: React.ForwardRefRenderFunction) => {
- return withDisplayName(name)(React.forwardRef(Component));
- };
-}
-
-export function useStableCallback(callback: (...args: TArgs) => R): (...args: TArgs) => R {
- const ref = useRef<(...args: TArgs) => R>(callback);
-
- useEffect(() => {
- ref.current = callback;
- });
-
- const wrapper = useRef((...args: TArgs) => {
- return ref.current.apply(undefined, args);
- });
-
- return wrapper.current;
-}
diff --git a/apps/demo/streamsaver.d.ts b/apps/demo/streamsaver.d.ts
deleted file mode 100644
index ac85f640..00000000
--- a/apps/demo/streamsaver.d.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-declare module '@yume-chan/stream-saver' {
- type OriginalWriteableStream = typeof WritableStream;
-
- namespace StreamSaver {
- export interface Options {
- size?: number;
-
- pathname?: string;
-
- writableStrategy?: QueuingStrategy;
-
- readableStrategy?: QueuingStrategy;
- }
-
- export function createWriteStream(
- filename: string,
- options?: Options
- ): WritableStream;
- /** @deprecated */
- export function createWriteStream(
- filename: string,
- size?: number,
- strategy?: QueuingStrategy
- ): WritableStream;
- /** @deprecated */
- export function createWriteStream(
- filename: string,
- strategy?: QueuingStrategy
- ): WritableStream;
-
- export const WritableStream: OriginalWriteableStream;
-
- export const supported: true;
-
- export const version: { full: string; major: number, minor: number, dot: number; };
-
- export let mitm: string;
- }
-
- export = StreamSaver;
-}
diff --git a/apps/demo/tsconfig.json b/apps/demo/tsconfig.json
deleted file mode 100644
index 3a79f84c..00000000
--- a/apps/demo/tsconfig.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "compilerOptions": {
- "target": "ESNext",
- "lib": [
- "dom",
- "dom.iterable",
- "esnext",
- ],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "forceConsistentCasingInFileNames": true,
- "noEmit": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "node",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
- "incremental": true
- },
- "include": [
- "next-env.d.ts",
- "**/*.ts",
- "**/*.tsx",
- "**/*.js",
- "**/*.mjs"
- ],
- "exclude": [
- "node_modules"
- ]
-}
diff --git a/apps/demo/types/file-loader.d.ts b/apps/demo/types/file-loader.d.ts
deleted file mode 100644
index 37fbd007..00000000
--- a/apps/demo/types/file-loader.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-declare module "file-loader!*" {
- const url: string;
- export default url;
-}
diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml
index 5e8e8850..85585508 100644
--- a/common/config/rush/pnpm-lock.yaml
+++ b/common/config/rush/pnpm-lock.yaml
@@ -54,154 +54,6 @@ importers:
specifier: ^5.1.6
version: 5.1.6
- ../../apps/demo:
- dependencies:
- '@fluentui/react':
- specifier: ^8.110.7
- version: 8.110.7(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0)
- '@fluentui/react-file-type-icons':
- specifier: ^8.9.3
- version: 8.9.3(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/react-hooks':
- specifier: ^8.6.29
- version: 8.6.29(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/react-icons':
- specifier: ^2.0.206
- version: 2.0.206(react@18.2.0)
- '@fluentui/style-utilities':
- specifier: ^8.9.16
- version: 8.9.16(@types/react@18.2.14)(react@18.2.0)
- '@griffel/react':
- specifier: ^1.5.10
- version: 1.5.10(react@18.2.0)
- '@yume-chan/adb':
- specifier: workspace:^0.0.21
- version: link:../../libraries/adb
- '@yume-chan/adb-credential-web':
- specifier: workspace:^0.0.21
- version: link:../../libraries/adb-credential-web
- '@yume-chan/adb-daemon-direct-sockets':
- specifier: workspace:^0.0.9
- version: link:../../libraries/adb-daemon-direct-sockets
- '@yume-chan/adb-daemon-webusb':
- specifier: workspace:^0.0.21
- version: link:../../libraries/adb-daemon-webusb
- '@yume-chan/adb-daemon-ws':
- specifier: workspace:^0.0.9
- version: link:../../libraries/adb-daemon-ws
- '@yume-chan/adb-scrcpy':
- specifier: workspace:^0.0.21
- version: link:../../libraries/adb-scrcpy
- '@yume-chan/android-bin':
- specifier: workspace:^0.0.21
- version: link:../../libraries/android-bin
- '@yume-chan/aoa':
- specifier: workspace:^0.0.21
- version: link:../../libraries/aoa
- '@yume-chan/async':
- specifier: ^2.2.0
- version: 2.2.0
- '@yume-chan/b-tree':
- specifier: workspace:^0.0.21
- version: link:../../libraries/b-tree
- '@yume-chan/event':
- specifier: workspace:^0.0.21
- version: link:../../libraries/event
- '@yume-chan/fetch-scrcpy-server':
- specifier: workspace:^0.0.21
- version: link:../../libraries/fetch-scrcpy-server
- '@yume-chan/pcm-player':
- specifier: workspace:^0.0.21
- version: link:../../libraries/pcm-player
- '@yume-chan/scrcpy':
- specifier: workspace:^0.0.21
- version: link:../../libraries/scrcpy
- '@yume-chan/scrcpy-decoder-tinyh264':
- specifier: workspace:^0.0.21
- version: link:../../libraries/scrcpy-decoder-tinyh264
- '@yume-chan/scrcpy-decoder-webcodecs':
- specifier: workspace:^0.0.21
- version: link:../../libraries/scrcpy-decoder-webcodecs
- '@yume-chan/stream-extra':
- specifier: workspace:^0.0.21
- version: link:../../libraries/stream-extra
- '@yume-chan/stream-saver':
- specifier: ^2.0.6
- version: 2.0.6
- '@yume-chan/struct':
- specifier: workspace:^0.0.21
- version: link:../../libraries/struct
- '@yume-chan/tabby-launcher':
- specifier: workspace:^1.0.197-nightly.1
- version: link:../../libraries/tabby-launcher
- '@yume-chan/undici-browser':
- specifier: 5.22.1-mod.7
- version: 5.22.1-mod.7
- comlink:
- specifier: ^4.4.1
- version: 4.4.1
- fflate:
- specifier: ^0.7.4
- version: 0.7.4
- mobx:
- specifier: ^6.9.0
- version: 6.9.0
- mobx-react-lite:
- specifier: ^3.4.3
- version: 3.4.3(mobx@6.9.0)(react-dom@18.2.0)(react@18.2.0)
- next:
- specifier: 13.4.9
- version: 13.4.9(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0)
- react:
- specifier: ^18.2.0
- version: 18.2.0
- react-dom:
- specifier: ^18.2.0
- version: 18.2.0(react@18.2.0)
- webm-muxer:
- specifier: ^3.1.1
- version: 3.1.1
- devDependencies:
- '@mdx-js/loader':
- specifier: ^2.3.0
- version: 2.3.0(webpack@5.83.1)
- '@mdx-js/react':
- specifier: ^2.3.0
- version: 2.3.0(react@18.2.0)
- '@next/bundle-analyzer':
- specifier: ^13.4.9
- version: 13.4.9
- '@next/mdx':
- specifier: ^13.4.9
- version: 13.4.9(@mdx-js/loader@2.3.0)(@mdx-js/react@2.3.0)
- '@types/dom-webcodecs':
- specifier: ^0.1.8
- version: 0.1.8
- '@types/node':
- specifier: ^20.4.0
- version: 20.4.0
- '@types/react':
- specifier: 18.2.14
- version: 18.2.14
- '@yume-chan/next-pwa':
- specifier: 5.6.0-mod.2
- version: 5.6.0-mod.2(@babel/core@7.22.5)(next@13.4.9)(webpack@5.83.1)
- eslint:
- specifier: ^8.44.0
- version: 8.44.0
- eslint-config-next:
- specifier: 13.4.9
- version: 13.4.9(eslint@8.44.0)(typescript@5.1.6)
- prettier:
- specifier: ^3.0.0
- version: 3.0.0
- source-map-loader:
- specifier: ^4.0.1
- version: 4.0.1(webpack@5.83.1)
- typescript:
- specifier: ^5.1.6
- version: 5.1.6
-
../../libraries/adb:
dependencies:
'@yume-chan/async':
@@ -279,34 +131,6 @@ importers:
specifier: ^5.1.6
version: 5.1.6
- ../../libraries/adb-daemon-direct-sockets:
- dependencies:
- '@yume-chan/adb':
- specifier: workspace:^0.0.21
- version: link:../adb
- '@yume-chan/stream-extra':
- specifier: workspace:^0.0.21
- version: link:../stream-extra
- tslib:
- specifier: ^2.6.0
- version: 2.6.0
- devDependencies:
- '@yume-chan/eslint-config':
- specifier: workspace:^1.0.0
- version: link:../../toolchain/eslint-config
- '@yume-chan/tsconfig':
- specifier: workspace:^1.0.0
- version: link:../../toolchain/tsconfig
- eslint:
- specifier: ^8.44.0
- version: 8.44.0
- prettier:
- specifier: ^3.0.0
- version: 3.0.0
- typescript:
- specifier: ^5.1.6
- version: 5.1.6
-
../../libraries/adb-daemon-webusb:
dependencies:
'@types/w3c-web-usb':
@@ -341,37 +165,6 @@ importers:
specifier: ^5.1.6
version: 5.1.6
- ../../libraries/adb-daemon-ws:
- dependencies:
- '@yume-chan/adb':
- specifier: workspace:^0.0.21
- version: link:../adb
- '@yume-chan/stream-extra':
- specifier: workspace:^0.0.21
- version: link:../stream-extra
- tslib:
- specifier: ^2.6.0
- version: 2.6.0
- devDependencies:
- '@yume-chan/eslint-config':
- specifier: workspace:^1.0.0
- version: link:../../toolchain/eslint-config
- '@yume-chan/tsconfig':
- specifier: workspace:^1.0.0
- version: link:../../toolchain/tsconfig
- eslint:
- specifier: ^8.44.0
- version: 8.44.0
- jest:
- specifier: ^29.5.0
- version: 29.5.0(@types/node@20.4.0)
- prettier:
- specifier: ^3.0.0
- version: 3.0.0
- typescript:
- specifier: ^5.1.6
- version: 5.1.6
-
../../libraries/adb-scrcpy:
dependencies:
'@yume-chan/adb':
@@ -523,40 +316,6 @@ importers:
specifier: ^5.1.6
version: 5.1.6
- ../../libraries/b-tree:
- dependencies:
- tslib:
- specifier: ^2.6.0
- version: 2.6.0
- devDependencies:
- '@jest/globals':
- specifier: ^29.6.1
- version: 29.6.1
- '@yume-chan/eslint-config':
- specifier: workspace:^1.0.0
- version: link:../../toolchain/eslint-config
- '@yume-chan/tsconfig':
- specifier: workspace:^1.0.0
- version: link:../../toolchain/tsconfig
- cross-env:
- specifier: ^7.0.3
- version: 7.0.3
- eslint:
- specifier: ^8.44.0
- version: 8.44.0
- jest:
- specifier: ^29.5.0
- version: 29.5.0(@types/node@20.4.0)
- prettier:
- specifier: ^3.0.0
- version: 3.0.0
- ts-jest:
- specifier: ^29.1.1
- version: 29.1.1(@babel/core@7.22.5)(jest@29.5.0)(typescript@5.1.6)
- typescript:
- specifier: ^5.1.6
- version: 5.1.6
-
../../libraries/dataview-bigint-polyfill:
dependencies:
tslib:
@@ -890,250 +649,6 @@ importers:
specifier: ^5.1.6
version: 5.1.6
- ../../libraries/tabby-launcher:
- devDependencies:
- '@angular/animations':
- specifier: ^15.2.6
- version: 15.2.6(@angular/core@15.2.6)
- '@angular/cdk':
- specifier: ^15.2.6
- version: 15.2.6(@angular/common@15.2.6)(@angular/core@15.2.6)(rxjs@7.8.1)
- '@angular/common':
- specifier: ^15.2.6
- version: 15.2.6(@angular/core@15.2.6)(rxjs@7.8.1)
- '@angular/compiler':
- specifier: ^15.2.6
- version: 15.2.6(@angular/core@15.2.6)
- '@angular/compiler-cli':
- specifier: ^15.2.6
- version: 15.2.6(@angular/compiler@15.2.6)(typescript@5.1.6)
- '@angular/core':
- specifier: ^15.2.6
- version: 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- '@angular/forms':
- specifier: ^15.2.6
- version: 15.2.6(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1)
- '@angular/platform-browser':
- specifier: ^15.2.6
- version: 15.2.6(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)
- '@angular/platform-browser-dynamic':
- specifier: ^15.2.6
- version: 15.2.6(@angular/common@15.2.6)(@angular/compiler@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6)
- '@fortawesome/fontawesome-free':
- specifier: ^6.4.0
- version: 6.4.0
- '@ng-bootstrap/ng-bootstrap':
- specifier: ^14.1.1
- version: 14.1.1(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/localize@15.2.9)(@popperjs/core@2.11.6)(rxjs@7.8.1)
- '@popperjs/core':
- specifier: ^2.11.6
- version: 2.11.6
- '@types/js-yaml':
- specifier: ^4.0.5
- version: 4.0.5
- '@yume-chan/adb':
- specifier: workspace:^0.0.21
- version: link:../adb
- '@yume-chan/async':
- specifier: ^2.2.0
- version: 2.2.0
- '@yume-chan/stream-extra':
- specifier: workspace:^0.0.21
- version: link:../stream-extra
- '@yume-chan/tabby-tango':
- specifier: workspace:^0.0.19
- version: link:../tabby-tango
- buffer:
- specifier: ^6.0.3
- version: 6.0.3
- comlink:
- specifier: ^4.4.1
- version: 4.4.1
- console-browserify:
- specifier: ^1.2.0
- version: 1.2.0
- core-js:
- specifier: ^3.30.2
- version: 3.30.2
- crypto-browserify:
- specifier: ^3.12.0
- version: 3.12.0
- css-loader:
- specifier: ^6.7.4
- version: 6.7.4(webpack@5.83.1)
- deepmerge:
- specifier: ^4.2.2
- version: 4.2.2
- js-yaml:
- specifier: ^4.1.0
- version: 4.1.0
- ngx-toastr:
- specifier: ^16.0.2
- version: 16.0.2(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6)
- pako:
- specifier: ^2.1.0
- version: 2.1.0
- path-browserify:
- specifier: ^1.0.1
- version: 1.0.1
- querystring-es3:
- specifier: ^0.2.1
- version: 0.2.1
- readable-stream:
- specifier: ^4.4.0
- version: 4.4.0
- rxjs:
- specifier: ^7.8.1
- version: 7.8.1
- sass:
- specifier: ^1.62.1
- version: 1.62.1
- sass-loader:
- specifier: ^13.2.0
- version: 13.2.0(sass@1.62.1)(webpack@5.83.1)
- source-code-pro:
- specifier: ^2.38.0
- version: 2.38.0
- source-map-loader:
- specifier: ^4.0.1
- version: 4.0.1(webpack@5.83.1)
- source-sans-pro:
- specifier: 3.6.0
- version: 3.6.0
- style-loader:
- specifier: ^3.3.3
- version: 3.3.3(webpack@5.83.1)
- tabby-community-color-schemes:
- specifier: ^1.0.197-nightly.1
- version: 1.0.197-nightly.1(@angular/core@15.2.6)(tabby-core@1.0.197-nightly.1)(tabby-terminal@1.0.197-nightly.1)
- tabby-core:
- specifier: ^1.0.197-nightly.1
- version: 1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser-dynamic@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1)
- tabby-settings:
- specifier: ^1.0.197-nightly.1
- version: 1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser@15.2.6)(@ng-bootstrap/ng-bootstrap@14.1.1)(rxjs@7.8.1)(tabby-core@1.0.197-nightly.1)
- tabby-terminal:
- specifier: ^1.0.197-nightly.1
- version: 1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser@15.2.6)(@ng-bootstrap/ng-bootstrap@14.1.1)(rxjs@7.8.1)(tabby-core@1.0.197-nightly.1)(tabby-settings@1.0.197-nightly.1)
- tabby-web:
- specifier: ^1.0.197-nightly.1
- version: 1.0.197-nightly.1(@angular/core@15.2.6)
- ts-loader:
- specifier: ^9.4.4
- version: 9.4.4(typescript@5.1.6)(webpack@5.83.1)
- typescript:
- specifier: ^5.1.6
- version: 5.1.6
- url:
- specifier: ^0.11.0
- version: 0.11.0
- util:
- specifier: ^0.12.5
- version: 0.12.5
- webpack:
- specifier: ^5.83.1
- version: 5.83.1(webpack-cli@5.1.1)
- webpack-bundle-analyzer:
- specifier: ^4.7.0
- version: 4.7.0
- webpack-cli:
- specifier: ^5.1.1
- version: 5.1.1(webpack-bundle-analyzer@4.7.0)(webpack@5.83.1)
- zone.js:
- specifier: ^0.13.0
- version: 0.13.0
-
- ../../libraries/tabby-tango:
- dependencies:
- svg-inline-loader:
- specifier: ^0.8.2
- version: 0.8.2
- devDependencies:
- '@angular/animations':
- specifier: ^15.2.6
- version: 15.2.6(@angular/core@15.2.6)
- '@angular/common':
- specifier: ^15.2.6
- version: 15.2.6(@angular/core@15.2.6)(rxjs@7.8.1)
- '@angular/compiler':
- specifier: ^15.2.6
- version: 15.2.6(@angular/core@15.2.6)
- '@angular/compiler-cli':
- specifier: ^15.2.6
- version: 15.2.6(@angular/compiler@15.2.6)(typescript@5.1.6)
- '@angular/core':
- specifier: ^15.2.6
- version: 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- '@angular/forms':
- specifier: ^15.2.6
- version: 15.2.6(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1)
- '@angular/platform-browser':
- specifier: ^15.2.6
- version: 15.2.6(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)
- '@angular/platform-browser-dynamic':
- specifier: ^15.2.6
- version: 15.2.6(@angular/common@15.2.6)(@angular/compiler@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6)
- '@ng-bootstrap/ng-bootstrap':
- specifier: ^14.1.1
- version: 14.1.1(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/localize@15.2.9)(@popperjs/core@2.11.6)(rxjs@7.8.1)
- '@ngtools/webpack':
- specifier: ^15.2.5
- version: 15.2.5(@angular/compiler-cli@15.2.6)(typescript@5.1.6)(webpack@5.83.1)
- '@popperjs/core':
- specifier: ^2.11.6
- version: 2.11.6
- '@types/node':
- specifier: ^20.4.0
- version: 20.4.0
- '@types/webpack-env':
- specifier: ^1.16.0
- version: 1.16.0
- '@yume-chan/adb':
- specifier: workspace:^0.0.21
- version: link:../adb
- '@yume-chan/stream-extra':
- specifier: workspace:^0.0.21
- version: link:../stream-extra
- babel-loader:
- specifier: ^9.1.2
- version: 9.1.2(@babel/core@7.22.5)(webpack@5.83.1)
- mobx:
- specifier: ^6.9.0
- version: 6.9.0
- rxjs:
- specifier: ^7.8.1
- version: 7.8.1
- source-map-loader:
- specifier: ^4.0.1
- version: 4.0.1(webpack@5.83.1)
- tabby-core:
- specifier: ^1.0.197-nightly.1
- version: 1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser-dynamic@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1)
- tabby-settings:
- specifier: ^1.0.197-nightly.1
- version: 1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser@15.2.6)(@ng-bootstrap/ng-bootstrap@14.1.1)(rxjs@7.8.1)(tabby-core@1.0.197-nightly.1)
- tabby-terminal:
- specifier: ^1.0.197-nightly.1
- version: 1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser@15.2.6)(@ng-bootstrap/ng-bootstrap@14.1.1)(rxjs@7.8.1)(tabby-core@1.0.197-nightly.1)(tabby-settings@1.0.197-nightly.1)
- tslib:
- specifier: ^2.6.0
- version: 2.6.0
- typescript:
- specifier: ^5.1.6
- version: 5.1.6
- webpack:
- specifier: ^5.83.1
- version: 5.83.1(webpack-cli@5.1.1)
- webpack-bundle-analyzer:
- specifier: ^4.7.0
- version: 4.7.0
- webpack-cli:
- specifier: ^5.1.1
- version: 5.1.1(webpack-bundle-analyzer@4.7.0)(webpack@5.83.1)
- zone.js:
- specifier: ^0.13.0
- version: 0.13.0
-
../../toolchain/eslint-config:
dependencies:
'@rushstack/eslint-patch':
@@ -1177,169 +692,6 @@ packages:
dependencies:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.18
-
- /@angular/animations@15.2.6(@angular/core@15.2.6):
- resolution: {integrity: sha512-2fEhhj7xTzWHD61B502eXwDclsurkOK7CU+iRdl8EAtEobLRt62sG/XHmJ71UaaniWyI/H0sUSEJuF8TIPcaoQ==}
- engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0}
- peerDependencies:
- '@angular/core': 15.2.6
- dependencies:
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- tslib: 2.6.0
- dev: true
-
- /@angular/cdk@15.2.6(@angular/common@15.2.6)(@angular/core@15.2.6)(rxjs@7.8.1):
- resolution: {integrity: sha512-c6XFKMFowllHxb4tUt9en3bXBDqXKG2k4O9XGggJ1TL668d3Uhlk9qULywFNVWmNQSamkERmhFKAN4hEO3TPAQ==}
- peerDependencies:
- '@angular/common': ^15.0.0 || ^16.0.0
- '@angular/core': ^15.0.0 || ^16.0.0
- rxjs: ^6.5.3 || ^7.4.0
- dependencies:
- '@angular/common': 15.2.6(@angular/core@15.2.6)(rxjs@7.8.1)
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- rxjs: 7.8.1
- tslib: 2.6.0
- optionalDependencies:
- parse5: 7.1.2
- dev: true
-
- /@angular/common@15.2.6(@angular/core@15.2.6)(rxjs@7.8.1):
- resolution: {integrity: sha512-kPGJoSkFPXsIeHzcjlal8JC8/jYK9qAr+wv+HDX8O1J2FEzQjwoX4SYvpnvVk5WTqUkxMkRCTMu2YFAAmU1+qg==}
- engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0}
- peerDependencies:
- '@angular/core': 15.2.6
- rxjs: ^6.5.3 || ^7.4.0
- dependencies:
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- rxjs: 7.8.1
- tslib: 2.6.0
- dev: true
-
- /@angular/compiler-cli@15.2.6(@angular/compiler@15.2.6)(typescript@5.1.6):
- resolution: {integrity: sha512-GHwL4l+NkaUGGdypF+nMFWCmTqvGusTzIriIwpnp38wc8lpmVME2jVodB6sHAkrxFmaHXU/gOCDFK4AnOi6Gmw==}
- engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0}
- hasBin: true
- peerDependencies:
- '@angular/compiler': 15.2.6
- typescript: '>=4.8.2 <5.0'
- dependencies:
- '@angular/compiler': 15.2.6(@angular/core@15.2.6)
- '@babel/core': 7.19.3
- '@jridgewell/sourcemap-codec': 1.4.15
- chokidar: 3.5.3
- convert-source-map: 1.9.0
- dependency-graph: 0.11.0
- magic-string: 0.27.0
- reflect-metadata: 0.1.13
- semver: 7.5.3
- tslib: 2.6.0
- typescript: 5.1.6
- yargs: 17.7.2
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@angular/compiler@15.2.6(@angular/core@15.2.6):
- resolution: {integrity: sha512-6oBAIY5KcC1UNsrnWGLcopZ9RD7c0HzpTCQY46N6HytHtUjBvzLbGWZu5MfahPtIjKz9FMVYBX9hugcbVpWnTA==}
- engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0}
- peerDependencies:
- '@angular/core': 15.2.6
- peerDependenciesMeta:
- '@angular/core':
- optional: true
- dependencies:
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- tslib: 2.6.0
- dev: true
-
- /@angular/core@15.2.6(rxjs@7.8.1)(zone.js@0.13.0):
- resolution: {integrity: sha512-eN46OfSOLQGN6AciUvyHOJ8xQxmiEakkxJeoG1jwcSRXCjwSYYnQ/6drnhUpq5p43XXBAIduKfJXNztEPvLAkA==}
- engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0}
- peerDependencies:
- rxjs: ^6.5.3 || ^7.4.0
- zone.js: ~0.11.4 || ~0.12.0 || ~0.13.0
- dependencies:
- rxjs: 7.8.1
- tslib: 2.6.0
- zone.js: 0.13.0
- dev: true
-
- /@angular/forms@15.2.6(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1):
- resolution: {integrity: sha512-SdZxsE9MUOVMz0FjOwtx1RN/SGpObnAyZBqXNrN0c4BmJg+faJzvKIBBN102CKpWZOGRoq2YYrgxow9StMhxTw==}
- engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0}
- peerDependencies:
- '@angular/common': 15.2.6
- '@angular/core': 15.2.6
- '@angular/platform-browser': 15.2.6
- rxjs: ^6.5.3 || ^7.4.0
- dependencies:
- '@angular/common': 15.2.6(@angular/core@15.2.6)(rxjs@7.8.1)
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- '@angular/platform-browser': 15.2.6(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)
- rxjs: 7.8.1
- tslib: 2.6.0
- dev: true
-
- /@angular/localize@15.2.9(@angular/compiler-cli@15.2.6)(@angular/compiler@15.2.6):
- resolution: {integrity: sha512-7ZGK3BWwIukSK5ORWjM3y/FYj7/ZJFl1RO1GCeL/tHD4nq0kd3q3pYvcpnoi9HGl+q8AkL24xdsfzgCFo8SB0g==}
- engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0}
- hasBin: true
- peerDependencies:
- '@angular/compiler': 15.2.9
- '@angular/compiler-cli': 15.2.9
- dependencies:
- '@angular/compiler': 15.2.6(@angular/core@15.2.6)
- '@angular/compiler-cli': 15.2.6(@angular/compiler@15.2.6)(typescript@5.1.6)
- '@babel/core': 7.19.3
- glob: 8.1.0
- yargs: 17.7.2
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@angular/platform-browser-dynamic@15.2.6(@angular/common@15.2.6)(@angular/compiler@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6):
- resolution: {integrity: sha512-ZSyiigpxBWIM5f8t/a28Y3BCzHn1FtI2KsJysE7di5UUflOzwbxbfycVlpiZp0girbDYRyF18vvefvitNh17Gw==}
- engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0}
- peerDependencies:
- '@angular/common': 15.2.6
- '@angular/compiler': 15.2.6
- '@angular/core': 15.2.6
- '@angular/platform-browser': 15.2.6
- dependencies:
- '@angular/common': 15.2.6(@angular/core@15.2.6)(rxjs@7.8.1)
- '@angular/compiler': 15.2.6(@angular/core@15.2.6)
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- '@angular/platform-browser': 15.2.6(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)
- tslib: 2.6.0
- dev: true
-
- /@angular/platform-browser@15.2.6(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6):
- resolution: {integrity: sha512-8afckDEWfYf+cyxs2SboZBJkiCwFgYE8IH24RUW1t3zLC+wfrTr7UEfrCoD4YJRVJdqnPoRWN5gjz98n3n4zsA==}
- engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0}
- peerDependencies:
- '@angular/animations': 15.2.6
- '@angular/common': 15.2.6
- '@angular/core': 15.2.6
- peerDependenciesMeta:
- '@angular/animations':
- optional: true
- dependencies:
- '@angular/animations': 15.2.6(@angular/core@15.2.6)
- '@angular/common': 15.2.6(@angular/core@15.2.6)(rxjs@7.8.1)
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- tslib: 2.6.0
- dev: true
-
- /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0):
- resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==}
- engines: {node: '>=10'}
- peerDependencies:
- ajv: '>=8'
- dependencies:
- ajv: 8.12.0
- json-schema: 0.4.0
- jsonpointer: 5.0.1
- leven: 3.1.0
dev: true
/@babel/code-frame@7.22.5:
@@ -1347,32 +699,11 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/highlight': 7.22.5
+ dev: true
/@babel/compat-data@7.22.5:
resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==}
engines: {node: '>=6.9.0'}
-
- /@babel/core@7.19.3:
- resolution: {integrity: sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@ampproject/remapping': 2.2.1
- '@babel/code-frame': 7.22.5
- '@babel/generator': 7.22.5
- '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.19.3)
- '@babel/helper-module-transforms': 7.22.5
- '@babel/helpers': 7.22.5
- '@babel/parser': 7.22.5
- '@babel/template': 7.22.5
- '@babel/traverse': 7.22.5
- '@babel/types': 7.22.5
- convert-source-map: 1.9.0
- debug: 4.3.4
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.0
- transitivePeerDependencies:
- - supports-color
dev: true
/@babel/core@7.22.5:
@@ -1396,6 +727,7 @@ packages:
semver: 6.3.0
transitivePeerDependencies:
- supports-color
+ dev: true
/@babel/generator@7.22.5:
resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==}
@@ -1405,33 +737,6 @@ packages:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.18
jsesc: 2.5.2
-
- /@babel/helper-annotate-as-pure@7.22.5:
- resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
- dev: true
-
- /@babel/helper-builder-binary-assignment-operator-visitor@7.22.5:
- resolution: {integrity: sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
- dev: true
-
- /@babel/helper-compilation-targets@7.22.5(@babel/core@7.19.3):
- resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/compat-data': 7.22.5
- '@babel/core': 7.19.3
- '@babel/helper-validator-option': 7.22.5
- browserslist: 4.21.9
- lru-cache: 5.1.1
- semver: 6.3.0
dev: true
/@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5):
@@ -1446,58 +751,12 @@ packages:
browserslist: 4.21.9
lru-cache: 5.1.1
semver: 6.3.0
-
- /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-environment-visitor': 7.22.5
- '@babel/helper-function-name': 7.22.5
- '@babel/helper-member-expression-to-functions': 7.22.5
- '@babel/helper-optimise-call-expression': 7.22.5
- '@babel/helper-replace-supers': 7.22.5
- '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.5
- semver: 6.3.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-annotate-as-pure': 7.22.5
- regexpu-core: 5.3.2
- semver: 6.3.0
- dev: true
-
- /@babel/helper-define-polyfill-provider@0.4.0(@babel/core@7.22.5):
- resolution: {integrity: sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==}
- peerDependencies:
- '@babel/core': ^7.4.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- debug: 4.3.4
- lodash.debounce: 4.0.8
- resolve: 1.22.2
- semver: 6.3.0
- transitivePeerDependencies:
- - supports-color
dev: true
/@babel/helper-environment-visitor@7.22.5:
resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==}
engines: {node: '>=6.9.0'}
+ dev: true
/@babel/helper-function-name@7.22.5:
resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==}
@@ -1505,18 +764,13 @@ packages:
dependencies:
'@babel/template': 7.22.5
'@babel/types': 7.22.5
+ dev: true
/@babel/helper-hoist-variables@7.22.5:
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.22.5
-
- /@babel/helper-member-expression-to-functions@7.22.5:
- resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
dev: true
/@babel/helper-module-imports@7.22.5:
@@ -1524,6 +778,7 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.22.5
+ dev: true
/@babel/helper-module-transforms@7.22.5:
resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==}
@@ -1539,12 +794,6 @@ packages:
'@babel/types': 7.22.5
transitivePeerDependencies:
- supports-color
-
- /@babel/helper-optimise-call-expression@7.22.5:
- resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
dev: true
/@babel/helper-plugin-utils@7.22.5:
@@ -1552,46 +801,11 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
- /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-environment-visitor': 7.22.5
- '@babel/helper-wrap-function': 7.22.5
- '@babel/types': 7.22.5
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/helper-replace-supers@7.22.5:
- resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-environment-visitor': 7.22.5
- '@babel/helper-member-expression-to-functions': 7.22.5
- '@babel/helper-optimise-call-expression': 7.22.5
- '@babel/template': 7.22.5
- '@babel/traverse': 7.22.5
- '@babel/types': 7.22.5
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/@babel/helper-simple-access@7.22.5:
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.22.5
-
- /@babel/helper-skip-transparent-expression-wrappers@7.22.5:
- resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.22.5
dev: true
/@babel/helper-split-export-declaration@7.22.5:
@@ -1599,29 +813,21 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.22.5
+ dev: true
/@babel/helper-string-parser@7.22.5:
resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
engines: {node: '>=6.9.0'}
+ dev: true
/@babel/helper-validator-identifier@7.22.5:
resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
engines: {node: '>=6.9.0'}
+ dev: true
/@babel/helper-validator-option@7.22.5:
resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==}
engines: {node: '>=6.9.0'}
-
- /@babel/helper-wrap-function@7.22.5:
- resolution: {integrity: sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-function-name': 7.22.5
- '@babel/template': 7.22.5
- '@babel/traverse': 7.22.5
- '@babel/types': 7.22.5
- transitivePeerDependencies:
- - supports-color
dev: true
/@babel/helpers@7.22.5:
@@ -1633,6 +839,7 @@ packages:
'@babel/types': 7.22.5
transitivePeerDependencies:
- supports-color
+ dev: true
/@babel/highlight@7.22.5:
resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==}
@@ -1641,52 +848,12 @@ packages:
'@babel/helper-validator-identifier': 7.22.5
chalk: 2.4.2
js-tokens: 4.0.0
+ dev: true
/@babel/parser@7.22.5:
resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==}
engines: {node: '>=6.0.0'}
hasBin: true
-
- /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.13.0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.22.5)
- dev: true
-
- /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5):
- resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- dev: true
-
- /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5):
- resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==}
- engines: {node: '>=4'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
dev: true
/@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5):
@@ -1716,54 +883,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.5):
- resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.5):
- resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5):
resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
peerDependencies:
@@ -1846,16 +965,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
/@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5):
resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
engines: {node: '>=6.9.0'}
@@ -1876,687 +985,6 @@ packages:
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.5):
- resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-async-generator-functions@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-environment-visitor': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5)
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-module-imports': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.5)
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.12.0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5)
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/plugin-transform-classes@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-environment-visitor': 7.22.5
- '@babel/helper-function-name': 7.22.5
- '@babel/helper-optimise-call-expression': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-replace-supers': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.5
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/template': 7.22.5
- dev: true
-
- /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5)
- dev: true
-
- /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5)
- dev: true
-
- /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-function-name': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5)
- dev: true
-
- /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5)
- dev: true
-
- /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-module-transforms': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-module-transforms': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-simple-access': 7.22.5
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-hoist-variables': 7.22.5
- '@babel/helper-module-transforms': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-validator-identifier': 7.22.5
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-module-transforms': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5)
- dev: true
-
- /@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5)
- dev: true
-
- /@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/compat-data': 7.22.5
- '@babel/core': 7.22.5
- '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5)
- '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5)
- dev: true
-
- /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-replace-supers': 7.22.5
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5)
- dev: true
-
- /@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5)
- dev: true
-
- /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5)
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- regenerator-transform: 0.15.1
- dev: true
-
- /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- dev: true
-
- /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- dev: true
-
- /@babel/preset-env@7.22.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/compat-data': 7.22.5
- '@babel/core': 7.22.5
- '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5)
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-validator-option': 7.22.5
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5)
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5)
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5)
- '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5)
- '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5)
- '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5)
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5)
- '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.5)
- '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-async-generator-functions': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-class-static-block': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-dynamic-import': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-export-namespace-from': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-json-strings': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-logical-assignment-operators': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-numeric-separator': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-object-rest-spread': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-optional-catch-binding': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-private-property-in-object': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.5)
- '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.5)
- '@babel/preset-modules': 0.1.5(@babel/core@7.22.5)
- '@babel/types': 7.22.5
- babel-plugin-polyfill-corejs2: 0.4.3(@babel/core@7.22.5)
- babel-plugin-polyfill-corejs3: 0.8.1(@babel/core@7.22.5)
- babel-plugin-polyfill-regenerator: 0.5.0(@babel/core@7.22.5)
- core-js-compat: 3.31.0
- semver: 6.3.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/preset-modules@0.1.5(@babel/core@7.22.5):
- resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5)
- '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.5)
- '@babel/types': 7.22.5
- esutils: 2.0.3
- dev: true
-
- /@babel/regjsgen@0.8.0:
- resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
- dev: true
-
- /@babel/runtime@7.22.5:
- resolution: {integrity: sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==}
- engines: {node: '>=6.9.0'}
- dependencies:
- regenerator-runtime: 0.13.11
-
/@babel/template@7.22.5:
resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==}
engines: {node: '>=6.9.0'}
@@ -2564,6 +992,7 @@ packages:
'@babel/code-frame': 7.22.5
'@babel/parser': 7.22.5
'@babel/types': 7.22.5
+ dev: true
/@babel/traverse@7.22.5:
resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==}
@@ -2581,6 +1010,7 @@ packages:
globals: 11.12.0
transitivePeerDependencies:
- supports-color
+ dev: true
/@babel/types@7.22.5:
resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==}
@@ -2589,20 +1019,12 @@ packages:
'@babel/helper-string-parser': 7.22.5
'@babel/helper-validator-identifier': 7.22.5
to-fast-properties: 2.0.0
+ dev: true
/@bcoe/v8-coverage@0.2.3:
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
dev: true
- /@discoveryjs/json-ext@0.5.7:
- resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
- engines: {node: '>=10.0.0'}
- dev: true
-
- /@emotion/hash@0.9.1:
- resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==}
- dev: false
-
/@eslint-community/eslint-utils@4.4.0(eslint@8.44.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -2636,238 +1058,6 @@ packages:
resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- /@fluentui/date-time-utilities@8.5.13:
- resolution: {integrity: sha512-X3clbPKh0URkDj21QoARw6SNec7dWg7Gt7SkTlkVYFzmZUdC4ZIrYk3n36xKe3U1wcGp26EVmKjhAhB262ugpw==}
- dependencies:
- '@fluentui/set-version': 8.2.11
- tslib: 2.6.0
- dev: false
-
- /@fluentui/dom-utilities@2.2.11:
- resolution: {integrity: sha512-2tXfg7/9PXu9nfU72/P3o3waHEFEQtHUfQbVexUaYqNNAxMj6sOfsqpUx4vd5nPgO+grSWrl+spqlLN2yej51w==}
- dependencies:
- '@fluentui/set-version': 8.2.11
- tslib: 2.6.0
- dev: false
-
- /@fluentui/font-icons-mdl2@8.5.23(@types/react@18.2.14)(react@18.2.0):
- resolution: {integrity: sha512-jZjUtfQm9/84jX34zhwwsoZME86xXXgKAgBYuMvRStKzXGdZcd7YSOlmuT8lbISmtFL/SWwUGOEal1nLCUNeNA==}
- dependencies:
- '@fluentui/set-version': 8.2.11
- '@fluentui/style-utilities': 8.9.16(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/utilities': 8.13.18(@types/react@18.2.14)(react@18.2.0)
- tslib: 2.6.0
- transitivePeerDependencies:
- - '@types/react'
- - react
- dev: false
-
- /@fluentui/foundation-legacy@8.2.43(@types/react@18.2.14)(react@18.2.0):
- resolution: {integrity: sha512-rXr71KxNcWDH2LmTsFZbP75p8HssLlVLaFAqEdLE+sKf/LNKmqkDVTNhDbHZxzxy0QnguI4aNHcyGhMZUH3MPA==}
- peerDependencies:
- '@types/react': '>=16.8.0 <19.0.0'
- react: '>=16.8.0 <19.0.0'
- dependencies:
- '@fluentui/merge-styles': 8.5.12
- '@fluentui/set-version': 8.2.11
- '@fluentui/style-utilities': 8.9.16(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/utilities': 8.13.18(@types/react@18.2.14)(react@18.2.0)
- '@types/react': 18.2.14
- react: 18.2.0
- tslib: 2.6.0
- dev: false
-
- /@fluentui/keyboard-key@0.4.11:
- resolution: {integrity: sha512-TVB/EloWado9AVp1niChgcdDOQAHGP5B30Dinmtfe7zi8OnstwPoxwFP6dHJDdpLQ6ZEUTaEHViSzvewl7Chag==}
- dependencies:
- tslib: 2.6.0
- dev: false
-
- /@fluentui/merge-styles@8.5.12:
- resolution: {integrity: sha512-ZnUo0YuMP7AYi68dkknFqVxopIAgbrUnqR/MZlemmRvBYyy1SMj1WQeHcoiLFA8mF8YKn7B+jxQgJbN2bfcrRw==}
- dependencies:
- '@fluentui/set-version': 8.2.11
- tslib: 2.6.0
- dev: false
-
- /@fluentui/react-file-type-icons@8.9.3(@types/react@18.2.14)(react@18.2.0):
- resolution: {integrity: sha512-nos8Fy8e/JSenf5SQbUoDVcEjV0xbnJ5Nzm6X6KBhdXluvwBVY657zms5gSc3flDqtZjYVtbL2DvVuXM1hlliw==}
- peerDependencies:
- '@types/react': '>=16.8.0 <19.0.0'
- react: '>=16.8.0 <19.0.0'
- dependencies:
- '@fluentui/set-version': 8.2.11
- '@fluentui/style-utilities': 8.9.16(@types/react@18.2.14)(react@18.2.0)
- '@types/react': 18.2.14
- react: 18.2.0
- tslib: 2.6.0
- dev: false
-
- /@fluentui/react-focus@8.8.30(@types/react@18.2.14)(react@18.2.0):
- resolution: {integrity: sha512-dKQQtNTZbQOE+u/Tmh7AbtJPSpzQNI0L8o55a22y4U7s33rizUd++CIiToXsB+bPvlotcmpZswZQ8V06zM4KIw==}
- peerDependencies:
- '@types/react': '>=16.8.0 <19.0.0'
- react: '>=16.8.0 <19.0.0'
- dependencies:
- '@fluentui/keyboard-key': 0.4.11
- '@fluentui/merge-styles': 8.5.12
- '@fluentui/set-version': 8.2.11
- '@fluentui/style-utilities': 8.9.16(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/utilities': 8.13.18(@types/react@18.2.14)(react@18.2.0)
- '@types/react': 18.2.14
- react: 18.2.0
- tslib: 2.6.0
- dev: false
-
- /@fluentui/react-hooks@8.6.29(@types/react@18.2.14)(react@18.2.0):
- resolution: {integrity: sha512-MeVevmGJtrYxdhoarrkVWE0Hs4XdzOc9A3tiOjMBIcwOvoOYOAoOELoHK/wuulPVwUn2R9Y+7JpJ6oCe4ImdJw==}
- peerDependencies:
- '@types/react': '>=16.8.0 <19.0.0'
- react: '>=16.8.0 <19.0.0'
- dependencies:
- '@fluentui/react-window-provider': 2.2.15(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/set-version': 8.2.11
- '@fluentui/utilities': 8.13.18(@types/react@18.2.14)(react@18.2.0)
- '@types/react': 18.2.14
- react: 18.2.0
- tslib: 2.6.0
- dev: false
-
- /@fluentui/react-icons@2.0.206(react@18.2.0):
- resolution: {integrity: sha512-Hq+QCAQbmIR8Pi7eihNQQgV3NmBcNP7j0Px1gBusgqK+RfttE0ubLym3SwQ3/Zz4neaDgAa9QKoArgEt3HorvA==}
- peerDependencies:
- react: '>=16.8.0 <19.0.0'
- dependencies:
- '@griffel/react': 1.5.10(react@18.2.0)
- react: 18.2.0
- tslib: 2.6.0
- dev: false
-
- /@fluentui/react-portal-compat-context@9.0.6(@types/react@18.2.14)(react@18.2.0):
- resolution: {integrity: sha512-HUt0/YXKRB4chtzlGbZ+7y7FHFyqaI0CeMFAe/QBXVOiOwA01QOr2j4Uky+30vupspIt6mjodLanuw1jMybmqQ==}
- peerDependencies:
- '@types/react': '>=16.8.0 <19.0.0'
- react: '>=16.8.0 <19.0.0'
- dependencies:
- '@swc/helpers': 0.4.14
- '@types/react': 18.2.14
- react: 18.2.0
- dev: false
-
- /@fluentui/react-window-provider@2.2.15(@types/react@18.2.14)(react@18.2.0):
- resolution: {integrity: sha512-RraWvRe7wakpPJRBX2tlCV/cybOKiqLJ1UBLPNf5xq7ZIs0T0g/hh3G3Zb5teOeipjuRnl6srkdDUT9Dy9wrBg==}
- peerDependencies:
- '@types/react': '>=16.8.0 <19.0.0'
- react: '>=16.8.0 <19.0.0'
- dependencies:
- '@fluentui/set-version': 8.2.11
- '@types/react': 18.2.14
- react: 18.2.0
- tslib: 2.6.0
- dev: false
-
- /@fluentui/react@8.110.7(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-3sn4HZL10jghiYFF+Ouc7pNDJ5pR2ueU6ZY1IdmVFgYXTJJ/IwQhVc37mXVf8VoUM7hF4vRcGE4z+loNTpTX0w==}
- peerDependencies:
- '@types/react': '>=16.8.0 <19.0.0'
- '@types/react-dom': '>=16.8.0 <19.0.0'
- react: '>=16.8.0 <19.0.0'
- react-dom: '>=16.8.0 <19.0.0'
- dependencies:
- '@fluentui/date-time-utilities': 8.5.13
- '@fluentui/font-icons-mdl2': 8.5.23(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/foundation-legacy': 8.2.43(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/merge-styles': 8.5.12
- '@fluentui/react-focus': 8.8.30(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/react-hooks': 8.6.29(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/react-portal-compat-context': 9.0.6(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/react-window-provider': 2.2.15(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/set-version': 8.2.11
- '@fluentui/style-utilities': 8.9.16(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/theme': 2.6.34(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/utilities': 8.13.18(@types/react@18.2.14)(react@18.2.0)
- '@microsoft/load-themed-styles': 1.10.295
- '@types/react': 18.2.14
- '@types/react-dom': 18.2.6
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- tslib: 2.6.0
- dev: false
-
- /@fluentui/set-version@8.2.11:
- resolution: {integrity: sha512-UI03tysau/adBO1a3q4uFZWQ3lfkiFcAWIFng4k5odWcCokfCm5IxA0urKqj5W5JRYdyoBUaq8QbcNGkFB4dCw==}
- dependencies:
- tslib: 2.6.0
- dev: false
-
- /@fluentui/style-utilities@8.9.16(@types/react@18.2.14)(react@18.2.0):
- resolution: {integrity: sha512-8hS5HscCFYvcWjAdk37frPZJZthr7f/cu5db7gjrPy+DEhf13WAZRHsropWm17+8GhJhvKt98BQf/Kzxtt34Eg==}
- dependencies:
- '@fluentui/merge-styles': 8.5.12
- '@fluentui/set-version': 8.2.11
- '@fluentui/theme': 2.6.34(@types/react@18.2.14)(react@18.2.0)
- '@fluentui/utilities': 8.13.18(@types/react@18.2.14)(react@18.2.0)
- '@microsoft/load-themed-styles': 1.10.295
- tslib: 2.6.0
- transitivePeerDependencies:
- - '@types/react'
- - react
- dev: false
-
- /@fluentui/theme@2.6.34(@types/react@18.2.14)(react@18.2.0):
- resolution: {integrity: sha512-2Ssi3sX2snnbPJ4PmxbpCDCGePRE36tvGj2qKgdKiSh/fPVsg1b+Q50YlpFl9sXmbhl1uFmxjAx6WPsVGTl7vQ==}
- peerDependencies:
- '@types/react': '>=16.8.0 <19.0.0'
- react: '>=16.8.0 <19.0.0'
- dependencies:
- '@fluentui/merge-styles': 8.5.12
- '@fluentui/set-version': 8.2.11
- '@fluentui/utilities': 8.13.18(@types/react@18.2.14)(react@18.2.0)
- '@types/react': 18.2.14
- react: 18.2.0
- tslib: 2.6.0
- dev: false
-
- /@fluentui/utilities@8.13.18(@types/react@18.2.14)(react@18.2.0):
- resolution: {integrity: sha512-/0rX9EzltLKwU1SS14VV7agWoOzruVTU3oagZq1QgFAvoj8qi7fNqvSX/VEeRy+0gmbsCkrEViUPkmC7drKzPg==}
- peerDependencies:
- '@types/react': '>=16.8.0 <19.0.0'
- react: '>=16.8.0 <19.0.0'
- dependencies:
- '@fluentui/dom-utilities': 2.2.11
- '@fluentui/merge-styles': 8.5.12
- '@fluentui/set-version': 8.2.11
- '@types/react': 18.2.14
- react: 18.2.0
- tslib: 2.6.0
- dev: false
-
- /@fortawesome/fontawesome-free@6.4.0:
- resolution: {integrity: sha512-0NyytTlPJwB/BF5LtRV8rrABDbe3TdTXqNB3PdZ+UUUZAEIrdOJdmABqKjt4AXwIoJNaRVVZEXxpNrqvE1GAYQ==}
- engines: {node: '>=6'}
- requiresBuild: true
- dev: true
-
- /@griffel/core@1.12.2:
- resolution: {integrity: sha512-+bvOWh0cCtB0S92a5VD4C00DBjx8qB+5ZBTb4WTj9ZhUP10wVLjLaoLdBPw7vdqnnaT1VzLZV4e9ye8OQjHKLA==}
- dependencies:
- '@emotion/hash': 0.9.1
- csstype: 3.1.2
- rtl-css-js: 1.16.1
- stylis: 4.3.0
- tslib: 2.6.0
- dev: false
-
- /@griffel/react@1.5.10(react@18.2.0):
- resolution: {integrity: sha512-3V8PUCapgifoGqwbTBs/PR0MHgCt+PkfDmTTv4Ctfg0Pxrj8wSRWMourvlwLHJqqd9NPNxiklZlrDG+ELS6Zxg==}
- peerDependencies:
- react: '>=16.8.0 <19.0.0'
- dependencies:
- '@griffel/core': 1.12.2
- react: 18.2.0
- tslib: 2.6.0
- dev: false
-
/@humanwhocodes/config-array@0.11.10:
resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==}
engines: {node: '>=10.10.0'}
@@ -3182,217 +1372,31 @@ packages:
'@jridgewell/set-array': 1.1.2
'@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/trace-mapping': 0.3.18
+ dev: true
/@jridgewell/resolve-uri@3.1.0:
resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
engines: {node: '>=6.0.0'}
+ dev: true
/@jridgewell/set-array@1.1.2:
resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
engines: {node: '>=6.0.0'}
-
- /@jridgewell/source-map@0.3.4:
- resolution: {integrity: sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw==}
dev: true
/@jridgewell/sourcemap-codec@1.4.14:
resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
+ dev: true
/@jridgewell/sourcemap-codec@1.4.15:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+ dev: true
/@jridgewell/trace-mapping@0.3.18:
resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
dependencies:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.14
-
- /@mdx-js/loader@2.3.0(webpack@5.83.1):
- resolution: {integrity: sha512-IqsscXh7Q3Rzb+f5DXYk0HU71PK+WuFsEhf+mSV3fOhpLcEpgsHvTQ2h0T6TlZ5gHOaBeFjkXwB52by7ypMyNg==}
- peerDependencies:
- webpack: '>=4'
- dependencies:
- '@mdx-js/mdx': 2.3.0
- source-map: 0.7.4
- webpack: 5.83.1(webpack-cli@5.1.1)
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@mdx-js/mdx@2.3.0:
- resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==}
- dependencies:
- '@types/estree-jsx': 1.0.0
- '@types/mdx': 2.0.5
- estree-util-build-jsx: 2.2.2
- estree-util-is-identifier-name: 2.1.0
- estree-util-to-js: 1.2.0
- estree-walker: 3.0.3
- hast-util-to-estree: 2.3.3
- markdown-extensions: 1.1.1
- periscopic: 3.1.0
- remark-mdx: 2.3.0
- remark-parse: 10.0.2
- remark-rehype: 10.1.0
- unified: 10.1.2
- unist-util-position-from-estree: 1.1.2
- unist-util-stringify-position: 3.0.3
- unist-util-visit: 4.1.2
- vfile: 5.3.7
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@mdx-js/react@2.3.0(react@18.2.0):
- resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==}
- peerDependencies:
- react: '>=16'
- dependencies:
- '@types/mdx': 2.0.5
- '@types/react': 18.2.14
- react: 18.2.0
- dev: true
-
- /@microsoft/load-themed-styles@1.10.295:
- resolution: {integrity: sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==}
- dev: false
-
- /@next/bundle-analyzer@13.4.9:
- resolution: {integrity: sha512-T/nSgXmhAx8Wy2qPGr9P3AcLwlFCMbA7DuYNCm7BdF10Sk74S0bJ1b3ygq+306dBwKRWV5Lj80sYzWzZ5/rwgQ==}
- dependencies:
- webpack-bundle-analyzer: 4.7.0
- transitivePeerDependencies:
- - bufferutil
- - utf-8-validate
- dev: true
-
- /@next/env@13.4.9:
- resolution: {integrity: sha512-vuDRK05BOKfmoBYLNi2cujG2jrYbEod/ubSSyqgmEx9n/W3eZaJQdRNhTfumO+qmq/QTzLurW487n/PM/fHOkw==}
-
- /@next/eslint-plugin-next@13.4.9:
- resolution: {integrity: sha512-nDtGpa992tNyAkT/KmSMy7QkHfNZmGCBYhHtafU97DubqxzNdvLsqRtliQ4FU04CysRCtvP2hg8rRC1sAKUTUA==}
- dependencies:
- glob: 7.1.7
- dev: true
-
- /@next/mdx@13.4.9(@mdx-js/loader@2.3.0)(@mdx-js/react@2.3.0):
- resolution: {integrity: sha512-6ALqgOUsHWFWCl5LaYM96RzjBb/+Ca8IxVLhyZ4ukOZkFlYXInJmVLZhXWDxes7b8iVMMKZNgvNJR9dKLaGAQw==}
- peerDependencies:
- '@mdx-js/loader': '>=0.15.0'
- '@mdx-js/react': '>=0.15.0'
- peerDependenciesMeta:
- '@mdx-js/loader':
- optional: true
- '@mdx-js/react':
- optional: true
- dependencies:
- '@mdx-js/loader': 2.3.0(webpack@5.83.1)
- '@mdx-js/react': 2.3.0(react@18.2.0)
- source-map: 0.7.4
- dev: true
-
- /@next/swc-darwin-arm64@13.4.9:
- resolution: {integrity: sha512-TVzGHpZoVBk3iDsTOQA/R6MGmFp0+17SWXMEWd6zG30AfuELmSSMe2SdPqxwXU0gbpWkJL1KgfLzy5ReN0crqQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [darwin]
- requiresBuild: true
- optional: true
-
- /@next/swc-darwin-x64@13.4.9:
- resolution: {integrity: sha512-aSfF1fhv28N2e7vrDZ6zOQ+IIthocfaxuMWGReB5GDriF0caTqtHttAvzOMgJgXQtQx6XhyaJMozLTSEXeNN+A==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [darwin]
- requiresBuild: true
- optional: true
-
- /@next/swc-linux-arm64-gnu@13.4.9:
- resolution: {integrity: sha512-JhKoX5ECzYoTVyIy/7KykeO4Z2lVKq7HGQqvAH+Ip9UFn1MOJkOnkPRB7v4nmzqAoY+Je05Aj5wNABR1N18DMg==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- optional: true
-
- /@next/swc-linux-arm64-musl@13.4.9:
- resolution: {integrity: sha512-OOn6zZBIVkm/4j5gkPdGn4yqQt+gmXaLaSjRSO434WplV8vo2YaBNbSHaTM9wJpZTHVDYyjzuIYVEzy9/5RVZw==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- optional: true
-
- /@next/swc-linux-x64-gnu@13.4.9:
- resolution: {integrity: sha512-iA+fJXFPpW0SwGmx/pivVU+2t4zQHNOOAr5T378PfxPHY6JtjV6/0s1vlAJUdIHeVpX98CLp9k5VuKgxiRHUpg==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- optional: true
-
- /@next/swc-linux-x64-musl@13.4.9:
- resolution: {integrity: sha512-rlNf2WUtMM+GAQrZ9gMNdSapkVi3koSW3a+dmBVp42lfugWVvnyzca/xJlN48/7AGx8qu62WyO0ya1ikgOxh6A==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- optional: true
-
- /@next/swc-win32-arm64-msvc@13.4.9:
- resolution: {integrity: sha512-5T9ybSugXP77nw03vlgKZxD99AFTHaX8eT1ayKYYnGO9nmYhJjRPxcjU5FyYI+TdkQgEpIcH7p/guPLPR0EbKA==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [win32]
- requiresBuild: true
- optional: true
-
- /@next/swc-win32-ia32-msvc@13.4.9:
- resolution: {integrity: sha512-ojZTCt1lP2ucgpoiFgrFj07uq4CZsq4crVXpLGgQfoFq00jPKRPgesuGPaz8lg1yLfvafkU3Jd1i8snKwYR3LA==}
- engines: {node: '>= 10'}
- cpu: [ia32]
- os: [win32]
- requiresBuild: true
- optional: true
-
- /@next/swc-win32-x64-msvc@13.4.9:
- resolution: {integrity: sha512-QbT03FXRNdpuL+e9pLnu+XajZdm/TtIXVYY4lA9t+9l0fLZbHXDYEKitAqxrOj37o3Vx5ufxiRAniaIebYDCgw==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [win32]
- requiresBuild: true
- optional: true
-
- /@ng-bootstrap/ng-bootstrap@14.1.1(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/localize@15.2.9)(@popperjs/core@2.11.6)(rxjs@7.8.1):
- resolution: {integrity: sha512-3EIc+lCmqUlr7sghzx0r28sjk771zvyqe3SXkrT7grYFzQCVbjtms6Wr9OPbdbmpqDNXG6a8llUoyVgtp1B2Tg==}
- peerDependencies:
- '@angular/common': ^15.0.0
- '@angular/core': ^15.0.0
- '@angular/forms': ^15.0.0
- '@angular/localize': ^15.0.0
- '@popperjs/core': ^2.11.6
- rxjs: ^6.5.3 || ^7.4.0
- dependencies:
- '@angular/common': 15.2.6(@angular/core@15.2.6)(rxjs@7.8.1)
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- '@angular/forms': 15.2.6(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1)
- '@angular/localize': 15.2.9(@angular/compiler-cli@15.2.6)(@angular/compiler@15.2.6)
- '@popperjs/core': 2.11.6
- rxjs: 7.8.1
- tslib: 2.6.0
- dev: true
-
- /@ngtools/webpack@15.2.5(@angular/compiler-cli@15.2.6)(typescript@5.1.6)(webpack@5.83.1):
- resolution: {integrity: sha512-wD6GY4xghVK+SQL0dy/M3saGx5pqi7+1VHEr+BBI7IUNYGSqPNzylKNxLBgQiTzfkzvbrZ6MhfaMNkhvSCYr5w==}
- engines: {node: ^14.20.0 || ^16.13.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
- peerDependencies:
- '@angular/compiler-cli': ^15.0.0
- typescript: '>=4.8.2 <5.0'
- webpack: ^5.54.0
- dependencies:
- '@angular/compiler-cli': 15.2.6(@angular/compiler@15.2.6)(typescript@5.1.6)
- typescript: 5.1.6
- webpack: 5.83.1(webpack-cli@5.1.1)
dev: true
/@nodelib/fs.scandir@2.1.5:
@@ -3413,82 +1417,9 @@ packages:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.15.0
- /@pkgr/utils@2.4.1:
- resolution: {integrity: sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==}
- engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
- dependencies:
- cross-spawn: 7.0.3
- fast-glob: 3.3.0
- is-glob: 4.0.3
- open: 9.1.0
- picocolors: 1.0.0
- tslib: 2.6.0
- dev: true
-
- /@polka/url@1.0.0-next.21:
- resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
- dev: true
-
- /@popperjs/core@2.11.6:
- resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==}
- dev: true
-
- /@rollup/plugin-babel@5.3.1(@babel/core@7.22.5)(rollup@2.79.1):
- resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==}
- engines: {node: '>= 10.0.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
- '@types/babel__core': ^7.1.9
- rollup: ^1.20.0||^2.0.0
- peerDependenciesMeta:
- '@types/babel__core':
- optional: true
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-module-imports': 7.22.5
- '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
- rollup: 2.79.1
- dev: true
-
- /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1):
- resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==}
- engines: {node: '>= 10.0.0'}
- peerDependencies:
- rollup: ^1.20.0||^2.0.0
- dependencies:
- '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
- '@types/resolve': 1.17.1
- builtin-modules: 3.3.0
- deepmerge: 4.2.2
- is-module: 1.0.0
- resolve: 1.22.2
- rollup: 2.79.1
- dev: true
-
- /@rollup/plugin-replace@2.4.2(rollup@2.79.1):
- resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==}
- peerDependencies:
- rollup: ^1.20.0 || ^2.0.0
- dependencies:
- '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
- magic-string: 0.25.9
- rollup: 2.79.1
- dev: true
-
- /@rollup/pluginutils@3.1.0(rollup@2.79.1):
- resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
- engines: {node: '>= 8.0.0'}
- peerDependencies:
- rollup: ^1.20.0||^2.0.0
- dependencies:
- '@types/estree': 0.0.39
- estree-walker: 1.0.1
- picomatch: 2.3.1
- rollup: 2.79.1
- dev: true
-
/@rushstack/eslint-patch@1.3.2:
resolution: {integrity: sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==}
+ dev: false
/@sinclair/typebox@0.25.24:
resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==}
@@ -3514,32 +1445,6 @@ packages:
'@sinonjs/commons': 3.0.0
dev: true
- /@surma/rollup-plugin-off-main-thread@2.2.3:
- resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==}
- dependencies:
- ejs: 3.1.9
- json5: 2.2.3
- magic-string: 0.25.9
- string.prototype.matchall: 4.0.8
- dev: true
-
- /@swc/helpers@0.4.14:
- resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
- dependencies:
- tslib: 2.6.0
- dev: false
-
- /@swc/helpers@0.5.1:
- resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==}
- dependencies:
- tslib: 2.6.0
-
- /@types/acorn@4.0.6:
- resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
- dependencies:
- '@types/estree': 1.0.1
- dev: true
-
/@types/audioworklet@0.0.48:
resolution: {integrity: sha512-p5XQ+iuQ9fBPch52memypxYsGRiaHXdwoIXoPACGlaEhje5eO6ECiKYs1oEK1oaNyvHyVJElgVRASfSfbMag3g==}
dev: true
@@ -3573,12 +1478,6 @@ packages:
'@babel/types': 7.22.5
dev: true
- /@types/debug@4.1.8:
- resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==}
- dependencies:
- '@types/ms': 0.7.31
- dev: true
-
/@types/decompress@4.2.4:
resolution: {integrity: sha512-/C8kTMRTNiNuWGl5nEyKbPiMv6HA+0RbEXzFhFBEzASM6+oa4tJro9b8nj7eRlOFfuLdzUU+DS/GPDlvvzMOhA==}
dependencies:
@@ -3586,6 +1485,7 @@ packages:
/@types/dom-webcodecs@0.1.8:
resolution: {integrity: sha512-KThTPaGQJLITk8Q0XkEkz+GqFdoWDyQfbyeJmfEUagB15TZQdNx5AqP2b7GP6vkVM6X/6T1Z8EHxA8RgHfY9BA==}
+ dev: false
/@types/download@8.0.2:
resolution: {integrity: sha512-z1Jbba+2mUP3LuQ6EaH9xsVElphj7eY7UMCnIQ5Jw6L4ZZOC3oizFo7MbyjUx8DRMupsZvEZZfXnTmLEPQFzQg==}
@@ -3594,41 +1494,6 @@ packages:
'@types/got': 9.6.12
'@types/node': 20.4.0
- /@types/eslint-scope@3.7.4:
- resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==}
- dependencies:
- '@types/eslint': 8.40.2
- '@types/estree': 1.0.1
- dev: true
-
- /@types/eslint@8.40.2:
- resolution: {integrity: sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==}
- dependencies:
- '@types/estree': 1.0.1
- '@types/json-schema': 7.0.12
- dev: true
-
- /@types/estree-jsx@1.0.0:
- resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==}
- dependencies:
- '@types/estree': 1.0.1
- dev: true
-
- /@types/estree@0.0.39:
- resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
- dev: true
-
- /@types/estree@1.0.1:
- resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
- dev: true
-
- /@types/glob@7.2.0:
- resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
- dependencies:
- '@types/minimatch': 5.1.2
- '@types/node': 20.4.0
- dev: true
-
/@types/got@9.6.12:
resolution: {integrity: sha512-X4pj/HGHbXVLqTpKjA2ahI4rV/nNBc9mGO2I/0CgAra+F2dKgMXnENv2SRpemScBzBAI4vMelIVYViQxlSE6xA==}
dependencies:
@@ -3642,12 +1507,6 @@ packages:
'@types/node': 20.4.0
dev: true
- /@types/hast@2.3.4:
- resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==}
- dependencies:
- '@types/unist': 2.0.6
- dev: true
-
/@types/istanbul-lib-coverage@2.0.4:
resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
dev: true
@@ -3664,33 +1523,13 @@ packages:
'@types/istanbul-lib-report': 3.0.0
dev: true
- /@types/js-yaml@4.0.5:
- resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==}
- dev: true
-
/@types/json-schema@7.0.12:
resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==}
+ dev: false
/@types/json5@0.0.29:
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
-
- /@types/mdast@3.0.11:
- resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==}
- dependencies:
- '@types/unist': 2.0.6
- dev: true
-
- /@types/mdx@2.0.5:
- resolution: {integrity: sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg==}
- dev: true
-
- /@types/minimatch@5.1.2:
- resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
- dev: true
-
- /@types/ms@0.7.31:
- resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
- dev: true
+ dev: false
/@types/node-fetch@2.6.4:
resolution: {integrity: sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==}
@@ -3705,31 +1544,6 @@ packages:
resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==}
dev: true
- /@types/prop-types@15.7.5:
- resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
-
- /@types/react-dom@18.2.6:
- resolution: {integrity: sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==}
- dependencies:
- '@types/react': 18.2.14
- dev: false
-
- /@types/react@18.2.14:
- resolution: {integrity: sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==}
- dependencies:
- '@types/prop-types': 15.7.5
- '@types/scheduler': 0.16.3
- csstype: 3.1.2
-
- /@types/resolve@1.17.1:
- resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
- dependencies:
- '@types/node': 20.4.0
- dev: true
-
- /@types/scheduler@0.16.3:
- resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
-
/@types/semver@7.5.0:
resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==}
@@ -3740,26 +1554,10 @@ packages:
/@types/tough-cookie@4.0.2:
resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==}
- /@types/trusted-types@2.0.3:
- resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==}
- dev: true
-
- /@types/unist@2.0.6:
- resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
- dev: true
-
/@types/w3c-web-usb@1.0.6:
resolution: {integrity: sha512-cSjhgrr8g4KbPnnijAr/KJDNKa/bBa+ixYkywFRvrhvi9n1WEl7yYbtRyzE6jqNQiSxxJxoAW3STaOQwJHndaw==}
dev: false
- /@types/webpack-env@1.16.0:
- resolution: {integrity: sha512-Fx+NpfOO0CpeYX2g9bkvX8O5qh9wrU1sOF4g8sft4Mu7z+qfe387YlyY8w8daDyDsKY5vUxM0yxkAYnbkRbZEw==}
- dev: true
-
- /@types/wicg-file-system-access@2020.9.6:
- resolution: {integrity: sha512-6hogE75Hl2Ov/jgp8ZhDaGmIF/q3J07GtXf8nCJCwKTHq7971po5+DId7grft09zG7plBwpF6ZU0yx9Du4/e1A==}
- dev: false
-
/@types/yargs-parser@21.0.0:
resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==}
dev: true
@@ -3816,6 +1614,7 @@ packages:
typescript: 5.1.6
transitivePeerDependencies:
- supports-color
+ dev: false
/@typescript-eslint/scope-manager@5.61.0:
resolution: {integrity: sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==}
@@ -3823,6 +1622,7 @@ packages:
dependencies:
'@typescript-eslint/types': 5.61.0
'@typescript-eslint/visitor-keys': 5.61.0
+ dev: false
/@typescript-eslint/type-utils@5.61.0(eslint@8.44.0)(typescript@5.1.6):
resolution: {integrity: sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==}
@@ -3847,6 +1647,7 @@ packages:
/@typescript-eslint/types@5.61.0:
resolution: {integrity: sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: false
/@typescript-eslint/typescript-estree@5.61.0(typescript@5.1.6):
resolution: {integrity: sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==}
@@ -3867,6 +1668,7 @@ packages:
typescript: 5.1.6
transitivePeerDependencies:
- supports-color
+ dev: false
/@typescript-eslint/utils@5.61.0(eslint@8.44.0)(typescript@5.1.6):
resolution: {integrity: sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==}
@@ -3894,215 +1696,14 @@ packages:
dependencies:
'@typescript-eslint/types': 5.61.0
eslint-visitor-keys: 3.4.1
-
- /@webassemblyjs/ast@1.11.6:
- resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==}
- dependencies:
- '@webassemblyjs/helper-numbers': 1.11.6
- '@webassemblyjs/helper-wasm-bytecode': 1.11.6
- dev: true
-
- /@webassemblyjs/floating-point-hex-parser@1.11.6:
- resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==}
- dev: true
-
- /@webassemblyjs/helper-api-error@1.11.6:
- resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==}
- dev: true
-
- /@webassemblyjs/helper-buffer@1.11.6:
- resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==}
- dev: true
-
- /@webassemblyjs/helper-numbers@1.11.6:
- resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==}
- dependencies:
- '@webassemblyjs/floating-point-hex-parser': 1.11.6
- '@webassemblyjs/helper-api-error': 1.11.6
- '@xtuc/long': 4.2.2
- dev: true
-
- /@webassemblyjs/helper-wasm-bytecode@1.11.6:
- resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==}
- dev: true
-
- /@webassemblyjs/helper-wasm-section@1.11.6:
- resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==}
- dependencies:
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/helper-buffer': 1.11.6
- '@webassemblyjs/helper-wasm-bytecode': 1.11.6
- '@webassemblyjs/wasm-gen': 1.11.6
- dev: true
-
- /@webassemblyjs/ieee754@1.11.6:
- resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==}
- dependencies:
- '@xtuc/ieee754': 1.2.0
- dev: true
-
- /@webassemblyjs/leb128@1.11.6:
- resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==}
- dependencies:
- '@xtuc/long': 4.2.2
- dev: true
-
- /@webassemblyjs/utf8@1.11.6:
- resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==}
- dev: true
-
- /@webassemblyjs/wasm-edit@1.11.6:
- resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==}
- dependencies:
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/helper-buffer': 1.11.6
- '@webassemblyjs/helper-wasm-bytecode': 1.11.6
- '@webassemblyjs/helper-wasm-section': 1.11.6
- '@webassemblyjs/wasm-gen': 1.11.6
- '@webassemblyjs/wasm-opt': 1.11.6
- '@webassemblyjs/wasm-parser': 1.11.6
- '@webassemblyjs/wast-printer': 1.11.6
- dev: true
-
- /@webassemblyjs/wasm-gen@1.11.6:
- resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==}
- dependencies:
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/helper-wasm-bytecode': 1.11.6
- '@webassemblyjs/ieee754': 1.11.6
- '@webassemblyjs/leb128': 1.11.6
- '@webassemblyjs/utf8': 1.11.6
- dev: true
-
- /@webassemblyjs/wasm-opt@1.11.6:
- resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==}
- dependencies:
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/helper-buffer': 1.11.6
- '@webassemblyjs/wasm-gen': 1.11.6
- '@webassemblyjs/wasm-parser': 1.11.6
- dev: true
-
- /@webassemblyjs/wasm-parser@1.11.6:
- resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==}
- dependencies:
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/helper-api-error': 1.11.6
- '@webassemblyjs/helper-wasm-bytecode': 1.11.6
- '@webassemblyjs/ieee754': 1.11.6
- '@webassemblyjs/leb128': 1.11.6
- '@webassemblyjs/utf8': 1.11.6
- dev: true
-
- /@webassemblyjs/wast-printer@1.11.6:
- resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==}
- dependencies:
- '@webassemblyjs/ast': 1.11.6
- '@xtuc/long': 4.2.2
- dev: true
-
- /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.1)(webpack@5.83.1):
- resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==}
- engines: {node: '>=14.15.0'}
- peerDependencies:
- webpack: 5.x.x
- webpack-cli: 5.x.x
- dependencies:
- webpack: 5.83.1(webpack-cli@5.1.1)
- webpack-cli: 5.1.1(webpack-bundle-analyzer@4.7.0)(webpack@5.83.1)
- dev: true
-
- /@webpack-cli/info@2.0.2(webpack-cli@5.1.1)(webpack@5.83.1):
- resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==}
- engines: {node: '>=14.15.0'}
- peerDependencies:
- webpack: 5.x.x
- webpack-cli: 5.x.x
- dependencies:
- webpack: 5.83.1(webpack-cli@5.1.1)
- webpack-cli: 5.1.1(webpack-bundle-analyzer@4.7.0)(webpack@5.83.1)
- dev: true
-
- /@webpack-cli/serve@2.0.5(webpack-cli@5.1.1)(webpack@5.83.1):
- resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==}
- engines: {node: '>=14.15.0'}
- peerDependencies:
- webpack: 5.x.x
- webpack-cli: 5.x.x
- webpack-dev-server: '*'
- peerDependenciesMeta:
- webpack-dev-server:
- optional: true
- dependencies:
- webpack: 5.83.1(webpack-cli@5.1.1)
- webpack-cli: 5.1.1(webpack-bundle-analyzer@4.7.0)(webpack@5.83.1)
- dev: true
-
- /@xtuc/ieee754@1.2.0:
- resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
- dev: true
-
- /@xtuc/long@4.2.2:
- resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
- dev: true
+ dev: false
/@yume-chan/async@2.2.0:
resolution: {integrity: sha512-jatCtX1/3DsR9Vt3EB8CGFy0MNrXP5f+eNiRGHLH+LkYz7MPLzpqL/DnvXSip+Z0EKBCDnzuNuELjsKEEzcdQA==}
dependencies:
tslib: 2.6.0
-
- /@yume-chan/next-pwa@5.6.0-mod.2(@babel/core@7.22.5)(next@13.4.9)(webpack@5.83.1):
- resolution: {integrity: sha512-no8+dpzcmd4QDSAZd6rFBLO3h63S5POSh8yJH1BvJErqyFdWhx8aKaUM0VdnhYX2honygKJY31nr5MKK7Tqo5g==}
- peerDependencies:
- next: '>=9.0.0'
- dependencies:
- babel-loader: 8.3.0(@babel/core@7.22.5)(webpack@5.83.1)
- clean-webpack-plugin: 4.0.0(webpack@5.83.1)
- globby: 11.1.0
- next: 13.4.9(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0)
- terser-webpack-plugin: 5.3.9(webpack@5.83.1)
- workbox-webpack-plugin: 6.6.0(webpack@5.83.1)
- workbox-window: 6.6.0
- transitivePeerDependencies:
- - '@babel/core'
- - '@swc/core'
- - '@types/babel__core'
- - esbuild
- - supports-color
- - uglify-js
- - webpack
- dev: true
-
- /@yume-chan/stream-saver@2.0.6:
- resolution: {integrity: sha512-DzRADjLoHcz18ocgGHvLIanapxygX3o9dlWwE32EUZqhyAsopfdvZ79ttR9+7pqAXIQamP9M4mbDy8hHgFKOIA==}
dev: false
- /@yume-chan/undici-browser@5.22.1-mod.7:
- resolution: {integrity: sha512-/Am3A2aowR5YfIbvm+lYWPfbwqSfSqN5dfaQVcD5hKzYhE4a6sXNAHY/cojunpYHZ4QNq1gODBF5NeTJgfSGSw==}
- engines: {node: '>=14.0'}
- dependencies:
- busboy: 1.6.0
- dev: false
-
- /abab@2.0.6:
- resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
- dev: true
-
- /abort-controller@3.0.0:
- resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
- engines: {node: '>=6.5'}
- dependencies:
- event-target-shim: 5.0.1
- dev: true
-
- /acorn-import-assertions@1.9.0(acorn@8.9.0):
- resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==}
- peerDependencies:
- acorn: ^8
- dependencies:
- acorn: 8.9.0
- dev: true
-
/acorn-jsx@5.3.2(acorn@8.9.0):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@@ -4110,44 +1711,11 @@ packages:
dependencies:
acorn: 8.9.0
- /acorn-walk@8.2.0:
- resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
- engines: {node: '>=0.4.0'}
- dev: true
-
/acorn@8.9.0:
resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==}
engines: {node: '>=0.4.0'}
hasBin: true
- /ajv-formats@2.1.1(ajv@8.12.0):
- resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
- peerDependencies:
- ajv: ^8.0.0
- peerDependenciesMeta:
- ajv:
- optional: true
- dependencies:
- ajv: 8.12.0
- dev: true
-
- /ajv-keywords@3.5.2(ajv@6.12.6):
- resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
- peerDependencies:
- ajv: ^6.9.1
- dependencies:
- ajv: 6.12.6
- dev: true
-
- /ajv-keywords@5.1.0(ajv@8.12.0):
- resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
- peerDependencies:
- ajv: ^8.8.2
- dependencies:
- ajv: 8.12.0
- fast-deep-equal: 3.1.3
- dev: true
-
/ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
dependencies:
@@ -4156,15 +1724,6 @@ packages:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- /ajv@8.12.0:
- resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
- dependencies:
- fast-deep-equal: 3.1.3
- json-schema-traverse: 1.0.0
- require-from-string: 2.0.2
- uri-js: 4.4.1
- dev: true
-
/ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'}
@@ -4181,6 +1740,7 @@ packages:
engines: {node: '>=4'}
dependencies:
color-convert: 1.9.3
+ dev: true
/ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
@@ -4216,17 +1776,12 @@ packages:
/argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
- /aria-query@5.3.0:
- resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
- dependencies:
- dequal: 2.0.3
- dev: true
-
/array-buffer-byte-length@1.0.0:
resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
dependencies:
call-bind: 1.0.2
is-array-buffer: 3.0.2
+ dev: false
/array-includes@3.1.6:
resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
@@ -4237,22 +1792,12 @@ packages:
es-abstract: 1.21.2
get-intrinsic: 1.2.1
is-string: 1.0.7
-
- /array-union@1.0.2:
- resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==}
- engines: {node: '>=0.10.0'}
- dependencies:
- array-uniq: 1.0.3
- dev: true
+ dev: false
/array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
-
- /array-uniq@1.0.3:
- resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==}
- engines: {node: '>=0.10.0'}
- dev: true
+ dev: false
/array.prototype.flat@1.3.1:
resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==}
@@ -4262,6 +1807,7 @@ packages:
define-properties: 1.2.0
es-abstract: 1.21.2
es-shim-unscopables: 1.0.0
+ dev: false
/array.prototype.flatmap@1.3.1:
resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
@@ -4271,61 +1817,15 @@ packages:
define-properties: 1.2.0
es-abstract: 1.21.2
es-shim-unscopables: 1.0.0
-
- /array.prototype.tosorted@1.1.1:
- resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- es-shim-unscopables: 1.0.0
- get-intrinsic: 1.2.1
- dev: true
-
- /asn1.js@5.4.1:
- resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==}
- dependencies:
- bn.js: 4.12.0
- inherits: 2.0.4
- minimalistic-assert: 1.0.1
- safer-buffer: 2.1.2
- dev: true
-
- /ast-types-flow@0.0.7:
- resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
- dev: true
-
- /astring@1.8.6:
- resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==}
- hasBin: true
- dev: true
-
- /async@3.2.4:
- resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==}
- dev: true
+ dev: false
/asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- /at-least-node@1.0.0:
- resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
- engines: {node: '>= 4.0.0'}
- dev: true
-
/available-typed-arrays@1.0.5:
resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
engines: {node: '>= 0.4'}
-
- /axe-core@4.7.2:
- resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==}
- engines: {node: '>=4'}
- dev: true
-
- /axobject-query@3.2.1:
- resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==}
- dependencies:
- dequal: 2.0.3
- dev: true
+ dev: false
/babel-jest@29.5.0(@babel/core@7.22.5):
resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==}
@@ -4345,34 +1845,6 @@ packages:
- supports-color
dev: true
- /babel-loader@8.3.0(@babel/core@7.22.5)(webpack@5.83.1):
- resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==}
- engines: {node: '>= 8.9'}
- peerDependencies:
- '@babel/core': ^7.0.0
- webpack: '>=2'
- dependencies:
- '@babel/core': 7.22.5
- find-cache-dir: 3.3.2
- loader-utils: 2.0.4
- make-dir: 3.1.0
- schema-utils: 2.7.1
- webpack: 5.83.1(webpack-cli@5.1.1)
- dev: true
-
- /babel-loader@9.1.2(@babel/core@7.22.5)(webpack@5.83.1):
- resolution: {integrity: sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==}
- engines: {node: '>= 14.15.0'}
- peerDependencies:
- '@babel/core': ^7.12.0
- webpack: '>=5'
- dependencies:
- '@babel/core': 7.22.5
- find-cache-dir: 3.3.2
- schema-utils: 4.2.0
- webpack: 5.83.1(webpack-cli@5.1.1)
- dev: true
-
/babel-plugin-istanbul@6.1.1:
resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
engines: {node: '>=8'}
@@ -4396,42 +1868,6 @@ packages:
'@types/babel__traverse': 7.20.1
dev: true
- /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.22.5):
- resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/compat-data': 7.22.5
- '@babel/core': 7.22.5
- '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5)
- semver: 6.3.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /babel-plugin-polyfill-corejs3@0.8.1(@babel/core@7.22.5):
- resolution: {integrity: sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5)
- core-js-compat: 3.31.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /babel-plugin-polyfill-regenerator@0.5.0(@babel/core@7.22.5):
- resolution: {integrity: sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- dependencies:
- '@babel/core': 7.22.5
- '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5)
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.5):
resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
peerDependencies:
@@ -4463,121 +1899,30 @@ packages:
babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5)
dev: true
- /bail@2.0.2:
- resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
- dev: true
-
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
/base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- /big-integer@1.6.51:
- resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
- engines: {node: '>=0.6'}
- dev: true
-
- /big.js@5.2.2:
- resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
-
- /binary-extensions@2.2.0:
- resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
- engines: {node: '>=8'}
- dev: true
-
/bl@1.2.3:
resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==}
dependencies:
readable-stream: 2.3.8
safe-buffer: 5.2.1
- /bn.js@4.12.0:
- resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==}
- dev: true
-
- /bn.js@5.2.1:
- resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
- dev: true
-
- /bplist-parser@0.2.0:
- resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
- engines: {node: '>= 5.10.0'}
- dependencies:
- big-integer: 1.6.51
- dev: true
-
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
- /brace-expansion@2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
- dependencies:
- balanced-match: 1.0.2
- dev: true
-
/braces@3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
engines: {node: '>=8'}
dependencies:
fill-range: 7.0.1
- /brorand@1.1.0:
- resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
- dev: true
-
- /browserify-aes@1.2.0:
- resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==}
- dependencies:
- buffer-xor: 1.0.3
- cipher-base: 1.0.4
- create-hash: 1.2.0
- evp_bytestokey: 1.0.3
- inherits: 2.0.4
- safe-buffer: 5.2.1
- dev: true
-
- /browserify-cipher@1.0.1:
- resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==}
- dependencies:
- browserify-aes: 1.2.0
- browserify-des: 1.0.2
- evp_bytestokey: 1.0.3
- dev: true
-
- /browserify-des@1.0.2:
- resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==}
- dependencies:
- cipher-base: 1.0.4
- des.js: 1.1.0
- inherits: 2.0.4
- safe-buffer: 5.2.1
- dev: true
-
- /browserify-rsa@4.1.0:
- resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==}
- dependencies:
- bn.js: 5.2.1
- randombytes: 2.1.0
- dev: true
-
- /browserify-sign@4.2.1:
- resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==}
- dependencies:
- bn.js: 5.2.1
- browserify-rsa: 4.1.0
- create-hash: 1.2.0
- create-hmac: 1.1.7
- elliptic: 6.5.4
- inherits: 2.0.4
- parse-asn1: 5.1.6
- readable-stream: 3.6.2
- safe-buffer: 5.2.1
- dev: true
-
/browserslist@4.21.9:
resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
@@ -4587,6 +1932,7 @@ packages:
electron-to-chromium: 1.4.447
node-releases: 2.0.12
update-browserslist-db: 1.0.11(browserslist@4.21.9)
+ dev: true
/bs-logger@0.2.6:
resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
@@ -4619,41 +1965,12 @@ packages:
/buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
- /buffer-xor@1.0.3:
- resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==}
- dev: true
-
/buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
- /buffer@6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
- dev: true
-
- /builtin-modules@3.3.0:
- resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
- engines: {node: '>=6'}
- dev: true
-
- /bundle-name@3.0.0:
- resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==}
- engines: {node: '>=12'}
- dependencies:
- run-applescript: 5.0.0
- dev: true
-
- /busboy@1.6.0:
- resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
- engines: {node: '>=10.16.0'}
- dependencies:
- streamsearch: 1.1.0
-
/cacheable-request@2.1.4:
resolution: {integrity: sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==}
dependencies:
@@ -4670,6 +1987,7 @@ packages:
dependencies:
function-bind: 1.1.1
get-intrinsic: 1.2.1
+ dev: false
/callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
@@ -4687,9 +2005,6 @@ packages:
/caniuse-lite@1.0.30001509:
resolution: {integrity: sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==}
-
- /ccount@2.0.1:
- resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
dev: true
/chalk@2.4.2:
@@ -4699,6 +2014,7 @@ packages:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
supports-color: 5.5.0
+ dev: true
/chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -4712,71 +2028,15 @@ packages:
engines: {node: '>=10'}
dev: true
- /character-entities-html4@2.1.0:
- resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
- dev: true
-
- /character-entities-legacy@3.0.0:
- resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
- dev: true
-
- /character-entities@2.0.2:
- resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
- dev: true
-
- /character-reference-invalid@2.0.1:
- resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
- dev: true
-
- /chokidar@3.5.3:
- resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
- engines: {node: '>= 8.10.0'}
- dependencies:
- anymatch: 3.1.3
- braces: 3.0.2
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
- optionalDependencies:
- fsevents: 2.3.2
- dev: true
-
- /chrome-trace-event@1.0.3:
- resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
- engines: {node: '>=6.0'}
- dev: true
-
/ci-info@3.8.0:
resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==}
engines: {node: '>=8'}
dev: true
- /cipher-base@1.0.4:
- resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==}
- dependencies:
- inherits: 2.0.4
- safe-buffer: 5.2.1
- dev: true
-
/cjs-module-lexer@1.2.3:
resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==}
dev: true
- /clean-webpack-plugin@4.0.0(webpack@5.83.1):
- resolution: {integrity: sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- webpack: '>=4.0.0 <6.0.0'
- dependencies:
- del: 4.1.1
- webpack: 5.83.1(webpack-cli@5.1.1)
- dev: true
-
- /client-only@0.0.1:
- resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
-
/cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
@@ -4786,15 +2046,6 @@ packages:
wrap-ansi: 7.0.0
dev: true
- /clone-deep@4.0.1:
- resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
- engines: {node: '>=6'}
- dependencies:
- is-plain-object: 2.0.4
- kind-of: 6.0.3
- shallow-clone: 3.0.1
- dev: true
-
/clone-response@1.0.2:
resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==}
dependencies:
@@ -4813,6 +2064,7 @@ packages:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
color-name: 1.1.3
+ dev: true
/color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
@@ -4822,55 +2074,28 @@ packages:
/color-name@1.1.3:
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+ dev: true
/color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- /colorette@2.0.20:
- resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
- dev: true
-
/combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
dependencies:
delayed-stream: 1.0.0
- /comlink@4.4.1:
- resolution: {integrity: sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==}
-
- /comma-separated-tokens@2.0.3:
- resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
- dev: true
-
/commander@10.0.1:
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
engines: {node: '>=14'}
+ dev: false
/commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
- /commander@7.2.0:
- resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
- engines: {node: '>= 10'}
- dev: true
-
- /common-tags@1.8.2:
- resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
- engines: {node: '>=4.0.0'}
- dev: true
-
- /commondir@1.0.1:
- resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
- dev: true
-
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- /console-browserify@1.2.0:
- resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==}
- dev: true
-
/content-disposition@0.5.4:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'}
@@ -4879,53 +2104,15 @@ packages:
/convert-source-map@1.9.0:
resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+ dev: true
/convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
dev: true
- /core-js-compat@3.31.0:
- resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==}
- dependencies:
- browserslist: 4.21.9
- dev: true
-
- /core-js@3.30.2:
- resolution: {integrity: sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==}
- requiresBuild: true
- dev: true
-
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
- /create-ecdh@4.0.4:
- resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
- dependencies:
- bn.js: 4.12.0
- elliptic: 6.5.4
- dev: true
-
- /create-hash@1.2.0:
- resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
- dependencies:
- cipher-base: 1.0.4
- inherits: 2.0.4
- md5.js: 1.3.5
- ripemd160: 2.0.2
- sha.js: 2.4.11
- dev: true
-
- /create-hmac@1.1.7:
- resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
- dependencies:
- cipher-base: 1.0.4
- create-hash: 1.2.0
- inherits: 2.0.4
- ripemd160: 2.0.2
- safe-buffer: 5.2.1
- sha.js: 2.4.11
- dev: true
-
/cross-env@7.0.3:
resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
@@ -4942,61 +2129,11 @@ packages:
shebang-command: 2.0.0
which: 2.0.2
- /crypto-browserify@3.12.0:
- resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==}
- dependencies:
- browserify-cipher: 1.0.1
- browserify-sign: 4.2.1
- create-ecdh: 4.0.4
- create-hash: 1.2.0
- create-hmac: 1.1.7
- diffie-hellman: 5.0.3
- inherits: 2.0.4
- pbkdf2: 3.1.2
- public-encrypt: 4.0.3
- randombytes: 2.1.0
- randomfill: 1.0.4
- dev: true
-
- /crypto-random-string@2.0.0:
- resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
- engines: {node: '>=8'}
- dev: true
-
- /css-loader@6.7.4(webpack@5.83.1):
- resolution: {integrity: sha512-0Y5uHtK5BswfaGJ+jrO+4pPg1msFBc0pwPIE1VqfpmVn6YbDfYfXMj8rfd7nt+4goAhJueO+H/I40VWJfcP1mQ==}
- engines: {node: '>= 12.13.0'}
- peerDependencies:
- webpack: ^5.0.0
- dependencies:
- icss-utils: 5.1.0(postcss@8.4.24)
- postcss: 8.4.24
- postcss-modules-extract-imports: 3.0.0(postcss@8.4.24)
- postcss-modules-local-by-default: 4.0.3(postcss@8.4.24)
- postcss-modules-scope: 3.0.0(postcss@8.4.24)
- postcss-modules-values: 4.0.0(postcss@8.4.24)
- postcss-value-parser: 4.2.0
- semver: 7.5.3
- webpack: 5.83.1(webpack-cli@5.1.1)
- dev: true
-
- /cssesc@3.0.0:
- resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
- engines: {node: '>=4'}
- hasBin: true
- dev: true
-
- /csstype@3.1.2:
- resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
-
- /damerau-levenshtein@1.0.8:
- resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
- dev: true
-
/debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
dependencies:
ms: 2.1.3
+ dev: false
/debug@4.3.4:
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
@@ -5009,12 +2146,6 @@ packages:
dependencies:
ms: 2.1.2
- /decode-named-character-reference@1.0.2:
- resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
- dependencies:
- character-entities: 2.0.2
- dev: true
-
/decode-uri-component@0.2.2:
resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
engines: {node: '>=0.10'}
@@ -5085,70 +2216,18 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /default-browser-id@3.0.0:
- resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==}
- engines: {node: '>=12'}
- dependencies:
- bplist-parser: 0.2.0
- untildify: 4.0.0
- dev: true
-
- /default-browser@4.0.0:
- resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==}
- engines: {node: '>=14.16'}
- dependencies:
- bundle-name: 3.0.0
- default-browser-id: 3.0.0
- execa: 7.1.1
- titleize: 3.0.0
- dev: true
-
- /define-lazy-prop@3.0.0:
- resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
- engines: {node: '>=12'}
- dev: true
-
/define-properties@1.2.0:
resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
engines: {node: '>= 0.4'}
dependencies:
has-property-descriptors: 1.0.0
object-keys: 1.1.1
-
- /del@4.1.1:
- resolution: {integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==}
- engines: {node: '>=6'}
- dependencies:
- '@types/glob': 7.2.0
- globby: 6.1.0
- is-path-cwd: 2.2.0
- is-path-in-cwd: 2.1.0
- p-map: 2.1.0
- pify: 4.0.1
- rimraf: 2.7.1
- dev: true
+ dev: false
/delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
- /dependency-graph@0.11.0:
- resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==}
- engines: {node: '>= 0.6.0'}
- dev: true
-
- /dequal@2.0.3:
- resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
- engines: {node: '>=6'}
- dev: true
-
- /des.js@1.1.0:
- resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==}
- dependencies:
- inherits: 2.0.4
- minimalistic-assert: 1.0.1
- dev: true
-
/detect-newline@3.1.0:
resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
engines: {node: '>=8'}
@@ -5159,30 +2238,19 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dev: true
- /diff@5.1.0:
- resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
- engines: {node: '>=0.3.1'}
- dev: true
-
- /diffie-hellman@5.0.3:
- resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==}
- dependencies:
- bn.js: 4.12.0
- miller-rabin: 4.0.1
- randombytes: 2.1.0
- dev: true
-
/dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
dependencies:
path-type: 4.0.0
+ dev: false
/doctrine@2.1.0:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
engines: {node: '>=0.10.0'}
dependencies:
esutils: 2.0.3
+ dev: false
/doctrine@3.0.0:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
@@ -5209,31 +2277,8 @@ packages:
/duplexer3@0.1.5:
resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==}
- /duplexer@0.1.2:
- resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
- dev: true
-
- /ejs@3.1.9:
- resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==}
- engines: {node: '>=0.10.0'}
- hasBin: true
- dependencies:
- jake: 10.8.7
- dev: true
-
/electron-to-chromium@1.4.447:
resolution: {integrity: sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==}
-
- /elliptic@6.5.4:
- resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==}
- dependencies:
- bn.js: 4.12.0
- brorand: 1.1.0
- hash.js: 1.1.7
- hmac-drbg: 1.0.1
- inherits: 2.0.4
- minimalistic-assert: 1.0.1
- minimalistic-crypto-utils: 1.0.1
dev: true
/emittery@0.13.1:
@@ -5245,39 +2290,11 @@ packages:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
dev: true
- /emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- dev: true
-
- /emojis-list@3.0.0:
- resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
- engines: {node: '>= 4'}
-
/end-of-stream@1.4.4:
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
dependencies:
once: 1.4.0
- /enhanced-resolve@5.15.0:
- resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==}
- engines: {node: '>=10.13.0'}
- dependencies:
- graceful-fs: 4.2.11
- tapable: 2.2.1
- dev: true
-
- /entities@4.5.0:
- resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
- engines: {node: '>=0.12'}
- dev: true
- optional: true
-
- /envinfo@7.10.0:
- resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==}
- engines: {node: '>=4'}
- hasBin: true
- dev: true
-
/error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
dependencies:
@@ -5322,10 +2339,7 @@ packages:
typed-array-length: 1.0.4
unbox-primitive: 1.0.2
which-typed-array: 1.1.9
-
- /es-module-lexer@1.3.0:
- resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==}
- dev: true
+ dev: false
/es-set-tostringtag@2.0.1:
resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
@@ -5334,11 +2348,13 @@ packages:
get-intrinsic: 1.2.1
has: 1.0.3
has-tostringtag: 1.0.0
+ dev: false
/es-shim-unscopables@1.0.0:
resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
dependencies:
has: 1.0.3
+ dev: false
/es-to-primitive@1.2.1:
resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
@@ -5347,10 +2363,12 @@ packages:
is-callable: 1.2.7
is-date-object: 1.0.5
is-symbol: 1.0.4
+ dev: false
/escalade@3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
+ dev: true
/escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
@@ -5365,57 +2383,13 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
- /eslint-config-next@13.4.9(eslint@8.44.0)(typescript@5.1.6):
- resolution: {integrity: sha512-0fLtKRR268NArpqeXXwnLgMXPvF64YESQvptVg+RMLCaijKm3FICN9Y7Jc1p2o+yrWwE4DufJXDM/Vo53D1L7g==}
- peerDependencies:
- eslint: ^7.23.0 || ^8.0.0
- typescript: '>=3.3.1'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@next/eslint-plugin-next': 13.4.9
- '@rushstack/eslint-patch': 1.3.2
- '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@5.1.6)
- eslint: 8.44.0
- eslint-import-resolver-node: 0.3.7
- eslint-import-resolver-typescript: 3.5.5(eslint-plugin-import@2.27.5)(eslint@8.44.0)
- eslint-plugin-import: 2.27.5(eslint@8.44.0)
- eslint-plugin-jsx-a11y: 6.7.1(eslint@8.44.0)
- eslint-plugin-react: 7.32.2(eslint@8.44.0)
- eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.44.0)
- typescript: 5.1.6
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/eslint-import-resolver-node@0.3.7:
resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
dependencies:
debug: 3.2.7
is-core-module: 2.12.1
resolve: 1.22.2
-
- /eslint-import-resolver-typescript@3.5.5(eslint-plugin-import@2.27.5)(eslint@8.44.0):
- resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==}
- engines: {node: ^14.18.0 || >=16.0.0}
- peerDependencies:
- eslint: '*'
- eslint-plugin-import: '*'
- dependencies:
- debug: 4.3.4
- enhanced-resolve: 5.15.0
- eslint: 8.44.0
- eslint-module-utils: 2.8.0(eslint@8.44.0)
- eslint-plugin-import: 2.27.5(eslint@8.44.0)
- get-tsconfig: 4.6.2
- globby: 13.2.0
- is-core-module: 2.12.1
- is-glob: 4.0.3
- synckit: 0.8.5
- transitivePeerDependencies:
- - supports-color
- dev: true
+ dev: false
/eslint-module-utils@2.8.0(eslint@8.44.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
@@ -5428,6 +2402,7 @@ packages:
dependencies:
debug: 3.2.7
eslint: 8.44.0
+ dev: false
/eslint-plugin-import@2.27.5(eslint@8.44.0):
resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==}
@@ -5451,64 +2426,7 @@ packages:
resolve: 1.22.2
semver: 6.3.0
tsconfig-paths: 3.14.2
-
- /eslint-plugin-jsx-a11y@6.7.1(eslint@8.44.0):
- resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
- engines: {node: '>=4.0'}
- peerDependencies:
- eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
- dependencies:
- '@babel/runtime': 7.22.5
- aria-query: 5.3.0
- array-includes: 3.1.6
- array.prototype.flatmap: 1.3.1
- ast-types-flow: 0.0.7
- axe-core: 4.7.2
- axobject-query: 3.2.1
- damerau-levenshtein: 1.0.8
- emoji-regex: 9.2.2
- eslint: 8.44.0
- has: 1.0.3
- jsx-ast-utils: 3.3.4
- language-tags: 1.0.5
- minimatch: 3.1.2
- object.entries: 1.1.6
- object.fromentries: 2.0.6
- semver: 6.3.0
- dev: true
-
- /eslint-plugin-react-hooks@5.0.0-canary-7118f5dd7-20230705(eslint@8.44.0):
- resolution: {integrity: sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==}
- engines: {node: '>=10'}
- peerDependencies:
- eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
- dependencies:
- eslint: 8.44.0
- dev: true
-
- /eslint-plugin-react@7.32.2(eslint@8.44.0):
- resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==}
- engines: {node: '>=4'}
- peerDependencies:
- eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
- dependencies:
- array-includes: 3.1.6
- array.prototype.flatmap: 1.3.1
- array.prototype.tosorted: 1.1.1
- doctrine: 2.1.0
- eslint: 8.44.0
- estraverse: 5.3.0
- jsx-ast-utils: 3.3.4
- minimatch: 3.1.2
- object.entries: 1.1.6
- object.fromentries: 2.0.6
- object.hasown: 1.1.2
- object.values: 1.1.6
- prop-types: 15.8.1
- resolve: 2.0.0-next.4
- semver: 6.3.0
- string.prototype.matchall: 4.0.8
- dev: true
+ dev: false
/eslint-scope@5.1.1:
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
@@ -5516,6 +2434,7 @@ packages:
dependencies:
esrecurse: 4.3.0
estraverse: 4.3.0
+ dev: false
/eslint-scope@7.2.0:
resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==}
@@ -5604,75 +2523,16 @@ packages:
/estraverse@4.3.0:
resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
engines: {node: '>=4.0'}
+ dev: false
/estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
- /estree-util-attach-comments@2.1.1:
- resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==}
- dependencies:
- '@types/estree': 1.0.1
- dev: true
-
- /estree-util-build-jsx@2.2.2:
- resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==}
- dependencies:
- '@types/estree-jsx': 1.0.0
- estree-util-is-identifier-name: 2.1.0
- estree-walker: 3.0.3
- dev: true
-
- /estree-util-is-identifier-name@2.1.0:
- resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==}
- dev: true
-
- /estree-util-to-js@1.2.0:
- resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==}
- dependencies:
- '@types/estree-jsx': 1.0.0
- astring: 1.8.6
- source-map: 0.7.4
- dev: true
-
- /estree-util-visit@1.2.1:
- resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==}
- dependencies:
- '@types/estree-jsx': 1.0.0
- '@types/unist': 2.0.6
- dev: true
-
- /estree-walker@1.0.1:
- resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
- dev: true
-
- /estree-walker@3.0.3:
- resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
- dependencies:
- '@types/estree': 1.0.1
- dev: true
-
/esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
- /event-target-shim@5.0.1:
- resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
- engines: {node: '>=6'}
- dev: true
-
- /events@3.3.0:
- resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
- engines: {node: '>=0.8.x'}
- dev: true
-
- /evp_bytestokey@1.0.3:
- resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
- dependencies:
- md5.js: 1.3.5
- safe-buffer: 5.2.1
- dev: true
-
/execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
@@ -5688,21 +2548,6 @@ packages:
strip-final-newline: 2.0.0
dev: true
- /execa@7.1.1:
- resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==}
- engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
- dependencies:
- cross-spawn: 7.0.3
- get-stream: 6.0.1
- human-signals: 4.3.1
- is-stream: 3.0.0
- merge-stream: 2.0.0
- npm-run-path: 5.1.0
- onetime: 6.0.0
- signal-exit: 3.0.7
- strip-final-newline: 3.0.0
- dev: true
-
/exit@0.1.2:
resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
engines: {node: '>= 0.8.0'}
@@ -5744,10 +2589,6 @@ packages:
ext-list: 2.2.2
sort-keys-length: 1.0.1
- /extend@3.0.2:
- resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
- dev: true
-
/fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -5760,6 +2601,7 @@ packages:
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.5
+ dev: false
/fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
@@ -5767,11 +2609,6 @@ packages:
/fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- /fastest-levenshtein@1.0.16:
- resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
- engines: {node: '>= 4.9.1'}
- dev: true
-
/fastq@1.15.0:
resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
dependencies:
@@ -5788,10 +2625,6 @@ packages:
dependencies:
pend: 1.2.0
- /fflate@0.7.4:
- resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==}
- dev: false
-
/file-entry-cache@6.0.1:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
engines: {node: ^10.12.0 || >=12.0.0}
@@ -5818,12 +2651,6 @@ packages:
resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==}
engines: {node: '>=4'}
- /filelist@1.0.4:
- resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
- dependencies:
- minimatch: 5.1.6
- dev: true
-
/filename-reserved-regex@2.0.0:
resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==}
engines: {node: '>=4'}
@@ -5842,15 +2669,6 @@ packages:
dependencies:
to-regex-range: 5.0.1
- /find-cache-dir@3.3.2:
- resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
- engines: {node: '>=8'}
- dependencies:
- commondir: 1.0.1
- make-dir: 3.1.0
- pkg-dir: 4.2.0
- dev: true
-
/find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
@@ -5880,6 +2698,7 @@ packages:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
dependencies:
is-callable: 1.2.7
+ dev: false
/form-data@2.5.1:
resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==}
@@ -5906,16 +2725,6 @@ packages:
/fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
- /fs-extra@9.1.0:
- resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
- engines: {node: '>=10'}
- dependencies:
- at-least-node: 1.0.0
- graceful-fs: 4.2.11
- jsonfile: 6.1.0
- universalify: 2.0.0
- dev: true
-
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -5938,13 +2747,16 @@ packages:
define-properties: 1.2.0
es-abstract: 1.21.2
functions-have-names: 1.2.3
+ dev: false
/functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ dev: false
/gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
+ dev: true
/get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
@@ -5958,10 +2770,7 @@ packages:
has: 1.0.3
has-proto: 1.0.1
has-symbols: 1.0.3
-
- /get-own-enumerable-property-symbols@3.0.2:
- resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==}
- dev: true
+ dev: false
/get-package-type@0.1.0:
resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
@@ -5996,12 +2805,7 @@ packages:
dependencies:
call-bind: 1.0.2
get-intrinsic: 1.2.1
-
- /get-tsconfig@4.6.2:
- resolution: {integrity: sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==}
- dependencies:
- resolve-pkg-maps: 1.0.0
- dev: true
+ dev: false
/gh-release-fetch@3.0.2:
resolution: {integrity: sha512-xcX1uaOVDvsm+io4bvJfBFpQCLfoI3DsFay2GBMUtEnNInbNFFZqxTh7X0WIorCDtOmtos5atp2BGHAGEzmlAg==}
@@ -6021,6 +2825,7 @@ packages:
engines: {node: '>= 6'}
dependencies:
is-glob: 4.0.3
+ dev: false
/glob-parent@6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
@@ -6028,20 +2833,6 @@ packages:
dependencies:
is-glob: 4.0.3
- /glob-to-regexp@0.4.1:
- resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
-
- /glob@7.1.7:
- resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
- dev: true
-
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
dependencies:
@@ -6052,20 +2843,10 @@ packages:
once: 1.4.0
path-is-absolute: 1.0.1
- /glob@8.1.0:
- resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
- engines: {node: '>=12'}
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 5.1.6
- once: 1.4.0
- dev: true
-
/globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
+ dev: true
/globals@13.20.0:
resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
@@ -6078,6 +2859,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
define-properties: 1.2.0
+ dev: false
/globby@11.1.0:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
@@ -6089,33 +2871,13 @@ packages:
ignore: 5.2.4
merge2: 1.4.1
slash: 3.0.0
-
- /globby@13.2.0:
- resolution: {integrity: sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dependencies:
- dir-glob: 3.0.1
- fast-glob: 3.3.0
- ignore: 5.2.4
- merge2: 1.4.1
- slash: 4.0.0
- dev: true
-
- /globby@6.1.0:
- resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==}
- engines: {node: '>=0.10.0'}
- dependencies:
- array-union: 1.0.2
- glob: 7.2.3
- object-assign: 4.1.1
- pify: 2.3.0
- pinkie-promise: 2.0.1
- dev: true
+ dev: false
/gopd@1.0.1:
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
dependencies:
get-intrinsic: 1.2.1
+ dev: false
/got@8.3.2:
resolution: {integrity: sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==}
@@ -6145,19 +2907,14 @@ packages:
/graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
- /gzip-size@6.0.0:
- resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
- engines: {node: '>=10'}
- dependencies:
- duplexer: 0.1.2
- dev: true
-
/has-bigints@1.0.2:
resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+ dev: false
/has-flag@3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
+ dev: true
/has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@@ -6167,10 +2924,12 @@ packages:
resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
dependencies:
get-intrinsic: 1.2.1
+ dev: false
/has-proto@1.0.1:
resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
engines: {node: '>= 0.4'}
+ dev: false
/has-symbol-support-x@1.4.2:
resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==}
@@ -6178,6 +2937,7 @@ packages:
/has-symbols@1.0.3:
resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
engines: {node: '>= 0.4'}
+ dev: false
/has-to-string-tag-x@1.4.1:
resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==}
@@ -6189,6 +2949,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
has-symbols: 1.0.3
+ dev: false
/has@1.0.3:
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
@@ -6196,56 +2957,6 @@ packages:
dependencies:
function-bind: 1.1.1
- /hash-base@3.1.0:
- resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==}
- engines: {node: '>=4'}
- dependencies:
- inherits: 2.0.4
- readable-stream: 3.6.2
- safe-buffer: 5.2.1
- dev: true
-
- /hash.js@1.1.7:
- resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
- dependencies:
- inherits: 2.0.4
- minimalistic-assert: 1.0.1
- dev: true
-
- /hast-util-to-estree@2.3.3:
- resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==}
- dependencies:
- '@types/estree': 1.0.1
- '@types/estree-jsx': 1.0.0
- '@types/hast': 2.3.4
- '@types/unist': 2.0.6
- comma-separated-tokens: 2.0.3
- estree-util-attach-comments: 2.1.1
- estree-util-is-identifier-name: 2.1.0
- hast-util-whitespace: 2.0.1
- mdast-util-mdx-expression: 1.3.2
- mdast-util-mdxjs-esm: 1.3.1
- property-information: 6.2.0
- space-separated-tokens: 2.0.2
- style-to-object: 0.4.1
- unist-util-position: 4.0.4
- zwitch: 2.0.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /hast-util-whitespace@2.0.1:
- resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
- dev: true
-
- /hmac-drbg@1.0.1:
- resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
- dependencies:
- hash.js: 1.1.7
- minimalistic-assert: 1.0.1
- minimalistic-crypto-utils: 1.0.1
- dev: true
-
/html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
dev: true
@@ -6258,31 +2969,6 @@ packages:
engines: {node: '>=10.17.0'}
dev: true
- /human-signals@4.3.1:
- resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
- engines: {node: '>=14.18.0'}
- dev: true
-
- /iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
- dependencies:
- safer-buffer: 2.1.2
- dev: true
-
- /icss-utils@5.1.0(postcss@8.4.24):
- resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
- dependencies:
- postcss: 8.4.24
- dev: true
-
- /idb@7.1.1:
- resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==}
- dev: true
-
/ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
@@ -6290,10 +2976,6 @@ packages:
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
engines: {node: '>= 4'}
- /immutable@4.3.0:
- resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==}
- dev: true
-
/import-fresh@3.3.0:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
@@ -6323,10 +3005,6 @@ packages:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- /inline-style-parser@0.1.1:
- resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
- dev: true
-
/internal-slot@1.0.5:
resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
engines: {node: '>= 0.4'}
@@ -6334,11 +3012,7 @@ packages:
get-intrinsic: 1.2.1
has: 1.0.3
side-channel: 1.0.4
-
- /interpret@3.1.1:
- resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==}
- engines: {node: '>=10.13.0'}
- dev: true
+ dev: false
/into-stream@3.1.0:
resolution: {integrity: sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==}
@@ -6347,31 +3021,13 @@ packages:
from2: 2.3.0
p-is-promise: 1.1.0
- /is-alphabetical@2.0.1:
- resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
- dev: true
-
- /is-alphanumerical@2.0.1:
- resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
- dependencies:
- is-alphabetical: 2.0.1
- is-decimal: 2.0.1
- dev: true
-
- /is-arguments@1.1.1:
- resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- has-tostringtag: 1.0.0
- dev: true
-
/is-array-buffer@3.0.2:
resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
dependencies:
call-bind: 1.0.2
get-intrinsic: 1.2.1
is-typed-array: 1.1.10
+ dev: false
/is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
@@ -6381,13 +3037,7 @@ packages:
resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
dependencies:
has-bigints: 1.0.2
-
- /is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
- dependencies:
- binary-extensions: 2.2.0
- dev: true
+ dev: false
/is-boolean-object@1.1.2:
resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
@@ -6395,15 +3045,12 @@ packages:
dependencies:
call-bind: 1.0.2
has-tostringtag: 1.0.0
-
- /is-buffer@2.0.5:
- resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
- engines: {node: '>=4'}
- dev: true
+ dev: false
/is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
+ dev: false
/is-core-module@2.12.1:
resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==}
@@ -6415,22 +3062,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
has-tostringtag: 1.0.0
-
- /is-decimal@2.0.1:
- resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
- dev: true
-
- /is-docker@2.2.1:
- resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
- engines: {node: '>=8'}
- hasBin: true
- dev: true
-
- /is-docker@3.0.0:
- resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- hasBin: true
- dev: true
+ dev: false
/is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
@@ -6446,79 +3078,34 @@ packages:
engines: {node: '>=6'}
dev: true
- /is-generator-function@1.0.10:
- resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
- engines: {node: '>= 0.4'}
- dependencies:
- has-tostringtag: 1.0.0
- dev: true
-
/is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
dependencies:
is-extglob: 2.1.1
- /is-hexadecimal@2.0.1:
- resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
- dev: true
-
- /is-inside-container@1.0.0:
- resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
- engines: {node: '>=14.16'}
- hasBin: true
- dependencies:
- is-docker: 3.0.0
- dev: true
-
- /is-module@1.0.0:
- resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
- dev: true
-
/is-natural-number@4.0.1:
resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==}
/is-negative-zero@2.0.2:
resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
engines: {node: '>= 0.4'}
+ dev: false
/is-number-object@1.0.7:
resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
engines: {node: '>= 0.4'}
dependencies:
has-tostringtag: 1.0.0
+ dev: false
/is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
- /is-obj@1.0.1:
- resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==}
- engines: {node: '>=0.10.0'}
- dev: true
-
/is-object@1.0.2:
resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==}
- /is-path-cwd@2.2.0:
- resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==}
- engines: {node: '>=6'}
- dev: true
-
- /is-path-in-cwd@2.1.0:
- resolution: {integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==}
- engines: {node: '>=6'}
- dependencies:
- is-path-inside: 2.1.0
- dev: true
-
- /is-path-inside@2.1.0:
- resolution: {integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==}
- engines: {node: '>=6'}
- dependencies:
- path-is-inside: 1.0.2
- dev: true
-
/is-path-inside@3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
@@ -6527,35 +3114,13 @@ packages:
resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
engines: {node: '>=0.10.0'}
- /is-plain-obj@4.1.0:
- resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
- engines: {node: '>=12'}
- dev: true
-
- /is-plain-object@2.0.4:
- resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
- engines: {node: '>=0.10.0'}
- dependencies:
- isobject: 3.0.1
- dev: true
-
- /is-reference@3.0.1:
- resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==}
- dependencies:
- '@types/estree': 1.0.1
- dev: true
-
/is-regex@1.1.4:
resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
has-tostringtag: 1.0.0
-
- /is-regexp@1.0.0:
- resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==}
- engines: {node: '>=0.10.0'}
- dev: true
+ dev: false
/is-retry-allowed@1.2.0:
resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==}
@@ -6565,6 +3130,7 @@ packages:
resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
dependencies:
call-bind: 1.0.2
+ dev: false
/is-stream@1.1.0:
resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
@@ -6575,22 +3141,19 @@ packages:
engines: {node: '>=8'}
dev: true
- /is-stream@3.0.0:
- resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dev: true
-
/is-string@1.0.7:
resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
engines: {node: '>= 0.4'}
dependencies:
has-tostringtag: 1.0.0
+ dev: false
/is-symbol@1.0.4:
resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
engines: {node: '>= 0.4'}
dependencies:
has-symbols: 1.0.3
+ dev: false
/is-typed-array@1.1.10:
resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==}
@@ -6601,18 +3164,13 @@ packages:
for-each: 0.3.3
gopd: 1.0.1
has-tostringtag: 1.0.0
+ dev: false
/is-weakref@1.0.2:
resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
dependencies:
call-bind: 1.0.2
-
- /is-wsl@2.2.0:
- resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
- engines: {node: '>=8'}
- dependencies:
- is-docker: 2.2.1
- dev: true
+ dev: false
/isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
@@ -6620,11 +3178,6 @@ packages:
/isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
- /isobject@3.0.1:
- resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
- engines: {node: '>=0.10.0'}
- dev: true
-
/istanbul-lib-coverage@3.2.0:
resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==}
engines: {node: '>=8'}
@@ -6678,17 +3231,6 @@ packages:
has-to-string-tag-x: 1.4.1
is-object: 1.0.2
- /jake@10.8.7:
- resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==}
- engines: {node: '>=10'}
- hasBin: true
- dependencies:
- async: 3.2.4
- chalk: 4.1.2
- filelist: 1.0.4
- minimatch: 3.1.2
- dev: true
-
/jest-changed-files@29.5.0:
resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -7163,24 +3705,6 @@ packages:
string-length: 4.0.2
dev: true
- /jest-worker@26.6.2:
- resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
- engines: {node: '>= 10.13.0'}
- dependencies:
- '@types/node': 20.4.0
- merge-stream: 2.0.0
- supports-color: 7.2.0
- dev: true
-
- /jest-worker@27.5.1:
- resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
- engines: {node: '>= 10.13.0'}
- dependencies:
- '@types/node': 20.4.0
- merge-stream: 2.0.0
- supports-color: 8.1.1
- dev: true
-
/jest-worker@29.5.0:
resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -7223,6 +3747,7 @@ packages:
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ dev: true
/js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
@@ -7238,15 +3763,11 @@ packages:
dependencies:
argparse: 2.0.1
- /jsesc@0.5.0:
- resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
- hasBin: true
- dev: true
-
/jsesc@2.5.2:
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
engines: {node: '>=4'}
hasBin: true
+ dev: true
/json-buffer@3.0.0:
resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==}
@@ -7258,14 +3779,6 @@ packages:
/json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
- /json-schema-traverse@1.0.0:
- resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
- dev: true
-
- /json-schema@0.4.0:
- resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
- dev: true
-
/json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
@@ -7274,33 +3787,12 @@ packages:
hasBin: true
dependencies:
minimist: 1.2.8
+ dev: false
/json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
-
- /jsonfile@6.1.0:
- resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
- dependencies:
- universalify: 2.0.0
- optionalDependencies:
- graceful-fs: 4.2.11
- dev: true
-
- /jsonpointer@5.0.1:
- resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /jsx-ast-utils@3.3.4:
- resolution: {integrity: sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==}
- engines: {node: '>=4.0'}
- dependencies:
- array-includes: 3.1.6
- array.prototype.flat: 1.3.1
- object.assign: 4.1.4
- object.values: 1.1.6
dev: true
/keyv@3.0.0:
@@ -7308,36 +3800,11 @@ packages:
dependencies:
json-buffer: 3.0.0
- /kind-of@6.0.3:
- resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
- engines: {node: '>=0.10.0'}
- dev: true
-
/kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
dev: true
- /kleur@4.1.5:
- resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
- engines: {node: '>=6'}
- dev: true
-
- /klona@2.0.6:
- resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==}
- engines: {node: '>= 8'}
- dev: true
-
- /language-subtag-registry@0.3.22:
- resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
- dev: true
-
- /language-tags@1.0.5:
- resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==}
- dependencies:
- language-subtag-registry: 0.3.22
- dev: true
-
/leven@3.1.0:
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
engines: {node: '>=6'}
@@ -7354,29 +3821,6 @@ packages:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
dev: true
- /loader-runner@4.3.0:
- resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
- engines: {node: '>=6.11.5'}
- dev: true
-
- /loader-utils@1.4.2:
- resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==}
- engines: {node: '>=4.0.0'}
- dependencies:
- big.js: 5.2.2
- emojis-list: 3.0.0
- json5: 1.0.2
- dev: false
-
- /loader-utils@2.0.4:
- resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
- engines: {node: '>=8.9.0'}
- dependencies:
- big.js: 5.2.2
- emojis-list: 3.0.0
- json5: 2.2.3
- dev: true
-
/locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
@@ -7390,10 +3834,6 @@ packages:
dependencies:
p-locate: 5.0.0
- /lodash.debounce@4.0.8:
- resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
- dev: true
-
/lodash.memoize@4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
dev: true
@@ -7401,24 +3841,6 @@ packages:
/lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
- /lodash.sortby@4.7.0:
- resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
- dev: true
-
- /lodash@4.17.21:
- resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
- dev: true
-
- /longest-streak@3.1.0:
- resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
- dev: true
-
- /loose-envify@1.4.0:
- resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
- hasBin: true
- dependencies:
- js-tokens: 4.0.0
-
/lowercase-keys@1.0.0:
resolution: {integrity: sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==}
engines: {node: '>=0.10.0'}
@@ -7431,6 +3853,7 @@ packages:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
dependencies:
yallist: 3.1.1
+ dev: true
/lru-cache@6.0.0:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
@@ -7438,19 +3861,6 @@ packages:
dependencies:
yallist: 4.0.0
- /magic-string@0.25.9:
- resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
- dependencies:
- sourcemap-codec: 1.4.8
- dev: true
-
- /magic-string@0.27.0:
- resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
- engines: {node: '>=12'}
- dependencies:
- '@jridgewell/sourcemap-codec': 1.4.15
- dev: true
-
/make-dir@1.3.0:
resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==}
engines: {node: '>=4'}
@@ -7481,140 +3891,6 @@ packages:
tmpl: 1.0.5
dev: true
- /markdown-extensions@1.1.1:
- resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /md5.js@1.3.5:
- resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
- dependencies:
- hash-base: 3.1.0
- inherits: 2.0.4
- safe-buffer: 5.2.1
- dev: true
-
- /mdast-util-definitions@5.1.2:
- resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
- dependencies:
- '@types/mdast': 3.0.11
- '@types/unist': 2.0.6
- unist-util-visit: 4.1.2
- dev: true
-
- /mdast-util-from-markdown@1.3.1:
- resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
- dependencies:
- '@types/mdast': 3.0.11
- '@types/unist': 2.0.6
- decode-named-character-reference: 1.0.2
- mdast-util-to-string: 3.2.0
- micromark: 3.2.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-decode-string: 1.1.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- unist-util-stringify-position: 3.0.3
- uvu: 0.5.6
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /mdast-util-mdx-expression@1.3.2:
- resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==}
- dependencies:
- '@types/estree-jsx': 1.0.0
- '@types/hast': 2.3.4
- '@types/mdast': 3.0.11
- mdast-util-from-markdown: 1.3.1
- mdast-util-to-markdown: 1.5.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /mdast-util-mdx-jsx@2.1.4:
- resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==}
- dependencies:
- '@types/estree-jsx': 1.0.0
- '@types/hast': 2.3.4
- '@types/mdast': 3.0.11
- '@types/unist': 2.0.6
- ccount: 2.0.1
- mdast-util-from-markdown: 1.3.1
- mdast-util-to-markdown: 1.5.0
- parse-entities: 4.0.1
- stringify-entities: 4.0.3
- unist-util-remove-position: 4.0.2
- unist-util-stringify-position: 3.0.3
- vfile-message: 3.1.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /mdast-util-mdx@2.0.1:
- resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==}
- dependencies:
- mdast-util-from-markdown: 1.3.1
- mdast-util-mdx-expression: 1.3.2
- mdast-util-mdx-jsx: 2.1.4
- mdast-util-mdxjs-esm: 1.3.1
- mdast-util-to-markdown: 1.5.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /mdast-util-mdxjs-esm@1.3.1:
- resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==}
- dependencies:
- '@types/estree-jsx': 1.0.0
- '@types/hast': 2.3.4
- '@types/mdast': 3.0.11
- mdast-util-from-markdown: 1.3.1
- mdast-util-to-markdown: 1.5.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /mdast-util-phrasing@3.0.1:
- resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==}
- dependencies:
- '@types/mdast': 3.0.11
- unist-util-is: 5.2.1
- dev: true
-
- /mdast-util-to-hast@12.3.0:
- resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==}
- dependencies:
- '@types/hast': 2.3.4
- '@types/mdast': 3.0.11
- mdast-util-definitions: 5.1.2
- micromark-util-sanitize-uri: 1.2.0
- trim-lines: 3.0.1
- unist-util-generated: 2.0.1
- unist-util-position: 4.0.4
- unist-util-visit: 4.1.2
- dev: true
-
- /mdast-util-to-markdown@1.5.0:
- resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
- dependencies:
- '@types/mdast': 3.0.11
- '@types/unist': 2.0.6
- longest-streak: 3.1.0
- mdast-util-phrasing: 3.0.1
- mdast-util-to-string: 3.2.0
- micromark-util-decode-string: 1.1.0
- unist-util-visit: 4.1.2
- zwitch: 2.0.4
- dev: true
-
- /mdast-util-to-string@3.2.0:
- resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
- dependencies:
- '@types/mdast': 3.0.11
- dev: true
-
/merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
dev: true
@@ -7622,268 +3898,7 @@ packages:
/merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
-
- /micromark-core-commonmark@1.1.0:
- resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
- dependencies:
- decode-named-character-reference: 1.0.2
- micromark-factory-destination: 1.1.0
- micromark-factory-label: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-factory-title: 1.1.0
- micromark-factory-whitespace: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-chunked: 1.1.0
- micromark-util-classify-character: 1.1.0
- micromark-util-html-tag-name: 1.2.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-subtokenize: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- dev: true
-
- /micromark-extension-mdx-expression@1.0.8:
- resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==}
- dependencies:
- '@types/estree': 1.0.1
- micromark-factory-mdx-expression: 1.0.9
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-events-to-acorn: 1.2.3
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- dev: true
-
- /micromark-extension-mdx-jsx@1.0.5:
- resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==}
- dependencies:
- '@types/acorn': 4.0.6
- '@types/estree': 1.0.1
- estree-util-is-identifier-name: 2.1.0
- micromark-factory-mdx-expression: 1.0.9
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- vfile-message: 3.1.4
- dev: true
-
- /micromark-extension-mdx-md@1.0.1:
- resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==}
- dependencies:
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-extension-mdxjs-esm@1.0.5:
- resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==}
- dependencies:
- '@types/estree': 1.0.1
- micromark-core-commonmark: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-events-to-acorn: 1.2.3
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- unist-util-position-from-estree: 1.1.2
- uvu: 0.5.6
- vfile-message: 3.1.4
- dev: true
-
- /micromark-extension-mdxjs@1.0.1:
- resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==}
- dependencies:
- acorn: 8.9.0
- acorn-jsx: 5.3.2(acorn@8.9.0)
- micromark-extension-mdx-expression: 1.0.8
- micromark-extension-mdx-jsx: 1.0.5
- micromark-extension-mdx-md: 1.0.1
- micromark-extension-mdxjs-esm: 1.0.5
- micromark-util-combine-extensions: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-factory-destination@1.1.0:
- resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-factory-label@1.1.0:
- resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- dev: true
-
- /micromark-factory-mdx-expression@1.0.9:
- resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==}
- dependencies:
- '@types/estree': 1.0.1
- micromark-util-character: 1.2.0
- micromark-util-events-to-acorn: 1.2.3
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- unist-util-position-from-estree: 1.1.2
- uvu: 0.5.6
- vfile-message: 3.1.4
- dev: true
-
- /micromark-factory-space@1.1.0:
- resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-factory-title@1.1.0:
- resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
- dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-factory-whitespace@1.1.0:
- resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
- dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-util-character@1.2.0:
- resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
- dependencies:
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-util-chunked@1.1.0:
- resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
- dependencies:
- micromark-util-symbol: 1.1.0
- dev: true
-
- /micromark-util-classify-character@1.1.0:
- resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-util-combine-extensions@1.1.0:
- resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
- dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-util-decode-numeric-character-reference@1.1.0:
- resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
- dependencies:
- micromark-util-symbol: 1.1.0
- dev: true
-
- /micromark-util-decode-string@1.1.0:
- resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
- dependencies:
- decode-named-character-reference: 1.0.2
- micromark-util-character: 1.2.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-symbol: 1.1.0
- dev: true
-
- /micromark-util-encode@1.1.0:
- resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
- dev: true
-
- /micromark-util-events-to-acorn@1.2.3:
- resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==}
- dependencies:
- '@types/acorn': 4.0.6
- '@types/estree': 1.0.1
- '@types/unist': 2.0.6
- estree-util-visit: 1.2.1
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- vfile-message: 3.1.4
- dev: true
-
- /micromark-util-html-tag-name@1.2.0:
- resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
- dev: true
-
- /micromark-util-normalize-identifier@1.1.0:
- resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
- dependencies:
- micromark-util-symbol: 1.1.0
- dev: true
-
- /micromark-util-resolve-all@1.1.0:
- resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
- dependencies:
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-util-sanitize-uri@1.2.0:
- resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-encode: 1.1.0
- micromark-util-symbol: 1.1.0
- dev: true
-
- /micromark-util-subtokenize@1.1.0:
- resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
- dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- dev: true
-
- /micromark-util-symbol@1.1.0:
- resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
- dev: true
-
- /micromark-util-types@1.1.0:
- resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
- dev: true
-
- /micromark@3.2.0:
- resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
- dependencies:
- '@types/debug': 4.1.8
- debug: 4.3.4
- decode-named-character-reference: 1.0.2
- micromark-core-commonmark: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-chunked: 1.1.0
- micromark-util-combine-extensions: 1.1.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-encode: 1.1.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-sanitize-uri: 1.2.0
- micromark-util-subtokenize: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- transitivePeerDependencies:
- - supports-color
- dev: true
+ dev: false
/micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
@@ -7892,14 +3907,6 @@ packages:
braces: 3.0.2
picomatch: 2.3.1
- /miller-rabin@4.0.1:
- resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==}
- hasBin: true
- dependencies:
- bn.js: 4.12.0
- brorand: 1.1.0
- dev: true
-
/mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
@@ -7915,79 +3922,25 @@ packages:
engines: {node: '>=6'}
dev: true
- /mimic-fn@4.0.0:
- resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
- engines: {node: '>=12'}
- dev: true
-
/mimic-response@1.0.1:
resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
engines: {node: '>=4'}
- /minimalistic-assert@1.0.1:
- resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
- dev: true
-
- /minimalistic-crypto-utils@1.0.1:
- resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
- dev: true
-
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
- /minimatch@5.1.6:
- resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
- engines: {node: '>=10'}
- dependencies:
- brace-expansion: 2.0.1
- dev: true
-
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
-
- /mobx-react-lite@3.4.3(mobx@6.9.0)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-NkJREyFTSUXR772Qaai51BnE1voWx56LOL80xG7qkZr6vo8vEaLF3sz1JNUVh+rxmUzxYaqOhfuxTfqUh0FXUg==}
- peerDependencies:
- mobx: ^6.1.0
- react: ^16.8.0 || ^17 || ^18
- react-dom: '*'
- react-native: '*'
- peerDependenciesMeta:
- react-dom:
- optional: true
- react-native:
- optional: true
- dependencies:
- mobx: 6.9.0
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
dev: false
- /mobx@6.9.0:
- resolution: {integrity: sha512-HdKewQEREEJgsWnErClfbFoVebze6rGazxFLU/XUyrII8dORfVszN1V0BMRnQSzcgsNNtkX8DHj3nC6cdWE9YQ==}
-
- /mri@1.2.0:
- resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
- engines: {node: '>=4'}
- dev: true
-
- /mrmime@1.0.1:
- resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
- engines: {node: '>=10'}
- dev: true
-
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
/ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
- /nanoid@3.3.6:
- resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
+ dev: false
/natural-compare-lite@1.4.0:
resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
@@ -7996,65 +3949,6 @@ packages:
/natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
- /neo-async@2.6.2:
- resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
- dev: true
-
- /next@13.4.9(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-vtefFm/BWIi/eWOqf1GsmKG3cjKw1k3LjuefKRcL3iiLl3zWzFdPG3as6xtxrGO6gwTzzaO1ktL4oiHt/uvTjA==}
- engines: {node: '>=16.8.0'}
- hasBin: true
- peerDependencies:
- '@opentelemetry/api': ^1.1.0
- fibers: '>= 3.1.0'
- react: ^18.2.0
- react-dom: ^18.2.0
- sass: ^1.3.0
- peerDependenciesMeta:
- '@opentelemetry/api':
- optional: true
- fibers:
- optional: true
- sass:
- optional: true
- dependencies:
- '@next/env': 13.4.9
- '@swc/helpers': 0.5.1
- busboy: 1.6.0
- caniuse-lite: 1.0.30001509
- postcss: 8.4.14
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- styled-jsx: 5.1.1(@babel/core@7.22.5)(react@18.2.0)
- watchpack: 2.4.0
- zod: 3.21.4
- optionalDependencies:
- '@next/swc-darwin-arm64': 13.4.9
- '@next/swc-darwin-x64': 13.4.9
- '@next/swc-linux-arm64-gnu': 13.4.9
- '@next/swc-linux-arm64-musl': 13.4.9
- '@next/swc-linux-x64-gnu': 13.4.9
- '@next/swc-linux-x64-musl': 13.4.9
- '@next/swc-win32-arm64-msvc': 13.4.9
- '@next/swc-win32-ia32-msvc': 13.4.9
- '@next/swc-win32-x64-msvc': 13.4.9
- transitivePeerDependencies:
- - '@babel/core'
- - babel-plugin-macros
-
- /ngx-toastr@16.0.2(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6):
- resolution: {integrity: sha512-J6SueNCaGwm/gpXdsG56UzMEAcuayYWEW6NmIrNoe5iP7lOUohg4xYXWipkbMH9wGWmLPD9gU8AufUVWMplCvg==}
- peerDependencies:
- '@angular/common': '>=14.0.0-0'
- '@angular/core': '>=14.0.0-0'
- '@angular/platform-browser': '>=14.0.0-0'
- dependencies:
- '@angular/common': 15.2.6(@angular/core@15.2.6)(rxjs@7.8.1)
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- '@angular/platform-browser': 15.2.6(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)
- tslib: 2.6.0
- dev: true
-
/node-fetch@2.6.12:
resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==}
engines: {node: 4.x || >=6.0.0}
@@ -8072,6 +3966,7 @@ packages:
/node-releases@2.0.12:
resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==}
+ dev: true
/normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
@@ -8093,23 +3988,18 @@ packages:
path-key: 3.1.1
dev: true
- /npm-run-path@5.1.0:
- resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dependencies:
- path-key: 4.0.0
- dev: true
-
/object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
/object-inspect@1.12.3:
resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
+ dev: false
/object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
+ dev: false
/object.assign@4.1.4:
resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
@@ -8119,31 +4009,7 @@ packages:
define-properties: 1.2.0
has-symbols: 1.0.3
object-keys: 1.1.1
-
- /object.entries@1.1.6:
- resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- dev: true
-
- /object.fromentries@2.0.6:
- resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- dev: true
-
- /object.hasown@1.1.2:
- resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==}
- dependencies:
- define-properties: 1.2.0
- es-abstract: 1.21.2
- dev: true
+ dev: false
/object.values@1.1.6:
resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==}
@@ -8152,6 +4018,7 @@ packages:
call-bind: 1.0.2
define-properties: 1.2.0
es-abstract: 1.21.2
+ dev: false
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
@@ -8165,28 +4032,6 @@ packages:
mimic-fn: 2.1.0
dev: true
- /onetime@6.0.0:
- resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
- engines: {node: '>=12'}
- dependencies:
- mimic-fn: 4.0.0
- dev: true
-
- /open@9.1.0:
- resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==}
- engines: {node: '>=14.16'}
- dependencies:
- default-browser: 4.0.0
- define-lazy-prop: 3.0.0
- is-inside-container: 1.0.0
- is-wsl: 2.2.0
- dev: true
-
- /opener@1.5.2:
- resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
- hasBin: true
- dev: true
-
/optionator@0.9.3:
resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
engines: {node: '>= 0.8.0'}
@@ -8242,11 +4087,6 @@ packages:
dependencies:
p-limit: 3.1.0
- /p-map@2.1.0:
- resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
- engines: {node: '>=6'}
- dev: true
-
/p-timeout@2.0.1:
resolution: {integrity: sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==}
engines: {node: '>=4'}
@@ -8258,39 +4098,12 @@ packages:
engines: {node: '>=6'}
dev: true
- /pako@2.1.0:
- resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
- dev: true
-
/parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
dependencies:
callsites: 3.1.0
- /parse-asn1@5.1.6:
- resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==}
- dependencies:
- asn1.js: 5.4.1
- browserify-aes: 1.2.0
- evp_bytestokey: 1.0.3
- pbkdf2: 3.1.2
- safe-buffer: 5.2.1
- dev: true
-
- /parse-entities@4.0.1:
- resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==}
- dependencies:
- '@types/unist': 2.0.6
- character-entities: 2.0.2
- character-entities-legacy: 3.0.0
- character-reference-invalid: 2.0.1
- decode-named-character-reference: 1.0.2
- is-alphanumerical: 2.0.1
- is-decimal: 2.0.1
- is-hexadecimal: 2.0.1
- dev: true
-
/parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
@@ -8301,18 +4114,6 @@ packages:
lines-and-columns: 1.2.4
dev: true
- /parse5@7.1.2:
- resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
- requiresBuild: true
- dependencies:
- entities: 4.5.0
- dev: true
- optional: true
-
- /path-browserify@1.0.1:
- resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
- dev: true
-
/path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -8321,50 +4122,24 @@ packages:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
- /path-is-inside@1.0.2:
- resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==}
- dev: true
-
/path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
- /path-key@4.0.0:
- resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
- engines: {node: '>=12'}
- dev: true
-
/path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
/path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
-
- /pbkdf2@3.1.2:
- resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
- engines: {node: '>=0.12'}
- dependencies:
- create-hash: 1.2.0
- create-hmac: 1.1.7
- ripemd160: 2.0.2
- safe-buffer: 5.2.1
- sha.js: 2.4.11
- dev: true
+ dev: false
/pend@1.2.0:
resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
- /periscopic@3.1.0:
- resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
- dependencies:
- '@types/estree': 1.0.1
- estree-walker: 3.0.3
- is-reference: 3.0.1
- dev: true
-
/picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+ dev: true
/picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
@@ -8404,76 +4179,6 @@ packages:
find-up: 4.1.0
dev: true
- /postcss-modules-extract-imports@3.0.0(postcss@8.4.24):
- resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
- dependencies:
- postcss: 8.4.24
- dev: true
-
- /postcss-modules-local-by-default@4.0.3(postcss@8.4.24):
- resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
- dependencies:
- icss-utils: 5.1.0(postcss@8.4.24)
- postcss: 8.4.24
- postcss-selector-parser: 6.0.13
- postcss-value-parser: 4.2.0
- dev: true
-
- /postcss-modules-scope@3.0.0(postcss@8.4.24):
- resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
- dependencies:
- postcss: 8.4.24
- postcss-selector-parser: 6.0.13
- dev: true
-
- /postcss-modules-values@4.0.0(postcss@8.4.24):
- resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
- dependencies:
- icss-utils: 5.1.0(postcss@8.4.24)
- postcss: 8.4.24
- dev: true
-
- /postcss-selector-parser@6.0.13:
- resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
- engines: {node: '>=4'}
- dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
- dev: true
-
- /postcss-value-parser@4.2.0:
- resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- dev: true
-
- /postcss@8.4.14:
- resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
- engines: {node: ^10 || ^12 || >=14}
- dependencies:
- nanoid: 3.3.6
- picocolors: 1.0.0
- source-map-js: 1.0.2
-
- /postcss@8.4.24:
- resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==}
- engines: {node: ^10 || ^12 || >=14}
- dependencies:
- nanoid: 3.3.6
- picocolors: 1.0.0
- source-map-js: 1.0.2
- dev: true
-
/prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@@ -8488,11 +4193,6 @@ packages:
hasBin: true
dev: true
- /pretty-bytes@5.6.0:
- resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
- engines: {node: '>=6'}
- dev: true
-
/pretty-format@29.5.0:
resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -8514,11 +4214,6 @@ packages:
/process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
- /process@0.11.10:
- resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
- engines: {node: '>= 0.6.0'}
- dev: true
-
/prompts@2.4.2:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
@@ -8527,39 +4222,12 @@ packages:
sisteransi: 1.0.5
dev: true
- /prop-types@15.8.1:
- resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
- dependencies:
- loose-envify: 1.4.0
- object-assign: 4.1.1
- react-is: 16.13.1
- dev: true
-
- /property-information@6.2.0:
- resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==}
- dev: true
-
- /public-encrypt@4.0.3:
- resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==}
- dependencies:
- bn.js: 4.12.0
- browserify-rsa: 4.1.0
- create-hash: 1.2.0
- parse-asn1: 5.1.6
- randombytes: 2.1.0
- safe-buffer: 5.2.1
- dev: true
-
/pump@3.0.0:
resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
dependencies:
end-of-stream: 1.4.4
once: 1.4.0
- /punycode@1.3.2:
- resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==}
- dev: true
-
/punycode@2.3.0:
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
engines: {node: '>=6'}
@@ -8576,56 +4244,13 @@ packages:
object-assign: 4.1.1
strict-uri-encode: 1.1.0
- /querystring-es3@0.2.1:
- resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==}
- engines: {node: '>=0.4.x'}
- dev: true
-
- /querystring@0.2.0:
- resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==}
- engines: {node: '>=0.4.x'}
- deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
- dev: true
-
/queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- /randombytes@2.1.0:
- resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
- dependencies:
- safe-buffer: 5.2.1
- dev: true
-
- /randomfill@1.0.4:
- resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==}
- dependencies:
- randombytes: 2.1.0
- safe-buffer: 5.2.1
- dev: true
-
- /react-dom@18.2.0(react@18.2.0):
- resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
- peerDependencies:
- react: ^18.2.0
- dependencies:
- loose-envify: 1.4.0
- react: 18.2.0
- scheduler: 0.23.0
-
- /react-is@16.13.1:
- resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
- dev: true
-
/react-is@18.2.0:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
dev: true
- /react@18.2.0:
- resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
- engines: {node: '>=0.10.0'}
- dependencies:
- loose-envify: 1.4.0
-
/readable-stream@2.3.8:
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
dependencies:
@@ -8637,63 +4262,6 @@ packages:
string_decoder: 1.1.1
util-deprecate: 1.0.2
- /readable-stream@3.6.2:
- resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
- engines: {node: '>= 6'}
- dependencies:
- inherits: 2.0.4
- string_decoder: 1.3.0
- util-deprecate: 1.0.2
- dev: true
-
- /readable-stream@4.4.0:
- resolution: {integrity: sha512-kDMOq0qLtxV9f/SQv522h8cxZBqNZXuXNyjyezmfAAuribMyVXziljpQ/uQhfE1XLg2/TLTW2DsnoE4VAi/krg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- abort-controller: 3.0.0
- buffer: 6.0.3
- events: 3.3.0
- process: 0.11.10
- dev: true
-
- /readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
- dependencies:
- picomatch: 2.3.1
- dev: true
-
- /rechoir@0.8.0:
- resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
- engines: {node: '>= 10.13.0'}
- dependencies:
- resolve: 1.22.2
- dev: true
-
- /reflect-metadata@0.1.13:
- resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==}
- dev: true
-
- /regenerate-unicode-properties@10.1.0:
- resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==}
- engines: {node: '>=4'}
- dependencies:
- regenerate: 1.4.2
- dev: true
-
- /regenerate@1.4.2:
- resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
- dev: true
-
- /regenerator-runtime@0.13.11:
- resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
-
- /regenerator-transform@0.15.1:
- resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==}
- dependencies:
- '@babel/runtime': 7.22.5
- dev: true
-
/regexp.prototype.flags@1.5.0:
resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==}
engines: {node: '>= 0.4'}
@@ -8701,64 +4269,13 @@ packages:
call-bind: 1.0.2
define-properties: 1.2.0
functions-have-names: 1.2.3
-
- /regexpu-core@5.3.2:
- resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
- engines: {node: '>=4'}
- dependencies:
- '@babel/regjsgen': 0.8.0
- regenerate: 1.4.2
- regenerate-unicode-properties: 10.1.0
- regjsparser: 0.9.1
- unicode-match-property-ecmascript: 2.0.0
- unicode-match-property-value-ecmascript: 2.1.0
- dev: true
-
- /regjsparser@0.9.1:
- resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
- hasBin: true
- dependencies:
- jsesc: 0.5.0
- dev: true
-
- /remark-mdx@2.3.0:
- resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==}
- dependencies:
- mdast-util-mdx: 2.0.1
- micromark-extension-mdxjs: 1.0.1
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /remark-parse@10.0.2:
- resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==}
- dependencies:
- '@types/mdast': 3.0.11
- mdast-util-from-markdown: 1.3.1
- unified: 10.1.2
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /remark-rehype@10.1.0:
- resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
- dependencies:
- '@types/hast': 2.3.4
- '@types/mdast': 3.0.11
- mdast-util-to-hast: 12.3.0
- unified: 10.1.2
- dev: true
+ dev: false
/require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
dev: true
- /require-from-string@2.0.2:
- resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
- engines: {node: '>=0.10.0'}
- dev: true
-
/resolve-cwd@3.0.0:
resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
engines: {node: '>=8'}
@@ -8775,10 +4292,6 @@ packages:
engines: {node: '>=8'}
dev: true
- /resolve-pkg-maps@1.0.0:
- resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
- dev: true
-
/resolve.exports@2.0.2:
resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
engines: {node: '>=10'}
@@ -8792,15 +4305,6 @@ packages:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- /resolve@2.0.0-next.4:
- resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
- hasBin: true
- dependencies:
- is-core-module: 2.12.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
- dev: true
-
/responselike@1.0.2:
resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==}
dependencies:
@@ -8810,78 +4314,17 @@ packages:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- /rimraf@2.7.1:
- resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
- hasBin: true
- dependencies:
- glob: 7.2.3
- dev: true
-
/rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
hasBin: true
dependencies:
glob: 7.2.3
- /ripemd160@2.0.2:
- resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
- dependencies:
- hash-base: 3.1.0
- inherits: 2.0.4
- dev: true
-
- /rollup-plugin-terser@7.0.2(rollup@2.79.1):
- resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==}
- deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser
- peerDependencies:
- rollup: ^2.0.0
- dependencies:
- '@babel/code-frame': 7.22.5
- jest-worker: 26.6.2
- rollup: 2.79.1
- serialize-javascript: 4.0.0
- terser: 5.18.2
- dev: true
-
- /rollup@2.79.1:
- resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
- engines: {node: '>=10.0.0'}
- hasBin: true
- optionalDependencies:
- fsevents: 2.3.2
- dev: true
-
- /rtl-css-js@1.16.1:
- resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==}
- dependencies:
- '@babel/runtime': 7.22.5
- dev: false
-
- /run-applescript@5.0.0:
- resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==}
- engines: {node: '>=12'}
- dependencies:
- execa: 5.1.1
- dev: true
-
/run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
dependencies:
queue-microtask: 1.2.3
- /rxjs@7.8.1:
- resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
- dependencies:
- tslib: 2.6.0
- dev: true
-
- /sade@1.8.1:
- resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
- engines: {node: '>=6'}
- dependencies:
- mri: 1.2.0
- dev: true
-
/safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
@@ -8894,78 +4337,7 @@ packages:
call-bind: 1.0.2
get-intrinsic: 1.2.1
is-regex: 1.1.4
-
- /safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
- dev: true
-
- /sass-loader@13.2.0(sass@1.62.1)(webpack@5.83.1):
- resolution: {integrity: sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==}
- engines: {node: '>= 14.15.0'}
- peerDependencies:
- fibers: '>= 3.1.0'
- node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
- sass: ^1.3.0
- sass-embedded: '*'
- webpack: ^5.0.0
- peerDependenciesMeta:
- fibers:
- optional: true
- node-sass:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- dependencies:
- klona: 2.0.6
- neo-async: 2.6.2
- sass: 1.62.1
- webpack: 5.83.1(webpack-cli@5.1.1)
- dev: true
-
- /sass@1.62.1:
- resolution: {integrity: sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==}
- engines: {node: '>=14.0.0'}
- hasBin: true
- dependencies:
- chokidar: 3.5.3
- immutable: 4.3.0
- source-map-js: 1.0.2
- dev: true
-
- /scheduler@0.23.0:
- resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
- dependencies:
- loose-envify: 1.4.0
-
- /schema-utils@2.7.1:
- resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==}
- engines: {node: '>= 8.9.0'}
- dependencies:
- '@types/json-schema': 7.0.12
- ajv: 6.12.6
- ajv-keywords: 3.5.2(ajv@6.12.6)
- dev: true
-
- /schema-utils@3.3.0:
- resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
- engines: {node: '>= 10.13.0'}
- dependencies:
- '@types/json-schema': 7.0.12
- ajv: 6.12.6
- ajv-keywords: 3.5.2(ajv@6.12.6)
- dev: true
-
- /schema-utils@4.2.0:
- resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==}
- engines: {node: '>= 12.13.0'}
- dependencies:
- '@types/json-schema': 7.0.12
- ajv: 8.12.0
- ajv-formats: 2.1.1(ajv@8.12.0)
- ajv-keywords: 5.1.0(ajv@8.12.0)
- dev: true
+ dev: false
/seek-bzip@1.0.6:
resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==}
@@ -8988,33 +4360,6 @@ packages:
dependencies:
lru-cache: 6.0.0
- /serialize-javascript@4.0.0:
- resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
- dependencies:
- randombytes: 2.1.0
- dev: true
-
- /serialize-javascript@6.0.1:
- resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==}
- dependencies:
- randombytes: 2.1.0
- dev: true
-
- /sha.js@2.4.11:
- resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
- hasBin: true
- dependencies:
- inherits: 2.0.4
- safe-buffer: 5.2.1
- dev: true
-
- /shallow-clone@3.0.1:
- resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
- engines: {node: '>=8'}
- dependencies:
- kind-of: 6.0.3
- dev: true
-
/shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -9031,24 +4376,12 @@ packages:
call-bind: 1.0.2
get-intrinsic: 1.2.1
object-inspect: 1.12.3
+ dev: false
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
dev: true
- /simple-html-tokenizer@0.1.1:
- resolution: {integrity: sha512-Mc/gH3RvlKvB/gkp9XwgDKEWrSYyefIJPGG8Jk1suZms/rISdUuVEMx5O1WBnTWaScvxXDvGJrZQWblUmQHjkQ==}
- dev: false
-
- /sirv@1.0.19:
- resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==}
- engines: {node: '>= 10'}
- dependencies:
- '@polka/url': 1.0.0-next.21
- mrmime: 1.0.1
- totalist: 1.1.0
- dev: true
-
/sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
dev: true
@@ -9057,11 +4390,6 @@ packages:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
- /slash@4.0.0:
- resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
- engines: {node: '>=12'}
- dev: true
-
/sort-keys-length@1.0.1:
resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==}
engines: {node: '>=0.10.0'}
@@ -9080,30 +4408,6 @@ packages:
dependencies:
is-plain-obj: 1.1.0
- /source-code-pro@2.38.0:
- resolution: {integrity: sha512-JMXu7l3XrLREG17eEwY66ANG9716WTu6OeNvZfRKQKANEvbSERDZjk5AYTHeV6owQNPQTeiiW3ri2Ou93XFGvg==}
- dev: true
-
- /source-list-map@2.0.1:
- resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==}
- dev: true
-
- /source-map-js@1.0.2:
- resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
- engines: {node: '>=0.10.0'}
-
- /source-map-loader@4.0.1(webpack@5.83.1):
- resolution: {integrity: sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==}
- engines: {node: '>= 14.15.0'}
- peerDependencies:
- webpack: ^5.72.1
- dependencies:
- abab: 2.0.6
- iconv-lite: 0.6.3
- source-map-js: 1.0.2
- webpack: 5.83.1(webpack-cli@5.1.1)
- dev: true
-
/source-map-support@0.5.13:
resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
dependencies:
@@ -9116,37 +4420,12 @@ packages:
dependencies:
buffer-from: 1.1.2
source-map: 0.6.1
+ dev: false
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
- /source-map@0.7.4:
- resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
- engines: {node: '>= 8'}
- dev: true
-
- /source-map@0.8.0-beta.0:
- resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
- engines: {node: '>= 8'}
- dependencies:
- whatwg-url: 7.1.0
- dev: true
-
- /source-sans-pro@3.6.0:
- resolution: {integrity: sha512-C1RFUGu+YASuqpgDRInTM7Y6OwqeWNOuKn7v0P/4Kh66epTI4PYWwPWP5kdA4l/VqzBAWiqoz5dk0trof73R7w==}
- deprecated: 'WARNING: This project has been renamed to source-sans. Install using source-sans instead.'
- dev: true
-
- /sourcemap-codec@1.4.8:
- resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
- deprecated: Please use @jridgewell/sourcemap-codec instead
- dev: true
-
- /space-separated-tokens@2.0.2:
- resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
- dev: true
-
/sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
dev: true
@@ -9158,10 +4437,6 @@ packages:
escape-string-regexp: 2.0.0
dev: true
- /streamsearch@1.1.0:
- resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
- engines: {node: '>=10.0.0'}
-
/strict-uri-encode@1.1.0:
resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==}
engines: {node: '>=0.10.0'}
@@ -9183,19 +4458,6 @@ packages:
strip-ansi: 6.0.1
dev: true
- /string.prototype.matchall@4.0.8:
- resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- es-abstract: 1.21.2
- get-intrinsic: 1.2.1
- has-symbols: 1.0.3
- internal-slot: 1.0.5
- regexp.prototype.flags: 1.5.0
- side-channel: 1.0.4
- dev: true
-
/string.prototype.trim@1.2.7:
resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==}
engines: {node: '>= 0.4'}
@@ -9203,6 +4465,7 @@ packages:
call-bind: 1.0.2
define-properties: 1.2.0
es-abstract: 1.21.2
+ dev: false
/string.prototype.trimend@1.0.6:
resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
@@ -9210,6 +4473,7 @@ packages:
call-bind: 1.0.2
define-properties: 1.2.0
es-abstract: 1.21.2
+ dev: false
/string.prototype.trimstart@1.0.6:
resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
@@ -9217,34 +4481,13 @@ packages:
call-bind: 1.0.2
define-properties: 1.2.0
es-abstract: 1.21.2
+ dev: false
/string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
dependencies:
safe-buffer: 5.1.2
- /string_decoder@1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
- dependencies:
- safe-buffer: 5.2.1
- dev: true
-
- /stringify-entities@4.0.3:
- resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==}
- dependencies:
- character-entities-html4: 2.1.0
- character-entities-legacy: 3.0.0
- dev: true
-
- /stringify-object@3.3.0:
- resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==}
- engines: {node: '>=4'}
- dependencies:
- get-own-enumerable-property-symbols: 3.0.2
- is-obj: 1.0.1
- is-regexp: 1.0.0
- dev: true
-
/strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
@@ -9254,17 +4497,13 @@ packages:
/strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
+ dev: false
/strip-bom@4.0.0:
resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
engines: {node: '>=8'}
dev: true
- /strip-comments@2.0.1:
- resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==}
- engines: {node: '>=10'}
- dev: true
-
/strip-dirs@2.1.0:
resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==}
dependencies:
@@ -9275,11 +4514,6 @@ packages:
engines: {node: '>=6'}
dev: true
- /strip-final-newline@3.0.0:
- resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
- engines: {node: '>=12'}
- dev: true
-
/strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
@@ -9290,47 +4524,12 @@ packages:
dependencies:
escape-string-regexp: 1.0.5
- /style-loader@3.3.3(webpack@5.83.1):
- resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==}
- engines: {node: '>= 12.13.0'}
- peerDependencies:
- webpack: ^5.0.0
- dependencies:
- webpack: 5.83.1(webpack-cli@5.1.1)
- dev: true
-
- /style-to-object@0.4.1:
- resolution: {integrity: sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==}
- dependencies:
- inline-style-parser: 0.1.1
- dev: true
-
- /styled-jsx@5.1.1(@babel/core@7.22.5)(react@18.2.0):
- resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
- engines: {node: '>= 12.0.0'}
- peerDependencies:
- '@babel/core': '*'
- babel-plugin-macros: '*'
- react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
- peerDependenciesMeta:
- '@babel/core':
- optional: true
- babel-plugin-macros:
- optional: true
- dependencies:
- '@babel/core': 7.22.5
- client-only: 0.0.1
- react: 18.2.0
-
- /stylis@4.3.0:
- resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==}
- dev: false
-
/supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
dependencies:
has-flag: 3.0.0
+ dev: true
/supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
@@ -9349,113 +4548,6 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- /svg-inline-loader@0.8.2:
- resolution: {integrity: sha512-kbrcEh5n5JkypaSC152eGfGcnT4lkR0eSfvefaUJkLqgGjRQJyKDvvEE/CCv5aTSdfXuc+N98w16iAojhShI3g==}
- dependencies:
- loader-utils: 1.4.2
- object-assign: 4.1.1
- simple-html-tokenizer: 0.1.1
- dev: false
-
- /synckit@0.8.5:
- resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==}
- engines: {node: ^14.18.0 || >=16.0.0}
- dependencies:
- '@pkgr/utils': 2.4.1
- tslib: 2.6.0
- dev: true
-
- /tabby-community-color-schemes@1.0.197-nightly.1(@angular/core@15.2.6)(tabby-core@1.0.197-nightly.1)(tabby-terminal@1.0.197-nightly.1):
- resolution: {integrity: sha512-l8dmxqLlaC1vcwbmw+XDGjKL1KmKUnrJlhxXk5deMJuc3PFsnXsnGb14w6Blc1wRB5yEYXHop5f4lkxbUXBSHg==}
- peerDependencies:
- '@angular/core': ^15
- tabby-core: '*'
- tabby-terminal: '*'
- dependencies:
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- tabby-core: 1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser-dynamic@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1)
- tabby-terminal: 1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser@15.2.6)(@ng-bootstrap/ng-bootstrap@14.1.1)(rxjs@7.8.1)(tabby-core@1.0.197-nightly.1)(tabby-settings@1.0.197-nightly.1)
- dev: true
-
- /tabby-core@1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser-dynamic@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1):
- resolution: {integrity: sha512-GS4Q3orewMdZk4HAJp1vVg/Pv+FcN7E3o6TJHaUtPHRTWSeNM4MOoHY2HJINgcjaFuInthe4+8dK1W2aIECy2Q==}
- peerDependencies:
- '@angular/animations': ^15
- '@angular/common': ^15
- '@angular/core': ^15
- '@angular/forms': ^15
- '@angular/platform-browser': ^15
- '@angular/platform-browser-dynamic': ^15
- rxjs: ^7
- dependencies:
- '@angular/animations': 15.2.6(@angular/core@15.2.6)
- '@angular/common': 15.2.6(@angular/core@15.2.6)(rxjs@7.8.1)
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- '@angular/forms': 15.2.6(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1)
- '@angular/platform-browser': 15.2.6(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)
- '@angular/platform-browser-dynamic': 15.2.6(@angular/common@15.2.6)(@angular/compiler@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6)
- rxjs: 7.8.1
- dev: true
-
- /tabby-settings@1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser@15.2.6)(@ng-bootstrap/ng-bootstrap@14.1.1)(rxjs@7.8.1)(tabby-core@1.0.197-nightly.1):
- resolution: {integrity: sha512-+EIzyiGPU8hFLUh2YksWXZfGbtKLGAo0lWPdl3fW62/K0U1lllAY2oCjschpOpNW1P6UDpjZEtFiQDfK1EwkJw==}
- peerDependencies:
- '@angular/animations': ^15
- '@angular/common': ^15
- '@angular/core': ^15
- '@angular/forms': ^15
- '@angular/platform-browser': ^15
- '@ng-bootstrap/ng-bootstrap': ^14
- rxjs: ^7
- tabby-core: '*'
- dependencies:
- '@angular/animations': 15.2.6(@angular/core@15.2.6)
- '@angular/common': 15.2.6(@angular/core@15.2.6)(rxjs@7.8.1)
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- '@angular/forms': 15.2.6(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1)
- '@angular/platform-browser': 15.2.6(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)
- '@ng-bootstrap/ng-bootstrap': 14.1.1(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/localize@15.2.9)(@popperjs/core@2.11.6)(rxjs@7.8.1)
- rxjs: 7.8.1
- tabby-core: 1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser-dynamic@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1)
- dev: true
-
- /tabby-terminal@1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser@15.2.6)(@ng-bootstrap/ng-bootstrap@14.1.1)(rxjs@7.8.1)(tabby-core@1.0.197-nightly.1)(tabby-settings@1.0.197-nightly.1):
- resolution: {integrity: sha512-eCzT7pL50PEtniUXlFnBBWMIfPmqX8eZ9EZoAbUIpfxv0/WJBDLsQnn6NiJaFBgwMdCF4hQ54TYdnvroJUScpg==}
- peerDependencies:
- '@angular/animations': ^15
- '@angular/common': ^15
- '@angular/core': ^15
- '@angular/forms': ^15
- '@angular/platform-browser': ^15
- '@ng-bootstrap/ng-bootstrap': ^14
- rxjs: ^7
- tabby-core: '*'
- tabby-settings: '*'
- dependencies:
- '@angular/animations': 15.2.6(@angular/core@15.2.6)
- '@angular/common': 15.2.6(@angular/core@15.2.6)(rxjs@7.8.1)
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- '@angular/forms': 15.2.6(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1)
- '@angular/platform-browser': 15.2.6(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)
- '@ng-bootstrap/ng-bootstrap': 14.1.1(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/localize@15.2.9)(@popperjs/core@2.11.6)(rxjs@7.8.1)
- rxjs: 7.8.1
- tabby-core: 1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser-dynamic@15.2.6)(@angular/platform-browser@15.2.6)(rxjs@7.8.1)
- tabby-settings: 1.0.197-nightly.1(@angular/animations@15.2.6)(@angular/common@15.2.6)(@angular/core@15.2.6)(@angular/forms@15.2.6)(@angular/platform-browser@15.2.6)(@ng-bootstrap/ng-bootstrap@14.1.1)(rxjs@7.8.1)(tabby-core@1.0.197-nightly.1)
- dev: true
-
- /tabby-web@1.0.197-nightly.1(@angular/core@15.2.6):
- resolution: {integrity: sha512-c4mhppjTIIudvp3GWMVqujKrJr6zsB+X+lPDnNCcx22ocaNHAToyMjJp8JVk79Sn60Yb+ejhPUlBr+dzuMTlsQ==}
- peerDependencies:
- '@angular/core': ^15
- dependencies:
- '@angular/core': 15.2.6(rxjs@7.8.1)(zone.js@0.13.0)
- dev: true
-
- /tapable@2.2.1:
- resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
- engines: {node: '>=6'}
- dev: true
-
/tar-stream@1.6.2:
resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==}
engines: {node: '>= 0.8.0'}
@@ -9468,56 +4560,6 @@ packages:
to-buffer: 1.1.1
xtend: 4.0.2
- /temp-dir@2.0.0:
- resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
- engines: {node: '>=8'}
- dev: true
-
- /tempy@0.6.0:
- resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==}
- engines: {node: '>=10'}
- dependencies:
- is-stream: 2.0.1
- temp-dir: 2.0.0
- type-fest: 0.16.0
- unique-string: 2.0.0
- dev: true
-
- /terser-webpack-plugin@5.3.9(webpack@5.83.1):
- resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==}
- engines: {node: '>= 10.13.0'}
- peerDependencies:
- '@swc/core': '*'
- esbuild: '*'
- uglify-js: '*'
- webpack: ^5.1.0
- peerDependenciesMeta:
- '@swc/core':
- optional: true
- esbuild:
- optional: true
- uglify-js:
- optional: true
- dependencies:
- '@jridgewell/trace-mapping': 0.3.18
- jest-worker: 27.5.1
- schema-utils: 3.3.0
- serialize-javascript: 6.0.1
- terser: 5.18.2
- webpack: 5.83.1(webpack-cli@5.1.1)
- dev: true
-
- /terser@5.18.2:
- resolution: {integrity: sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==}
- engines: {node: '>=10'}
- hasBin: true
- dependencies:
- '@jridgewell/source-map': 0.3.4
- acorn: 8.9.0
- commander: 2.20.3
- source-map-support: 0.5.21
- dev: true
-
/test-exclude@6.0.0:
resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
engines: {node: '>=8'}
@@ -9541,11 +4583,6 @@ packages:
resolution: {integrity: sha512-etkBRgYkSFBdAi2Cqk4sZgi+xWs/vhzNgvjO3z2i4WILeEmORiNqxuQ4URJatrWQ9LPNV3WPWAtzsh/LA/XL/g==}
dev: false
- /titleize@3.0.0:
- resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==}
- engines: {node: '>=12'}
- dev: true
-
/tmpl@1.0.5:
resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
dev: true
@@ -9556,6 +4593,7 @@ packages:
/to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
+ dev: true
/to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
@@ -9563,34 +4601,15 @@ packages:
dependencies:
is-number: 7.0.0
- /totalist@1.1.0:
- resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==}
- engines: {node: '>=6'}
- dev: true
-
/tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
- /tr46@1.0.1:
- resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
- dependencies:
- punycode: 2.3.0
- dev: true
-
- /trim-lines@3.0.1:
- resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
- dev: true
-
/trim-repeated@1.0.0:
resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==}
engines: {node: '>=0.10.0'}
dependencies:
escape-string-regexp: 1.0.5
- /trough@2.1.0:
- resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
- dev: true
-
/ts-jest@29.1.1(@babel/core@7.22.5)(jest@29.5.0)(typescript@5.1.6):
resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -9625,21 +4644,6 @@ packages:
yargs-parser: 21.1.1
dev: true
- /ts-loader@9.4.4(typescript@5.1.6)(webpack@5.83.1):
- resolution: {integrity: sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- typescript: '*'
- webpack: ^5.0.0
- dependencies:
- chalk: 4.1.2
- enhanced-resolve: 5.15.0
- micromatch: 4.0.5
- semver: 7.5.3
- typescript: 5.1.6
- webpack: 5.83.1(webpack-cli@5.1.1)
- dev: true
-
/tsconfig-paths@3.14.2:
resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==}
dependencies:
@@ -9647,12 +4651,15 @@ packages:
json5: 1.0.2
minimist: 1.2.8
strip-bom: 3.0.0
+ dev: false
/tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+ dev: false
/tslib@2.6.0:
resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==}
+ dev: false
/tsutils@3.21.0(typescript@5.1.6):
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
@@ -9662,6 +4669,7 @@ packages:
dependencies:
tslib: 1.14.1
typescript: 5.1.6
+ dev: false
/type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
@@ -9674,11 +4682,6 @@ packages:
engines: {node: '>=4'}
dev: true
- /type-fest@0.16.0:
- resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
- engines: {node: '>=10'}
- dev: true
-
/type-fest@0.20.2:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
@@ -9694,6 +4697,7 @@ packages:
call-bind: 1.0.2
for-each: 0.3.3
is-typed-array: 1.1.10
+ dev: false
/typescript@5.1.6:
resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==}
@@ -9707,6 +4711,7 @@ packages:
has-bigints: 1.0.2
has-symbols: 1.0.3
which-boxed-primitive: 1.0.2
+ dev: false
/unbzip2-stream@1.4.3:
resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==}
@@ -9714,113 +4719,6 @@ packages:
buffer: 5.7.1
through: 2.3.8
- /unicode-canonical-property-names-ecmascript@2.0.0:
- resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
- engines: {node: '>=4'}
- dev: true
-
- /unicode-match-property-ecmascript@2.0.0:
- resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
- engines: {node: '>=4'}
- dependencies:
- unicode-canonical-property-names-ecmascript: 2.0.0
- unicode-property-aliases-ecmascript: 2.1.0
- dev: true
-
- /unicode-match-property-value-ecmascript@2.1.0:
- resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
- engines: {node: '>=4'}
- dev: true
-
- /unicode-property-aliases-ecmascript@2.1.0:
- resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
- engines: {node: '>=4'}
- dev: true
-
- /unified@10.1.2:
- resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
- dependencies:
- '@types/unist': 2.0.6
- bail: 2.0.2
- extend: 3.0.2
- is-buffer: 2.0.5
- is-plain-obj: 4.1.0
- trough: 2.1.0
- vfile: 5.3.7
- dev: true
-
- /unique-string@2.0.0:
- resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
- engines: {node: '>=8'}
- dependencies:
- crypto-random-string: 2.0.0
- dev: true
-
- /unist-util-generated@2.0.1:
- resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
- dev: true
-
- /unist-util-is@5.2.1:
- resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
- dependencies:
- '@types/unist': 2.0.6
- dev: true
-
- /unist-util-position-from-estree@1.1.2:
- resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==}
- dependencies:
- '@types/unist': 2.0.6
- dev: true
-
- /unist-util-position@4.0.4:
- resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
- dependencies:
- '@types/unist': 2.0.6
- dev: true
-
- /unist-util-remove-position@4.0.2:
- resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==}
- dependencies:
- '@types/unist': 2.0.6
- unist-util-visit: 4.1.2
- dev: true
-
- /unist-util-stringify-position@3.0.3:
- resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
- dependencies:
- '@types/unist': 2.0.6
- dev: true
-
- /unist-util-visit-parents@5.1.3:
- resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
- dependencies:
- '@types/unist': 2.0.6
- unist-util-is: 5.2.1
- dev: true
-
- /unist-util-visit@4.1.2:
- resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
- dependencies:
- '@types/unist': 2.0.6
- unist-util-is: 5.2.1
- unist-util-visit-parents: 5.1.3
- dev: true
-
- /universalify@2.0.0:
- resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
- engines: {node: '>= 10.0.0'}
- dev: true
-
- /untildify@4.0.0:
- resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
- engines: {node: '>=8'}
- dev: true
-
- /upath@1.2.0:
- resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==}
- engines: {node: '>=4'}
- dev: true
-
/update-browserslist-db@1.0.11(browserslist@4.21.9):
resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
hasBin: true
@@ -9830,6 +4728,7 @@ packages:
browserslist: 4.21.9
escalade: 3.1.1
picocolors: 1.0.0
+ dev: true
/uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@@ -9846,37 +4745,9 @@ packages:
resolution: {integrity: sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==}
engines: {node: '>= 4'}
- /url@0.11.0:
- resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==}
- dependencies:
- punycode: 1.3.2
- querystring: 0.2.0
- dev: true
-
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- /util@0.12.5:
- resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
- dependencies:
- inherits: 2.0.4
- is-arguments: 1.1.1
- is-generator-function: 1.0.10
- is-typed-array: 1.1.10
- which-typed-array: 1.1.9
- dev: true
-
- /uvu@0.5.6:
- resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
- engines: {node: '>=8'}
- hasBin: true
- dependencies:
- dequal: 2.0.3
- diff: 5.1.0
- kleur: 4.1.5
- sade: 1.8.1
- dev: true
-
/v8-to-istanbul@9.1.0:
resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==}
engines: {node: '>=10.12.0'}
@@ -9886,35 +4757,12 @@ packages:
convert-source-map: 1.9.0
dev: true
- /vfile-message@3.1.4:
- resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
- dependencies:
- '@types/unist': 2.0.6
- unist-util-stringify-position: 3.0.3
- dev: true
-
- /vfile@5.3.7:
- resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
- dependencies:
- '@types/unist': 2.0.6
- is-buffer: 2.0.5
- unist-util-stringify-position: 3.0.3
- vfile-message: 3.1.4
- dev: true
-
/walker@1.0.8:
resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
dependencies:
makeerror: 1.0.12
dev: true
- /watchpack@2.4.0:
- resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
- engines: {node: '>=10.13.0'}
- dependencies:
- glob-to-regexp: 0.4.1
- graceful-fs: 4.2.11
-
/web-streams-polyfill@4.0.0-beta.3:
resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==}
engines: {node: '>= 14'}
@@ -9923,145 +4771,12 @@ packages:
/webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
- /webidl-conversions@4.0.2:
- resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
- dev: true
-
- /webm-muxer@3.1.1:
- resolution: {integrity: sha512-ZdSRwpbS/UU6K6SPjnyyj3XBLOf0H/b5vjBcdequcBTA16oE5rjrTCn802xZvsyL01Sjjpzam1uUPvZcSlZssg==}
- dependencies:
- '@types/dom-webcodecs': 0.1.8
- '@types/wicg-file-system-access': 2020.9.6
- dev: false
-
- /webpack-bundle-analyzer@4.7.0:
- resolution: {integrity: sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==}
- engines: {node: '>= 10.13.0'}
- hasBin: true
- dependencies:
- acorn: 8.9.0
- acorn-walk: 8.2.0
- chalk: 4.1.2
- commander: 7.2.0
- gzip-size: 6.0.0
- lodash: 4.17.21
- opener: 1.5.2
- sirv: 1.0.19
- ws: 7.5.9
- transitivePeerDependencies:
- - bufferutil
- - utf-8-validate
- dev: true
-
- /webpack-cli@5.1.1(webpack-bundle-analyzer@4.7.0)(webpack@5.83.1):
- resolution: {integrity: sha512-OLJwVMoXnXYH2ncNGU8gxVpUtm3ybvdioiTvHgUyBuyMLKiVvWy+QObzBsMtp5pH7qQoEuWgeEUQ/sU3ZJFzAw==}
- engines: {node: '>=14.15.0'}
- hasBin: true
- peerDependencies:
- '@webpack-cli/generators': '*'
- webpack: 5.x.x
- webpack-bundle-analyzer: '*'
- webpack-dev-server: '*'
- peerDependenciesMeta:
- '@webpack-cli/generators':
- optional: true
- webpack-bundle-analyzer:
- optional: true
- webpack-dev-server:
- optional: true
- dependencies:
- '@discoveryjs/json-ext': 0.5.7
- '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.1)(webpack@5.83.1)
- '@webpack-cli/info': 2.0.2(webpack-cli@5.1.1)(webpack@5.83.1)
- '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.1)(webpack@5.83.1)
- colorette: 2.0.20
- commander: 10.0.1
- cross-spawn: 7.0.3
- envinfo: 7.10.0
- fastest-levenshtein: 1.0.16
- import-local: 3.1.0
- interpret: 3.1.1
- rechoir: 0.8.0
- webpack: 5.83.1(webpack-cli@5.1.1)
- webpack-bundle-analyzer: 4.7.0
- webpack-merge: 5.9.0
- dev: true
-
- /webpack-merge@5.9.0:
- resolution: {integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==}
- engines: {node: '>=10.0.0'}
- dependencies:
- clone-deep: 4.0.1
- wildcard: 2.0.1
- dev: true
-
- /webpack-sources@1.4.3:
- resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==}
- dependencies:
- source-list-map: 2.0.1
- source-map: 0.6.1
- dev: true
-
- /webpack-sources@3.2.3:
- resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
- engines: {node: '>=10.13.0'}
- dev: true
-
- /webpack@5.83.1(webpack-cli@5.1.1):
- resolution: {integrity: sha512-TNsG9jDScbNuB+Lb/3+vYolPplCS3bbEaJf+Bj0Gw4DhP3ioAflBb1flcRt9zsWITyvOhM96wMQNRWlSX52DgA==}
- engines: {node: '>=10.13.0'}
- hasBin: true
- peerDependencies:
- webpack-cli: '*'
- peerDependenciesMeta:
- webpack-cli:
- optional: true
- dependencies:
- '@types/eslint-scope': 3.7.4
- '@types/estree': 1.0.1
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/wasm-edit': 1.11.6
- '@webassemblyjs/wasm-parser': 1.11.6
- acorn: 8.9.0
- acorn-import-assertions: 1.9.0(acorn@8.9.0)
- browserslist: 4.21.9
- chrome-trace-event: 1.0.3
- enhanced-resolve: 5.15.0
- es-module-lexer: 1.3.0
- eslint-scope: 5.1.1
- events: 3.3.0
- glob-to-regexp: 0.4.1
- graceful-fs: 4.2.11
- json-parse-even-better-errors: 2.3.1
- loader-runner: 4.3.0
- mime-types: 2.1.35
- neo-async: 2.6.2
- schema-utils: 3.3.0
- tapable: 2.2.1
- terser-webpack-plugin: 5.3.9(webpack@5.83.1)
- watchpack: 2.4.0
- webpack-cli: 5.1.1(webpack-bundle-analyzer@4.7.0)(webpack@5.83.1)
- webpack-sources: 3.2.3
- transitivePeerDependencies:
- - '@swc/core'
- - esbuild
- - uglify-js
- dev: true
-
/whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
dependencies:
tr46: 0.0.3
webidl-conversions: 3.0.1
- /whatwg-url@7.1.0:
- resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
- dependencies:
- lodash.sortby: 4.7.0
- tr46: 1.0.1
- webidl-conversions: 4.0.2
- dev: true
-
/which-boxed-primitive@1.0.2:
resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
dependencies:
@@ -10070,6 +4785,7 @@ packages:
is-number-object: 1.0.7
is-string: 1.0.7
is-symbol: 1.0.4
+ dev: false
/which-typed-array@1.1.9:
resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
@@ -10081,6 +4797,7 @@ packages:
gopd: 1.0.1
has-tostringtag: 1.0.0
is-typed-array: 1.1.10
+ dev: false
/which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
@@ -10089,174 +4806,6 @@ packages:
dependencies:
isexe: 2.0.0
- /wildcard@2.0.1:
- resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==}
- dev: true
-
- /workbox-background-sync@6.6.0:
- resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==}
- dependencies:
- idb: 7.1.1
- workbox-core: 6.6.0
- dev: true
-
- /workbox-broadcast-update@6.6.0:
- resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==}
- dependencies:
- workbox-core: 6.6.0
- dev: true
-
- /workbox-build@6.6.0:
- resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==}
- engines: {node: '>=10.0.0'}
- dependencies:
- '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0)
- '@babel/core': 7.22.5
- '@babel/preset-env': 7.22.5(@babel/core@7.22.5)
- '@babel/runtime': 7.22.5
- '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.5)(rollup@2.79.1)
- '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1)
- '@rollup/plugin-replace': 2.4.2(rollup@2.79.1)
- '@surma/rollup-plugin-off-main-thread': 2.2.3
- ajv: 8.12.0
- common-tags: 1.8.2
- fast-json-stable-stringify: 2.1.0
- fs-extra: 9.1.0
- glob: 7.2.3
- lodash: 4.17.21
- pretty-bytes: 5.6.0
- rollup: 2.79.1
- rollup-plugin-terser: 7.0.2(rollup@2.79.1)
- source-map: 0.8.0-beta.0
- stringify-object: 3.3.0
- strip-comments: 2.0.1
- tempy: 0.6.0
- upath: 1.2.0
- workbox-background-sync: 6.6.0
- workbox-broadcast-update: 6.6.0
- workbox-cacheable-response: 6.6.0
- workbox-core: 6.6.0
- workbox-expiration: 6.6.0
- workbox-google-analytics: 6.6.0
- workbox-navigation-preload: 6.6.0
- workbox-precaching: 6.6.0
- workbox-range-requests: 6.6.0
- workbox-recipes: 6.6.0
- workbox-routing: 6.6.0
- workbox-strategies: 6.6.0
- workbox-streams: 6.6.0
- workbox-sw: 6.6.0
- workbox-window: 6.6.0
- transitivePeerDependencies:
- - '@types/babel__core'
- - supports-color
- dev: true
-
- /workbox-cacheable-response@6.6.0:
- resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==}
- deprecated: workbox-background-sync@6.6.0
- dependencies:
- workbox-core: 6.6.0
- dev: true
-
- /workbox-core@6.6.0:
- resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==}
- dev: true
-
- /workbox-expiration@6.6.0:
- resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==}
- dependencies:
- idb: 7.1.1
- workbox-core: 6.6.0
- dev: true
-
- /workbox-google-analytics@6.6.0:
- resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==}
- dependencies:
- workbox-background-sync: 6.6.0
- workbox-core: 6.6.0
- workbox-routing: 6.6.0
- workbox-strategies: 6.6.0
- dev: true
-
- /workbox-navigation-preload@6.6.0:
- resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==}
- dependencies:
- workbox-core: 6.6.0
- dev: true
-
- /workbox-precaching@6.6.0:
- resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==}
- dependencies:
- workbox-core: 6.6.0
- workbox-routing: 6.6.0
- workbox-strategies: 6.6.0
- dev: true
-
- /workbox-range-requests@6.6.0:
- resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==}
- dependencies:
- workbox-core: 6.6.0
- dev: true
-
- /workbox-recipes@6.6.0:
- resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==}
- dependencies:
- workbox-cacheable-response: 6.6.0
- workbox-core: 6.6.0
- workbox-expiration: 6.6.0
- workbox-precaching: 6.6.0
- workbox-routing: 6.6.0
- workbox-strategies: 6.6.0
- dev: true
-
- /workbox-routing@6.6.0:
- resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==}
- dependencies:
- workbox-core: 6.6.0
- dev: true
-
- /workbox-strategies@6.6.0:
- resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==}
- dependencies:
- workbox-core: 6.6.0
- dev: true
-
- /workbox-streams@6.6.0:
- resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==}
- dependencies:
- workbox-core: 6.6.0
- workbox-routing: 6.6.0
- dev: true
-
- /workbox-sw@6.6.0:
- resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==}
- dev: true
-
- /workbox-webpack-plugin@6.6.0(webpack@5.83.1):
- resolution: {integrity: sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- webpack: ^4.4.0 || ^5.9.0
- dependencies:
- fast-json-stable-stringify: 2.1.0
- pretty-bytes: 5.6.0
- upath: 1.2.0
- webpack: 5.83.1(webpack-cli@5.1.1)
- webpack-sources: 1.4.3
- workbox-build: 6.6.0
- transitivePeerDependencies:
- - '@types/babel__core'
- - supports-color
- dev: true
-
- /workbox-window@6.6.0:
- resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==}
- dependencies:
- '@types/trusted-types': 2.0.3
- workbox-core: 6.6.0
- dev: true
-
/wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -10277,19 +4826,6 @@ packages:
signal-exit: 3.0.7
dev: true
- /ws@7.5.9:
- resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
- engines: {node: '>=8.3.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: ^5.0.2
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
- dev: true
-
/xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
@@ -10301,6 +4837,7 @@ packages:
/yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ dev: true
/yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
@@ -10340,16 +4877,3 @@ packages:
/yuv-canvas@1.2.11:
resolution: {integrity: sha512-LOxjD+gUO7XeHeExFEozpTEFBlbqEZOnaHLAwx4esJ2tzSWl/S/xDRSDu1N+asxYn7ldV+HtisrYAzJXkT7Rhw==}
dev: false
-
- /zod@3.21.4:
- resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
-
- /zone.js@0.13.0:
- resolution: {integrity: sha512-7m3hNNyswsdoDobCkYNAy5WiUulkMd3+fWaGT9ij6iq3Zr/IwJo4RMCYPSDjT+r7tnPErmY9sZpKhWQ8S5k6XQ==}
- dependencies:
- tslib: 2.6.0
- dev: true
-
- /zwitch@2.0.4:
- resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
- dev: true
diff --git a/common/config/rush/repo-state.json b/common/config/rush/repo-state.json
index 0314d25f..54723ed5 100644
--- a/common/config/rush/repo-state.json
+++ b/common/config/rush/repo-state.json
@@ -1,5 +1,5 @@
// DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush.
{
- "pnpmShrinkwrapHash": "7ff85498516349bbcbac5a8cf727d7b50d06a052",
+ "pnpmShrinkwrapHash": "dc62ec1a4af471dffb7719bc09ca0069e3a4e6d3",
"preferredVersionsHash": "bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f"
}
diff --git a/libraries/adb-daemon-direct-sockets/.eslintrc.cjs b/libraries/adb-daemon-direct-sockets/.eslintrc.cjs
deleted file mode 100644
index 40d283a4..00000000
--- a/libraries/adb-daemon-direct-sockets/.eslintrc.cjs
+++ /dev/null
@@ -1,11 +0,0 @@
-module.exports = {
- "extends": [
- "@yume-chan"
- ],
- parserOptions: {
- tsconfigRootDir: __dirname,
- project: [
- "./tsconfig.build.json"
- ],
- },
-}
diff --git a/libraries/adb-daemon-direct-sockets/.npmignore b/libraries/adb-daemon-direct-sockets/.npmignore
deleted file mode 100644
index e44e2e62..00000000
--- a/libraries/adb-daemon-direct-sockets/.npmignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.rush
-
-# Test
-coverage
-**/*.spec.ts
-**/*.spec.js
-**/*.spec.js.map
-**/__helpers__
-jest.config.js
-
-.eslintrc.cjs
-tsconfig.json
-tsconfig.test.json
-
-# Logs
-*.log
diff --git a/libraries/adb-daemon-direct-sockets/README.md b/libraries/adb-daemon-direct-sockets/README.md
deleted file mode 100644
index dd5bd96e..00000000
--- a/libraries/adb-daemon-direct-sockets/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# `@yume-chan/adb-daemon-direct-sockets`
-
-Use [Direct Sockets API](https://wicg.github.io/direct-sockets/) for plugin-free ADB over WiFi connection.
-
-Note: Direct Sockets API is still under development. Currently it's only available in Chrome and requires extra command line arguments to enable. This package is not ready to be used in production, thus not published to NPM registry.
diff --git a/libraries/adb-daemon-direct-sockets/package.json b/libraries/adb-daemon-direct-sockets/package.json
deleted file mode 100644
index be9da5a3..00000000
--- a/libraries/adb-daemon-direct-sockets/package.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "name": "@yume-chan/adb-daemon-direct-sockets",
- "private": true,
- "version": "0.0.9",
- "description": "ADB daemon transport connection for `@yume-chan/adb` using Direct Sockets API.",
- "keywords": [
- "adb",
- "direct-sockets"
- ],
- "author": {
- "name": "Simon Chan",
- "email": "cnsimonchan@live.com",
- "url": "https://chensi.moe/blog"
- },
- "homepage": "https://github.com/yume-chan/ya-webadb/tree/main/libraries/adb-daemon-direct-sockets#readme",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/yume-chan/ya-webadb.git",
- "directory": "libraries/adb-daemon-direct-sockets"
- },
- "bugs": {
- "url": "https://github.com/yume-chan/ya-webadb/issues"
- },
- "license": "MIT",
- "type": "module",
- "main": "esm/index.js",
- "types": "esm/index.d.ts",
- "scripts": {
- "build": "tsc -b tsconfig.build.json",
- "build:watch": "tsc -b tsconfig.build.json",
- "lint": "eslint src/**/*.ts --fix && prettier src/**/*.ts --write --tab-width 4",
- "prepublishOnly": "npm run build"
- },
- "dependencies": {
- "@yume-chan/adb": "workspace:^0.0.21",
- "@yume-chan/stream-extra": "workspace:^0.0.21",
- "tslib": "^2.6.0"
- },
- "devDependencies": {
- "@yume-chan/eslint-config": "workspace:^1.0.0",
- "@yume-chan/tsconfig": "workspace:^1.0.0",
- "eslint": "^8.44.0",
- "prettier": "^3.0.0",
- "typescript": "^5.1.6"
- }
-}
diff --git a/libraries/adb-daemon-direct-sockets/src/index.ts b/libraries/adb-daemon-direct-sockets/src/index.ts
deleted file mode 100644
index 16609ed9..00000000
--- a/libraries/adb-daemon-direct-sockets/src/index.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import type { AdbDaemonDevice } from "@yume-chan/adb";
-import { AdbPacket, AdbPacketSerializeStream } from "@yume-chan/adb";
-import type { ReadableStream, WritableStream } from "@yume-chan/stream-extra";
-import {
- StructDeserializeStream,
- UnwrapConsumableStream,
- WrapReadableStream,
- WrapWritableStream,
-} from "@yume-chan/stream-extra";
-
-declare global {
- interface TCPSocketOpenInfo {
- readable: ReadableStream;
- writable: WritableStream;
-
- remoteAddress: string;
- remotePort: number;
-
- localAddress: string;
- localPort: number;
- }
-
- interface TCPSocket {
- opened: Promise;
- closed: Promise;
-
- close(): Promise;
- }
-
- interface TCPSocketOptions {
- sendBufferSize?: number;
- receiveBufferSize?: number;
-
- noDelay?: boolean;
- keepAliveDelay?: number;
- }
-
- // eslint-disable-next-line no-var
- var TCPSocket: {
- new (
- remoteAddress: string,
- remotePort: number,
- options?: TCPSocketOptions,
- ): TCPSocket;
- };
-}
-
-export default class AdbDaemonDirectSocketsDevice implements AdbDaemonDevice {
- static isSupported(): boolean {
- return typeof globalThis.TCPSocket !== "undefined";
- }
-
- readonly serial: string;
-
- readonly host: string;
-
- readonly port: number;
-
- name: string | undefined;
-
- constructor(host: string, port = 5555, name?: string) {
- this.host = host;
- this.port = port;
- this.serial = `${host}:${port}`;
- this.name = name;
- }
-
- async connect() {
- const socket = new globalThis.TCPSocket(this.host, this.port, {
- noDelay: true,
- });
- const { readable, writable } = await socket.opened;
-
- return {
- readable: new WrapReadableStream(readable).pipeThrough(
- new StructDeserializeStream(AdbPacket),
- ),
- writable: new WrapWritableStream(writable)
- .bePipedThroughFrom(new UnwrapConsumableStream())
- .bePipedThroughFrom(new AdbPacketSerializeStream()),
- };
- }
-}
diff --git a/libraries/adb-daemon-direct-sockets/tsconfig.build.json b/libraries/adb-daemon-direct-sockets/tsconfig.build.json
deleted file mode 100644
index 6717d857..00000000
--- a/libraries/adb-daemon-direct-sockets/tsconfig.build.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "extends": "./node_modules/@yume-chan/tsconfig/tsconfig.base.json",
- "compilerOptions": {
- "lib": [
- "ESNext",
- "DOM"
- ],
- },
- "references": [
- {
- "path": "../adb/tsconfig.build.json"
- },
- {
- "path": "../stream-extra/tsconfig.build.json"
- },
- ]
-}
diff --git a/libraries/adb-daemon-direct-sockets/tsconfig.json b/libraries/adb-daemon-direct-sockets/tsconfig.json
deleted file mode 100644
index 3dce3aea..00000000
--- a/libraries/adb-daemon-direct-sockets/tsconfig.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "references": [
- {
- "path": "./tsconfig.build.json"
- },
- ]
-}
diff --git a/libraries/adb-daemon-ws/.eslintrc.cjs b/libraries/adb-daemon-ws/.eslintrc.cjs
deleted file mode 100644
index 40d283a4..00000000
--- a/libraries/adb-daemon-ws/.eslintrc.cjs
+++ /dev/null
@@ -1,11 +0,0 @@
-module.exports = {
- "extends": [
- "@yume-chan"
- ],
- parserOptions: {
- tsconfigRootDir: __dirname,
- project: [
- "./tsconfig.build.json"
- ],
- },
-}
diff --git a/libraries/adb-daemon-ws/.npmignore b/libraries/adb-daemon-ws/.npmignore
deleted file mode 100644
index e44e2e62..00000000
--- a/libraries/adb-daemon-ws/.npmignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.rush
-
-# Test
-coverage
-**/*.spec.ts
-**/*.spec.js
-**/*.spec.js.map
-**/__helpers__
-jest.config.js
-
-.eslintrc.cjs
-tsconfig.json
-tsconfig.test.json
-
-# Logs
-*.log
diff --git a/libraries/adb-daemon-ws/README.md b/libraries/adb-daemon-ws/README.md
deleted file mode 100644
index d3f694eb..00000000
--- a/libraries/adb-daemon-ws/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# `@yume-chan/adb-daemon-ws`
-
-ADB daemon transport connection for `@yume-chan/adb` using WebSocket API.
-
-Requires WebSockify softwares to bridge the connection between TCP (ADB over Wi-Fi) and WebSocket.
-
-**WARNING:** WebSocket is an unreliable protocol! When send buffer is full, it will throw away any new-coming data, or even cut the connection completely.
-
-Note: This package only demonstrate the possibility. It's not intended to be used in production, thus not published to NPM registry.
diff --git a/libraries/adb-daemon-ws/package.json b/libraries/adb-daemon-ws/package.json
deleted file mode 100644
index 8bf50793..00000000
--- a/libraries/adb-daemon-ws/package.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "name": "@yume-chan/adb-daemon-ws",
- "private": true,
- "version": "0.0.9",
- "description": "ADB daemon transport connection for `@yume-chan/adb` using WebSocket API.",
- "keywords": [
- "websocket",
- "adb"
- ],
- "license": "MIT",
- "author": {
- "name": "Simon Chan",
- "email": "cnsimonchan@live.com",
- "url": "https://chensi.moe/blog"
- },
- "homepage": "https://github.com/yume-chan/ya-webadb/tree/main/libraries/adb-daemon-ws#readme",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/yume-chan/ya-webadb.git",
- "directory": "libraries/adb-daemon-ws"
- },
- "bugs": {
- "url": "https://github.com/yume-chan/ya-webadb/issues"
- },
- "type": "module",
- "main": "esm/index.js",
- "types": "esm/index.d.ts",
- "scripts": {
- "build": "tsc -b tsconfig.build.json",
- "build:watch": "tsc -b tsconfig.build.json",
- "lint": "eslint src/**/*.ts --fix"
- },
- "dependencies": {
- "@yume-chan/adb": "workspace:^0.0.21",
- "@yume-chan/stream-extra": "workspace:^0.0.21",
- "tslib": "^2.6.0"
- },
- "devDependencies": {
- "@yume-chan/eslint-config": "workspace:^1.0.0",
- "@yume-chan/tsconfig": "workspace:^1.0.0",
- "eslint": "^8.44.0",
- "jest": "^29.5.0",
- "prettier": "^3.0.0",
- "typescript": "^5.1.6"
- }
-}
diff --git a/libraries/adb-daemon-ws/src/index.ts b/libraries/adb-daemon-ws/src/index.ts
deleted file mode 100644
index b732cf81..00000000
--- a/libraries/adb-daemon-ws/src/index.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-import type { AdbDaemonDevice } from "@yume-chan/adb";
-import {
- AdbPacket,
- AdbPacketSerializeStream,
- unreachable,
-} from "@yume-chan/adb";
-import type { Consumable } from "@yume-chan/stream-extra";
-import {
- ConsumableWritableStream,
- DuplexStreamFactory,
- ReadableStream,
- StructDeserializeStream,
- pipeFrom,
-} from "@yume-chan/stream-extra";
-
-export default class AdbDaemonWebSocketDevice implements AdbDaemonDevice {
- readonly serial: string;
-
- name: string | undefined;
-
- constructor(url: string, name?: string) {
- this.serial = url;
- this.name = name;
- }
-
- async connect() {
- const socket = new WebSocket(this.serial);
- socket.binaryType = "arraybuffer";
-
- await new Promise((resolve, reject) => {
- socket.onopen = resolve;
- socket.onerror = () => {
- reject(new Error("WebSocket connect failed"));
- };
- });
-
- const duplex = new DuplexStreamFactory<
- Uint8Array,
- Consumable
- >({
- close: () => {
- socket.close();
- },
- });
-
- socket.onclose = () => {
- duplex.dispose().catch(unreachable);
- };
-
- const readable = duplex.wrapReadable(
- new ReadableStream(
- {
- start: (controller) => {
- socket.onmessage = ({
- data,
- }: {
- data: ArrayBuffer;
- }) => {
- controller.enqueue(new Uint8Array(data));
- };
- },
- },
- {
- highWaterMark: 16 * 1024,
- size(chunk) {
- return chunk.byteLength;
- },
- }
- )
- );
-
- const writable = duplex.createWritable(
- new ConsumableWritableStream({
- write(chunk) {
- socket.send(chunk);
- },
- })
- );
-
- return {
- readable: readable.pipeThrough(
- new StructDeserializeStream(AdbPacket)
- ),
- writable: pipeFrom(writable, new AdbPacketSerializeStream()),
- };
- }
-}
diff --git a/libraries/adb-daemon-ws/tsconfig.build.json b/libraries/adb-daemon-ws/tsconfig.build.json
deleted file mode 100644
index bae95b66..00000000
--- a/libraries/adb-daemon-ws/tsconfig.build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "./node_modules/@yume-chan/tsconfig/tsconfig.base.json",
- "compilerOptions": {
- "lib": [
- "ESNext",
- "DOM"
- ]
- },
-}
diff --git a/libraries/adb-daemon-ws/tsconfig.json b/libraries/adb-daemon-ws/tsconfig.json
deleted file mode 100644
index 89469380..00000000
--- a/libraries/adb-daemon-ws/tsconfig.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "references": [
- {
- "path": "../adb/tsconfig.build.json"
- },
- {
- "path": "../stream-extra/tsconfig.build.json"
- },
- {
- "path": "./tsconfig.build.json"
- },
- ]
-}
diff --git a/libraries/b-tree/.eslintrc.cjs b/libraries/b-tree/.eslintrc.cjs
deleted file mode 100644
index e225d0db..00000000
--- a/libraries/b-tree/.eslintrc.cjs
+++ /dev/null
@@ -1,11 +0,0 @@
-module.exports = {
- "extends": [
- "@yume-chan"
- ],
- parserOptions: {
- tsconfigRootDir: __dirname,
- project: [
- "./tsconfig.test.json"
- ],
- },
-}
diff --git a/libraries/b-tree/.npmignore b/libraries/b-tree/.npmignore
deleted file mode 100644
index e44e2e62..00000000
--- a/libraries/b-tree/.npmignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.rush
-
-# Test
-coverage
-**/*.spec.ts
-**/*.spec.js
-**/*.spec.js.map
-**/__helpers__
-jest.config.js
-
-.eslintrc.cjs
-tsconfig.json
-tsconfig.test.json
-
-# Logs
-*.log
diff --git a/libraries/b-tree/CHANGELOG.json b/libraries/b-tree/CHANGELOG.json
deleted file mode 100644
index 601386df..00000000
--- a/libraries/b-tree/CHANGELOG.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "name": "@yume-chan/b-tree",
- "entries": [
- {
- "version": "0.0.21",
- "tag": "@yume-chan/b-tree_v0.0.21",
- "date": "Fri, 25 Aug 2023 14:05:18 GMT",
- "comments": {}
- },
- {
- "version": "0.0.20",
- "tag": "@yume-chan/b-tree_v0.0.20",
- "date": "Mon, 05 Jun 2023 02:51:41 GMT",
- "comments": {}
- }
- ]
-}
diff --git a/libraries/b-tree/CHANGELOG.md b/libraries/b-tree/CHANGELOG.md
deleted file mode 100644
index cee08dac..00000000
--- a/libraries/b-tree/CHANGELOG.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Change Log - @yume-chan/b-tree
-
-This log was last generated on Fri, 25 Aug 2023 14:05:18 GMT and should not be manually modified.
-
-## 0.0.21
-Fri, 25 Aug 2023 14:05:18 GMT
-
-_Version update only_
-
-## 0.0.20
-Mon, 05 Jun 2023 02:51:41 GMT
-
-_Initial release_
-
diff --git a/libraries/b-tree/LICENSE b/libraries/b-tree/LICENSE
deleted file mode 100644
index 9bd36e79..00000000
--- a/libraries/b-tree/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2020-2023 Simon Chan
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/libraries/b-tree/README.md b/libraries/b-tree/README.md
deleted file mode 100644
index 5485839a..00000000
--- a/libraries/b-tree/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# @yume-chan/b-tree
-
-A simple B-Tree set implementation in TypeScript.
-
-- [x] custom order
-- [x] add
-- [x] delete
-- [x] has
-- [x] clear
-- [x] iterate
diff --git a/libraries/b-tree/jest.config.js b/libraries/b-tree/jest.config.js
deleted file mode 100644
index ff68d1cb..00000000
--- a/libraries/b-tree/jest.config.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/** @type {import('ts-jest').JestConfigWithTsJest} */
-export default {
- preset: "ts-jest/presets/default-esm",
- extensionsToTreatAsEsm: [".ts"],
- transform: {
- "^.+\\.tsx?$": [
- "ts-jest",
- { tsconfig: "tsconfig.test.json", useESM: true },
- ],
- },
- moduleNameMapper: {
- "^(\\.{1,2}/.*)\\.js$": "$1",
- },
-};
diff --git a/libraries/b-tree/package.json b/libraries/b-tree/package.json
deleted file mode 100644
index f1a052f2..00000000
--- a/libraries/b-tree/package.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "name": "@yume-chan/b-tree",
- "version": "0.0.21",
- "description": "A B-tree implementation in TypeScript",
- "keywords": [
- "data-structure",
- "tree",
- "b-tree",
- "typescript"
- ],
- "license": "MIT",
- "author": {
- "name": "Simon Chan",
- "email": "cnsimonchan@live.com",
- "url": "https://chensi.moe/blog"
- },
- "homepage": "https://github.com/yume-chan/ya-webadb/tree/main/packages/b-tree#readme",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/yume-chan/ya-webadb.git",
- "directory": "packages/b-tree"
- },
- "bugs": {
- "url": "https://github.com/yume-chan/ya-webadb/issues"
- },
- "type": "module",
- "main": "esm/index.js",
- "types": "esm/index.d.ts",
- "scripts": {
- "build": "tsc -b tsconfig.build.json",
- "build:watch": "tsc -b tsconfig.build.json",
- "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --coverage",
- "lint": "eslint src/**/*.ts --fix && prettier src/**/*.ts --write --tab-width 4",
- "prepublishOnly": "npm run build"
- },
- "dependencies": {
- "tslib": "^2.6.0"
- },
- "devDependencies": {
- "@jest/globals": "^29.6.1",
- "@yume-chan/eslint-config": "workspace:^1.0.0",
- "@yume-chan/tsconfig": "workspace:^1.0.0",
- "cross-env": "^7.0.3",
- "eslint": "^8.44.0",
- "jest": "^29.5.0",
- "prettier": "^3.0.0",
- "ts-jest": "^29.1.1",
- "typescript": "^5.1.6"
- }
-}
diff --git a/libraries/b-tree/src/index.spec.ts b/libraries/b-tree/src/index.spec.ts
deleted file mode 100644
index 869f641f..00000000
--- a/libraries/b-tree/src/index.spec.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-import { describe, expect, it } from "@jest/globals";
-
-import type { BTreeNode } from "./index.js";
-import { BTree } from "./index.js";
-
-const LENGTH = 128;
-
-function shuffle(array: T[]) {
- for (let i = array.length - 1; i > 0; i -= 1) {
- const j = (Math.random() * (i + 1)) | 0;
- [array[i], array[j]] = [array[j]!, array[i]!];
- }
-}
-
-describe("BTree", () => {
- function validateNode(node: BTreeNode, root: boolean, min = -Infinity) {
- if (node.height === 0) {
- expect(node.keyCount).toBeGreaterThan(0);
- expect(node.keyCount).toBeLessThan(node.order);
- for (let i = 0; i < node.keyCount; i += 1) {
- expect(node.keys[i]).toBeGreaterThan(min);
- min = node.keys[i]!;
- }
- return min;
- }
-
- if (!root) {
- // Math.ceil(order / 2) - 1
- expect(node.keyCount).toBeGreaterThanOrEqual(
- ((node.order + 1) >> 1) - 1,
- );
- }
- expect(node.keyCount).toBeLessThan(node.order);
-
- for (let i = 0; i < node.keyCount; i += 1) {
- min = validateNode(node.children[i]!, false, min);
- expect(node.keys[i]).toBeGreaterThan(min);
- min = node.keys[i]!;
- }
- min = validateNode(node.children[node.keyCount]!, false, min);
- return min;
- }
-
- function validateTree(tree: BTree) {
- if (tree.size === 0) {
- expect(tree.root.keyCount).toBe(0);
- return;
- }
-
- validateNode(tree.root, true);
- }
-
- for (let order = 3; order < 10; order += 1) {
- describe(`order ${order}`, () => {
- it("should generate valid tree with incremental values", () => {
- const tree = new BTree(order);
-
- const values = Array.from(
- { length: LENGTH },
- (_, i) => i - LENGTH / 2,
- );
- for (const value of values) {
- tree.add(value);
- validateTree(tree);
- expect(tree.has(value)).toBe(true);
- }
-
- for (const value of values) {
- tree.delete(value);
- validateTree(tree);
- expect(tree.has(value)).toBe(false);
- }
- });
-
- it("should generate valid tree with random values", () => {
- const tree = new BTree(order);
-
- const values = Array.from(
- { length: LENGTH },
- (_, i) => i - LENGTH / 2,
- );
- shuffle(values);
- for (const value of values) {
- tree.add(value);
- validateTree(tree);
- expect(tree.has(value)).toBe(true);
- }
-
- shuffle(values);
- for (const value of values) {
- tree.delete(value);
- validateTree(tree);
- expect(tree.has(value)).toBe(false);
- }
- });
- });
- }
-});
diff --git a/libraries/b-tree/src/index.ts b/libraries/b-tree/src/index.ts
deleted file mode 100644
index c2266f37..00000000
--- a/libraries/b-tree/src/index.ts
+++ /dev/null
@@ -1,418 +0,0 @@
-interface BTreeInsertionResult {
- key: number;
- child: BTreeNode;
-}
-
-function insert(
- array: Int32Array,
- length: number,
- value: number,
- index: number,
-) {
- if (index !== length) {
- array.set(array.subarray(index, length), index + 1);
- }
- array[index] = value;
-}
-
-function remove(array: Int32Array, length: number, index: number) {
- if (index < length - 1) {
- array.set(array.subarray(index + 1, length), index);
- }
-}
-
-export class BTreeNode {
- order: number;
- mid: number;
- minKeyCount: number;
-
- keys: Int32Array;
- keyCount: number;
-
- height: number;
- children: BTreeNode[];
-
- constructor(
- order: number,
- keys: Int32Array,
- keyCount: number,
- height: number,
- children: BTreeNode[],
- ) {
- this.order = order;
- this.mid = this.order >> 1;
- // Math.ceil(order / 2) - 1
- this.minKeyCount = ((this.order + 1) >> 1) - 1;
-
- this.keys = keys;
- this.keyCount = keyCount;
-
- this.height = height;
- this.children = children;
- }
-
- /**
- * Split the current node into two
- * @param value The key to be inserted.
- * @param index The index of the key to be inserted at.
- * @param child The child (right to the key) to be inserted. May be undefined when current node is a leaf.
- * @returns The new key and child need to be inserted to its parent.
- * The new key is the middle key of the current node, and the child contains the right half of the current node.
- */
- protected split(
- value: number,
- index: number,
- child?: BTreeNode,
- ): BTreeInsertionResult {
- let middleKey: number;
- const rightKeys = new Int32Array(this.order - 1);
- let rightChildren: BTreeNode[];
-
- if (index < this.mid) {
- middleKey = this.keys[this.mid - 1]!;
- rightKeys.set(this.keys.subarray(this.mid), 0);
-
- insert(this.keys, this.mid - 1, value, index);
-
- if (child) {
- // internal node
- rightChildren = this.children.splice(
- this.mid,
- this.order - this.mid,
- );
- // TODO: this may cause the underlying array to grow (re-alloc and copy)
- // investigate if this hurts performance.
- this.children.splice(index + 1, 0, child);
- } else {
- // leaf node, doesn't have children, create am empty array for it.
- rightChildren = new Array(this.order);
- }
- } else {
- if (index === this.mid) {
- middleKey = value;
- rightKeys.set(this.keys.subarray(this.mid), 0);
- } else {
- middleKey = this.keys[this.mid]!;
- if (index !== this.mid + 1) {
- rightKeys.set(this.keys.subarray(this.mid + 1, index), 0);
- }
- rightKeys[index - this.mid - 1] = value;
- rightKeys.set(this.keys.subarray(index), index - this.mid);
- }
-
- if (child) {
- rightChildren = this.children.splice(
- this.mid + 1,
- this.order - this.mid - 1,
- );
- rightChildren.splice(index - this.mid, 0, child);
- } else {
- rightChildren = new Array(this.order);
- }
- }
-
- this.keyCount = this.mid;
- return {
- key: middleKey,
- child: new BTreeNode(
- this.order,
- rightKeys,
- this.order - 1 - this.mid,
- this.height,
- rightChildren,
- ),
- };
- }
-
- search(value: number): number {
- let start = 0;
- let end = this.keyCount - 1;
- while (start <= end) {
- const mid = (start + end) >> 1;
- if (this.keys[mid] === value) {
- return mid;
- } else if (this.keys[mid]! < value) {
- start = mid + 1;
- } else {
- end = mid - 1;
- }
- }
- return ~start;
- }
-
- has(value: number): boolean {
- let index = this.search(value);
-
- if (index >= 0) {
- return true;
- }
-
- if (this.height > 0) {
- index = ~index;
- return this.children[index]!.has(value);
- }
-
- return false;
- }
-
- add(value: number): BTreeInsertionResult | boolean {
- let index = this.search(value);
- if (index >= 0) {
- return false;
- }
-
- index = ~index;
-
- if (this.height === 0) {
- if (this.keyCount === this.order - 1) {
- return this.split(value, index);
- }
-
- insert(this.keys, this.keyCount, value, index);
- this.keyCount += 1;
- return true;
- }
-
- const split = this.children[index]!.add(value);
- if (typeof split === "object") {
- if (this.keyCount === this.order - 1) {
- return this.split(split.key, index, split.child);
- }
-
- insert(this.keys, this.keyCount, split.key, index);
- this.keyCount += 1;
-
- this.children.splice(index + 1, 0, split.child);
- }
-
- return true;
- }
-
- delete(value: number): boolean {
- let index = this.search(value);
- if (index >= 0) {
- this.deleteAt(index);
- return true;
- }
-
- if (this.height === 0) {
- return false;
- }
-
- index = ~index;
- const deleted = this.children[index]!.delete(value);
-
- if (deleted) {
- this.balance(index);
- }
-
- return deleted;
- }
-
- max(): number {
- if (this.height === 0) {
- return this.keys[this.keyCount - 1]!;
- }
- return this.children[this.keyCount]!.max();
- }
-
- protected balance(index: number) {
- const child = this.children[index]!;
-
- if (child.keyCount >= this.minKeyCount) {
- return;
- }
-
- if (index > 0) {
- const left = this.children[index - 1]!;
- if (left.keyCount > this.minKeyCount) {
- // rotate right
- insert(child.keys, child.keyCount, this.keys[index - 1]!, 0);
- if (this.height > 1) {
- child.children.splice(0, 0, left.children[left.keyCount]!);
- }
- child.keyCount += 1;
-
- this.keys[index - 1] = left.keys[left.keyCount - 1]!;
- left.keyCount -= 1;
- return;
- }
-
- // merge with left
- left.keys[left.keyCount] = this.keys[index - 1]!;
- left.keyCount += 1;
- left.keys.set(
- child.keys.subarray(0, child.keyCount),
- left.keyCount,
- );
- if (this.height > 1) {
- for (let i = 0; i <= child.keyCount; i += 1) {
- left.children[left.keyCount + i] = child.children[i]!;
- }
- }
- left.keyCount += child.keyCount;
- remove(this.keys, this.keyCount, index - 1);
- this.children.splice(index, 1);
- this.keyCount -= 1;
- return;
- }
-
- const right = this.children[index + 1]!;
- if (right.keyCount > this.minKeyCount) {
- // rotate left
- child.keys[child.keyCount] = this.keys[index]!;
- if (this.height > 1) {
- child.children[child.keyCount + 1] = right.children.splice(
- 0,
- 1,
- )[0]!;
- }
- child.keyCount += 1;
-
- this.keys[index] = right.keys[0]!;
-
- remove(right.keys, right.keyCount, 0);
- right.keyCount -= 1;
- return;
- }
-
- // merge right into child
- child.keys[child.keyCount] = this.keys[index]!;
- child.keyCount += 1;
- child.keys.set(right.keys.subarray(0, right.keyCount), child.keyCount);
- if (this.height > 1) {
- for (let i = 0; i <= right.keyCount; i += 1) {
- child.children[child.keyCount + i] = right.children[i]!;
- }
- }
- child.keyCount += right.keyCount;
- remove(this.keys, this.keyCount, index);
- this.children.splice(index + 1, 1);
- this.keyCount -= 1;
- }
-
- protected deleteMax(): void {
- if (this.height === 0) {
- this.keyCount -= 1;
- return;
- }
-
- const child = this.children[this.keyCount]!;
- child.deleteMax();
- this.balance(this.keyCount);
- }
-
- protected deleteAt(index: number) {
- if (this.height === 0) {
- remove(this.keys, this.keyCount, index);
- this.keyCount -= 1;
- return;
- }
-
- const max = this.children[index]!.max();
- this.keys[index] = max;
- this.children[index]!.deleteMax();
- this.balance(index);
- }
-
- *[Symbol.iterator](): Generator {
- if (this.height > 0) {
- for (let i = 0; i < this.keyCount; i += 1) {
- yield* this.children[i]!;
- yield this.keys[i]!;
- }
- yield* this.children[this.keyCount]!;
- } else {
- for (let i = 0; i < this.keyCount; i += 1) {
- yield this.keys[i]!;
- }
- }
- }
-}
-
-export class BTree {
- #order: number;
- get order() {
- return this.#order;
- }
-
- #root: BTreeNode;
- /** @internal */
- get root() {
- return this.#root;
- }
-
- #size = 0;
- get size() {
- return this.#size;
- }
-
- constructor(order: number) {
- this.#order = order;
- const keys = new Int32Array(order - 1);
- const children = new Array(order);
- this.#root = new BTreeNode(order, keys, 0, 0, children);
- }
-
- has(value: number) {
- let node = this.#root;
- while (true) {
- const index = node.search(value);
- if (index >= 0) {
- return true;
- }
-
- node = node.children[~index]!;
- if (!node) {
- return false;
- }
- }
- }
-
- add(value: number) {
- const split = this.#root.add(value);
- if (typeof split === "object") {
- const keys = new Int32Array(this.#order - 1);
- keys[0] = split.key;
-
- const children = new Array(this.#order);
- children[0] = this.#root;
- children[1] = split.child;
-
- this.#root = new BTreeNode(
- this.#order,
- keys,
- 1,
- this.#root.height + 1,
- children,
- );
- }
- if (split) {
- this.#size += 1;
- }
- return !!split;
- }
-
- delete(value: number) {
- const deleted = this.#root.delete(value);
- if (deleted) {
- if (this.#root.height > 0 && this.#root.keyCount === 0) {
- this.#root = this.#root.children[0]!;
- }
- this.#size -= 1;
- }
- return deleted;
- }
-
- clear() {
- this.#root.keyCount = 0;
- this.#root.height = 0;
- // immediately release all references
- this.#root.children = new Array(this.#order);
- this.#size = 0;
- }
-
- [Symbol.iterator]() {
- return this.#root[Symbol.iterator]();
- }
-}
diff --git a/libraries/b-tree/tsconfig.build.json b/libraries/b-tree/tsconfig.build.json
deleted file mode 100644
index 2cb23249..00000000
--- a/libraries/b-tree/tsconfig.build.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": "./node_modules/@yume-chan/tsconfig/tsconfig.base.json"
-}
diff --git a/libraries/b-tree/tsconfig.json b/libraries/b-tree/tsconfig.json
deleted file mode 100644
index 85fc5a7a..00000000
--- a/libraries/b-tree/tsconfig.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "references": [
- {
- "path": "./tsconfig.test.json"
- },
- {
- "path": "./tsconfig.build.json"
- },
- ]
-}
diff --git a/libraries/b-tree/tsconfig.test.json b/libraries/b-tree/tsconfig.test.json
deleted file mode 100644
index e987f757..00000000
--- a/libraries/b-tree/tsconfig.test.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "./tsconfig.build.json",
- "compilerOptions": {
- "types": [
- ],
- },
- "exclude": []
-}
diff --git a/libraries/tabby-launcher/README.md b/libraries/tabby-launcher/README.md
deleted file mode 100644
index cd0dbe36..00000000
--- a/libraries/tabby-launcher/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# @yume-chan/tabby-launcher
-
-It's forked from https://github.com/Eugeny/tabby/blob/20479e9f274673b5a63d9ae7fe66d16b6331b267/web to improve bundle size.
-
-The original web container supports lazy loading any version of Tabby, but this version bundles a specified version.
diff --git a/libraries/tabby-launcher/app/assets/logo.svg b/libraries/tabby-launcher/app/assets/logo.svg
deleted file mode 100644
index b3330af1..00000000
--- a/libraries/tabby-launcher/app/assets/logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/libraries/tabby-launcher/app/src/app.module.ts b/libraries/tabby-launcher/app/src/app.module.ts
deleted file mode 100644
index 79c45989..00000000
--- a/libraries/tabby-launcher/app/src/app.module.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
-import { ApplicationRef, NgModule } from "@angular/core";
-import { BrowserModule } from "@angular/platform-browser";
-import { ToastrModule } from "ngx-toastr";
-
-export function getRootModule(plugins: any[]) {
- const imports = [
- BrowserModule,
- ...plugins,
- ToastrModule.forRoot({
- positionClass: "toast-bottom-center",
- toastClass: "toast",
- preventDuplicates: true,
- extendedTimeOut: 1000,
- }),
- ];
-
- const bootstrap = [
- ...plugins.filter((x) => x.bootstrap).map((x) => x.bootstrap),
- ];
-
- if (bootstrap.length === 0) {
- throw new Error(
- "Did not find any bootstrap components. Are there any plugins installed?"
- );
- }
-
- @NgModule({
- imports,
- })
- class RootModule {
- ngDoBootstrap(appRef: ApplicationRef) {
- (window as any)["requestAnimationFrame"] =
- window[window["Zone"].__symbol__("requestAnimationFrame")];
-
- const componentDef = bootstrap[0];
- appRef.bootstrap(componentDef);
- }
- }
-
- return RootModule;
-}
diff --git a/libraries/tabby-launcher/app/src/global.scss b/libraries/tabby-launcher/app/src/global.scss
deleted file mode 100644
index ac224569..00000000
--- a/libraries/tabby-launcher/app/src/global.scss
+++ /dev/null
@@ -1,201 +0,0 @@
-html {
- --spaciness: 1;
-}
-
-body {
- min-height: 100vh;
- overflow: hidden;
- background: transparent !important;
- -webkit-font-smoothing: antialiased;
-}
-
-.modal-dialog, .modal-backdrop, .no-drag {
- -webkit-app-region: no-drag;
-}
-
-.selectable {
- user-select: text;
-}
-
-a, button {
- &.btn {
- display: inline-flex;
- align-items: center;
- flex-wrap: nowrap;
-
- & > svg {
- pointer-events: none;
- // width: 16px;
- // height: 16px;
- }
- }
-}
-
-.form-line {
- display: flex;
- align-items: center;
- padding: 10px 0;
- margin: 0;
- min-height: 64px;
-
- .header {
- margin-right: auto;
-
- .title {
- }
-
- .description {
- font-size: 13px;
- opacity: .5;
- }
- }
-
- &>.form-control, &>.input-group {
- width: 33%;
- }
-
- &>.form-check {
- display: flex;
- }
-}
-
-input[type=range] {
- -webkit-appearance: none;
- background: transparent;
- outline: none;
- padding: 0;
-
- &:focus {
- border-color: transparent;
- }
-
- @mixin thumb() {
- -webkit-appearance: none;
- display: block;
- height: 12px;
- width: 12px;
- background: #aaa;
- border-radius: 6px;
- cursor: pointer;
- margin-top: -4px;
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.95);
- transition: 0.25s background;
-
- &:hover {
- background: #777;
- }
-
- &:active {
- background: #666;
- }
- }
-
- &::-webkit-slider-thumb { @include thumb(); }
- &::-moz-range-thumb { @include thumb(); }
- &::-ms-thumb { @include thumb(); }
- &::thumb { @include thumb(); }
-
- @mixin track() {
- height: 4px;
- background: #111;
- margin: 3px 0 0;
- box-sizing: border-box;
- }
-
- &::-webkit-slider-runnable-track { @include track(); }
- &:focus::-webkit-slider-runnable-track { @include track(); }
- &::-moz-range-track { @include track(); }
- &::-ms-track { @include track(); }
-}
-
-a[ngbdropdownitem] {
- cursor: pointer;
-}
-
-ngb-typeahead-window {
- max-height: 60vh;
- overflow: auto;
-}
-
-
-.hover-reveal {
- opacity: 0;
-
- .hover-reveal-parent:hover &,
- *:hover > &,
- &:hover,
- &.show {
- opacity: 1;
- }
-}
-
-
-@keyframes terminalShakeFrames {
- 0% {
- transform: translateX(0);
- }
- 25% {
- transform: translateX(5px);
- }
- 50% {
- transform: translateX(-5px);
- }
- 75% {
- transform: translateX(5px);
- }
- 100% {
- transform: translateX(0);
- }
-}
-
-.dropdown {
- .dropdown-toggle::after {
- vertical-align: 0.15em;
- margin-left: .5em;
- opacity: .5;
- }
-
- .dropdown-item {
- i + span {
- margin-left: 10px;
- }
- }
-}
-
-.no-wrap {
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-
-.list-group-item > button {
- margin: -7px 0;
-}
-
-.content-box {
- max-width: 600px;
-}
-
-
-// Windows high contrast mode
-@media screen and (forced-colors: active) {
- .form-switch .form-check-label::before {
- background: buttonface;
- }
-
- .form-switch .form-check-label::after {
- background: buttontext;
- }
-
- .form-switch .form-check-input:checked ~ .form-check-label::before {
- background: activetext;
- }
-
- .form-switch .form-check-input:checked ~ .form-check-label::after {
- background: canvas;
- }
-
- color-scheme-preview, terminaltab > .content {
- forced-color-adjust: none;
- }
-}
diff --git a/libraries/tabby-launcher/app/src/preload.scss b/libraries/tabby-launcher/app/src/preload.scss
deleted file mode 100644
index 7f72c897..00000000
--- a/libraries/tabby-launcher/app/src/preload.scss
+++ /dev/null
@@ -1,67 +0,0 @@
-app-root {
- background: #1D272D;
-}
-
-.preload-logo {
- -webkit-app-region: drag;
- position: fixed;
- left: 0;
- top: 0;
- width: 100vw;
- height: 100vh;
- display: flex;
- animation: 0.5s ease-out fadeIn;
- background-image: radial-gradient(#3a66820a 0%, #000e17 30%, black 100%);
- background-color: black;
-
- &>div {
- width: 200px;
- height: 200px;
- margin: auto;
- flex: none;
-
- .progress {
- background: rgba(0,0,0,.25);
- height: 3px;
- margin: 10px 50px;
-
- .bar {
- transition: 1s ease-out width;
- background: #a1c5e4;
- height: 3px;
- box-shadow: 0 0 2px #ffffff1f;
- }
- }
- }
-}
-
-
-@keyframes fadeIn {
- 0% { opacity: 0; }
- 100% { opacity: 1; }
-}
-
-
-
-.tabby-logo {
- width: 120px;
- height: 120px;
- background: url('../assets/logo.svg');
- background-repeat: none;
- background-size: contain;
- margin: auto;
-}
-
-
-.tabby-title {
- color: #a1c5e4;
- font-family: 'Source Sans Pro';
- text-align: center;
- font-weight: normal;
- font-size: 32px;
- margin: 0;
-
- sup {
- color: #842fe0;
- }
-}
diff --git a/libraries/tabby-launcher/app/src/toastr.scss b/libraries/tabby-launcher/app/src/toastr.scss
deleted file mode 100644
index c85259d3..00000000
--- a/libraries/tabby-launcher/app/src/toastr.scss
+++ /dev/null
@@ -1,28 +0,0 @@
-#toast-container {
- display: flex;
- flex-direction: column;
- align-items: center;
- padding: 20px 0 50px;
-
- .toast {
- box-shadow: 0 1px 0 rgba(0,0,0,.25);
- padding: 7px 12px;
- background-image: none;
- display: block !important;
- border: none !important;
- width: auto;
- flex-basis: auto;
- border-radius: 0.5rem;
- font-size: 0.75rem;
-
- &.toast-error {
- background-color: #BD362F;
- color: white !important;
- }
-
- &.toast-info {
- background-color: #555;
- color: #eee !important;
- }
- }
-}
diff --git a/libraries/tabby-launcher/browser/net.js b/libraries/tabby-launcher/browser/net.js
deleted file mode 100644
index f8a660ce..00000000
--- a/libraries/tabby-launcher/browser/net.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export function isIp() {
- return false;
-}
-
-export function connect() {
- throw new Error("Provide a connect implementation to Client");
-}
diff --git a/libraries/tabby-launcher/browser/node-url.d.ts b/libraries/tabby-launcher/browser/node-url.d.ts
deleted file mode 100644
index a5f43be5..00000000
--- a/libraries/tabby-launcher/browser/node-url.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-declare module "node-url" {
- export * from "url";
-}
diff --git a/libraries/tabby-launcher/browser/os.js b/libraries/tabby-launcher/browser/os.js
deleted file mode 100644
index da236fd1..00000000
--- a/libraries/tabby-launcher/browser/os.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export function homedir() {
- return "/home";
-}
-
-export function release() {
- return 0;
-}
diff --git a/libraries/tabby-launcher/browser/process.js b/libraries/tabby-launcher/browser/process.js
deleted file mode 100644
index 8389d3e4..00000000
--- a/libraries/tabby-launcher/browser/process.js
+++ /dev/null
@@ -1,18 +0,0 @@
-export const env = {};
-export const argv = ["tabby"];
-export const platform =
- navigator.platform === "MacIntel"
- ? "darwin"
- : navigator.platform === "Win32"
- ? "win32"
- : "linux";
-export const on = () => null;
-export const stdout = {};
-export const stderr = {};
-export const resourcesPath = "resources";
-export const version = "14.0.0";
-export const versions = {
- modules: 0,
-};
-export const nextTick = (f, ...args) => setTimeout(() => f(...args));
-export const cwd = () => "/";
diff --git a/libraries/tabby-launcher/browser/setImmediate.js b/libraries/tabby-launcher/browser/setImmediate.js
deleted file mode 100644
index 9fdf9307..00000000
--- a/libraries/tabby-launcher/browser/setImmediate.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export function setImmediate(callback) {
- Promise.resolve().then(callback);
-}
diff --git a/libraries/tabby-launcher/browser/tls.js b/libraries/tabby-launcher/browser/tls.js
deleted file mode 100644
index 14b14451..00000000
--- a/libraries/tabby-launcher/browser/tls.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export function connect() {
- throw new Error("Provide a connect implementation to Client");
-}
diff --git a/libraries/tabby-launcher/browser/url.js b/libraries/tabby-launcher/browser/url.js
deleted file mode 100644
index cffc3975..00000000
--- a/libraries/tabby-launcher/browser/url.js
+++ /dev/null
@@ -1 +0,0 @@
-export const pathToFileURL = (x) => `file://${x}`;
diff --git a/libraries/tabby-launcher/browser/zlib.js b/libraries/tabby-launcher/browser/zlib.js
deleted file mode 100644
index e43f8653..00000000
--- a/libraries/tabby-launcher/browser/zlib.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import { Inflate } from "pako/dist/pako_inflate";
-import { Transform } from "stream";
-
-class NodeInflate extends Transform {
- constructor() {
- super({ autoDestroy: true });
- this.inflate = new Inflate();
- this.inflate.onData = (chunk) => {
- this.push(chunk);
- };
- this.inflate.onEnd = () => {
- this.emit("end");
- };
- }
-
- _transform(chunk, encoding, callback) {
- this.inflate.push(chunk, false);
- callback();
- }
-
- _flush(callback) {
- this.inflate.push([], true);
- callback();
- }
-}
-
-export function createGunzip() {
- return new NodeInflate();
-}
-
-export function createInflate() {
- return new NodeInflate();
-}
-
-export function createBrotliDecompress() {
- throw new Error(
- "Not supported. Modify headers['Accept-Encoding'] to exclude 'br'"
- );
-}
diff --git a/libraries/tabby-launcher/package.json b/libraries/tabby-launcher/package.json
deleted file mode 100644
index 484ce652..00000000
--- a/libraries/tabby-launcher/package.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "devDependencies": {
- "@angular/animations": "^15.2.6",
- "@angular/cdk": "^15.2.6",
- "@angular/common": "^15.2.6",
- "@angular/compiler": "^15.2.6",
- "@angular/compiler-cli": "^15.2.6",
- "@angular/core": "^15.2.6",
- "@angular/forms": "^15.2.6",
- "@angular/platform-browser": "^15.2.6",
- "@angular/platform-browser-dynamic": "^15.2.6",
- "@fortawesome/fontawesome-free": "^6.4.0",
- "@ng-bootstrap/ng-bootstrap": "^14.1.1",
- "@popperjs/core": "^2.11.6",
- "@types/js-yaml": "^4.0.5",
- "@yume-chan/adb": "workspace:^0.0.21",
- "@yume-chan/async": "^2.2.0",
- "@yume-chan/stream-extra": "workspace:^0.0.21",
- "@yume-chan/tabby-tango": "workspace:^0.0.19",
- "buffer": "^6.0.3",
- "comlink": "^4.4.1",
- "console-browserify": "^1.2.0",
- "core-js": "^3.30.2",
- "crypto-browserify": "^3.12.0",
- "css-loader": "^6.7.4",
- "deepmerge": "^4.2.2",
- "js-yaml": "^4.1.0",
- "ngx-toastr": "^16.0.2",
- "pako": "^2.1.0",
- "path-browserify": "^1.0.1",
- "querystring-es3": "^0.2.1",
- "readable-stream": "^4.4.0",
- "rxjs": "^7.8.1",
- "sass": "^1.62.1",
- "sass-loader": "^13.2.0",
- "source-code-pro": "^2.38.0",
- "source-map-loader": "^4.0.1",
- "source-sans-pro": "3.6.0",
- "style-loader": "^3.3.3",
- "tabby-community-color-schemes": "^1.0.197-nightly.1",
- "tabby-core": "^1.0.197-nightly.1",
- "tabby-settings": "^1.0.197-nightly.1",
- "tabby-terminal": "^1.0.197-nightly.1",
- "tabby-web": "^1.0.197-nightly.1",
- "ts-loader": "^9.4.4",
- "typescript": "^5.1.6",
- "url": "^0.11.0",
- "util": "^0.12.5",
- "webpack": "^5.83.1",
- "webpack-bundle-analyzer": "^4.7.0",
- "webpack-cli": "^5.1.1",
- "zone.js": "^0.13.0"
- },
- "main": "dist/main.js",
- "name": "@yume-chan/tabby-launcher",
- "peerDependencies": {
- "@yume-chan/adb": "workspace:^0.0.21",
- "@yume-chan/async": "^2.2.0",
- "@yume-chan/stream-extra": "workspace:^0.0.21",
- "comlink": "^4.4.1"
- },
- "resolutions": {
- "**/util": "^0.12.0"
- },
- "scripts": {
- "build": "webpack --progress && node scripts/loader.mjs",
- "build:watch": "webpack --progress && node scripts/loader.mjs"
- },
- "version": "1.0.197-nightly.1"
-}
diff --git a/libraries/tabby-launcher/scripts/loader.mjs b/libraries/tabby-launcher/scripts/loader.mjs
deleted file mode 100644
index 0f4bba7f..00000000
--- a/libraries/tabby-launcher/scripts/loader.mjs
+++ /dev/null
@@ -1,16 +0,0 @@
-import fs from "node:fs";
-
-fs.writeFileSync(
- new URL("../dist/main.js", import.meta.url),
- "export {};\n" +
- fs
- .readFileSync(new URL("../dist/main.js", import.meta.url), "utf8")
- .replaceAll(/__webpack_require__\.p \+ "(.+)"/g, (_, match) => {
- return `new URL("./${match}", import.meta.url).toString()`;
- })
- .replaceAll(/__webpack_require__/g, "__webpack_require_nested__")
- .replace(
- "var scriptUrl;",
- "var scriptUrl = import.meta.url.toString();"
- )
-);
diff --git a/libraries/tabby-launcher/src/entry.ts b/libraries/tabby-launcher/src/entry.ts
deleted file mode 100644
index d9cf35a9..00000000
--- a/libraries/tabby-launcher/src/entry.ts
+++ /dev/null
@@ -1,339 +0,0 @@
-import "core-js/features/array/flat";
-import "core-js/proposals/reflect-metadata";
-import "rxjs";
-import "zone.js";
-
-import "@angular/compiler";
-
-import "@fortawesome/fontawesome-free/css/brands.css";
-import "@fortawesome/fontawesome-free/css/fontawesome.css";
-import "@fortawesome/fontawesome-free/css/regular.css";
-import "@fortawesome/fontawesome-free/css/solid.css";
-import "source-code-pro/source-code-pro.css";
-import "source-sans-pro/source-sans-pro.css";
-
-import "../app/src/global.scss";
-import "../app/src/preload.scss";
-import "../app/src/toastr.scss";
-
-import { ApplicationRef, NgModuleRef, enableProdMode } from "@angular/core";
-import { enableDebugTools } from "@angular/platform-browser";
-import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
-import { Adb, AdbIncomingSocketHandler, AdbTransport } from "@yume-chan/adb";
-import { PromiseResolver } from "@yume-chan/async";
-import {
- UnwrapConsumableStream,
- WrapWritableStream,
- type Consumable,
- type ReadableStream,
- type WritableStream,
-} from "@yume-chan/stream-extra";
-import * as Comlink from "comlink";
-import Yaml from "js-yaml";
-import { Subject } from "rxjs";
-import { BOOTSTRAP_DATA, BootstrapData } from "tabby-core";
-
-import { getRootModule } from "../app/src/app.module";
-
-import { AdbBanner } from "@yume-chan/adb/esm/banner";
-import * as TabbyTango from "@yume-chan/tabby-tango";
-import * as TabbyCommunityColorSchemes from "tabby-community-color-schemes";
-import * as TabbyCore from "tabby-core";
-import * as TabbySettings from "tabby-settings";
-import * as TabbyTerminal from "tabby-terminal";
-import * as TabbyWeb from "tabby-web";
-
-interface BootstrapOptions {
- packageModules: any[];
- bootstrapData: BootstrapData;
- debugMode: boolean;
- connector: any;
-}
-
-export type ValueOrPromise = T | PromiseLike;
-
-export interface AdbProxyTransportServer {
- disconnected: Promise;
-
- connect(
- service: string,
- callback: (
- readable: ReadableStream,
- writable: WritableStream,
- close: () => ValueOrPromise |