From 543f7c8fcd27cb797fa8dbce6ef8379ad7bdfbfe Mon Sep 17 00:00:00 2001 From: Julie Date: Tue, 30 Jun 2026 22:39:13 +0200 Subject: [PATCH] formulaires et modifs --- README.md | 8 + app/pages/mecenat/projets.vue | 11 +- app/pages/orchestre/partenaires.vue | 8 + exports/test-academie.xlsx | Bin 0 -> 17858 bytes package-lock.json | 725 +++++++++++++++++++++++++++- package.json | 1 + public/contenus/ici.png | Bin 0 -> 23990 bytes scripts/export-academie-excel.js | 170 ++----- scripts/export-lycee-excel.js | 170 ++----- 9 files changed, 818 insertions(+), 275 deletions(-) create mode 100644 exports/test-academie.xlsx create mode 100644 public/contenus/ici.png diff --git a/README.md b/README.md index 3249539..d11767f 100644 --- a/README.md +++ b/README.md @@ -387,6 +387,14 @@ Exemple pour un export tous les jours à 02:15 : 15 2 * * * cd /var/www/ton-projet && npm run export:lycee-excel >> /var/log/lycee-export.log 2>&1 ``` +### nouveau type de fichier Excel qui inclut un tableau +```bash +ACADEMIE_EXCEL_SKIP_UPLOAD=1 \ +ACADEMIE_EXCEL_LOCAL_OUTPUT=exports/test-academie.xlsx \ +node scripts/export-academie-excel.js +``` + + # Couleurs Ajouter de la couleur dans du texte blocks strapi diff --git a/app/pages/mecenat/projets.vue b/app/pages/mecenat/projets.vue index 097286f..a31d1b9 100644 --- a/app/pages/mecenat/projets.vue +++ b/app/pages/mecenat/projets.vue @@ -126,12 +126,11 @@ diff --git a/app/pages/orchestre/partenaires.vue b/app/pages/orchestre/partenaires.vue index bb69a8c..4e598c1 100644 --- a/app/pages/orchestre/partenaires.vue +++ b/app/pages/orchestre/partenaires.vue @@ -259,6 +259,14 @@ description: ``, url:"https://www.ircam.fr/", }, + { + id: '5', + imgSrc: '/contenus/ici.png', + imgAlt: 'logo', + title: "France 3 IDF", + description: ``, + url:"https://www.ici.fr/", + }, ]) diff --git a/exports/test-academie.xlsx b/exports/test-academie.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f28010a5cebb6475457b8ba4a287747f8ff734e8 GIT binary patch literal 17858 zcmaic1$Z1uuCSSznQ6?-keHd7nVFdxV>^x=W6aFVb{sP^L(I&Kzq7f$y|;Vs{q?!0 z$K6s%EmcX?Drw}UK*3;ufPkQY;&WEDvABX#je&uH?7@M6P~Wd=3E9~?o7g(*DSOzP zIO)*4+gO(?%h-Kqglj)jQ*O>-uj*lyK|?U&u@yHG=whWW7f+-@(0lW>9hzWeDuJf2 z#}Vkfv!=n8yNi)+*e`CNz|6I#LSYS2sn^)qbh=38j|>LE0$;)z=>?XMrgYot?ItGI zwx+^VfjX6tq^7p^XFi&+FR1GX=<4(($49eL&u$|`AT&0R`G7h#;TS&X9!hTQEUtU& zy@GvFBtbTgUo|@f&RKW_0k}lkI2%@p_4H& z>GxjVU~3$%>qm6LsRSQkAY+`5s>P=GcVKu+;x--(S5~^@PCMdz5=LEr&RNCfVOEUX zO0rdCc`P_2`>_p7G&jcHN1Wfkop!AIH*mX12lLM)t9dCJAC~qil5UF7y!bl;R?epN$c1>TTNhOO1+v7CQ#Rnif)~z6f)`8v|kCqZ_d~3!_ z4GAQ5(||U5W}c$tnD7Sr-=zlnE)jR@e~av&Vuk(<@ZTgGOjfP>OR~-HlEwK?FgH6# zD?>Xwt6!7iPeEJuFd_+`y}(r8X}W4k0^*$j0oq!3puu$w($*5@95yd^D!Af!P}z`K zKgt%q_KP2l-f@P@NzXu5exsH|+Lx(nKST3oU4Ak{`mvT_D_b$ZO=MJUyRLyS`0a29+T z0|=bAMLgVNjBF(^>Jgs|5?^9(vp$N9_7`J&Tx=Z@{_lcD_${DcqH!`eF>(I;FkMc& zsXW5~0t!z90>b(S>>nshzvP*eq2;zT&=9gdUa5cH!IaP>j_q(ug%tcF+4V{Em}99A zI@e|knCxJ!^A)Pf&B|A*%$j*De@jlvMPXKYc1ro-rSr|xv+N~>{!8t{l>wh6>rwr| z)#|hF?ek5QuM5|+nr0=PTH@Z*;MTK;r}~>$OWE5~&s+N&m)>*pGkZpbWiNbYa@dVs z>FjW8P|(h5uYx;j>PB%B!k4_qoXG<+TZzz{pi-ZSTZdbH6g zbZuvU>+nqHlZz`9D2M~soY(f9%M!5lZ8(^9yYt(d-qE?RMm##XZ8>gz*mAt`vy!Xb zlcC9?@WY==v~9n2a_xL{Rga4bUGveyxWTvcL$Wz+gI}3p%qpWGTw~Z3u!o3S-F0MkdrrBUcb%H^b!2>dPN|xAjar^(ubG!fff}C5H5T_x(cigsWuUuhE<-;>w-#igtFi;bA*$={q9Xy`wl>8eDtU!S_X-&u9| z^}+Cd$IXuV{mz=IcHkO3dLpCfU1+2QR<57WtgtX-SY$C)ZkSN7vGhc5wjnpg{+2uw zF{-m;QAz@|CzrDH5ZEdnb%Duu--?u!L4g-<`GG^fdbZGpM-m*hK?R1j&kZK!vY%aX z%4Jt1mM0(m&b^-;nibuvnm_PP27KThGH6DS;IJ}{p*?JS`AFzXyIvdu$&V6F`659? zaA6kU-XI2|kZn{cNC`4|R|qmW-w7?Om-T+U(Iffz=!V+N+zJx4oGHE^lJCco)sQ;L zWTPHf&Xa8$vmLl%VW2#t1jWa+60+KFLVO7p6WJ*6tBxicZqb6!Y)fP_MG5k` zVuEf|3N^_nOZ!vCQm6S)Y%DiBZIfsf9>|cc{rMmX6&8$$B?rbD3EM zl|yx+p%OaN zXjKU?3Me{BW|nqX#;wd~B!KJA=S#lTNo{rBn97zi*(gL~!hQglNQQQxlSJf)4{pf4 zMW7Q~o{$Tdm#nH(ngkb3OLJ@BsX!@|YEwoRX%mIse}jubsuvE2LB9?bkNjvPN@r&2 zmmqFS4DNWR9*TVz1JZ1SHqf4+Y3Th=+ycI=6wwIzdTJIy%7oVTh?eY z@0WvFFwUNcUkLQ52^X~|L)AC3z>&K>Td@4RN_d z$i~gApwUoO3c&L2fXMFeF~qyV$xfSn@g7(5HA8*#yAMwEdNh2^ixn3`0XUHOW< zBc%feI}N3qBxPZEf-6kN8L!;OHLN+`OQ+0^!P2xl)#BmAI*SKqdpb_Cq{nU z14fPfNGS;TO0_w&D3#8w6%)egLL|E?ih}-Dxk&%YXf_is$+TDT`QetC%_NJ_oH_AcXsfEa&+a-qEWr|ZKw`|rBreQrv)1Yln@ar-@ z6q^)fu}E!7S4>$3MWx?FJz+i3NQS~!9FHmag8C%p%JR<rWw4@M zmr0L`R%kWH(}ZDZOi@Z}Ott7w=(=Qhc$Q~ROghX@hB4qoRw@P1z;;{SJVmDDu556dzk$gDCPv6KhOqB3e|q@|7(^ z*moqEE+7PBD3Yuc&@%H(WCYK=X9AltXq0j#a3VEsGyoK1@ru!3jIy8mFN6V>F4QUo zR1!tVsh(?`$;CpNas8?-Sy+MQw<*6!D<)|-B z;8WpEZ+_||;kO0aY&6`Egj6yM7Fpg1L6vhL(ZCpSVyw8=TEmVI9+1A#xPZwp$}V?; z!Y(ZCP5`@Q{%Cz;+N?-ZFa z^t4*97FGX|y?#@)ClB_7q%2yd;Kc??zO7EsoffmJXp)?9`Xt`0yyG^FWlrC8MS=N6 zX(?W`o%eqV(MdOD=8NN%M~rL?%*m9!QNa>dt#a!vOEPA%9R!q42J*{}Ms8yL@@n1k z_VAGJXYt6K5;QC9Lb(^Bi zWGM`~9S+OhM^i}ND_0Kd{mpTZ z`~;6!wLx~-@4Cgp30B)r4#kxMy+@D}s>`C}^JJr$M#Aa-lF5cEQMye3%E3My={u8< zIywI>h13P9czCv~T~nUX?}^G+tJY^G6$@NR+6|QP1itH<11R?^WfvB2VPJWn1!L#> zw0^EWo!LwlY&}c?c$!=?dfNCGovRiI+@}`RXnF;(w3pn^)@UPiTwp&bqGp6R?~;8Q zdxTE60^-8>U-#u^{jm)NPCy$;3RZk=%e>Wa`~>8@>e%X?)aIj>M1M?~vPdjts1B7o z2v|yuO5^A;30z0bu-Xbsmz`+fkynIUXo&WLX`!Q9cie;Sa`<&UA0no#zW}G<=UF+3 z)sAwHur-TiDm-czsW6qZb#?;pVsZxBU`Pi&@YSe}6s16<`Q)ixmak_Jo7br@H6Bm6 z!6K$GSZiQ4!6WwQeI5fCvOIi$IOW+VEB?d;-{>W=!_zSmaqHA6ruD=#&D>sOWK4S` ztYDQG!0b^KI}@F?2Xys>*Nx6RH(9UVc(B`DN4sK8ws1-0iW#pNi9?<^OJb-q-P%pdn?*a6-L;Av1w)+h#35_96jlkBJzqwF+{*r9i0X%_~bJW5HA-16mF zRmAby-8RdY8Youjgj(cE(~qz%STVXm8I`9jida?+hIrU?xL82(pFT95ZLRc!5+eFU zFLrYgGV-NdA#e*&gGu)cGJTY+Y*6XCWmy(mJnDQxV_Z0?b@8+S@mFsCkBL9ZTUddKYiD z&L79y`4}SqpPVc89G%Itt{iw z9JH^v$_4Zv)9(ZAE&#)oqhz?|b3M7j$|`L@+>PggEP<-#CKCEBXG z?3>!r`WkcL^i`EMxs3~xV)4(G91C6T9Zp34H{!HCK_}}hXUuCQg-crFrH70 z)A!9S?-u>8E!QDm8z^H* zIkX*-XzwfqJy4^hRFVYzIu$ea?&8{(H^no;@0N`dp4m7{wM^ihly#e) z?ED(-^~o64Q};`x6fuNyM=e}FM4?w=xMAShKYS{C-;IUliWDgWFvf8xbr4T;mo}6(z4$S*Y)(&95<~WZbr43=) zA{HU(W*eT8L8p)p(hK$ajy*R$Ju(QWM2|ho8ojj2(_k1Fg0UAW0i})R-aE(mM*uq2 zeIGyyM81yZS`CR+{WiC~eUjM=>Hsucnh-DFcEzhw4IL@p&z`$i-1+?gO0kf^aA3&ld5Et(u^ z1JCSh`<@mrw#xCd5~iap`q!TYza6fpU`0WvB+@{#Yl+XtFx;pU>Yiju2jq+(Oz~|J zben<#Ql?L!7OaWTr$Wtq< zAo{NAu_%*_Tw~WYEBH@z2IAH4LhCke1AYpRT{a$A?;0IJzLH{Rlo+v+%pgY>EcodP zDDduAq+J~Ul4Wi4u;O%svUFK1N+Y>EDmzO&9ibl3{Bt0n83WaN&QLM_W)Q8I(ugY3 zim6wb3CxMEAjLF{RKKFvzZnB`H%uh5*l;Omw})f}m->r4|EbfD%{k02UVX?E$YUTQ zeQj8F!tyw9T>PH)Vk6tqzppZ!d{gSNJYz1nMaqJ+ofF3(*W;n2ZdrCHwUqc-1lomV z9voO~(T2Y@)?<-NxBoKiEZ7tak|~*q>oKdS)beQW*4|kWXj%eTni8Bb1Fg%O6wqXo zj)r5yDourHC>aynT;QEefg37$6+*_SCk~?2)y5tZlDbNEIzsBYLb2ZR$K)I-HoP9b z+kSH2--_Euclv?Qv?v8rdCz7U&XFc@j-NJYEFkB5Sps*xO<9dxB|Bv!rqH@<>FBc{ zH={i|ny3G?9Ep}Tn)j~GrLSHi#3h14rTVQfiTWKVuW%zu2mu~L#Ef!WV7q`YO^00l zsSpa%f?qC4sY9N|!11+NVn0{mxeXUF3WXwu*-N4viw>RYtJ!hWKNc1viw3d_A1kq? zLe3-EQbMn8(~0Yp@n}0`3QN6fQoY^Zm>;RsK3z_&lBuk%`WR9G~BhPRCILC>_%y1hb7Khzj~|tePvLM z8njjc!xVTMZv%>Z7(T9Ai>x&SOvlu2b_f(i%^p{P&_)r;&UaE(s2lN*s3u=s9Q)ps z-*+GBiA~$o=eoeFCJGP~nkDvHYP6>L`K>)ST~9AJUh#>Y|`@^7*^IYEK)c1(QYkc!6?LadNJ`Jg+;bT%}OD79xq6k$-Lj5>@5m(b5Ln`iM{3p468$nr3vSHS{g~UBMcYG9)>QCHt)OH4i?gX~49oW#b!+#AmxE)^ zn~G^3(we-*Pzn+wfsB){yiYyLe(t0u68e@De%#ARCa-dPd(3OqpNA?2G$7n;MdGJW zd}$l@m>IBE2k?zdQq#3Ue`XYZHZvo`P*MGE6qD&DS`z)HSpCsyus*uB(T>dTsleNd zjf^+Zq5BHO^>&M8oCr z^m7UPWN>m=*p?TvI1yJz6E`neSeQ3t4u1!_Eer*Di+4{Vm=0bzJZUpfdp70Bfi8-> z&mf0%?N+Ju7m=izGGRwfUT^N_r0qH?j}fP5L83jE?o7y;O8QA6-*Iyhb8S_)6B{5@ zbq6`AZUf?%6c1wCB)k$3n@@X#KkWdd6o5OfxvlwSTzZ2b=zc+8rf}26pV>BDKeO|W zz*xuYHa&67>(BZg<5$(!mt$^nTdSAdjNS%pkIzo}UdL=djFX!uEBC4{5=}O3UVPF% ztM2bX8T<4`7zdDhTDXuexSH&y(vCJO-5N&KJaw=6Xw|{Po5#Clu4NQ&BM?wH2{TG% z?s{+6g;uBfcpu$$+{dFymeaOSLg#8ki_>%VwZqO!)!w`RBtFN`cuWJ>woj5d8{EuT zzI(mj2z2@yZWV&bdBq->n8Xx^cZiXibSr}5elbtTG$haK-mMBNf$Lbw^$V-){;Rva zAA37=|CageSM7k%zMo;|J=PMcJRkJR%$^yCtF&3I9Ylb{J1ryIU`G6e!+%&%unu#r z>zulG(T&geyAx7wOo<=5d;pgxw;=bBu1=xrxsIzGef)V&Jp)EjuK(dXjvpJZ;XRqX z_&9lJ%;%>jRkgB%(CH{W3sDY1XFFs;2DK>rU@|{YyM!d1uHsoA?+boFD^kury$y@c zI0tBdLp+>LRPY@w=+T*4%}kL#h%KZ-5i0d-AQ&=dM?jl_aH%8Rxh!No4!Q79N|5*V z&ww_Zkz8`-Z(R^i2&HVn{7}0aNs5b49Mwo5b|3FZhAnwjF1)l*VZo@?6a-Rrbt^@| zet5c1xU;GkgwZ*DWcPc!((70RyPTj#SNZO+K{yRFP0@2j*YD{0@$6nUC)6&rH|1bq z*Fq#V*R2*@aOvas>wD0F#H%u4HQ|)Y?|TZ8HWL3U%Ch zG9pSGhoa{cT;a4b@-92W8DrkbDYbM?+4R9Y34TalWQPBwJysw<_-cdq60KYIeK}1Y zJE+(|_X8}Bl80{(^DTA?Meo_f3Xp7o3=Dzua3mZGsRH9d9j}dAXQRy~@;qs#oOfah z6;aw35#M4eO3-t7C?Fu*2r8J8?jL{@#z>zEBmE~FD6$4SI@4|(IO3j2?Z7+^;nsVv za~$S%fc!uJ+3`M~kWq&Y)|$STXM0BiPR#)Hy5)dx3W=RNKzg1S0%pmgJs}UkKs#&= zoP4Lid2%fj%|MeHXz^_W{7_yQu&fV8dxV`er#cZz-(hl#w=N1iQ_;N>+MiD~P_#tC ztibaOw4l;rilt3EEH3#54^1z$TfqRbqD^|3BB#!ShWV)^(S9J=q^Q+0z= z)SnX>e3Gidvl?{=;1ZK_fF@u;%LV&*Zh#XI5K+0!tYD3AUvK7V-Qo~cdaxQ4Fiwi7mw5miBP^r;lc%m% z%jsf8P{Sen%2g&yuian)N!Otx9n!{%wfkz84&9&(2zRJ|5$H}sIZZMlbNhT8paDqV zwJY02VoGTzC#|b)S`n(B<0r^8x5~ExFb|Om$s`Mu&w_l-%rd9MK`++#p|eB%KsNZp zb9v7U#F&{w%Dfd=IYY3-wW{CkQkyITzrlvHOr@Yapj>J-W2jV%Tw1IlK7cPvjbx_Y zfjJ)N_bkk@>{}4SSLQ<19;F!dNFA1@Mb_u5W*(#lz;bbY`ABz>YI19#>!^=GhDmOU z8DO#`UZkdY8UfRVnj~wg-@g!!YQjf3ApZ=ntjnxmZBWhsHX_NK68vKdtrGzeH%X)4 zSi@pyqGSj(`x}@YIySVtsENg<3k&4)`Ai-cgTPfZYKH1#SQt+EE!9+<7KBVVfj_K zn%q7Bxdib3#dlx1^otT@kK0vwFb~bSvh4?f`0boEEFr3Y({JG2Jl=!ua)V zlG%Fuh7ZWxC@C=hgne!ZwF|0wPpWbp?U{(s{DzV;L}}9{vH5=midt{C`@pP6`r`A)xZ;s3qfc!g zKkSd1cjPWO!mZchjh|~PC(xuquew^undX)7{t-EWI(0Nkg1$7-%G5Y97EgVmLc(&XGWZnku3~o$#oF5)~sg^hG^B}^{`mWUg+MB;UO?HY)!D(TI;a4RIj0J*_NG<8%^(J_eQl;#BFvC_h}mmaXRWKlzx=$0>F3W|LW-7B zqAGbhZ0QhC?@t|8|9~)!k)yIaed^J4Wz8W{BA3(BPWPkZ^k(uVb#o(sD1u5APX$>Q z)dh^?u_;9+%ixSnzl$?9uBTWMeZZ^aJq64trzi{lYY=t2ehfyhQ$6+|W=fqQ=72G- zVea5}_;Dxi;o#1=vph61z=x7TE$J(J##9|dWRtdj=R}Nz11g$Uv(@xI9(lEm1~p&n z{(bC$@l}YCCB-0TMgBu_A#)2KAtB@y5{4c%*w<+cn>AG(Pt7utt>c z4)g@3e;#j(kD;)+0lKA~pHHHj;@uSq)}bqVzvtHx=|l<{E6d9HXeZ?Q+ZFX*dlhsO2M+@}WnX|MXyTjQ2l zFcAiOV&+@<38CAy&slbxYA{Eddcte!Vr#rl|j%|jsfmQ__4LcT52>}?W%J-2c74~7AR0hgpWwQkQ9K9*5 z#4dE}d9ZEq{KI|4&K8Qoz^SMWot7V4=fwi5n zWs{wph3$Oraf1g;lIAIgN&>+KJYHY--n?IfELKCWdsFRLl#^ge6%%VflF|``n4#4s zLBKB&r4woSlI-Iu*NeNq7SSsfBp2C$ES@_|&M;+0X&N9HZl}<68a<7^{&0X~oRXYQ z@a0Vkz%S_PUnG7Qv~P5RQ-;xbMxyi870$)BNNJf1m{Cdt;g zbUX=sXsJbT8reEd{SRZDYHuSz+`QfuFPJkWMBtd+HFXOo5mm`#WOo=4)`J zi|pf4qqd9W8C$!lO0Djc7x=EQAXN&wmUd9cNbHszv43N!X&hgLZ%JM~-bmli zx>^_pHp-gsWoS4-?)0}GifUxNyT2WTOjIb3Kyl7A+>j-Z#Jd7fcazm{jk?|6eHI#c z*3hpasEvJmEt|%JZBd?3%qsUnUudu}mknFyZ1v>dFiCV0A0qTqR~m&h+_yGW$_$3& z$FLX(xBI&5Z7q;08iWj&%+xn>gq!nVXaq=D?!mN1^qhqkAs))05Gigo${9XkIt`Gw7I@b+8;GRdA9R+sghw@KdnSib3G&4Zj|}wesBy}+iU+sE0*;9 zs8rY0c)`^scXL1G%HU{k9iNeKC6;$bky+x%7PztJl<_pgNL$$+XTVtzbrjto^BtE+ z8~NKxLUbkN`^ikW>J+_I?Nuh=*k60nF$DF) z13wHbbHZsQGp6(2h%tM+7${;t&w<|L;r0#q&oI$Hb9{egxxXg?I~y2UoBTa5HFB)F z(d|7;7~wtX{a@jvf5H86`XeVbKV{r@nG>n+%m+sBP88!{K?13DfI@8hEm1H?2m1%-ZO>Huo!0z`e1F+2B<3A&HDlM{vS2s!qVA9LCb; zm4~=prurmc-34-g8WTyeTnSCb>;$@>IU`J;64Lw*4{a)jBY7@}^6X3DX^2gH9qx+i zpj%VP$3uB>8-fJVK-~e3x#hY|sEATGhQyAX3r6g+@VpW7UlDpCYAEQ2&!o^gW}p?? zuG3yHZoLbwZH0H9ozgxDE=XR^78;Gi)0z&dxH{a#PX=?IG}Y<72PmXoglq<+-gfk# zr|K(`V5P34ba{Me@<6Y+{d}7j%5<$Xk|Vb@*B(wh2x&zW{2y~&>D7%s=e@*Zb0_4G zVskr2$MTAZ$xg&8Id5ZgU*hRKK*gU^o49{vZj;5cJ9KWT(5A_{ zDgARc$Gx6Pmo8E*YV)tJKW7cy>(zgthpR>X{@ST&F)y~e4A4(A^;s*Jud=v2>^`z} za}yGtAHGeU=ko(PXw|vL>)7iAYav~+hZMtVtRGr6{iNWlevn&*zmrIxi_+ivW4u74 zbYOd0=MqvLB1e(3(zjvr-40)J_Br=AVag*Kr`LyU5r2AGEY%Q09&-!6^Sw+|D9)a2 zhm#uBWIwXR2FZmg2d;zxof9=}+7hk!(H3~F-`iO(mQyRnU+fG<6I1ObmZ4|t2Y{Fme z+EB$c80A(hem1fJiHNPzWn*@m)<=NWv9}{9S-;W+82>0Q;VcH6WZ%D`b@V9;6W|Sb zs%saU;tyiq*{8ZdUCkp4x5j4@obUTf%6L)<(XgEuz!%SGAnv(QyZCk)T_hRi5)5@o zRtqK95+@mk@tbuj0UF#?X!gbhibsu_%q6UQ%(jg3EW7TzWaB3D{0AP)9N~5#Tvgfm zM1$W>t`1(G?*m^CRe!ql3!ZfnEYiM0hZIRwHtTq%FwWVqa4^t(U*Z!`hp`h$Cq(PE zHJzxci!oOdTNT~y{6Dh#|CO}wY;Iy>^6%XK-{E1`G{$w}_gV>T!ryf)zvlfPV1Io6 zF`Z8|WbBsNu{zGwkXjlqlNBk8lzzmn+S)7;Iq+PIOV#}dMFCHc-CUj^fP}-EgKvdf zun9BJ3cy&%e_~tYw#J|6tWui`1Eg7|Q>@ApadDE|@Sb6=-;rDBbvocNJBtVB@gAz* zl(NCb59|=cJjc5DaW+jgd{XATWZXhNP*)-;$4w*D>BpreBL4UxZX4oMJwWjy)J6)k zpt^0y2&KD~36ofr5v}6{+8fMJ$dtpfo{i@RYmI!c&?iqj-U9lMJ;HhQ5sn8w5QOmw zwb;oKK5hj{dwJ$(-}s*x3TyhoxPO!x1<=P4!Vgy0AoVDAN5!h7y=bt1JK>5crfw0% zA9;1Ol)XT}0jS*P25J%3%~jfr*RwLyL6~>0pWPfe6$8Lp>F;&)LK`7YJR3ii^-P%s zh3bwL*JDt%eA#6-XsnL&U2G?FbNTab4+d&#YH}`NIIU3v^xaP>-S)e?iKlTbko*HaI9-iEZ zB?g`+L9_M1lQDILsFyaB`vBJq8{P<4XyqXj)K2ToWSM6h^jCh(#B(rd6`V~V0;hbFJce^?e=xNyMf77xP6(YF!dyH@QFukX37lV75u zyhf4SmgT)@HL-GXW9v^@@nD-dPt}b$L%WTzf~3E)QjI(p88uU1xr8j~T>G|@92~M0 zEg2i1b{EwL#I_)OZG92WV(tR zzJ_~EKYtypOEwMwutQ;-#53irIaF`MDvbHwq!MD^GV@7L!Pq*X+xAVc7X+@Whv?a} zUqxATXRY$aFsBp6R-+SOkzRPV1SXb&bvQl(yb-%wT51)iaaxOiKlT`es3J(KlI zZs@*75#+U$li%%j{<)I;?NOj?M_9ApOTg;iy$byAm86ri$NNh1*G^-;%DP<|Ba-jB zp20%~j<~)ASn-zv@uU_@MHY)ngp?m8endts#?!BN83AB9wnuaAKlaW}JD$Ax)3+aq zz&%Y1b~W=kn=Y9QsprAfTG9O0jMw0DmlRdxv(cq4;%DzYALxru6sr39j4*(MN|f3f z8#Iv=_q-@9eDY}ux|A$Qi$ls6<6D@cG3uof0)smUQ6-wcm(P6gOU7@@j4@Y<$i>a`)u(R?JP?pL7$CrDHleT*7|8s5EkvpK%>o;>Vx zCJG4Gfp@LCtG7{`!OGk`Yb?FHy0O9VWbtFWDnP~XxH7N5%{dsgY#-b8-CuvkYG--7 z7`m1N{X}aCtWY3e&G72brO3PFe7XD@a9n-sf%Qa~({)!9LFhi6GS;TS8_`A!^WBA4 zXH`^#b&8<#3KC*117=_MBTSB6s7r{KfpIpGskvclP9tPHlUhs4M3R5U79 zZErp-XUVZJYFL}eHi}^}9cnIy**X6n7mPW0PC@c@oI?VG0c%k9cvZeiPgXp|kGF2J zCz@!T{`OT$5d;a~O?Z+~Vo+KE=1R;`zxv&TCr#8oG zgdP{Ii7o{281`bt5Dj-PS}7B)@kqSRE}z%*7|Mh&yZ5kmf(g2M2p~^`ebwIt;~X$g z{V&q5Oq6W2#MSp^rM*&c4*79qZ8s{l&b`XU)9-?QQfJC0S0-~rT^eb`_S>HV9$dE{ z5&u-|zp^4oHA@WNHFofBsNRz!{!*-woukQbmFdWRXGHV4Q=|1E#P31U=@XwhCyR){ zieV^dz$~)1nbyU6x^pFj!|-4}=;6Cd&s>WuxH5`|gshUaWFy^D5C)OghAn1ixopr3 zb|bSN_^jWo%1DaN$vkeWXp2%o*QRdMl>>(9PP&6)Yib;2jv|S_F4(;?K=YY$ehCAP zuMXD|YrPtNf-|z94#+r=IJe%w+*52y17=MtwS5#9v>UK3?=L9UpUcE&g>3z^Lf1S6 z)`Ym4*s4xntBw+7ncPg zNrtIh5ipoFmYE0RIJDs)`p_c6!csO!BOzI|Iu z?`8jHt?nH6ynJCiQO|jwvG}+55a+>X4DEM?xV4*uX~%0Oa~j z=u>zwkL^$CZSp82EP(*4Z{O6QoR#>?$L9#|<_Mts(&Q&7M3X5cHsH-M3g!Yn%GtD= zB3HhC0^19Sm;e$kPtZuEM;*<}1|`0WW3<+hLOA=!PptQH@_*y}k&g9$5qmek|7yR84ZjbiKWf?kr1Veje%bWj z?H9uFZ-oEO;NPp;|3rL$ZGI>FPUkn;e-7IJFTcNvz<;-2+eP3e_{gx>Hh=wuPnCzOJcu5c)!~(4nlDM&cT0|#ox2&{_Fz?sPTX4;V*9fCX|1f zsE1OJKkR~Y6my8nHh{Z|J#T)$=Z?^X9-sQrw zzVI)!-xUA8%=wEVJnw&?{cF+lcWl$Yx!k|7JNf=18" } }, + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "node_modules/@fast-csv/format/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, + "node_modules/@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/@fast-csv/parse/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, "node_modules/@fastify/accept-negotiator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", @@ -4479,6 +4521,28 @@ "baseline-browser-mapping": "dist/cli.js" } }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "license": "MIT", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -4515,7 +4579,6 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "license": "MIT", - "optional": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -4541,7 +4604,6 @@ } ], "license": "MIT", - "optional": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -4552,7 +4614,6 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", - "optional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4562,6 +4623,12 @@ "node": ">= 6" } }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -4661,6 +4728,23 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "engines": { + "node": ">=0.2.0" + } + }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", @@ -4882,6 +4966,18 @@ ], "license": "CC-BY-4.0" }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5291,7 +5387,6 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, "license": "MIT" }, "node_modules/confbox": { @@ -5653,6 +5748,12 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, + "node_modules/dayjs": { + "version": "1.11.21", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", + "license": "MIT" + }, "node_modules/db0": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/db0/-/db0-0.3.4.tgz", @@ -5975,6 +6076,45 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "license": "MIT" }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -6019,7 +6159,6 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "license": "MIT", - "optional": true, "dependencies": { "once": "^1.4.0" } @@ -6203,6 +6342,240 @@ "bare-events": "^2.7.0" } }, + "node_modules/exceljs": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.4.0.tgz", + "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==", + "license": "MIT", + "dependencies": { + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.10.1", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/exceljs/node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/exceljs/node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "license": "MIT", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/exceljs/node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/exceljs/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/exceljs/node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/exceljs/node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/exceljs/node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/exceljs/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/exceljs/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/exceljs/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/exceljs/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/exceljs/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/exceljs/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/exceljs/node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/exceljs/node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "license": "MIT", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -6242,6 +6615,19 @@ "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", "license": "MIT" }, + "node_modules/fast-csv": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "license": "MIT", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -6401,8 +6787,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/fs-extra": { "version": "9.1.0", @@ -6424,7 +6809,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, "license": "ISC" }, "node_modules/fsevents": { @@ -6441,6 +6825,22 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -6942,6 +7342,12 @@ "integrity": "sha512-3MOLanc3sb3LNGWQl1RlQlNWURE5g32aUphrDyFeCsxBTk08iE3VNe4CwsUZ0Qs1X+EfX0+r29Sxdpza4B+yRA==", "license": "MIT" }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, "node_modules/immutable": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", @@ -6967,7 +7373,6 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -7490,6 +7895,48 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/keygrip": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", @@ -7774,6 +8221,15 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -7793,6 +8249,12 @@ "dev": true, "license": "MIT" }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "license": "ISC" + }, "node_modules/listhen": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.9.0.tgz", @@ -7875,18 +8337,85 @@ "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", "license": "MIT" }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==", + "license": "MIT" + }, "node_modules/lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", "license": "MIT" }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "license": "MIT" + }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==", + "license": "MIT" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "license": "MIT" }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "license": "MIT" + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -8157,7 +8686,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "license": "MIT", - "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8189,6 +8717,18 @@ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "license": "MIT" }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -8794,7 +9334,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "devOptional": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -8988,6 +9527,12 @@ "integrity": "sha512-dSMiVLBEA4XaNJ0PRb4N5cV/SEP4BWrWZKBmfF+OUm2pQTiZ6DDkKeWaltwu3JRhLoy59ayIkJ00cx9K9CaYTg==", "license": "MIT" }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, "node_modules/parse-ms": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", @@ -9041,7 +9586,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10366,6 +10910,62 @@ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "license": "MIT" }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/rollup": { "version": "4.52.5", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", @@ -10552,6 +11152,18 @@ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", "license": "ISC" }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/scule": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", @@ -10625,6 +11237,12 @@ "node": ">= 18" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -11589,6 +12207,15 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tmp": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -11625,6 +12252,15 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "license": "MIT/X11", + "engines": { + "node": "*" + } + }, "node_modules/triple-beam": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", @@ -12078,6 +12714,54 @@ "unplugin": "^2.3.6" } }, + "node_modules/unzipper": { + "version": "0.10.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -12120,6 +12804,16 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -12726,7 +13420,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "devOptional": true, "license": "ISC" }, "node_modules/ws": { @@ -12765,6 +13458,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, "node_modules/xss": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", diff --git a/package.json b/package.json index bbc470e..3f59932 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ }, "dependencies": { "@nuxt/image": "^1.11.0", + "exceljs": "^4.4.0", "mysql2": "^3.22.2", "nodemailer": "^8.0.5", "nuxt": "^4.1.3", diff --git a/public/contenus/ici.png b/public/contenus/ici.png new file mode 100644 index 0000000000000000000000000000000000000000..046c699b4c5337a088a06355bf978e882fc326bb GIT binary patch literal 23990 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", ">") - .replaceAll('"', """) - .replaceAll("'", "'") -} - -function columnName(index) { - let name = "" - let number = index + 1 - - while (number > 0) { - const modulo = (number - 1) % 26 - name = String.fromCharCode(65 + modulo) + name - number = Math.floor((number - modulo) / 26) - } - - return name -} - -function formatCellValue(value) { - if (value === null || value === undefined) { - return "" - } - - if (value instanceof Date) { - return value.toISOString().replace("T", " ").slice(0, 19) - } - - return String(value) -} - -function buildSheetXml(rows) { - const allRows = [columns.map(([, label]) => label), ...rows.map((row) => columns.map(([key]) => formatCellValue(row[key])))] - const sheetRows = allRows - .map((row, rowIndex) => { - const rowNumber = rowIndex + 1 - const cells = row - .map((value, columnIndex) => { - const reference = `${columnName(columnIndex)}${rowNumber}` - return `${escapeXml(value)}` - }) - .join("") - - return `${cells}` - }) - .join("") - - const lastColumn = columnName(columns.length - 1) - const lastRow = Math.max(allRows.length, 1) - - return ` - - - - - ${columns.map((_, index) => ``).join("")} - ${sheetRows} - -` -} - async function createXlsxBuffer(rows) { - const archive = archiver("zip", { zlib: { level: 9 } }) - const stream = new PassThrough() - const chunks = [] - - stream.on("data", (chunk) => chunks.push(chunk)) - - const completed = new Promise((resolve, reject) => { - stream.on("end", () => resolve(Buffer.concat(chunks))) - stream.on("error", reject) - archive.on("error", reject) + const workbook = new ExcelJS.Workbook() + workbook.creator = "wondif_vue" + workbook.lastModifiedBy = "wondif_vue" + workbook.created = new Date() + workbook.modified = new Date() + const worksheet = workbook.addWorksheet("Inscriptions", { + views: [{ state: "frozen", ySplit: 1 }], }) - - archive.pipe(stream) - archive.append(` - - - - - - - - -`, { name: "[Content_Types].xml" }) - archive.append(` - - - - -`, { name: "_rels/.rels" }) - archive.append(` - - -`, { name: "xl/workbook.xml" }) - archive.append(` - - - -`, { name: "xl/_rels/workbook.xml.rels" }) - archive.append(buildSheetXml(rows), { name: "xl/worksheets/sheet1.xml" }) - archive.append(` - - - - - - - -`, { name: "xl/styles.xml" }) - archive.append(` - - wondif_vue -`, { name: "docProps/app.xml" }) - archive.append(` - - Inscriptions Académie d'Orchestre - wondif_vue - wondif_vue - ${new Date().toISOString()} - ${new Date().toISOString()} -`, { name: "docProps/core.xml" }) - - await archive.finalize() - return completed + const tableRows = rows.map((row) => + columns.map(([key]) => { + const value = row[key] + if (value === null || value === undefined) { + return "" + } + if (value instanceof Date) { + return value + } + return value + }) + ) + worksheet.addTable({ + name: "TableInscriptions", + ref: "A1", + headerRow: true, + totalsRow: false, + style: { + theme: "TableStyleMedium2", + showRowStripes: true, + }, + columns: columns.map(([, label]) => ({ + name: label, + filterButton: true, + })), + rows: tableRows, + }) + worksheet.columns.forEach((column) => { + column.width = 22 + }) + worksheet.getRow(1).font = { + bold: true, + } + return Buffer.from(await workbook.xlsx.writeBuffer()) } async function getRows(db, mode) { diff --git a/scripts/export-lycee-excel.js b/scripts/export-lycee-excel.js index 66b8308..91db6ee 100644 --- a/scripts/export-lycee-excel.js +++ b/scripts/export-lycee-excel.js @@ -1,8 +1,7 @@ import fs from "node:fs" import path from "node:path" import process from "node:process" -import { PassThrough } from "node:stream" -import archiver from "archiver" +import ExcelJS from "exceljs" import mysql from "mysql2/promise" import nodemailer from "nodemailer" @@ -159,134 +158,49 @@ async function trySendExportReport(report) { } } -function escapeXml(value) { - return String(value ?? "") - .replaceAll("&", "&") - .replaceAll("<", "<") - .replaceAll(">", ">") - .replaceAll('"', """) - .replaceAll("'", "'") -} - -function columnName(index) { - let name = "" - let number = index + 1 - - while (number > 0) { - const modulo = (number - 1) % 26 - name = String.fromCharCode(65 + modulo) + name - number = Math.floor((number - modulo) / 26) - } - - return name -} - -function formatCellValue(value) { - if (value === null || value === undefined) { - return "" - } - - if (value instanceof Date) { - return value.toISOString().replace("T", " ").slice(0, 19) - } - - return String(value) -} - -function buildSheetXml(rows) { - const allRows = [columns.map(([, label]) => label), ...rows.map((row) => columns.map(([key]) => formatCellValue(row[key])))] - const sheetRows = allRows - .map((row, rowIndex) => { - const rowNumber = rowIndex + 1 - const cells = row - .map((value, columnIndex) => { - const reference = `${columnName(columnIndex)}${rowNumber}` - return `${escapeXml(value)}` - }) - .join("") - - return `${cells}` - }) - .join("") - - const lastColumn = columnName(columns.length - 1) - const lastRow = Math.max(allRows.length, 1) - - return ` - - - - - ${columns.map((_, index) => ``).join("")} - ${sheetRows} - -` -} - async function createXlsxBuffer(rows) { - const archive = archiver("zip", { zlib: { level: 9 } }) - const stream = new PassThrough() - const chunks = [] - - stream.on("data", (chunk) => chunks.push(chunk)) - - const completed = new Promise((resolve, reject) => { - stream.on("end", () => resolve(Buffer.concat(chunks))) - stream.on("error", reject) - archive.on("error", reject) + const workbook = new ExcelJS.Workbook() + workbook.creator = "wondif_vue" + workbook.lastModifiedBy = "wondif_vue" + workbook.created = new Date() + workbook.modified = new Date() + const worksheet = workbook.addWorksheet("Demandes", { + views: [{ state: "frozen", ySplit: 1 }], }) - - archive.pipe(stream) - archive.append(` - - - - - - - - -`, { name: "[Content_Types].xml" }) - archive.append(` - - - - -`, { name: "_rels/.rels" }) - archive.append(` - - -`, { name: "xl/workbook.xml" }) - archive.append(` - - - -`, { name: "xl/_rels/workbook.xml.rels" }) - archive.append(buildSheetXml(rows), { name: "xl/worksheets/sheet1.xml" }) - archive.append(` - - - - - - - -`, { name: "xl/styles.xml" }) - archive.append(` - - wondif_vue -`, { name: "docProps/app.xml" }) - archive.append(` - - Demandes projet lycée - wondif_vue - wondif_vue - ${new Date().toISOString()} - ${new Date().toISOString()} -`, { name: "docProps/core.xml" }) - - await archive.finalize() - return completed + const tableRows = rows.map((row) => + columns.map(([key]) => { + const value = row[key] + if (value === null || value === undefined) { + return "" + } + if (value instanceof Date) { + return value + } + return value + }) + ) + worksheet.addTable({ + name: "TableDemandesLycee", + ref: "A1", + headerRow: true, + totalsRow: false, + style: { + theme: "TableStyleMedium2", + showRowStripes: true, + }, + columns: columns.map(([, label]) => ({ + name: label, + filterButton: true, + })), + rows: tableRows, + }) + worksheet.columns.forEach((column) => { + column.width = 22 + }) + worksheet.getRow(1).font = { + bold: true, + } + return Buffer.from(await workbook.xlsx.writeBuffer()) } async function getRows(db, mode) {