From 91e861c1087290d0702efff8b6868bacea7c41d0 Mon Sep 17 00:00:00 2001 From: purocean Date: Wed, 13 Feb 2019 20:35:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=86=85=E7=BD=AE=E7=BB=88?= =?UTF-8?q?=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 7.png | Bin 0 -> 123848 bytes README.md | 4 + backend/main.js | 20 ++- backend/package.json | 4 +- backend/yarn.lock | 224 +++++++++++++++++++++++++- frontend/config/index.js | 4 + frontend/package.json | 4 +- frontend/src/components/RunPlugin.js | 8 +- frontend/src/components/StatusBar.vue | 14 +- frontend/src/components/View.vue | 9 +- frontend/src/components/Xterm.vue | 113 +++++++++++++ frontend/src/pages/Home.vue | 62 ++++--- frontend/yarn.lock | 147 ++++++++++++++++- 13 files changed, 580 insertions(+), 33 deletions(-) create mode 100644 7.png create mode 100644 frontend/src/components/Xterm.vue diff --git a/7.png b/7.png new file mode 100644 index 0000000000000000000000000000000000000000..b615872aef1cbb951bbcab1dd42f85fe26de8679 GIT binary patch literal 123848 zcmc$_XFQwl`#+pcEmdt*wOVw1N>R0`5tORdUO~;OnlVbm4q7d(79IAAQ7ecV35nIx z(%Lg2F{@?}D~avC;`9Cfe*gcI`_cV+-Pe=kOs?x(*RkI3<2c_M=xMUE^00zHAofQO z?;C+YEHDu0Nacy+z%LDmE9)T8RnVjR_e}iL7Di55nK0`1_p5Fdgq^59V{p_@*I@Ef z^)MSInykzDDM-76kmvE1VP~(~OLq*A)^*?N>K&COLO%t4u9k6;rBH2TY$)f*M~xEy z;i5dO1$??*Z$I`w&9JNYli2>J1-kb}ocn)UFVEQB`QO&jYmHX_+d8543irRQ zGp|m-4*gH_>WQ<{hySOgdglM50eKIP{5!^B`xL%_IX!lEv7Q%I({s4!Xg5cCpT)htG0RYVaTDp-`6Q@cfz-aA=HM*=2yi;m6A$-GAtO+myFMf>Glt& zKg)*}$b0&KdZ2?TDZKH-msV!+#?9U9btCSv)cS_eHtBI!u|bLwgZ-Q_e~-2wJLIm4 zCv#W>_JeH=lPwk=Z|gv@Vn9gwa3iz9+416LI5#qn3)_{tTWvL^K%|CPdA9M@o~~Ow zt4rQUll51u=ONeom2^kdC=ulZ7JQ0Sm7jzNn^0Cv$1hWTvBe3SxMW|%r^!(P=WlLg z<0GAOmuhDmS1OqAKXdWw!D_pGJNTX)!{wz&etyp4fr?Dv`#x8wQ-`R}IG&)4zSP-e zQqpwW>^0_c#`b*|k>-LY(N2)k*a`wyI>P@A>aE{w9mJx$z7V9(!pa!ue*fBa;p>AhOB~{qv~xBC_I> z+hQRdH5y53m$XtB?EECV_5A&?+Ru$c<(gG(J{u+}=h|^K^ls_je8DzI6Vc^V z`mc*-A5v4NPBCha)-E+R!AG%FB`1Fe3Jfo00%O~>La_3qDu=LZa*_+I94e*lm)43i zJGkyf2)g_*u}r<}BvgXB-wSmpk9GQ3K1MiYY&U1>0#&O4-tE^Br>c27BA8CZx#!Uh zDhKplcbRSyV1^Fs2^b2A_9)IVCAla%I%|~&aU6~ZbDYIT078w>z7b!7) zMA-_^?go*aOlTnwMwA6T;%5iy#Se_2`}zMEkruABfr12|Nj_KiU_GRc&(VaKGlW!! z*p4E4;DKt&d^f5L)R9>nq|2v4p@QEIWpexaVj%Hd1YoW9-`$fBUrB%i~WY(MKu-R_b=>Kn4boJR}OoqQVz z`&ZR38*^pgBM}+FCl_3olkx|Oa+4LrNhY@yggK|={YouOtd^sx-)%~^Gl+5nhbdNE zaSu<5p7V__7=Nan*7E%5^qx``?9H>5x)RYJjLyf`(u&$!ylKC*Mck+XwAMv-r%sBV zF?I1oqxR`ycO!@!`{;BJ9Pyy8U23?oF(+L`gl3X{gekDD8vp97dvf}80jX`k4k^N! zzV?h=@#u!M_9IN!2u1chY!U)FM!s19eFqVZD1v%cC3f1q3!fft zTiepsbx8F#cHViNR67vlJ_Z*+8WiH*u|LA3nq|6)W;?@a*(B{ z_~{VHJr9qBioiklH;&BNsHXqN@(NWPzgu)wic+j~ia#aqG3m)z3l~T+QVsn$cg|gT z;4vpS+)9zS+&1xuXR`R5^1?#LafI=B8noZt#*!ib9AO~y14au7De7pU+|930Gg*Sg z;jLle>BX!-hyqhC$|=DjmXeALT;D+caB&N! zJ^0#_Z+6g!j#4@m+mF-N&MD3$q?>k~=|l&-hc+nWmV8~DbkN3ZLQ_+#KGX>z!OTTe zx1KqO9h?>Ol(QvFzfEbY&WJ9cY`}A!;4^SuGoz=9#{L~=dSqBi-BaVaO_5aJp=}oF zX2YJ;4|p{ZBSgb}2CTSl^z6pZe3zfBv4cw{j*#c`d||TmV7?jO4v8y(`6Mm1q+=E- zvMuh$)64GtILhDRX8M&pl8Vknij12KbwFzMgtL=NnElwAQ!v}(M6hhrcKWGoy9Ck8 z4LzGYNZPrz9Q*wt=6pf@LjQF09()T;_N{|GoYbG^kD#06N$TV3?#O3WQCJ%ilx<-9 zGD8^IhK1(?-F2O=wu#YQE~Az#CPpQ=DjNL|Lxv_bkS zEi8{e-c={bd@;m)!Y7`%>Q;#+%@&lB zNZ79@E#hqgPkiGt65<9uy?q!c3+jB6LMqCpCAfU)P%Sqdrd;xv9oHFVnb!ghrV~(f zP471|lLHA=tthZhB1ezS)+UO}$-O(n`eMq) zaM&UVm$SLbv<_j|sMh~0V7~TZ3HbTHSEj)K&*Aj{Tl@~cr4%|klg@U>%DEX0Qf*TR zqPu0*bkDzzjAX$x@xpR8Ir>s-z`hJktA>nODr%QIGI(SE(%t8o0(v{9;j!fM%{s?f z-8H;{`Ndi0=7QX{5(^4c{j$C*9K|0PPtdmpVG)sqF0(r<)q;CwR#vw$Y(8SlTQeOh zQKu8yiH9EvRCD_UU`hnc7{UNtPOKb-6r23Co9?~ZK2F-MsNN) zKwz0!=(jQbo1csjGx(6GD$!J;`nf=JO0OnI&k^I6Ia`lf({wfUl3iU8ln%esa^J@r z<3PWBWo#r+HmxN|w#M&d6@76?rZ;fuJn6fIN~Kxsh5Dz=!JJchq@9+kJn_G0BFsu{ zMhZ?}V(e`T=e8{MWNmbozx^0W|)==5% ziJc$L@1}D{v+((6u7I})lX#)W3fP#d+#uIJw6)^T=4N4e`NzBpKHYn}+Yl?OD}#Ek zcg%M~Bp_y{xgy&zG9{$T^)Cn7Y!C0EP+v6B0Z+qf-SB+hPaKWmr)4*f^xASO2kIf+ zH!Ld_|BFIZugW+lP5F%>%vxf2i(trj5i{9BH4*sE6OGvM-*J|v2d@9im zdx6m1!7_U;Zti@K5xkI$%z%aL_C>=O&jS4v>E9M(6;Ap;TUv^Mog>uKcn^%za>Mbi zWN0IabVb4E;bmDjXEnbi$X3#cxea9r%R8X{{#PaP1avYi{8WEp{hk zU3NBBWUvEV>s!y7#c7Z--#YC$HqdBNR@~a^YO#Fd9h=&MLr0Du#cQ)}cT#wig&S#s z-3_?VLP4V=A?5dun0&FBNHBSpnYtxzW1$f&5rxAXCFL%K-g`1g>PawzcvE zyM;GdHNC=S*m*cQ=J`@bN0O$m7}5MKYzvBEHQXa3@S z7fIvxXxwy)z_HKAjvb3u#>%)Z0piEB*>-zNPxemtJhk)C(~H?-gzlT|?{w`iSTH&j zsnU6c!ed$kd-iJ2S5RmfO*KYH}`)923^&oO0doOf=geY@OGHa0fe&RQ3xs$sW; zrlHmsap_XCIBY&;@#~EPt?oV(y{mXXe5M^PIk7lY;Z)*aTu9kzv$h`zqTKpdgpH&? zVPUg5og+ zQgF{Z(yH|UA?qO60=I&~{Gw6qGVO9cx^JK;SgMj4dTHS6v%-zfn5S4Pkh88MfWdkP zI%r#_(c4ockW>~#7kw+Jw`V_pF*Fck=(G_yBF#HCRp#CQj>k`X{{s17@e;<@E_qqs zh&MBM2Ig+#8&nYS&^6!gkQ=Lx@#;*5))((?&LBl3Bn&+pcCpZ)fPjE^HU}m>^Q0ZR z%%SZwHH&dVaJbPw^m{x(kYcf(G` z^?xl+YTR-hIu#ZkRR?JRlqqv4`6}_(om+qvOY_!7n|A>^{&mmp?~k{f=)%uwY4Nyy zn(h9S#mp&h_O4x~3pr{EWmnck>W+b%IthW`4A+|aX4myJT!_>S>zwQ__R0G1@W3m` z&9-;wX!ISDuux~1Z_cO~1CKhNGERmj$-_EotJEV-m1T6O2q(E(dZxktjeL16V9RqQ z)RN6WrOh>q6su(NGm#MVdoE^JR(aadSyAdAo0-n^q7r_2?=LjBX$f*eXhYPyca~WD ziI1+HLBh%mzirCtX|fvA1h)AyUyW~P>oAQ%tRW( zdi_fyHSk>;k#zC(}&;{R95nxDT! zOj2&X;&c9y5nW&vAkn!P+xe+$EHZu*tr7f+AulqJU>(Qe=1<^MpUVC7x%UH?eAH5B zb}Wi^x(6PVZ4KILChpyTS9J`L6wC>PU9FUt_KE&Q6X z?L$S?zRdpSa|VP~E3AldHc2B#)!wwIT)4FD-D%hKDA$oVdf>K4Ic&s`X8DGkmw7?*{Y-0*!`@2FX5v4$m- z&vk5RD#xnQth7DUMlr3F*WGOKu@N+txtSp8eDIJhu|_{+<>!Ujlb~;Rtjnywcq*@6 zNK?+M@k}pJYr%fMgmfjn%vD%qwMGn;(%oCl3pPsmdb1(W653ejLn1e!9I+cp@uEo20R3VQb4&S*~f419Y<8w(#t+Kkx#@ zB>3@qLD`P}#;POh_m*ggInjWOR-h@w(nJ@ybXXkkd8b zFqWX4fHat6jB@x>(bt5qQ@hGb+-BQYm|<^WEP+IvLH1YKKZC4<)DZ9Ny7!P2wrWhF z!&oPWP_&`Y5$VCoNeke)y6p9iJ*VO+vQZ#qBf%1^<_uEJL{x4F(z~%jO}ANYz`&o= zAsK>|0WSAC5K1B+N}?t;2Gkbj?Wzz3vz!D4+_9lNo=xT4g6WlxlAle(`ACE*)U1?1 zUnE;@^>;i=Yi2)Dg$gZtX*J0!n#NzCe4s37$7_ouT!QE9n091?a=uNOAt@+(FUlIE z3ai#TJ7GBQML8>44H<|~mdKRO0liCdpi-=ad`$C^Q5eA*)QFHeJ%1gzY5|Omgq1WL7zZTjc=Dudcp3BIk#0)=kQkDKeuB_T-3; z98=LYs!Sf=w94E*1QLyn0%E_gak=FbkF8Gl?t1eW<2YUf^qec`fv2*uj8fU9a(_~B z%lgl9r+z8n*7J*mBJ}P&$+5H-VZ-LeA##5-6q%MEaf3Oje)Rq9*RYK02P3VAm8e$E~lFRYS#Tp8fdo#e4++GfMEs#lkLW zaDZ9nHZ#5ih4l+bnxtnp_UAfP@2yYpfhz=z1v}HK2$34Egq862nKdUsW|-pGQDScO zNiB>h^3M9T-z82Bc(V9C?@&?6SdB=Ttp_edNf)0|Ytj=!-FAJpQG!L2An|J`c8~0} zFji^6cA=WeNIEyk3ZKuk{ARgY@9R;hK(DC1^)nUq1f)7HANh}7TJ}&Gzbjh*p2yb| z^tHD}o%doVvh~kb4@?OZLcb&;;!0j#FSP6`!v;y-f2)ucPW@Hm{%)PXC**)d_)qC# z7K!bLFH9?pNV|N>KrG4YrYH^Riwd~RuTELa)13o<@t`Ld5Kq|3ORpGrGRArDIN4H^ zmi!dE+e$xsun||E3yZjiD)J2&|F#dbC{0sU;&+|jWHzR>Lk@A zgOIjW=-ptK8*svvxg5**cu7@5?$cxuS4L@%5Y413aLZXZxZxzfLq`+zRA&;JFF*v- zEPvi-)WsT=&kj<3l9ct@md`dbH&x#}9_8-XIh+s|iuxI8=F94z1br152_P9Nfm2_( zaN@=T=`xI)dz!p)#R%WPOu75}bBhQ}VCot-u4{8U<^qXOS5E%B8zUaDqRvC^?>ksY z_X)6Pt!0Z}BBgsw`@EEM8p&@yYxP|s*X050N9mEy2C;So=o&!AgvI$(MG<^PeEaUh z+sUZg@@l=+bNCL+hk<=H7R!S*rpG+3w+DtIK9`gjS{TWsc_$vCD?f&fWMFr@D!R03 zr4@Xzx=PaRq1^E8MWXl@v$*=-XdVR;AFF(efk@-3anh$gH(B*H3wBq35Nn%R^I&j~v&!eQ_qqI8 zZodtNa4^?-JG60?$4Idz6l32LTarm+h2MyzgrIy5Y}lbQXH^VNa@Lo|l$~Uaes36i zmfrJKKsV(}T@b^91Ek7E3Qd2Y;(MR1xMfYN{_FjB3G(6HPV3W}g7Lvch;3=9ot1K@ zT4^I<2(8lYu@fz$Im_t0c$AwaqOk-UFjdrVFJl%~q6jyb#1dKiaEs zf+9oFX|8Jv=z$asZIipp0oxK)dL|Q^H;PzVf!x(CE1`-+zzt1H+-I3-?@@nO!Aov- z-3z^o?cftw92!(pm!o#a+_=fg@1;L5TxYt>W8;qeN!A;r<4P?~q^|rufAfNTgw81T zVQ7~Gk)iESfJ(P*mpk-zk+gI%Z#j*_eX+Pd4}4QAZ2@b`#+tGcC+j|30GPX?%1Y^O zYZpn*`K4-#nT5j5N9rACx^&T}m|1MlH@_Bw7`EBsbSx#m(Y^+f5~{_F*=nfuMS$Tb zL~PSZbwO3o&0WSAhfm_6%xI}KLLi$nFLoHEVHs?0OAevAOToqhU!iP^c^*rBi}&3A zGJ4l=YxP=Dc{M%|4M2GO`&cu%c<23Ir1Ofbr{Y5Q9~Qq#pVHg>qI++p_f=%bM>{Gy zQaDMqKFB>g-+fg2=q6^mwVlh2+#*jdy5zX^9c7oNJ5ZismHk`WjiVyl8JR#r|30Og ze$EBjS4P!*H`YD4U#;J>v1mr&@{h0>EglueP?lRjXP zC>2!Mo#)@--x`O9hpkGi>n!*~cf2z3qUoN=Ux)sTWJu90BO-0)W_t)<`Yya$__b4r`LtB*zd+mFU;1iVLyp1wD^-~ss z$Zb4eS2jf)h!u$3(VoWS-p_4dEOIb&NNUqp3bZe&KF-dkWL{QQhK2*|j{!i(;eF<^ zyHxhmRGHu$4dNE1Y|O2z`W*tj>|N=rIXnW;Fcu}goPE8*h!Oca$~FP{dNOmb1j59} zjvo(GRSewm2k6BoizG}%M5EL|wQcAwhUSKXMFQl`^73bB~#}G?)1C;`7kcR$y!QteSE1FI` zF9GU+r?kA>s3n%4`1`Y9$yMSlQBh2Ux$HepfNVN4tPb>YaE*%{N(HE~@zBmN=7P+s zKKL$LwVjl(KJOWn*4mKyd4~1Kpa}C;RdtL%z#e~V(9!VF(RqKz8vlij`_56kBJkgd z!(8$4=oWy>6B5X-pdFCgiziOH)JY(#>Z_(HD}TG7S(4l!3wbH-fLK0o@kFASP3^^5 zCQW?x#C;8o$6c>qzYbh4(Iu?r=d%`%@hbW)6_?g;34a)2E_j^9+Wx7@2V`kfRFtY; z?meAum#w8jj7@Al30+zSB!e=!r1me$Js(#^08mQ-AQLicfak)lp5@`0w^$-!ifC?o z_x?_&dJ>YQoJ>qio|TB)x^?2=KF~Kv+S>pAE1I(iiA3AbCKs9=4=Z|K*vu>W>1KQ!o*^SK2 z%`#%9ys``WMCM&Gu&mIMWzsC@P6D20DSM`NkXzQtnqD-%5~mjbL9 zK*xy)2t4>Kpj%D=MtjJiyphQSbn_#CJ$g(@Z<1v02k52tWgf?Xvl$BE+I=IVPXL`<$fR$=%!*7)%0u)Q z`U^kP7l!OhnAo*XU!~;7kNdmyss;=;Rci!LJLptvJYk*JHe@pwV{2-fu!N`Ffg%9% z0MJDy7if+5`JDnIp6atQHN7xibm}&2znwb6oa6Yr<~_@h%dD^}XwS}~4S}padMFaC zPPWjwSbFH=P-|e@p7+8_X_{g6)^L@THnnIfiIa)88f`!wU8g=eHCj0pK>3zh+uAUp z`yl{_$x;vrbbI1>o+P7*L!}b+yyMNC(uO^}k&%(K*Pr`!bP|+6kG?E7zdX^jMIPI8 z>?ne&jd0uee5@Tu_4-jO!H4~SVT)bXK`=Rx}NNhMoh z3Z$?+TKBhI<1;BOU3Hqa9zE14W$1NdBh#V){E0EXvQfy^3=7{?=L_mWU- zQ(~_fi}m52e-dGW1*cauNJ4NUehujOLyMds6Nzh!F}%UK%*+-X3O#g?ldvi|EZe^N z)vl?yC4n*8mm&i-u`)SdfUX{lG)d5Ee|M5&j)fSSQ=BXcxpyG8z{9`=Ijroor2ARG zr8Y;4QP+`rWbm`1^kQJ)kB>sJb#`H$Zd+b7z?V$mLpQxgY!|ED+@+hutISmnyv;!m zR_urQrgo-t!YOhm*NZRB3+cYDjL1LyUQF6neI*{id! zE1@$MdT-{k%iGL+bbYwtr`$`^DvlB8!#iw;7OpXS{>BYtnZjxSTKjQqf}Gw;*-)#+ zj}NWPzrqNm+2y@7|0nZzb7T3k*KX!Uy`3$lS`qby-g>=Qx_N^W&ojD-7mZ z7WZQ;jhHfBtzx%zA(AK$(*~4|AKF6z(EvsXxH#gu=ri4&^ai?_saBm4e$L1c*D7XR zMu@kqy;89BZ%6090+}^AGbTs{SnewYccicU%aMUBUKmHJpZ_TSkjsG^5-?RR>=p~l zFE#vLHWC#RV+t5^c;V#Dbd^x$ZfiiRfh=tnfcQkr(B|>g`&Ay++DIPeuVF=M{#Gh* z{p5n~U*=qVa!H4{ISJBh?WVT^P{M5c@OM6L1ukthcz?=Ic}jX<=8KZe}lwtj|Nd)eto#c zqa0j48nW$P^t387Q+0QX)+aX>oO44n=HDc{Y8d7}i8im5l~zSKN`CtYNOXF3W%Az) zL-%dc>sQqYA|k?v2RZk(|4)W)zf-z`?e**b+?VI`Hj34Uo2U4v$iH=fs%x&$LrVip z155ZyWG-VT2Ujod65>Z4Ec~pduD&}e3ly+?(?3UxMCPH8+o*-xBlW_92E3@g_V+b# z%TL=WYKuF43gCFNmV0MMXg^9OrEe>1*F}JNsOuQ+AvpV^O!f6DMgKZ?P%A2j z*Wfo&OExnGdTgX{|z_{?Umu6jfDDn1M9qlz&*>iQ-xGqy+X(v(&+938OGTVd1Oy*8g8yzd83vIyl>aM=C=5;1yP zd#^70tQ8#n`3jpT+!}{mOE%q~3L~7Cs~>t(a2G7@5cfc^+1&PcStGIZwDWG>k*x}q zy@J{9M-sb&vsvqsQ^lPFk5r^j0svJnUEy(8qI<)daTb%NI$AZom7WeP$0Au7u{E0l zMSIoBj;%|qMZo8JHISiuIIgARpY*wW((U^dv7h5cBoV8QnB>_A(S8m20>KzeP*)vR#oV>hvLN3E(MLm}88_BSDQ+BvemhseE4va=l+@zit?VS$ z=O9tRFV>1g@5D}C2b**;A$F_CZfDa>$_Y4Am!)-J>_x+$)PR!G(91RB8lu*FBD#!n z_pQb$3;c47Ma-4_WAEztSwP>vR95!0G9wxkhsutDqVGaC5G$R(bgA&on>SmRRVOPG z8{PB+YA7eX?VM`Bhf2?KL?~x&p1PQIY2W$fu;dg1uaUebT!p?h@Vnx5D>*e6@Vv%V z`+K?_R(Ob}*bo-JQ0f`&HnxF%w^r#lX}i80szBPM>XLl(+Fkv2KIHlB{w-9u*w-k8 zl$-)R&~V75cv(|3coZ}JGHVX%G@M__nkFmiO&)($^o()5q_}MHH2dO>^ucvK-WEZZ z`9G0y;QfHbuZ<%(9=^wnOWM8-#hdT2awTL?H^}j>gJ0e`#`;`eRCF}^Y8J7!{gC|X zg%Y&sSxcDSuZbg(^LwGSdUf_q3nF)>D1Vn?F&j-%TiMO>BoX(&4@ac14S%ldWO`{h z%*0UY{QPF)rS@=9f3!zm4o6s%!E=|k_EhKI`I*gqROi#Z8Pk8cFH(5DjUfYbM@OZ@ z&N?~GWiZH;Ld%u{B#xWQEH2b7lDH`m$x*Av7>mmuo#q>)izvhH^SkYsl%~=7)EM=? z#e3qI2A|v7`o*0q-nN%#b+T67^(7pp6g+K^VvvuELf0D%l4X49s~Oh6h-JK%GzwV5 zb-e(~KCk|~U>`yGqUpHzuDK<{aJndUoh4R`i_Ql&6w}c$*o)ckY3IdHBHIsaBOxtI)xZ#oWE;&i4%j+vRzUOu~5meyGc3Z<8-sJYbT@b##xGf ztqpjXecj|s9n#dcH0gZZa?{11cU$^TxKQCC?L3TjtnK}-d-%-^zNnyWvA}tgjy;`v zYy;wS*Paj_EUVd-4xQ(ko}CyoV?SG@ttri5Xx1*t&nX(OfBSW@N(Rd)2I`|T;?Ugq zlD;FMqHfPJDM9=%UwBe23rDvlZ6{kuOI_mRnH}nqx&xNjafH*YYg1t(z~ukm zH#k1ucCW1P^Q5d*&&|-+xr+m(X4!lfQ*Wh@<#a^u_7|%c1nBd~Uy%;O-uR+EAl{ah zzSz)`MBSxn&E;upObPo1-z(Y4M%Ei1kYvsmMERzb|2L-flcC%dP5SVxG;Y_w_QKfB z-QTFMa5qb(VLpFo?Lh`W>%D3#$d-pSfU?~uz|jRZ~sUxwN)WfYHO8v z!GR`b=%Z`P4IVJnX6t;p5OFmWG-M>^cS@*ncB62V&-yNd772c>@VLh&hlRao*Z9G$ z&UTsPq#RoXNz!Oj%REx&Ly(ZZqTFKlYLkXSA)N;qS4?Gi{z05v{6dYDyar8ft<#es zeuFCdJY;#d4fXfV_TczEa2eg5Thq+`KCTmilF1l?nY@2m4Bf7=x%-TAziThhb<3Q# zr1G%JuYG`xApZ4jieis%*PW^Py8RK9T)nVy$ipCA9tl$^K>_G`)u(~&#Yu&^p7rUj z*jePcZEaiL?jX?%&A(A<87?oaswm!6&-OQl_!%md5|6dH+aJbopJ`$7S&cY356+B@ z*x&s?$73XvYzRRc&A5mvviYIyg~|f)5s#OvQBqrfRQsk=D!aO@A&s`a^PF|dGwOj| z`rj!5B5r#98^66sn`Y!L$dh~nmNQSRo9z4R5kaqg*bTkB$`k-#{PnAN{1q|G?vlSL zP%8w~9vHV&$Kan&yu6;RSfoun0Y6RsV$Y&C4^%L`s6VirVTZ+?JOI$Pl&WaPp}g~T z3xDjau8i+@4jHQ;nxNF*6~atB+@m_=>ytD@PT?TNoxGf|K$g~hmrhn1!ge7yMP6Eg zN}@I^;N#z35L5;+Ty>FxMOBLpMw|Sey-moJtHk2E?DR`!^`Sqx+!cNAb2KE9f7v8mi=h(ckvs2}E}hTX3AeU_WuZ*)^S!wn7Mr+}?>PHQ8xV3{ zSSMCAcrJ*Q?D_C_f3wZF#w-sBx${gpcRC z0Wv*7+W&`n?oV>aG~JEZ7IM0{=}*h-3x2EoMki69LP&1zEpl*g0Z&!P z-OP6Zl^6sE*D{G%0LHrjlpCS^A9uP z!O1bCl%ru+6H-&5;P=d6D4q)(xNhL$QW(Rp!Z+Bt`KaNJg&Wz-m+A7_gU78Mg<+AJtyiaPNBJ|5s9nfI4kjm~I?7K_n6g62m2*X%qMSZCV zO<{D<8F+QF^g6;4@k?39Z@{1}=30U~GQG~jR@T`a8Tmxof8!{amVRGIQM*ev@E27$ zIn>%IXfQFTrP*b=qmYMJPK^=Dc#o}1CH|#%47NJFPhkCKN3BN?nhJ^wcn**M*-g6#%_Q-5}Y zeRo`T*g0ti7BAy~I*v_##wKoe@-I#aOq<@`qBZFCEJN|o%GJ1`AF@HQS8^UbN{?%p z5exiNx*2np9b{E9eB_{7P<2F$UW7VHUw}f%;A~YvUVY(?;U|*&c(X!cKtm*5T0bKwS7Dmqsfi^519CC#% zCR7GrKkzYicX&a^@z)fMebY0tq0J9}59d7Z6x6xhycwPHG+pYZyCGOwNv+i_Fu+pg zXCf=D5qm?c?IP;e#pL%@HgN0I5w5zj?Kc9n`O*oYMJ~g%g8HmY5>9GtCS>HZ+mc#g z6zf81tc`e%)hib&YQIOU0^uR>B&wKkS5G}+FhdCi^Q2sMs`(_zyNwsR;a7Q@J#=i9 zHkzfz&hHXoq5K7Qq~lE6CTV(Q$ORC#@g5twP^YLR{!2OK3%9{#t^4=T+8W8NyXKF` zrA3<>cQwf;ybk~|i1a@51T4K>2|V3%cN7H!LRzu;J&LYH#+SmjL?~*znMqy!ZYHXi z273#@D2Go}cXu1mmPRZAT!@KigK|M|GujSM^Q!CBY0q~q)dkOMMNeoj_qe%~fow@U>-_Wt)Zd6ZaL4*p8 z--rB7oJ=`FS~@YW$M@Sf#NuUyetIU0EOlUh;X3kg`Y17GfIp9(7~?SacA(>;Re<@v zLrlF&LBnzV6z7@{GA5OA`%9g`i13!PRR&IfFB&oOp1rnK%9bgmc6+OY z3T4Vh2aHMj@%OZUyit;sAlO0<;RF0KLrGaNdRIyMekSk<*$=vsN6s7lk}M=4toUbJ zMrOLAuSWa5N4*dvr)DtZJ!4uHCrq@KKPVRiDCqE4vDNxwVmPtxk!4}$#$nydauyJr zV|90PVUA?g+bmJgQ8v!u)BMU-0C9mXTWn93Qh=l4buI?Yi6FclL{Ty_D{H6*DNywo z!j7_bTgM;Vk-*8mXJB#32Th*3M79B*>g=7^DvCqZvg>XFLk8a^%EOypoJy?(5Bqg> zx^@;7b|yk$UZ&$HSFvE#EF>h^M`-3s0`Q|or7B%y%ZQpHmqyl%2i0&EZkdQ&Ha}x zu*F<(YuQ`(7;(J7#+cXYqx)`HrkB{4dv}z>{%79H~V`etQ061hKY`KHzb}8Md+Cc3rmaFrz$J2LO?+W zu&yKX$6U9zL)+hqqcH|w?n@yT_TU!#G^!n6%&in`9q4i>u;CXtXLQV z2-vb{J71@}YOCee^?oc6MsOkJvpGf?E&o*2uP&0((zp^N%wn8pLiqI!4IOLHlUq+F z^8=@RXu9YiU-j}o_*a|#!~Yw}6&Q{T)wWjdgc1s!8`<#zCNG~3k4aHT7TDI{&1qg9 zqF?bJH|k^a$iUIND$tE>Ukyq_`#=XL=XtY_IWow=2D9i*K!nEu5$?01dWDlQh|ado znYr;L{q>!Ejq9z)x~~Wei&(cEDV@t>@{TnzQ>gM7`vaH$UGRw=Q2vD`plwQGRrUtO z7Lzxj`Sd~u`yQKJm+7_DjC{G>+QJzd!j6Va_%qOQ6+pZ!4nNM>L&JrYb7o9;b2HM> zx7PafizD@0->tXqyZ4IdE?F&J$NPLb=|=h6hk;<6u4DfkiClkRt)8=G6+rqHmEml{t+uf`RCVz& znuzGq<4h@d20ZPLeXbPCN$*3M9W~}2NH)K}cfrr4wc993Y(%-3&Cmu#le5g2FrHK! zb}0ij@R`$EtgYP7dFVTc&ay`YUQ2hd??PzCu+mi>VKHOl<0n|UeUr{wy+>Qu;BCf& z*E$IOS2Q%}DnhKR8;4IYCwTEx#lkeedR8Uyvr5a}vv=3e@VsZ_R;|^EY4%olKsAHr8%H)|`)2 zqYxVtkpMYN=+06H0(sdYNx!w}j(H%@L#qznEXUN@x5TuzRp=idEwPkK2M5W110OKn z)lBv^H+-1)ourKWru0ZdFm9=|Ovdsu(ud83%7apN9BH@3p@OUU_p%~vRm`*#yJ)14 z-%E)=0$0lC3h2zU*7Zi@{`C=AJs0Kn*Oov{z?93_7?#3eo3NP^?p$2=7+?22OUWXB zIxseTt^$U87=R4T=B`R}`BQKRMEV32h?`$SCr|$}nFKO#))YdC@q-5uPwnkX<`lQ+ zi$&bF!9A$)bUDwAjKKLqRlftmay$=6(o|~M`o+A9H5)B7?ik_+IZJ59@^knw6PjU; zb|?>BRZHNgOWkQUHe;ZKy0^DCE;;$q_^6C7kk92ZkTd!BaK*7C#{9V7FMJMR9n-`F|P46lDwG5y?ghr*1SG0 z$#rndJf%mmfiN71a#yj~;Y9RH)~%p^OYI#5Az|a?epDNXiHUhUu5;c>YQbAa2M9nT zBAz%OlpX(1t>@>^y;|B%Z|H8Ku!wN6gK>NffI3ut545mb^}BVl;-nwpgF!>;+1Z$* zRYCiR_(kPiJqC6KcEAb*+aI=?IY={h2mX8DggI>>p@;gs^7ovs-nv~&Ho{_SJUgsC zUHktyR6mZYaP1T{Z2xa9z{Hgj6fAab>*pt-)tglJJO4R{Qz^k14Jsv|t&9HteKz&? z@2!9SxnCDZ>wU{9*bhi#e0;o+B9KiPVFK5%Z#)gEU0r;6%c_i=(}zyNI)aPlez#Q0 z+9M-Mw9IU0A{wnNq$w^A1Bl9ynUME7iYi2?V^4co5CGUM6SI(|%iirPnAVLUC>;`m zNRLu^TqJfp7aE7!8lRt05E>y77p>5X9{DS?q4PPR{VyeY(LYss`}qB>LW{}u=nyfZ z5Ypl3DAZ&~FvV-vYwwmu^;X?O%lTSc4`SI}TR9vrv_ZcxFgTekKSDL+>^#W%oJf0d zgvAv=d0T*FNPCVd)vfnxw{~?Afy(mYFJJ!I1*8N>A~0X-)n%+`uR3|2G=W05FBYvs zdP(n3?GD%a9F1Vx+qH2BhlnQ~1{#M4I*ZHT&Td8)G(wzOO;&O}=2VBbZZdWo| zMLAGM#k+E>5_Z_x1Hi9%Amhq);X)pegtds|;6Lq?2(0MLQ6Qb11Jp857(c4ULM(xD z1`Ho?ra=J^%H~*p{r{XmOX*sh;`!Jl9rXKL$LVjwxND;RcQ}5MFoUA&JL4|9&La{+ zn*!jy5>m|X-oA?Aa3eBBhb&*AHpngn7S8!{6CcEndgr6!?;xa!33?!&_efs zn1EW;u7)G!q59Crr;oY<#eme-bRbc@oHu|9(2b4lKR%* zo(fRlwQs!ELM-p&HIDyuSI4h|pZv)hcJfJ*WlaXL-*m`zy52e$64P=;)Ua70Hqb&d z)0N-#am+FuIPCO%tk8UOwCy>_CKkbcQVUP$N>x0p>O z${Wa=0OtUK$zA=WwDN=V-?Sm9l9gHRwUx996XfWbmM=w(t1P_m`199xo?CtESBj~e z)92|sR+m2P9s4R-75KC8qe95n>#im}cr41Vc(G8tfi#RQB(4{iIT5g8SJXunBg}pI zwFV_>pGVKzwtQ%$N!fXok(KIX$j>vxD3m^ot)@ESxltY_Mg1~p)hOxZ)!{b%}l<`AX-e3o~xzGX}=Zt&Hm&A^#9@OtD~Zfx_1>2 zBqT*Z8U+NTyHh|?x=T8S?nY8+kuDYKj-eZ2Xe3957`le;=Dy(f{q9}&u65r(X0e80 zII+(;dq4Ym_CaAAjQ&$VDQu|GBCzbC%SI>Bo$aYPD&U2#LJpbO?-++U>u;sHCtSYR z9fJ{a*S(9<`3@g)EK`_V7JW&}%Ivk*SFPtdSbaClGdoiE(J1;xl`=C&MI^K*%Wxc~ zYzNKG05%m}H%%X~v)kEi6G_-*toJOZoqZ3m!;sMZR;;;!cB!wtAS8V9k7uL`zuEOD zg)DRgmxiZuLWPzZrES^+A5V#_o%I{Gcr)>oI8}Ebn+v_dun0w|^1GnTSgrgbzfzQ2ETtEfPy>q~Iy- zbP^yvgmRCbE)#rg+@M6A4u4CEOJvKOzAQ}(LBt#|Y&qz8T&4V&I=ojwPTilGfud$Y z4N|PJtbfM%U5?W|$e19pYHhNR!~0`B_e%XM-#b>;i(C$*i4kDE11A}$G-ig&!u*(4 zclO({*sM}NK6r^`vXz!ei1d&LSwd3zyDXPAf#%w~6dJn#mA4|_G)w~*p#Diez>wV5 zI=*#y=Bpd0_)?J3)oq%8mdT7!PSItXO^|e^UU8I;a#Q9=Equv(r8~vBg-J{?XojiWgwVY;}fW0+bs}R}Y{wxW5PYV%G4;$w9&& zKYlC;M_2JV-uMB)&%);m!BZKHZ5KlhC8i3pwzVV{j5yV?sjw~~tfM9?E31Oy%)hGZHCOb2>SIPWSBKN^i>mJ* zMq{mqa&hKfbjxt7onV=z)>T_p%0iu~m5=R3q?)BZ;{M?LUO4F6;6kbYE4D-n*j;J8 zy-wLeXABd!r>)Az=4xeehS-m`+@WUGH+`GT^CSNcBku_ji*{npW*>zM{BkA=Zav8? z47NRpJ+4u9S=T^#eh<4bG<^QMm;;aFWQVY1)ni~Ek&neG0xwv zUk!$m5R2gw$Bi^WU5AC%`PYRwu{dQ~kNjGP`f`_MZm0P1?jP>Qpq4EzVFxf-O6p7n z-3bCUa0>Y&;0O#|Gvb(0=pkSdigstpq;?r**VLozp*AquzAsf(cRG4C(+*; z1s?KJ6TgYEP=Dp-YS{2vZp-Bz0E9I%HVy#rq@l6Voc;6%Tu%7~dq=t>u|M6dL*?mj zYBLH^_=e=GhfnBvXtABe-*sQ%f1A`)wj z<7}d4)Kd1oyJ~$pku5V^hqZ!#|6A@S(T1GK5e0>O{)fME!auO4q{;)cAw|d!cJCfS znD5)JTU!h2seihs&ScgE%)pzy2$YnRw5u(mk!5svOHzHpVQ25GlJUs|zeU?7@_38E zJ*Z$Aa^i+2H`!@GdOKpn9+K7|C8hq^>(U(6`7`iN@8D6^yv-(jp5O*apeXlzw`q@z z|E)8h(RuhrT(UW99A>@i7TVoF_)GdYCh=8cqvdZSXEN04_Resj;VU$WJ0A^AY0f?vq-)F33xvEa!4|tS*}mltgo;04%q1zQ8q5LItsRs zdY$HJxnoKs4~I#o8%}o{pw)XwLR(QY?s%S{YC!5pkL}l09^uq?1j;8ldACoJ*MBv# z(eZ%dgp{9ZbHpZh=8lWGo}Iokq|OhcyPpe)^<4WLh3L?TSbZ;f&eiLj=28avv-j_9ETwbL(x$Lsxl(#NTa4IO6!-by8fAZ=1wq96$chlBMZ+vx$Q{V|JE9-M2BGZjOKlr?l-;^1) zU}$M+O+vc6p9~KV1Mf=a-W2d32DV1BVpOSaquI`Q1dA#yXoG@tI5eCi94>B{=u2!4 zULy7`^=^dahaH4NkIWGZ2Z?qW*F1WqTLQL_X5TVjMl1AP8{v^+<1%c}tXzDu`Ech+ zV16AMhEgKD{Iq#8=3$a{-Jhw9*Z$zAOA)N+^nJPUM|_^*nXB2qar?PuGF$KT6dSu| zzQt!0h+awzTXdOocdjpv7~jkks?ie;?m){aJ3Biamwuy9-Y&`^qnH|`{nxO@fwwwUzf|?y-Fe)%|C%%e0BMTE z%qzf(HMf{<2K|_JWrh@WfPet*XD*=UgoKmkvMabfy7gK`8HNq4NOQ^ye-EU~g!L-v%A!@j ztt5AfzQ*wGRUd4M4-VRIvGYYywLLpD?*dUo-Y>9%3)^Gk-OKYnZ3m3zpC5k8TRpq?HcN9nZbl60F@YY@5f7Ve^Fd)${W{97u1w{fZyzfBt z!{>L&1u*O#50>5~#xrrd0UlyOo^I01CV)w-wgZCIsGK~V6 z6FGpIV(BwN##ovSaZ4)MttjF^eP}S@qV^|`NHT5dlnoSiFtXp7fZrv zQD9sa=SDsA`UB&M^SyN7`Sa)6FrTyCQk&iW)A>xlQP?!Pvdn3B4TM6>WRq~iZ5Mzv zAEP-B7wxbN4?o>miUfi+?O_LzY_GQxG4v}Ls^L&y3iLG=?FzBd0ngm*5=;_30A?C8 z{W(J)G%_eTeHskbs&YD1K2u2HH{_o`4nBDOmDi%X2naw<@s4vy6HZ72$QP>e6wHu63VZuBXzPV~^=tE;4} zc6m4kB6<&6FSnQy7rhtSAOFhF*ZWi~pUk2m?{bQ;%=XKx`bg_j2k1{2Z9VR8Z}@!A zEBe!fT@Wv3^>vr$KusF%Ws7nohcy90M8qsPmigHA{zr84ciyaF$5_94ea6(KE6naF z05w78IA0)c7Kr~0uxDB@ti=vFmaoWr9Vz+G?&2}7CnY73m?P!B|> z$~w4ruD|jt-1l8-LY3>sp#Ccy4H*xOiy?J1X#O(Q&K)AIf(AKPSN^a1^6B|!Y+|!p z>zP2#e=Aspz*#W0;cGM#Nfn@a*GjDjM#HJKD+ammuG&JGryHu;P^?19AeXHr@_D5w z&gO5OeT|Haz$Jy*UStpdQi}Qgc;6s*-?RV;`lModhD}MdZJ_~a3&v-1ripow)qEyi zAv5tGV5ci$t(2V=dO;20HC`D>AQL7A4l;{9cMca?M@EtgKsv5QQVA5d0NW)D>i1LwtTt`^5^rt^!1vX{lvuBq$T^J%tC*fulXwjAE?@uIM?g=lW(d*UhOLw{A|$6Q;-(i#aMW@*dw1okfBZn7!O zSR^nJiuq{nmIIcIKIn_A9Y)0hp;q2}Z91Bw#P8a#{i{gQ+s+@kP`Vu(-<$m|OLS(c zUZuT#ll#t=@T;?R_TY(&e|Dma4>4QIOS6F&QI+uLXxc2qwD)h|$z~)PWLXOW+b=!R z9Z?;wHO$-hx6*6vD#zeIhFjYd1GQuVf^E;APTY#WxkKfi1V?9pQN~d{Co)caNT=v6 zjSF~AQ+`kPCb7R?{(TXF-dw$mj|b)(U3}`4Oel^`8!7pea^2 zW25UyYAm>~7U8{_vrMD&+VNHB@GUjiT2tb6XYOlvcKO5QMqMlQmI0nuxo!Kk*7F%E ztrG9lL}ps_O5ag@wD;?AA=CTA$pluUkwORJ*JFEk#k<;XWwDO0(uJ6B5xl;+VFC}h zdZOV_gmf5N9kajd4hZ3o7q}uV#%Q;ji!H&Ue(E$Vd3pK`l|0+vtY=BNJSr?;jYg=g z{qcG}YM#u*pjQeP7s{<+Sr45g1&121@yTKIU-)?&-9J0Ne+94Ar#0Z$gOh3XG@9PS zmQuMVihzC7iEwLOa~878zrC%cVI)6is5cp%9udLVt0XZyjy+g4jz;xi4}(w8{^`UA z3B0S}bYjwNo0*a$nT>st24yWnmCyg0Z+31@MN>0O zvs8Cc)0(}^u<1uB=@q;&*Wd*|c+6g@Xa^RZZdF>E&CtBkE+hW0oiUhe_;@Or@BON~ z!f}>+qDf;Yz7Qgh-JN4CwYeVi6?CT)M~>q6a+{ef_rKF_qQ!ioTiq&ymF4e*B#|~& z{tRdba(r6D$GJwgBEwz3v$=3IN?+W))+-hma12(>=0t4!<0Rb(8l0rxYNHGjkvd-M z2Q>yPetj$ga>H6v4gP#}@fvV3v*lD{fC z$SI)X`JMxtu!$csS<7Jq-4gPkQi(`Q(8B^!!n*H7PLU9;%cQumDO|{o_=5CT8y`-! zbZD26dy7iopz?fAali}?V%qscg_CVBzYBNEQovv5aaC<;d$GK#@pZM?b9|AE;HRv` znKbLhM{E3=&valHOCQ!V76(v?JLwjOrcH6}U&?ggkX9ZCB!83%E%Y;QE?10}j+me1 zn$`amQ2RV`YDR=*qm$hm_BtxMCXM6V`LXkv@27VT_F{QMDsE3H?>H>3Jy4JoAny`8 z$M=tPRF)R3TJ@W3e;aT|zf%^yZ z@(`+vH0O9WN>DUVtNF~=ndziq`pZg>&6)`c&fXpwZ&Sor2CyTW(ty|7g@Rq|1*TY{ zAYoloe8x~gv@eFeisMKsoZk%OcpcC`;j_Ol52{@kfQEbHou6(-(9iP z7c@7g{S%uOT9*|$8e=d{Y=6Xm^jTti@H6p?JYl2VNg*7tzn#Y>0*K7AQf$}0oWTQ( zn3Lb?d>n_Uu4^8xSsL*Uw?`=8-<0W^&hz_0DKL;-R&c8J3WY(85`Ev%48#*;& z<5V~g4s)XU^v@iduY0PK#LE7h5l1KAdDJNK&h4Xc8@fz+$7Ary;+6!R6`KJkVDqB|3!Vz+FDPP?%S&P_%b?j)Wm2-qdG!mjOs?c_ru51S z!kMWOWf|B6z2bXMRE9h^(>0JHetDdmXryhU z>ZcCnHxyaQgI(EoMtrW+co7}a#77c2Y?g8%JcgTf&*eqoLHfZIcmzg0BXm+!uf6f5 z%g;-vW>%!pF|cWu6O?(W__>KtW#Rmu7xat!II%srza)h*#W`^W86TB7-?pX477OF} znX>QUuvef%o&Y9MfLoumN^?=}UqBhn+(9ZK=5$Xspnir$P2)g8^`9muZXJaRim-ao^2FkYnW`Eg+ne7lFsYU z3HT0G20dB^qDL1kvoj0M({A$7Mn%lZ%?CZNo>uz?G2rMK-D;Zm^q-uLy*o<|n0gtr z(9!_eFRZKx%cF57$*k~Gex))?Xc$L)@g?ZZ3;==AOMQRMZWyatH z9R4(Z0KstGnm{)(G1)&pF7XPtD4+td8)kr?_ch?lF}C*v1eAZ0D;s86^<$A2=G8)( zCk=K)ueBC-2Hc8+l1g1%9lDQ>Q{b{2}U0)3-d}8_|uzLc+cgKq8|T5=EC<7XZ=6{%2iyBc}E1Fu;Z`xq{cM=a<=B64X(g5MK9WA=M$*NZrk_yW^P zhlS^sMM-h7=I#xKabByT^Vs^Bv4HBO93d9OpmMIY9`*_rM5D@DU zeotiYb@KD`o2<(7Upu-JvWOG78`7(Lc~#hqnS#_13ja7bkgmY%Vys>}hqEVn#}2+j zBiRT|_TO=s)`OnmVKH#o2kd=7N1|z5W*D!nH`3cHo-09Wz>kWy4?x*Vt!?pm`qbyv z|M%Q*Ty`@h>j`s*=0Iy!gn!O;vl}nPQQk468&sJ>!Bkh;`z)fTlW&|?fxh|6;$u}y zEx@M{XIM^enk>=;y{3^Aiu0*oI_`gxVq~JbDu7rHZkH#jMCh+7Qc?~F$@EfTmBb$1 zLoh1U9fSHn6txC;?^_mYYinTuI(L3?v6$tv+cBCWGfCP0(r6OwuyQ1>T^ zwPeh&y!+}Vi+)4$(>tmsV={;R$nHgJR(8quf4Knggs5i$GZ8n5W9+0K4%mIcrC|hN zp2dMb?X8e_aKO-xC-Z08bKFoXzjpT`-Q|lC9Hzn_s4M1cKk4u?S8-g+o@Soo@hI0o zCDHbLz}<$3TK#P!6Fq)HrX@D#Cuvm3r{w|2<51*Fw4RS+%30D1v5%yh&*_rR^rNgX zqsj|)g>l4Td#OTqknzgnik8;ZW?}QRg|}v9h1a@&J=xGI&%!#}T%H^EsX?#nDc^IG z)$xcf3p7NtPh5hR2|`KkIMKVj&n4Gw%G>aa+N7jT5M#OWf2+(fRn^oqYHa~_by3bt zrKwEf4yTsPAmW=6|60&3y>jZ_VmeWN^51?XL4&h?c><{N=t*S)iHW zK1W5;zNRp%tVPzb|E^_UEX2KeW^fxUV?LQg)-ETnx#Ruz?-c0(#kWV+FOhuEiWW+p zE?2mInG47IQ)jC0yVluYN(hdqK3|>i!`k>u!g}l>qx8jXA4<-8_e-=B_Hu9a*R`=I zTZUT5*y0YZ6$#G0R|iHJ;^OqcwV*ANSSk_Mm__TM|2tnd=ONOg<#FCo9ba#QZt<+F zFqSO;uz~3d5ZE#iSmyMkN+F`16rz2UXq=y?rm+YLk^-7v?BZ#p|dGeX{Vq%tD^ z;J?U)efCM;8hcsoC|~WKcotAWATT@HcakEyO93EDgLm_dHykfYr$L23>`B!q9pEmDtwd_@)+nSMC-ot^jp!X4QI&Qv`2v2K@wJ6N)IP}V=e`|?P4{!8g z7cFZAHdi_mz@ZAMxLbd{* zO};ix{?@0=_vnY{r~u4teT$7p2)B%5)nO_|S2PTE9YrcvnpI8z6OV<{^2Ih}E7W1R zOE|AE2`}>ZkSX5B$;5jH>C$a~K^**TP>ZwAy>x@uwocP4YG>PSY^h`aNzK%xp+*U&B_0IFDALpe`IN;$KA@2V@YnUt?r_S`ZFaM47&%CFE~J9qhszTH$M8^d`x$HEcY#U zoyey;N;ES6E=uQ>#CP7a^czbBRX307xLdCsN7^IH~!@ zYDQ;;g)O+oe4jwvs8;e7>t^UkKWz%i1s65m%FA_Do!hJ%R#*BczmOBYdIdXN|9%jG zeI~X$-2FFN_O~!`gucA6!OrR75{6Fm^c%(lu_n2@`hw3IRA-T&US7q-S*KKQA7k2~ z#eSuk?Rz_NZw(XITwQ4m1h_>kX)*;RdbTENS|+RNf=yU)SaX|V!!Oj@-H2Y4`{908 zlbm!NKwE0=z#TK7{G+svI2 zJ3Bh4EnD=b1?#x|+A|Nfuo-jh=wFI>jIx9x_Al_k>CsEB%{O+{zl)%67Q^ z?D8#;_Y{`+NoSHY3&ih|yL3Ajyz~Q8TVB20W1*zDms8py=kJWigmx?@C*zXzTU+VS zNngQ#|6O?W`9(9mZ z+qqOQpK|*)yRci>YDHk?zc!h6Ts|GUVPezs;}w1OSSUYwnCZkMKj*4aSIPP%T9wNem3HSuGJ9&p$=zB3&#e zU5_%+(?bp+hm-qP)5KDn-9JyRcDCbV>H@M+l6914w#T(O zw60MP-m#kY1jtZ{85t<8hI^iX9GbZ~UsC7!n|C+#&NjYiI2-D)N-vpz-hALqHGiGW z{`748F)voH;5DJ<@Eye{6BFtsmaNh_f7x(G_5l>`n{dJ*=5pW>r>_7x*|B?3H#|<^7~aMwu*x89kH9|W(Hq0APTQKXb)%yPt*4svJ>aHj+eWwpi>YxNtN3I^DYS z!DfvBn*~OEOIPJngKCau9#0ZTHMth3?;Y{wi>ml6P&N$!Oox&Lz=uyd9a=9?$;*s7 zTemrjG|NyNMgPVJ0l7MLN00IOoccOjdi_>+gUNokt>;ldVLFL&Xz}uZ6QETzZ*VAs zGgS}tYKz=myLftf76cvw8VPNX=n>zqo;{;mmp`M*4xF#WXB5HnbmAK63)YwHLbj@3vqgM2o%@8Q)6dmQ5CdL z+dPL;2{7oIpY7Hjb51pvj-4X^1-BGMb8p+8F1*D;@9l^Q5o9HnemEcHiwnXjTX&Ye z_-6_%Zl`jd2m}_{3`h^_ezKm6HSvme1JVAyV8hT@sLrcSMao~B4pz@&vHO%e$ykX| zpY-jgy5MjnjX|8;iU8MdnkOjZaz^Z zO4-RuQcU{dWA4Qc*m)h>{7 z_1)~?6!I?p5o?s15KcJz3{=JRo`&;Nz#6ft;gV06M`E!C`;u|u7>cDM_*Pu8Fu7@< z29B?Almz~g+L{J9)_h=}#2^?KAs08Q$&9>&U6I#Y=fQG>wjeKQU((H#$v|tkMqI5c zJnfLZWJpTM6&J}z`Geo<4M7RSD{*50KP`!cfBG}?>;nN{D)$fA6H#fbwwykhQKKyEENW|thT(5){mljl*dwhDv^@s-9* zZw^Sk8v4w(@+H}4R%S$Z;(tT4o>U)!jXT#b@iQI&BPacQk(-y+pgK?sgjIY1ZS(s2 zx&p|e2uu$6*~=1(oYP584kWtF2Hf48pUyaFw9HmjaR{Bwx}0CZ?{+uxgEvmq+1;vz zxs}%SV_zQWKb)M$T+VEDLY!0EF?l*!_x|&=Y)m@N>$e>x9SA#4YqXJ`KkZ|UXxg@M znMPlT_o%qBkB%YS$|w48Ih7Ox7uJ6?0vmptqSSl($T0$n0}zV4fwUTEI=}YB82}@g zPn=iD@S78j%TVHQD9k{54}bGha55@ihayBLIQT=O1Ia`PPahC7O%nCB&sCX6Hm1I(f;KDK zU!Coh*Ngylb0>#jd!npu*)Bi+RNb!rSl-G@Nou>CET0%7>owQB--_|@Ml+q9w>Qy# zB=9;e&X%P$Y2xxD=oy(jn)q{g-KcN(v^^B$Q;dNFQR&3iVdQ*X+{T)`H!*4{5k@=( zQ7-!i(%%De>qX4I6Y3+HsG1sA3tX^{|1z01DJ^J!}v_@E41muagycZdGjk)wUWw!6r5{;;y?ao|4E% zZjvQtt;B=7;iD&$kk-N;1QWS(pZeK0vB(XDaA#?8d>UV>j!x|f-!WTR%Pwm?-6M~~ zGVV?JsbykbQ`7r5iQ4q%sXkZx#Xb6dkH05e)&XfcNuc6dqZ`C9G22{usn|0LKR zdy8@?fC1XJfb)N7S7tH~o0wZu=8b?`=QO9~?sdu6X&a0cO>V+U1udb{EB3dsdR7D| z8Xf9(9nS}j`@U`pAO%&Wna&wf%!0K>rpSK3doP{qQlKzbIOk;7JvdWRr{~WyaG(%7 zI_Sjh_PKx&qMYS=jQg*dNkFZFsPTMdsCU~!nE@hz?b)`fQ)SM-h{IJ2*pyZ`s3&xR z(6fjtzg)w@c1M=3h&`cBD1s?yj3E&zx2b|}nD|Xn`%b?`1;(k8n3b^~s`kK$d8K=6 zCi{cQ{m;uB1&}1i2dIyO{}@m<{{JBfO1Vvvak^xZ2|v2GBB~dk(|Jvg1S?}Gp8n6@ zsw8w6|FdAcQ3H#yU+=Bptw08xI1rm$pdAX;D)sU4$pJ3mc#47He2n|gG&XqHQXWW% zQc|wT@qs%49aIHC7y-h{0#MK2#&4xJo>!o8hWkK(}7J+8s$0pP9K+K>e?kD&$-!zzk7ml+Y(P$=`ON=E78PT%g(LoWrK-w29k<4P?2=_bd7#SJC@BI%S?7s6q zo8*D9#?FfVU1+jja1t~9z{;Dvq;fq(Wg(k4&xcbDz9b9DC{0lG`wTD=zJ6xn9+s1r z*RXh}qJn2XTfewr^3YNOniFS$r|<=+=*h>=U&xBQJ5x6@+VxYK$NSjIZnl1Ow2SKD z9}50C@0gtkjgV(&)xFWGrS# zq-BBzkhFX3>d z^xmKry1PEw07wKB04K>UVcVeLWP6&RtgI}Cf`dCQE)Ms)ZF79`>%&4w%kCK&Y;39pfG?#P;A=bA z$lc%HKk?ifAfI&u*Q}5WE8LHPGus9J0)XHibYbsNa1K|_y^4h}j( zF^R}HwQU>?4GmMSmm+QYR}HKa*F_%=%b$70sZU&@A9hcNG*kWpav`}dam+eRqhdeL`W5sSr5vtGC}@DJe$}53K;-geVMK{FOupnEYusP`H$wtxEf~Jw;?c{A8pv zEZ#}>BfJN3WrZZ-O^ej{#UOJ0;I#Tc*4oC;Hisc9*>Ae;qadCNf!k_7VWQL3S=*h# zTrw*X#s&WOi-CaqVnOno>nXOfHg>9#PzW^H&Gp`fdVdHB39UU2uC0vw#$`x#r}`zjv+n*<^_gPBKs>Eu8U*CufY;L5;(BBm3Rv-gxh#1wOl zEmY}=CvDCWpjFTKbk8^~2rXvhgu>yJ0BWp;7#swpYRe?w8xmP*P0jOgY>MBJtgYJX zrT{JbtzK*ME$U1@XqF&w1bh#RRhOo;TwvuJq*x%}yrggiHZ=O{C8gDohAM2ry zVGq@Do;ZOZugBj)Qf+rSzl9=f(`*_f;MdGO3|WffOnR29nm!6NHmWhaUE9Gxd6FWm z*B?Fr!i#KPz(&7_7R8LrOHQKPQCREOq(VJy%EB=?#mb-iaay;ek2OYP@laF8O@QNw1!XGP8G1` zO=;?}mJ4K##J}X{^Zm>jsRB#qi)Ac;BpVk4&Sn7}y!OTVu*(K?B?e&&ZHTH+5XkSb;L{jliPk_)

5T)=a| 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 B1=aun literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 43f9bc61..93673db2 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ + 重命名文件/目录:`Ctrl + 右键文件/目录` + 切换文档预览显示:`Alt + V` 或点击状态栏 `切换预览` 按钮 + 切换编辑器自动换行:`Alt + W` 或点击状态栏 `切换换行` 按钮 ++ 切换内置终端展示:`Alt + O` 或点击状态栏 `切换终端` 按钮 + 将外链或 BASE64 图片转换为本地图片:`Ctrl + Shift + 单击图片` + 默认文件存储在 `./data` 目录下,添加更多仓库请编辑 `./config.json` 文件 + 默认快捷键参考 [vscode](https://code.visualstudio.com/) @@ -88,6 +89,7 @@ + katex 公式解析 [markdown-it-katex](https://github.com/waylonflinn/markdown-it-katex) + 元素属性书写 [markdown-it-attrs](https://github.com/arve0/markdown-it-attrs) + 表格解析增强,支持表格标题多行文本,列表等特性 [markdown-it-multimd-table](https://github.com/RedBug312/markdown-it-multimd-table) ++ 内置终端 [XTERM.JS](https://xtermjs.org/) [node-pty](https://github.com/Microsoft/node-pty) ## 开发 + 后端: `cd backend; node main.js` @@ -124,6 +126,7 @@ + [x] 支持多根目录 + [x] 状态栏 + [x] toc 生成 ++ [x] 内置终端 + [ ] 代码块渲染增加行号 + [ ] 信息流,定时任务 + [ ] 标签支持 @@ -141,3 +144,4 @@ ![截图](./4.png) ![截图](./5.gif) ![截图](./6.png) +![截图](./7.png) diff --git a/backend/main.js b/backend/main.js index c227db49..34563cef 100644 --- a/backend/main.js +++ b/backend/main.js @@ -4,6 +4,7 @@ const bodyParser = require('koa-body') const static = require('koa-static') const mime = require('mime') const request = require('request') +const pty = require('node-pty') const file = require('./file') const dataRepository = require('./repository') @@ -171,6 +172,23 @@ app.use(async (ctx, next) => await wrapper(ctx, next, repository)) app.use(async (ctx, next) => await wrapper(ctx, next, proxy)) const port = 3000 -app.listen(port) + +const server = require('http').createServer(app.callback()) +const io = require('socket.io')(server, {path: '/ws'}) + +io.on('connection', socket => { + const ptyProcess = pty.spawn('bash', ['--login'], { + name: 'xterm-color', + cols: 80, + rows: 24, + cwd: path.join(__dirname, '../'), + env: process.env + }) + ptyProcess.on('data', data => socket.emit('output', data)) + socket.on('input', data => ptyProcess.write(data)) + socket.on('resize', size => ptyProcess.resize(size[0], size[1])) +}) + +server.listen(port) console.log(`访问地址:http://localhost:${port}`) diff --git a/backend/package.json b/backend/package.json index 0baa70e5..8162baeb 100644 --- a/backend/package.json +++ b/backend/package.json @@ -7,8 +7,10 @@ "mime": "^2.2.0", "natural-orderby": "^1.0.2", "node-plantuml": "^0.6.2", + "node-pty": "^0.8.1", "opn": "^5.3.0", "request": "^2.88.0", - "safe-buffer": "^5.1.2" + "safe-buffer": "^5.1.2", + "socket.io": "^2.2.0" } } diff --git a/backend/yarn.lock b/backend/yarn.lock index 2ca2a585..dd53b0c1 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -9,6 +9,17 @@ accepts@^1.2.2: mime-types "~2.1.16" negotiator "0.6.1" +accepts@~1.3.4: + version "1.3.5" + resolved "http://registry.npm.taobao.org/accepts/download/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +after@0.8.2: + version "0.8.2" + resolved "http://registry.npm.taobao.org/after/download/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + ajv@^5.3.0: version "5.5.2" resolved "http://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" @@ -22,6 +33,10 @@ any-promise@^1.0.0, any-promise@^1.1.0: version "1.3.0" resolved "http://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "http://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + asn1@~0.2.3: version "0.2.4" resolved "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -32,6 +47,10 @@ assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" +async-limiter@~1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + asynckit@^0.4.0: version "0.4.0" resolved "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -44,16 +63,42 @@ aws4@^1.8.0: version "1.8.0" resolved "http://registry.npm.taobao.org/aws4/download/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" +backo2@1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "http://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + +base64id@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/base64id/download/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" dependencies: tweetnacl "^0.14.3" +better-assert@~1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/better-assert/download/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + dependencies: + callsite "1.0.0" + +blob@0.0.5: + version "0.0.5" + resolved "http://registry.npm.taobao.org/blob/download/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + bytes@3.0.0: version "3.0.0" resolved "http://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" +callsite@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/callsite/download/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + caseless@~0.12.0: version "0.12.0" resolved "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -81,6 +126,18 @@ commander@^2.8.1: version "2.16.0" resolved "http://registry.npm.taobao.org/commander/download/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" +component-bind@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + +component-emitter@1.2.1: + version "1.2.1" + resolved "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +component-inherit@0.0.3: + version "0.0.3" + resolved "http://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + content-disposition@~0.5.0: version "0.5.2" resolved "http://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" @@ -89,6 +146,10 @@ content-type@^1.0.0: version "1.0.4" resolved "http://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" +cookie@0.3.1: + version "0.3.1" + resolved "http://registry.npm.taobao.org/cookie/download/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + cookies@~0.7.0: version "0.7.1" resolved "http://registry.npm.taobao.org/cookies/download/cookies-0.7.1.tgz#7c8a615f5481c61ab9f16c833731bcb8f663b99b" @@ -106,7 +167,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@*: +debug@*, debug@~3.1.0: version "3.1.0" resolved "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: @@ -118,6 +179,12 @@ debug@^2.6.3, debug@^2.6.8: dependencies: ms "2.0.0" +debug@~4.1.0: + version "4.1.1" + resolved "http://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + dependencies: + ms "^2.1.1" + deep-equal@~1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/deep-equal/download/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -153,6 +220,43 @@ ee-first@1.1.1: version "1.1.1" resolved "http://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" +engine.io-client@~3.3.1: + version "3.3.2" + resolved "http://registry.npm.taobao.org/engine.io-client/download/engine.io-client-3.3.2.tgz#04e068798d75beda14375a264bb3d742d7bc33aa" + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.1.1" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~6.1.0" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: + version "2.1.3" + resolved "http://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.3.1: + version "3.3.2" + resolved "http://registry.npm.taobao.org/engine.io/download/engine.io-3.3.2.tgz#18cbc8b6f36e9461c5c0f81df2b830de16058a59" + dependencies: + accepts "~1.3.4" + base64id "1.0.0" + cookie "0.3.1" + debug "~3.1.0" + engine.io-parser "~2.1.0" + ws "~6.1.0" + error-inject@~1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/error-inject/download/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" @@ -230,6 +334,16 @@ har-validator@~5.1.0: ajv "^5.3.0" har-schema "^2.0.0" +has-binary2@~1.0.2: + version "1.0.3" + resolved "http://registry.npm.taobao.org/has-binary2/download/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/has-cors/download/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + http-assert@^1.1.0: version "1.3.0" resolved "http://registry.npm.taobao.org/http-assert/download/http-assert-1.3.0.tgz#a31a5cf88c873ecbb5796907d4d6f132e8c01e4a" @@ -258,6 +372,10 @@ iconv-lite@0.4.19: version "0.4.19" resolved "http://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +indexof@0.0.1: + version "0.0.1" + resolved "http://registry.npm.taobao.org/indexof/download/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + inflation@^2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/inflation/download/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" @@ -278,6 +396,10 @@ is-wsl@^1.1.0: version "1.1.0" resolved "http://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" +isarray@2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + isstream@~0.1.2: version "0.1.2" resolved "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -402,6 +524,10 @@ mime-db@~1.35.0: version "1.35.0" resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" +mime-db@~1.37.0: + version "1.37.0" + resolved "http://registry.npm.taobao.org/mime-db/download/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" + mime-types@^2.0.7, mime-types@~2.1.15, mime-types@~2.1.16: version "2.1.17" resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" @@ -414,6 +540,12 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "~1.35.0" +mime-types@~2.1.18: + version "2.1.21" + resolved "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" + dependencies: + mime-db "~1.37.0" + mime@^2.2.0: version "2.2.0" resolved "http://registry.npm.taobao.org/mime/download/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b" @@ -422,6 +554,10 @@ ms@2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +ms@^2.1.1: + version "2.1.1" + resolved "http://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + mz@^2.6.0: version "2.7.0" resolved "http://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -430,6 +566,10 @@ mz@^2.6.0: object-assign "^4.0.1" thenify-all "^1.0.0" +nan@2.12.1: + version "2.12.1" + resolved "http://registry.npm.taobao.org/nan/download/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" + natural-orderby@^1.0.2: version "1.0.2" resolved "http://registry.npm.taobao.org/natural-orderby/download/natural-orderby-1.0.2.tgz#287a4778217fbf6af0d704129d55ae90450f7a88" @@ -459,6 +599,12 @@ node-plantuml@^0.6.2: node-nailgun-server "^0.1.3" plantuml-encoder "^1.2.5" +node-pty@^0.8.1: + version "0.8.1" + resolved "http://registry.npm.taobao.org/node-pty/download/node-pty-0.8.1.tgz#94b457bec013e7a09b8d9141f63b0787fa25c23f" + dependencies: + nan "2.12.1" + oauth-sign@~0.9.0: version "0.9.0" resolved "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -467,6 +613,10 @@ object-assign@^4.0.1: version "4.1.1" resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-component@0.0.3: + version "0.0.3" + resolved "http://registry.npm.taobao.org/object-component/download/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + on-finished@^2.1.0: version "2.3.0" resolved "http://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -487,6 +637,18 @@ pako@1.0.3: version "1.0.3" resolved "http://registry.npm.taobao.org/pako/download/pako-1.0.3.tgz#5f515b0c6722e1982920ae8005eacb0b7ca73ccf" +parseqs@0.0.5: + version "0.0.5" + resolved "http://registry.npm.taobao.org/parseqs/download/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "http://registry.npm.taobao.org/parseuri/download/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + dependencies: + better-assert "~1.0.0" + parseurl@^1.3.0: version "1.3.2" resolved "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -575,6 +737,48 @@ setprototypeof@1.0.3: version "1.0.3" resolved "http://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" +socket.io-adapter@~1.1.0: + version "1.1.1" + resolved "http://registry.npm.taobao.org/socket.io-adapter/download/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" + +socket.io-client@2.2.0: + version "2.2.0" + resolved "http://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.2.0.tgz#84e73ee3c43d5020ccc1a258faeeb9aec2723af7" + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~3.1.0" + engine.io-client "~3.3.1" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.3.0" + to-array "0.1.4" + +socket.io-parser@~3.3.0: + version "3.3.0" + resolved "http://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" + +socket.io@^2.2.0: + version "2.2.0" + resolved "http://registry.npm.taobao.org/socket.io/download/socket.io-2.2.0.tgz#f0f633161ef6712c972b307598ecd08c9b1b4d5b" + dependencies: + debug "~4.1.0" + engine.io "~3.3.1" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.2.0" + socket.io-parser "~3.3.0" + sshpk@^1.7.0: version "1.14.2" resolved "http://registry.npm.taobao.org/sshpk/download/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" @@ -606,6 +810,10 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" +to-array@0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + tough-cookie@~2.4.3: version "2.4.3" resolved "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -657,3 +865,17 @@ verror@1.10.0: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" + +ws@~6.1.0: + version "6.1.3" + resolved "http://registry.npm.taobao.org/ws/download/ws-6.1.3.tgz#d2d2e5f0e3c700ef2de89080ebc0ac6e1bf3a72d" + dependencies: + async-limiter "~1.0.0" + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "http://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + +yeast@0.1.2: + version "0.1.2" + resolved "http://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" diff --git a/frontend/config/index.js b/frontend/config/index.js index eb8a7c1a..fc6f02de 100644 --- a/frontend/config/index.js +++ b/frontend/config/index.js @@ -13,6 +13,10 @@ module.exports = { proxyTable: { '/api': { target: 'http://localhost:3000' + }, + '/ws': { + target: 'http://localhost:3000', + ws: true } }, diff --git a/frontend/package.json b/frontend/package.json index 53ead003..4c2484d3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -26,9 +26,11 @@ "mermaid": "^7.1.2", "monaco-editor": "^0.13.1", "normalize.css": "^7.0.0", + "socket.io-client": "^2.2.0", "vue": "^2.5.2", "vue-bus": "^1.1.0", - "vue-router": "^3.0.1" + "vue-router": "^3.0.1", + "xterm": "^3.11.0" }, "devDependencies": { "autoprefixer": "^7.1.2", diff --git a/frontend/src/components/RunPlugin.js b/frontend/src/components/RunPlugin.js index b82e69b5..b85e2cfd 100644 --- a/frontend/src/components/RunPlugin.js +++ b/frontend/src/components/RunPlugin.js @@ -43,9 +43,15 @@ const RunPlugin = (md) => { resultDiv.innerText = e.message }) ` + const runInXterm = ` + var code = '${encodeURIComponent(code).replace(/'/g, '\\\'')}' + code = decodeURIComponent(code) + runInXterm('${token.info}', code, !arguments[0].ctrlKey) + ` + const result = localStorage[`${cachePrefix}${hash}`] || '' - const resultDiv = `

` + const resultDiv = `
${result}
` const codeContent = temp(tokens, idx, options, env, slf).trim().replace(/<\/pre>$/, '') diff --git a/frontend/src/components/StatusBar.vue b/frontend/src/components/StatusBar.vue index a78ddb8b..2a470731 100644 --- a/frontend/src/components/StatusBar.vue +++ b/frontend/src/components/StatusBar.vue @@ -2,8 +2,9 @@
-
切换预览
-
切换换行
+
切换预览
+
切换换行
+
切换终端
行:{{documentInfo.line}} 列:{{documentInfo.column}} @@ -50,6 +51,9 @@ export default { toggleView () { this.$bus.emit('toggle-view') }, + toggleXterm () { + this.$bus.emit('toggle-xterm') + }, toggleWrap () { this.$bus.emit('editor-toggle-wrap') }, @@ -60,6 +64,12 @@ export default { e.stopPropagation() } + if (e.key === 'o' && e.altKey) { + this.toggleXterm() + e.preventDefault() + e.stopPropagation() + } + if (e.key === 'w' && e.altKey) { this.toggleWrap() e.preventDefault() diff --git a/frontend/src/components/View.vue b/frontend/src/components/View.vue index 127ad478..5aa24bfc 100644 --- a/frontend/src/components/View.vue +++ b/frontend/src/components/View.vue @@ -29,7 +29,7 @@
-
TOP
+
TOP
@@ -61,7 +61,8 @@ export default { value: String, fileRepo: String, fileName: String, - filePath: String + filePath: String, + showXterm: Boolean }, data () { return { @@ -393,6 +394,10 @@ button:hover { font-size: 14px; } +.scroll-to-top.show-xterm { + bottom: 45vh; +} + .scroll-to-top { user-select: none; position: fixed; diff --git a/frontend/src/components/Xterm.vue b/frontend/src/components/Xterm.vue new file mode 100644 index 00000000..9ddaa320 --- /dev/null +++ b/frontend/src/components/Xterm.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/frontend/src/pages/Home.vue b/frontend/src/pages/Home.vue index 5ccb905b..8621ec68 100644 --- a/frontend/src/pages/Home.vue +++ b/frontend/src/pages/Home.vue @@ -14,24 +14,30 @@
- - +
+
+ + +
+ +
@@ -43,6 +49,7 @@ import dayjs from 'dayjs' import Editor from '../components/Editor' import XView from '../components/View' +import Xterm from '../components/Xterm' import Tree from '../components/Tree' import StatusBar from '../components/StatusBar' import RunPlugin from '../components/RunPlugin' @@ -50,7 +57,7 @@ import File from '../file' export default { name: 'home', - components: { XView, Editor, Tree, StatusBar }, + components: { XView, Editor, Tree, StatusBar, Xterm }, data () { return { status: '请选择文件', @@ -59,7 +66,8 @@ export default { file: null, oldHash: null, timer: null, - showView: true + showView: true, + showXterm: false } }, mounted () { @@ -67,6 +75,7 @@ export default { this.restartTimer() this.$bus.on('toggle-view', this.toggleView) + this.$bus.on('toggle-xterm', this.toggleXterm) window.onbeforeunload = () => { return this.unsaved || null @@ -74,12 +83,20 @@ export default { }, beforeDestroy () { this.$bus.off('toggle-view', this.toggleView) + this.$bus.off('toggle-xterm', this.toggleXterm) this.clearTimer() }, methods: { toggleView () { this.showView = !this.showView }, + toggleXterm (flag) { + this.showXterm = flag === undefined ? !this.showXterm : !!flag + this.$nextTick(() => { + this.$refs.editor.resize() + this.$refs.xterm.init() + }) + }, editorReady () { this.$bus.emit('editor-ready') }, @@ -208,6 +225,7 @@ export default { padding-bottom: 20px; box-sizing: border-box; overflow: auto; + flex: 0 0 auto; } .show-view .editor { @@ -215,7 +233,7 @@ export default { } .editor { - height: 95vh; + /* height: 95vh; */ width: 83vw; overflow: hidden; } @@ -232,7 +250,7 @@ export default { margin: 0 auto; padding: 45px; width: 43vw; - height: 95vh; + /* height: 95vh; */ overflow: auto; box-sizing: border-box; display: none; diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 2ff21672..b80d60a5 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -89,6 +89,10 @@ acorn@^5.0.0, acorn@^5.1.1, acorn@^5.2.1: version "5.3.0" resolved "http://registry.npm.taobao.org/acorn/download/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822" +after@0.8.2: + version "0.8.2" + resolved "http://registry.npm.taobao.org/after/download/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + ajv-keywords@^2.0.0, ajv-keywords@^2.1.0: version "2.1.1" resolved "http://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" @@ -239,6 +243,10 @@ array-unique@^0.3.2: version "0.3.2" resolved "http://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "http://registry.npm.taobao.org/arraybuffer.slice/download/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -920,6 +928,10 @@ babylon@^6.18.0: version "6.18.0" resolved "http://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" +backo2@1.0.2: + version "1.0.2" + resolved "http://registry.npm.taobao.org/backo2/download/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + balanced-match@^0.4.2: version "0.4.2" resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" @@ -928,6 +940,10 @@ balanced-match@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "http://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + base64-js@^1.0.2: version "1.2.1" resolved "http://registry.npm.taobao.org/base64-js/download/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" @@ -954,6 +970,12 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +better-assert@~1.0.0: + version "1.0.2" + resolved "http://registry.npm.taobao.org/better-assert/download/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + dependencies: + callsite "1.0.0" + big.js@^3.1.3: version "3.2.0" resolved "http://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" @@ -962,6 +984,10 @@ binary-extensions@^1.0.0: version "1.11.0" resolved "http://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" +blob@0.0.5: + version "0.0.5" + resolved "http://registry.npm.taobao.org/blob/download/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + block-stream@*: version "0.0.9" resolved "http://registry.npm.taobao.org/block-stream/download/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -1183,6 +1209,10 @@ caller-path@^0.1.0: dependencies: callsites "^0.2.0" +callsite@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/callsite/download/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + callsites@^0.2.0: version "0.2.0" resolved "http://registry.npm.taobao.org/callsites/download/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" @@ -1448,10 +1478,18 @@ commondir@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" -component-emitter@^1.2.1: +component-bind@1.0.0: + version "1.0.0" + resolved "http://registry.npm.taobao.org/component-bind/download/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + +component-emitter@1.2.1, component-emitter@^1.2.1: version "1.2.1" resolved "http://registry.npm.taobao.org/component-emitter/download/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" +component-inherit@0.0.3: + version "0.0.3" + resolved "http://registry.npm.taobao.org/component-inherit/download/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + compressible@~2.0.11: version "2.0.12" resolved "http://registry.npm.taobao.org/compressible/download/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66" @@ -1806,7 +1844,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6. dependencies: ms "2.0.0" -debug@^3.0.1, debug@^3.1.0: +debug@^3.0.1, debug@^3.1.0, debug@~3.1.0: version "3.1.0" resolved "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: @@ -2065,6 +2103,32 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" +engine.io-client@~3.3.1: + version "3.3.2" + resolved "http://registry.npm.taobao.org/engine.io-client/download/engine.io-client-3.3.2.tgz#04e068798d75beda14375a264bb3d742d7bc33aa" + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.1.1" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~6.1.0" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.1.1: + version "2.1.3" + resolved "http://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + enhanced-resolve@^3.4.0: version "3.4.1" resolved "http://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" @@ -2899,6 +2963,16 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-binary2@~1.0.2: + version "1.0.3" + resolved "http://registry.npm.taobao.org/has-binary2/download/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "http://registry.npm.taobao.org/has-cors/download/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + has-flag@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" @@ -3458,6 +3532,10 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" +isarray@2.0.1: + version "2.0.1" + resolved "http://registry.npm.taobao.org/isarray/download/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + isexe@^2.0.0: version "2.0.0" resolved "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -4224,6 +4302,10 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-component@0.0.3: + version "0.0.3" + resolved "http://registry.npm.taobao.org/object-component/download/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + object-copy@^0.1.0: version "0.1.0" resolved "http://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" @@ -4428,6 +4510,18 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parseqs@0.0.5: + version "0.0.5" + resolved "http://registry.npm.taobao.org/parseqs/download/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "http://registry.npm.taobao.org/parseuri/download/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + dependencies: + better-assert "~1.0.0" + parseurl@~1.3.2: version "1.3.2" resolved "http://registry.npm.taobao.org/parseurl/download/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -5535,6 +5629,33 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +socket.io-client@^2.2.0: + version "2.2.0" + resolved "http://registry.npm.taobao.org/socket.io-client/download/socket.io-client-2.2.0.tgz#84e73ee3c43d5020ccc1a258faeeb9aec2723af7" + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~3.1.0" + engine.io-client "~3.3.1" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.3.0" + to-array "0.1.4" + +socket.io-parser@~3.3.0: + version "3.3.0" + resolved "http://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" + sockjs-client@1.1.4: version "1.1.4" resolved "http://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" @@ -5891,6 +6012,10 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +to-array@0.1.4: + version "0.1.4" + resolved "http://registry.npm.taobao.org/to-array/download/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + to-arraybuffer@^1.0.0: version "1.0.1" resolved "http://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -6405,14 +6530,28 @@ ws@^4.0.0: safe-buffer "~5.1.0" ultron "~1.1.0" +ws@~6.1.0: + version "6.1.3" + resolved "http://registry.npm.taobao.org/ws/download/ws-6.1.3.tgz#d2d2e5f0e3c700ef2de89080ebc0ac6e1bf3a72d" + dependencies: + async-limiter "~1.0.0" + xml-char-classes@^1.0.0: version "1.0.0" resolved "http://registry.npm.taobao.org/xml-char-classes/download/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "http://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" +xterm@^3.11.0: + version "3.11.0" + resolved "http://registry.npm.taobao.org/xterm/download/xterm-3.11.0.tgz#2c10da3e965db9170430aa7b68f8965de3ff004d" + xxhashjs@^0.2.1: version "0.2.2" resolved "http://registry.npm.taobao.org/xxhashjs/download/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" @@ -6487,3 +6626,7 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" + +yeast@0.1.2: + version "0.1.2" + resolved "http://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"