From 83053c02b50d7ca30c1c66591f8676e398ccaf06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Thu, 25 Jan 2024 15:45:41 +0100 Subject: [PATCH] make index.php updater.phar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- updater.phar | Bin 760151 -> 1171568 bytes vendor/composer/autoload_classmap.php | 39 ++ vendor/composer/autoload_files.php | 6 +- vendor/composer/autoload_psr4.php | 4 + vendor/composer/autoload_static.php | 65 ++- vendor/composer/installed.json | 440 ++++++++++++++++-- vendor/composer/installed.php | 64 ++- vendor/symfony/console/Application.php | 329 ++++++------- vendor/symfony/console/CHANGELOG.md | 55 +++ vendor/symfony/console/Command/Command.php | 203 ++++---- .../symfony/console/Command/HelpCommand.php | 22 +- .../symfony/console/Command/ListCommand.php | 46 +- .../symfony/console/Command/LockableTrait.php | 4 +- .../CommandLoader/CommandLoaderInterface.php | 10 +- .../CommandLoader/ContainerCommandLoader.php | 4 +- .../CommandLoader/FactoryCommandLoader.php | 4 +- vendor/symfony/console/ConsoleEvents.php | 25 + .../AddConsoleCommandPass.php | 60 ++- .../Descriptor/ApplicationDescription.php | 4 +- .../symfony/console/Descriptor/Descriptor.php | 9 +- .../Descriptor/DescriptorInterface.php | 7 +- .../console/Descriptor/JsonDescriptor.php | 51 +- .../console/Descriptor/MarkdownDescriptor.php | 44 +- .../console/Descriptor/TextDescriptor.php | 29 +- .../console/Descriptor/XmlDescriptor.php | 48 +- .../console/Event/ConsoleCommandEvent.php | 24 +- vendor/symfony/console/Event/ConsoleEvent.php | 8 +- .../console/Event/ConsoleTerminateEvent.php | 20 +- .../Exception/CommandNotFoundException.php | 2 +- .../console/Formatter/OutputFormatter.php | 37 +- .../Formatter/OutputFormatterInterface.php | 26 +- .../Formatter/OutputFormatterStyle.php | 128 +---- .../OutputFormatterStyleInterface.php | 20 +- .../WrappableOutputFormatterInterface.php | 2 +- .../console/Helper/DebugFormatterHelper.php | 27 +- .../console/Helper/DescriptorHelper.php | 13 +- .../console/Helper/FormatterHelper.php | 28 +- vendor/symfony/console/Helper/Helper.php | 72 ++- .../console/Helper/HelperInterface.php | 4 +- vendor/symfony/console/Helper/HelperSet.php | 38 +- .../symfony/console/Helper/ProcessHelper.php | 28 +- vendor/symfony/console/Helper/ProgressBar.php | 110 +++-- .../console/Helper/ProgressIndicator.php | 69 ++- .../symfony/console/Helper/QuestionHelper.php | 131 +++++- .../console/Helper/SymfonyQuestionHelper.php | 13 + vendor/symfony/console/Helper/Table.php | 108 +++-- vendor/symfony/console/Helper/TableCell.php | 10 + vendor/symfony/console/Helper/TableRows.php | 6 +- vendor/symfony/console/Helper/TableStyle.php | 114 +---- vendor/symfony/console/Input/ArgvInput.php | 66 ++- vendor/symfony/console/Input/ArrayInput.php | 13 +- vendor/symfony/console/Input/Input.php | 42 +- .../symfony/console/Input/InputArgument.php | 6 +- .../symfony/console/Input/InputDefinition.php | 112 +++-- .../symfony/console/Input/InputInterface.php | 44 +- vendor/symfony/console/Input/InputOption.php | 32 +- vendor/symfony/console/LICENSE | 2 +- .../symfony/console/Output/BufferedOutput.php | 2 +- .../symfony/console/Output/ConsoleOutput.php | 4 +- .../console/Output/ConsoleOutputInterface.php | 4 +- .../console/Output/ConsoleSectionOutput.php | 6 +- vendor/symfony/console/Output/NullOutput.php | 17 +- vendor/symfony/console/Output/Output.php | 19 +- .../console/Output/OutputInterface.php | 24 +- .../symfony/console/Output/StreamOutput.php | 36 +- .../console/Output/TrimmedBufferOutput.php | 2 +- .../console/Question/ChoiceQuestion.php | 15 +- vendor/symfony/console/Question/Question.php | 59 +-- vendor/symfony/console/README.md | 16 + vendor/symfony/console/Style/OutputStyle.php | 14 +- .../symfony/console/Style/StyleInterface.php | 39 +- vendor/symfony/console/Style/SymfonyStyle.php | 114 ++--- vendor/symfony/console/Terminal.php | 21 +- .../console/Tester/ApplicationTester.php | 7 +- .../symfony/console/Tester/CommandTester.php | 2 - vendor/symfony/console/Tester/TesterTrait.php | 31 +- vendor/symfony/console/composer.json | 29 +- vendor/symfony/polyfill-mbstring/LICENSE | 2 +- vendor/symfony/polyfill-mbstring/Mbstring.php | 87 +++- .../symfony/polyfill-mbstring/bootstrap.php | 4 + .../symfony/polyfill-mbstring/bootstrap80.php | 4 + .../symfony/polyfill-mbstring/composer.json | 2 +- vendor/symfony/polyfill-php73/LICENSE | 2 +- vendor/symfony/polyfill-php73/composer.json | 2 +- vendor/symfony/polyfill-php80/LICENSE | 2 +- vendor/symfony/polyfill-php80/composer.json | 2 +- 86 files changed, 2178 insertions(+), 1317 deletions(-) diff --git a/updater.phar b/updater.phar index d3eb6c6cedbf94aa7299826568432e4f8b65f67a..b55188151ae8d3f3f098b32a20c0be5e6283ed19 100755 GIT binary patch literal 1171568 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

>v> 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

SwOmoL*09^-S?_0_8k^JBoaVC6`heP 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

yF z^HgyR`WH?^-30W8bI&sf@07Ey{sl|<&vcH3ox)h7-_?jmg$)kKUqF{wpSAv0wMwO6 z&A3SgZ?uxRJmEw_mrK^Qm(rk_)Q3$fmLJ*={#eI zpJ}FWh3eTP6_8c)U#FRS0un~gNTTA@i#fIIeREG zs9~Oz&DqWfkIl@ND>=e;Im`S&fxq5dUAg(P$4d&)6QO6BM3Q?Ba`tv>_D-U{5w1gl zf+F+rb`h~scC%kRb>`G5ajPf6kZ80d7v=5p43vKMCv2b2^Cvumn1i^E^|9yVD^6fC zvI>i+ObDTr{Ne;JPbr3LW`jz7BtWF$5mg8#4AyK_Tqr6@5^x_VJZ+UzoPSUF0e?!5 zm7u|wXt~Lyh^8b*P7qB7t*Ll&Z0Se>j2R0IplZ@>iH8J*{i3>iM+)1s=&CG@Hbtw^ z+*2CMvAZi`xH<_KJuOU%w-SScvzfj28w+klX(1;;-aHvG?KGium9rpc$FyoC(ef@W z_z!CzxPX@1cj2XlvuR%9c@g`ZA;4z^A-?=-B#O97T8`Se)MPTgxE79_oQ_9X8ZUAz z`Wzrb%fAVjruHrDy{z4(gkrG}osz_^N_>J)yb_&KTYi)U0U?gaKG}bZxbiPd^i*2c z)y`B>F?<}#=P_?q##0y$gKhd7L@CJCo0Wf$Hjdil9@3ORndPeh`e3k+Oydv8EScgt5OMtxuei@U28-TLJC{M{~36ls1r@x4l^euwA77(_H ziTO?#vw!cdmx7d633>QfQUMW+gi9*s6_CF`ykt#77K{tro|7lg3a^d1ZJh&aEZ5K} zz8hGDvngIXv2cXNo9C~-{JB#Mdh{}SX2aCFxeok8J_&F@1!t!dA;A)hnS(*jRF=ln z?=l&6arCw_$IAe-Rbj(7nO%SOkkxw#35gOUhI~HB{a}_rC+aVyD2d7BI+-OeCHnNC z2qB9rn(1lF3p_nN+&tG9y}N{rA#*KF#)X{ZRe|Ou(IhKWh6rzSdt8zN{AgkC zy%C!5!x0$m{{~L$HHKentZA4MMPH*03X=PJBZyi(M}+cJ`1E`?HCxP{L31o|}Q zB1=n#>t@n9w5tQw0$#PDQn;nHUv;uY%j<{ycnd)~>KT_fs(w66g@Y{y%dUD%7vARLDUw~og?UktB|x4Yl$w+jBSu3U3Q<2zr*%uxjRkN0Em(+t)Qm7yvebWvMuDSyn|J*<_kMSF2O-P zR$Gvz?w2J(ym@jk3pL|T_vb(NxwD^>_`8%d@-~F9184__Hgrq<0myyZ_qqap4vwj`C1$~YwwG)poq%FlvA3$bmHnI z)cio~BtwQzOvook~F+`*W9lhmD;uTFlo8vPzghfsuM8<~6pgeDr(I}e0Livenj zbS#{PF<$cnF@<60h$j@+WotW`4MUF-o|&R8QIgfeA_Cd2k%k;yAB>0Y!j_YSs3e?N zrH9!^m{}y2(lf>BVkv}!UApq+(Q8SAgtd`Nf4>T=mTA+SRfd`m3Df>$(UM)l;9#rf^6N){2?KqIN$fc#>2n0-OA6AR)IA zHW0XZEXf@#Lvr6-sevHo4nR=WvYg-w_KOHg!dNw&k&4z&*-a1*UAoCFg2iFPNsi-r zy%9}ai7@B%8C88YOIkyiW=e|(eqnBgV1=eqeO!XH6_VJ#aIlC$eZx{BG@dL}<$Yw> z49m>l7$uVR5jqh62WT68{-;RtU6+rLnu()*y}ryLAn}AR7maESvK$h zL91oxgp>Q04ouO{#5;67tjYj|t(0VXgepWH2hIP;7}7k^5)KD?;(^kq)A)2fs2IUh z&GZ$QNA+kpORW=I9+%X*Jw<$Cvq1s zX}eCR$$GHp4ya{>)Hzr?X4t(Gt2YFQL0M}OAp8?)6ZGg2xKr{ZK9ljf6o)}q8|qPS zh$8!Bu3q{NK(QKLARbf!RBfn6|7GMWO20EIXp=6&lNO~_LJ)LX4IBx(Bn>25xWL^% zDN0Ma%4b4qI%-nx?i*`Pv%~?@MMFAM0c+Ko;3tNw9?At=o=R<<5^&iJLV@K>abe&k zx~aq{GZhS5Y|h!XUcV-o45~xG`@|DTXf0v!1l~{HzKyMx6>M! z7fI5cj@9|q!4+J(dh+WtOGpTcT%1VRdh)(x?U;J;{@wZGd2^EIVtNry0J$qyTR4?< zSST?)kDwvz2)oFkURFi&mFnUSc~Y&gMKV?uvt0fm>d=Za>t9v*8;f%f`YMe?jW zgrjm~uDGW)7uCGt%KE=@^Jb1H4^GtrHWO>ev81HT;7o%t(&FBqL|J52susltiuw)m z(lFR(<$fqh$PWTn0S(t!;7qk*go#Z~gd-_e(?z}Zu0N9D!YQ!m+zk(bVEjgj+g z;=(VEoRtz6zrYt4M=olKi=(Hl3jWZ>FOHt|7oWEh7rn~G&!5sZE{?Lq#nI0z9H;P8 zNY7lnc=3Wk;;+u?t9Lbot%)rWIaeg^?E%oPRWbDs>W9XwuQpDL`yd$N?p)wr0;jaz zOroV(RPub9gfw=yX zg-VTN2%Dcmng!WblNycBz!JWXSakdmQITfyd%VX0a;e)kFVP;xSp{xU>|Nu4}uR4Mv~n`nqfpooT*})OFg0b$xHKprN1T zAlX48NGU%SF@9QSv?Nk3M<+2cWh1O^$V39MEXq!+3ro0X27Z+npgi5e2X0{6za+`6 z5wg%hax_eyiF4TG5G-g}&B`eX2*;pkAc*`B82=)qU9|4YqIU72gN$tY;bnd}6F!_R zeE7V&c{|r%^0%oGV+IieYwkl5j{wnVspBF<-f;k@zGLW`BXoS;I`;NMuW9?iOmOBF zME0qjWof=NGZ*d(#IpvAU_In}5TLcb6ffnRY$sT*5S)g@WoS}NUh9phNWn8Pd2RYC z?)rWgncDwwI08*obWSDVZ#Bq}gXxUB#prv){ zV726~EI-I+1UT>0&ueZZ9CB;?;_z9$wM6qL1gTM`lMAui zbEAH)IK$n~(vSq)Ksm^lTBA`i)5$>;4fMzRVW^@4tH&bwm(f^R2+mRnOp>D*%pe?n zVW_1svG%Qo*+qorpfaxE!mu`OgMkY0J-?y2CFBFKrqV%V>)}#!YMmE{=z7o^OBgs# zk>RLM6!2mj8WL)+9L{w=%1gk^Em9^l>EW;BG(N)D7qTS4BH53K=(Oi7A`l|1AEmsP7K;XW+WWW z5T;pkPDcu1mP24u8>yEiJUMxP7cUAnwsho$B?GbSwpZRY0ciJG#j0e&;ysY`dT}_?M2rfNC+n3I?J zq~G#2LB%(-o{JwcKog$w{unx|-=1h$>1{pro)cD0Y_(EwY9X zA#$IDo?7n2V%EgOeDaCZIl)@)As#V1n~Ox9D=8@7;y$A+B9kpkMi9EUE$Y&|)|s>x zV?VrBUywsBY7V=Bo9+2lF2<_&@P4{=ANv3}lO=_~s?*aK#;(Z;p_A8IoyFB<+zNOS zsY2w6ypssQl~Tja;icP4<>WC$@3L7&4J{jqSEfU<9oK^f)gI+cG0BK}FGC8dw6qmg z39dBk&XB^<_1qR^+bmnzR#+1N)i8#5=V`K3NK~Kp`|_J(liV=z#ev31zBx8Na_y_x zmpXv#lwc)5KDd|rY|1=el}$zQ!ipUxvK9K^xu3Ut+T}`@i3fLYE-pNny1F?305UT_ zSm9>g30!S`XMo) zc)X{*dQ7EaKB#(l>#OttNwJ$=9bXMnshEQV%+}scl%pGE7h3Ph4Mo8Jv8m;$1;i*r znayEl!y8#7*N~%+?$MIpiWK^d9fp4TBvIj(j%t)tWrt6&f*c&^)S0&@!yT!$UV|XI z`WQr2$zFrNu+r-pdJ(MvMQz*GXs>~}w9DeVnks3Dw6p51uUgpqYo-^tB|l*`%%x&+ zV(rN{UF!CNE(B$Sl}V~t{i|hTU@sL(Qx8a&Iz3=2`hcq;Dwe?wd*TKrpBzQwRJM~e(2I6iilu5`vqFhP zI+A1oP6vR@+({m$T0-~HD8^x}^*IX7{nB*^S$3G7f=M8=YQ4Y-7l2p85kSG32->`tQM%KqMR>)d1PI2u=SJUTw`@C_+VejcUQcx9YeK9^|eL z>#gNA>#bXhM-Uk_#si17;Ku`rZpONx^yIkMdIdfDz$#aDT|o1riBAVwUG1Kri32h_ zgjfS)MM>bI;%#qaR#d8PsxR=Dy8w)keUJ__kt(h1d|f<`mGD`A(AT${G}RM&K-Nv% zYLC2l;)J8iTdyXM2t9CHgM17PAFE~iMoV&8O^1UJ>h(!_?oEQeTTfc;gBo(2r*=H` zXMLWr$zm~o$iy>3sS#6noM2;dsPk`mRkjQ7HrVdS1N zQCqVYES=fq)f?3~(NEp6k}q+yLo2V#u0+`@Czs@fnqeK@eW$@mk|3q$(4dhtaZb(f z{BtrytnKSlk=07Ns6J*Y!k@Nyv6jlv*7K&cf_SWYVDa%;Ma6nZD1$^_H?Sj7oZmbu zw(HOZuDEIo1IKH|<^l`yAQ8DW2*E+a)a`Tj=>UT=dC;9on^*xd55{p0Y)p$uhy__wT~!$17tZ+WRF z-{J7&54QE>JO8g0lt03|f9dc3WqkLq{N2Bb@BX#DoB96t;=6C!yEvvN-zB{Ahj;Pa zf6C_YM|k(o{oOy0?;PasMv%Yv8!Y$HZ$w-^`QC5(+uuyzk~5xs^jqoMZ+O{nq;LO* zzx^BOTXNfzkN#%*_P4$4Z>MjG^(Plh? zEx`K^{A~f=f9P)u@ctuzTY%T;_0jL7qoDje`RI4kw@$~8elLCd&%E8=Pv1IyKl+38 zEv4|uM}L^Ub-I7_N9kK<){p);ee3L6gx49i2rpUoNfBNb*N+PD{#zeK0p5S-Zwv5} z?Vl9krGP&v!uvaH;kyO={;t0*;P?0ZZ2`Z(?{5q6{(-+O!25^(wgB%R`P%}1|JdIa z@cSS9Z2{i@=x+<~{wIH1fcHQ9+XB4b^0x(e|BJsZ!24hQZ2{i@=5Gt|e&}!id&(vM z!`^OvJAL^leEF^P<)51tI2GTIsQ`*?x0kK#M$osa)Gz6+H2C>w8Nr|-0zx);_ zijbM0`Iq0~EOE2#K>p>oNUxjo@fC@6Gc871-Av1IZa{tqqVO-jMe3!ms0|PQ9F!iOdDBzK%G@=bod1WdYHHFteI7#-k(J zVDpAOy=hOg_H^E!=IrT$J+G3_Vg?Ev}{k;?5Sf<6ZW)XPm}hv zYESRj(>;6ol0Cg=PhYmD`}Xt|dwO6`U$v)Sx2L~mPr-WqxAy#ys{WxFl+A}!@(;~; zY(AvGJv1Y&`H+hJp&7ExhZMete}nB&nLqrSe5N2iG*!`jNFjV^_H^?hRrkZc&GJ;* z5C0CIsjeUXT|QG$Km2=qriy;}_xVia{O}*}nQHmrKjbqN^22|`XBwst&GKtLr1AXl zpYS^s#6#0n&4*MC5C0jzQ!6|)i?I2SruM^s!S7TM4^6K%AO5+K^6Q$- zBh5AP=h}Z@ee&blf8sOwZ|z%rCcmxyS3Z-!sC?GQPHP|XGudbDPx#EaWX<$)bB*k= zW=pi@8rfm(f3ZBtzxG{wUgrd}_A#G1m8?^|*EwgbQ=Hd1IjmEB*SRuSr?{?@-0LLw zI?26Ga<7xz>m>I&$-Pc;uan&CB=m>I&$-Pc;uan&CB=m>I&$-VyH ziGR|2o%CKOz1KLQmBTD-tO8X;9 z`y)#GBa-_O$^D4-+aqe*M>O3YQ9C{&`8EjdBa-V8$@S=8n|9hHc#pUU*(5n0kvxz5 zndEsy@;oAW9+5ncI9ojWV?*a7qW=-m|A^ZB(SPH2YUfA)gU{5)kIWI$d_?X0h}!WH zwdtdeSf1$I_%nOnAig$;uMLVzcqaZfh`$YL%kWI`*`WAr5WnG>i{K5;UK?EKZg95R zApSRq{|(w`8=Q?cXo+ob_SxXVbHgm?<_77p!P#cx-x_^3IJ<06oE}kpHz-aU6sHZ+ zYlHOKAiXw7uMN^`gY?>T{F$-=zB7r25>X`rM@Y+@$<%QhjbxeQr{HZc-jM zDUX{}pPN*lo22(9)#oPZy-9j+lD?ay?AOk# zZj!#6r0*ux_^|0We-+2k14Z1`Zfpkm_&T! zAW?`PIY<=ZM>K&Slc$F%VuQA<3g6#w{}B*SA@ zyJVxsB=e8INj>zKR{W2@NkTq$MNGx=n1p{s#(PY&{m0)VWgn9he)Mg!(qkI#KmMlU ziM;TLy!e>B@S|^g6BPbOG<6?S*dP6SBAUYdqi>TtzfWd(MDF}PdEv+Zp4QFxDbA1n zqqXpTGRKd5Hf0N7-wi2kZe?YAKz`s*Me!vEPKm+0joRNP(jknDi_y?4rZ3@f}h_r3W%NEJ9 zMP}Th#BNbOwz!_!B6Dt$YFlK^EyB0O8ET6}+xn-5;w{3vMPA(E4829x+agi7ID>6* z#@-@hZE<{CWV|h|r?#l!;BnC<`xfzqZ4rB>#@ix3wm9Qq7stMn>$ZrGEi%~_4XiC{ z#4T!^Ei&CUd2EX_;x=cDt>3lr`o_=J@AH`~7oKT=Z;@xWIiqa-A1}f876o^k9J)o_uuTr#qJG<^zT2XH+onabMP;*1edqMtrn+~Dwiw!{8*C~rILZ-?@>LwVbwyzQ|69m?AdVdE249?GPV3gnx(fwnKT_Aw72}Z#$H?9m?Ad>AORD+o8PeQr>n* z?_J8<4)MK99lt~R?^51&D1W<@w;l4sF6C{9^0rHP+aZ7KQr>nbZ@ZMY9rDXAUjE@zmX z-!gvL{b#1%cDMrErLnQY8ElvGy2BZ2m-4zp{l80j-QkL6mn(`L&Ih}c-yO~eyIf)H za6Z_jJnwJ?xl7|@hx%rh^1VY#W0w=)4)xD2<$Z_xVwdv1>-49*?>fCH@4HT4%KNU< zlk&dn^rO7*I=v|GyG|d<`>xZ2^0v$QcbD?D%lUVg^0fOW#6RU{m-F#1jTb5 z2h`68oPQ3ej}JKC98murQ2q}n{|A)+1Iqsa>3=}^KOp@NNdE)U|A6#AApH+W{{zzh zfb>5g{SQe01JeJ1^gkf|4@mz5(*J<;KOp@NNdE)U|A6#AApH+W{{zzhfb>5g{SQe0 z1JeJ1^gkf|4@mz5(*J<;KlJ{&Vmtgjn;#EI|3io8f0+I~`~!X`KVUCZ*9!;qARcmM zd_ev+{CY_FIi&tNq`i1Z{yn5T9a5hi(q23yKOa)Q4yoS`X)hj+ z{Qg7A-y!W~1fLoFyvL#44-_+exH1UhT4-4+4GZcP&A)>$iAO^gT~sE4@2)1*C!v+ zUVrip8f;HKq{ROJ?7eGqT-TK)_+7sutzny>Es;pR0Lr$c#LHrrUMDEz| z{q|^@9k-}T&yJ?)>QR+__h_1(x2Q^QkEZGVQI-AoX!`#&g-2B~Kr~I4jH>LzN7Ho5 zs7h9drskDuaBnbs8N;76HU`qqbmFM(KMYks*;VOX}W7vW&b{!ro%>6 zMyP0-E*n+JSAF#s+!amJd7~=XE1IVJMpg1x zG))JNs${Tenl2nw$zjnnoj9tJ#iD7tX;dXoMbmWDs7j`ars=9tm0T6g>RGdT_gOt_ zR_{KmXU*!}XGs~+tloW=q!G>P-DlOFS-pEz14+4HmCT@#aa1KWXeb(0$qgE7Mpcr7 z2Affp?2rmb4;l_eRmO9TSE4FAcu9c_82yUxoD`+IU$OOZMd<%;?B*q(k$0mSn;+H4 z^ihq?jcVlfsK(|+HL`hBV{@WfxDPuRQH_ip)!4;|YHDGPos6hPR*q`yW<)jea8wiP z)x?7}aa>I*uZhuW;<%dlt0qRPiLGklubQ~2Cbp`HiE84ens}!sCaQ^LYT})mIHe|* zsfj^q;*^^Bq9z8Zi5+UK3o&BYx3Bda9opr z*5t7@c}PwES(881h?7s_?Ta{HzK;tHRH!@UtrXtO`G?!q2Mkvnu?o3O}pD&#LgV zD*UVpKdZves_?Ta{HzK;tHRH!@UtrXtO`G?!q2Mkvnu?o3O}pD&#LgVD*UVpKXu`! zF8tJmpSti<7k=u(PhI$_3qN(?r!M@|g`c|cQx|^f!cSfJsS7`K;ioSA)PcUU@vj|zaF1y!*M0T&s?seI{F1y!d_qyy}m)+~KdtG*~%kFjAy)L`gW%s)5UYFhL zvU^>2ugmUr*}X2i*Jby*>|U4M>#}=YcCX9sb=kcxyVqs+y6oPN-5audLw0Y-?hVM8ZR|97HZ0-O`)Z!u}4#5p{A_d z6n>f-do(o`YRc|SA*!jdM^j^=rjXDS#+n*?G&S~U%BD@BrK!GtQ)7>&tlSiSnw+zU zni_jFW%s5K)l{Fhsj){hAVC;wYCNzeY^(_zYr@8wu(2j=tO*-y!p54gu_kP+2^(v| z#+tCPCM&PW%4@Renrylz3$Dq6YvPSHjc?av(>2+2O*UPVP1j`8HQ97cHeHiV*JRT* z*>p`dU6W1MWYaa-bWJv0lTFuT({%}5S9t$( zDiem9|4S+pikkm1l?g}9|235fNzMN)m8CqB%2K9DWr1t{ODYo%n}3yb z|DRMAIOnfYnK0Y@Je6tQsJWcVgyiO5r?M2wsVqfvDogR4%2Gt9vJ}&)EJbxHOL3jb zQe>yHfNf!EJz!f{S|^gfoJ+sPsfZv5KYjX7sYs^TP#D;dVKzh%8&c1PTzx~z*^sMm z==C<_#v5u-ux~uW(R}<1M&NjcZx+w6*AUO}&Egr(lEpLh+IWWjhlJ(PH! z28%!CTvj|!KZ-vkUgCLrQT!?K63^3z;!nvd@jN{!{*=5D&(nY6PZ{6hd3sO$DdSr_ z|9@DYCH|E0EuLqOGX9kDEuLRsoq6`1<9YTm<9W`{$Mc+bjpx~$j_29yjOW9~Y8Q1ZzCcx%zmXejLv;4#e~H;&`5MAfBfW$McK>@jM|O z&od6h^Yq_%p7A!Gr}xJ5jJNST=UwA@_Qm3P_Hg5Q_Qm3|yr3-ol;s6w>8C6&C`&(O zc|lqFDa#AW(ob1lP?mnm@`AGTQyEEXO=nAiYpuo#%1=!;)*z-EEcVZ6Ut)Iia4Px7OjXA z%3{%qIH4>St%wuKV$q5?p)3}yh!e_U(TX^sEEcVZ6Ut)Iia4Px7OjXA%3{%qIH4>S zt%wuKV$q5?p)3}y$lohL8}!^QQC)?OyCu%5$V)5X9k><}S3--q@)1`;`{aQY#j}dM ztHSyBSkvt>CgS}*=~&b2F(%$A5ehNUPKhvAm6uk9FifPgj__2K2Udlis{E}gtW@P) zSe*0od$HE-Vl2f`BG19X8zu4+EVEG}ufU=jCGr6*p;02lW5J9P;Ty|ilnBjO45LKW z!qOKdLMj%zC=o8PtVM}Xh(#<)ggGo(Q6hw4fr=903CmHG2t8PQqJ;AXF_xMrk(IHq zL<#2&Vk{$3qNt2TBT5v5tKvtk9>rKRVjaa-ED=#6WUh$mR)n7w@!E>;vm*Sg2tO;r z&x-J~BK)ifKP$q|itw`{{HzE+E5gr;@UtTPtcZ(Ogr61RXGQo~5q?&LpB3R}Mfh0} zepZB^72#(^_*oHtR)n7w;b%qoSrL9#gr61RXGNa7BF|mn3T3<^9$ArW4?mjUV-BPdjKBG=_OQGOCQ5W4(ulGKqPIOCNd7n6pZmHLMpHU~eB|p7S zWJb5t>%FgG)3iMIKCv22t5P3>nzAR3*`A^LDpH2brxiu z1zBf7)>)8s7G#|TS!Y4kS&(%WWSs?BXF=9kkaZShodsEEQF>mKo)@L(Md^7_dR~;C z7p3P#>3LClUX-2}rRPQIdGW6;!X}Gkwq%japDdE2lEq)C4jCy~{O^*Gf0D&jNys+I zVnY&gOR~uLo-C3{l10Y%WRbj)6lM3K>|T`Ji?VxBb}!2AMcKV5yBB5mqU>Ij-HWn& zQFbrN?nT+XD7zPB_oD1xl--N6dr@{T%I-zky(qgEW%r`&UX&PlvfsomZH#76k3WxOHpVk3N1yUr6{x%g_fewQWRQ>LQ7F-DGDt`j(d|LV@guw zC^soGf+R&*xhN}_WaW~qT#}VbvT{jQF3HLzS-B)Dml(T~(tos3KvI&uO0ri;_A1F< zB}Ulfvv6nGt0a4sWUrF!Rg%3*vR6s=D#>0Y*{dXbm1M7y>{XJzO0ri;_A1FwL!ESMnJn zZ1NfVTFGae6G=Yf=r8$<{g&kOU<>wklFvEU6Wx}6KCc*WM7PN&d2US;w*=X#>s@}|$J`RF!#mC3St-M7m`_%eMb zy3Jl?vaDYBZ87#T?G@dYo|o0@zAdyY)4!tIvd*%4-M59GWqMq6o4v|pS-tMtLew&u zHo7eaSXQt5wlKC#?u~AX6PDHMzAe-(lZ~U>>{TYq>UG~14wuQ#(QWoBlV$a~XT>DT zWPoUvy~<=+z3y3|cbPbhX4$JumeuQ?6(=l{)uUPVDwAdPx@W~d%jAt{R$j2IUiYlx z&N7)Knw4KHtJgiNNVH6DiDt!P%j$K{DmE>XZK7HAV3*bFo>jD3CjUgUoGVP0)$5)W zA1;%TqFK%rCd=w|&x#?J$x+cP=L(Z$^}1&j&WO5oQniY#KlgFZ2&J`xh zoLP!y#jDF?wrG}fg~>AKnxa`T?J{FiG|RcdWSL{wXja_2%xD$Oa;`90=BPHB6&o)z zenqpKD@>NfKeOVWW%19f_-9%CGb{dC7XQqOf0o5Rv*Mp+@z1RIXIcC+EB;v)|ICVi zmc>7_;-6*l&#d@oS^P6A{#h3P%!+@O#Xqy+pJnmStoUbH{4*>5Sr-4yl7F6R<^3tP zDEN7{r&@V`+N3s~YUTZDliGNymG`GjYU8O^-k&z9ji+m5o2S^Kz&n#|o??pvC1jhY z+9~lA8vy)_(9JjIp?O2{@(v1Ni1 zvdz;b+4$)i+2*NsZal>{2EG^B_~{zi=BajW{Pvf>q!Z$btcfeSA+E@qxS}KCip+^C zx+1Q~ow%Yi;)?8vE4m}D$e*~PL*j}IiYvM#uE?RdqEq6EEQ%|-C9cS$xT0g?icE?t zx+bp3rMRMV;)-mFE4nAH$fvlXgW`&eiYvM(uE?plqLbo^tcokTDXz$?xT2%tip+{D zx+<>7t+=AI;)?8wE4nML$gjAf!{Ukziz~V;uE?>!{pB1x4Umy#A!D}zGV&~B>^MM1 zriF}M2gt~^kg@Xs8QB&xb{`-k-$F*0hK!608J!w3axP?aYskpDkkPRrBhx@e*M^K- z0~wtgGO`V1bZ^MWH;~c6AtU2JMi+;SoC6u195S-bZ-1#p+~5B4Q~Eh%bS%i|>5$R2 zAfvBC#!wC!y&WJY)>%kkRWQV^D{Ty)eia)*++kL&m@k z8GB-oF|P9~eM1)bMXTSC1%A=`H)Mfdu)V=^KV*Slu)#sHz%SV1AX(rSY;vFs zYb8D?{Pvexb^GlvwU7c?;Crl~s9xZEEw7+n;CrmAs9xZEExMpy;CrmLs9xZEEybW- z;CrmWs9xZEEzqD|;Crmhs9xZEE!&`8;Crmss9xZEE#{zJ;Crm%s9xZEE%BgU;Crm? zs9vy#7Jg7K*aIs*su%2`Ssu5Uf_EzGofDKd#o?1Uf_EzKA~RVd#pOCUf_EzNugfgd#pvNUf_EzRH0tr zd#q5YUf_EzU!h*$`<1{~)xh^Ffv>PUD%=OYss_Ga34Db`Q`HN6Rb{Um{t@^JOR1_C z_^QgjCh7&g!UC)61-`1XzlnN*udwW@dV#O1?17_R;43V~s$Sr$YKTWGfv>6|9$~Fc z`cpibyC>hDyDQz#-BVv+?yht{cTc`QcUQWfyQjXu++FE@?w)*q?yht{cTatRxx3Q+ z+&%gJ++FE@?wo=kBR5Fn3qFpSvgDpSvsF&)s9E|F?5@rTe*i^8LBH zsqWeFM?Lig=I+V&=kBU6Fn5ogf7DZ7VD6rLf9|gO0(18`06;zU1?KL__vh}aFEDpc zeU-Vp>I=->lkd;nRbOE4p86_tchwh|yC>hDyQ{vy+&%SG=I*L5Fn3SBKX+Gsfw_C? ztIXY1U*HaYH)WW-qhFZ)_Ktp3g)7CLJNPw~>M8cz(NC>VPqF6?eq*J2iamGq11!{2 z?74$qUa6j9&mH|N3-uIx?%?-Ws;Ag5Mq?l4#68=g{!c}QW_$w_brj(Y1ztWO$Raz4M zN=u3rcmW033l5ka868=g{>I0XSgul{~a8+6o{z^;g1DBSBztWO$Raz4M zN=xbkmzIRT(vomhS`z+BOX>rcmW033l5ka868=g{8e^B1gul{~a8+6o{z^+4W0#hM zztUeQu9lXBztUeQu9lVp{{BL7wX~%8Tlx#d)zT8K|#wr+>vL_K&~NX&-5lh+pVHl&62i z81|39_y@+4r+>u|_K&yIFEWCm79&ZTS?XBnSw?s(cV#2u~LRu9Q{ijrhk0pTj#Ns|w#Fy&tL1eKi&8<^D2=*4fR&@BPA$E!Nr1 zi<&LJ$zeAyYW+~rBwf-iD-8}sEFRjOJUeugTWyD3)Z23(N zkrB22CWqLFnk~P{VK*vj{Y?(LQBkwyH#zJ^MXkTdVK*vj{Y?(ZAZqb*3v$P zlV~mcrX*TtIEmI;+Q)Dbt+o7Sh~Xq!YiS?DNwn7Tn<0jiXszWpLkuU;TFY;SNUtrw zw+UH*T7F)mS}hG`e2LcUsWBK!zWnnb3dxH$(%))rklwyb;j^K;ZKQYG(A`?B&4BYI zyf1wOM<-vx|5Bl90?J;9yo1bWbL?2=%J|szOz+@C{^HrIqhsSPMQdhwG~@ETPP}sL z*wpCo(Aeet(XsKX$KIW~G%`GN>_=~(?aQ6d9qY@F4}X}y+>5O4?~ae%$d6AB=O>O% zemog6{g{ieKsPv3vCQ@~^e( zc)zv!c>e$^4%n?ubn;dwPE*ijw>;5htvS(U?|q{CqwztLx{I}L67R-LAnPfN?E`%n93 zp6>5b4KwcP{+tAMkFHL8SXb6e*>!@=>^f=9?8@=!UBHEV^)6V@KecP%gbDD<6xgeF z4e+Z2_KfZ{(^3L?~mS~i3_8GLwe=uP9&vo)yIkqy#*5%Z?+(~PG z?j&uSV{>x?P>$`+q22D@IRME&EXQW%=sGzx*FNaxJ=yM@+MOf3bAY$i>^0rw_#!#I zNRBU(gYm5<9k>T?A+{0G(^coU-*oI#C zntMWTr`@RcM87qmm#)=&k^tfyb7crQ)cOBMB!8hU%J zwY|N)yro(t&Gb?;eWHXuYNYQ3;onEq^hqUsR7oG3*QeI>u{C|Y=3;$f-o8G2_dbw? z(?$OY(|Z32I%hx8-Va^)3W87nNkd+L55Ix9;C0jAW8T`|!)EsL)%*F%{lJ3N-c{52@y!fP6Tz0YSm&+zYnCx`5bQ+((NBm8VvmhJ4y+AX_INB}FkH|aVh z!6{E0*{&`Lx+tLavRyr1_4sR^iwk>v7uD3&OC@xHG5yW^Ogmi`Ub5YtW_MiJH@iDc zIo&7i3*CCtZoX-E&XjfLxLGrM=D6n-{ADA~7>{Sq;LY4K&&U#I;0sQW%d%z;STX@W zFvra1WSN}xbFw)aBnKbyUpP(u=T4iRb5M=PL#|5#&p_E+&R#gj9#1w$73F&DMSJM6 z*`7{&;~v_f=Y*j%+d}}6+_F7J&e@*R)Ljql(nEk}dyGf2JvmygCufH0K|jqmvxi#j z$>|!xN0KtdFlc?W=F6Iib_I{-DA0G&+t_yKfK zOkmOXcqbu`3t!`Sr=bvk{hJ)`vu-;eroi2k?03fVb80UO?VAhvq%r%l`H8 zUW3T-J~pe5&FN#;{dk`#{CNLy-%j+yJx)*Pm2u(Cexehh#ytZUtYN-EvO$V;r{@ODf|GHpMv;~al2O5nn@ z>loW^ZA6lDJy`!$3ud_-#+z2bxH6Z+=*0xaS`b*HdTbz(>p8`5^jLVtBkYA8{kmI| zbq9K~{(T2}*h=(A{Idu8i5gsZl@0V~y>18k2^L)N1H^UQa-bjGQ2*ELH!#rYX$F7o z5d$`G8W=zi*VP-a4(`B!DQ;kZNXCWTc)~t32D;2U>N;a90+SI|tZj z&vp)+vbdA&w0?6I-8J4l+iAU7h~V7*4(M)q?L!14Qv@u#yFIbp@k8`x)@*2tnyO*`c{o8m-#*Bru?wK;c2wa&=> za)|K$UcH<)0+fy0-GyrPN~gWTO79sdqL+Q}Y;R7_={45J9fGNQEhsq=*#}o_O&`Nd zHruC1_en`^U~P@>Qycn%UHeYb27S^0>6=nkci}jsRB^!2Tv;7Pl?#f1Gr*rHt zWN}4Nj}&s+jTPLjPWJ#uzA?BmFrOaiCdf_?KqJ1^z!_o^B6I4~h#&kSB8acm)60%i z7FWgrJ-s>B!j;{=FMFDUDO|B9?l{UfqAyF5$A!AsSq@?QvKrap%5cz!(UQJM^n1ko9r?37^?$9~WUDkmFnT<#N`o#D_Uk1mY=Q5m%;ETo7gb z?5byR!3XwtT3-wz%rE-4#+9`c7bIj{ng8^6Yv_Y3-u?_;%)WTW=0mdsCp03#m2a18 zmNyG77}#-TolP``ZN?S4-ak3gapA_B{(s;3?vZ0thr`0bcz$wfd^9sSK0bIe)8Udu z=4@SU&{jZutaQmry;d5sQlFJBTdChlc`FTA>57$pXr-%Gdc#WBtaR2&!&ds2R{A$q z`V%XCV5K*$G-9Q4ug5m6iUjmEN<`xRuUXX~Ih9tu$$+ zA6aS2N`Gpl53TfLD}7|8e{H3Yt@LMBx@o2V(MmtH(gQBsKj3ow11_vT_|N>D>*^2g zvdm@m2iyYpfU8aqxc%(`m((9{>l;$u`$f_R{};c{Wu*t)@`jZ6_W6I|=UfGS@Ruxe z1@ysxWtpp=54gn*Devw3f5p$a>iK|M+mQ0!K40eNTa7G z1FktgsPg+=03^A$vJB4MIe*Iy5=e6IKmS|qwLp@4D|5dVlH6OF`?8Sa-pbq~ zf+Y7=rooZq-pVvMlH6OF21k;6E7Raea&KiC97*o2OoJoIy_IQjB)PXT4UQ!DR;Iy` z$-R|na3s06G7XL-_g1FCk>uXWG&qvn zTbTw&l6xzYK#=6#%Ct9<+*_IUMv{9g)82nuv+{!tvpQtoK%?!z1gxmFe&gx&I7V@2x)Vj|9wiKkhq20%j}IUSE)qzu>+j zWKH*drX8W80=?mfo>6z_*#0!!wTbcWMkc`>N z#LpLc9`W*!_CexgyFUpXiIc5NdwfCsd_nwtLHvB7=Mz6)5I@MP?7xpZ%l7>L+sa?4 zJ=~UpG|Tom@$&`o^9AvPEX(#ex08IqfP}2dc7N{BLRMuf(;vTB;qw@PzThsyFBou; zW!dUWzr@!Ut9)LQ-)8{XBtACD2b<)FP$oV$84xxZAVQh=*d!h{iH}fbfZpUj%T3~A zllv(*iHA+LcawP7BtAD8U^j`!P1=8x`yDqKP&XIs{WcjuH@SatlYFsBzSyL_H)-!p z+Iy4s-lV-ZY41(idy{;zNxs-59yiGso8*g4+Iy4s-lV-ZiN{Uaca!|EN&AK}`C^m! z+$3LoLH^vNeZL@IY|_4)wC`r!?7PVh#3t>%DSNN;bAEs8-&uL<-<$rn$RAt8?-uc~ zMgG_#e{3=c-SHywupx<;$e$;*diXbh=(oW zVT*X!A|AGghb`h^i+I=~9<~@iwirLQh=(oW1IJW)e~v3^00Y7n1Hu*q!WVP^9An8Z zunYcB5rRE}hwKr2K?ZwB3nS0FXC&lpHwK|cKcvMU(&7(k@rSBUi$A2rAJXCvY4L}& z_(NJ8S={~ok=5Nl4_Vx;%r{0BcPleO{ylp*$Rh3QBTKvg{7Vi2kfq(q)G)HNTbV-u zWNEiDHIA&`zWf`$AF_U1ne9c^Z!43rkk#G3&-NkvGyM3RGjjZlg=KFq0M1RR412*2-=k#!7-L^7&2*~PgWqSOVMEsWo2(r4{=VSn6 zb+#ofxp z6SBBlnGq3L+^tM}A&a|}84;1i-O9upvZ`B|jPM)k?>A%wWL3A%$q2upevoC|+Xq?I z?Q=2$vZ`B|5dvA&txQHhR&^`WA(2(x%47s&Rkt!30a?|pOh!Ofbt@CE$f|B-;`29* z0J1-_qTA=h!*AF_{0;H<8!`m4rrZ0F5dL0e62jjT55J*5{XOyUh!Fr;w*B`XkuQ*C z+scdx$g*u^@&~ePTbcZUEZbHle;~`YmFcg@vTbGdC?3;ZkLbV1vTdK!f01R|%Jg4k z*|su!7|611W%@I+Y+IQ<4rJN3GW{D_wyjLOAj`Iu8G#m1$pOmA5ke9a-hAOn*mKc`MVt z$SQAT+80^ntt|Tz-;e0;$SQB2)88Kv?~m#4kLd4@>FHm-D50B~p zkLdr8>Hm-DACKw(kLdr8>Hm-DFOTW}kLdr8>Hm-DKac7EkLdr8>Hm-DPmjsxk3P5e zdrUrmME`nBK1Wu0|Nf5|j~?s&>F>x=XrI&HkyYKw^!LYlANu=awV(cutm;;u{*J8b zR;IrrtGbox@5ridW#a8I;~}!Fdwf17A3P?W9y2~ZCVr4r-M&w}Agj8Si4SB|w=(g7 ztm;;#{h!ePpU~dOs_s93Lj69We?6f-pU|J4P=8P8KTpUPPv|dC$PZ8GA5X{!$f|Dl zr~f0Xx|Qkg$f|B-`ZuzwTbcfhtm;;#|30Dpp3r_zXul`4-xJ#J3GMfU_IpD6J)!-c z(0)&7zbCZc6WZ?y?e~QCdqVp?q5YoFeott>C$!%a+V2VN_k{L)Li;_T{hrW%PiVg< zwBHlj?+NYqg!X$v`)$*H+qB0v`ForGx=p^`rhjgepSS6c+vMYI`rkJBcbopUO}^cx ze{GXrx9LyYwEs5kzfJpZ)BfAE|2FNvP5W=t{@b+wHtoMn`)||!+qC~S?Y~X?Z`1zU zwEs5kzfJpZ)BfAE|2FN9tm+;=+qC~S?Y~X?BdfZ7PWx}u{@b+wHtoMn`)||!+qC~S z?Y~X?Z`1zUv_G<{+x=;OWL38^?T@VLR;K-tRo%+8KeDP@nf6Ckbzer7bbs%~ZS zGqS2%nS6|_>Q*NIBCEQU$+yU=Ze{vEvZ`B|{*SEcRwmw%Ro%+8KeDP@nf6Ckbt}{U z$f|B-+8Q<)xkyYKwv_G<{TbcGpR&^`W{>Z9sW!fKE z)vZkXBdfZVX@6u@w=(UItm;;#{r`a@dSqEQ{nP%)vTkM0*dWWgm5B#rS+_E0aFAu) z%ESksDre5Lwo(O#C3rx|KO#M3!|c6HmypZe{itk!9V=#22!x zTbcbuWLfuRWL5X?k1Xp}Cf^{-x|NAPWLdW|`3G6ntxP;3%es}xN64~nW#SWA)~!r_ zLY8$a6R*g!Ze{WnvaDN~_(hg=E0e#FW!=ieGqS8(nS6#U>sBVdk!9V=>@OnAx|NA{ zWLdW|`-{l3Ze`*hS=O!0{vxuhTbcfVEbCTge-T;MtxW$wmUUltN6veN$2f$Z5_ZvI z970bCK_BA~dP>+$i*X1&C3J)shtN~Pu3C&k=qaId#5jbW5_Z>O970bC9VW&h^pvp6 z7UK|lO6Wu}4xy)n-L@Eq&{IOkig5@%CG5JzIE0=OI$MlG=qX|MEyf}Al#qa9970bC zT{6ZY^pwyk-68ap&@JQpA^OTUc+>!H?kh$EE^OTUg+>!H?kgeR2^OTTZ++nv~;*P(y_TaEv zO2{GZuv<#VBJQwTO2{Mbuv<#VB<`?VO2{Sduv<#VCho9XO2{Yfuv<#VDDJRZO2{eh zuv<#VD((6 zyW?*uA)XT)e@hARoZ$FdN{HtK$KO&yJSRB*mJ;GQ!ST105YO)TTS|!M1jpY}LOdrp z{+1HrIl=L_ln~Dej=!aZcusKqEhWUWJN}ju;yJwNUx0Dd!368&|gaIkR@wb#PBqhu8cN}(0o66sD z*exaU_gMy}1jpa)Q{4FI6R>?AZEAFsczLywamK{8I{4Kx5DUJlk-%`R(pF94R z5>9g@IR2Irb_Ct=x0G05&z)$TS~+~IR2Ir z@ehu_r9}LL<8LVu|KRvrO2j`n{+1H)501a3MEtWX{=s3l)S>tXhuu;l{=s3ll!$+D z*exaE9~^c|iTDSH-BKd{!C|+Qh<|3uKhbPx5BVpW4ecTSM6;niR ztHf$FEnmigaeOcNa+O$(rsc~xERJ>L%Qz~I68SO?ilaonjAP;`kuT$rI7;NpI3kV` z`7#cOqeQ-p!|~zEfqa zjHcx~RmQ<+I`{?SU^Fd1tuhWq)AG|A<6u-%ub{@L7uD1Us4>PxHAVayBU)5be6KNn zMKwk98lzQIQ|zuWHbpf>>KY?aR8w58$(L*L+?qVMCO@soPiykZn!K_mAFRm-Yx207 zJgz4Hs>#1<@}`=+sV3j4$#-hs_>(;<)T&LN2ka|tHO`Yi;Gr;ADs*rtqMOn11?$>estPfv?~1Q zT(@Xd_|XY&(W>yHv)ZCn;YX*kMXSP(&R>gGg&&=?7Oe_DI#VrL6@GMjTBO7KBAnP~ zky^*}ML3&}65$7@@KGZC;JiIbgdd!&M~U!*GxR7CesEeICBhHR#iK;{!3lVj2tPRM zjuPPqr`k~>{NVgLN`xPrR7Z*MgEQ$U5q@y`93{dJ&Y3ewUHGYsf9k?dUHnrQe(K_% zy6{sM|I~$_y7;Fq{M5xib>XKj{;3N;b@5MK_^FG3>cUT5{8JZx>f)a|?T$mp_*$Zk zy3Ae|ZPaD~)#FF0oR*?W^c&s4Vk?mvo~b+hRoiO*&8x@LuPNt z>^s;Q0;g-jm2v%2%hzq zHPxk6N{^^1Bq*gv)Kr&NDLtY!VPj3$P|A}Cxmb*!mGUG)E*46J4dh~>MA$$s7D|K- zp`7T$2UYIGqr!i8t0{(>2+2O*UPVP1j`8H4V|$WYaa-bWJv0 z(-3Vp`dU6W12VT0?^VK{1VT{>Ksf2~W0>(b%6bhs`Zu1kmO(&4&v zxGw)%mw&Cxzt-hn>+-L4`PaHMzb?(M%fHs;U+c2Px@@s7|5}%St;;&=vd+5LcwIyM zb=hlO_F9*{)@84C*=t?)3I_?U%U$2B+u$O#r zT|T%jA6yq>ugeG5LLK?wTBsu*ToTY{(WHvc-mMu@QVn!{rUxVoh;pL$=tE<~O9( zH4Vf!q}4UWuZ^HpO;BwFttx(PNUIyvSo{k{>ff;2690k?{J@AM{so(--^9hgV7!fI zIH?`au#XVW(4O%Or*+~P+B2SEuOXhH_2L;$>%=o^%MAMw@eHjO&v05No}u;P8MZf` zp&jBGPV2-ov_m{YJH#{8Ry;#H#52@ZJj2(FXK06bhA$e=&<^no?GVpUqwx%VBA%f} z;~DxyJj1Dtc!oX^&#;dW|2Ze?<3A_&#GkT163-KH@uymNn? z^EA$cmKo-7h04-6$_k@!u{nl{*=)yo@f6to@Y-v zp65hiJkN!Sc%D7Vc%FUdc%Bo5@x0!Bo_)-Cp1tXKo)d-fJQphBdG{gmYeW$C9ZFDOetWqCna`YFo`%F<6+UQm{P%JPD;^i!4>l%=1t zyr3-ol;s6w>8C6&C`&(Oc|lqFDa#AW(ob1lP?mnm@`AGTQRz~esNhWS`jCd#iA8)LRl&mYELssKl*OVIaY9)v zS`jCd#iA8)LRl&mYELssKRDw3-?-joLLk<_?3ST|? zm0(!mt3M2a@K*BMN_YoO=f{=MVou)26}Io8)Lvop9?Fj^PP##hhr&Q%3RWXQCIK@@*g_1SJRk4H8GR0MKff6vqRe8Qr zEyY#&xsocyRe812C&gOeim|R`tf%FySSgWWEndY+eiUn|Dps1KSPN6J5*o!?hKiNC zDAuA=tRzLTmY8CtBZ{@46k{EU?U9FI)rb=L1J;Nr5&E$rM2WDD^&d)vY^4HyDPG}HUc4eJuh7a#ftpVW)O=E)=92<7pA@M1q(IFl1!_JiQ1eNF znokPUd{Ut1lL9rL6sY;6K+PuwYCb7Y^GSi4PYTq0QlRFO0yUo$sQIKo%_jwFJ}FT1 zNr9SA3e)8s7G#|TS!Y4kS&(%WWSs?B zXF=9kkaZShodsEELDpH2brxiu1zBf7)>)8s7G#|TS!Y4kS&(%WWSs?BXF=9kkaZTN z=SAsxQF>mKo)@L(Md^7_dR~;C7p3P#>3LClUX-2}mu*~;EdI55Q?f`;NfzZPi{!&( zk$jjek`I$b@?o+_K1>$Lhsh%OFj*uYCX3|5WRZNBERqkCMe<=%l--N6dr@{T%I-zk zy(qgEW%r`&UXFUsyk*}W*c7iIUN>|T`Ji?VxBb}!2AMcKV5yBB5mqU>Ij z-HWn&QFbrN?nQZJQC?Y;R~F@!MR{dWURe}cib6|KXekOUMWLlAv=oJwqR>(lT8ctT zQD`X&Ek&WFD6|wg;!TPipCm<&Z<8WNBT12?+2~ioMp1Sz%I+oEy(GJrWcQNnUXtBQ zvU^E(FUjsDj*gNN`}#?VW1)vqMoA_u$)qKjv?P<3WWbUPSdsxtGGIvtEXjZ+8L%V+ zmSn(^3|Nu@OEO?d1}w>dB^j_3+AIT>WWbUPSdsxtG~h#yl9LkS;zM@plM)U3Fg#lQ zXa>%tL<2u$-#aOljUWDw-TtJ+{VsnOG)}(wyYSB3?UH;Rv?&59i9kvskdg?bBmyZ3 zBqb3@Nd!_7fs{lbB>|}wm{FZ1Nd#6#X}j{*uo)T2DUX z*faTzWAo%Qjx>|cI9^CT<9Na4ZTGV@E|a_Oo4CB~l<-+DZ#yMypv&7%3CGJWZ#yMK zy35;63CGJWZ#yNlgv;Ab3ES-Qwo^hDe5%zRm&u(iBuZQ+cS;Bom&u(H;>2Zgr-VRp zncOMih|6Vir-ayXncOKMc%Etv#N};g3pp-xdD|%=d|cjkN@zfrx1AC)uFKm_3CGJW zZ#yM)VVAd^5{{RjYW2xwa%T$(I+w}aOOUFX)PyUJQE|nIBV5t_a7EvA7~EaYY8k6+<1aIIo2(f)!Vl@E#0+ka2DcSENf^ zt%Q0Ei;!`C3s)pjT+xMb#bAjm;vZL>RKgV<8&~98TydTYSDaYF72O?IWMNz}mf(t$ zOSmEl;ELfESBx;Y;sg_}NDa6mhvSNKUbx~U6Rt=YxFWM7Jvm49ka403GI}y(J7f%^s7H5)jDZU>Iy__yGmz2cA!BfYj7|?311@BAd&oFf4H>&FkTDiQM%Rbz zu6*HBc4i=Ba7H~wA;>sq4H>&QkTGOK#@GZIBQj*1KZ1;b99Mx~GP8<uu%Y5LM`M@to>lfBo(3thgFP^1!?s|~PxS&HX!;NL3w(f?K-CL;ph-d03w(h2 zLDdUpb13O3w(gNMAZv?plL^pvgwm3w(fiN7V~_ zpeabyW886+;CszXp7ROnm{D%3U(`1zak3$ z3%FG7k}3AMRPK@~_PA8;k}3AMRPK@~_PA8;k}3AMRPK@~_PA8;k}3AMRPK@~_PA8; zk}3AMRPK@~_PA8;k}3AMRPK@~_PA8;k}3AMRPK@~_PA8;k}3AMRPH8oY1<8dE|t4v z!kQn^be{JB)_k_mqQn^be z{JB)_k_mqV~au1t-LWQN9W+#DaidTlZ@IC?pQ9K-q1373WV z%Gmhz!O7vV(U&qeM)Jr}ocVA#|B?URn`e9b-#*vx9_?E>d2Mhq^U>f$=JN2w?d!pm;^-C9r#zsFx!sCm0(Xq?;!r>!FGCxBagiJ=Y zGketP@c9ycZqNAnsC)H8R(L7%8lQY-{XlGz~Yxi@oy7Ud>`7GOxXsIehq~Oouh)NM>hS4()jIk?&I=gR?z5ws>jJA3!KD({EsUakMF*CVf@1Ai}+}GbTV^jc=U1}e}9naguS1k zl-+G@SISG7Lu@3jcD1S%1#AyQXa-PW?RZWAj80ugo^W{ds_hs9e3UPUH7W__1+a)xHL8f2Dz617_aYL z{<(3nqop0se1DkUJqxzS!=9xKapMpOdv7JQ*4X{>2KMVAyDt#Qhk~>P?E3KKz*y@ zkglGEk`ctxpvH-PTDPN4hoaoRfoOn0I zr;nc1)}d?pp$~$-_Ey)E|>F@`JvSK zd%sLurBv%i@OyTR)PRZf6^$a@cZOW#+{uzZKe(UN-h|yO5?*;CWk`G0v+T)xkBuMD zGxA#UHTJTlUN&`9>s=mby4J^bgw{W+vFQI#j(wIk_S)dhiAjvPTHJOtpT9iff~0HZp|LAhti##aQbjFEL4vx^fIXj_zE}F_ zRHkP$j@rY&0tetBlVc-eAMH0TNIy?i02zi_2fm$EIml#uY6}JHw$JSjzHL)CZXDQl z|M~B{?RMAH3}3zNQyAh7Phxm{(e?fZhtQ$f$6NNO$p`=3fr!J`J!++3v*!8g2h!5S z9(UM~KVH58^@UHPmITJYKD&`KJBU0Kc?vFU%o;}b;$Kg{C*#p0t z0}UTU9`3{RRZ|xZWG4^)-Lr>(bc)gR*{Mtq{|5Bo=6Uu(E_ebTKHuA02jNm4b4~e+ z)-0IacMP6`X`W4`z9s34AE*r17L2iWH0G;8VtnY@{z`El{_{|ZZ^<7{DZ>Y9#eMqE zL@mB4e?Yw)L?Gk;gbZTOeojSzz2P)prw4Li@5_Doe6aB0<9FHp@{j(#zx_e{`Ok(v zT|=Hz6W@?MujVH&x+RCbV~Rda5ixo5h8s#B9vm4ttQi2!)Vu!C!DGvCzx3tY4WHG$ zxi&d@-AF&)}fltx0XPV-<4e%Ab}A?b+d>X21Pago&)ZNdX_EY6ws}(1V`w zV(yOVtLT=`?JE2B7JWz2M|-!nd1DNh2QrsE`5BFMH>D@E-1WH|J25mqb!l(K`j5Vn zYN_;}wGh{9ul>L+W#d(Mu6(%JbxzRjwWNH2`oG$U=HkSSk>UM#d2-x7-s2^`nZhtW zd!U_cX>mUugHrgE-7iJM?KgVg-y7UbZw&6^5&V#kOZN!0ywgi!-$S^Io0@gI7SJ2X zVEx`#b7Jz}x%2N`d^gv3@x8M@eB=Cqir{??(gf~{nHkQ+rPCH^D_~wdd$*;%Lh>JD zgUE#2Q86-xodK8KjtaYDierP;_prmjba**`1xw2+}*?P?;xW)Oi=ilt#zZLfJOPS;T7TK(; z432z+dG(jwybr=D_96=Lfd^p%XUBEl~;UC7-V^B=gc+<1L*=-NkP;~%Kzu@|gOY{8pj zLxYoJ3AF+ebI-g)X1Ra0g%W z-}B0FyQjXBc^zv*gV!@d7*@HC)cZead5Ev;c5k_=H>NIOr&zk*>Z03}1sa(enzZGz zmM|m3?;diS!d`wgv>wda{wg3ISF@#MKYM+6^cwcEOkN%v`h-p4pUmqFg>DQ= z+1{;L1ZTsJX4&WQ&{aPjNT#UUFf0;-WaLBh=oj zy8FsrFYvy9m_ya!*AAy}aMj(vPcnJG$8$&H?IU+To1E&v*1gOH0Br;tE)YovxRte~ zMK8Y!t-qI_oEjf>jErvmPJN`e^lY?4$7vJofv-8O;U+J?3J8sTH1RgJnRFbu(vqa z0zInosZd32j&CJ*+%A;eWFZ*5Qt^?Rw|EO)qAF-}j=3h*p$@r#7N-go>3IC&2TC}#O z##9fO2-Z7irm+ z@C#>05xa*k=fdB_c;Wz0Yca(q&*Rbu#NyPq*$r^x+R1Bh^aDl&ZJtiT zNnbdqSr0~dW-kC>a2vib3_%FmVSN1h0S|t~o5W+)^+ST&WL|#N4f?Hdpo*Z$_b{K0 z-S>NH@PJp?ONF1j@W-)h+t~F&ZW5Cq?sp~#m|-wCp8vN~!{e}F>e(8vok#r44C+gW zfR~3ct^)V_pRNpM5LvOKX!2&}+SmvjVGzjJeJ{{J9yAKS#8)q;-vMH-=P?|_81~xO z)X3$`rM&xTj2jWT!J})?l%FDUKjE?9J2~usTI239gm9wY_uwmTAnpcl-bdAZjUIC& z`H!)NfU)yiAf+jcAv52Y0BGz-f1C$JC$XKg1M9&lrCE_5Bar^(9>HoV|EnK(#?8v{?fRPGGbQ>p9_I zbkALF=!SVubAR!cPMeODo%8S&tZVQc*XP*t-`OkNWbMBDVlVnI6RsbN-(Pt*b=NQQ z9(#|4TBkFtBA&xJkFeh8+Gl&zd=(8Z+z+$(j4Pvkp4Np#hD2Kt4BbaIj+X}QlzJ}j8x}lw;NQa0Q{kJ=gyeJBGT{+zffg1fK zaWV`znYn~rynKT5k)00#><}iVCZ_x#{CXZg76bcX{=q$M5Wl-bAKNd)WG+ozLC*m% z0j~i#KN=i&Gj8sVu2HUm{voO!0ume;uzCQSYGr>*#kTg8n^nle~cfW~AyfrlGZWm^84I{9q zHycKDAXcX?>@AuY#`NY<%m5--rk}p&ka$)T-kNT0o9ZOs+{(ru-Mr1sFPw*c83EsY zXo1F1G<;LJ`26DB*K_{_=hU4xW#D*Q-_|+*R9GAeS@k1JBhKau2@A!TQk**TfzMhKK#DJY5VXrPCubXfbRbJ z@hQwY^9^5q)h!SB*0)YEKl2Ojh4%fzfcq_Y`y;H4`VOZz+E-MZL4Js7-~VqIWPcr> zgZFoM`?`4^n?mu^p3hLVzV}lmA^hV{8P+hdKmmH1;a2p zaGj}(sC|&q>|YD)&J{bpeP~!c!W8G3%y++gXt)KA`iL}O-Vxg8K5g-o-=C7lcPrU> zu^{T&vBM9%agMtQFV1ouV21N<8EWF4(H~*l>bDVi2E#fB*=m;}1`zgHtWH;k-J9wko6vUGw`}&e1eZc2;BhYU~HEiZkzGv7adp*Z3e~K4s6=%%(Xfabk3Zqvaa2Bw1_VylhYu;S*t_L=X|P*_u`&o%9Zp#;X(yI#fj ztkZEr=5=iR-K&SL%`#!2aA-)w9QFZPro#5x;j&|P%1wl{?zwS&lb|`aao;8TLlYK4 z+-j%kR9mcY8*GMjOG_7RU1%adaz!MWdCjdHzm&Onao|U9_ntrd&f6C+x;16{!Yi-r z(*`UPYwM9Cg+pQH{hb>aU!w{B_ZcnyAQ$s5V8nRwPy63H=bm!5FZ1dTGToi{*WQi7 ze1&ZiXkTFW6MY@6%|GHp)?0qo52|tSz^a#N%eOP%a=RO>y1!3f9tv`E zLG~crd=#DAz3$}h=1e_2I)%}$E4BV(9BdU?pC_ovMTM3J2N#^^*ky59>iy22xV_Q`a#a z{>~LGHN5LKqdA&@>GspIZSnCtE#4fvIy@BOeMh?5=a+2!0NJnpVusLk>(=yMdF5Z= z?l0m9H8*SM7SA<*g=%g^*u3r~e;pp^?_% z#sMl2m7TrpUcN;Y&#|v1t?fP9tposvue6-Hmey#YC$+}8Y0DFLZnfD@-#gli-7`m1 z!E@&hU689vtz0wL`yD`SV( z4Nvq;4UZtY?jIMv@&lf?_n|ky{)4Mmagrd0`{Q}+CBO#1j>9}_^B8^XW!DP7PK=;% z`1sLN?$3`V+`5F1M8=vg`Y_@+b;^I_7JB^0X?MUcYTZ=W!it8Tn!oJHcF#3p_6&AV z?EbOo`NB`iMJ?#uhiM$u?ZDA9u;TU|rtG_upIbg?Yv`VQWVgX@ci8FOG5^rg=YCz= zJd6sz!#`n1d9S+bVYKAes99}C?>tOLV+kpIts`888{pta-E`M9@Eg~?Wn+MrBC+TXnFMDZB zozuXROXe*jXv|5D;mkb0ii#~p7-(F_M`^(TU+3?K?+?wVZm;+u$c@7|QQfMmolpXTIk< zo$gIBn41_Ia{H)0#JC?DpfKMWUYHs{ugG56DWz3Wt?F=}X>(<(VjR;4M(DQ%@`+d4 zm;zH2?;jo+bD_YF8F%)@NW}dIS#bNqKLLBY{RHl5TlySYZ%b6GLhA-Mo zNm$RG@Zj0w=2DJtjF#U(zpc*U-o@C_Ka^A0&>((ofC+a8sLNi9J8tgge*J0c zuk{R$U+5Y9>9d}ZzS@g!dem=ra03Q@y_HV&Ads>jSlFf@{IugdR2B@TMtg|AlnEA= z+-VS76uj~FCTNT_-=#O4V|)ldbok?{{!RaDz;@>1G+&^kFv4|PM~sWyo}IAv;r6wB zI6Ual&Uve!y^c*gANVEmU9(o7uxleaau(lnYDrxngNV_<-mb66?g(#U3co2)?_&Z> z&)>n15?znY@AC-|a;~`pMz)c~GnlWM&O92y`pu(wJsi;PckF?beC6@6tG+|%CotV6 zy%%4@{(DSR>ZvbbBZ@oT-ID?SH;$2IpU7`bU}giGq=L&sU9MHuztH2( zPP&umZ6(anf;;d1oHefn2|>et>nnDUXWl*c-pkqS%a;b-&Y@k+Y*DP!l;5P}Wqzy9 zWvt!$wqdKT+XBW7Sni!+IRU|KUP5~jSle%pjpHMjUYWXj%{RyYHgRm+J;)U2Zi1IW z=Y8xtHoGG>>TNYe{LEn3x_4-oI?gKa9UR2IGI|4u+z&lk&6 zK&=&GzrzUU_R<;1Lqv0pQyak1DFockvnzT07`7!E!bwoRK80O7Aqegl17SSR`R-?| zipUcOhUE8uvLkp|P~O#K{Bq`b+Uz#rVZzg`K_G_i(+Nm9XlHBpsgC9WpopOOrSaqt z#)km=jG!r@7ku!J^L;p6v;!`caf%A9a&ZO?Zz;ghT-O(VbcAOFbu)i zow6=+2O8Yz@PWUn1WUoLP3A5*C&A|_fe@X>%h-iGHfo=|`h%{cCy#dOQ~un@K0EI^ zX_l5G^Wu$(@nfOG`64*h|Cqu$zt{`vj-SZ9$h)CWIG(xcf1W&!$qcX1!|vz!T!8xnTj(-z9WM!^rYXR=6X|i-y z>>!h`A1D9N`au6+T#nzn zUcSlGynasoljvvEWojD121ksq_ov!#;!puOUPE8|d0t1S|Ij+p`9{BY<$TQtd98H) zp|yf2-*w{mu9C0w6t9o&e*%4Ucm5&t@s*$A^>OB#=;JH(SJ(r6z9{|8dM@AmQC>IM zZ`7gvYRd6vuN?%FZ>W*4cYmni$oKebBtLTSM}NJ6{WMcod&WLKkv-LU!Ebo`;Tt&d z!*|Br@B4dQUYq*7nV({`&H#GR3 zKhW)hov`Z;fVnU{deILhYzNo5+`DJ_qy3J}OJK>?nWV); zEnA;j8vIR6?WSaMZr16no3Ox4qiq1~btmw;`3o!R!`xL2%`lruu`R!xMH9vg z{jCNsU+!oDk6TX<`r2o;xuwR09i!DE(Q>X+?;g);c~l4T83MUyCkCcQTsBYl!_q_U zH%uJGqvXc)=W#&BJ`HhgcPjsyH{D@~_O`;>Ew_bFdBFV4|KGhEExw1k57Gec`tG$G zXGe$M9h|(j-#ss&*2SSKS8*!ZIQS43E@diq+`41B54wBa9is-vd!B~#7&ROPy`PBg^}bT3n7eb}X)E7}2R4-Zs=Dnq8leIh04#T!NkK2yYei~d*Zu>qHHZ^?i8|n`?Yk%dJU%iNf zk6onS0i|}IRm`=$GvU4my^Q022UOa>*Lp$wIWSw?-n?f#;CxDb&$#g}Gwp2wH2Mt^ z=reBEZqIM#Z2mU^ne+a)8iONkKE}!DLq4y7X+-{|kFMoiZt1;0o0y!u$xqsx32*yj zm&st)tJ62yd@jZdNcQPi*EiP^#B++jqcWr zX}VQ4Z=QX-|3JmqSDr^Rthv{F?C^iS&E7Zuy1L<;K{==PQcnAl2!4lo4#>*sS3$c} z6#U3cCGG3S5vA~uKN{MN(A{-=%$7cPJI$jA1l1J=B7p<{>a z!i6J8UORLQuWbGpd_4E|xwF0RybX0i3I2Y0oCDkDc}~4Fm3Me}0#AtNH{Q?kIAm8- z|M(3;><3tJ#okApjprJjpLqWy#&|ec6Z4)(bCe3*PX>0%j zP`%~OfjsgRw3^-xzdcH!yq{vJuaXVF&Sij}1QRUM3XyGXLyeB6M({2gdF0+lGTf zE~i$ozB?Ie0CQ&8{phxXA@c)VKI3^cbzcX8(9yB)<0pUL+Nsf(`R}_IE{wl+;lk+A z@4jXj*{AF%-QVi~h|uHQv(wh3l)#T|qH!1ZA_MeJI?lRZjynt;Oasv04u@#d-;UtA zOMTA4GA|F}7)8vH-M}t0?;Yxh9{k|;n_-W=pT%sSneYK*cjp4zVTUd{GTFC>v7a6f zUCz4$0dHX9&u#hxI83E}Lxf!(zA=owAdZ*ZM6KT;u=|6SF32I*8g~vCdIq6km}amy zg2{J25(4)C%t^R5>i>L#<5HZkg#-}e<7lDZ{K2W>6cwfv9P*8tI1lc9sm&pJli%A>>?VE{SL(98fxH2??t@qFK+3_9U^NP`TOg8#3;r&yV%g0;;If%KmF@B*Kww-<7T}TE zJOT-jEhI`}Fg1KX`wIGbx__KY=&R^UIaku}8;-#O>o+PjRjRt^!7k&zLR zk&&Cgb>^WGGkw3hR$Hkoqrknp#RasfDoQ-OUs~b=Pw=Bh7Mr>IsJPsGb#`kJ1@1mD zuvn)7_@A2+i10l#$4=cFY%c6}`z=UZtGasB6m;#&Re(6|_KdQfywbosdu>W?bcHf< zl}QN;nfican{lakjmG+3srej zC?E?uwKc^b=m-YVKuT?m+hjLEeWYd@{}KxsA|W2x3*G#sB>UfF^fa9O22l6<37jKA5^CIg6n zX(z6Aq-5%Gb(~hj-^r*FmkC8Coe7Drpa2RF3BR!^!ALzRN`+|rjlwc9(dkY&E=Qy+ z$UH%{EFH_?y0q9kdlQFiT3>fseH;e9Pz&?M%kA*t`1Z!;{My#0TA#tTJm!=*NH<

vdw*!nnOb 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 delta 32502 zcmdVD2Y40L_BeXy2p8T~?G?yGixO;{rle0s$ zHa||=>@8~T?IFrRFQY0+=NEkRxpq1x1~Y?|XGJ4}q_u^6>a@LaBtwKWneh&eh%s_W znwWic%rng2=)YWTr*8-r^Vi1v$jZ$o_()oM^xB`bqNo^cjZc*FXrNJ@q_O`V8LbtD z#%QI7g4nkenxQeiW0jG{vy-HwMV~x6w2ni;$`}(iB;{_M`MWkhIY#R^#6n^sfl$olnvwZrj7W~slRJnwB}l2n@X<819NiNM_sza}w($^e^@ zOVaXruYIHK_P>fQCKoVCIbk(2NxErL$4_Qe4i5P+g0^?JpYjv}o8SgX1D{JO*X)Dn zq8cT>3J9Ti^*H8!QuE_KH1B{EZE&DUJGd@z3QeC4G_Xer8b=F1frTfRj9aU{6deQY z=}drft-sL;NdrFIJQ^W3See5cA4$6CRHjOhf)r=9?>_JkJ}VfxB%PXi$9Ha|7)Fue zrSJ%7pTzOniZE;N5Kp5hNw>V%ajm#_-Fy) zamscRxky^}`q+Ge^jckbxKb2pv`x~R()@Vs{_yd1(%*#-g1v!^9ab!6c};!Es*E-l zf~1dd?Pm~HFPk`7zaxq)K;_~;-d zK{7H(x?`YvhSnM%ZPT_y`%=6(kGo&n`QS3di`?MjIYw!cCU0)r?VdoAwlgwHTOK1R zA>)h^Bn?>>U4UD5h_cxPGD(kbdwo4_$QZ3Kj)N5*j9r;%q7+H@>@B;EAUa#nn#J`ir4I#@-JB#9AUIc(y-!R@9o`Y&~Rr>4MFi&Or#*`u;)ICBO6d#@mheA zFv_S+(wFn~+V0vBiL&yD2^x|v-s9)cqQp?Gp}(S4CHgAs%uJH*_xbHS!YxVL__D8Z z(%hdUm8YKlnbtzktWOG}`y(`ItkPx9h@@|?9%DfW4S>=pMrM5t0BHYADpKAUVhoO? z3&VV#qX@O)H30^MBL%+2BpoDmewB9QLM4SHvZajsEo~XTj(5@T|GCC&dyDL*xQZRS*_tKR_u_GTF0gE9>+Wk%*O<)it=Y)R_sIQ~3B5s@{^ zN2^6Xr#Q^WB}oKDlKfyGK`v{8YiZAEn~Qo&GdMRu@u zdY~UIWE*5~fYS#}r*lzp$sdu{|A2dw6!d{Dxr`6{C4R*-RI_Fq1D=^Zg_d56c>mGz z;fL`gFq-Yk4yMgYImU@OC#QedJ&42P048a{{^d*DOOFT6-_~_Svfmm9wDxY!VA|-* zxKh)~-zd;lcOrz%B*0RU0g}#tU`GQ@yzWA!J>#aAwk>IHm zCO|uSBnb~f`>v29krwU1hl{i?jykjnpZaKTeIo8E{baONvv0)yzH;$&j5~f9OUAdW z^v4!%SMl$+^^8fgJ`xNKc}yTQSQxvOqVmtqV~#R7N(ByjF!AIh%*XNC$y)+cTbU=x z$elV4HpiwNf6fABNZR1Hxcg78BN8 zr2j{O(4L81cb9<=GMNlB-$&c?QNTq_9Q#KMlyXdjrv9_vMOjV%jB;m*`X(PH+Cl)R zf921N5gvV9Wh5N|S44m%!YYZ0q`V+Ir^a@Ajpq$FA+^j*Bj+}wH6*(1^ARGytvQQ;_0 `S11;A&?^R&@luH`Pb_}Yj%B)Jy9hh5Q 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 $baseDir . '/lib/Updater.php', 'NC\\Updater\\Version' => $baseDir . '/lib/Version.php', 'Nextcloud\\CodingStandard\\Config' => $vendorDir . '/nextcloud/coding-standard/src/Config.php', + 'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php', 'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php', 'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php', 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', 'Symfony\\Component\\Console\\Application' => $vendorDir . '/symfony/console/Application.php', + 'Symfony\\Component\\Console\\Attribute\\AsCommand' => $vendorDir . '/symfony/console/Attribute/AsCommand.php', + 'Symfony\\Component\\Console\\CI\\GithubActionReporter' => $vendorDir . '/symfony/console/CI/GithubActionReporter.php', + 'Symfony\\Component\\Console\\Color' => $vendorDir . '/symfony/console/Color.php', 'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => $vendorDir . '/symfony/console/CommandLoader/CommandLoaderInterface.php', 'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/ContainerCommandLoader.php', 'Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/FactoryCommandLoader.php', 'Symfony\\Component\\Console\\Command\\Command' => $vendorDir . '/symfony/console/Command/Command.php', + 'Symfony\\Component\\Console\\Command\\CompleteCommand' => $vendorDir . '/symfony/console/Command/CompleteCommand.php', + 'Symfony\\Component\\Console\\Command\\DumpCompletionCommand' => $vendorDir . '/symfony/console/Command/DumpCompletionCommand.php', 'Symfony\\Component\\Console\\Command\\HelpCommand' => $vendorDir . '/symfony/console/Command/HelpCommand.php', + 'Symfony\\Component\\Console\\Command\\LazyCommand' => $vendorDir . '/symfony/console/Command/LazyCommand.php', 'Symfony\\Component\\Console\\Command\\ListCommand' => $vendorDir . '/symfony/console/Command/ListCommand.php', 'Symfony\\Component\\Console\\Command\\LockableTrait' => $vendorDir . '/symfony/console/Command/LockableTrait.php', + 'Symfony\\Component\\Console\\Command\\SignalableCommandInterface' => $vendorDir . '/symfony/console/Command/SignalableCommandInterface.php', + 'Symfony\\Component\\Console\\Completion\\CompletionInput' => $vendorDir . '/symfony/console/Completion/CompletionInput.php', + 'Symfony\\Component\\Console\\Completion\\CompletionSuggestions' => $vendorDir . '/symfony/console/Completion/CompletionSuggestions.php', + 'Symfony\\Component\\Console\\Completion\\Output\\BashCompletionOutput' => $vendorDir . '/symfony/console/Completion/Output/BashCompletionOutput.php', + 'Symfony\\Component\\Console\\Completion\\Output\\CompletionOutputInterface' => $vendorDir . '/symfony/console/Completion/Output/CompletionOutputInterface.php', + 'Symfony\\Component\\Console\\Completion\\Suggestion' => $vendorDir . '/symfony/console/Completion/Suggestion.php', 'Symfony\\Component\\Console\\ConsoleEvents' => $vendorDir . '/symfony/console/ConsoleEvents.php', + 'Symfony\\Component\\Console\\Cursor' => $vendorDir . '/symfony/console/Cursor.php', 'Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => $vendorDir . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => $vendorDir . '/symfony/console/Descriptor/ApplicationDescription.php', 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => $vendorDir . '/symfony/console/Descriptor/Descriptor.php', @@ -56,6 +70,7 @@ 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => $vendorDir . '/symfony/console/Event/ConsoleCommandEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleErrorEvent' => $vendorDir . '/symfony/console/Event/ConsoleErrorEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => $vendorDir . '/symfony/console/Event/ConsoleEvent.php', + 'Symfony\\Component\\Console\\Event\\ConsoleSignalEvent' => $vendorDir . '/symfony/console/Event/ConsoleSignalEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => $vendorDir . '/symfony/console/Event/ConsoleTerminateEvent.php', 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => $vendorDir . '/symfony/console/Exception/CommandNotFoundException.php', 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/console/Exception/ExceptionInterface.php', @@ -65,6 +80,8 @@ 'Symfony\\Component\\Console\\Exception\\MissingInputException' => $vendorDir . '/symfony/console/Exception/MissingInputException.php', 'Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException' => $vendorDir . '/symfony/console/Exception/NamespaceNotFoundException.php', 'Symfony\\Component\\Console\\Exception\\RuntimeException' => $vendorDir . '/symfony/console/Exception/RuntimeException.php', + 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatter' => $vendorDir . '/symfony/console/Formatter/NullOutputFormatter.php', + 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/NullOutputFormatterStyle.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => $vendorDir . '/symfony/console/Formatter/OutputFormatter.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterInterface.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyle.php', @@ -86,6 +103,7 @@ 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => $vendorDir . '/symfony/console/Helper/SymfonyQuestionHelper.php', 'Symfony\\Component\\Console\\Helper\\Table' => $vendorDir . '/symfony/console/Helper/Table.php', 'Symfony\\Component\\Console\\Helper\\TableCell' => $vendorDir . '/symfony/console/Helper/TableCell.php', + 'Symfony\\Component\\Console\\Helper\\TableCellStyle' => $vendorDir . '/symfony/console/Helper/TableCellStyle.php', 'Symfony\\Component\\Console\\Helper\\TableRows' => $vendorDir . '/symfony/console/Helper/TableRows.php', 'Symfony\\Component\\Console\\Helper\\TableSeparator' => $vendorDir . '/symfony/console/Helper/TableSeparator.php', 'Symfony\\Component\\Console\\Helper\\TableStyle' => $vendorDir . '/symfony/console/Helper/TableStyle.php', @@ -112,13 +130,31 @@ 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => $vendorDir . '/symfony/console/Question/ChoiceQuestion.php', 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => $vendorDir . '/symfony/console/Question/ConfirmationQuestion.php', 'Symfony\\Component\\Console\\Question\\Question' => $vendorDir . '/symfony/console/Question/Question.php', + 'Symfony\\Component\\Console\\SignalRegistry\\SignalRegistry' => $vendorDir . '/symfony/console/SignalRegistry/SignalRegistry.php', + 'Symfony\\Component\\Console\\SingleCommandApplication' => $vendorDir . '/symfony/console/SingleCommandApplication.php', 'Symfony\\Component\\Console\\Style\\OutputStyle' => $vendorDir . '/symfony/console/Style/OutputStyle.php', 'Symfony\\Component\\Console\\Style\\StyleInterface' => $vendorDir . '/symfony/console/Style/StyleInterface.php', 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => $vendorDir . '/symfony/console/Style/SymfonyStyle.php', 'Symfony\\Component\\Console\\Terminal' => $vendorDir . '/symfony/console/Terminal.php', 'Symfony\\Component\\Console\\Tester\\ApplicationTester' => $vendorDir . '/symfony/console/Tester/ApplicationTester.php', + 'Symfony\\Component\\Console\\Tester\\CommandCompletionTester' => $vendorDir . '/symfony/console/Tester/CommandCompletionTester.php', 'Symfony\\Component\\Console\\Tester\\CommandTester' => $vendorDir . '/symfony/console/Tester/CommandTester.php', + 'Symfony\\Component\\Console\\Tester\\Constraint\\CommandIsSuccessful' => $vendorDir . '/symfony/console/Tester/Constraint/CommandIsSuccessful.php', 'Symfony\\Component\\Console\\Tester\\TesterTrait' => $vendorDir . '/symfony/console/Tester/TesterTrait.php', + 'Symfony\\Component\\String\\AbstractString' => $vendorDir . '/symfony/string/AbstractString.php', + 'Symfony\\Component\\String\\AbstractUnicodeString' => $vendorDir . '/symfony/string/AbstractUnicodeString.php', + 'Symfony\\Component\\String\\ByteString' => $vendorDir . '/symfony/string/ByteString.php', + 'Symfony\\Component\\String\\CodePointString' => $vendorDir . '/symfony/string/CodePointString.php', + 'Symfony\\Component\\String\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/string/Exception/ExceptionInterface.php', + 'Symfony\\Component\\String\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/string/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\String\\Exception\\RuntimeException' => $vendorDir . '/symfony/string/Exception/RuntimeException.php', + 'Symfony\\Component\\String\\Inflector\\EnglishInflector' => $vendorDir . '/symfony/string/Inflector/EnglishInflector.php', + 'Symfony\\Component\\String\\Inflector\\FrenchInflector' => $vendorDir . '/symfony/string/Inflector/FrenchInflector.php', + 'Symfony\\Component\\String\\Inflector\\InflectorInterface' => $vendorDir . '/symfony/string/Inflector/InflectorInterface.php', + 'Symfony\\Component\\String\\LazyString' => $vendorDir . '/symfony/string/LazyString.php', + 'Symfony\\Component\\String\\Slugger\\AsciiSlugger' => $vendorDir . '/symfony/string/Slugger/AsciiSlugger.php', + 'Symfony\\Component\\String\\Slugger\\SluggerInterface' => $vendorDir . '/symfony/string/Slugger/SluggerInterface.php', + 'Symfony\\Component\\String\\UnicodeString' => $vendorDir . '/symfony/string/UnicodeString.php', 'Symfony\\Contracts\\Service\\Attribute\\Required' => $vendorDir . '/symfony/service-contracts/Attribute/Required.php', 'Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => $vendorDir . '/symfony/service-contracts/Attribute/SubscribedService.php', 'Symfony\\Contracts\\Service\\ResetInterface' => $vendorDir . '/symfony/service-contracts/ResetInterface.php', @@ -127,6 +163,9 @@ 'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberInterface.php', 'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberTrait.php', 'Symfony\\Contracts\\Service\\Test\\ServiceLocatorTest' => $vendorDir . '/symfony/service-contracts/Test/ServiceLocatorTest.php', + 'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php', + 'Symfony\\Polyfill\\Intl\\Grapheme\\Grapheme' => $vendorDir . '/symfony/polyfill-intl-grapheme/Grapheme.php', + 'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Normalizer.php', 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php', 'Symfony\\Polyfill\\Php73\\Php73' => $vendorDir . '/symfony/polyfill-php73/Php73.php', 'Symfony\\Polyfill\\Php80\\Php80' => $vendorDir . '/symfony/polyfill-php80/Php80.php', diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index f1de01ba..74c87e83 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -8,6 +8,10 @@ return array( '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', - '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', + '8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php', + 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', + '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php', + 'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php', ); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index f04099a5..d5449397 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -9,7 +9,11 @@ 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), 'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), + 'Symfony\\Polyfill\\Intl\\Normalizer\\' => array($vendorDir . '/symfony/polyfill-intl-normalizer'), + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => array($vendorDir . '/symfony/polyfill-intl-grapheme'), + 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), 'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'), + 'Symfony\\Component\\String\\' => array($vendorDir . '/symfony/string'), 'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'Nextcloud\\CodingStandard\\' => array($vendorDir . '/nextcloud/coding-standard/src'), diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index d9f93773..6504c236 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -9,8 +9,12 @@ class ComposerStaticInitba7c5c8f0885d00c3b669d0399f96c80 public static $files = array ( '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', - '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + '8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php', + 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', + '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php', + 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', ); public static $prefixLengthsPsr4 = array ( @@ -19,7 +23,11 @@ class ComposerStaticInitba7c5c8f0885d00c3b669d0399f96c80 'Symfony\\Polyfill\\Php80\\' => 23, 'Symfony\\Polyfill\\Php73\\' => 23, 'Symfony\\Polyfill\\Mbstring\\' => 26, + 'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33, + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => 31, + 'Symfony\\Polyfill\\Ctype\\' => 23, 'Symfony\\Contracts\\Service\\' => 26, + 'Symfony\\Component\\String\\' => 25, 'Symfony\\Component\\Console\\' => 26, ), 'P' => @@ -50,10 +58,26 @@ class ComposerStaticInitba7c5c8f0885d00c3b669d0399f96c80 array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', ), + 'Symfony\\Polyfill\\Intl\\Normalizer\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer', + ), + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme', + ), + 'Symfony\\Polyfill\\Ctype\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', + ), 'Symfony\\Contracts\\Service\\' => array ( 0 => __DIR__ . '/..' . '/symfony/service-contracts', ), + 'Symfony\\Component\\String\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/string', + ), 'Symfony\\Component\\Console\\' => array ( 0 => __DIR__ . '/..' . '/symfony/console', @@ -101,20 +125,34 @@ class ComposerStaticInitba7c5c8f0885d00c3b669d0399f96c80 'NC\\Updater\\Updater' => __DIR__ . '/../..' . '/lib/Updater.php', 'NC\\Updater\\Version' => __DIR__ . '/../..' . '/lib/Version.php', 'Nextcloud\\CodingStandard\\Config' => __DIR__ . '/..' . '/nextcloud/coding-standard/src/Config.php', + 'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php', 'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php', 'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php', 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', 'Symfony\\Component\\Console\\Application' => __DIR__ . '/..' . '/symfony/console/Application.php', + 'Symfony\\Component\\Console\\Attribute\\AsCommand' => __DIR__ . '/..' . '/symfony/console/Attribute/AsCommand.php', + 'Symfony\\Component\\Console\\CI\\GithubActionReporter' => __DIR__ . '/..' . '/symfony/console/CI/GithubActionReporter.php', + 'Symfony\\Component\\Console\\Color' => __DIR__ . '/..' . '/symfony/console/Color.php', 'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => __DIR__ . '/..' . '/symfony/console/CommandLoader/CommandLoaderInterface.php', 'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/ContainerCommandLoader.php', 'Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/FactoryCommandLoader.php', 'Symfony\\Component\\Console\\Command\\Command' => __DIR__ . '/..' . '/symfony/console/Command/Command.php', + 'Symfony\\Component\\Console\\Command\\CompleteCommand' => __DIR__ . '/..' . '/symfony/console/Command/CompleteCommand.php', + 'Symfony\\Component\\Console\\Command\\DumpCompletionCommand' => __DIR__ . '/..' . '/symfony/console/Command/DumpCompletionCommand.php', 'Symfony\\Component\\Console\\Command\\HelpCommand' => __DIR__ . '/..' . '/symfony/console/Command/HelpCommand.php', + 'Symfony\\Component\\Console\\Command\\LazyCommand' => __DIR__ . '/..' . '/symfony/console/Command/LazyCommand.php', 'Symfony\\Component\\Console\\Command\\ListCommand' => __DIR__ . '/..' . '/symfony/console/Command/ListCommand.php', 'Symfony\\Component\\Console\\Command\\LockableTrait' => __DIR__ . '/..' . '/symfony/console/Command/LockableTrait.php', + 'Symfony\\Component\\Console\\Command\\SignalableCommandInterface' => __DIR__ . '/..' . '/symfony/console/Command/SignalableCommandInterface.php', + 'Symfony\\Component\\Console\\Completion\\CompletionInput' => __DIR__ . '/..' . '/symfony/console/Completion/CompletionInput.php', + 'Symfony\\Component\\Console\\Completion\\CompletionSuggestions' => __DIR__ . '/..' . '/symfony/console/Completion/CompletionSuggestions.php', + 'Symfony\\Component\\Console\\Completion\\Output\\BashCompletionOutput' => __DIR__ . '/..' . '/symfony/console/Completion/Output/BashCompletionOutput.php', + 'Symfony\\Component\\Console\\Completion\\Output\\CompletionOutputInterface' => __DIR__ . '/..' . '/symfony/console/Completion/Output/CompletionOutputInterface.php', + 'Symfony\\Component\\Console\\Completion\\Suggestion' => __DIR__ . '/..' . '/symfony/console/Completion/Suggestion.php', 'Symfony\\Component\\Console\\ConsoleEvents' => __DIR__ . '/..' . '/symfony/console/ConsoleEvents.php', + 'Symfony\\Component\\Console\\Cursor' => __DIR__ . '/..' . '/symfony/console/Cursor.php', 'Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => __DIR__ . '/..' . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => __DIR__ . '/..' . '/symfony/console/Descriptor/ApplicationDescription.php', 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/Descriptor.php', @@ -127,6 +165,7 @@ class ComposerStaticInitba7c5c8f0885d00c3b669d0399f96c80 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleCommandEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleErrorEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleErrorEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleEvent.php', + 'Symfony\\Component\\Console\\Event\\ConsoleSignalEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleSignalEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleTerminateEvent.php', 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/CommandNotFoundException.php', 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/console/Exception/ExceptionInterface.php', @@ -136,6 +175,8 @@ class ComposerStaticInitba7c5c8f0885d00c3b669d0399f96c80 'Symfony\\Component\\Console\\Exception\\MissingInputException' => __DIR__ . '/..' . '/symfony/console/Exception/MissingInputException.php', 'Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/NamespaceNotFoundException.php', 'Symfony\\Component\\Console\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/console/Exception/RuntimeException.php', + 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/NullOutputFormatter.php', + 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/NullOutputFormatterStyle.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatter.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterInterface.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyle.php', @@ -157,6 +198,7 @@ class ComposerStaticInitba7c5c8f0885d00c3b669d0399f96c80 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/SymfonyQuestionHelper.php', 'Symfony\\Component\\Console\\Helper\\Table' => __DIR__ . '/..' . '/symfony/console/Helper/Table.php', 'Symfony\\Component\\Console\\Helper\\TableCell' => __DIR__ . '/..' . '/symfony/console/Helper/TableCell.php', + 'Symfony\\Component\\Console\\Helper\\TableCellStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableCellStyle.php', 'Symfony\\Component\\Console\\Helper\\TableRows' => __DIR__ . '/..' . '/symfony/console/Helper/TableRows.php', 'Symfony\\Component\\Console\\Helper\\TableSeparator' => __DIR__ . '/..' . '/symfony/console/Helper/TableSeparator.php', 'Symfony\\Component\\Console\\Helper\\TableStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableStyle.php', @@ -183,13 +225,31 @@ class ComposerStaticInitba7c5c8f0885d00c3b669d0399f96c80 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ChoiceQuestion.php', 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ConfirmationQuestion.php', 'Symfony\\Component\\Console\\Question\\Question' => __DIR__ . '/..' . '/symfony/console/Question/Question.php', + 'Symfony\\Component\\Console\\SignalRegistry\\SignalRegistry' => __DIR__ . '/..' . '/symfony/console/SignalRegistry/SignalRegistry.php', + 'Symfony\\Component\\Console\\SingleCommandApplication' => __DIR__ . '/..' . '/symfony/console/SingleCommandApplication.php', 'Symfony\\Component\\Console\\Style\\OutputStyle' => __DIR__ . '/..' . '/symfony/console/Style/OutputStyle.php', 'Symfony\\Component\\Console\\Style\\StyleInterface' => __DIR__ . '/..' . '/symfony/console/Style/StyleInterface.php', 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => __DIR__ . '/..' . '/symfony/console/Style/SymfonyStyle.php', 'Symfony\\Component\\Console\\Terminal' => __DIR__ . '/..' . '/symfony/console/Terminal.php', 'Symfony\\Component\\Console\\Tester\\ApplicationTester' => __DIR__ . '/..' . '/symfony/console/Tester/ApplicationTester.php', + 'Symfony\\Component\\Console\\Tester\\CommandCompletionTester' => __DIR__ . '/..' . '/symfony/console/Tester/CommandCompletionTester.php', 'Symfony\\Component\\Console\\Tester\\CommandTester' => __DIR__ . '/..' . '/symfony/console/Tester/CommandTester.php', + 'Symfony\\Component\\Console\\Tester\\Constraint\\CommandIsSuccessful' => __DIR__ . '/..' . '/symfony/console/Tester/Constraint/CommandIsSuccessful.php', 'Symfony\\Component\\Console\\Tester\\TesterTrait' => __DIR__ . '/..' . '/symfony/console/Tester/TesterTrait.php', + 'Symfony\\Component\\String\\AbstractString' => __DIR__ . '/..' . '/symfony/string/AbstractString.php', + 'Symfony\\Component\\String\\AbstractUnicodeString' => __DIR__ . '/..' . '/symfony/string/AbstractUnicodeString.php', + 'Symfony\\Component\\String\\ByteString' => __DIR__ . '/..' . '/symfony/string/ByteString.php', + 'Symfony\\Component\\String\\CodePointString' => __DIR__ . '/..' . '/symfony/string/CodePointString.php', + 'Symfony\\Component\\String\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/string/Exception/ExceptionInterface.php', + 'Symfony\\Component\\String\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/string/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\String\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/string/Exception/RuntimeException.php', + 'Symfony\\Component\\String\\Inflector\\EnglishInflector' => __DIR__ . '/..' . '/symfony/string/Inflector/EnglishInflector.php', + 'Symfony\\Component\\String\\Inflector\\FrenchInflector' => __DIR__ . '/..' . '/symfony/string/Inflector/FrenchInflector.php', + 'Symfony\\Component\\String\\Inflector\\InflectorInterface' => __DIR__ . '/..' . '/symfony/string/Inflector/InflectorInterface.php', + 'Symfony\\Component\\String\\LazyString' => __DIR__ . '/..' . '/symfony/string/LazyString.php', + 'Symfony\\Component\\String\\Slugger\\AsciiSlugger' => __DIR__ . '/..' . '/symfony/string/Slugger/AsciiSlugger.php', + 'Symfony\\Component\\String\\Slugger\\SluggerInterface' => __DIR__ . '/..' . '/symfony/string/Slugger/SluggerInterface.php', + 'Symfony\\Component\\String\\UnicodeString' => __DIR__ . '/..' . '/symfony/string/UnicodeString.php', 'Symfony\\Contracts\\Service\\Attribute\\Required' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/Required.php', 'Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/SubscribedService.php', 'Symfony\\Contracts\\Service\\ResetInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ResetInterface.php', @@ -198,6 +258,9 @@ class ComposerStaticInitba7c5c8f0885d00c3b669d0399f96c80 'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberInterface.php', 'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberTrait.php', 'Symfony\\Contracts\\Service\\Test\\ServiceLocatorTest' => __DIR__ . '/..' . '/symfony/service-contracts/Test/ServiceLocatorTest.php', + 'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php', + 'Symfony\\Polyfill\\Intl\\Grapheme\\Grapheme' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/Grapheme.php', + 'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Normalizer.php', 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php', 'Symfony\\Polyfill\\Php73\\Php73' => __DIR__ . '/..' . '/symfony/polyfill-php73/Php73.php', 'Symfony\\Polyfill\\Php80\\Php80' => __DIR__ . '/..' . '/symfony/polyfill-php80/Php80.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 9a61e0f4..4a7240d9 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -212,44 +212,47 @@ }, { "name": "symfony/console", - "version": "v4.4.49", - "version_normalized": "4.4.49.0", + "version": "v5.4.34", + "version_normalized": "5.4.34.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9" + "reference": "4b4d8cd118484aa604ec519062113dd87abde18c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", - "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9", + "url": "https://api.github.com/repos/symfony/console/zipball/4b4d8cd118484aa604ec519062113dd87abde18c", + "reference": "4b4d8cd118484aa604ec519062113dd87abde18c", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2" + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" }, "conflict": { "psr/log": ">=3", - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3|>=5", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", "symfony/lock": "<4.4", - "symfony/process": "<3.3" + "symfony/process": "<4.4" }, "provide": { "psr/log-implementation": "1.0|2.0" }, "require-dev": { "psr/log": "^1|^2", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/event-dispatcher": "^4.3", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/var-dumper": "^4.3|^5.0" + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -257,7 +260,7 @@ "symfony/lock": "", "symfony/process": "" }, - "time": "2022-11-05T17:10:16+00:00", + "time": "2023-12-08T13:33:03+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -284,8 +287,14 @@ ], "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], "support": { - "source": "https://github.com/symfony/console/tree/v4.4.49" + "source": "https://github.com/symfony/console/tree/v5.4.34" }, "funding": [ { @@ -373,19 +382,275 @@ ], "install-path": "../symfony/deprecation-contracts" }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2023-01-26T09:26:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-ctype" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "875e90aeea2777b6f135677f618529449334a612" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2023-01-26T09:26:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-intl-grapheme" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2023-01-26T09:26:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-intl-normalizer" + }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "42292d99c55abe617799667f454222c54c60e229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", "shasum": "" }, "require": { @@ -397,11 +662,11 @@ "suggest": { "ext-mbstring": "For best performance" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-07-28T09:04:16+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -441,7 +706,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" }, "funding": [ { @@ -461,27 +726,27 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5", + "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:26:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -523,7 +788,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0" }, "funding": [ { @@ -543,27 +808,27 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:26:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -609,7 +874,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" }, "funding": [ { @@ -712,6 +977,95 @@ } ], "install-path": "../symfony/service-contracts" + }, + { + "name": "symfony/string", + "version": "v5.4.34", + "version_normalized": "5.4.34.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "e3f98bfc7885c957488f443df82d97814a3ce061" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/e3f98bfc7885c957488f443df82d97814a3ce061", + "reference": "e3f98bfc7885c957488f443df82d97814a3ce061", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "time": "2023-12-09T13:20:28+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.34" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/string" } ], "dev": true, diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index a1f1e348..82a95c9c 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => '__root__', 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'aac9e4b1f9edc88a0d28dcbfca50276c9a2c25ba', + 'reference' => 'd17f61edd23efb3738a06fd7488d004571fe863d', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -13,7 +13,7 @@ '__root__' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'aac9e4b1f9edc88a0d28dcbfca50276c9a2c25ba', + 'reference' => 'd17f61edd23efb3738a06fd7488d004571fe863d', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -68,9 +68,9 @@ ), ), 'symfony/console' => array( - 'pretty_version' => 'v4.4.49', - 'version' => '4.4.49.0', - 'reference' => '33fa45ffc81fdcc1ca368d4946da859c8cdb58d9', + 'pretty_version' => 'v5.4.34', + 'version' => '5.4.34.0', + 'reference' => '4b4d8cd118484aa604ec519062113dd87abde18c', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/console', 'aliases' => array(), @@ -85,28 +85,55 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'symfony/polyfill-ctype' => array( + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => 'ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/polyfill-intl-grapheme' => array( + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '875e90aeea2777b6f135677f618529449334a612', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/polyfill-intl-normalizer' => array( + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '8ad114f6b39e2c98a8b0e3bd907732c207c2b534', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '42292d99c55abe617799667f454222c54c60e229', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php73' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '9e8ecb5f92152187c4799efd3c96b78ccab18ff9', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => 'fe2f306d1d9d346a7fee353d0d5012e401e984b5', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php73', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '6caa57379c4aec19c0a12a38b59b26487dcfe4b5', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), @@ -121,5 +148,14 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'symfony/string' => array( + 'pretty_version' => 'v5.4.34', + 'version' => '5.4.34.0', + 'reference' => 'e3f98bfc7885c957488f443df82d97814a3ce061', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/string', + 'aliases' => array(), + 'dev_requirement' => false, + ), ), ); diff --git a/vendor/symfony/console/Application.php b/vendor/symfony/console/Application.php index 42c4911a..29951e9c 100644 --- a/vendor/symfony/console/Application.php +++ b/vendor/symfony/console/Application.php @@ -12,16 +12,24 @@ namespace Symfony\Component\Console; use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Command\CompleteCommand; +use Symfony\Component\Console\Command\DumpCompletionCommand; use Symfony\Component\Console\Command\HelpCommand; +use Symfony\Component\Console\Command\LazyCommand; use Symfony\Component\Console\Command\ListCommand; +use Symfony\Component\Console\Command\SignalableCommandInterface; use Symfony\Component\Console\CommandLoader\CommandLoaderInterface; +use Symfony\Component\Console\Completion\CompletionInput; +use Symfony\Component\Console\Completion\CompletionSuggestions; use Symfony\Component\Console\Event\ConsoleCommandEvent; use Symfony\Component\Console\Event\ConsoleErrorEvent; +use Symfony\Component\Console\Event\ConsoleSignalEvent; use Symfony\Component\Console\Event\ConsoleTerminateEvent; use Symfony\Component\Console\Exception\CommandNotFoundException; use Symfony\Component\Console\Exception\ExceptionInterface; use Symfony\Component\Console\Exception\LogicException; use Symfony\Component\Console\Exception\NamespaceNotFoundException; +use Symfony\Component\Console\Exception\RuntimeException; use Symfony\Component\Console\Formatter\OutputFormatter; use Symfony\Component\Console\Helper\DebugFormatterHelper; use Symfony\Component\Console\Helper\FormatterHelper; @@ -39,12 +47,10 @@ use Symfony\Component\Console\Output\ConsoleOutput; use Symfony\Component\Console\Output\ConsoleOutputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\SignalRegistry\SignalRegistry; use Symfony\Component\Console\Style\SymfonyStyle; -use Symfony\Component\Debug\ErrorHandler as LegacyErrorHandler; -use Symfony\Component\Debug\Exception\FatalThrowableError; use Symfony\Component\ErrorHandler\ErrorHandler; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy; +use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; use Symfony\Contracts\Service\ResetInterface; /** @@ -79,25 +85,27 @@ class Application implements ResetInterface private $defaultCommand; private $singleCommand = false; private $initialized; + private $signalRegistry; + private $signalsToDispatchEvent = []; - /** - * @param string $name The name of the application - * @param string $version The version of the application - */ public function __construct(string $name = 'UNKNOWN', string $version = 'UNKNOWN') { $this->name = $name; $this->version = $version; $this->terminal = new Terminal(); $this->defaultCommand = 'list'; + if (\defined('SIGINT') && SignalRegistry::isSupported()) { + $this->signalRegistry = new SignalRegistry(); + $this->signalsToDispatchEvent = [\SIGINT, \SIGTERM, \SIGUSR1, \SIGUSR2]; + } } /** - * @final since Symfony 4.3, the type-hint will be updated to the interface from symfony/contracts in 5.0 + * @final */ public function setDispatcher(EventDispatcherInterface $dispatcher) { - $this->dispatcher = LegacyEventDispatcherProxy::decorate($dispatcher); + $this->dispatcher = $dispatcher; } public function setCommandLoader(CommandLoaderInterface $commandLoader) @@ -105,6 +113,20 @@ public function setCommandLoader(CommandLoaderInterface $commandLoader) $this->commandLoader = $commandLoader; } + public function getSignalRegistry(): SignalRegistry + { + if (!$this->signalRegistry) { + throw new RuntimeException('Signals are not supported. Make sure that the `pcntl` extension is installed and that "pcntl_*" functions are not disabled by your php.ini\'s "disable_functions" directive.'); + } + + return $this->signalRegistry; + } + + public function setSignalsToDispatchEvent(int ...$signalsToDispatchEvent) + { + $this->signalsToDispatchEvent = $signalsToDispatchEvent; + } + /** * Runs the current application. * @@ -136,7 +158,7 @@ public function run(InputInterface $input = null, OutputInterface $output = null }; if ($phpHandler = set_exception_handler($renderException)) { restore_exception_handler(); - if (!\is_array($phpHandler) || (!$phpHandler[0] instanceof ErrorHandler && !$phpHandler[0] instanceof LegacyErrorHandler)) { + if (!\is_array($phpHandler) || !$phpHandler[0] instanceof ErrorHandler) { $errorHandler = true; } elseif ($errorHandler = $phpHandler[0]->setExceptionHandler($renderException)) { $phpHandler[0]->setExceptionHandler($errorHandler); @@ -271,6 +293,10 @@ public function doRun(InputInterface $input, OutputInterface $output) $command = $this->find($alternative); } + if ($command instanceof LazyCommand) { + $command = $command->getCommand(); + } + $this->runningCommand = $command; $exitCode = $this->doRunCommand($command, $input, $output); $this->runningCommand = null; @@ -293,7 +319,7 @@ public function setHelperSet(HelperSet $helperSet) /** * Get the helper set associated with the command. * - * @return HelperSet The HelperSet instance associated with this command + * @return HelperSet */ public function getHelperSet() { @@ -312,7 +338,7 @@ public function setDefinition(InputDefinition $definition) /** * Gets the InputDefinition related to this Application. * - * @return InputDefinition The InputDefinition instance + * @return InputDefinition */ public function getDefinition() { @@ -330,10 +356,42 @@ public function getDefinition() return $this->definition; } + /** + * Adds suggestions to $suggestions for the current completion input (e.g. option or argument). + */ + public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void + { + if ( + CompletionInput::TYPE_ARGUMENT_VALUE === $input->getCompletionType() + && 'command' === $input->getCompletionName() + ) { + $commandNames = []; + foreach ($this->all() as $name => $command) { + // skip hidden commands and aliased commands as they already get added below + if ($command->isHidden() || $command->getName() !== $name) { + continue; + } + $commandNames[] = $command->getName(); + foreach ($command->getAliases() as $name) { + $commandNames[] = $name; + } + } + $suggestions->suggestValues(array_filter($commandNames)); + + return; + } + + if (CompletionInput::TYPE_OPTION_NAME === $input->getCompletionType()) { + $suggestions->suggestOptions($this->getDefinition()->getOptions()); + + return; + } + } + /** * Gets the help message. * - * @return string A help message + * @return string */ public function getHelp() { @@ -343,7 +401,7 @@ public function getHelp() /** * Gets whether to catch exceptions or not during commands execution. * - * @return bool Whether to catch exceptions or not during commands execution + * @return bool */ public function areExceptionsCaught() { @@ -352,18 +410,16 @@ public function areExceptionsCaught() /** * Sets whether to catch exceptions or not during commands execution. - * - * @param bool $boolean Whether to catch exceptions or not during commands execution */ - public function setCatchExceptions($boolean) + public function setCatchExceptions(bool $boolean) { - $this->catchExceptions = (bool) $boolean; + $this->catchExceptions = $boolean; } /** * Gets whether to automatically exit after a command execution or not. * - * @return bool Whether to automatically exit after a command execution or not + * @return bool */ public function isAutoExitEnabled() { @@ -372,18 +428,16 @@ public function isAutoExitEnabled() /** * Sets whether to automatically exit after a command execution or not. - * - * @param bool $boolean Whether to automatically exit after a command execution or not */ - public function setAutoExit($boolean) + public function setAutoExit(bool $boolean) { - $this->autoExit = (bool) $boolean; + $this->autoExit = $boolean; } /** * Gets the name of the application. * - * @return string The application name + * @return string */ public function getName() { @@ -392,10 +446,8 @@ public function getName() /** * Sets the application name. - * - * @param string $name The application name - */ - public function setName($name) + **/ + public function setName(string $name) { $this->name = $name; } @@ -403,7 +455,7 @@ public function setName($name) /** * Gets the application version. * - * @return string The application version + * @return string */ public function getVersion() { @@ -412,10 +464,8 @@ public function getVersion() /** * Sets the application version. - * - * @param string $version The application version */ - public function setVersion($version) + public function setVersion(string $version) { $this->version = $version; } @@ -423,7 +473,7 @@ public function setVersion($version) /** * Returns the long version of the application. * - * @return string The long application version + * @return string */ public function getLongVersion() { @@ -441,11 +491,9 @@ public function getLongVersion() /** * Registers a new command. * - * @param string $name The command name - * - * @return Command The newly created command + * @return Command */ - public function register($name) + public function register(string $name) { return $this->add(new Command($name)); } @@ -470,7 +518,7 @@ public function addCommands(array $commands) * If a command with the same name already exists, it will be overridden. * If the command is not enabled it will not be added. * - * @return Command|null The registered command if enabled or null + * @return Command|null */ public function add(Command $command) { @@ -484,11 +532,13 @@ public function add(Command $command) return null; } - // Will throw if the command is not correctly initialized. - $command->getDefinition(); + if (!$command instanceof LazyCommand) { + // Will throw if the command is not correctly initialized. + $command->getDefinition(); + } if (!$command->getName()) { - throw new LogicException(sprintf('The command defined in "%s" cannot have an empty name.', \get_class($command))); + throw new LogicException(sprintf('The command defined in "%s" cannot have an empty name.', get_debug_type($command))); } $this->commands[$command->getName()] = $command; @@ -503,13 +553,11 @@ public function add(Command $command) /** * Returns a registered command by name or alias. * - * @param string $name The command name or alias - * - * @return Command A Command object + * @return Command * * @throws CommandNotFoundException When given command name does not exist */ - public function get($name) + public function get(string $name) { $this->init(); @@ -539,11 +587,9 @@ public function get($name) /** * Returns true if the command exists, false otherwise. * - * @param string $name The command name or alias - * - * @return bool true if the command exists, false otherwise + * @return bool */ - public function has($name) + public function has(string $name) { $this->init(); @@ -555,7 +601,7 @@ public function has($name) * * It does not return the global namespace which always exists. * - * @return string[] An array of namespaces + * @return string[] */ public function getNamespaces() { @@ -565,29 +611,27 @@ public function getNamespaces() continue; } - $namespaces = array_merge($namespaces, $this->extractAllNamespaces($command->getName())); + $namespaces[] = $this->extractAllNamespaces($command->getName()); foreach ($command->getAliases() as $alias) { - $namespaces = array_merge($namespaces, $this->extractAllNamespaces($alias)); + $namespaces[] = $this->extractAllNamespaces($alias); } } - return array_values(array_unique(array_filter($namespaces))); + return array_values(array_unique(array_filter(array_merge([], ...$namespaces)))); } /** * Finds a registered namespace by a name or an abbreviation. * - * @param string $namespace A namespace or abbreviation to search for - * - * @return string A registered namespace + * @return string * * @throws NamespaceNotFoundException When namespace is incorrect or ambiguous */ - public function findNamespace($namespace) + public function findNamespace(string $namespace) { $allNamespaces = $this->getNamespaces(); - $expr = preg_replace_callback('{([^:]+|)}', function ($matches) { return preg_quote($matches[1]).'[^:]*'; }, $namespace); + $expr = implode('[^:]*:', array_map('preg_quote', explode(':', $namespace))).'[^:]*'; $namespaces = preg_grep('{^'.$expr.'}', $allNamespaces); if (empty($namespaces)) { @@ -620,13 +664,11 @@ public function findNamespace($namespace) * Contrary to get, this command tries to find the best * match if you give it an abbreviation of a name or alias. * - * @param string $name A command name or a command alias - * - * @return Command A Command instance + * @return Command * * @throws CommandNotFoundException When command name is incorrect or ambiguous */ - public function find($name) + public function find(string $name) { $this->init(); @@ -645,7 +687,7 @@ public function find($name) } $allCommands = $this->commandLoader ? array_merge($this->commandLoader->getNames(), array_keys($this->commands)) : array_keys($this->commands); - $expr = preg_replace_callback('{([^:]+|)}', function ($matches) { return preg_quote($matches[1]).'[^:]*'; }, $name); + $expr = implode('[^:]*:', array_map('preg_quote', explode(':', $name))).'[^:]*'; $commands = preg_grep('{^'.$expr.'}', $allCommands); if (empty($commands)) { @@ -699,7 +741,7 @@ public function find($name) $abbrevs = array_values($commands); $maxLen = 0; foreach ($abbrevs as $abbrev) { - $maxLen = max(Helper::strlen($abbrev), $maxLen); + $maxLen = max(Helper::width($abbrev), $maxLen); } $abbrevs = array_map(function ($cmd) use ($commandList, $usableWidth, $maxLen, &$commands) { if ($commandList[$cmd]->isHidden()) { @@ -710,7 +752,7 @@ public function find($name) $abbrev = str_pad($cmd, $maxLen, ' ').' '.$commandList[$cmd]->getDescription(); - return Helper::strlen($abbrev) > $usableWidth ? Helper::substr($abbrev, 0, $usableWidth - 3).'...' : $abbrev; + return Helper::width($abbrev) > $usableWidth ? Helper::substr($abbrev, 0, $usableWidth - 3).'...' : $abbrev; }, array_values($commands)); if (\count($commands) > 1) { @@ -723,7 +765,7 @@ public function find($name) $command = $this->get(reset($commands)); if ($command->isHidden()) { - @trigger_error(sprintf('Command "%s" is hidden, finding it using an abbreviation is deprecated since Symfony 4.4, use its full name instead.', $command->getName()), \E_USER_DEPRECATED); + throw new CommandNotFoundException(sprintf('The command "%s" does not exist.', $name)); } return $command; @@ -734,11 +776,9 @@ public function find($name) * * The array keys are the full names and the values the command instances. * - * @param string $namespace A namespace name - * - * @return Command[] An array of Command instances + * @return Command[] */ - public function all($namespace = null) + public function all(string $namespace = null) { $this->init(); @@ -778,11 +818,9 @@ public function all($namespace = null) /** * Returns an array of possible abbreviations given a set of names. * - * @param array $names An array of names - * - * @return array An array of abbreviations + * @return string[][] */ - public static function getAbbreviations($names) + public static function getAbbreviations(array $names) { $abbrevs = []; foreach ($names as $name) { @@ -795,86 +833,26 @@ public static function getAbbreviations($names) return $abbrevs; } - /** - * Renders a caught exception. - * - * @deprecated since Symfony 4.4, use "renderThrowable()" instead - */ - public function renderException(\Exception $e, OutputInterface $output) - { - @trigger_error(sprintf('The "%s::renderException()" method is deprecated since Symfony 4.4, use "renderThrowable()" instead.', __CLASS__), \E_USER_DEPRECATED); - - $output->writeln('', OutputInterface::VERBOSITY_QUIET); - - $this->doRenderException($e, $output); - - $this->finishRenderThrowableOrException($output); - } - public function renderThrowable(\Throwable $e, OutputInterface $output): void { - if (__CLASS__ !== static::class && __CLASS__ === (new \ReflectionMethod($this, 'renderThrowable'))->getDeclaringClass()->getName() && __CLASS__ !== (new \ReflectionMethod($this, 'renderException'))->getDeclaringClass()->getName()) { - @trigger_error(sprintf('The "%s::renderException()" method is deprecated since Symfony 4.4, use "renderThrowable()" instead.', __CLASS__), \E_USER_DEPRECATED); - - if (!$e instanceof \Exception) { - $e = class_exists(FatalThrowableError::class) ? new FatalThrowableError($e) : new \ErrorException($e->getMessage(), $e->getCode(), \E_ERROR, $e->getFile(), $e->getLine()); - } - - $this->renderException($e, $output); - - return; - } - $output->writeln('', OutputInterface::VERBOSITY_QUIET); $this->doRenderThrowable($e, $output); - $this->finishRenderThrowableOrException($output); - } - - private function finishRenderThrowableOrException(OutputInterface $output): void - { if (null !== $this->runningCommand) { $output->writeln(sprintf('%s', OutputFormatter::escape(sprintf($this->runningCommand->getSynopsis(), $this->getName()))), OutputInterface::VERBOSITY_QUIET); $output->writeln('', OutputInterface::VERBOSITY_QUIET); } } - /** - * @deprecated since Symfony 4.4, use "doRenderThrowable()" instead - */ - protected function doRenderException(\Exception $e, OutputInterface $output) - { - @trigger_error(sprintf('The "%s::doRenderException()" method is deprecated since Symfony 4.4, use "doRenderThrowable()" instead.', __CLASS__), \E_USER_DEPRECATED); - - $this->doActuallyRenderThrowable($e, $output); - } - protected function doRenderThrowable(\Throwable $e, OutputInterface $output): void - { - if (__CLASS__ !== static::class && __CLASS__ === (new \ReflectionMethod($this, 'doRenderThrowable'))->getDeclaringClass()->getName() && __CLASS__ !== (new \ReflectionMethod($this, 'doRenderException'))->getDeclaringClass()->getName()) { - @trigger_error(sprintf('The "%s::doRenderException()" method is deprecated since Symfony 4.4, use "doRenderThrowable()" instead.', __CLASS__), \E_USER_DEPRECATED); - - if (!$e instanceof \Exception) { - $e = class_exists(FatalThrowableError::class) ? new FatalThrowableError($e) : new \ErrorException($e->getMessage(), $e->getCode(), \E_ERROR, $e->getFile(), $e->getLine()); - } - - $this->doRenderException($e, $output); - - return; - } - - $this->doActuallyRenderThrowable($e, $output); - } - - private function doActuallyRenderThrowable(\Throwable $e, OutputInterface $output): void { do { $message = trim($e->getMessage()); if ('' === $message || OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) { $class = get_debug_type($e); $title = sprintf(' [%s%s] ', $class, 0 !== ($code = $e->getCode()) ? ' ('.$code.')' : ''); - $len = Helper::strlen($title); + $len = Helper::width($title); } else { $len = 0; } @@ -890,7 +868,7 @@ private function doActuallyRenderThrowable(\Throwable $e, OutputInterface $outpu foreach ('' !== $message ? preg_split('/\r?\n/', $message) : [] as $line) { foreach ($this->splitStringByWidth($line, $width - 4) as $line) { // pre-format lines to get the right string length - $lineLength = Helper::strlen($line) + 4; + $lineLength = Helper::width($line) + 4; $lines[] = [$line, $lineLength]; $len = max($lineLength, $len); @@ -903,7 +881,7 @@ private function doActuallyRenderThrowable(\Throwable $e, OutputInterface $outpu } $messages[] = $emptyLine = sprintf('%s', str_repeat(' ', $len)); if ('' === $message || OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) { - $messages[] = sprintf('%s%s', $title, str_repeat(' ', max(0, $len - Helper::strlen($title)))); + $messages[] = sprintf('%s%s', $title, str_repeat(' ', max(0, $len - Helper::width($title)))); } foreach ($lines as $line) { $messages[] = sprintf(' %s %s', OutputFormatter::escape($line[0]), str_repeat(' ', $len - $line[1])); @@ -1017,6 +995,47 @@ protected function doRunCommand(Command $command, InputInterface $input, OutputI } } + if ($this->signalsToDispatchEvent) { + $commandSignals = $command instanceof SignalableCommandInterface ? $command->getSubscribedSignals() : []; + + if ($commandSignals || null !== $this->dispatcher) { + if (!$this->signalRegistry) { + throw new RuntimeException('Unable to subscribe to signal events. Make sure that the `pcntl` extension is installed and that "pcntl_*" functions are not disabled by your php.ini\'s "disable_functions" directive.'); + } + + if (Terminal::hasSttyAvailable()) { + $sttyMode = shell_exec('stty -g'); + + foreach ([\SIGINT, \SIGTERM] as $signal) { + $this->signalRegistry->register($signal, static function () use ($sttyMode) { + shell_exec('stty '.$sttyMode); + }); + } + } + } + + if (null !== $this->dispatcher) { + foreach ($this->signalsToDispatchEvent as $signal) { + $event = new ConsoleSignalEvent($command, $input, $output, $signal); + + $this->signalRegistry->register($signal, function ($signal, $hasNext) use ($event) { + $this->dispatcher->dispatch($event, ConsoleEvents::SIGNAL); + + // No more handlers, we try to simulate PHP default behavior + if (!$hasNext) { + if (!\in_array($signal, [\SIGUSR1, \SIGUSR2], true)) { + exit(0); + } + } + }); + } + } + + foreach ($commandSignals as $signal) { + $this->signalRegistry->register($signal, [$command, 'handleSignal']); + } + } + if (null === $this->dispatcher) { return $command->run($input, $output); } @@ -1073,19 +1092,17 @@ protected function getCommandName(InputInterface $input) /** * Gets the default input definition. * - * @return InputDefinition An InputDefinition instance + * @return InputDefinition */ protected function getDefaultInputDefinition() { return new InputDefinition([ new InputArgument('command', InputArgument::REQUIRED, 'The command to execute'), - - new InputOption('--help', '-h', InputOption::VALUE_NONE, 'Display this help message'), + new InputOption('--help', '-h', InputOption::VALUE_NONE, 'Display help for the given command. When no command is given display help for the '.$this->defaultCommand.' command'), new InputOption('--quiet', '-q', InputOption::VALUE_NONE, 'Do not output any message'), new InputOption('--verbose', '-v|vv|vvv', InputOption::VALUE_NONE, 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug'), new InputOption('--version', '-V', InputOption::VALUE_NONE, 'Display this application version'), - new InputOption('--ansi', '', InputOption::VALUE_NONE, 'Force ANSI output'), - new InputOption('--no-ansi', '', InputOption::VALUE_NONE, 'Disable ANSI output'), + new InputOption('--ansi', '', InputOption::VALUE_NEGATABLE, 'Force (or disable --no-ansi) ANSI output', null), new InputOption('--no-interaction', '-n', InputOption::VALUE_NONE, 'Do not ask any interactive question'), ]); } @@ -1093,17 +1110,17 @@ protected function getDefaultInputDefinition() /** * Gets the default commands that should always be available. * - * @return Command[] An array of default Command instances + * @return Command[] */ protected function getDefaultCommands() { - return [new HelpCommand(), new ListCommand()]; + return [new HelpCommand(), new ListCommand(), new CompleteCommand(), new DumpCompletionCommand()]; } /** * Gets the default helper set with the helpers that should always be available. * - * @return HelperSet A HelperSet instance + * @return HelperSet */ protected function getDefaultHelperSet() { @@ -1128,12 +1145,9 @@ private function getAbbreviationSuggestions(array $abbrevs): string * * This method is not part of public API and should not be used directly. * - * @param string $name The full name of the command - * @param string $limit The maximum number of parts of the namespace - * - * @return string The namespace of the command + * @return string */ - public function extractNamespace($name, $limit = null) + public function extractNamespace(string $name, int $limit = null) { $parts = explode(':', $name, -1); @@ -1144,7 +1158,7 @@ public function extractNamespace($name, $limit = null) * Finds alternative of $name among $collection, * if nothing is found in $collection, try in $abbrevs. * - * @return string[] A sorted array of similar string + * @return string[] */ private function findAlternatives(string $name, iterable $collection): array { @@ -1191,14 +1205,11 @@ private function findAlternatives(string $name, iterable $collection): array /** * Sets the default Command name. * - * @param string $commandName The Command name - * @param bool $isSingleCommand Set to true if there is only one command in this application - * - * @return self + * @return $this */ - public function setDefaultCommand($commandName, $isSingleCommand = false) + public function setDefaultCommand(string $commandName, bool $isSingleCommand = false) { - $this->defaultCommand = $commandName; + $this->defaultCommand = explode('|', ltrim($commandName, '|'))[0]; if ($isSingleCommand) { // Ensure the command exist @@ -1257,7 +1268,7 @@ private function splitStringByWidth(string $string, int $width): array /** * Returns all namespaces of the command name. * - * @return string[] The namespaces of the command + * @return string[] */ private function extractAllNamespaces(string $name): array { diff --git a/vendor/symfony/console/CHANGELOG.md b/vendor/symfony/console/CHANGELOG.md index 51592445..6662dd1e 100644 --- a/vendor/symfony/console/CHANGELOG.md +++ b/vendor/symfony/console/CHANGELOG.md @@ -1,6 +1,61 @@ CHANGELOG ========= +5.4 +--- + + * Add `TesterTrait::assertCommandIsSuccessful()` to test command + * Deprecate `HelperSet::setCommand()` and `getCommand()` without replacement + +5.3 +--- + + * Add `GithubActionReporter` to render annotations in a Github Action + * Add `InputOption::VALUE_NEGATABLE` flag to handle `--foo`/`--no-foo` options + * Add the `Command::$defaultDescription` static property and the `description` attribute + on the `console.command` tag to allow the `list` command to instantiate commands lazily + * Add option `--short` to the `list` command + * Add support for bright colors + * Add `#[AsCommand]` attribute for declaring commands on PHP 8 + * Add `Helper::width()` and `Helper::length()` + * The `--ansi` and `--no-ansi` options now default to `null`. + +5.2.0 +----- + + * Added `SingleCommandApplication::setAutoExit()` to allow testing via `CommandTester` + * added support for multiline responses to questions through `Question::setMultiline()` + and `Question::isMultiline()` + * Added `SignalRegistry` class to stack signals handlers + * Added support for signals: + * Added `Application::getSignalRegistry()` and `Application::setSignalsToDispatchEvent()` methods + * Added `SignalableCommandInterface` interface + * Added `TableCellStyle` class to customize table cell + * Removed `php ` prefix invocation from help messages. + +5.1.0 +----- + + * `Command::setHidden()` is final since Symfony 5.1 + * Add `SingleCommandApplication` + * Add `Cursor` class + +5.0.0 +----- + + * removed support for finding hidden commands using an abbreviation, use the full name instead + * removed `TableStyle::setCrossingChar()` method in favor of `TableStyle::setDefaultCrossingChar()` + * removed `TableStyle::setHorizontalBorderChar()` method in favor of `TableStyle::setDefaultCrossingChars()` + * removed `TableStyle::getHorizontalBorderChar()` method in favor of `TableStyle::getBorderChars()` + * removed `TableStyle::setVerticalBorderChar()` method in favor of `TableStyle::setVerticalBorderChars()` + * removed `TableStyle::getVerticalBorderChar()` method in favor of `TableStyle::getBorderChars()` + * removed support for returning `null` from `Command::execute()`, return `0` instead + * `ProcessHelper::run()` accepts only `array|Symfony\Component\Process\Process` for its `command` argument + * `Application::setDispatcher` accepts only `Symfony\Contracts\EventDispatcher\EventDispatcherInterface` + for its `dispatcher` argument + * renamed `Application::renderException()` and `Application::doRenderException()` + to `renderThrowable()` and `doRenderThrowable()` respectively. + 4.4.0 ----- diff --git a/vendor/symfony/console/Command/Command.php b/vendor/symfony/console/Command/Command.php index b0c1bf86..cfa18361 100644 --- a/vendor/symfony/console/Command/Command.php +++ b/vendor/symfony/console/Command/Command.php @@ -12,6 +12,9 @@ namespace Symfony\Component\Console\Command; use Symfony\Component\Console\Application; +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Completion\CompletionInput; +use Symfony\Component\Console\Completion\CompletionSuggestions; use Symfony\Component\Console\Exception\ExceptionInterface; use Symfony\Component\Console\Exception\InvalidArgumentException; use Symfony\Component\Console\Exception\LogicException; @@ -29,11 +32,21 @@ */ class Command { + // see https://tldp.org/LDP/abs/html/exitcodes.html + public const SUCCESS = 0; + public const FAILURE = 1; + public const INVALID = 2; + /** * @var string|null The default command name */ protected static $defaultName; + /** + * @var string|null The default command description + */ + protected static $defaultDescription; + private $application; private $name; private $processTitle; @@ -42,25 +55,42 @@ class Command private $hidden = false; private $help = ''; private $description = ''; + private $fullDefinition; private $ignoreValidationErrors = false; - private $applicationDefinitionMerged = false; - private $applicationDefinitionMergedWithArgs = false; private $code; private $synopsis = []; private $usages = []; private $helperSet; /** - * @return string|null The default command name or null when no default name is set + * @return string|null */ public static function getDefaultName() { $class = static::class; + + if (\PHP_VERSION_ID >= 80000 && $attribute = (new \ReflectionClass($class))->getAttributes(AsCommand::class)) { + return $attribute[0]->newInstance()->name; + } + $r = new \ReflectionProperty($class, 'defaultName'); return $class === $r->class ? static::$defaultName : null; } + public static function getDefaultDescription(): ?string + { + $class = static::class; + + if (\PHP_VERSION_ID >= 80000 && $attribute = (new \ReflectionClass($class))->getAttributes(AsCommand::class)) { + return $attribute[0]->newInstance()->description; + } + + $r = new \ReflectionProperty($class, 'defaultDescription'); + + return $class === $r->class ? static::$defaultDescription : null; + } + /** * @param string|null $name The name of the command; passing null means it must be set in configure() * @@ -70,10 +100,25 @@ public function __construct(string $name = null) { $this->definition = new InputDefinition(); - if (null !== $name || null !== $name = static::getDefaultName()) { + if (null === $name && null !== $name = static::getDefaultName()) { + $aliases = explode('|', $name); + + if ('' === $name = array_shift($aliases)) { + $this->setHidden(true); + $name = array_shift($aliases); + } + + $this->setAliases($aliases); + } + + if (null !== $name) { $this->setName($name); } + if ('' === $this->description) { + $this->setDescription(static::getDefaultDescription() ?? ''); + } + $this->configure(); } @@ -95,6 +140,8 @@ public function setApplication(Application $application = null) } else { $this->helperSet = null; } + + $this->fullDefinition = null; } public function setHelperSet(HelperSet $helperSet) @@ -105,7 +152,7 @@ public function setHelperSet(HelperSet $helperSet) /** * Gets the helper set. * - * @return HelperSet|null A HelperSet instance + * @return HelperSet|null */ public function getHelperSet() { @@ -115,7 +162,7 @@ public function getHelperSet() /** * Gets the application instance for this command. * - * @return Application|null An Application instance + * @return Application|null */ public function getApplication() { @@ -125,7 +172,7 @@ public function getApplication() /** * Checks whether the command is enabled or not in the current environment. * - * Override this to check for x or y and return false if the command can not + * Override this to check for x or y and return false if the command cannot * run properly under the current conditions. * * @return bool @@ -202,16 +249,12 @@ protected function initialize(InputInterface $input, OutputInterface $output) */ public function run(InputInterface $input, OutputInterface $output) { - // force the creation of the synopsis before the merge with the app definition - $this->getSynopsis(true); - $this->getSynopsis(false); - // add the application arguments and options $this->mergeApplicationDefinition(); // bind the input against the command specific arguments/options try { - $input->bind($this->definition); + $input->bind($this->getDefinition()); } catch (ExceptionInterface $e) { if (!$this->ignoreValidationErrors) { throw $e; @@ -255,13 +298,20 @@ public function run(InputInterface $input, OutputInterface $output) $statusCode = $this->execute($input, $output); if (!\is_int($statusCode)) { - @trigger_error(sprintf('Return value of "%s::execute()" should always be of the type int since Symfony 4.4, %s returned.', static::class, \gettype($statusCode)), \E_USER_DEPRECATED); + throw new \TypeError(sprintf('Return value of "%s::execute()" must be of the type int, "%s" returned.', static::class, get_debug_type($statusCode))); } } return is_numeric($statusCode) ? (int) $statusCode : 0; } + /** + * Adds suggestions to $suggestions for the current completion input (e.g. option or argument). + */ + public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void + { + } + /** * Sets the code to execute when running this command. * @@ -303,23 +353,24 @@ public function setCode(callable $code) * This method is not part of public API and should not be used directly. * * @param bool $mergeArgs Whether to merge or not the Application definition arguments to Command definition arguments + * + * @internal */ - public function mergeApplicationDefinition($mergeArgs = true) + public function mergeApplicationDefinition(bool $mergeArgs = true) { - if (null === $this->application || (true === $this->applicationDefinitionMerged && ($this->applicationDefinitionMergedWithArgs || !$mergeArgs))) { + if (null === $this->application) { return; } - $this->definition->addOptions($this->application->getDefinition()->getOptions()); - - $this->applicationDefinitionMerged = true; + $this->fullDefinition = new InputDefinition(); + $this->fullDefinition->setOptions($this->definition->getOptions()); + $this->fullDefinition->addOptions($this->application->getDefinition()->getOptions()); if ($mergeArgs) { - $currentArguments = $this->definition->getArguments(); - $this->definition->setArguments($this->application->getDefinition()->getArguments()); - $this->definition->addArguments($currentArguments); - - $this->applicationDefinitionMergedWithArgs = true; + $this->fullDefinition->setArguments($this->application->getDefinition()->getArguments()); + $this->fullDefinition->addArguments($this->definition->getArguments()); + } else { + $this->fullDefinition->setArguments($this->definition->getArguments()); } } @@ -338,7 +389,7 @@ public function setDefinition($definition) $this->definition->setDefinition($definition); } - $this->applicationDefinitionMerged = false; + $this->fullDefinition = null; return $this; } @@ -346,15 +397,11 @@ public function setDefinition($definition) /** * Gets the InputDefinition attached to this Command. * - * @return InputDefinition An InputDefinition instance + * @return InputDefinition */ public function getDefinition() { - if (null === $this->definition) { - throw new LogicException(sprintf('Command class "%s" is not correctly initialized. You probably forgot to call the parent constructor.', static::class)); - } - - return $this->definition; + return $this->fullDefinition ?? $this->getNativeDefinition(); } /** @@ -365,28 +412,33 @@ public function getDefinition() * * This method is not part of public API and should not be used directly. * - * @return InputDefinition An InputDefinition instance + * @return InputDefinition */ public function getNativeDefinition() { - return $this->getDefinition(); + if (null === $this->definition) { + throw new LogicException(sprintf('Command class "%s" is not correctly initialized. You probably forgot to call the parent constructor.', static::class)); + } + + return $this->definition; } /** * Adds an argument. * - * @param string $name The argument name - * @param int|null $mode The argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL - * @param string $description A description text - * @param mixed $default The default value (for InputArgument::OPTIONAL mode only) - * - * @throws InvalidArgumentException When argument mode is not valid + * @param int|null $mode The argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL + * @param mixed $default The default value (for InputArgument::OPTIONAL mode only) * * @return $this + * + * @throws InvalidArgumentException When argument mode is not valid */ - public function addArgument($name, $mode = null, $description = '', $default = null) + public function addArgument(string $name, int $mode = null, string $description = '', $default = null) { $this->definition->addArgument(new InputArgument($name, $mode, $description, $default)); + if (null !== $this->fullDefinition) { + $this->fullDefinition->addArgument(new InputArgument($name, $mode, $description, $default)); + } return $this; } @@ -394,19 +446,20 @@ public function addArgument($name, $mode = null, $description = '', $default = n /** * Adds an option. * - * @param string $name The option name - * @param string|array|null $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts - * @param int|null $mode The option mode: One of the InputOption::VALUE_* constants - * @param string $description A description text - * @param mixed $default The default value (must be null for InputOption::VALUE_NONE) - * - * @throws InvalidArgumentException If option mode is invalid or incompatible + * @param string|array|null $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts + * @param int|null $mode The option mode: One of the InputOption::VALUE_* constants + * @param mixed $default The default value (must be null for InputOption::VALUE_NONE) * * @return $this + * + * @throws InvalidArgumentException If option mode is invalid or incompatible */ - public function addOption($name, $shortcut = null, $mode = null, $description = '', $default = null) + public function addOption(string $name, $shortcut = null, int $mode = null, string $description = '', $default = null) { $this->definition->addOption(new InputOption($name, $shortcut, $mode, $description, $default)); + if (null !== $this->fullDefinition) { + $this->fullDefinition->addOption(new InputOption($name, $shortcut, $mode, $description, $default)); + } return $this; } @@ -419,13 +472,11 @@ public function addOption($name, $shortcut = null, $mode = null, $description = * * $command->setName('foo:bar'); * - * @param string $name The command name - * * @return $this * * @throws InvalidArgumentException When the name is invalid */ - public function setName($name) + public function setName(string $name) { $this->validateName($name); @@ -440,11 +491,9 @@ public function setName($name) * This feature should be used only when creating a long process command, * like a daemon. * - * @param string $title The process title - * * @return $this */ - public function setProcessTitle($title) + public function setProcessTitle(string $title) { $this->processTitle = $title; @@ -463,12 +512,15 @@ public function getName() /** * @param bool $hidden Whether or not the command should be hidden from the list of commands + * The default value will be true in Symfony 6.0 * * @return $this + * + * @final since Symfony 5.1 */ - public function setHidden($hidden) + public function setHidden(bool $hidden /* = true */) { - $this->hidden = (bool) $hidden; + $this->hidden = $hidden; return $this; } @@ -484,11 +536,9 @@ public function isHidden() /** * Sets the description for the command. * - * @param string $description The description for the command - * * @return $this */ - public function setDescription($description) + public function setDescription(string $description) { $this->description = $description; @@ -498,7 +548,7 @@ public function setDescription($description) /** * Returns the description for the command. * - * @return string The description for the command + * @return string */ public function getDescription() { @@ -508,11 +558,9 @@ public function getDescription() /** * Sets the help for the command. * - * @param string $help The help for the command - * * @return $this */ - public function setHelp($help) + public function setHelp(string $help) { $this->help = $help; @@ -522,7 +570,7 @@ public function setHelp($help) /** * Returns the help for the command. * - * @return string The help for the command + * @return string */ public function getHelp() { @@ -533,7 +581,7 @@ public function getHelp() * Returns the processed help for the command replacing the %command.name% and * %command.full_name% patterns with the real values dynamically. * - * @return string The processed help for the command + * @return string */ public function getProcessedHelp() { @@ -561,17 +609,16 @@ public function getProcessedHelp() * * @throws InvalidArgumentException When an alias is invalid */ - public function setAliases($aliases) + public function setAliases(iterable $aliases) { - if (!\is_array($aliases) && !$aliases instanceof \Traversable) { - throw new InvalidArgumentException('$aliases must be an array or an instance of \Traversable.'); - } + $list = []; foreach ($aliases as $alias) { $this->validateName($alias); + $list[] = $alias; } - $this->aliases = $aliases; + $this->aliases = \is_array($aliases) ? $aliases : $list; return $this; } @@ -579,7 +626,7 @@ public function setAliases($aliases) /** * Returns the aliases for the command. * - * @return array An array of aliases for the command + * @return array */ public function getAliases() { @@ -591,9 +638,9 @@ public function getAliases() * * @param bool $short Whether to show the short version of the synopsis (with options folded) or not * - * @return string The synopsis + * @return string */ - public function getSynopsis($short = false) + public function getSynopsis(bool $short = false) { $key = $short ? 'short' : 'long'; @@ -605,13 +652,11 @@ public function getSynopsis($short = false) } /** - * Add a command usage example. - * - * @param string $usage The usage, it'll be prefixed with the command name + * Add a command usage example, it'll be prefixed with the command name. * * @return $this */ - public function addUsage($usage) + public function addUsage(string $usage) { if (!str_starts_with($usage, $this->name)) { $usage = sprintf('%s %s', $this->name, $usage); @@ -635,14 +680,12 @@ public function getUsages() /** * Gets a helper instance by name. * - * @param string $name The helper name - * - * @return mixed The helper value + * @return mixed * * @throws LogicException if no HelperSet is defined * @throws InvalidArgumentException if the helper is not defined */ - public function getHelper($name) + public function getHelper(string $name) { if (null === $this->helperSet) { throw new LogicException(sprintf('Cannot retrieve helper "%s" because there is no HelperSet defined. Did you forget to add your command to the application or to set the application on the command using the setApplication() method? You can also set the HelperSet directly using the setHelperSet() method.', $name)); diff --git a/vendor/symfony/console/Command/HelpCommand.php b/vendor/symfony/console/Command/HelpCommand.php index cece7829..c66ef463 100644 --- a/vendor/symfony/console/Command/HelpCommand.php +++ b/vendor/symfony/console/Command/HelpCommand.php @@ -11,6 +11,9 @@ namespace Symfony\Component\Console\Command; +use Symfony\Component\Console\Completion\CompletionInput; +use Symfony\Component\Console\Completion\CompletionSuggestions; +use Symfony\Component\Console\Descriptor\ApplicationDescription; use Symfony\Component\Console\Helper\DescriptorHelper; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -44,11 +47,11 @@ protected function configure() ->setHelp(<<<'EOF' The %command.name% command displays help for a given command: - php %command.full_name% list + %command.full_name% list You can also output the help in other formats by using the --format option: - php %command.full_name% --format=xml list + %command.full_name% --format=xml list To display the list of available commands, please use the list command. EOF @@ -80,4 +83,19 @@ protected function execute(InputInterface $input, OutputInterface $output) return 0; } + + public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void + { + if ($input->mustSuggestArgumentValuesFor('command_name')) { + $descriptor = new ApplicationDescription($this->getApplication()); + $suggestions->suggestValues(array_keys($descriptor->getCommands())); + + return; + } + + if ($input->mustSuggestOptionValuesFor('format')) { + $helper = new DescriptorHelper(); + $suggestions->suggestValues($helper->getFormats()); + } + } } diff --git a/vendor/symfony/console/Command/ListCommand.php b/vendor/symfony/console/Command/ListCommand.php index 44324a5e..f04a4ef6 100644 --- a/vendor/symfony/console/Command/ListCommand.php +++ b/vendor/symfony/console/Command/ListCommand.php @@ -11,9 +11,11 @@ namespace Symfony\Component\Console\Command; +use Symfony\Component\Console\Completion\CompletionInput; +use Symfony\Component\Console\Completion\CompletionSuggestions; +use Symfony\Component\Console\Descriptor\ApplicationDescription; use Symfony\Component\Console\Helper\DescriptorHelper; use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputDefinition; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; @@ -32,37 +34,34 @@ protected function configure() { $this ->setName('list') - ->setDefinition($this->createDefinition()) + ->setDefinition([ + new InputArgument('namespace', InputArgument::OPTIONAL, 'The namespace name'), + new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command list'), + new InputOption('format', null, InputOption::VALUE_REQUIRED, 'The output format (txt, xml, json, or md)', 'txt'), + new InputOption('short', null, InputOption::VALUE_NONE, 'To skip describing commands\' arguments'), + ]) ->setDescription('List commands') ->setHelp(<<<'EOF' The %command.name% command lists all commands: - php %command.full_name% + %command.full_name% You can also display the commands for a specific namespace: - php %command.full_name% test + %command.full_name% test You can also output the information in other formats by using the --format option: - php %command.full_name% --format=xml + %command.full_name% --format=xml It's also possible to get raw list of commands (useful for embedding command runner): - php %command.full_name% --raw + %command.full_name% --raw EOF ) ; } - /** - * {@inheritdoc} - */ - public function getNativeDefinition() - { - return $this->createDefinition(); - } - /** * {@inheritdoc} */ @@ -73,17 +72,24 @@ protected function execute(InputInterface $input, OutputInterface $output) 'format' => $input->getOption('format'), 'raw_text' => $input->getOption('raw'), 'namespace' => $input->getArgument('namespace'), + 'short' => $input->getOption('short'), ]); return 0; } - private function createDefinition(): InputDefinition + public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void { - return new InputDefinition([ - new InputArgument('namespace', InputArgument::OPTIONAL, 'The namespace name'), - new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command list'), - new InputOption('format', null, InputOption::VALUE_REQUIRED, 'The output format (txt, xml, json, or md)', 'txt'), - ]); + if ($input->mustSuggestArgumentValuesFor('namespace')) { + $descriptor = new ApplicationDescription($this->getApplication()); + $suggestions->suggestValues(array_keys($descriptor->getNamespaces())); + + return; + } + + if ($input->mustSuggestOptionValuesFor('format')) { + $helper = new DescriptorHelper(); + $suggestions->suggestValues($helper->getFormats()); + } } } diff --git a/vendor/symfony/console/Command/LockableTrait.php b/vendor/symfony/console/Command/LockableTrait.php index 60cfe360..b1856dca 100644 --- a/vendor/symfony/console/Command/LockableTrait.php +++ b/vendor/symfony/console/Command/LockableTrait.php @@ -12,8 +12,8 @@ namespace Symfony\Component\Console\Command; use Symfony\Component\Console\Exception\LogicException; -use Symfony\Component\Lock\Lock; use Symfony\Component\Lock\LockFactory; +use Symfony\Component\Lock\LockInterface; use Symfony\Component\Lock\Store\FlockStore; use Symfony\Component\Lock\Store\SemaphoreStore; @@ -24,7 +24,7 @@ */ trait LockableTrait { - /** @var Lock */ + /** @var LockInterface|null */ private $lock; /** diff --git a/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php b/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php index ca1029cb..0adaf886 100644 --- a/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php +++ b/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php @@ -22,25 +22,21 @@ interface CommandLoaderInterface /** * Loads a command. * - * @param string $name - * * @return Command * * @throws CommandNotFoundException */ - public function get($name); + public function get(string $name); /** * Checks if a command exists. * - * @param string $name - * * @return bool */ - public function has($name); + public function has(string $name); /** - * @return string[] All registered command names + * @return string[] */ public function getNames(); } diff --git a/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php b/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php index 50e5950a..ddccb3d4 100644 --- a/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php +++ b/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php @@ -36,7 +36,7 @@ public function __construct(ContainerInterface $container, array $commandMap) /** * {@inheritdoc} */ - public function get($name) + public function get(string $name) { if (!$this->has($name)) { throw new CommandNotFoundException(sprintf('Command "%s" does not exist.', $name)); @@ -48,7 +48,7 @@ public function get($name) /** * {@inheritdoc} */ - public function has($name) + public function has(string $name) { return isset($this->commandMap[$name]) && $this->container->has($this->commandMap[$name]); } diff --git a/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php b/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php index d9c20557..7e2db346 100644 --- a/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php +++ b/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php @@ -33,7 +33,7 @@ public function __construct(array $factories) /** * {@inheritdoc} */ - public function has($name) + public function has(string $name) { return isset($this->factories[$name]); } @@ -41,7 +41,7 @@ public function has($name) /** * {@inheritdoc} */ - public function get($name) + public function get(string $name) { if (!isset($this->factories[$name])) { throw new CommandNotFoundException(sprintf('Command "%s" does not exist.', $name)); diff --git a/vendor/symfony/console/ConsoleEvents.php b/vendor/symfony/console/ConsoleEvents.php index 99b423c8..6ae8f32b 100644 --- a/vendor/symfony/console/ConsoleEvents.php +++ b/vendor/symfony/console/ConsoleEvents.php @@ -11,6 +11,11 @@ namespace Symfony\Component\Console; +use Symfony\Component\Console\Event\ConsoleCommandEvent; +use Symfony\Component\Console\Event\ConsoleErrorEvent; +use Symfony\Component\Console\Event\ConsoleSignalEvent; +use Symfony\Component\Console\Event\ConsoleTerminateEvent; + /** * Contains all events dispatched by an Application. * @@ -27,6 +32,14 @@ final class ConsoleEvents */ public const COMMAND = 'console.command'; + /** + * The SIGNAL event allows you to perform some actions + * after the command execution was interrupted. + * + * @Event("Symfony\Component\Console\Event\ConsoleSignalEvent") + */ + public const SIGNAL = 'console.signal'; + /** * The TERMINATE event allows you to attach listeners after a command is * executed by the console. @@ -44,4 +57,16 @@ final class ConsoleEvents * @Event("Symfony\Component\Console\Event\ConsoleErrorEvent") */ public const ERROR = 'console.error'; + + /** + * Event aliases. + * + * These aliases can be consumed by RegisterListenersPass. + */ + public const ALIASES = [ + ConsoleCommandEvent::class => self::COMMAND, + ConsoleErrorEvent::class => self::ERROR, + ConsoleSignalEvent::class => self::SIGNAL, + ConsoleTerminateEvent::class => self::TERMINATE, + ]; } diff --git a/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php b/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php index d9449dc5..1fbb212e 100644 --- a/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php +++ b/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php @@ -12,11 +12,14 @@ namespace Symfony\Component\Console\DependencyInjection; use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Command\LazyCommand; use Symfony\Component\Console\CommandLoader\ContainerCommandLoader; +use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\DependencyInjection\TypedReference; /** @@ -28,11 +31,19 @@ class AddConsoleCommandPass implements CompilerPassInterface { private $commandLoaderServiceId; private $commandTag; + private $noPreloadTag; + private $privateTagName; - public function __construct(string $commandLoaderServiceId = 'console.command_loader', string $commandTag = 'console.command') + public function __construct(string $commandLoaderServiceId = 'console.command_loader', string $commandTag = 'console.command', string $noPreloadTag = 'container.no_preload', string $privateTagName = 'container.private') { + if (0 < \func_num_args()) { + trigger_deprecation('symfony/console', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); + } + $this->commandLoaderServiceId = $commandLoaderServiceId; $this->commandTag = $commandTag; + $this->noPreloadTag = $noPreloadTag; + $this->privateTagName = $privateTagName; } public function process(ContainerBuilder $container) @@ -44,10 +55,11 @@ public function process(ContainerBuilder $container) foreach ($commandServices as $id => $tags) { $definition = $container->getDefinition($id); + $definition->addTag($this->noPreloadTag); $class = $container->getParameterBag()->resolveValue($definition->getClass()); if (isset($tags[0]['command'])) { - $commandName = $tags[0]['command']; + $aliases = $tags[0]['command']; } else { if (!$r = $container->getReflectionClass($class)) { throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id)); @@ -55,11 +67,18 @@ public function process(ContainerBuilder $container) if (!$r->isSubclassOf(Command::class)) { throw new InvalidArgumentException(sprintf('The service "%s" tagged "%s" must be a subclass of "%s".', $id, $this->commandTag, Command::class)); } - $commandName = null !== $class::getDefaultName() ? str_replace('%', '%%', $class::getDefaultName()) : null; + $aliases = str_replace('%', '%%', $class::getDefaultName() ?? ''); + } + + $aliases = explode('|', $aliases ?? ''); + $commandName = array_shift($aliases); + + if ($isHidden = '' === $commandName) { + $commandName = array_shift($aliases); } if (null === $commandName) { - if (!$definition->isPublic() || $definition->isPrivate()) { + if (!$definition->isPublic() || $definition->isPrivate() || $definition->hasTag($this->privateTagName)) { $commandId = 'console.command.public_alias.'.$id; $container->setAlias($commandId, $id)->setPublic(true); $id = $commandId; @@ -69,16 +88,23 @@ public function process(ContainerBuilder $container) continue; } + $description = $tags[0]['description'] ?? null; + unset($tags[0]); $lazyCommandMap[$commandName] = $id; $lazyCommandRefs[$id] = new TypedReference($id, $class); - $aliases = []; + + foreach ($aliases as $alias) { + $lazyCommandMap[$alias] = $id; + } foreach ($tags as $tag) { if (isset($tag['command'])) { $aliases[] = $tag['command']; $lazyCommandMap[$tag['command']] = $id; } + + $description = $description ?? $tag['description'] ?? null; } $definition->addMethodCall('setName', [$commandName]); @@ -86,11 +112,35 @@ public function process(ContainerBuilder $container) if ($aliases) { $definition->addMethodCall('setAliases', [$aliases]); } + + if ($isHidden) { + $definition->addMethodCall('setHidden', [true]); + } + + if (!$description) { + if (!$r = $container->getReflectionClass($class)) { + throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id)); + } + if (!$r->isSubclassOf(Command::class)) { + throw new InvalidArgumentException(sprintf('The service "%s" tagged "%s" must be a subclass of "%s".', $id, $this->commandTag, Command::class)); + } + $description = str_replace('%', '%%', $class::getDefaultDescription() ?? ''); + } + + if ($description) { + $definition->addMethodCall('setDescription', [$description]); + + $container->register('.'.$id.'.lazy', LazyCommand::class) + ->setArguments([$commandName, $aliases, $description, $isHidden, new ServiceClosureArgument($lazyCommandRefs[$id])]); + + $lazyCommandRefs[$id] = new Reference('.'.$id.'.lazy'); + } } $container ->register($this->commandLoaderServiceId, ContainerCommandLoader::class) ->setPublic(true) + ->addTag($this->noPreloadTag) ->setArguments([ServiceLocatorTagPass::register($container, $lazyCommandRefs), $lazyCommandMap]); $container->setParameter('console.command.ids', $serviceIds); diff --git a/vendor/symfony/console/Descriptor/ApplicationDescription.php b/vendor/symfony/console/Descriptor/ApplicationDescription.php index 91b18460..2a3acc99 100644 --- a/vendor/symfony/console/Descriptor/ApplicationDescription.php +++ b/vendor/symfony/console/Descriptor/ApplicationDescription.php @@ -34,12 +34,12 @@ class ApplicationDescription private $namespaces; /** - * @var Command[] + * @var array */ private $commands; /** - * @var Command[] + * @var array */ private $aliases; diff --git a/vendor/symfony/console/Descriptor/Descriptor.php b/vendor/symfony/console/Descriptor/Descriptor.php index 9c3878d1..a3648301 100644 --- a/vendor/symfony/console/Descriptor/Descriptor.php +++ b/vendor/symfony/console/Descriptor/Descriptor.php @@ -34,7 +34,7 @@ abstract class Descriptor implements DescriptorInterface /** * {@inheritdoc} */ - public function describe(OutputInterface $output, $object, array $options = []) + public function describe(OutputInterface $output, object $object, array $options = []) { $this->output = $output; @@ -55,17 +55,14 @@ public function describe(OutputInterface $output, $object, array $options = []) $this->describeApplication($object, $options); break; default: - throw new InvalidArgumentException(sprintf('Object of type "%s" is not describable.', \get_class($object))); + throw new InvalidArgumentException(sprintf('Object of type "%s" is not describable.', get_debug_type($object))); } } /** * Writes content to output. - * - * @param string $content - * @param bool $decorated */ - protected function write($content, $decorated = false) + protected function write(string $content, bool $decorated = false) { $this->output->write($content, false, $decorated ? OutputInterface::OUTPUT_NORMAL : OutputInterface::OUTPUT_RAW); } diff --git a/vendor/symfony/console/Descriptor/DescriptorInterface.php b/vendor/symfony/console/Descriptor/DescriptorInterface.php index e3184a6a..ebea3036 100644 --- a/vendor/symfony/console/Descriptor/DescriptorInterface.php +++ b/vendor/symfony/console/Descriptor/DescriptorInterface.php @@ -20,10 +20,5 @@ */ interface DescriptorInterface { - /** - * Describes an object if supported. - * - * @param object $object - */ - public function describe(OutputInterface $output, $object, array $options = []); + public function describe(OutputInterface $output, object $object, array $options = []); } diff --git a/vendor/symfony/console/Descriptor/JsonDescriptor.php b/vendor/symfony/console/Descriptor/JsonDescriptor.php index 4c09e126..1d286594 100644 --- a/vendor/symfony/console/Descriptor/JsonDescriptor.php +++ b/vendor/symfony/console/Descriptor/JsonDescriptor.php @@ -40,6 +40,9 @@ protected function describeInputArgument(InputArgument $argument, array $options protected function describeInputOption(InputOption $option, array $options = []) { $this->writeData($this->getInputOptionData($option), $options); + if ($option->isNegatable()) { + $this->writeData($this->getInputOptionData($option, true), $options); + } } /** @@ -55,7 +58,7 @@ protected function describeInputDefinition(InputDefinition $definition, array $o */ protected function describeCommand(Command $command, array $options = []) { - $this->writeData($this->getCommandData($command), $options); + $this->writeData($this->getCommandData($command, $options['short'] ?? false), $options); } /** @@ -68,7 +71,7 @@ protected function describeApplication(Application $application, array $options $commands = []; foreach ($description->getCommands() as $command) { - $commands[] = $this->getCommandData($command); + $commands[] = $this->getCommandData($command, $options['short'] ?? false); } $data = []; @@ -111,9 +114,17 @@ private function getInputArgumentData(InputArgument $argument): array ]; } - private function getInputOptionData(InputOption $option): array + private function getInputOptionData(InputOption $option, bool $negated = false): array { - return [ + return $negated ? [ + 'name' => '--no-'.$option->getName(), + 'shortcut' => '', + 'accept_value' => false, + 'is_value_required' => false, + 'is_multiple' => false, + 'description' => 'Negate the "--'.$option->getName().'" option', + 'default' => false, + ] : [ 'name' => '--'.$option->getName(), 'shortcut' => $option->getShortcut() ? '-'.str_replace('|', '|-', $option->getShortcut()) : '', 'accept_value' => $option->acceptValue(), @@ -134,23 +145,37 @@ private function getInputDefinitionData(InputDefinition $definition): array $inputOptions = []; foreach ($definition->getOptions() as $name => $option) { $inputOptions[$name] = $this->getInputOptionData($option); + if ($option->isNegatable()) { + $inputOptions['no-'.$name] = $this->getInputOptionData($option, true); + } } return ['arguments' => $inputArguments, 'options' => $inputOptions]; } - private function getCommandData(Command $command): array + private function getCommandData(Command $command, bool $short = false): array { - $command->getSynopsis(); - $command->mergeApplicationDefinition(false); - - return [ + $data = [ 'name' => $command->getName(), - 'usage' => array_merge([$command->getSynopsis()], $command->getUsages(), $command->getAliases()), 'description' => $command->getDescription(), - 'help' => $command->getProcessedHelp(), - 'definition' => $this->getInputDefinitionData($command->getNativeDefinition()), - 'hidden' => $command->isHidden(), ]; + + if ($short) { + $data += [ + 'usage' => $command->getAliases(), + ]; + } else { + $command->mergeApplicationDefinition(false); + + $data += [ + 'usage' => array_merge([$command->getSynopsis()], $command->getUsages(), $command->getAliases()), + 'help' => $command->getProcessedHelp(), + 'definition' => $this->getInputDefinitionData($command->getDefinition()), + ]; + } + + $data['hidden'] = $command->isHidden(); + + return $data; } } diff --git a/vendor/symfony/console/Descriptor/MarkdownDescriptor.php b/vendor/symfony/console/Descriptor/MarkdownDescriptor.php index 9a9d2807..21ceca6c 100644 --- a/vendor/symfony/console/Descriptor/MarkdownDescriptor.php +++ b/vendor/symfony/console/Descriptor/MarkdownDescriptor.php @@ -31,7 +31,7 @@ class MarkdownDescriptor extends Descriptor /** * {@inheritdoc} */ - public function describe(OutputInterface $output, $object, array $options = []) + public function describe(OutputInterface $output, object $object, array $options = []) { $decorated = $output->isDecorated(); $output->setDecorated(false); @@ -44,7 +44,7 @@ public function describe(OutputInterface $output, $object, array $options = []) /** * {@inheritdoc} */ - protected function write($content, $decorated = true) + protected function write(string $content, bool $decorated = true) { parent::write($content, $decorated); } @@ -69,6 +69,9 @@ protected function describeInputArgument(InputArgument $argument, array $options protected function describeInputOption(InputOption $option, array $options = []) { $name = '--'.$option->getName(); + if ($option->isNegatable()) { + $name .= '|--no-'.$option->getName(); + } if ($option->getShortcut()) { $name .= '|-'.str_replace('|', '|-', $option->getShortcut()).''; } @@ -79,6 +82,7 @@ protected function describeInputOption(InputOption $option, array $options = []) .'* Accept value: '.($option->acceptValue() ? 'yes' : 'no')."\n" .'* Is value required: '.($option->isValueRequired() ? 'yes' : 'no')."\n" .'* Is multiple: '.($option->isArray() ? 'yes' : 'no')."\n" + .'* Is negatable: '.($option->isNegatable() ? 'yes' : 'no')."\n" .'* Default: `'.str_replace("\n", '', var_export($option->getDefault(), true)).'`' ); } @@ -92,7 +96,9 @@ protected function describeInputDefinition(InputDefinition $definition, array $o $this->write('### Arguments'); foreach ($definition->getArguments() as $argument) { $this->write("\n\n"); - $this->write($this->describeInputArgument($argument)); + if (null !== $describeInputArgument = $this->describeInputArgument($argument)) { + $this->write($describeInputArgument); + } } } @@ -104,7 +110,9 @@ protected function describeInputDefinition(InputDefinition $definition, array $o $this->write('### Options'); foreach ($definition->getOptions() as $option) { $this->write("\n\n"); - $this->write($this->describeInputOption($option)); + if (null !== $describeInputOption = $this->describeInputOption($option)) { + $this->write($describeInputOption); + } } } } @@ -114,12 +122,25 @@ protected function describeInputDefinition(InputDefinition $definition, array $o */ protected function describeCommand(Command $command, array $options = []) { - $command->getSynopsis(); + if ($options['short'] ?? false) { + $this->write( + '`'.$command->getName()."`\n" + .str_repeat('-', Helper::width($command->getName()) + 2)."\n\n" + .($command->getDescription() ? $command->getDescription()."\n\n" : '') + .'### Usage'."\n\n" + .array_reduce($command->getAliases(), function ($carry, $usage) { + return $carry.'* `'.$usage.'`'."\n"; + }) + ); + + return; + } + $command->mergeApplicationDefinition(false); $this->write( '`'.$command->getName()."`\n" - .str_repeat('-', Helper::strlen($command->getName()) + 2)."\n\n" + .str_repeat('-', Helper::width($command->getName()) + 2)."\n\n" .($command->getDescription() ? $command->getDescription()."\n\n" : '') .'### Usage'."\n\n" .array_reduce(array_merge([$command->getSynopsis()], $command->getAliases(), $command->getUsages()), function ($carry, $usage) { @@ -132,9 +153,10 @@ protected function describeCommand(Command $command, array $options = []) $this->write($help); } - if ($command->getNativeDefinition()) { + $definition = $command->getDefinition(); + if ($definition->getOptions() || $definition->getArguments()) { $this->write("\n\n"); - $this->describeInputDefinition($command->getNativeDefinition()); + $this->describeInputDefinition($definition); } } @@ -147,7 +169,7 @@ protected function describeApplication(Application $application, array $options $description = new ApplicationDescription($application, $describedNamespace); $title = $this->getApplicationTitle($application); - $this->write($title."\n".str_repeat('=', Helper::strlen($title))); + $this->write($title."\n".str_repeat('=', Helper::width($title))); foreach ($description->getNamespaces() as $namespace) { if (ApplicationDescription::GLOBAL_NAMESPACE !== $namespace['id']) { @@ -163,7 +185,9 @@ protected function describeApplication(Application $application, array $options foreach ($description->getCommands() as $command) { $this->write("\n\n"); - $this->write($this->describeCommand($command)); + if (null !== $describeCommand = $this->describeCommand($command, $options)) { + $this->write($describeCommand); + } } } diff --git a/vendor/symfony/console/Descriptor/TextDescriptor.php b/vendor/symfony/console/Descriptor/TextDescriptor.php index 7d4d5f0b..fbb140ae 100644 --- a/vendor/symfony/console/Descriptor/TextDescriptor.php +++ b/vendor/symfony/console/Descriptor/TextDescriptor.php @@ -39,7 +39,7 @@ protected function describeInputArgument(InputArgument $argument, array $options $default = ''; } - $totalWidth = $options['total_width'] ?? Helper::strlen($argument->getName()); + $totalWidth = $options['total_width'] ?? Helper::width($argument->getName()); $spacingWidth = $totalWidth - \strlen($argument->getName()); $this->writeText(sprintf(' %s %s%s%s', @@ -74,10 +74,10 @@ protected function describeInputOption(InputOption $option, array $options = []) $totalWidth = $options['total_width'] ?? $this->calculateTotalWidthForOptions([$option]); $synopsis = sprintf('%s%s', $option->getShortcut() ? sprintf('-%s, ', $option->getShortcut()) : ' ', - sprintf('--%s%s', $option->getName(), $value) + sprintf($option->isNegatable() ? '--%1$s|--no-%1$s' : '--%1$s%2$s', $option->getName(), $value) ); - $spacingWidth = $totalWidth - Helper::strlen($synopsis); + $spacingWidth = $totalWidth - Helper::width($synopsis); $this->writeText(sprintf(' %s %s%s%s%s', $synopsis, @@ -96,7 +96,7 @@ protected function describeInputDefinition(InputDefinition $definition, array $o { $totalWidth = $this->calculateTotalWidthForOptions($definition->getOptions()); foreach ($definition->getArguments() as $argument) { - $totalWidth = max($totalWidth, Helper::strlen($argument->getName())); + $totalWidth = max($totalWidth, Helper::width($argument->getName())); } if ($definition->getArguments()) { @@ -136,8 +136,6 @@ protected function describeInputDefinition(InputDefinition $definition, array $o */ protected function describeCommand(Command $command, array $options = []) { - $command->getSynopsis(true); - $command->getSynopsis(false); $command->mergeApplicationDefinition(false); if ($description = $command->getDescription()) { @@ -154,7 +152,7 @@ protected function describeCommand(Command $command, array $options = []) } $this->writeText("\n"); - $definition = $command->getNativeDefinition(); + $definition = $command->getDefinition(); if ($definition->getOptions() || $definition->getArguments()) { $this->writeText("\n"); $this->describeInputDefinition($definition, $options); @@ -236,7 +234,7 @@ protected function describeApplication(Application $application, array $options foreach ($namespace['commands'] as $name) { $this->writeText("\n"); - $spacingWidth = $width - Helper::strlen($name); + $spacingWidth = $width - Helper::width($name); $command = $commands[$name]; $commandAliases = $name === $command->getName() ? $this->getCommandAliasesText($command) : ''; $this->writeText(sprintf(' %s%s%s', $name, str_repeat(' ', $spacingWidth), $commandAliases.$command->getDescription()), $options); @@ -306,12 +304,12 @@ private function getColumnWidth(array $commands): int foreach ($commands as $command) { if ($command instanceof Command) { - $widths[] = Helper::strlen($command->getName()); + $widths[] = Helper::width($command->getName()); foreach ($command->getAliases() as $alias) { - $widths[] = Helper::strlen($alias); + $widths[] = Helper::width($alias); } } else { - $widths[] = Helper::strlen($command); + $widths[] = Helper::width($command); } } @@ -326,10 +324,11 @@ private function calculateTotalWidthForOptions(array $options): int $totalWidth = 0; foreach ($options as $option) { // "-" + shortcut + ", --" + name - $nameLength = 1 + max(Helper::strlen($option->getShortcut()), 1) + 4 + Helper::strlen($option->getName()); - - if ($option->acceptValue()) { - $valueLength = 1 + Helper::strlen($option->getName()); // = + value + $nameLength = 1 + max(Helper::width($option->getShortcut()), 1) + 4 + Helper::width($option->getName()); + if ($option->isNegatable()) { + $nameLength += 6 + Helper::width($option->getName()); // |--no- + name + } elseif ($option->acceptValue()) { + $valueLength = 1 + Helper::width($option->getName()); // = + value $valueLength += $option->isValueOptional() ? 2 : 0; // [ + ] $nameLength += $valueLength; diff --git a/vendor/symfony/console/Descriptor/XmlDescriptor.php b/vendor/symfony/console/Descriptor/XmlDescriptor.php index e0ed53a3..4f7cd8b3 100644 --- a/vendor/symfony/console/Descriptor/XmlDescriptor.php +++ b/vendor/symfony/console/Descriptor/XmlDescriptor.php @@ -44,37 +44,42 @@ public function getInputDefinitionDocument(InputDefinition $definition): \DOMDoc return $dom; } - public function getCommandDocument(Command $command): \DOMDocument + public function getCommandDocument(Command $command, bool $short = false): \DOMDocument { $dom = new \DOMDocument('1.0', 'UTF-8'); $dom->appendChild($commandXML = $dom->createElement('command')); - $command->getSynopsis(); - $command->mergeApplicationDefinition(false); - $commandXML->setAttribute('id', $command->getName()); $commandXML->setAttribute('name', $command->getName()); $commandXML->setAttribute('hidden', $command->isHidden() ? 1 : 0); $commandXML->appendChild($usagesXML = $dom->createElement('usages')); - foreach (array_merge([$command->getSynopsis()], $command->getAliases(), $command->getUsages()) as $usage) { - $usagesXML->appendChild($dom->createElement('usage', $usage)); - } - $commandXML->appendChild($descriptionXML = $dom->createElement('description')); $descriptionXML->appendChild($dom->createTextNode(str_replace("\n", "\n ", $command->getDescription()))); - $commandXML->appendChild($helpXML = $dom->createElement('help')); - $helpXML->appendChild($dom->createTextNode(str_replace("\n", "\n ", $command->getProcessedHelp()))); + if ($short) { + foreach ($command->getAliases() as $usage) { + $usagesXML->appendChild($dom->createElement('usage', $usage)); + } + } else { + $command->mergeApplicationDefinition(false); - $definitionXML = $this->getInputDefinitionDocument($command->getNativeDefinition()); - $this->appendDocument($commandXML, $definitionXML->getElementsByTagName('definition')->item(0)); + foreach (array_merge([$command->getSynopsis()], $command->getAliases(), $command->getUsages()) as $usage) { + $usagesXML->appendChild($dom->createElement('usage', $usage)); + } + + $commandXML->appendChild($helpXML = $dom->createElement('help')); + $helpXML->appendChild($dom->createTextNode(str_replace("\n", "\n ", $command->getProcessedHelp()))); + + $definitionXML = $this->getInputDefinitionDocument($command->getDefinition()); + $this->appendDocument($commandXML, $definitionXML->getElementsByTagName('definition')->item(0)); + } return $dom; } - public function getApplicationDocument(Application $application, string $namespace = null): \DOMDocument + public function getApplicationDocument(Application $application, string $namespace = null, bool $short = false): \DOMDocument { $dom = new \DOMDocument('1.0', 'UTF-8'); $dom->appendChild($rootXml = $dom->createElement('symfony')); @@ -95,7 +100,7 @@ public function getApplicationDocument(Application $application, string $namespa } foreach ($description->getCommands() as $command) { - $this->appendDocument($commandsXML, $this->getCommandDocument($command)); + $this->appendDocument($commandsXML, $this->getCommandDocument($command, $short)); } if (!$namespace) { @@ -144,7 +149,7 @@ protected function describeInputDefinition(InputDefinition $definition, array $o */ protected function describeCommand(Command $command, array $options = []) { - $this->writeDocument($this->getCommandDocument($command)); + $this->writeDocument($this->getCommandDocument($command, $options['short'] ?? false)); } /** @@ -152,7 +157,7 @@ protected function describeCommand(Command $command, array $options = []) */ protected function describeApplication(Application $application, array $options = []) { - $this->writeDocument($this->getApplicationDocument($application, $options['namespace'] ?? null)); + $this->writeDocument($this->getApplicationDocument($application, $options['namespace'] ?? null, $options['short'] ?? false)); } /** @@ -226,6 +231,17 @@ private function getInputOptionDocument(InputOption $option): \DOMDocument } } + if ($option->isNegatable()) { + $dom->appendChild($objectXML = $dom->createElement('option')); + $objectXML->setAttribute('name', '--no-'.$option->getName()); + $objectXML->setAttribute('shortcut', ''); + $objectXML->setAttribute('accept_value', 0); + $objectXML->setAttribute('is_value_required', 0); + $objectXML->setAttribute('is_multiple', 0); + $objectXML->appendChild($descriptionXML = $dom->createElement('description')); + $descriptionXML->appendChild($dom->createTextNode('Negate the "--'.$option->getName().'" option')); + } + return $dom; } } diff --git a/vendor/symfony/console/Event/ConsoleCommandEvent.php b/vendor/symfony/console/Event/ConsoleCommandEvent.php index 9691db63..1b4f9f9b 100644 --- a/vendor/symfony/console/Event/ConsoleCommandEvent.php +++ b/vendor/symfony/console/Event/ConsoleCommandEvent.php @@ -12,13 +12,14 @@ namespace Symfony\Component\Console\Event; /** - * Allows to do things before the command is executed, like skipping the command or changing the input. + * Allows to do things before the command is executed, like skipping the command or executing code before the command is + * going to be executed. * - * @author Fabien Potencier + * Changing the input arguments will have no effect. * - * @final since Symfony 4.4 + * @author Fabien Potencier */ -class ConsoleCommandEvent extends ConsoleEvent +final class ConsoleCommandEvent extends ConsoleEvent { /** * The return code for skipped commands, this will also be passed into the terminate event. @@ -32,30 +33,21 @@ class ConsoleCommandEvent extends ConsoleEvent /** * Disables the command, so it won't be run. - * - * @return bool */ - public function disableCommand() + public function disableCommand(): bool { return $this->commandShouldRun = false; } - /** - * Enables the command. - * - * @return bool - */ - public function enableCommand() + public function enableCommand(): bool { return $this->commandShouldRun = true; } /** * Returns true if the command is runnable, false otherwise. - * - * @return bool */ - public function commandShouldRun() + public function commandShouldRun(): bool { return $this->commandShouldRun; } diff --git a/vendor/symfony/console/Event/ConsoleEvent.php b/vendor/symfony/console/Event/ConsoleEvent.php index 400eb573..be7937d5 100644 --- a/vendor/symfony/console/Event/ConsoleEvent.php +++ b/vendor/symfony/console/Event/ConsoleEvent.php @@ -14,7 +14,7 @@ use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\EventDispatcher\Event; +use Symfony\Contracts\EventDispatcher\Event; /** * Allows to inspect input and output of a command. @@ -38,7 +38,7 @@ public function __construct(?Command $command, InputInterface $input, OutputInte /** * Gets the command that is executed. * - * @return Command|null A Command instance + * @return Command|null */ public function getCommand() { @@ -48,7 +48,7 @@ public function getCommand() /** * Gets the input instance. * - * @return InputInterface An InputInterface instance + * @return InputInterface */ public function getInput() { @@ -58,7 +58,7 @@ public function getInput() /** * Gets the output instance. * - * @return OutputInterface An OutputInterface instance + * @return OutputInterface */ public function getOutput() { diff --git a/vendor/symfony/console/Event/ConsoleTerminateEvent.php b/vendor/symfony/console/Event/ConsoleTerminateEvent.php index 43d0f8ab..190038d1 100644 --- a/vendor/symfony/console/Event/ConsoleTerminateEvent.php +++ b/vendor/symfony/console/Event/ConsoleTerminateEvent.php @@ -19,10 +19,8 @@ * Allows to manipulate the exit code of a command after its execution. * * @author Francesco Levorato - * - * @final since Symfony 4.4 */ -class ConsoleTerminateEvent extends ConsoleEvent +final class ConsoleTerminateEvent extends ConsoleEvent { private $exitCode; @@ -33,22 +31,12 @@ public function __construct(Command $command, InputInterface $input, OutputInter $this->setExitCode($exitCode); } - /** - * Sets the exit code. - * - * @param int $exitCode The command exit code - */ - public function setExitCode($exitCode) + public function setExitCode(int $exitCode): void { - $this->exitCode = (int) $exitCode; + $this->exitCode = $exitCode; } - /** - * Gets the exit code. - * - * @return int The command exit code - */ - public function getExitCode() + public function getExitCode(): int { return $this->exitCode; } diff --git a/vendor/symfony/console/Exception/CommandNotFoundException.php b/vendor/symfony/console/Exception/CommandNotFoundException.php index 590a71c7..910ae192 100644 --- a/vendor/symfony/console/Exception/CommandNotFoundException.php +++ b/vendor/symfony/console/Exception/CommandNotFoundException.php @@ -34,7 +34,7 @@ public function __construct(string $message, array $alternatives = [], int $code } /** - * @return string[] A list of similar defined names + * @return string[] */ public function getAlternatives() { diff --git a/vendor/symfony/console/Formatter/OutputFormatter.php b/vendor/symfony/console/Formatter/OutputFormatter.php index e8c10e70..4ec60024 100644 --- a/vendor/symfony/console/Formatter/OutputFormatter.php +++ b/vendor/symfony/console/Formatter/OutputFormatter.php @@ -13,6 +13,8 @@ use Symfony\Component\Console\Exception\InvalidArgumentException; +use function Symfony\Component\String\b; + /** * Formatter class for console output. * @@ -36,11 +38,9 @@ public function __clone() /** * Escapes "<" and ">" special chars in given text. * - * @param string $text Text to escape - * - * @return string Escaped text + * @return string */ - public static function escape($text) + public static function escape(string $text) { $text = preg_replace('/([^\\\\]|^)([<>])/', '$1\\\\$2', $text); @@ -88,9 +88,9 @@ public function __construct(bool $decorated = false, array $styles = []) /** * {@inheritdoc} */ - public function setDecorated($decorated) + public function setDecorated(bool $decorated) { - $this->decorated = (bool) $decorated; + $this->decorated = $decorated; } /** @@ -104,7 +104,7 @@ public function isDecorated() /** * {@inheritdoc} */ - public function setStyle($name, OutputFormatterStyleInterface $style) + public function setStyle(string $name, OutputFormatterStyleInterface $style) { $this->styles[strtolower($name)] = $style; } @@ -112,7 +112,7 @@ public function setStyle($name, OutputFormatterStyleInterface $style) /** * {@inheritdoc} */ - public function hasStyle($name) + public function hasStyle(string $name) { return isset($this->styles[strtolower($name)]); } @@ -120,7 +120,7 @@ public function hasStyle($name) /** * {@inheritdoc} */ - public function getStyle($name) + public function getStyle(string $name) { if (!$this->hasStyle($name)) { throw new InvalidArgumentException(sprintf('Undefined style: "%s".', $name)); @@ -132,16 +132,20 @@ public function getStyle($name) /** * {@inheritdoc} */ - public function format($message) + public function format(?string $message) { - return $this->formatAndWrap((string) $message, 0); + return $this->formatAndWrap($message, 0); } /** * {@inheritdoc} */ - public function formatAndWrap(string $message, int $width) + public function formatAndWrap(?string $message, int $width) { + if (null === $message) { + return ''; + } + $offset = 0; $output = ''; $openTagRegex = '[a-z](?:[^\\\\<>]*+ | \\\\.)*'; @@ -256,7 +260,7 @@ private function applyCurrentStyle(string $text, string $current, int $width, in } preg_match('~(\\n)$~', $text, $matches); - $text = $prefix.preg_replace('~([^\\n]{'.$width.'})\\ *~', "\$1\n", $text); + $text = $prefix.$this->addLineBreaks($text, $width); $text = rtrim($text, "\n").($matches[1] ?? ''); if (!$currentLineLength && '' !== $current && "\n" !== substr($current, -1)) { @@ -280,4 +284,11 @@ private function applyCurrentStyle(string $text, string $current, int $width, in return implode("\n", $lines); } + + private function addLineBreaks(string $text, int $width): string + { + $encoding = mb_detect_encoding($text, null, true) ?: 'UTF-8'; + + return b($text)->toCodePointString($encoding)->wordwrap($width, "\n", true)->toByteString($encoding); + } } diff --git a/vendor/symfony/console/Formatter/OutputFormatterInterface.php b/vendor/symfony/console/Formatter/OutputFormatterInterface.php index 22f40a34..0b5f839a 100644 --- a/vendor/symfony/console/Formatter/OutputFormatterInterface.php +++ b/vendor/symfony/console/Formatter/OutputFormatterInterface.php @@ -20,51 +20,41 @@ interface OutputFormatterInterface { /** * Sets the decorated flag. - * - * @param bool $decorated Whether to decorate the messages or not */ - public function setDecorated($decorated); + public function setDecorated(bool $decorated); /** - * Gets the decorated flag. + * Whether the output will decorate messages. * - * @return bool true if the output will decorate messages, false otherwise + * @return bool */ public function isDecorated(); /** * Sets a new style. - * - * @param string $name The style name */ - public function setStyle($name, OutputFormatterStyleInterface $style); + public function setStyle(string $name, OutputFormatterStyleInterface $style); /** * Checks if output formatter has style with specified name. * - * @param string $name - * * @return bool */ - public function hasStyle($name); + public function hasStyle(string $name); /** * Gets style options from style with specified name. * - * @param string $name - * * @return OutputFormatterStyleInterface * * @throws \InvalidArgumentException When style isn't defined */ - public function getStyle($name); + public function getStyle(string $name); /** * Formats a message according to the given styles. * - * @param string $message The message to style - * - * @return string The styled message + * @return string|null */ - public function format($message); + public function format(?string $message); } diff --git a/vendor/symfony/console/Formatter/OutputFormatterStyle.php b/vendor/symfony/console/Formatter/OutputFormatterStyle.php index 7cb6116b..8370ba05 100644 --- a/vendor/symfony/console/Formatter/OutputFormatterStyle.php +++ b/vendor/symfony/console/Formatter/OutputFormatterStyle.php @@ -11,7 +11,7 @@ namespace Symfony\Component\Console\Formatter; -use Symfony\Component\Console\Exception\InvalidArgumentException; +use Symfony\Component\Console\Color; /** * Formatter style class for defining styles. @@ -20,40 +20,11 @@ */ class OutputFormatterStyle implements OutputFormatterStyleInterface { - private static $availableForegroundColors = [ - 'black' => ['set' => 30, 'unset' => 39], - 'red' => ['set' => 31, 'unset' => 39], - 'green' => ['set' => 32, 'unset' => 39], - 'yellow' => ['set' => 33, 'unset' => 39], - 'blue' => ['set' => 34, 'unset' => 39], - 'magenta' => ['set' => 35, 'unset' => 39], - 'cyan' => ['set' => 36, 'unset' => 39], - 'white' => ['set' => 37, 'unset' => 39], - 'default' => ['set' => 39, 'unset' => 39], - ]; - private static $availableBackgroundColors = [ - 'black' => ['set' => 40, 'unset' => 49], - 'red' => ['set' => 41, 'unset' => 49], - 'green' => ['set' => 42, 'unset' => 49], - 'yellow' => ['set' => 43, 'unset' => 49], - 'blue' => ['set' => 44, 'unset' => 49], - 'magenta' => ['set' => 45, 'unset' => 49], - 'cyan' => ['set' => 46, 'unset' => 49], - 'white' => ['set' => 47, 'unset' => 49], - 'default' => ['set' => 49, 'unset' => 49], - ]; - private static $availableOptions = [ - 'bold' => ['set' => 1, 'unset' => 22], - 'underscore' => ['set' => 4, 'unset' => 24], - 'blink' => ['set' => 5, 'unset' => 25], - 'reverse' => ['set' => 7, 'unset' => 27], - 'conceal' => ['set' => 8, 'unset' => 28], - ]; - + private $color; private $foreground; private $background; + private $options; private $href; - private $options = []; private $handlesHrefGracefully; /** @@ -64,51 +35,23 @@ class OutputFormatterStyle implements OutputFormatterStyleInterface */ public function __construct(string $foreground = null, string $background = null, array $options = []) { - if (null !== $foreground) { - $this->setForeground($foreground); - } - if (null !== $background) { - $this->setBackground($background); - } - if (\count($options)) { - $this->setOptions($options); - } + $this->color = new Color($this->foreground = $foreground ?: '', $this->background = $background ?: '', $this->options = $options); } /** * {@inheritdoc} */ - public function setForeground($color = null) + public function setForeground(string $color = null) { - if (null === $color) { - $this->foreground = null; - - return; - } - - if (!isset(static::$availableForegroundColors[$color])) { - throw new InvalidArgumentException(sprintf('Invalid foreground color specified: "%s". Expected one of (%s).', $color, implode(', ', array_keys(static::$availableForegroundColors)))); - } - - $this->foreground = static::$availableForegroundColors[$color]; + $this->color = new Color($this->foreground = $color ?: '', $this->background, $this->options); } /** * {@inheritdoc} */ - public function setBackground($color = null) + public function setBackground(string $color = null) { - if (null === $color) { - $this->background = null; - - return; - } - - if (!isset(static::$availableBackgroundColors[$color])) { - throw new InvalidArgumentException(sprintf('Invalid background color specified: "%s". Expected one of (%s).', $color, implode(', ', array_keys(static::$availableBackgroundColors)))); - } - - $this->background = static::$availableBackgroundColors[$color]; + $this->color = new Color($this->foreground, $this->background = $color ?: '', $this->options); } public function setHref(string $url): void @@ -119,30 +62,23 @@ public function setHref(string $url): void /** * {@inheritdoc} */ - public function setOption($option) + public function setOption(string $option) { - if (!isset(static::$availableOptions[$option])) { - throw new InvalidArgumentException(sprintf('Invalid option specified: "%s". Expected one of (%s).', $option, implode(', ', array_keys(static::$availableOptions)))); - } - - if (!\in_array(static::$availableOptions[$option], $this->options)) { - $this->options[] = static::$availableOptions[$option]; - } + $this->options[] = $option; + $this->color = new Color($this->foreground, $this->background, $this->options); } /** * {@inheritdoc} */ - public function unsetOption($option) + public function unsetOption(string $option) { - if (!isset(static::$availableOptions[$option])) { - throw new InvalidArgumentException(sprintf('Invalid option specified: "%s". Expected one of (%s).', $option, implode(', ', array_keys(static::$availableOptions)))); - } - - $pos = array_search(static::$availableOptions[$option], $this->options); + $pos = array_search($option, $this->options); if (false !== $pos) { unset($this->options[$pos]); } + + $this->color = new Color($this->foreground, $this->background, $this->options); } /** @@ -150,48 +86,24 @@ public function unsetOption($option) */ public function setOptions(array $options) { - $this->options = []; - - foreach ($options as $option) { - $this->setOption($option); - } + $this->color = new Color($this->foreground, $this->background, $this->options = $options); } /** * {@inheritdoc} */ - public function apply($text) + public function apply(string $text) { - $setCodes = []; - $unsetCodes = []; - if (null === $this->handlesHrefGracefully) { $this->handlesHrefGracefully = 'JetBrains-JediTerm' !== getenv('TERMINAL_EMULATOR') - && (!getenv('KONSOLE_VERSION') || (int) getenv('KONSOLE_VERSION') > 201100); - } - - if (null !== $this->foreground) { - $setCodes[] = $this->foreground['set']; - $unsetCodes[] = $this->foreground['unset']; - } - if (null !== $this->background) { - $setCodes[] = $this->background['set']; - $unsetCodes[] = $this->background['unset']; - } - - foreach ($this->options as $option) { - $setCodes[] = $option['set']; - $unsetCodes[] = $option['unset']; + && (!getenv('KONSOLE_VERSION') || (int) getenv('KONSOLE_VERSION') > 201100) + && !isset($_SERVER['IDEA_INITIAL_DIRECTORY']); } if (null !== $this->href && $this->handlesHrefGracefully) { $text = "\033]8;;$this->href\033\\$text\033]8;;\033\\"; } - if (0 === \count($setCodes)) { - return $text; - } - - return sprintf("\033[%sm%s\033[%sm", implode(';', $setCodes), $text, implode(';', $unsetCodes)); + return $this->color->apply($text); } } diff --git a/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php b/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php index af171c27..b30560d2 100644 --- a/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php +++ b/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php @@ -20,31 +20,23 @@ interface OutputFormatterStyleInterface { /** * Sets style foreground color. - * - * @param string|null $color The color name */ - public function setForeground($color = null); + public function setForeground(string $color = null); /** * Sets style background color. - * - * @param string $color The color name */ - public function setBackground($color = null); + public function setBackground(string $color = null); /** * Sets some specific style option. - * - * @param string $option The option name */ - public function setOption($option); + public function setOption(string $option); /** * Unsets some specific style option. - * - * @param string $option The option name */ - public function unsetOption($option); + public function unsetOption(string $option); /** * Sets multiple style options at once. @@ -54,9 +46,7 @@ public function setOptions(array $options); /** * Applies the style to a given text. * - * @param string $text The text to style - * * @return string */ - public function apply($text); + public function apply(string $text); } diff --git a/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php b/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php index 6694053f..42319ee5 100644 --- a/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php +++ b/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php @@ -21,5 +21,5 @@ interface WrappableOutputFormatterInterface extends OutputFormatterInterface /** * Formats a message according to the given styles, wrapping at `$width` (0 means no wrapping). */ - public function formatAndWrap(string $message, int $width); + public function formatAndWrap(?string $message, int $width); } diff --git a/vendor/symfony/console/Helper/DebugFormatterHelper.php b/vendor/symfony/console/Helper/DebugFormatterHelper.php index 1653edeb..e258ba05 100644 --- a/vendor/symfony/console/Helper/DebugFormatterHelper.php +++ b/vendor/symfony/console/Helper/DebugFormatterHelper.php @@ -20,22 +20,18 @@ */ class DebugFormatterHelper extends Helper { - private $colors = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white', 'default']; + private const COLORS = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white', 'default']; private $started = []; private $count = -1; /** * Starts a debug formatting session. * - * @param string $id The id of the formatting session - * @param string $message The message to display - * @param string $prefix The prefix to use - * * @return string */ - public function start($id, $message, $prefix = 'RUN') + public function start(string $id, string $message, string $prefix = 'RUN') { - $this->started[$id] = ['border' => ++$this->count % \count($this->colors)]; + $this->started[$id] = ['border' => ++$this->count % \count(self::COLORS)]; return sprintf("%s %s %s\n", $this->getBorder($id), $prefix, $message); } @@ -43,15 +39,9 @@ public function start($id, $message, $prefix = 'RUN') /** * Adds progress to a formatting session. * - * @param string $id The id of the formatting session - * @param string $buffer The message to display - * @param bool $error Whether to consider the buffer as error - * @param string $prefix The prefix for output - * @param string $errorPrefix The prefix for error output - * * @return string */ - public function progress($id, $buffer, $error = false, $prefix = 'OUT', $errorPrefix = 'ERR') + public function progress(string $id, string $buffer, bool $error = false, string $prefix = 'OUT', string $errorPrefix = 'ERR') { $message = ''; @@ -85,14 +75,9 @@ public function progress($id, $buffer, $error = false, $prefix = 'OUT', $errorPr /** * Stops a formatting session. * - * @param string $id The id of the formatting session - * @param string $message The message to display - * @param bool $successful Whether to consider the result as success - * @param string $prefix The prefix for the end output - * * @return string */ - public function stop($id, $message, $successful, $prefix = 'RES') + public function stop(string $id, string $message, bool $successful, string $prefix = 'RES') { $trailingEOL = isset($this->started[$id]['out']) || isset($this->started[$id]['err']) ? "\n" : ''; @@ -109,7 +94,7 @@ public function stop($id, $message, $successful, $prefix = 'RES') private function getBorder(string $id): string { - return sprintf(' ', $this->colors[$this->started[$id]['border']]); + return sprintf(' ', self::COLORS[$this->started[$id]['border']]); } /** diff --git a/vendor/symfony/console/Helper/DescriptorHelper.php b/vendor/symfony/console/Helper/DescriptorHelper.php index 3055baef..af85e9c0 100644 --- a/vendor/symfony/console/Helper/DescriptorHelper.php +++ b/vendor/symfony/console/Helper/DescriptorHelper.php @@ -48,11 +48,9 @@ public function __construct() * * format: string, the output format name * * raw_text: boolean, sets output type as raw * - * @param object $object - * * @throws InvalidArgumentException when the given format is not supported */ - public function describe(OutputInterface $output, $object, array $options = []) + public function describe(OutputInterface $output, ?object $object, array $options = []) { $options = array_merge([ 'raw_text' => false, @@ -70,11 +68,9 @@ public function describe(OutputInterface $output, $object, array $options = []) /** * Registers a descriptor. * - * @param string $format - * * @return $this */ - public function register($format, DescriptorInterface $descriptor) + public function register(string $format, DescriptorInterface $descriptor) { $this->descriptors[$format] = $descriptor; @@ -88,4 +84,9 @@ public function getName() { return 'descriptor'; } + + public function getFormats(): array + { + return array_keys($this->descriptors); + } } diff --git a/vendor/symfony/console/Helper/FormatterHelper.php b/vendor/symfony/console/Helper/FormatterHelper.php index d6eccee8..92d8dc72 100644 --- a/vendor/symfony/console/Helper/FormatterHelper.php +++ b/vendor/symfony/console/Helper/FormatterHelper.php @@ -23,13 +23,9 @@ class FormatterHelper extends Helper /** * Formats a message within a section. * - * @param string $section The section name - * @param string $message The message - * @param string $style The style to apply to the section - * - * @return string The format section + * @return string */ - public function formatSection($section, $message, $style = 'info') + public function formatSection(string $section, string $message, string $style = 'info') { return sprintf('<%s>[%s] %s', $style, $section, $style, $message); } @@ -38,12 +34,10 @@ public function formatSection($section, $message, $style = 'info') * Formats a message as a block of text. * * @param string|array $messages The message to write in the block - * @param string $style The style to apply to the whole block - * @param bool $large Whether to return a large block * - * @return string The formatter message + * @return string */ - public function formatBlock($messages, $style, $large = false) + public function formatBlock($messages, string $style, bool $large = false) { if (!\is_array($messages)) { $messages = [$messages]; @@ -54,12 +48,12 @@ public function formatBlock($messages, $style, $large = false) foreach ($messages as $message) { $message = OutputFormatter::escape($message); $lines[] = sprintf($large ? ' %s ' : ' %s ', $message); - $len = max(self::strlen($message) + ($large ? 4 : 2), $len); + $len = max(self::width($message) + ($large ? 4 : 2), $len); } $messages = $large ? [str_repeat(' ', $len)] : []; for ($i = 0; isset($lines[$i]); ++$i) { - $messages[] = $lines[$i].str_repeat(' ', $len - self::strlen($lines[$i])); + $messages[] = $lines[$i].str_repeat(' ', $len - self::width($lines[$i])); } if ($large) { $messages[] = str_repeat(' ', $len); @@ -75,17 +69,13 @@ public function formatBlock($messages, $style, $large = false) /** * Truncates a message to the given length. * - * @param string $message - * @param int $length - * @param string $suffix - * * @return string */ - public function truncate($message, $length, $suffix = '...') + public function truncate(string $message, int $length, string $suffix = '...') { - $computedLength = $length - self::strlen($suffix); + $computedLength = $length - self::width($suffix); - if ($computedLength > self::strlen($message)) { + if ($computedLength > self::width($message)) { return $message; } diff --git a/vendor/symfony/console/Helper/Helper.php b/vendor/symfony/console/Helper/Helper.php index 18d85b94..c7d3e25d 100644 --- a/vendor/symfony/console/Helper/Helper.php +++ b/vendor/symfony/console/Helper/Helper.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Console\Helper; use Symfony\Component\Console\Formatter\OutputFormatterInterface; +use Symfony\Component\String\UnicodeString; /** * Helper is the base class for all helper classes. @@ -41,13 +42,28 @@ public function getHelperSet() /** * Returns the length of a string, using mb_strwidth if it is available. * - * @param string $string The string to check its length + * @deprecated since Symfony 5.3 * - * @return int The length of the string + * @return int */ - public static function strlen($string) + public static function strlen(?string $string) { - $string = (string) $string; + trigger_deprecation('symfony/console', '5.3', 'Method "%s()" is deprecated and will be removed in Symfony 6.0. Use Helper::width() or Helper::length() instead.', __METHOD__); + + return self::width($string); + } + + /** + * Returns the width of a string, using mb_strwidth if it is available. + * The width is how many characters positions the string will use. + */ + public static function width(?string $string): int + { + $string ?? $string = ''; + + if (preg_match('//u', $string)) { + return (new UnicodeString($string))->width(false); + } if (false === $encoding = mb_detect_encoding($string, null, true)) { return \strlen($string); @@ -56,18 +72,33 @@ public static function strlen($string) return mb_strwidth($string, $encoding); } + /** + * Returns the length of a string, using mb_strlen if it is available. + * The length is related to how many bytes the string will use. + */ + public static function length(?string $string): int + { + $string ?? $string = ''; + + if (preg_match('//u', $string)) { + return (new UnicodeString($string))->length(); + } + + if (false === $encoding = mb_detect_encoding($string, null, true)) { + return \strlen($string); + } + + return mb_strlen($string, $encoding); + } + /** * Returns the subset of a string, using mb_substr if it is available. * - * @param string $string String to subset - * @param int $from Start offset - * @param int|null $length Length to read - * - * @return string The string subset + * @return string */ - public static function substr($string, $from, $length = null) + public static function substr(?string $string, int $from, int $length = null) { - $string = (string) $string; + $string ?? $string = ''; if (false === $encoding = mb_detect_encoding($string, null, true)) { return substr($string, $from, $length); @@ -105,7 +136,7 @@ public static function formatTime($secs) } } - public static function formatMemory($memory) + public static function formatMemory(int $memory) { if ($memory >= 1024 * 1024 * 1024) { return sprintf('%.1f GiB', $memory / 1024 / 1024 / 1024); @@ -122,21 +153,26 @@ public static function formatMemory($memory) return sprintf('%d B', $memory); } - public static function strlenWithoutDecoration(OutputFormatterInterface $formatter, $string) + /** + * @deprecated since Symfony 5.3 + */ + public static function strlenWithoutDecoration(OutputFormatterInterface $formatter, ?string $string) { - return self::strlen(self::removeDecoration($formatter, $string)); + trigger_deprecation('symfony/console', '5.3', 'Method "%s()" is deprecated and will be removed in Symfony 6.0. Use Helper::removeDecoration() instead.', __METHOD__); + + return self::width(self::removeDecoration($formatter, $string)); } - public static function removeDecoration(OutputFormatterInterface $formatter, $string) + public static function removeDecoration(OutputFormatterInterface $formatter, ?string $string) { $isDecorated = $formatter->isDecorated(); $formatter->setDecorated(false); // remove <...> formatting - $string = $formatter->format($string); + $string = $formatter->format($string ?? ''); // remove already formatted characters - $string = preg_replace("/\033\[[^m]*m/", '', $string); + $string = preg_replace("/\033\[[^m]*m/", '', $string ?? ''); // remove terminal hyperlinks - $string = preg_replace('/\\033]8;[^;]*;[^\\033]*\\033\\\\/', '', $string); + $string = preg_replace('/\\033]8;[^;]*;[^\\033]*\\033\\\\/', '', $string ?? ''); $formatter->setDecorated($isDecorated); return $string; diff --git a/vendor/symfony/console/Helper/HelperInterface.php b/vendor/symfony/console/Helper/HelperInterface.php index 1ce82358..fc952b48 100644 --- a/vendor/symfony/console/Helper/HelperInterface.php +++ b/vendor/symfony/console/Helper/HelperInterface.php @@ -26,14 +26,14 @@ public function setHelperSet(HelperSet $helperSet = null); /** * Gets the helper set associated with this helper. * - * @return HelperSet A HelperSet instance + * @return HelperSet|null */ public function getHelperSet(); /** * Returns the canonical name of this helper. * - * @return string The canonical name + * @return string */ public function getName(); } diff --git a/vendor/symfony/console/Helper/HelperSet.php b/vendor/symfony/console/Helper/HelperSet.php index 9aa1e67b..719762d2 100644 --- a/vendor/symfony/console/Helper/HelperSet.php +++ b/vendor/symfony/console/Helper/HelperSet.php @@ -18,12 +18,12 @@ * HelperSet represents a set of helpers to be used with a command. * * @author Fabien Potencier + * + * @implements \IteratorAggregate */ class HelperSet implements \IteratorAggregate { - /** - * @var Helper[] - */ + /** @var array */ private $helpers = []; private $command; @@ -37,12 +37,7 @@ public function __construct(array $helpers = []) } } - /** - * Sets a helper. - * - * @param string $alias An alias - */ - public function set(HelperInterface $helper, $alias = null) + public function set(HelperInterface $helper, string $alias = null) { $this->helpers[$helper->getName()] = $helper; if (null !== $alias) { @@ -55,11 +50,9 @@ public function set(HelperInterface $helper, $alias = null) /** * Returns true if the helper if defined. * - * @param string $name The helper name - * - * @return bool true if the helper is defined, false otherwise + * @return bool */ - public function has($name) + public function has(string $name) { return isset($this->helpers[$name]); } @@ -67,13 +60,11 @@ public function has($name) /** * Gets a helper value. * - * @param string $name The helper name - * - * @return HelperInterface The helper instance + * @return HelperInterface * * @throws InvalidArgumentException if the helper is not defined */ - public function get($name) + public function get(string $name) { if (!$this->has($name)) { throw new InvalidArgumentException(sprintf('The helper "%s" is not defined.', $name)); @@ -82,23 +73,32 @@ public function get($name) return $this->helpers[$name]; } + /** + * @deprecated since Symfony 5.4 + */ public function setCommand(Command $command = null) { + trigger_deprecation('symfony/console', '5.4', 'Method "%s()" is deprecated.', __METHOD__); + $this->command = $command; } /** * Gets the command associated with this helper set. * - * @return Command A Command instance + * @return Command + * + * @deprecated since Symfony 5.4 */ public function getCommand() { + trigger_deprecation('symfony/console', '5.4', 'Method "%s()" is deprecated.', __METHOD__); + return $this->command; } /** - * @return \Traversable + * @return \Traversable */ #[\ReturnTypeWillChange] public function getIterator() diff --git a/vendor/symfony/console/Helper/ProcessHelper.php b/vendor/symfony/console/Helper/ProcessHelper.php index 862d09f2..4ea3d724 100644 --- a/vendor/symfony/console/Helper/ProcessHelper.php +++ b/vendor/symfony/console/Helper/ProcessHelper.php @@ -21,22 +21,18 @@ * * @author Fabien Potencier * - * @final since Symfony 4.2 + * @final */ class ProcessHelper extends Helper { /** * Runs an external process. * - * @param array|Process $cmd An instance of Process or an array of the command and arguments - * @param string|null $error An error message that must be displayed if something went wrong - * @param callable|null $callback A PHP callback to run whenever there is some - * output available on STDOUT or STDERR - * @param int $verbosity The threshold for verbosity - * - * @return Process The process that ran + * @param array|Process $cmd An instance of Process or an array of the command and arguments + * @param callable|null $callback A PHP callback to run whenever there is some + * output available on STDOUT or STDERR */ - public function run(OutputInterface $output, $cmd, $error = null, callable $callback = null, $verbosity = OutputInterface::VERBOSITY_VERY_VERBOSE) + public function run(OutputInterface $output, $cmd, string $error = null, callable $callback = null, int $verbosity = OutputInterface::VERBOSITY_VERY_VERBOSE): Process { if (!class_exists(Process::class)) { throw new \LogicException('The ProcessHelper cannot be run as the Process component is not installed. Try running "compose require symfony/process".'); @@ -53,8 +49,7 @@ public function run(OutputInterface $output, $cmd, $error = null, callable $call } if (!\is_array($cmd)) { - @trigger_error(sprintf('Passing a command as a string to "%s()" is deprecated since Symfony 4.2, pass it the command as an array of arguments instead.', __METHOD__), \E_USER_DEPRECATED); - $cmd = [method_exists(Process::class, 'fromShellCommandline') ? Process::fromShellCommandline($cmd) : new Process($cmd)]; + throw new \TypeError(sprintf('The "command" argument of "%s()" must be an array or a "%s" instance, "%s" given.', __METHOD__, Process::class, get_debug_type($cmd))); } if (\is_string($cmd[0] ?? null)) { @@ -96,17 +91,14 @@ public function run(OutputInterface $output, $cmd, $error = null, callable $call * exits with a non-zero exit code. * * @param array|Process $cmd An instance of Process or a command to run - * @param string|null $error An error message that must be displayed if something went wrong * @param callable|null $callback A PHP callback to run whenever there is some * output available on STDOUT or STDERR * - * @return Process The process that ran - * * @throws ProcessFailedException * * @see run() */ - public function mustRun(OutputInterface $output, $cmd, $error = null, callable $callback = null) + public function mustRun(OutputInterface $output, $cmd, string $error = null, callable $callback = null): Process { $process = $this->run($output, $cmd, $error, $callback); @@ -119,10 +111,8 @@ public function mustRun(OutputInterface $output, $cmd, $error = null, callable $ /** * Wraps a Process callback to add debugging output. - * - * @return callable */ - public function wrapCallback(OutputInterface $output, Process $process, callable $callback = null) + public function wrapCallback(OutputInterface $output, Process $process, callable $callback = null): callable { if ($output instanceof ConsoleOutputInterface) { $output = $output->getErrorOutput(); @@ -147,7 +137,7 @@ private function escapeString(string $str): string /** * {@inheritdoc} */ - public function getName() + public function getName(): string { return 'process'; } diff --git a/vendor/symfony/console/Helper/ProgressBar.php b/vendor/symfony/console/Helper/ProgressBar.php index 1de9b7b3..eb6aacb1 100644 --- a/vendor/symfony/console/Helper/ProgressBar.php +++ b/vendor/symfony/console/Helper/ProgressBar.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Console\Helper; +use Symfony\Component\Console\Cursor; use Symfony\Component\Console\Exception\LogicException; use Symfony\Component\Console\Output\ConsoleOutputInterface; use Symfony\Component\Console\Output\ConsoleSectionOutput; @@ -25,6 +26,16 @@ */ final class ProgressBar { + public const FORMAT_VERBOSE = 'verbose'; + public const FORMAT_VERY_VERBOSE = 'very_verbose'; + public const FORMAT_DEBUG = 'debug'; + public const FORMAT_NORMAL = 'normal'; + + private const FORMAT_VERBOSE_NOMAX = 'verbose_nomax'; + private const FORMAT_VERY_VERBOSE_NOMAX = 'very_verbose_nomax'; + private const FORMAT_DEBUG_NOMAX = 'debug_nomax'; + private const FORMAT_NORMAL_NOMAX = 'normal_nomax'; + private $barWidth = 28; private $barChar; private $emptyBarChar = '-'; @@ -42,11 +53,11 @@ final class ProgressBar private $startTime; private $stepWidth; private $percent = 0.0; - private $formatLineCount; private $messages = []; private $overwrite = true; private $terminal; private $previousMessage; + private $cursor; private static $formatters; private static $formats; @@ -54,7 +65,7 @@ final class ProgressBar /** * @param int $max Maximum steps (0 if unknown) */ - public function __construct(OutputInterface $output, int $max = 0, float $minSecondsBetweenRedraws = 0.1) + public function __construct(OutputInterface $output, int $max = 0, float $minSecondsBetweenRedraws = 1 / 25) { if ($output instanceof ConsoleOutputInterface) { $output = $output->getErrorOutput(); @@ -78,6 +89,7 @@ public function __construct(OutputInterface $output, int $max = 0, float $minSec } $this->startTime = time(); + $this->cursor = new Cursor($output); } /** @@ -101,8 +113,6 @@ public static function setPlaceholderFormatterDefinition(string $name, callable * Gets the placeholder formatter for a given name. * * @param string $name The placeholder name (including the delimiter char like %) - * - * @return callable|null A PHP callable */ public static function getPlaceholderFormatterDefinition(string $name): ?callable { @@ -134,8 +144,6 @@ public static function setFormatDefinition(string $name, string $format): void * Gets the format for a given name. * * @param string $name The format name - * - * @return string|null A format string */ public static function getFormatDefinition(string $name): ?string { @@ -191,11 +199,29 @@ public function getProgressPercent(): float return $this->percent; } - public function getBarOffset(): int + public function getBarOffset(): float { return floor($this->max ? $this->percent * $this->barWidth : (null === $this->redrawFreq ? (int) (min(5, $this->barWidth / 15) * $this->writeCount) : $this->step) % $this->barWidth); } + public function getEstimated(): float + { + if (!$this->step) { + return 0; + } + + return round((time() - $this->startTime) / $this->step * $this->max); + } + + public function getRemaining(): float + { + if (!$this->step) { + return 0; + } + + return round((time() - $this->startTime) / $this->step * ($this->max - $this->step)); + } + public function setBarWidth(int $size) { $this->barWidth = max(1, $size); @@ -213,11 +239,7 @@ public function setBarCharacter(string $char) public function getBarCharacter(): string { - if (null === $this->barChar) { - return $this->max ? '=' : $this->emptyBarChar; - } - - return $this->barChar; + return $this->barChar ?? ($this->max ? '=' : $this->emptyBarChar); } public function setEmptyBarCharacter(string $char) @@ -357,7 +379,7 @@ public function setMaxSteps(int $max) { $this->format = null; $this->max = max(0, $max); - $this->stepWidth = $this->max ? Helper::strlen((string) $this->max) : 4; + $this->stepWidth = $this->max ? Helper::width((string) $this->max) : 4; } /** @@ -423,8 +445,6 @@ private function setRealFormat(string $format) } else { $this->format = $format; } - - $this->formatLineCount = substr_count($this->format, "\n"); } /** @@ -441,23 +461,25 @@ private function overwrite(string $message): void if ($this->overwrite) { if (null !== $this->previousMessage) { if ($this->output instanceof ConsoleSectionOutput) { - $messageLines = explode("\n", $message); + $messageLines = explode("\n", $this->previousMessage); $lineCount = \count($messageLines); foreach ($messageLines as $messageLine) { - $messageLineLength = Helper::strlenWithoutDecoration($this->output->getFormatter(), $messageLine); + $messageLineLength = Helper::width(Helper::removeDecoration($this->output->getFormatter(), $messageLine)); if ($messageLineLength > $this->terminal->getWidth()) { $lineCount += floor($messageLineLength / $this->terminal->getWidth()); } } $this->output->clear($lineCount); } else { - // Erase previous lines - if ($this->formatLineCount > 0) { - $message = str_repeat("\x1B[1A\x1B[2K", $this->formatLineCount).$message; + $lineCount = substr_count($this->previousMessage, "\n"); + for ($i = 0; $i < $lineCount; ++$i) { + $this->cursor->moveToColumn(1); + $this->cursor->clearLine(); + $this->cursor->moveUp(); } - // Move the cursor to the beginning of the line and erase the line - $message = "\x0D\x1B[2K$message"; + $this->cursor->moveToColumn(1); + $this->cursor->clearLine(); } } } elseif ($this->step > 0) { @@ -476,13 +498,13 @@ private function determineBestFormat(): string switch ($this->output->getVerbosity()) { // OutputInterface::VERBOSITY_QUIET: display is disabled anyway case OutputInterface::VERBOSITY_VERBOSE: - return $this->max ? 'verbose' : 'verbose_nomax'; + return $this->max ? self::FORMAT_VERBOSE : self::FORMAT_VERBOSE_NOMAX; case OutputInterface::VERBOSITY_VERY_VERBOSE: - return $this->max ? 'very_verbose' : 'very_verbose_nomax'; + return $this->max ? self::FORMAT_VERY_VERBOSE : self::FORMAT_VERY_VERBOSE_NOMAX; case OutputInterface::VERBOSITY_DEBUG: - return $this->max ? 'debug' : 'debug_nomax'; + return $this->max ? self::FORMAT_DEBUG : self::FORMAT_DEBUG_NOMAX; default: - return $this->max ? 'normal' : 'normal_nomax'; + return $this->max ? self::FORMAT_NORMAL : self::FORMAT_NORMAL_NOMAX; } } @@ -493,7 +515,7 @@ private static function initPlaceholderFormatters(): array $completeBars = $bar->getBarOffset(); $display = str_repeat($bar->getBarCharacter(), $completeBars); if ($completeBars < $bar->getBarWidth()) { - $emptyBars = $bar->getBarWidth() - $completeBars - Helper::strlenWithoutDecoration($output->getFormatter(), $bar->getProgressCharacter()); + $emptyBars = $bar->getBarWidth() - $completeBars - Helper::length(Helper::removeDecoration($output->getFormatter(), $bar->getProgressCharacter())); $display .= $bar->getProgressCharacter().str_repeat($bar->getEmptyBarCharacter(), $emptyBars); } @@ -507,26 +529,14 @@ private static function initPlaceholderFormatters(): array throw new LogicException('Unable to display the remaining time if the maximum number of steps is not set.'); } - if (!$bar->getProgress()) { - $remaining = 0; - } else { - $remaining = round((time() - $bar->getStartTime()) / $bar->getProgress() * ($bar->getMaxSteps() - $bar->getProgress())); - } - - return Helper::formatTime($remaining); + return Helper::formatTime($bar->getRemaining()); }, 'estimated' => function (self $bar) { if (!$bar->getMaxSteps()) { throw new LogicException('Unable to display the estimated time if the maximum number of steps is not set.'); } - if (!$bar->getProgress()) { - $estimated = 0; - } else { - $estimated = round((time() - $bar->getStartTime()) / $bar->getProgress() * $bar->getMaxSteps()); - } - - return Helper::formatTime($estimated); + return Helper::formatTime($bar->getEstimated()); }, 'memory' => function (self $bar) { return Helper::formatMemory(memory_get_usage(true)); @@ -546,17 +556,17 @@ private static function initPlaceholderFormatters(): array private static function initFormats(): array { return [ - 'normal' => ' %current%/%max% [%bar%] %percent:3s%%', - 'normal_nomax' => ' %current% [%bar%]', + self::FORMAT_NORMAL => ' %current%/%max% [%bar%] %percent:3s%%', + self::FORMAT_NORMAL_NOMAX => ' %current% [%bar%]', - 'verbose' => ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%', - 'verbose_nomax' => ' %current% [%bar%] %elapsed:6s%', + self::FORMAT_VERBOSE => ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%', + self::FORMAT_VERBOSE_NOMAX => ' %current% [%bar%] %elapsed:6s%', - 'very_verbose' => ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s%', - 'very_verbose_nomax' => ' %current% [%bar%] %elapsed:6s%', + self::FORMAT_VERY_VERBOSE => ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s%', + self::FORMAT_VERY_VERBOSE_NOMAX => ' %current% [%bar%] %elapsed:6s%', - 'debug' => ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s% %memory:6s%', - 'debug_nomax' => ' %current% [%bar%] %elapsed:6s% %memory:6s%', + self::FORMAT_DEBUG => ' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s% %memory:6s%', + self::FORMAT_DEBUG_NOMAX => ' %current% [%bar%] %elapsed:6s% %memory:6s%', ]; } @@ -582,7 +592,7 @@ private function buildLine(): string // gets string length for each sub line with multiline format $linesLength = array_map(function ($subLine) { - return Helper::strlenWithoutDecoration($this->output->getFormatter(), rtrim($subLine, "\r")); + return Helper::width(Helper::removeDecoration($this->output->getFormatter(), rtrim($subLine, "\r"))); }, explode("\n", $line)); $linesWidth = max($linesLength); diff --git a/vendor/symfony/console/Helper/ProgressIndicator.php b/vendor/symfony/console/Helper/ProgressIndicator.php index dc37148e..3482343f 100644 --- a/vendor/symfony/console/Helper/ProgressIndicator.php +++ b/vendor/symfony/console/Helper/ProgressIndicator.php @@ -20,6 +20,17 @@ */ class ProgressIndicator { + private const FORMATS = [ + 'normal' => ' %indicator% %message%', + 'normal_no_ansi' => ' %message%', + + 'verbose' => ' %indicator% %message% (%elapsed:6s%)', + 'verbose_no_ansi' => ' %message% (%elapsed:6s%)', + + 'very_verbose' => ' %indicator% %message% (%elapsed:6s%, %memory:6s%)', + 'very_verbose_no_ansi' => ' %message% (%elapsed:6s%, %memory:6s%)', + ]; + private $output; private $startTime; private $format; @@ -30,13 +41,14 @@ class ProgressIndicator private $indicatorUpdateTime; private $started = false; + /** + * @var array + */ private static $formatters; - private static $formats; /** - * @param string|null $format Indicator format - * @param int $indicatorChangeInterval Change interval in milliseconds - * @param array|null $indicatorValues Animated indicator characters + * @param int $indicatorChangeInterval Change interval in milliseconds + * @param array|null $indicatorValues Animated indicator characters */ public function __construct(OutputInterface $output, string $format = null, int $indicatorChangeInterval = 100, array $indicatorValues = null) { @@ -64,10 +76,8 @@ public function __construct(OutputInterface $output, string $format = null, int /** * Sets the current indicator message. - * - * @param string|null $message */ - public function setMessage($message) + public function setMessage(?string $message) { $this->message = $message; @@ -76,10 +86,8 @@ public function setMessage($message) /** * Starts the indicator output. - * - * @param $message */ - public function start($message) + public function start(string $message) { if ($this->started) { throw new LogicException('Progress indicator already started.'); @@ -124,7 +132,7 @@ public function advance() * * @param $message */ - public function finish($message) + public function finish(string $message) { if (!$this->started) { throw new LogicException('Progress indicator has not yet been started.'); @@ -139,28 +147,19 @@ public function finish($message) /** * Gets the format for a given name. * - * @param string $name The format name - * - * @return string|null A format string + * @return string|null */ - public static function getFormatDefinition($name) + public static function getFormatDefinition(string $name) { - if (!self::$formats) { - self::$formats = self::initFormats(); - } - - return self::$formats[$name] ?? null; + return self::FORMATS[$name] ?? null; } /** * Sets a placeholder formatter for a given name. * * This method also allow you to override an existing placeholder. - * - * @param string $name The placeholder name (including the delimiter char like %) - * @param callable $callable A PHP callable */ - public static function setPlaceholderFormatterDefinition($name, $callable) + public static function setPlaceholderFormatterDefinition(string $name, callable $callable) { if (!self::$formatters) { self::$formatters = self::initPlaceholderFormatters(); @@ -170,13 +169,11 @@ public static function setPlaceholderFormatterDefinition($name, $callable) } /** - * Gets the placeholder formatter for a given name. - * - * @param string $name The placeholder name (including the delimiter char like %) + * Gets the placeholder formatter for a given name (including the delimiter char like %). * - * @return callable|null A PHP callable + * @return callable|null */ - public static function getPlaceholderFormatterDefinition($name) + public static function getPlaceholderFormatterDefinition(string $name) { if (!self::$formatters) { self::$formatters = self::initPlaceholderFormatters(); @@ -249,18 +246,4 @@ private static function initPlaceholderFormatters(): array }, ]; } - - private static function initFormats(): array - { - return [ - 'normal' => ' %indicator% %message%', - 'normal_no_ansi' => ' %message%', - - 'verbose' => ' %indicator% %message% (%elapsed:6s%)', - 'verbose_no_ansi' => ' %message% (%elapsed:6s%)', - - 'very_verbose' => ' %indicator% %message% (%elapsed:6s%, %memory:6s%)', - 'very_verbose_no_ansi' => ' %message% (%elapsed:6s%, %memory:6s%)', - ]; - } } diff --git a/vendor/symfony/console/Helper/QuestionHelper.php b/vendor/symfony/console/Helper/QuestionHelper.php index a4754b82..e236be92 100644 --- a/vendor/symfony/console/Helper/QuestionHelper.php +++ b/vendor/symfony/console/Helper/QuestionHelper.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Console\Helper; +use Symfony\Component\Console\Cursor; use Symfony\Component\Console\Exception\MissingInputException; use Symfony\Component\Console\Exception\RuntimeException; use Symfony\Component\Console\Formatter\OutputFormatter; @@ -24,6 +25,8 @@ use Symfony\Component\Console\Question\Question; use Symfony\Component\Console\Terminal; +use function Symfony\Component\String\s; + /** * The QuestionHelper class provides helpers to interact with the user. * @@ -31,8 +34,11 @@ */ class QuestionHelper extends Helper { + /** + * @var resource|null + */ private $inputStream; - private static $shell; + private static $stty = true; private static $stdinIsInteractive; @@ -122,9 +128,18 @@ private function doAsk(OutputInterface $output, Question $question) } if (false === $ret) { - $cp = $this->setIOCodepage(); - $ret = fgets($inputStream, 4096); - $ret = $this->resetIOCodepage($cp, $ret); + $isBlocked = stream_get_meta_data($inputStream)['blocked'] ?? true; + + if (!$isBlocked) { + stream_set_blocking($inputStream, true); + } + + $ret = $this->readInput($inputStream, $question); + + if (!$isBlocked) { + stream_set_blocking($inputStream, false); + } + if (false === $ret) { throw new MissingInputException('Aborted.'); } @@ -199,18 +214,16 @@ protected function writePrompt(OutputInterface $output, Question $question) } /** - * @param string $tag - * * @return string[] */ - protected function formatChoiceQuestionChoices(ChoiceQuestion $question, $tag) + protected function formatChoiceQuestionChoices(ChoiceQuestion $question, string $tag) { $messages = []; - $maxWidth = max(array_map([__CLASS__, 'strlen'], array_keys($choices = $question->getChoices()))); + $maxWidth = max(array_map([__CLASS__, 'width'], array_keys($choices = $question->getChoices()))); foreach ($choices as $key => $value) { - $padding = str_repeat(' ', $maxWidth - self::strlen($key)); + $padding = str_repeat(' ', $maxWidth - self::width($key)); $messages[] = sprintf(" [<$tag>%s$padding] %s", $key, $value); } @@ -239,6 +252,8 @@ protected function writeError(OutputInterface $output, \Exception $error) */ private function autocomplete(OutputInterface $output, Question $question, $inputStream, callable $autocomplete): string { + $cursor = new Cursor($output, $inputStream); + $fullChoice = ''; $ret = ''; @@ -248,6 +263,9 @@ private function autocomplete(OutputInterface $output, Question $question, $inpu $numMatches = \count($matches); $sttyMode = shell_exec('stty -g'); + $isStdin = 'php://stdin' === (stream_get_meta_data($inputStream)['uri'] ?? null); + $r = [$inputStream]; + $w = []; // Disable icanon (so we can fread each keypress) and echo (we'll do echoing here instead) shell_exec('stty -icanon -echo'); @@ -257,18 +275,22 @@ private function autocomplete(OutputInterface $output, Question $question, $inpu // Read a keypress while (!feof($inputStream)) { + while ($isStdin && 0 === @stream_select($r, $w, $w, 0, 100)) { + // Give signal handlers a chance to run + $r = [$inputStream]; + } $c = fread($inputStream, 1); // as opposed to fgets(), fread() returns an empty string when the stream content is empty, not false. if (false === $c || ('' === $ret && '' === $c && null === $question->getDefault())) { - shell_exec(sprintf('stty %s', $sttyMode)); + shell_exec('stty '.$sttyMode); throw new MissingInputException('Aborted.'); } elseif ("\177" === $c) { // Backspace Character if (0 === $numMatches && 0 !== $i) { --$i; + $cursor->moveLeft(s($fullChoice)->slice(-1)->width(false)); + $fullChoice = self::substr($fullChoice, 0, $i); - // Move cursor backwards - $output->write("\033[1D"); } if (0 === $i) { @@ -354,22 +376,19 @@ function ($match) use ($ret) { } } - // Erase characters from cursor to end of line - $output->write("\033[K"); + $cursor->clearLineAfter(); if ($numMatches > 0 && -1 !== $ofs) { - // Save cursor position - $output->write("\0337"); + $cursor->savePosition(); // Write highlighted text, complete the partially entered response $charactersEntered = \strlen(trim($this->mostRecentlyEnteredValue($fullChoice))); $output->write(''.OutputFormatter::escapeTrailingBackslash(substr($matches[$ofs], $charactersEntered)).''); - // Restore cursor position - $output->write("\0338"); + $cursor->restorePosition(); } } // Reset stty so it behaves normally again - shell_exec(sprintf('stty %s', $sttyMode)); + shell_exec('stty '.$sttyMode); return $fullChoice; } @@ -430,7 +449,7 @@ private function getHiddenResponse(OutputInterface $output, $inputStream, bool $ $value = fgets($inputStream, 4096); if (self::$stty && Terminal::hasSttyAvailable()) { - shell_exec(sprintf('stty %s', $sttyMode)); + shell_exec('stty '.$sttyMode); } if (false === $value) { @@ -492,13 +511,45 @@ private function isInteractiveInput($inputStream): bool return self::$stdinIsInteractive = @posix_isatty(fopen('php://stdin', 'r')); } - if (!\function_exists('exec')) { + if (!\function_exists('shell_exec')) { return self::$stdinIsInteractive = true; } - exec('stty 2> /dev/null', $output, $status); + return self::$stdinIsInteractive = (bool) shell_exec('stty 2> '.('\\' === \DIRECTORY_SEPARATOR ? 'NUL' : '/dev/null')); + } - return self::$stdinIsInteractive = 1 !== $status; + /** + * Reads one or more lines of input and returns what is read. + * + * @param resource $inputStream The handler resource + * @param Question $question The question being asked + * + * @return string|false The input received, false in case input could not be read + */ + private function readInput($inputStream, Question $question) + { + if (!$question->isMultiline()) { + $cp = $this->setIOCodepage(); + $ret = fgets($inputStream, 4096); + + return $this->resetIOCodepage($cp, $ret); + } + + $multiLineStreamReader = $this->cloneInputStream($inputStream); + if (null === $multiLineStreamReader) { + return false; + } + + $ret = ''; + $cp = $this->setIOCodepage(); + while (false !== ($char = fgetc($multiLineStreamReader))) { + if (\PHP_EOL === "{$ret}{$char}") { + break; + } + $ret .= $char; + } + + return $this->resetIOCodepage($cp, $ret); } /** @@ -537,4 +588,38 @@ private function resetIOCodepage(int $cp, $input) return $input; } + + /** + * Clones an input stream in order to act on one instance of the same + * stream without affecting the other instance. + * + * @param resource $inputStream The handler resource + * + * @return resource|null The cloned resource, null in case it could not be cloned + */ + private function cloneInputStream($inputStream) + { + $streamMetaData = stream_get_meta_data($inputStream); + $seekable = $streamMetaData['seekable'] ?? false; + $mode = $streamMetaData['mode'] ?? 'rb'; + $uri = $streamMetaData['uri'] ?? null; + + if (null === $uri) { + return null; + } + + $cloneStream = fopen($uri, $mode); + + // For seekable and writable streams, add all the same data to the + // cloned stream and then seek to the same offset. + if (true === $seekable && !\in_array($mode, ['r', 'rb', 'rt'])) { + $offset = ftell($inputStream); + rewind($inputStream); + stream_copy_to_stream($inputStream, $cloneStream); + fseek($inputStream, $offset); + fseek($cloneStream, $offset); + } + + return $cloneStream; + } } diff --git a/vendor/symfony/console/Helper/SymfonyQuestionHelper.php b/vendor/symfony/console/Helper/SymfonyQuestionHelper.php index ace5e186..01f94aba 100644 --- a/vendor/symfony/console/Helper/SymfonyQuestionHelper.php +++ b/vendor/symfony/console/Helper/SymfonyQuestionHelper.php @@ -33,6 +33,10 @@ protected function writePrompt(OutputInterface $output, Question $question) $text = OutputFormatter::escapeTrailingBackslash($question->getQuestion()); $default = $question->getDefault(); + if ($question->isMultiline()) { + $text .= sprintf(' (press %s to continue)', $this->getEofShortcut()); + } + switch (true) { case null === $default: $text = sprintf(' %s:', $text); @@ -93,4 +97,13 @@ protected function writeError(OutputInterface $output, \Exception $error) parent::writeError($output, $error); } + + private function getEofShortcut(): string + { + if ('Windows' === \PHP_OS_FAMILY) { + return 'Ctrl+Z then Enter'; + } + + return 'Ctrl+D'; + } } diff --git a/vendor/symfony/console/Helper/Table.php b/vendor/symfony/console/Helper/Table.php index f068f02f..5c3447ab 100644 --- a/vendor/symfony/console/Helper/Table.php +++ b/vendor/symfony/console/Helper/Table.php @@ -85,6 +85,9 @@ class Table private $columnWidths = []; private $columnMaxWidths = []; + /** + * @var array|null + */ private static $styles; private $rendered = false; @@ -102,10 +105,8 @@ public function __construct(OutputInterface $output) /** * Sets a style definition. - * - * @param string $name The style name */ - public static function setStyleDefinition($name, TableStyle $style) + public static function setStyleDefinition(string $name, TableStyle $style) { if (!self::$styles) { self::$styles = self::initStyles(); @@ -117,11 +118,9 @@ public static function setStyleDefinition($name, TableStyle $style) /** * Gets a style definition by name. * - * @param string $name The style name - * * @return TableStyle */ - public static function getStyleDefinition($name) + public static function getStyleDefinition(string $name) { if (!self::$styles) { self::$styles = self::initStyles(); @@ -161,15 +160,12 @@ public function getStyle() /** * Sets table column style. * - * @param int $columnIndex Column index - * @param TableStyle|string $name The style name or a TableStyle instance + * @param TableStyle|string $name The style name or a TableStyle instance * * @return $this */ - public function setColumnStyle($columnIndex, $name) + public function setColumnStyle(int $columnIndex, $name) { - $columnIndex = (int) $columnIndex; - $this->columnStyles[$columnIndex] = $this->resolveStyle($name); return $this; @@ -180,11 +176,9 @@ public function setColumnStyle($columnIndex, $name) * * If style was not set, it returns the global table style. * - * @param int $columnIndex Column index - * * @return TableStyle */ - public function getColumnStyle($columnIndex) + public function getColumnStyle(int $columnIndex) { return $this->columnStyles[$columnIndex] ?? $this->getStyle(); } @@ -192,14 +186,11 @@ public function getColumnStyle($columnIndex) /** * Sets the minimum width of a column. * - * @param int $columnIndex Column index - * @param int $width Minimum column width in characters - * * @return $this */ - public function setColumnWidth($columnIndex, $width) + public function setColumnWidth(int $columnIndex, int $width) { - $this->columnWidths[(int) $columnIndex] = (int) $width; + $this->columnWidths[$columnIndex] = $width; return $this; } @@ -230,7 +221,7 @@ public function setColumnWidths(array $widths) public function setColumnMaxWidth(int $columnIndex, int $width): self { if (!$this->output->getFormatter() instanceof WrappableOutputFormatterInterface) { - throw new \LogicException(sprintf('Setting a maximum column width is only supported when using a "%s" formatter, got "%s".', WrappableOutputFormatterInterface::class, \get_class($this->output->getFormatter()))); + throw new \LogicException(sprintf('Setting a maximum column width is only supported when using a "%s" formatter, got "%s".', WrappableOutputFormatterInterface::class, get_debug_type($this->output->getFormatter()))); } $this->columnMaxWidths[$columnIndex] = $width; @@ -238,6 +229,9 @@ public function setColumnMaxWidth(int $columnIndex, int $width): self return $this; } + /** + * @return $this + */ public function setHeaders(array $headers) { $headers = array_values($headers); @@ -257,6 +251,9 @@ public function setRows(array $rows) return $this->addRows($rows); } + /** + * @return $this + */ public function addRows(array $rows) { foreach ($rows as $row) { @@ -266,6 +263,9 @@ public function addRows(array $rows) return $this; } + /** + * @return $this + */ public function addRow($row) { if ($row instanceof TableSeparator) { @@ -285,6 +285,8 @@ public function addRow($row) /** * Adds a row to the table, and re-renders the table. + * + * @return $this */ public function appendRow($row): self { @@ -302,6 +304,9 @@ public function appendRow($row): self return $this; } + /** + * @return $this + */ public function setRow($column, array $row) { $this->rows[$column] = $row; @@ -309,6 +314,9 @@ public function setRow($column, array $row) return $this; } + /** + * @return $this + */ public function setHeaderTitle(?string $title): self { $this->headerTitle = $title; @@ -316,6 +324,9 @@ public function setHeaderTitle(?string $title): self return $this; } + /** + * @return $this + */ public function setFooterTitle(?string $title): self { $this->footerTitle = $title; @@ -323,6 +334,9 @@ public function setFooterTitle(?string $title): self return $this; } + /** + * @return $this + */ public function setHorizontal(bool $horizontal = true): self { $this->horizontal = $horizontal; @@ -466,11 +480,11 @@ private function renderRowSeparator(int $type = self::SEPARATOR_MID, string $tit } if (null !== $title) { - $titleLength = Helper::strlenWithoutDecoration($formatter = $this->output->getFormatter(), $formattedTitle = sprintf($titleFormat, $title)); - $markupLength = Helper::strlen($markup); + $titleLength = Helper::width(Helper::removeDecoration($formatter = $this->output->getFormatter(), $formattedTitle = sprintf($titleFormat, $title))); + $markupLength = Helper::width($markup); if ($titleLength > $limit = $markupLength - 4) { $titleLength = $limit; - $formatLength = Helper::strlenWithoutDecoration($formatter, sprintf($titleFormat, '')); + $formatLength = Helper::width(Helper::removeDecoration($formatter, sprintf($titleFormat, ''))); $formattedTitle = sprintf($titleFormat, Helper::substr($title, 0, $limit - $formatLength - 3).'...'); } @@ -543,10 +557,33 @@ private function renderCell(array $row, int $column, string $cellFormat): string return sprintf($style->getBorderFormat(), str_repeat($style->getBorderChars()[2], $width)); } - $width += Helper::strlen($cell) - Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell); + $width += Helper::length($cell) - Helper::length(Helper::removeDecoration($this->output->getFormatter(), $cell)); $content = sprintf($style->getCellRowContentFormat(), $cell); - return sprintf($cellFormat, str_pad($content, $width, $style->getPaddingChar(), $style->getPadType())); + $padType = $style->getPadType(); + if ($cell instanceof TableCell && $cell->getStyle() instanceof TableCellStyle) { + $isNotStyledByTag = !preg_match('/^<(\w+|(\w+=[\w,]+;?)*)>.+<\/(\w+|(\w+=\w+;?)*)?>$/', $cell); + if ($isNotStyledByTag) { + $cellFormat = $cell->getStyle()->getCellFormat(); + if (!\is_string($cellFormat)) { + $tag = http_build_query($cell->getStyle()->getTagOptions(), '', ';'); + $cellFormat = '<'.$tag.'>%s'; + } + + if (strstr($content, '')) { + $content = str_replace('', '', $content); + $width -= 3; + } + if (strstr($content, '')) { + $content = str_replace('', '', $content); + $width -= \strlen(''); + } + } + + $padType = $cell->getStyle()->getPadByAlign(); + } + + return sprintf($cellFormat, str_pad($content, $width, $style->getPaddingChar(), $padType)); } /** @@ -578,7 +615,7 @@ private function buildTableRows(array $rows): TableRows foreach ($rows[$rowKey] as $column => $cell) { $colspan = $cell instanceof TableCell ? $cell->getColspan() : 1; - if (isset($this->columnMaxWidths[$column]) && Helper::strlenWithoutDecoration($formatter, $cell) > $this->columnMaxWidths[$column]) { + if (isset($this->columnMaxWidths[$column]) && Helper::width(Helper::removeDecoration($formatter, $cell)) > $this->columnMaxWidths[$column]) { $cell = $formatter->formatAndWrap($cell, $this->columnMaxWidths[$column] * $colspan); } if (!strstr($cell ?? '', "\n")) { @@ -642,7 +679,7 @@ private function fillNextRows(array $rows, int $line): array $unmergedRows = []; foreach ($rows[$line] as $column => $cell) { if (null !== $cell && !$cell instanceof TableCell && !\is_scalar($cell) && !(\is_object($cell) && method_exists($cell, '__toString'))) { - throw new InvalidArgumentException(sprintf('A cell must be a TableCell, a scalar or an object implementing "__toString()", "%s" given.', \gettype($cell))); + throw new InvalidArgumentException(sprintf('A cell must be a TableCell, a scalar or an object implementing "__toString()", "%s" given.', get_debug_type($cell))); } if ($cell instanceof TableCell && $cell->getRowspan() > 1) { $nbLines = $cell->getRowspan() - 1; @@ -651,7 +688,7 @@ private function fillNextRows(array $rows, int $line): array $lines = explode("\n", str_replace("\n", "\n", $cell)); $nbLines = \count($lines) > $nbLines ? substr_count($cell, "\n") : $nbLines; - $rows[$line][$column] = new TableCell($lines[0], ['colspan' => $cell->getColspan()]); + $rows[$line][$column] = new TableCell($lines[0], ['colspan' => $cell->getColspan(), 'style' => $cell->getStyle()]); unset($lines[0]); } @@ -659,7 +696,7 @@ private function fillNextRows(array $rows, int $line): array $unmergedRows = array_replace_recursive(array_fill($line + 1, $nbLines, []), $unmergedRows); foreach ($unmergedRows as $unmergedRowKey => $unmergedRow) { $value = $lines[$unmergedRowKey - $line] ?? ''; - $unmergedRows[$unmergedRowKey][$column] = new TableCell($value, ['colspan' => $cell->getColspan()]); + $unmergedRows[$unmergedRowKey][$column] = new TableCell($value, ['colspan' => $cell->getColspan(), 'style' => $cell->getStyle()]); if ($nbLines === $unmergedRowKey - $line) { break; } @@ -766,9 +803,9 @@ private function calculateColumnsWidth(iterable $groups) foreach ($row as $i => $cell) { if ($cell instanceof TableCell) { $textContent = Helper::removeDecoration($this->output->getFormatter(), $cell); - $textLength = Helper::strlen($textContent); + $textLength = Helper::width($textContent); if ($textLength > 0) { - $contentColumns = str_split($textContent, ceil($textLength / $cell->getColspan())); + $contentColumns = mb_str_split($textContent, ceil($textLength / $cell->getColspan())); foreach ($contentColumns as $position => $content) { $row[$i + $position] = $content; } @@ -780,13 +817,13 @@ private function calculateColumnsWidth(iterable $groups) } } - $this->effectiveColumnWidths[$column] = max($lengths) + Helper::strlen($this->style->getCellRowContentFormat()) - 2; + $this->effectiveColumnWidths[$column] = max($lengths) + Helper::width($this->style->getCellRowContentFormat()) - 2; } } private function getColumnSeparatorWidth(): int { - return Helper::strlen(sprintf($this->style->getBorderFormat(), $this->style->getBorderChars()[3])); + return Helper::width(sprintf($this->style->getBorderFormat(), $this->style->getBorderChars()[3])); } private function getCellWidth(array $row, int $column): int @@ -795,7 +832,7 @@ private function getCellWidth(array $row, int $column): int if (isset($row[$column])) { $cell = $row[$column]; - $cellWidth = Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell); + $cellWidth = Helper::width(Helper::removeDecoration($this->output->getFormatter(), $cell)); } $columnWidth = $this->columnWidths[$column] ?? 0; @@ -813,6 +850,9 @@ private function cleanup() $this->numberOfColumns = null; } + /** + * @return array + */ private static function initStyles(): array { $borderless = new TableStyle(); diff --git a/vendor/symfony/console/Helper/TableCell.php b/vendor/symfony/console/Helper/TableCell.php index 5b6af4a9..1a7bc6ed 100644 --- a/vendor/symfony/console/Helper/TableCell.php +++ b/vendor/symfony/console/Helper/TableCell.php @@ -22,6 +22,7 @@ class TableCell private $options = [ 'rowspan' => 1, 'colspan' => 1, + 'style' => null, ]; public function __construct(string $value = '', array $options = []) @@ -33,6 +34,10 @@ public function __construct(string $value = '', array $options = []) throw new InvalidArgumentException(sprintf('The TableCell does not support the following options: \'%s\'.', implode('\', \'', $diff))); } + if (isset($options['style']) && !$options['style'] instanceof TableCellStyle) { + throw new InvalidArgumentException('The style option must be an instance of "TableCellStyle".'); + } + $this->options = array_merge($this->options, $options); } @@ -65,4 +70,9 @@ public function getRowspan() { return (int) $this->options['rowspan']; } + + public function getStyle(): ?TableCellStyle + { + return $this->options['style']; + } } diff --git a/vendor/symfony/console/Helper/TableRows.php b/vendor/symfony/console/Helper/TableRows.php index 16aabb3f..cbc07d29 100644 --- a/vendor/symfony/console/Helper/TableRows.php +++ b/vendor/symfony/console/Helper/TableRows.php @@ -18,15 +18,13 @@ class TableRows implements \IteratorAggregate { private $generator; - public function __construct(callable $generator) + public function __construct(\Closure $generator) { $this->generator = $generator; } public function getIterator(): \Traversable { - $g = $this->generator; - - return $g(); + return ($this->generator)(); } } diff --git a/vendor/symfony/console/Helper/TableStyle.php b/vendor/symfony/console/Helper/TableStyle.php index a8df59b3..dfc41e6a 100644 --- a/vendor/symfony/console/Helper/TableStyle.php +++ b/vendor/symfony/console/Helper/TableStyle.php @@ -51,11 +51,9 @@ class TableStyle /** * Sets padding character, used for cell padding. * - * @param string $paddingChar - * * @return $this */ - public function setPaddingChar($paddingChar) + public function setPaddingChar(string $paddingChar) { if (!$paddingChar) { throw new LogicException('The padding char must not be empty.'); @@ -90,8 +88,7 @@ public function getPaddingChar() * ╚═══════════════╧══════════════════════════╧══════════════════╝ * * - * @param string $outside Outside border char (see #1 of example) - * @param string|null $inside Inside border char (see #2 of example), equals $outside if null + * @return $this */ public function setHorizontalBorderChars(string $outside, string $inside = null): self { @@ -101,36 +98,6 @@ public function setHorizontalBorderChars(string $outside, string $inside = null) return $this; } - /** - * Sets horizontal border character. - * - * @param string $horizontalBorderChar - * - * @return $this - * - * @deprecated since Symfony 4.1, use {@link setHorizontalBorderChars()} instead. - */ - public function setHorizontalBorderChar($horizontalBorderChar) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1, use setHorizontalBorderChars() instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->setHorizontalBorderChars($horizontalBorderChar, $horizontalBorderChar); - } - - /** - * Gets horizontal border character. - * - * @return string - * - * @deprecated since Symfony 4.1, use {@link getBorderChars()} instead. - */ - public function getHorizontalBorderChar() - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1, use getBorderChars() instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->horizontalOutsideBorderChar; - } - /** * Sets vertical border characters. * @@ -146,8 +113,7 @@ public function getHorizontalBorderChar() * ╚═══════════════╧══════════════════════════╧══════════════════╝ * * - * @param string $outside Outside border char (see #1 of example) - * @param string|null $inside Inside border char (see #2 of example), equals $outside if null + * @return $this */ public function setVerticalBorderChars(string $outside, string $inside = null): self { @@ -157,36 +123,6 @@ public function setVerticalBorderChars(string $outside, string $inside = null): return $this; } - /** - * Sets vertical border character. - * - * @param string $verticalBorderChar - * - * @return $this - * - * @deprecated since Symfony 4.1, use {@link setVerticalBorderChars()} instead. - */ - public function setVerticalBorderChar($verticalBorderChar) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1, use setVerticalBorderChars() instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->setVerticalBorderChars($verticalBorderChar, $verticalBorderChar); - } - - /** - * Gets vertical border character. - * - * @return string - * - * @deprecated since Symfony 4.1, use {@link getBorderChars()} instead. - */ - public function getVerticalBorderChar() - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1, use getBorderChars() instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->verticalOutsideBorderChar; - } - /** * Gets border characters. * @@ -230,6 +166,8 @@ public function getBorderChars(): array * @param string|null $topLeftBottom Top left bottom char (see #8' of example), equals to $midLeft if null * @param string|null $topMidBottom Top mid bottom char (see #0' of example), equals to $cross if null * @param string|null $topRightBottom Top right bottom char (see #4' of example), equals to $midRight if null + * + * @return $this */ public function setCrossingChars(string $cross, string $topLeft, string $topMid, string $topRight, string $midRight, string $bottomRight, string $bottomMid, string $bottomLeft, string $midLeft, string $topLeftBottom = null, string $topMidBottom = null, string $topRightBottom = null): self { @@ -259,22 +197,6 @@ public function setDefaultCrossingChar(string $char): self return $this->setCrossingChars($char, $char, $char, $char, $char, $char, $char, $char, $char); } - /** - * Sets crossing character. - * - * @param string $crossingChar - * - * @return $this - * - * @deprecated since Symfony 4.1. Use {@link setDefaultCrossingChar()} instead. - */ - public function setCrossingChar($crossingChar) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1. Use setDefaultCrossingChar() instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->setDefaultCrossingChar($crossingChar); - } - /** * Gets crossing character. * @@ -311,11 +233,9 @@ public function getCrossingChars(): array /** * Sets header cell format. * - * @param string $cellHeaderFormat - * * @return $this */ - public function setCellHeaderFormat($cellHeaderFormat) + public function setCellHeaderFormat(string $cellHeaderFormat) { $this->cellHeaderFormat = $cellHeaderFormat; @@ -335,11 +255,9 @@ public function getCellHeaderFormat() /** * Sets row cell format. * - * @param string $cellRowFormat - * * @return $this */ - public function setCellRowFormat($cellRowFormat) + public function setCellRowFormat(string $cellRowFormat) { $this->cellRowFormat = $cellRowFormat; @@ -359,11 +277,9 @@ public function getCellRowFormat() /** * Sets row cell content format. * - * @param string $cellRowContentFormat - * * @return $this */ - public function setCellRowContentFormat($cellRowContentFormat) + public function setCellRowContentFormat(string $cellRowContentFormat) { $this->cellRowContentFormat = $cellRowContentFormat; @@ -383,11 +299,9 @@ public function getCellRowContentFormat() /** * Sets table border format. * - * @param string $borderFormat - * * @return $this */ - public function setBorderFormat($borderFormat) + public function setBorderFormat(string $borderFormat) { $this->borderFormat = $borderFormat; @@ -407,11 +321,9 @@ public function getBorderFormat() /** * Sets cell padding type. * - * @param int $padType STR_PAD_* - * * @return $this */ - public function setPadType($padType) + public function setPadType(int $padType) { if (!\in_array($padType, [\STR_PAD_LEFT, \STR_PAD_RIGHT, \STR_PAD_BOTH], true)) { throw new InvalidArgumentException('Invalid padding type. Expected one of (STR_PAD_LEFT, STR_PAD_RIGHT, STR_PAD_BOTH).'); @@ -437,6 +349,9 @@ public function getHeaderTitleFormat(): string return $this->headerTitleFormat; } + /** + * @return $this + */ public function setHeaderTitleFormat(string $format): self { $this->headerTitleFormat = $format; @@ -449,6 +364,9 @@ public function getFooterTitleFormat(): string return $this->footerTitleFormat; } + /** + * @return $this + */ public function setFooterTitleFormat(string $format): self { $this->footerTitleFormat = $format; diff --git a/vendor/symfony/console/Input/ArgvInput.php b/vendor/symfony/console/Input/ArgvInput.php index 63f40f27..675b9ef5 100644 --- a/vendor/symfony/console/Input/ArgvInput.php +++ b/vendor/symfony/console/Input/ArgvInput.php @@ -43,9 +43,6 @@ class ArgvInput extends Input private $tokens; private $parsed; - /** - * @param array|null $argv An array of parameters from the CLI (in the argv format) - */ public function __construct(array $argv = null, InputDefinition $definition = null) { $argv = $argv ?? $_SERVER['argv'] ?? []; @@ -71,18 +68,25 @@ protected function parse() $parseOptions = true; $this->parsed = $this->tokens; while (null !== $token = array_shift($this->parsed)) { - if ($parseOptions && '' == $token) { - $this->parseArgument($token); - } elseif ($parseOptions && '--' == $token) { - $parseOptions = false; - } elseif ($parseOptions && str_starts_with($token, '--')) { - $this->parseLongOption($token); - } elseif ($parseOptions && '-' === $token[0] && '-' !== $token) { - $this->parseShortOption($token); - } else { - $this->parseArgument($token); - } + $parseOptions = $this->parseToken($token, $parseOptions); + } + } + + protected function parseToken(string $token, bool $parseOptions): bool + { + if ($parseOptions && '' == $token) { + $this->parseArgument($token); + } elseif ($parseOptions && '--' == $token) { + return false; + } elseif ($parseOptions && str_starts_with($token, '--')) { + $this->parseLongOption($token); + } elseif ($parseOptions && '-' === $token[0] && '-' !== $token) { + $this->parseShortOption($token); + } else { + $this->parseArgument($token); } + + return $parseOptions; } /** @@ -168,11 +172,25 @@ private function parseArgument(string $token) // unexpected argument } else { $all = $this->definition->getArguments(); + $symfonyCommandName = null; + if (($inputArgument = $all[$key = array_key_first($all)] ?? null) && 'command' === $inputArgument->getName()) { + $symfonyCommandName = $this->arguments['command'] ?? null; + unset($all[$key]); + } + if (\count($all)) { - throw new RuntimeException(sprintf('Too many arguments, expected arguments "%s".', implode('" "', array_keys($all)))); + if ($symfonyCommandName) { + $message = sprintf('Too many arguments to "%s" command, expected arguments "%s".', $symfonyCommandName, implode('" "', array_keys($all))); + } else { + $message = sprintf('Too many arguments, expected arguments "%s".', implode('" "', array_keys($all))); + } + } elseif ($symfonyCommandName) { + $message = sprintf('No arguments expected for "%s" command, got "%s".', $symfonyCommandName, $token); + } else { + $message = sprintf('No arguments expected, got "%s".', $token); } - throw new RuntimeException(sprintf('No arguments expected, got "%s".', $token)); + throw new RuntimeException($message); } } @@ -198,7 +216,17 @@ private function addShortOption(string $shortcut, $value) private function addLongOption(string $name, $value) { if (!$this->definition->hasOption($name)) { - throw new RuntimeException(sprintf('The "--%s" option does not exist.', $name)); + if (!$this->definition->hasNegation($name)) { + throw new RuntimeException(sprintf('The "--%s" option does not exist.', $name)); + } + + $optionName = $this->definition->negationToName($name); + if (null !== $value) { + throw new RuntimeException(sprintf('The "--%s" option does not accept a value.', $name)); + } + $this->options[$optionName] = false; + + return; } $option = $this->definition->getOption($name); @@ -273,7 +301,7 @@ public function getFirstArgument() /** * {@inheritdoc} */ - public function hasParameterOption($values, $onlyParams = false) + public function hasParameterOption($values, bool $onlyParams = false) { $values = (array) $values; @@ -298,7 +326,7 @@ public function hasParameterOption($values, $onlyParams = false) /** * {@inheritdoc} */ - public function getParameterOption($values, $default = false, $onlyParams = false) + public function getParameterOption($values, $default = false, bool $onlyParams = false) { $values = (array) $values; $tokens = $this->tokens; diff --git a/vendor/symfony/console/Input/ArrayInput.php b/vendor/symfony/console/Input/ArrayInput.php index 30bd2054..c6516148 100644 --- a/vendor/symfony/console/Input/ArrayInput.php +++ b/vendor/symfony/console/Input/ArrayInput.php @@ -53,7 +53,7 @@ public function getFirstArgument() /** * {@inheritdoc} */ - public function hasParameterOption($values, $onlyParams = false) + public function hasParameterOption($values, bool $onlyParams = false) { $values = (array) $values; @@ -77,7 +77,7 @@ public function hasParameterOption($values, $onlyParams = false) /** * {@inheritdoc} */ - public function getParameterOption($values, $default = false, $onlyParams = false) + public function getParameterOption($values, $default = false, bool $onlyParams = false) { $values = (array) $values; @@ -166,7 +166,14 @@ private function addShortOption(string $shortcut, $value) private function addLongOption(string $name, $value) { if (!$this->definition->hasOption($name)) { - throw new InvalidOptionException(sprintf('The "--%s" option does not exist.', $name)); + if (!$this->definition->hasNegation($name)) { + throw new InvalidOptionException(sprintf('The "--%s" option does not exist.', $name)); + } + + $optionName = $this->definition->negationToName($name); + $this->options[$optionName] = false; + + return; } $option = $this->definition->getOption($name); diff --git a/vendor/symfony/console/Input/Input.php b/vendor/symfony/console/Input/Input.php index d7f29073..d37460ed 100644 --- a/vendor/symfony/console/Input/Input.php +++ b/vendor/symfony/console/Input/Input.php @@ -88,9 +88,9 @@ public function isInteractive() /** * {@inheritdoc} */ - public function setInteractive($interactive) + public function setInteractive(bool $interactive) { - $this->interactive = (bool) $interactive; + $this->interactive = $interactive; } /** @@ -104,9 +104,9 @@ public function getArguments() /** * {@inheritdoc} */ - public function getArgument($name) + public function getArgument(string $name) { - if (!$this->definition->hasArgument((string) $name)) { + if (!$this->definition->hasArgument($name)) { throw new InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name)); } @@ -116,9 +116,9 @@ public function getArgument($name) /** * {@inheritdoc} */ - public function setArgument($name, $value) + public function setArgument(string $name, $value) { - if (!$this->definition->hasArgument((string) $name)) { + if (!$this->definition->hasArgument($name)) { throw new InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name)); } @@ -128,9 +128,9 @@ public function setArgument($name, $value) /** * {@inheritdoc} */ - public function hasArgument($name) + public function hasArgument(string $name) { - return $this->definition->hasArgument((string) $name); + return $this->definition->hasArgument($name); } /** @@ -144,8 +144,16 @@ public function getOptions() /** * {@inheritdoc} */ - public function getOption($name) + public function getOption(string $name) { + if ($this->definition->hasNegation($name)) { + if (null === $value = $this->getOption($this->definition->negationToName($name))) { + return $value; + } + + return !$value; + } + if (!$this->definition->hasOption($name)) { throw new InvalidArgumentException(sprintf('The "%s" option does not exist.', $name)); } @@ -156,9 +164,13 @@ public function getOption($name) /** * {@inheritdoc} */ - public function setOption($name, $value) + public function setOption(string $name, $value) { - if (!$this->definition->hasOption($name)) { + if ($this->definition->hasNegation($name)) { + $this->options[$this->definition->negationToName($name)] = !$value; + + return; + } elseif (!$this->definition->hasOption($name)) { throw new InvalidArgumentException(sprintf('The "%s" option does not exist.', $name)); } @@ -168,19 +180,17 @@ public function setOption($name, $value) /** * {@inheritdoc} */ - public function hasOption($name) + public function hasOption(string $name) { - return $this->definition->hasOption($name); + return $this->definition->hasOption($name) || $this->definition->hasNegation($name); } /** * Escapes a token through escapeshellarg if it contains unsafe chars. * - * @param string $token - * * @return string */ - public function escapeToken($token) + public function escapeToken(string $token) { return preg_match('{^[\w-]+$}', $token) ? $token : escapeshellarg($token); } diff --git a/vendor/symfony/console/Input/InputArgument.php b/vendor/symfony/console/Input/InputArgument.php index accd4d0c..8a64f7ac 100644 --- a/vendor/symfony/console/Input/InputArgument.php +++ b/vendor/symfony/console/Input/InputArgument.php @@ -32,7 +32,7 @@ class InputArgument /** * @param string $name The argument name - * @param int|null $mode The argument mode: self::REQUIRED or self::OPTIONAL + * @param int|null $mode The argument mode: a bit mask of self::REQUIRED, self::OPTIONAL and self::IS_ARRAY * @param string $description A description text * @param string|bool|int|float|array|null $default The default value (for self::OPTIONAL mode only) * @@ -56,7 +56,7 @@ public function __construct(string $name, int $mode = null, string $description /** * Returns the argument name. * - * @return string The argument name + * @return string */ public function getName() { @@ -120,7 +120,7 @@ public function getDefault() /** * Returns the description text. * - * @return string The description text + * @return string */ public function getDescription() { diff --git a/vendor/symfony/console/Input/InputDefinition.php b/vendor/symfony/console/Input/InputDefinition.php index e2cd6d71..11f704f0 100644 --- a/vendor/symfony/console/Input/InputDefinition.php +++ b/vendor/symfony/console/Input/InputDefinition.php @@ -30,9 +30,10 @@ class InputDefinition { private $arguments; private $requiredCount; - private $hasAnArrayArgument = false; - private $hasOptional; + private $lastArrayArgument; + private $lastOptionalArgument; private $options; + private $negations; private $shortcuts; /** @@ -67,12 +68,12 @@ public function setDefinition(array $definition) * * @param InputArgument[] $arguments An array of InputArgument objects */ - public function setArguments($arguments = []) + public function setArguments(array $arguments = []) { $this->arguments = []; $this->requiredCount = 0; - $this->hasOptional = false; - $this->hasAnArrayArgument = false; + $this->lastOptionalArgument = null; + $this->lastArrayArgument = null; $this->addArguments($arguments); } @@ -81,7 +82,7 @@ public function setArguments($arguments = []) * * @param InputArgument[] $arguments An array of InputArgument objects */ - public function addArguments($arguments = []) + public function addArguments(?array $arguments = []) { if (null !== $arguments) { foreach ($arguments as $argument) { @@ -99,22 +100,22 @@ public function addArgument(InputArgument $argument) throw new LogicException(sprintf('An argument with name "%s" already exists.', $argument->getName())); } - if ($this->hasAnArrayArgument) { - throw new LogicException('Cannot add an argument after an array argument.'); + if (null !== $this->lastArrayArgument) { + throw new LogicException(sprintf('Cannot add a required argument "%s" after an array argument "%s".', $argument->getName(), $this->lastArrayArgument->getName())); } - if ($argument->isRequired() && $this->hasOptional) { - throw new LogicException('Cannot add a required argument after an optional one.'); + if ($argument->isRequired() && null !== $this->lastOptionalArgument) { + throw new LogicException(sprintf('Cannot add a required argument "%s" after an optional one "%s".', $argument->getName(), $this->lastOptionalArgument->getName())); } if ($argument->isArray()) { - $this->hasAnArrayArgument = true; + $this->lastArrayArgument = $argument; } if ($argument->isRequired()) { ++$this->requiredCount; } else { - $this->hasOptional = true; + $this->lastOptionalArgument = $argument; } $this->arguments[$argument->getName()] = $argument; @@ -125,7 +126,7 @@ public function addArgument(InputArgument $argument) * * @param string|int $name The InputArgument name or position * - * @return InputArgument An InputArgument object + * @return InputArgument * * @throws InvalidArgumentException When argument given doesn't exist */ @@ -145,7 +146,7 @@ public function getArgument($name) * * @param string|int $name The InputArgument name or position * - * @return bool true if the InputArgument object exists, false otherwise + * @return bool */ public function hasArgument($name) { @@ -157,7 +158,7 @@ public function hasArgument($name) /** * Gets the array of InputArgument objects. * - * @return InputArgument[] An array of InputArgument objects + * @return InputArgument[] */ public function getArguments() { @@ -167,17 +168,17 @@ public function getArguments() /** * Returns the number of InputArguments. * - * @return int The number of InputArguments + * @return int */ public function getArgumentCount() { - return $this->hasAnArrayArgument ? \PHP_INT_MAX : \count($this->arguments); + return null !== $this->lastArrayArgument ? \PHP_INT_MAX : \count($this->arguments); } /** * Returns the number of required InputArguments. * - * @return int The number of required InputArguments + * @return int */ public function getArgumentRequiredCount() { @@ -202,10 +203,11 @@ public function getArgumentDefaults() * * @param InputOption[] $options An array of InputOption objects */ - public function setOptions($options = []) + public function setOptions(array $options = []) { $this->options = []; $this->shortcuts = []; + $this->negations = []; $this->addOptions($options); } @@ -214,7 +216,7 @@ public function setOptions($options = []) * * @param InputOption[] $options An array of InputOption objects */ - public function addOptions($options = []) + public function addOptions(array $options = []) { foreach ($options as $option) { $this->addOption($option); @@ -229,6 +231,9 @@ public function addOption(InputOption $option) if (isset($this->options[$option->getName()]) && !$option->equals($this->options[$option->getName()])) { throw new LogicException(sprintf('An option named "%s" already exists.', $option->getName())); } + if (isset($this->negations[$option->getName()])) { + throw new LogicException(sprintf('An option named "%s" already exists.', $option->getName())); + } if ($option->getShortcut()) { foreach (explode('|', $option->getShortcut()) as $shortcut) { @@ -244,18 +249,24 @@ public function addOption(InputOption $option) $this->shortcuts[$shortcut] = $option->getName(); } } + + if ($option->isNegatable()) { + $negatedName = 'no-'.$option->getName(); + if (isset($this->options[$negatedName])) { + throw new LogicException(sprintf('An option named "%s" already exists.', $negatedName)); + } + $this->negations[$negatedName] = $option->getName(); + } } /** * Returns an InputOption by name. * - * @param string $name The InputOption name - * - * @return InputOption A InputOption object + * @return InputOption * * @throws InvalidArgumentException When option given doesn't exist */ - public function getOption($name) + public function getOption(string $name) { if (!$this->hasOption($name)) { throw new InvalidArgumentException(sprintf('The "--%s" option does not exist.', $name)); @@ -270,11 +281,9 @@ public function getOption($name) * This method can't be used to check if the user included the option when * executing the command (use getOption() instead). * - * @param string $name The InputOption name - * - * @return bool true if the InputOption object exists, false otherwise + * @return bool */ - public function hasOption($name) + public function hasOption(string $name) { return isset($this->options[$name]); } @@ -282,7 +291,7 @@ public function hasOption($name) /** * Gets the array of InputOption objects. * - * @return InputOption[] An array of InputOption objects + * @return InputOption[] */ public function getOptions() { @@ -292,23 +301,27 @@ public function getOptions() /** * Returns true if an InputOption object exists by shortcut. * - * @param string $name The InputOption shortcut - * - * @return bool true if the InputOption object exists, false otherwise + * @return bool */ - public function hasShortcut($name) + public function hasShortcut(string $name) { return isset($this->shortcuts[$name]); } + /** + * Returns true if an InputOption object exists by negated name. + */ + public function hasNegation(string $name): bool + { + return isset($this->negations[$name]); + } + /** * Gets an InputOption by shortcut. * - * @param string $shortcut The Shortcut name - * - * @return InputOption An InputOption object + * @return InputOption */ - public function getOptionForShortcut($shortcut) + public function getOptionForShortcut(string $shortcut) { return $this->getOption($this->shortcutToName($shortcut)); } @@ -343,13 +356,27 @@ public function shortcutToName(string $shortcut): string } /** - * Gets the synopsis. + * Returns the InputOption name given a negation. + * + * @throws InvalidArgumentException When option given does not exist * - * @param bool $short Whether to return the short version (with options folded) or not + * @internal + */ + public function negationToName(string $negation): string + { + if (!isset($this->negations[$negation])) { + throw new InvalidArgumentException(sprintf('The "--%s" option does not exist.', $negation)); + } + + return $this->negations[$negation]; + } + + /** + * Gets the synopsis. * - * @return string The synopsis + * @return string */ - public function getSynopsis($short = false) + public function getSynopsis(bool $short = false) { $elements = []; @@ -368,7 +395,8 @@ public function getSynopsis($short = false) } $shortcut = $option->getShortcut() ? sprintf('-%s|', $option->getShortcut()) : ''; - $elements[] = sprintf('[%s--%s%s]', $shortcut, $option->getName(), $value); + $negation = $option->isNegatable() ? sprintf('|--no-%s', $option->getName()) : ''; + $elements[] = sprintf('[%s--%s%s%s]', $shortcut, $option->getName(), $value, $negation); } } diff --git a/vendor/symfony/console/Input/InputInterface.php b/vendor/symfony/console/Input/InputInterface.php index 8efc6232..628b6037 100644 --- a/vendor/symfony/console/Input/InputInterface.php +++ b/vendor/symfony/console/Input/InputInterface.php @@ -24,7 +24,7 @@ interface InputInterface /** * Returns the first argument from the raw parameters (not parsed). * - * @return string|null The value of the first argument or null otherwise + * @return string|null */ public function getFirstArgument(); @@ -39,9 +39,9 @@ public function getFirstArgument(); * @param string|array $values The values to look for in the raw parameters (can be an array) * @param bool $onlyParams Only check real parameters, skip those following an end of options (--) signal * - * @return bool true if the value is contained in the raw parameters + * @return bool */ - public function hasParameterOption($values, $onlyParams = false); + public function hasParameterOption($values, bool $onlyParams = false); /** * Returns the value of a raw option (not parsed). @@ -55,9 +55,9 @@ public function hasParameterOption($values, $onlyParams = false); * @param string|bool|int|float|array|null $default The default value to return if no result is found * @param bool $onlyParams Only check real parameters, skip those following an end of options (--) signal * - * @return mixed The option value + * @return mixed */ - public function getParameterOption($values, $default = false, $onlyParams = false); + public function getParameterOption($values, $default = false, bool $onlyParams = false); /** * Binds the current Input instance with the given arguments and options. @@ -83,32 +83,27 @@ public function getArguments(); /** * Returns the argument value for a given argument name. * - * @param string $name The argument name - * * @return mixed * * @throws InvalidArgumentException When argument given doesn't exist */ - public function getArgument($name); + public function getArgument(string $name); /** * Sets an argument value by name. * - * @param string $name The argument name - * @param mixed $value The argument value + * @param mixed $value The argument value * * @throws InvalidArgumentException When argument given doesn't exist */ - public function setArgument($name, $value); + public function setArgument(string $name, $value); /** * Returns true if an InputArgument object exists by name or position. * - * @param string $name The argument name - * - * @return bool true if the InputArgument object exists, false otherwise + * @return bool */ - public function hasArgument($name); + public function hasArgument(string $name); /** * Returns all the given options merged with the default values. @@ -120,32 +115,27 @@ public function getOptions(); /** * Returns the option value for a given option name. * - * @param string $name The option name - * * @return mixed * * @throws InvalidArgumentException When option given doesn't exist */ - public function getOption($name); + public function getOption(string $name); /** * Sets an option value by name. * - * @param string $name The option name - * @param mixed $value The option value + * @param mixed $value The option value * * @throws InvalidArgumentException When option given doesn't exist */ - public function setOption($name, $value); + public function setOption(string $name, $value); /** * Returns true if an InputOption object exists by name. * - * @param string $name The InputOption name - * - * @return bool true if the InputOption object exists, false otherwise + * @return bool */ - public function hasOption($name); + public function hasOption(string $name); /** * Is this input means interactive? @@ -156,8 +146,6 @@ public function isInteractive(); /** * Sets the input interactivity. - * - * @param bool $interactive If the input should be interactive */ - public function setInteractive($interactive); + public function setInteractive(bool $interactive); } diff --git a/vendor/symfony/console/Input/InputOption.php b/vendor/symfony/console/Input/InputOption.php index c7729db2..2bec34fe 100644 --- a/vendor/symfony/console/Input/InputOption.php +++ b/vendor/symfony/console/Input/InputOption.php @@ -41,6 +41,11 @@ class InputOption */ public const VALUE_IS_ARRAY = 8; + /** + * The option may have either positive or negative value (e.g. --ansi or --no-ansi). + */ + public const VALUE_NEGATABLE = 16; + private $name; private $shortcut; private $mode; @@ -48,11 +53,9 @@ class InputOption private $description; /** - * @param string $name The option name - * @param string|array|null $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts - * @param int|null $mode The option mode: One of the VALUE_* constants - * @param string $description A description text - * @param string|bool|int|float|array|null $default The default value (must be null for self::VALUE_NONE) + * @param string|array|null $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts + * @param int|null $mode The option mode: One of the VALUE_* constants + * @param string|bool|int|float|array|null $default The default value (must be null for self::VALUE_NONE) * * @throws InvalidArgumentException If option mode is invalid or incompatible */ @@ -85,7 +88,7 @@ public function __construct(string $name, $shortcut = null, int $mode = null, st if (null === $mode) { $mode = self::VALUE_NONE; - } elseif ($mode > 15 || $mode < 1) { + } elseif ($mode >= (self::VALUE_NEGATABLE << 1) || $mode < 1) { throw new InvalidArgumentException(sprintf('Option mode "%s" is not valid.', $mode)); } @@ -97,6 +100,9 @@ public function __construct(string $name, $shortcut = null, int $mode = null, st if ($this->isArray() && !$this->acceptValue()) { throw new InvalidArgumentException('Impossible to have an option mode VALUE_IS_ARRAY if the option does not accept a value.'); } + if ($this->isNegatable() && $this->acceptValue()) { + throw new InvalidArgumentException('Impossible to have an option mode VALUE_NEGATABLE if the option also accepts a value.'); + } $this->setDefault($default); } @@ -104,7 +110,7 @@ public function __construct(string $name, $shortcut = null, int $mode = null, st /** * Returns the option shortcut. * - * @return string|null The shortcut + * @return string|null */ public function getShortcut() { @@ -114,7 +120,7 @@ public function getShortcut() /** * Returns the option name. * - * @return string The name + * @return string */ public function getName() { @@ -161,6 +167,11 @@ public function isArray() return self::VALUE_IS_ARRAY === (self::VALUE_IS_ARRAY & $this->mode); } + public function isNegatable(): bool + { + return self::VALUE_NEGATABLE === (self::VALUE_NEGATABLE & $this->mode); + } + /** * @param string|bool|int|float|array|null $default */ @@ -178,7 +189,7 @@ public function setDefault($default = null) } } - $this->default = $this->acceptValue() ? $default : false; + $this->default = $this->acceptValue() || $this->isNegatable() ? $default : false; } /** @@ -194,7 +205,7 @@ public function getDefault() /** * Returns the description text. * - * @return string The description text + * @return string */ public function getDescription() { @@ -211,6 +222,7 @@ public function equals(self $option) return $option->getName() === $this->getName() && $option->getShortcut() === $this->getShortcut() && $option->getDefault() === $this->getDefault() + && $option->isNegatable() === $this->isNegatable() && $option->isArray() === $this->isArray() && $option->isValueRequired() === $this->isValueRequired() && $option->isValueOptional() === $this->isValueOptional() diff --git a/vendor/symfony/console/LICENSE b/vendor/symfony/console/LICENSE index 88bf75bb..0138f8f0 100644 --- a/vendor/symfony/console/LICENSE +++ b/vendor/symfony/console/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2022 Fabien Potencier +Copyright (c) 2004-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/console/Output/BufferedOutput.php b/vendor/symfony/console/Output/BufferedOutput.php index fefaac27..d37c6e32 100644 --- a/vendor/symfony/console/Output/BufferedOutput.php +++ b/vendor/symfony/console/Output/BufferedOutput.php @@ -34,7 +34,7 @@ public function fetch() /** * {@inheritdoc} */ - protected function doWrite($message, $newline) + protected function doWrite(string $message, bool $newline) { $this->buffer .= $message; diff --git a/vendor/symfony/console/Output/ConsoleOutput.php b/vendor/symfony/console/Output/ConsoleOutput.php index 484fcbde..f19f9ebf 100644 --- a/vendor/symfony/console/Output/ConsoleOutput.php +++ b/vendor/symfony/console/Output/ConsoleOutput.php @@ -67,7 +67,7 @@ public function section(): ConsoleSectionOutput /** * {@inheritdoc} */ - public function setDecorated($decorated) + public function setDecorated(bool $decorated) { parent::setDecorated($decorated); $this->stderr->setDecorated($decorated); @@ -85,7 +85,7 @@ public function setFormatter(OutputFormatterInterface $formatter) /** * {@inheritdoc} */ - public function setVerbosity($level) + public function setVerbosity(int $level) { parent::setVerbosity($level); $this->stderr->setVerbosity($level); diff --git a/vendor/symfony/console/Output/ConsoleOutputInterface.php b/vendor/symfony/console/Output/ConsoleOutputInterface.php index f4c2fa62..6b6635f5 100644 --- a/vendor/symfony/console/Output/ConsoleOutputInterface.php +++ b/vendor/symfony/console/Output/ConsoleOutputInterface.php @@ -16,8 +16,6 @@ * This adds information about stderr and section output stream. * * @author Dariusz Górecki - * - * @method ConsoleSectionOutput section() Creates a new output section */ interface ConsoleOutputInterface extends OutputInterface { @@ -29,4 +27,6 @@ interface ConsoleOutputInterface extends OutputInterface public function getErrorOutput(); public function setErrorOutput(OutputInterface $error); + + public function section(): ConsoleSectionOutput; } diff --git a/vendor/symfony/console/Output/ConsoleSectionOutput.php b/vendor/symfony/console/Output/ConsoleSectionOutput.php index c19edbf9..8f164975 100644 --- a/vendor/symfony/console/Output/ConsoleSectionOutput.php +++ b/vendor/symfony/console/Output/ConsoleSectionOutput.php @@ -92,7 +92,7 @@ public function addContent(string $input) /** * {@inheritdoc} */ - protected function doWrite($message, $newline) + protected function doWrite(string $message, bool $newline) { if (!$this->isDecorated()) { parent::doWrite($message, $newline); @@ -136,8 +136,8 @@ private function popStreamContentUntilCurrentSection(int $numberOfLinesToClearFr return implode('', array_reverse($erasedContent)); } - private function getDisplayLength(string $text): string + private function getDisplayLength(string $text): int { - return Helper::strlenWithoutDecoration($this->getFormatter(), str_replace("\t", ' ', $text)); + return Helper::width(Helper::removeDecoration($this->getFormatter(), str_replace("\t", ' ', $text))); } } diff --git a/vendor/symfony/console/Output/NullOutput.php b/vendor/symfony/console/Output/NullOutput.php index 218f285b..3bbe63ea 100644 --- a/vendor/symfony/console/Output/NullOutput.php +++ b/vendor/symfony/console/Output/NullOutput.php @@ -11,7 +11,7 @@ namespace Symfony\Component\Console\Output; -use Symfony\Component\Console\Formatter\OutputFormatter; +use Symfony\Component\Console\Formatter\NullOutputFormatter; use Symfony\Component\Console\Formatter\OutputFormatterInterface; /** @@ -24,6 +24,8 @@ */ class NullOutput implements OutputInterface { + private $formatter; + /** * {@inheritdoc} */ @@ -37,14 +39,17 @@ public function setFormatter(OutputFormatterInterface $formatter) */ public function getFormatter() { + if ($this->formatter) { + return $this->formatter; + } // to comply with the interface we must return a OutputFormatterInterface - return new OutputFormatter(); + return $this->formatter = new NullOutputFormatter(); } /** * {@inheritdoc} */ - public function setDecorated($decorated) + public function setDecorated(bool $decorated) { // do nothing } @@ -60,7 +65,7 @@ public function isDecorated() /** * {@inheritdoc} */ - public function setVerbosity($level) + public function setVerbosity(int $level) { // do nothing } @@ -108,7 +113,7 @@ public function isDebug() /** * {@inheritdoc} */ - public function writeln($messages, $options = self::OUTPUT_NORMAL) + public function writeln($messages, int $options = self::OUTPUT_NORMAL) { // do nothing } @@ -116,7 +121,7 @@ public function writeln($messages, $options = self::OUTPUT_NORMAL) /** * {@inheritdoc} */ - public function write($messages, $newline = false, $options = self::OUTPUT_NORMAL) + public function write($messages, bool $newline = false, int $options = self::OUTPUT_NORMAL) { // do nothing } diff --git a/vendor/symfony/console/Output/Output.php b/vendor/symfony/console/Output/Output.php index fb838f05..d7c5fb2d 100644 --- a/vendor/symfony/console/Output/Output.php +++ b/vendor/symfony/console/Output/Output.php @@ -33,13 +33,13 @@ abstract class Output implements OutputInterface private $formatter; /** - * @param int $verbosity The verbosity level (one of the VERBOSITY constants in OutputInterface) + * @param int|null $verbosity The verbosity level (one of the VERBOSITY constants in OutputInterface) * @param bool $decorated Whether to decorate messages * @param OutputFormatterInterface|null $formatter Output formatter instance (null to use default OutputFormatter) */ public function __construct(?int $verbosity = self::VERBOSITY_NORMAL, bool $decorated = false, OutputFormatterInterface $formatter = null) { - $this->verbosity = null === $verbosity ? self::VERBOSITY_NORMAL : $verbosity; + $this->verbosity = $verbosity ?? self::VERBOSITY_NORMAL; $this->formatter = $formatter ?? new OutputFormatter(); $this->formatter->setDecorated($decorated); } @@ -63,7 +63,7 @@ public function getFormatter() /** * {@inheritdoc} */ - public function setDecorated($decorated) + public function setDecorated(bool $decorated) { $this->formatter->setDecorated($decorated); } @@ -79,9 +79,9 @@ public function isDecorated() /** * {@inheritdoc} */ - public function setVerbosity($level) + public function setVerbosity(int $level) { - $this->verbosity = (int) $level; + $this->verbosity = $level; } /** @@ -127,7 +127,7 @@ public function isDebug() /** * {@inheritdoc} */ - public function writeln($messages, $options = self::OUTPUT_NORMAL) + public function writeln($messages, int $options = self::OUTPUT_NORMAL) { $this->write($messages, true, $options); } @@ -135,7 +135,7 @@ public function writeln($messages, $options = self::OUTPUT_NORMAL) /** * {@inheritdoc} */ - public function write($messages, $newline = false, $options = self::OUTPUT_NORMAL) + public function write($messages, bool $newline = false, int $options = self::OUTPUT_NORMAL) { if (!is_iterable($messages)) { $messages = [$messages]; @@ -169,9 +169,6 @@ public function write($messages, $newline = false, $options = self::OUTPUT_NORMA /** * Writes a message to the output. - * - * @param string $message A message to write to the output - * @param bool $newline Whether to add a newline or not */ - abstract protected function doWrite($message, $newline); + abstract protected function doWrite(string $message, bool $newline); } diff --git a/vendor/symfony/console/Output/OutputInterface.php b/vendor/symfony/console/Output/OutputInterface.php index 671d5bd7..55caab80 100644 --- a/vendor/symfony/console/Output/OutputInterface.php +++ b/vendor/symfony/console/Output/OutputInterface.php @@ -37,7 +37,7 @@ interface OutputInterface * @param bool $newline Whether to add a newline * @param int $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL */ - public function write($messages, $newline = false, $options = 0); + public function write($messages, bool $newline = false, int $options = 0); /** * Writes a message to the output and adds a newline at the end. @@ -45,61 +45,57 @@ public function write($messages, $newline = false, $options = 0); * @param string|iterable $messages The message as an iterable of strings or a single string * @param int $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL */ - public function writeln($messages, $options = 0); + public function writeln($messages, int $options = 0); /** * Sets the verbosity of the output. - * - * @param int $level The level of verbosity (one of the VERBOSITY constants) */ - public function setVerbosity($level); + public function setVerbosity(int $level); /** * Gets the current verbosity of the output. * - * @return int The current level of verbosity (one of the VERBOSITY constants) + * @return int */ public function getVerbosity(); /** * Returns whether verbosity is quiet (-q). * - * @return bool true if verbosity is set to VERBOSITY_QUIET, false otherwise + * @return bool */ public function isQuiet(); /** * Returns whether verbosity is verbose (-v). * - * @return bool true if verbosity is set to VERBOSITY_VERBOSE, false otherwise + * @return bool */ public function isVerbose(); /** * Returns whether verbosity is very verbose (-vv). * - * @return bool true if verbosity is set to VERBOSITY_VERY_VERBOSE, false otherwise + * @return bool */ public function isVeryVerbose(); /** * Returns whether verbosity is debug (-vvv). * - * @return bool true if verbosity is set to VERBOSITY_DEBUG, false otherwise + * @return bool */ public function isDebug(); /** * Sets the decorated flag. - * - * @param bool $decorated Whether to decorate the messages */ - public function setDecorated($decorated); + public function setDecorated(bool $decorated); /** * Gets the decorated flag. * - * @return bool true if the output will decorate messages, false otherwise + * @return bool */ public function isDecorated(); diff --git a/vendor/symfony/console/Output/StreamOutput.php b/vendor/symfony/console/Output/StreamOutput.php index 9c224364..f057f0e5 100644 --- a/vendor/symfony/console/Output/StreamOutput.php +++ b/vendor/symfony/console/Output/StreamOutput.php @@ -57,17 +57,14 @@ public function __construct($stream, int $verbosity = self::VERBOSITY_NORMAL, bo /** * Gets the stream attached to this StreamOutput instance. * - * @return resource A stream resource + * @return resource */ public function getStream() { return $this->stream; } - /** - * {@inheritdoc} - */ - protected function doWrite($message, $newline) + protected function doWrite(string $message, bool $newline) { if ($newline) { $message .= \PHP_EOL; @@ -98,28 +95,17 @@ protected function hasColorSupport() return false; } - if ('Hyper' === getenv('TERM_PROGRAM')) { + if (\DIRECTORY_SEPARATOR === '\\' + && \function_exists('sapi_windows_vt100_support') + && @sapi_windows_vt100_support($this->stream) + ) { return true; } - if (\DIRECTORY_SEPARATOR === '\\') { - return (\function_exists('sapi_windows_vt100_support') - && @sapi_windows_vt100_support($this->stream)) - || false !== getenv('ANSICON') - || 'ON' === getenv('ConEmuANSI') - || 'xterm' === getenv('TERM'); - } - - if (\function_exists('stream_isatty')) { - return @stream_isatty($this->stream); - } - - if (\function_exists('posix_isatty')) { - return @posix_isatty($this->stream); - } - - $stat = @fstat($this->stream); - // Check if formatted mode is S_IFCHR - return $stat ? 0020000 === ($stat['mode'] & 0170000) : false; + return 'Hyper' === getenv('TERM_PROGRAM') + || false !== getenv('ANSICON') + || 'ON' === getenv('ConEmuANSI') + || str_starts_with((string) getenv('TERM'), 'xterm') + || stream_isatty($this->stream); } } diff --git a/vendor/symfony/console/Output/TrimmedBufferOutput.php b/vendor/symfony/console/Output/TrimmedBufferOutput.php index 87c04a89..3f4d375f 100644 --- a/vendor/symfony/console/Output/TrimmedBufferOutput.php +++ b/vendor/symfony/console/Output/TrimmedBufferOutput.php @@ -50,7 +50,7 @@ public function fetch() /** * {@inheritdoc} */ - protected function doWrite($message, $newline) + protected function doWrite(string $message, bool $newline) { $this->buffer .= $message; diff --git a/vendor/symfony/console/Question/ChoiceQuestion.php b/vendor/symfony/console/Question/ChoiceQuestion.php index 6247ca71..bf1f9048 100644 --- a/vendor/symfony/console/Question/ChoiceQuestion.php +++ b/vendor/symfony/console/Question/ChoiceQuestion.php @@ -58,11 +58,9 @@ public function getChoices() * * When multiselect is set to true, multiple choices can be answered. * - * @param bool $multiselect - * * @return $this */ - public function setMultiselect($multiselect) + public function setMultiselect(bool $multiselect) { $this->multiselect = $multiselect; $this->setValidator($this->getDefaultValidator()); @@ -93,11 +91,9 @@ public function getPrompt() /** * Sets the prompt for choices. * - * @param string $prompt - * * @return $this */ - public function setPrompt($prompt) + public function setPrompt(string $prompt) { $this->prompt = $prompt; @@ -109,11 +105,9 @@ public function setPrompt($prompt) * * The error message has a string placeholder (%s) for the invalid value. * - * @param string $errorMessage - * * @return $this */ - public function setErrorMessage($errorMessage) + public function setErrorMessage(string $errorMessage) { $this->errorMessage = $errorMessage; $this->setValidator($this->getDefaultValidator()); @@ -175,7 +169,8 @@ private function getDefaultValidator(): callable throw new InvalidArgumentException(sprintf($errorMessage, $value)); } - $multiselectChoices[] = (string) $result; + // For associative choices, consistently return the key as string: + $multiselectChoices[] = $isAssoc ? (string) $result : $result; } if ($multiselect) { diff --git a/vendor/symfony/console/Question/Question.php b/vendor/symfony/console/Question/Question.php index cc108018..3a73f04b 100644 --- a/vendor/symfony/console/Question/Question.php +++ b/vendor/symfony/console/Question/Question.php @@ -30,6 +30,7 @@ class Question private $default; private $normalizer; private $trimmable = true; + private $multiline = false; /** * @param string $question The question to ask to the user @@ -61,6 +62,26 @@ public function getDefault() return $this->default; } + /** + * Returns whether the user response accepts newline characters. + */ + public function isMultiline(): bool + { + return $this->multiline; + } + + /** + * Sets whether the user response should accept newline characters. + * + * @return $this + */ + public function setMultiline(bool $multiline): self + { + $this->multiline = $multiline; + + return $this; + } + /** * Returns whether the user response must be hidden. * @@ -74,25 +95,23 @@ public function isHidden() /** * Sets whether the user response must be hidden or not. * - * @param bool $hidden - * * @return $this * * @throws LogicException In case the autocompleter is also used */ - public function setHidden($hidden) + public function setHidden(bool $hidden) { if ($this->autocompleterCallback) { throw new LogicException('A hidden question cannot use the autocompleter.'); } - $this->hidden = (bool) $hidden; + $this->hidden = $hidden; return $this; } /** - * In case the response can not be hidden, whether to fallback on non-hidden question or not. + * In case the response cannot be hidden, whether to fallback on non-hidden question or not. * * @return bool */ @@ -102,15 +121,13 @@ public function isHiddenFallback() } /** - * Sets whether to fallback on non-hidden question if the response can not be hidden. - * - * @param bool $fallback + * Sets whether to fallback on non-hidden question if the response cannot be hidden. * * @return $this */ - public function setHiddenFallback($fallback) + public function setHiddenFallback(bool $fallback) { - $this->hiddenFallback = (bool) $fallback; + $this->hiddenFallback = $fallback; return $this; } @@ -130,14 +147,11 @@ public function getAutocompleterValues() /** * Sets values for the autocompleter. * - * @param iterable|null $values - * * @return $this * - * @throws InvalidArgumentException * @throws LogicException */ - public function setAutocompleterValues($values) + public function setAutocompleterValues(?iterable $values) { if (\is_array($values)) { $values = $this->isAssoc($values) ? array_merge(array_keys($values), array_values($values)) : array_values($values); @@ -150,10 +164,8 @@ public function setAutocompleterValues($values) $callback = static function () use ($values, &$valueCache) { return $valueCache ?? $valueCache = iterator_to_array($values, false); }; - } elseif (null === $values) { - $callback = null; } else { - throw new InvalidArgumentException('Autocompleter values can be either an array, "null" or a "Traversable" object.'); + $callback = null; } return $this->setAutocompleterCallback($callback); @@ -212,19 +224,14 @@ public function getValidator() * * Null means an unlimited number of attempts. * - * @param int|null $attempts - * * @return $this * * @throws InvalidArgumentException in case the number of attempts is invalid */ - public function setMaxAttempts($attempts) + public function setMaxAttempts(?int $attempts) { - if (null !== $attempts) { - $attempts = (int) $attempts; - if ($attempts < 1) { - throw new InvalidArgumentException('Maximum number of attempts must be a positive value.'); - } + if (null !== $attempts && $attempts < 1) { + throw new InvalidArgumentException('Maximum number of attempts must be a positive value.'); } $this->attempts = $attempts; @@ -270,7 +277,7 @@ public function getNormalizer() return $this->normalizer; } - protected function isAssoc($array) + protected function isAssoc(array $array) { return (bool) \count(array_filter(array_keys($array), 'is_string')); } diff --git a/vendor/symfony/console/README.md b/vendor/symfony/console/README.md index c89b4a1a..c4c12998 100644 --- a/vendor/symfony/console/README.md +++ b/vendor/symfony/console/README.md @@ -4,6 +4,18 @@ Console Component The Console component eases the creation of beautiful and testable command line interfaces. +Sponsor +------- + +The Console component for Symfony 5.4/6.0 is [backed][1] by [Les-Tilleuls.coop][2]. + +Les-Tilleuls.coop is a team of 50+ Symfony experts who can help you design, develop and +fix your projects. We provide a wide range of professional services including development, +consulting, coaching, training and audits. We also are highly skilled in JS, Go and DevOps. +We are a worker cooperative! + +Help Symfony by [sponsoring][3] its development! + Resources --------- @@ -18,3 +30,7 @@ Credits `Resources/bin/hiddeninput.exe` is a third party binary provided within this component. Find sources and license at https://github.com/Seldaek/hidden-input. + +[1]: https://symfony.com/backers +[2]: https://les-tilleuls.coop +[3]: https://symfony.com/sponsor diff --git a/vendor/symfony/console/Style/OutputStyle.php b/vendor/symfony/console/Style/OutputStyle.php index 14d2d60b..67a98ff0 100644 --- a/vendor/symfony/console/Style/OutputStyle.php +++ b/vendor/symfony/console/Style/OutputStyle.php @@ -33,17 +33,15 @@ public function __construct(OutputInterface $output) /** * {@inheritdoc} */ - public function newLine($count = 1) + public function newLine(int $count = 1) { $this->output->write(str_repeat(\PHP_EOL, $count)); } /** - * @param int $max - * * @return ProgressBar */ - public function createProgressBar($max = 0) + public function createProgressBar(int $max = 0) { return new ProgressBar($this->output, $max); } @@ -51,7 +49,7 @@ public function createProgressBar($max = 0) /** * {@inheritdoc} */ - public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL) + public function write($messages, bool $newline = false, int $type = self::OUTPUT_NORMAL) { $this->output->write($messages, $newline, $type); } @@ -59,7 +57,7 @@ public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL) /** * {@inheritdoc} */ - public function writeln($messages, $type = self::OUTPUT_NORMAL) + public function writeln($messages, int $type = self::OUTPUT_NORMAL) { $this->output->writeln($messages, $type); } @@ -67,7 +65,7 @@ public function writeln($messages, $type = self::OUTPUT_NORMAL) /** * {@inheritdoc} */ - public function setVerbosity($level) + public function setVerbosity(int $level) { $this->output->setVerbosity($level); } @@ -83,7 +81,7 @@ public function getVerbosity() /** * {@inheritdoc} */ - public function setDecorated($decorated) + public function setDecorated(bool $decorated) { $this->output->setDecorated($decorated); } diff --git a/vendor/symfony/console/Style/StyleInterface.php b/vendor/symfony/console/Style/StyleInterface.php index 3b5b8af5..38d23b77 100644 --- a/vendor/symfony/console/Style/StyleInterface.php +++ b/vendor/symfony/console/Style/StyleInterface.php @@ -20,17 +20,13 @@ interface StyleInterface { /** * Formats a command title. - * - * @param string $message */ - public function title($message); + public function title(string $message); /** * Formats a section title. - * - * @param string $message */ - public function section($message); + public function section(string $message); /** * Formats a list. @@ -87,64 +83,47 @@ public function table(array $headers, array $rows); /** * Asks a question. * - * @param string $question - * @param string|null $default - * @param callable|null $validator - * * @return mixed */ - public function ask($question, $default = null, $validator = null); + public function ask(string $question, string $default = null, callable $validator = null); /** * Asks a question with the user input hidden. * - * @param string $question - * @param callable|null $validator - * * @return mixed */ - public function askHidden($question, $validator = null); + public function askHidden(string $question, callable $validator = null); /** * Asks for confirmation. * - * @param string $question - * @param bool $default - * * @return bool */ - public function confirm($question, $default = true); + public function confirm(string $question, bool $default = true); /** * Asks a choice question. * - * @param string $question * @param string|int|null $default * * @return mixed */ - public function choice($question, array $choices, $default = null); + public function choice(string $question, array $choices, $default = null); /** * Add newline(s). - * - * @param int $count The number of newlines */ - public function newLine($count = 1); + public function newLine(int $count = 1); /** * Starts the progress output. - * - * @param int $max Maximum steps (0 if unknown) */ - public function progressStart($max = 0); + public function progressStart(int $max = 0); /** * Advances the progress output X steps. - * - * @param int $step Number of steps to advance */ - public function progressAdvance($step = 1); + public function progressAdvance(int $step = 1); /** * Finishes the progress output. diff --git a/vendor/symfony/console/Style/SymfonyStyle.php b/vendor/symfony/console/Style/SymfonyStyle.php index 1c99a186..e3c5ac8e 100644 --- a/vendor/symfony/console/Style/SymfonyStyle.php +++ b/vendor/symfony/console/Style/SymfonyStyle.php @@ -21,6 +21,7 @@ use Symfony\Component\Console\Helper\TableCell; use Symfony\Component\Console\Helper\TableSeparator; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\ConsoleOutputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\TrimmedBufferOutput; use Symfony\Component\Console\Question\ChoiceQuestion; @@ -38,6 +39,7 @@ class SymfonyStyle extends OutputStyle public const MAX_LINE_LENGTH = 120; private $input; + private $output; private $questionHelper; private $progressBar; private $lineLength; @@ -51,20 +53,15 @@ public function __construct(InputInterface $input, OutputInterface $output) $width = (new Terminal())->getWidth() ?: self::MAX_LINE_LENGTH; $this->lineLength = min($width - (int) (\DIRECTORY_SEPARATOR === '\\'), self::MAX_LINE_LENGTH); - parent::__construct($output); + parent::__construct($this->output = $output); } /** * Formats a message as a block of text. * * @param string|array $messages The message to write in the block - * @param string|null $type The block type (added in [] on first line) - * @param string|null $style The style to apply to the whole block - * @param string $prefix The prefix for the block - * @param bool $padding Whether to add vertical padding - * @param bool $escape Whether to escape the message */ - public function block($messages, $type = null, $style = null, $prefix = ' ', $padding = false, $escape = true) + public function block($messages, string $type = null, string $style = null, string $prefix = ' ', bool $padding = false, bool $escape = true) { $messages = \is_array($messages) ? array_values($messages) : [$messages]; @@ -76,12 +73,12 @@ public function block($messages, $type = null, $style = null, $prefix = ' ', $pa /** * {@inheritdoc} */ - public function title($message) + public function title(string $message) { $this->autoPrependBlock(); $this->writeln([ sprintf('%s', OutputFormatter::escapeTrailingBackslash($message)), - sprintf('%s', str_repeat('=', Helper::strlenWithoutDecoration($this->getFormatter(), $message))), + sprintf('%s', str_repeat('=', Helper::width(Helper::removeDecoration($this->getFormatter(), $message)))), ]); $this->newLine(); } @@ -89,12 +86,12 @@ public function title($message) /** * {@inheritdoc} */ - public function section($message) + public function section(string $message) { $this->autoPrependBlock(); $this->writeln([ sprintf('%s', OutputFormatter::escapeTrailingBackslash($message)), - sprintf('%s', str_repeat('-', Helper::strlenWithoutDecoration($this->getFormatter(), $message))), + sprintf('%s', str_repeat('-', Helper::width(Helper::removeDecoration($this->getFormatter(), $message)))), ]); $this->newLine(); } @@ -168,6 +165,16 @@ public function note($message) $this->block($message, 'NOTE', 'fg=yellow', ' ! '); } + /** + * Formats an info message. + * + * @param string|array $message + */ + public function info($message) + { + $this->block($message, 'INFO', 'fg=green', ' ', true); + } + /** * {@inheritdoc} */ @@ -181,15 +188,12 @@ public function caution($message) */ public function table(array $headers, array $rows) { - $style = clone Table::getStyleDefinition('symfony-style-guide'); - $style->setCellHeaderFormat('%s'); - - $table = new Table($this); - $table->setHeaders($headers); - $table->setRows($rows); - $table->setStyle($style); + $this->createTable() + ->setHeaders($headers) + ->setRows($rows) + ->render() + ; - $table->render(); $this->newLine(); } @@ -198,16 +202,13 @@ public function table(array $headers, array $rows) */ public function horizontalTable(array $headers, array $rows) { - $style = clone Table::getStyleDefinition('symfony-style-guide'); - $style->setCellHeaderFormat('%s'); + $this->createTable() + ->setHorizontal(true) + ->setHeaders($headers) + ->setRows($rows) + ->render() + ; - $table = new Table($this); - $table->setHeaders($headers); - $table->setRows($rows); - $table->setStyle($style); - $table->setHorizontal(true); - - $table->render(); $this->newLine(); } @@ -223,10 +224,6 @@ public function horizontalTable(array $headers, array $rows) */ public function definitionList(...$list) { - $style = clone Table::getStyleDefinition('symfony-style-guide'); - $style->setCellHeaderFormat('%s'); - - $table = new Table($this); $headers = []; $row = []; foreach ($list as $value) { @@ -247,19 +244,13 @@ public function definitionList(...$list) $row[] = current($value); } - $table->setHeaders($headers); - $table->setRows([$row]); - $table->setHorizontal(); - $table->setStyle($style); - - $table->render(); - $this->newLine(); + $this->horizontalTable($headers, [$row]); } /** * {@inheritdoc} */ - public function ask($question, $default = null, $validator = null) + public function ask(string $question, string $default = null, callable $validator = null) { $question = new Question($question, $default); $question->setValidator($validator); @@ -270,7 +261,7 @@ public function ask($question, $default = null, $validator = null) /** * {@inheritdoc} */ - public function askHidden($question, $validator = null) + public function askHidden(string $question, callable $validator = null) { $question = new Question($question); @@ -283,7 +274,7 @@ public function askHidden($question, $validator = null) /** * {@inheritdoc} */ - public function confirm($question, $default = true) + public function confirm(string $question, bool $default = true) { return $this->askQuestion(new ConfirmationQuestion($question, $default)); } @@ -291,7 +282,7 @@ public function confirm($question, $default = true) /** * {@inheritdoc} */ - public function choice($question, array $choices, $default = null) + public function choice(string $question, array $choices, $default = null) { if (null !== $default) { $values = array_flip($choices); @@ -304,7 +295,7 @@ public function choice($question, array $choices, $default = null) /** * {@inheritdoc} */ - public function progressStart($max = 0) + public function progressStart(int $max = 0) { $this->progressBar = $this->createProgressBar($max); $this->progressBar->start(); @@ -313,7 +304,7 @@ public function progressStart($max = 0) /** * {@inheritdoc} */ - public function progressAdvance($step = 1) + public function progressAdvance(int $step = 1) { $this->getProgressBar()->advance($step); } @@ -331,7 +322,7 @@ public function progressFinish() /** * {@inheritdoc} */ - public function createProgressBar($max = 0) + public function createProgressBar(int $max = 0) { $progressBar = parent::createProgressBar($max); @@ -344,6 +335,16 @@ public function createProgressBar($max = 0) return $progressBar; } + /** + * @see ProgressBar::iterate() + */ + public function progressIterate(iterable $iterable, int $max = null): iterable + { + yield from $this->createProgressBar()->iterate($iterable, $max); + + $this->newLine(2); + } + /** * @return mixed */ @@ -370,7 +371,7 @@ public function askQuestion(Question $question) /** * {@inheritdoc} */ - public function writeln($messages, $type = self::OUTPUT_NORMAL) + public function writeln($messages, int $type = self::OUTPUT_NORMAL) { if (!is_iterable($messages)) { $messages = [$messages]; @@ -385,7 +386,7 @@ public function writeln($messages, $type = self::OUTPUT_NORMAL) /** * {@inheritdoc} */ - public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL) + public function write($messages, bool $newline = false, int $type = self::OUTPUT_NORMAL) { if (!is_iterable($messages)) { $messages = [$messages]; @@ -400,7 +401,7 @@ public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL) /** * {@inheritdoc} */ - public function newLine($count = 1) + public function newLine(int $count = 1) { parent::newLine($count); $this->bufferedOutput->write(str_repeat("\n", $count)); @@ -416,6 +417,15 @@ public function getErrorStyle() return new self($this->input, $this->getErrorOutput()); } + public function createTable(): Table + { + $output = $this->output instanceof ConsoleOutputInterface ? $this->output->section() : $this->output; + $style = clone Table::getStyleDefinition('symfony-style-guide'); + $style->setCellHeaderFormat('%s'); + + return (new Table($output))->setStyle($style); + } + private function getProgressBar(): ProgressBar { if (!$this->progressBar) { @@ -456,7 +466,7 @@ private function writeBuffer(string $message, bool $newLine, int $type): void private function createBlock(iterable $messages, string $type = null, string $style = null, string $prefix = ' ', bool $padding = false, bool $escape = false): array { $indentLength = 0; - $prefixLength = Helper::strlenWithoutDecoration($this->getFormatter(), $prefix); + $prefixLength = Helper::width(Helper::removeDecoration($this->getFormatter(), $prefix)); $lines = []; if (null !== $type) { @@ -471,7 +481,7 @@ private function createBlock(iterable $messages, string $type = null, string $st $message = OutputFormatter::escape($message); } - $decorationLength = Helper::strlen($message) - Helper::strlenWithoutDecoration($this->getFormatter(), $message); + $decorationLength = Helper::width($message) - Helper::width(Helper::removeDecoration($this->getFormatter(), $message)); $messageLineLength = min($this->lineLength - $prefixLength - $indentLength + $decorationLength, $this->lineLength); $messageLines = explode(\PHP_EOL, wordwrap($message, $messageLineLength, \PHP_EOL, true)); foreach ($messageLines as $messageLine) { @@ -496,7 +506,7 @@ private function createBlock(iterable $messages, string $type = null, string $st } $line = $prefix.$line; - $line .= str_repeat(' ', max($this->lineLength - Helper::strlenWithoutDecoration($this->getFormatter(), $line), 0)); + $line .= str_repeat(' ', max($this->lineLength - Helper::width(Helper::removeDecoration($this->getFormatter(), $line)), 0)); if ($style) { $line = sprintf('<%s>%s', $style, $line); diff --git a/vendor/symfony/console/Terminal.php b/vendor/symfony/console/Terminal.php index 5e5a3c2f..b91e8afc 100644 --- a/vendor/symfony/console/Terminal.php +++ b/vendor/symfony/console/Terminal.php @@ -57,29 +57,26 @@ public function getHeight() /** * @internal - * - * @return bool */ - public static function hasSttyAvailable() + public static function hasSttyAvailable(): bool { if (null !== self::$stty) { return self::$stty; } - // skip check if exec function is disabled - if (!\function_exists('exec')) { + // skip check if shell_exec function is disabled + if (!\function_exists('shell_exec')) { return false; } - exec('stty 2>&1', $output, $exitcode); - - return self::$stty = 0 === $exitcode; + return self::$stty = (bool) shell_exec('stty 2> '.('\\' === \DIRECTORY_SEPARATOR ? 'NUL' : '/dev/null')); } private static function initDimensions() { if ('\\' === \DIRECTORY_SEPARATOR) { - if (preg_match('/^(\d+)x(\d+)(?: \((\d+)x(\d+)\))?$/', trim(getenv('ANSICON')), $matches)) { + $ansicon = getenv('ANSICON'); + if (false !== $ansicon && preg_match('/^(\d+)x(\d+)(?: \((\d+)x(\d+)\))?$/', trim($ansicon), $matches)) { // extract [w, H] from "wxh (WxH)" // or [w, h] from "wxh" self::$width = (int) $matches[1]; @@ -159,6 +156,8 @@ private static function readFromProcess(string $command): ?string 2 => ['pipe', 'w'], ]; + $cp = \function_exists('sapi_windows_cp_set') ? sapi_windows_cp_get() : 0; + $process = proc_open($command, $descriptorspec, $pipes, null, null, ['suppress_errors' => true]); if (!\is_resource($process)) { return null; @@ -169,6 +168,10 @@ private static function readFromProcess(string $command): ?string fclose($pipes[2]); proc_close($process); + if ($cp) { + sapi_windows_cp_set($cp); + } + return $info; } } diff --git a/vendor/symfony/console/Tester/ApplicationTester.php b/vendor/symfony/console/Tester/ApplicationTester.php index ce4e5c18..3a262e81 100644 --- a/vendor/symfony/console/Tester/ApplicationTester.php +++ b/vendor/symfony/console/Tester/ApplicationTester.php @@ -29,8 +29,6 @@ class ApplicationTester use TesterTrait; private $application; - private $input; - private $statusCode; public function __construct(Application $application) { @@ -47,12 +45,9 @@ public function __construct(Application $application) * * verbosity: Sets the output verbosity flag * * capture_stderr_separately: Make output of stdOut and stdErr separately available * - * @param array $input An array of arguments and options - * @param array $options An array of options - * * @return int The command exit code */ - public function run(array $input, $options = []) + public function run(array $input, array $options = []) { $prevShellVerbosity = getenv('SHELL_VERBOSITY'); diff --git a/vendor/symfony/console/Tester/CommandTester.php b/vendor/symfony/console/Tester/CommandTester.php index 57efc9a6..6c15c25f 100644 --- a/vendor/symfony/console/Tester/CommandTester.php +++ b/vendor/symfony/console/Tester/CommandTester.php @@ -25,8 +25,6 @@ class CommandTester use TesterTrait; private $command; - private $input; - private $statusCode; public function __construct(Command $command) { diff --git a/vendor/symfony/console/Tester/TesterTrait.php b/vendor/symfony/console/Tester/TesterTrait.php index 27d59855..f454bbf9 100644 --- a/vendor/symfony/console/Tester/TesterTrait.php +++ b/vendor/symfony/console/Tester/TesterTrait.php @@ -11,10 +11,12 @@ namespace Symfony\Component\Console\Tester; +use PHPUnit\Framework\Assert; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\ConsoleOutput; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\StreamOutput; +use Symfony\Component\Console\Tester\Constraint\CommandIsSuccessful; /** * @author Amrouche Hamza @@ -25,15 +27,19 @@ trait TesterTrait private $output; private $inputs = []; private $captureStreamsIndependently = false; + /** @var InputInterface */ + private $input; + /** @var int */ + private $statusCode; /** * Gets the display returned by the last execution of the command or application. * - * @param bool $normalize Whether to normalize end of lines to \n or not + * @return string * - * @return string The display + * @throws \RuntimeException If it's called before the execute method */ - public function getDisplay($normalize = false) + public function getDisplay(bool $normalize = false) { if (null === $this->output) { throw new \RuntimeException('Output not initialized, did you execute the command before requesting the display?'); @@ -57,7 +63,7 @@ public function getDisplay($normalize = false) * * @return string */ - public function getErrorOutput($normalize = false) + public function getErrorOutput(bool $normalize = false) { if (!$this->captureStreamsIndependently) { throw new \LogicException('The error output is not available when the tester is run without "capture_stderr_separately" option set.'); @@ -77,7 +83,7 @@ public function getErrorOutput($normalize = false) /** * Gets the input instance used by the last execution of the command or application. * - * @return InputInterface The current input instance + * @return InputInterface */ public function getInput() { @@ -87,7 +93,7 @@ public function getInput() /** * Gets the output instance used by the last execution of the command or application. * - * @return OutputInterface The current output instance + * @return OutputInterface */ public function getOutput() { @@ -97,13 +103,24 @@ public function getOutput() /** * Gets the status code returned by the last execution of the command or application. * - * @return int The status code + * @return int + * + * @throws \RuntimeException If it's called before the execute method */ public function getStatusCode() { + if (null === $this->statusCode) { + throw new \RuntimeException('Status code not initialized, did you execute the command before requesting the status code?'); + } + return $this->statusCode; } + public function assertCommandIsSuccessful(string $message = ''): void + { + Assert::assertThat($this->statusCode, new CommandIsSuccessful(), $message); + } + /** * Sets the user inputs. * diff --git a/vendor/symfony/console/composer.json b/vendor/symfony/console/composer.json index 90cbd24f..4fa4964a 100644 --- a/vendor/symfony/console/composer.json +++ b/vendor/symfony/console/composer.json @@ -2,7 +2,7 @@ "name": "symfony/console", "type": "library", "description": "Eases the creation of beautiful and testable command line interfaces", - "keywords": [], + "keywords": ["console", "cli", "command-line", "terminal"], "homepage": "https://symfony.com", "license": "MIT", "authors": [ @@ -16,19 +16,21 @@ } ], "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2" + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" }, "require-dev": { - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/event-dispatcher": "^4.3", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/var-dumper": "^4.3|^5.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0", "psr/log": "^1|^2" }, "provide": { @@ -42,10 +44,11 @@ }, "conflict": { "psr/log": ">=3", - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3|>=5", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", "symfony/lock": "<4.4", - "symfony/process": "<3.3" + "symfony/process": "<4.4" }, "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" }, diff --git a/vendor/symfony/polyfill-mbstring/LICENSE b/vendor/symfony/polyfill-mbstring/LICENSE index 4cd8bdd3..6e3afce6 100644 --- a/vendor/symfony/polyfill-mbstring/LICENSE +++ b/vendor/symfony/polyfill-mbstring/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2015-2019 Fabien Potencier +Copyright (c) 2015-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/polyfill-mbstring/Mbstring.php b/vendor/symfony/polyfill-mbstring/Mbstring.php index bce5c4a8..2e0b9694 100644 --- a/vendor/symfony/polyfill-mbstring/Mbstring.php +++ b/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -69,7 +69,7 @@ final class Mbstring { public const MB_CASE_FOLD = \PHP_INT_MAX; - private const CASE_FOLD = [ + private const SIMPLE_CASE_FOLD = [ ['µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"], ['μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'], ]; @@ -301,7 +301,11 @@ public static function mb_convert_case($s, $mode, $encoding = null) $map = $upper; } else { if (self::MB_CASE_FOLD === $mode) { - $s = str_replace(self::CASE_FOLD[0], self::CASE_FOLD[1], $s); + static $caseFolding = null; + if (null === $caseFolding) { + $caseFolding = self::getData('caseFolding'); + } + $s = strtr($s, $caseFolding); } static $lower = null; @@ -406,6 +410,12 @@ public static function mb_encoding_aliases($encoding) public static function mb_check_encoding($var = null, $encoding = null) { + if (PHP_VERSION_ID < 70200 && \is_array($var)) { + trigger_error('mb_check_encoding() expects parameter 1 to be string, array given', \E_USER_WARNING); + + return null; + } + if (null === $encoding) { if (null === $var) { return false; @@ -413,7 +423,21 @@ public static function mb_check_encoding($var = null, $encoding = null) $encoding = self::$internalEncoding; } - return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var); + if (!\is_array($var)) { + return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var); + } + + foreach ($var as $key => $value) { + if (!self::mb_check_encoding($key, $encoding)) { + return false; + } + if (!self::mb_check_encoding($value, $encoding)) { + return false; + } + } + + return true; + } public static function mb_detect_encoding($str, $encodingList = null, $strict = false) @@ -638,8 +662,10 @@ public static function mb_substr($s, $start, $length = null, $encoding = null) public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) { - $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); - $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); + [$haystack, $needle] = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], [ + self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding), + self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding), + ]); return self::mb_strpos($haystack, $needle, $offset, $encoding); } @@ -674,8 +700,11 @@ public static function mb_strrichr($haystack, $needle, $part = false, $encoding public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) { - $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); - $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); + $haystack = self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding); + $needle = self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding); + + $haystack = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $haystack); + $needle = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $needle); return self::mb_strrpos($haystack, $needle, $offset, $encoding); } @@ -798,6 +827,50 @@ public static function mb_ord($s, $encoding = null) return $code; } + public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, string $encoding = null): string + { + if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) { + throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH'); + } + + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } + + try { + $validEncoding = @self::mb_check_encoding('', $encoding); + } catch (\ValueError $e) { + throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } + + // BC for PHP 7.3 and lower + if (!$validEncoding) { + throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } + + if (self::mb_strlen($pad_string, $encoding) <= 0) { + throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string'); + } + + $paddingRequired = $length - self::mb_strlen($string, $encoding); + + if ($paddingRequired < 1) { + return $string; + } + + switch ($pad_type) { + case \STR_PAD_LEFT: + return self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding).$string; + case \STR_PAD_RIGHT: + return $string.self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding); + default: + $leftPaddingLength = floor($paddingRequired / 2); + $rightPaddingLength = $paddingRequired - $leftPaddingLength; + + return self::mb_substr(str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding).$string.self::mb_substr(str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding); + } + } + private static function getSubpart($pos, $part, $haystack, $encoding) { if (false === $pos) { diff --git a/vendor/symfony/polyfill-mbstring/bootstrap.php b/vendor/symfony/polyfill-mbstring/bootstrap.php index 1fedd1f7..ecf1a035 100644 --- a/vendor/symfony/polyfill-mbstring/bootstrap.php +++ b/vendor/symfony/polyfill-mbstring/bootstrap.php @@ -132,6 +132,10 @@ function mb_scrub($string, $encoding = null) { $encoding = null === $encoding ? function mb_str_split($string, $length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $length, $encoding); } } +if (!function_exists('mb_str_pad')) { + function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } +} + if (extension_loaded('mbstring')) { return; } diff --git a/vendor/symfony/polyfill-mbstring/bootstrap80.php b/vendor/symfony/polyfill-mbstring/bootstrap80.php index 82f5ac4d..2f9fb5b4 100644 --- a/vendor/symfony/polyfill-mbstring/bootstrap80.php +++ b/vendor/symfony/polyfill-mbstring/bootstrap80.php @@ -128,6 +128,10 @@ function mb_scrub(?string $string, ?string $encoding = null): string { $encoding function mb_str_split(?string $string, ?int $length = 1, ?string $encoding = null): array { return p\Mbstring::mb_str_split((string) $string, (int) $length, $encoding); } } +if (!function_exists('mb_str_pad')) { + function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } +} + if (extension_loaded('mbstring')) { return; } diff --git a/vendor/symfony/polyfill-mbstring/composer.json b/vendor/symfony/polyfill-mbstring/composer.json index 44895536..943e5029 100644 --- a/vendor/symfony/polyfill-mbstring/composer.json +++ b/vendor/symfony/polyfill-mbstring/composer.json @@ -31,7 +31,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/vendor/symfony/polyfill-php73/LICENSE b/vendor/symfony/polyfill-php73/LICENSE index 3f853aaf..7536caea 100644 --- a/vendor/symfony/polyfill-php73/LICENSE +++ b/vendor/symfony/polyfill-php73/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2018-2019 Fabien Potencier +Copyright (c) 2018-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/polyfill-php73/composer.json b/vendor/symfony/polyfill-php73/composer.json index b5c58ec1..48295ef9 100644 --- a/vendor/symfony/polyfill-php73/composer.json +++ b/vendor/symfony/polyfill-php73/composer.json @@ -26,7 +26,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/vendor/symfony/polyfill-php80/LICENSE b/vendor/symfony/polyfill-php80/LICENSE index 5593b1d8..0ed3a246 100644 --- a/vendor/symfony/polyfill-php80/LICENSE +++ b/vendor/symfony/polyfill-php80/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2020 Fabien Potencier +Copyright (c) 2020-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/polyfill-php80/composer.json b/vendor/symfony/polyfill-php80/composer.json index bd9a3262..f1801f40 100644 --- a/vendor/symfony/polyfill-php80/composer.json +++ b/vendor/symfony/polyfill-php80/composer.json @@ -30,7 +30,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill",