From 5b8f007d3446db352e4b707a70df21ca8e99df6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Thu, 2 Oct 2025 15:25:29 +0200 Subject: [PATCH 01/46] feat: working on removing yarn --- .dockerignore | 1 - .github/workflows/release.yml | 20 +- .gitignore | 1 - .tool-versions | 2 +- .yarn/install-state.gz | Bin 568619 -> 0 bytes .yarnrc.yml | 1 - CONTRIBUTING.md | 2 +- Makefile | 19 +- docker/Dockerfile | 9 +- docker/Dockerfile_browser_ext | 6 +- docker/Dockerfile_ci | 10 +- docker/Dockerfile_multiarch | 9 +- docker/Dockerfile_tauri | 8 +- package-lock.json | 6333 +++++++++++++++++++++ package.json | 26 +- playwright.config.ts | 2 +- scripts/build_browser_extensions.sh | 2 +- src-tauri/Cargo.lock | 1680 +++--- src-tauri/gen/schemas/acl-manifests.json | 2 +- src-tauri/gen/schemas/desktop-schema.json | 56 +- src-tauri/gen/schemas/linux-schema.json | 56 +- src-tauri/tauri.conf.json | 4 +- yarn.lock | 6025 -------------------- 23 files changed, 7444 insertions(+), 6830 deletions(-) delete mode 100644 .yarn/install-state.gz delete mode 100644 .yarnrc.yml create mode 100644 package-lock.json delete mode 100644 yarn.lock diff --git a/.dockerignore b/.dockerignore index 6a29958d..cae58bfa 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,7 +11,6 @@ # Tool logs npm-debug.log -yarn-*.log # Tests /test-results/ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2242dca6..d07cce0f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,20 +33,17 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '22.5.1' + node-version: '22.20.0' if: matrix.platform == 'windows-latest' - - run: corepack enable - if: matrix.platform == 'windows-latest' - - - run: yarn + - run: npm install if: matrix.platform == 'windows-latest' - run: rustup toolchain install stable if: matrix.platform == 'windows-latest' - name: windows > build - run: yarn tauri:build + run: npm run tauri:build if: matrix.platform == 'windows-latest' - name: windows > upload artifacts @@ -80,13 +77,10 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '22.5.1' - if: matrix.platform == 'macos-latest' - - - run: corepack enable + node-version: '22.20.0' if: matrix.platform == 'macos-latest' - - run: yarn + - run: npm install if: matrix.platform == 'macos-latest' - run: rustup toolchain install stable @@ -101,7 +95,7 @@ jobs: #### build mac arm - name: mac aaarch64 > build - run: yarn tauri:build --target aarch64-apple-darwin + run: npm run tauri:build --target aarch64-apple-darwin if: matrix.platform == 'macos-latest' - name: mac aaarch64 > rename artifacts @@ -123,7 +117,7 @@ jobs: #### build mac x86_64 - name: mac x86_64 > build - run: yarn tauri:build --target x86_64-apple-darwin + run: npm run tauri:build --target x86_64-apple-darwin if: matrix.platform == 'macos-latest' - name: mac x86_64 > rename artifacts diff --git a/.gitignore b/.gitignore index 6a29958d..cae58bfa 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,6 @@ # Tool logs npm-debug.log -yarn-*.log # Tests /test-results/ diff --git a/.tool-versions b/.tool-versions index eccc3d65..c42ad90f 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -nodejs 22.5.1 \ No newline at end of file +nodejs 22.20.0 \ No newline at end of file diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz deleted file mode 100644 index 78f2f574c65c37233bdff7669aab992390e8cc32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568619 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≤IMXC= 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
9%m_2F_;46t~+tf9m)Yxi%xrjaZqw~l-l^m*Y zp_~M+p)FUkAcfcmTaR6>INUmw(sO&7aa^({efy zb6%7drCK{gZ%bnq-@xl>O&2E1?Kot+$v1OiShoyz=^We^f|21<$;nhw+x{~40Fwxv zi|?0jKZw`6Av`Vg_&Q)c){>PD)G3djLtjx(t#VjT&~w5)NHMfqsohiuzzN8G4c2B& zHaJ_szBA%eST<;Hce3Lxb%U0!ZlVqw{%T+vXa4WCAWomH0piq4HyZy6FrrKYTqos0VcAu-ouujXlbxrB`vnf40(Ti_)5H>nZuN9!oiC6O_pg;~DEA z2)^a6RmFM%5yu8mHyUiiK3=DtG4|0+9%4mr5aw5%C?nqnpFufN8T}oI7E1gpl$khrkiH$xkqs^|hL1r!P4K3YS) z^8>ay!Q!9IDM}M9_!dZQxL!g77{|`d2edR=4=PD+Xp>CU8Eeszian6gfXIJbUE*N| zM`4sGuFG!a}J{D&Ney9CtP=*^2%jOAONRW=kOc{wv%b_qXx^Gcm`D} znbs?!`(tnvXf*(~AJlA0O?)duf4YfW$G*SbO2#Kn5>q{#4v?ft&xL!p5&Y{s?s^4Sz8OH+lw^-Qu+WBF^AEgfF4x#*#z?%x<0w* z8HTQPfS$3A=SNee_G_^rp~x)@lsd_p5!&+6^xjHKl%sx~i(9w*j5^_+tQitu&O36c zSx&|Ha`cOyp;{wsV@;=$kXRE@ReQtXa#dENID>f{1M3LlU~P`67$BEmTgWD%&xpBK zX}kmG1*|}qkS+mjLF|5JhySnT^|cDKZQ%84W0eE;d=xan9H{`}*ko69nUu9LWR?r^ zm^e~1uVrL}6idj^v$FOd7tHnTtr%^pjutmAclykgH`OYK1}5K&M#017EQZ<}cLL)T zyvp4#hus5vauECG`am#tNHrMM+)7@g7Y*X2FN~uv(J*1FfOKS%Af+-#p+s_u=+pil z+&LMllTYI?0233IkUG|!t3Be-1S*+=-^U)( zV}6|Y24HcE%Il~7{a}t_5C3l?vs@3XJRp)m%y(fUr=GnEi;U6Ua@hnT`SXpYo7BSX z|DG8y9nQLM1&crEL&4*RC0;c-@i?sMKMLlMx}#tvf<#`aR@FjB`mrfWc_BdtI;o3` z!C8+Fgty9c?gCvnR6pxB&iflYP*8_BV8ckkbgGAK&tbY_Xi1tKwCPEmg!p84C3p4W zolEQiRIhXKf>VAxgu1HIP(+5fuf*P-{ zCJ66qo}ev1gj8~X!YUQbXm?YSxtzU6!DnIZoOU|j9H{#w85a{2_L?v{=VZVN>iiXT zH+fx}L^Ydem6y?NQ<5I7zRtQ~>ss;cDRG2z)Tp_YT{Vf{ZB?M|g6vT1q)u#S-@M}; zHCr&7H^mAmJ~@9Y5$cZBj^imOR+83@cI%Z@fs8Qw1>)0p;Yj7+Klm(w4_SMUK!UsP zM#M;Mt+BAgzC2V<+)IRSC;#9W$IjL0%pj4fVPUg@~~mwSi#fcXHbr=QfEneyI%*)@RVWXKH=buOtp?``@c_3d+RNkt~~zGYo@xyJg`8w`?$g66XD zx~;DCjU2bb*ol7k$inF>%*fBM+9o}Y)#jk}jMV&Po zAXFmZ(4-F?jCXAnLiEI^M~^kqA5pc1qDz1gcsW*1c7Op!6@%&F15%1XfE+snLei>|r-?$_AxO>+AGvYIqt6?X@cvk^Z z$pjS#ZNqXMF?q&87a;z{T?u4q+rX;ZMM<+-eMZGcqiRFRLwIFgu=xWZl-{`%6n;6@ z7%k*6kdLDaMBuh%?sS{=v3e1C_kl%E!d`5Wk3tLjp(y7czYD^n@ZPJhlPDS>F84i& z;+&_TuL_5)Kpo4i;DtRX`#eo2+{YYfhXf*NB6k)+hveeFFj!1OS6_qi;F!2j`77{V z3_kR48?%wx_MEgoixfz@Z(Qn+3=$v>R&0fX?TFXaLX>qff=|%hmH!Em!$_vGYGP(E zdrXmN$n1F$!iF(wadf9L^|^Sv*(5$lo98{I4ChwPziDA;%6U&Tl94usJEcw*-9BTz z0qfyZj)K>=r+T6@e;;eLM0peGxC1i!fokHXT<~5&k}LC$VAY;7ZPjkf83asKsciWW z>ugG`kiW9oU3klabB9@XUO%ko8QCzGTMv%S;ZZ$Up~I}lqDeS1?mlgu;IYk@bq*G- z`BP{&U``P_1?{iUubFJf;MWVNsMr2LFpd3^B+Cn@N7q}|qw4R-=ornb@djF*i%zY| z6f#D8?2!8Mbr2`9xu}<}BA>0DR~csi@MCu?L=dD}wWBom;}+rd_Yl?q=>d2rgr3VL zda8B#80cm8jTn`PD+O6zs%)H!Fsv6GIf*_=ME9o8$cw#F-bZiG$_wD_5Gc`hoMO zdIfa%;}AbNp>nsO6_b75d&@#4E;eDYu-h1%z~;J5iPhjRzPQw-<0a^vp&9ZO7=m!i zS*rmvJR0i(4@1w%7J0A6`EFp!p+(y4g zXu;uJ8(fDZ%W33YGTt@w1WjU1 z2=~9hU{sJz5ceu?8@{?-IY3=}8(-Eb0znk(!>ipb8XuE1PZ(R#RMs0|KsHJVI ze3n?HwXPhtNL7}+U+C8osjzME2R-VRDveG=xx1ZFHgni0I3^YLGjA(*bdQdjlp@!x zvUez9)ySZFTo$9^ac-b)3w*6PCX5bRnH7H04F_=DN`WY{SmZq(*l+!0K`_FMuheET{7 zL}CS5FSCSaC%<3;4Z%11Ffa6|o z8&e1U50ZwS5e^_C^90)aR2mG5mQh4wQ4E_}ymW_7( z#_zT6z$G}S;BgyVqDC^su)tRo6npRj$+KPEmF67e-Q@+6yYC^-ge(buJ6x5~>md<7 zFAb(|Z4T#&FXqNckl0c@eLesIV+2rjdlgW-bf7v;%7HMK6=*}LDJE$f2hi1fIeuGA zPTxVJsFaO`ye6ohCe5;8U}&GHg79>FOBxA<(yxsur|}QvIZ!W1>^D}AmL-^m2Er)J zh!i^QBp?Ig&m7N#(tq1s+{)=Nw4uxnfLW{o+P$yC(KYgsDi+2TGe3^4Q=!E4OM#bQ zab@Vk-I}~dkxtgRtB~;seguqFBfvj`t96=WRO~7$OV4QWcvd%M;YMEEY4Eg8q2sg~ zb3GQQuk3x&H^p;;e19Qg7#!)9Dk`E&bKsV^>xqwybyp96rK;CP?{}NAQ}4nm3lbfl zu*z(!+?{dJDt=a1D1Mc35i@Fv+2c{`07H@Q2q$_S1z0Q1dT{KyW881_jnu(0Py_9$ zT8zhe0nUKtv0(A`ZTw&(9qD~ysHCRk#ZaFml0C z9cVSgKdhd%XOa_IaFASrBzYd5iJc`1{EN2OBALzvVN}p$bSc8=w<+s;YjxEk?Cy$k zEuC@V%s}DMw?|p;_DA1V(awP?$$9B1jg>2=H9E?i8tOTH%+Vui-=}i-SM+90jmRJG zh)e32rL?d3$Tac>Q%-wsy%L4y*TRvAXIOh3$PekMhc&3x@w}j^n>zQIv7Lm5bHhBs zrI3g==7?ABjmidxo*kzGD&7e{u+|IM`9QXNiEvx*gSqagXTDQ=*Znx*x2wyV=5a<* z6@vVhATUvKsm4lTgUNbr_mqwyG#T!I9XtuV1yQ_G-Tb5@aRpHn;YEsg|2d6pZL`dZ=j`A-kuZ;ug`1OJU8ug zv5vWDFg$ZvXgxXyA4vKqy7sXzZX0CKgELY6wlWZFijXyVMC($@{5DPjWr%;$l2Hcz zH{>5M4H-=bf(2#}gUsJyaD8zQubEJh>o}8*dpv1(*0ZjZp4;OZ&5-x73(cE#ZANI@ z$ef~M%8NRzHWb7&eWb)I82B|TA{3Wcl2apb^0fRFh-_tL>@^-rca+qrE-V{tT+bTH zLy4p(Kf3cCVv?fYqp1;=c&s|e4YdQQpU_%OC7!U;wBAUJb#z{O4GX*bqYtU4X=~%* zdU=<5L)Gu$=R*^=a`(WB4VMbHjx!jma762P^P9x`fW^ccSKB_-4*E)^2za$&!IDT* zvX(oS;V0nt!>h9M^k9H9HZDmpKlE((9jghoQUIUII8K`Mha}5}YncGYAxRBx3{G>% z+iT~GsJ4s8f=tk6a^vr&t5iB0RB!9xy=lcSPW4SfoDtiUz7D0zIk76R$OJPIj_e%T zqCJ6MW&lW8 zIM9u?Iis+x#{rL}{jg&J;95ycjn$z`LH{)Ji?d8@0#lwF0B}tkA5<8uzs{wvlPO$; z*|d<)+0BglaU;VPgJ6>|yz?k*MOPBl28EG=&yrhWi=yfXCBkM$@k&%(OF!>UJ{Ape z1A%A3dCxau)uqBx0?p5o_eiYn+9n^~N)Fr%y~XjmA7|xD{EdF{ILx$+Lm&=E%%<+< z!i_ONChdYo7znE&HWXq{4`SxPA$ecB@*Q96wApAx^Df_wGtH~!vmcH-0}(kUaorUP zg>EbXx>dR68hp~V3y=MY(3t_E=W6(}IV-r++Fpq5yumZSmq;=Gtx~V#%i3gwKXn+U z9sI@XZDo2)+bhi{a3*QD!0c>`N3Zo1n)2|V3s^EwuR-t_f-gZph>i2%od#~dCwVpU zqwd!w?SXyS=rex`vN^t&ppfadq{H!MRGO6`uOn~VT#p+gY~H2dOCsB^65LmLncqu8 zZgnufty2YA4k6=hJFc|+g56JcU5O8AXT@_mM@z;|y1fiGo( zE@i?XeZkVedF#$2N{Y5Z-RkWa5Fz2;i#KfH(;>0UAH^z@Dd^K-`vIq7Hvv8-zm(kE zFQSpI>Z#L4^a9isIYFVc*9dlQvjz@24h4hx*jvb?L@?K;Eo9HN>nfL(i5%zEb(8}U z1}g(zt$Mw$1EOnnHkBDFB0gezsTB<9i7ZQSG*b^RL|mufbm32=eB62WV8epWd~mDm zJs_jYI?JGljKkk^FCK<$w7iH0WIy=lw-~y>UmP+wm zYUgTD-sz<&80XY5zEYBuTndVVk!eko+_kg5wV5_n&O$q9aV+y?^+xYw?&6gM_bRWa z&-#R6T*OEK!UN%EVL6N+9@-k{( zf)S3W#4e1)?3}bo3Ti@OO4c$7E@_j#Cd@GBzKiO^lb68)H!o&hC(wAwYNG=Wo-wgwNSR@ej^nbW+QlX_XPVD~{3j zT%YioPO`Kv+_|hqbNB^48eZ=L!G#I{_M=9=zhW(_rBibPJUkyd8q3dOY;M3B{Z_2t z7ts8!@blil1Wq4Q)3ci4jLVC}@u)}rMNM%;oq7}|*mI{=vb^K9;}v>ifD{7tnBWsJ zx3M_EI9?3E_}U^xg{V5O0!+lTN7Rb31Nt4W&T>0(rcniG!^4vUlLdRT$1a2FR9k%K zc^Q`1mpgf7p<3f7<>Y@|o`_9Hc_?w8RQM7KxX=fF%czD&ZXb~7w-yjcJ4ZGR3s?LZY)hZI>n18 zP&pQYS<-^N=B4zTMe&dVRgvvo@mA+LugJr=(7Vnd$dZZnb|r{`_)!YrE^~y_GTxe( z*J>9mwtx=~cFg52w$JBwbm{e0Ukdfq(cHO4j{<%DT)^v(^&qXp8MUw9s&v$$i@l5o z@R?OhMh4kuJ1>7;dz)p>-e3FDSqlk^d(q^^+KYCW8&xdp>|xA)t@hbpS?JG*g(BGN zl%2CkJ9=2D<0<=DE=5ELL%vg;MIm7<>uasTg$o{;MBNH7!AY zbPsEgK+b@u+y~tA=rG~-ZnQ+fBwiKsFrBq83%l|VrYl4{83AP*rBQ4R5I^UhFQSnc zUuQuVwdmrMN2mH|_yOy)mXK1xKO|1^=Rm5yvyHmJ>1>QfSo!FFy1mYzDuCq_yiYO} zv%s}m?}~~mVlm{eM!Hki>!C9iD6bPKu<6?7Hpa`P4O4(r>x?OR2S!tZh~R>#kPJ|pFJr$uU0JEaBHPbJR< zC0yRKP`8_!Qa|Q=U83DY6YL!t)iS6o53WIE>=HQ8TXeT6JZw zYu?iq4+BCrdrFGmZkq?XLXy1gcmO67gU%gvdXOYQBby789$6%#evc>;aTmsaE!?ZD zb{dvKMzW6VWg3haz?!}bnCiazO2s?w3=f0D`e_X?wXfF>!GO>BvTKrA^i)_~idl@W zVFjCjq{h~0c^A9$bkg(8wV2KiSr0TRK2e>+e%JCBM@^sVE+ z@`KjMS!}bhr0zXiPp*immXA+Y4Z;`L;;{*#>U8WhY20-9Ik2NRjnYj_P0<0wE`F+{ zu$Vp}aSFG9>v^=FXC!$ks!zR+z4ou;<_itw05AZ%fuL9HSS(xYh228qnEiRf^RoyI=1Zle;jfybl7-Uf}b_1Ku!%ApIp0 z@*ejW`yb(bpE(gi7Ci|z4?I5}g5CkJ?K^1z*}ABnD+xUzl&T_zVa+X|4J4$}b3$NB zS1G{T3tu#V;p zuokWhZ_v&uA#Lms=^3EV&^s2yR_ZFyd0Vn@VsIWw)`W<4p7X;JJYkb3qieFm?~#eUScJNb^u@Sb#W zzhkJiGLO;6^PUCxR*jyXDt46WmfZ@D47IP`1<&P|usdLNZ4Hbz{Sxk%UHCeSz&5)?e_5G6?m);2HzLx~O$TZ{9LeIy z8UdwEk-+Sn9>C8yo9OQug;N^`5+ytC!XG@TgF{TIcTf*#H;8%=#+KejcEk8y-$J-N z-Es8S)d=q^Z1W|8k#qt#GN`mD?FUXHDl@!cYt;5i8H-U_ds3&8CYmu8BH&nsma)Qh z5E@to#WJO!{tp0(*y7hBRr+Z8)GqP;a@+>E1HHA_vZg?nruLK@E;Nm9?ErJJ2a|b` zfKA_}78)+GxQ)GEN~T-jK%(5Rli`H?l6jh{IfFt@0w%;TXFhUo-d^?8d{y;x+(eb-y%5y1#Oe*P z;~e7Ix8m5Vr?I;*Dkm#EoNy|R8tnm_mwwEVNRiFy`mREzlct_SIPT!Ahyp=n(Bd(O zFjr0_*ogQoM7Y8-vJ7OnmV~jv39`7VLh;jOH556y?Q5)u{-Y z274lc5)~gMIv^Uth00~T2r+JA-h^E09+H>TO1v1~<^@Xqa;vh|#&vUOyN(KVZ>lBJ zVc9H{p(GM;?7S(i=3$QLFHDchq&eMak(~{AL{A|z-+H4ZZ@mmshd(xw)30nGe!Q9v z*p^jqe=uP3f%BMC{=2c`DG3EIjhA<|Rv>8b1lW)SVUc8Y0{LOEGh(drb697xen*I| zCug!uWTE-k-lJ0$0d%Upe#*v`Tw)4%eDi~~wR)#ldEJR7O1Z?uNj)@R^SjVIMyp&U zl8Osb4s58q*V|V}mK}&0(V4BY!Iq7|6UWlMe~AvCs=hjlj7? zN>_h{p4tySX(3dDjRLuQcP^-4KvxsCJEvt)V4Fu*3%h(3=|zPx$YOx(DPtKCpw5l; zS93&n?9JB41;m4;(r*ijrR$|H59&4%$$*E#b3-znDE%s87~P1Y>7JKrt=SjhC~Xm_ z4H-C1sK1!&Vz!4#+I*j~X2-6!{gDm#!Ok~5nWUj>uH17xAOcWV0*Fg)xU{nqu4gQv z$i$6>dD4uBEf7q-zw&FbwhL)Yi=*yq&3N6N1E zsi0UWa}m&?LrxY4c3E|Inu4IY@e@nUMxIRfnz|?A>o~1M zUN}%2GVprEU)=4ep_$SeEqT`R;o5lbz>qA^$848DV=q~wp*d;hcs{ck&oqZF8 zLMh`qB7<-~p(iKBN}W&{in00mu6Vi<^H|h^X%-nV2Gmm4%#9w`PWfSnX(Qm zAFLiRhzxmK^Vzr#h|t6J6}untcSt3bYIB({Ye;J;N#O1Vu6$6c3+iwM2kCn+Xd?u* z=H7#PXLu6hjtAPwNWlybhi28|oa;tr6TJ#F3-#%Tr8THk@KG>V&M|?oHGB8sw4qT3 z1Q3VFBIN+9zM}Dh^2W2UY_h*3ZH0l9UmNX#)u6B@rX zf3c&vNu|lueVU&p!k?C>qxuOOlMVag13~?)SbO&y+)%gJ7RO$jhVE%pn(+q~h|So% zNMtD(%P^q1dajN&M8ctL=%ClY=tANTZ9hAf0&IEpUdGjeUK8na&^x4 zE#2)V1`N`-tr*nWo@h{0f(ceA-^$en^32GcVKO`G-fidAt8*TW#dq{hwgrzxNglCx zm7^-sIS@>tZc(&N^Wd(S7%HMc-U}i6F{fSlh~Omdl=TX>o1F|)@Mdds!9!h3i`{A}+7Tcf& z#_gsLt zpwQ(G7Q?K@QTbmD|=XUb2%bajpd_wFXuO+{xG^;$E7)m1ej?yXR?u zgkGCn=Z*2Z)-q9I+T5U^=npA{Zwd8tx^dX+n10C5??a9G2A2i}<27A$zMyni4ni8L zrq9(ZI~O!DMX{(fT!1t#y)J3~c5CD@`ZJQyee;m0_XP?I{EIqsR1Wu^G|&-RpwWo| z^&nm0vghXH#?VCzLZ2X!qK`P7i@X|1bG*7$*y2;q;mdKyMNPdJkj82AeIp!TanB&x zidxR2Gn7#uGb5>aQa-yj!0sG+tH1z;AYT#j*hb*U2=~{py>NHd?E~W>c<<_C-DuD} z9I9TjKWXnMvuCHl6bN?<3xO=s)XS18RUq|jNzv3!MQ(z*Nr1UROp3w!0Qqa zk+$vO@ZFufrcpBjI-A~CPHgFu$_@NQ&gEVnjQLjaRoL!d+OjD>rYmB?D>t5Jc3i6P zPHK4u%0M-h?IgCG|5)y+QzuD%TBSQ>)7T9UomRFp=yr94b7#z=bkH0j?7lB01ybcD zdvi^4G{mM-y7ohpSR>K$?(j~J=qYV>vi`K;5sB-EHL;Ep{S>D~G^ip&T~7Q+RO(_` zSIT=>X52nKPONc-=CkxP9+vUycBkZg!AZw2XiSjj@xgJObzq|49?Nd* zF?ZX?_bc@z<3PDco(bnliD>^Mj>Y+MXojQswD`P(OE1hFs`khtQUXHCcm$=FbIJ;G zbFTzWHe3Hr^BfD&wtqnaG(Il$$oA zJlSQvGJPIE{A6E!T34_VtI+5W3{$T^vEE5dE)axX&2ta5za(Glvw%>5Vg^aJolZ4y zX{Empg2Su;cUQVPEBlgj5UpcWOjH2*%iJiP_)vFi_tDy_&{9I1&jhcvNu;pgw|9!t zTrkYYd(C+>bQ*=f(HgnbR~`f2zQ4|ZN1t-GQ=19y7NeT8^|B~CTvtswy^IJ%?S2>E z8Gy=U8y)lQ1C^Y0qTjW9@td8ityPO&SJ!ErAS_DAt3cC?SJE_tsRyox^)Oi>Fpy>U}2Tb$T_L#8?YDbuG2J>$;%hX@!21m$Lx_NH*U}q}FAt zk40uRX)F}lBsR>6S>tH!a{XE{1X6HX5%fXTr@y(HjyL2zSV)R{DV{ML`%9Jy>7s&2ol4?6j@d zPss=0ed5P#Lb=MokIz6WxhIW>OeZ!Hk{Q3y=y=X(Bo+p3`0fmUyFjCsD0j<)IlE4y zjS2ykIt)pvoB7P+Ogo68(cTcxf{=2D`YJVrb@b)k#&23%KWi*fb9ejR3>#=g+#*1@ z^R_SKuapv(_kd?v3sXHI$liWT?PPPQ#~)xyF(i zGo7&Db9B+N!xD@tKV*AeMoQ!!AJfG8C7Xy_oWm`@_u31KeyKAj&i(s)FC6?Gbvi8z zN7gwZHIlLBtXkLJI*iL}=@?!%&O~Z7252QR6&|p-+5=<`44D*y1>xfrwqIO{m%@%o zycfq7xfv)#{`ii*_d4Ec&O$49%P0HbZw9#1XcB7r&OOi+EX89Z!^QJTSM+mSuCF8* z^hO~`ra~K>HhRJDeE_zGVcd|BXe-Pt#G=I>-;tK_IR3z3qy#3N%ZFva&PU5KI(Q+H zK=wet-JpVNu-cJBapM%cb$aFCRU|ssNdz^d8xuq^>aDqAVBel-dbIoPqc34hFF5}G znDxe#to-*fDpfY5^lB}2YRpqX7##k1d~I3J$y!a35($o+VE>v*BWVCuQHImjU%4ab z2H1Y%#IBEXwa)ZDx3;G>wYQukLdr56DiiWX640rymDJb-z&HmuwC8j8_uU_G;c%l~ zkc4!{BWcl0rFQ9IFR!?ZE{I$pWupVWf3`+nZQZfwTZynlIWLHk4lE@nz_BxEw8^@R zP_HVjT!0m6K0d#FZoF#uw-uw(yyN@YSU)aOm5gguDs7{;8Vp>*)rY1^i52${29;N@ zj^jYFn;f(D(0g+~wl#GQ#JY3>>cUbl_A3`!!P1vjB<=(n+BZb|K&$38b9{vzMo@^s zz&Z1<)7%X`G^I62(LJt}IKTHoN`gSUEHz=#Rm>{W(FE)O-aVC$L=#fv3a+B#11^i4 zOPQyw-_5!cBC4=b2hd9N_(ll zXfX0n@N&NbLi{nx4hJ?D-MTVOf(XlMLR`41vzi|;XL_sm@xrD1;91~UH#ePqZ)ny{ zy1{yCu`s(i2{Lm9FDE#zpp#!Qf~l&Id)h3+S2dech*jj=phsUx4QOaJ;!+j6H&^oP zv>5Fc^#uA6e}t@7`GS_ZdC+ju3=odQHwj*xmItwu)>9ZCwv2a6*%t!Q81xX!L2$*%F>B@%QC((b=wYZU!c;3h%buP?s?;`5pFm&$$$V|9ep) z%Gjke8kJlmqm;7F7jjO1lMtPIQgbyPd=)x1Jy<1rlLQ|Or5dOh#ZM-7ckRf*tCvA( z4=}r5ZM9P>vQ#+u!G!l2({j=W#ga+M7WN2FtiAFkXsTNLwC&HV=NQ~l2mqpX&TRBj z3@3&%Mn7HGfZ(}6*~2-9kwSX{r4U!()c6c@Fcj$wI`q%yh{>@k?hG~jyfH26LqH%v z;>bDlc`cht{8Vn8n2~y)uip_L(Rz#7X;EsWq4+MArlVtDPcMbK*%t5R4{w}MqlXho zUdgp=`g3TtwmYH`*r>Qq;@~$wbg<@DD$6T=+Vd=TS@y*}3ymBQ6VIu!b8NZc>QR+7 z2UIwkw%TRkRXY@Xcanvrz-5^Zg=((VAaD&**~q5s58@ZmXt)+7vkcrh1dY$xTQ+9< zfh`$e4+Wqw9-oCJCvFAYK5fsV?HM(ZilK9tqETnM2{H9hu_$vNjBSRmsU&EbvCxSN zrpc!-Sf2!)ZXN463tHeUyVRZzobo&(17&Z*di3(vX5qhqjoJysNQ&hu_2V$ zQ^YtHhMHVn#^vd91dU%$PqaGv^r;Y*Sb#gap9K^rGs4M<}s7iTC$>S>}4O3m8Ltou`p|WM%pY?>LvzpG?LDGL2jWy>V*^R6y+>ySPkf~>19j>QpD(gQL6A9BA@b`(j78z#G&0`)8IKci^qqBmehPgkMioBDU?OA zbeXNr!wcfHd)<=!6W!OPXSmXVR+je~HlkKr`7Zf(I)tFI`kJe41rM~Xcg8DvL2IT8 z&8?VQ2>SWCJ$IR}{w!7WTEn+#d%rH({lJNbF_1_WE(EI-nBQWSbRLDzMF&6$&C)vk zM;+0zMqoZ;5$R1gH6x0eP-%`Vmu^Oyec52O=yZ0za!A-Wr8~eSlaYk51Qbi7s=D;U zKzN=Kov#Pz*zVwOq$4zML(L(ipCp&LV<)}J^Vp%_xcbU5Gc*VEM!sc0^90fkEkdu( zq;cNibe>n9^>SgWiE>!urzY^E$|Z%?-!}XZN@>Pxigva+`xc|sdTgOW5#Gn72%efI z47^>v()|he5CZAkRDRIZc+L}gOsT&$DZML2#?WlN14N>-;Rfj7sjORjy!O4r$b@yf z(V`yv488bc@Q==2D?x#0tpWv4OqsiXJ;l$?vemOHlgxzBKbR_5hez!F9P=O^;e{>I1dU*0dwyGN4xDzl zf!YIS!Dk@?iD>3R()MDhBcG_V)qzk28@+qAg0mC8+r&B3+LX#fKFri;Z)J!xcj~9$u7~B0)XDvxIZpShn1>zvhf7} z7I>;=tDP>VfrkLFHc6ER5Ni;Fe$d7>FO@ujaXN;yX~dSJ)lK{e1P?jP+5^lPtQa(s zA;~J|=r+m+Sc&ZB1_D`5c-xP{+uXHa01(?!uFxu4t_cSqA%eb7r%i)MUKfeWT=t_m3yP+<8VAuM#YhA~OV}xNG0xCWB8tc5rk-U7| zUxh2m$<5+>qk@x4-`PfBjFd+?WJ4 zbtJDP;Edg)Q!TV=_GVJKqaIpf$;lfIMAS|;s(8IixH)y`^R=!ym%wn5jo9v!QUjT^ zQBs0J^(#Ks!%?2O)E{Y2fVTtB*n?)>w0PjYnfee?$wh%0x8=ej27qb>I-fKdp1VL( z1VMeZZ4bxDb$J9h_D!=RZ8NXyzlVL{%J3Z3I4x^(p9M*$y@hP!&MlhPC22OSjzjjzp(? z=hxV?hq7et%veU_RQ1|{X8OLsD2JEzPV; zF6?@m3;Bam7#LX4zqphhVWc~(d}Kxu1mw?Rxe9uyT`Ca1V?V~6{+&xmq}rsWg4LodDYG} z;1cKro4@FYnYTHx3vMzC1a_;B1Tz8Azo2C*4#rN3J&{G_4ML2pFqL#DTHjXVykHq~ zUG|vwY)I_c^C-x4picH(EN8Ymx4mec}2J(qA03GzBkVx5#mEu?}>0IkV+JhHM1_0Z!&@T6Q-JExMD~ zeLoNa$3P|j+xgW21?>xWm|1P1Utq1QM9vkRl~zHyRbi3Lg21y_7_H-U^yz}jO&lu? zf^f_V7vr=!L0l{fXTghg#ykAd@Xxs9Mc?(wFC^WaSU*(+&l0CfZxYDEj;l{PpM^Av zL$IPWKV?f25GWktXS49R1_7)f8ozi>c0QCNIOK2>qXZ1k(}@R^$&~M9Pm@1J624O0 ze4!=r;q}WZrPrw=4-J%b_R6-PHU=7A)1Z-I(o1c7$`xGQ(}NB2u!8A~%{iySp-pL& z6S$8#aGcf2c|3>GWt1Jy_O(_BO@GnI18&6G-4;Db6%?(|%0l99`8#KWGJ)E1S?gAA zJ%Pi~eVk%FW0)2_a4EWuO~nuKAYfIkh!&!LwV-osL+y?FmR48+C}mIzHTsKR?VB$v zPEm#&7N*rV(!GEaBDA{8%oP{Uci|rQzGtyOXLrz7m1=M1&zO;Ow_M#zr_xcaUHyWuSdfdooc~E$*TC?a(!b_RKc^BATEoZG>J0EM^$+ zbx5a>#VX4Hz)TNLML#qagvHx{UbyVkRSc6YZmVFC=hAvRR9=I)_h>0g_JHfy$KI4! z6>4_$A&R=xvAg6oAf zRcw`)&AnD$`g!fq^ac1O`@>mEjnivVT}*Qal33Sy7Hck|-9A^xNY`kUEwgmcD-*vI zms56T@}}v1dT!$0OH0z?Wt7WZrK4}8(YN=Do1zwX%BV^xbOdYES!KZ#V6cSSqD*xr z(E-h2WJma{?D5E8{mfOyC0~Exq;sozLD{*~8+dCQbW~q5g&eaTz6ZE zs!=&Qs{NYVXof`sB+I)3y}AKG)g*Ci3nj4-Par1YFAo=kOl}0-ZgGg&4kH`T>K>)i zmo+6E5|~N@;=LF~xPQ;{ znDd9!8NE9S`KRibd$rdk$SZ~4e&am8>@bF$IKxV{XYW`Iqr(b8`g+9WAxc)|Zm0I5 zmB#{}X}fGx$qvt|^D0IL5g?qmyGr58@4SmIvHI|!>vP`P?PlT##^W4?7Osn91DWmN zDN0*+;?6LZs5s8*d1D?kYCVPbAT3tDXwPFImW6v)t$Ogl4z!^d35tgN7;j&KpL^Y& z^A4*~>S2v@DykC)==-zM5~R?Lom z$i~J+QTk}c0t4XA7pK=NsECkda^N{&wRUTOmbHqrF#QgFR0N9NB8%}vliP$sSFjCm z{<3=_%FP$wzPh=z5S!N{{zz7KRm^Ur}*#`AD-gFQ+#-e4^Q#oDLy>Kho|_v@D%^_-~RL; z;?MuO_Fry%F7?l){<+luZ!Y!EBK}##Ka2Qh5&taWpGEw$i2uJV;-5eJ^Jjnl?9ZS5 z`LjQN_UF(3{MnyB`ya%g{h6abbM$A9{>;&zIr=k4f9B}V9Q~Q2KXdfoYmWY$$)7X% zb0&YzIg>wU^5;zcoXMXv`Ew@!gE^BwTkvNK{@H^6>!1GpU;pI?ul~>f_1G;PXh z{n*Uun+l=k2u(etyn7}RBU`467+0}SR^{_vX{8j*bv*jk2IKHL&sEXKj*FvX$PzqA zy4B{G)ufb;z{LP8E9$tX4S4#xzSnVwOm|UIvklr!hib7jNGi2JiRJwaI@O5topVib}b{1v0 zE4MYrRXUkwgGLs1MowWBb0+ubP>RapRdTWKZ>=rU*sHI0Pw9QKH^cJ6dDVVHH5GWB zFCi+dP#ji6=d!jPV_}OUEGCNJSd4ww8bUAM-cm628UC1AtFhuWM8SHR*r?fF6_+6H zca}#pSE*(`jwccqOK}cQK6DD>hjeK|JKE&^n;zKLhEa*W{mi7u$8KB?y0tdCCN(z& z_mLsk-7|fxT`haf!Z~75r^j@z;7h%X(u7^v5fNG~em{ji&5zL3)cQ8tjq-Q;8AqHg zy#-33U#h<-FrxI4rVPzJtloKdD|d1)uA?Lu)!L_=qmtf&<8!ms3C-}4?;R`KxW2O-R#HgAYg7xa zY8JQGzQ%2LOk*=x`)%HBZ*HSv^xi!zX`z#$vBE9;M$6`ci`u>89HFIaVprKa@Rv*pF5V4AvhLvgWcYnD+A{HAdn-1n{m?P zfRnFVsqMMH<`s=n2F?hN3O5zEt2C!zXbkhKN~Xci*k@BNv8q%4GH9PFjxmyNml-8B z70<%aTDyvD%8um{f zF1nabG4pT5Wya(&;$Hd|i?RqD)GE3i)rLSBg*zDU1=WLykDOSev$?E+FTNsr0BSEg zx3;@Z)|*`PXRx|`>)m<0ouDUYp}tqzh3Yt7uMQhxqUR1g+p~36vUrX=p84Jy2K_zX z2Z1@Z6vafioABt;_J^Cu7(gVFXojB>`CN*)PVZN-ScJ4UJ5=lU}C{ zFfVJ+Ly434r8m@TYZG@{mU5rBq|7Zw3+R2#7N^`Nl}*tn-_~nf29{=bpL(`1I#TVm z)@00yjsdL4h%SgU?B;ksFZ_?K=DCT})KC)FJ!4#vR)^vdh~!zIbWH~4fm*YcK2NMU z4$oM!N^N~z#Y`|o_Yle2XsTS?N1ck&CLn&tvlvWjWNIwd>%-5jInf7)B|cVGzT^&bYu_Il1awil7!#G_A86YBFL`x#ys=+GxzWTRVAz**D#xJKNa1 zCrJYuw(7<)_}&{=R)3dmR8VgAH=4FX(tsYDtn|IG?d9pb(q(gVv37R9JsG@-QdJ2S z`@8mY8$k|Q?bJ!SM7viN_YFB`X)I--ruF0gfd z9Xeh5EnH<~*E;O5jSHqG*{AZCO>bqINyM0A&yBj?eu;e%?Kvp?cP%`lRWvW- zj=pXj*@Zh=bj5&?Yv1EN*4S5z&rv+(8IOi=t$RjmwSKhdBT zh6syX6*5&(G?OH_4t< z4z99FWsjYMRkh02a@Ckf7+~_ut$?0|PGG%3bl`NtKKFdJP#kwC)VutK7>9dKMx)vojSy{-BPU5ZGPxfOl@THTVm# z2UQOhc4VX#D(RBOmmnfx6>s!Ppx5=`~R(yvw_)Fef z2F`fw_Sw!ES8g39t2GNA*`$;>rJCQpqxav^`lU7^Mdro>OsnN7lyp*XUHqJ7$)|zY zxsNF{X6_cS5XVJM+}X%UpUooQoJwh5S7MHHcTObrN@S0~5iuekl~wI7%(SJH@+=Lj zjPzD_?NLh~w6d=JRZLcG^Pa<<;T+%e%Dyzi7;NYI*=uXe-44R-=wlyNf;|%l4qim; z5$!PhavqpQul*h#YxY-z*d32!I~T3~J!{8^XNK-<%6F> z_w!Qnv#e4CwPhOt<>}pWjL}{rZr^lf3m(XxTLqW77YlZIGIm$fxr!KhMk#?IliF9S zg)677x+7$Bn-2;D+}O-Gan7GF85^o_@o~OX?*5$B9(!X8!uu9;i6!BIg*%p!w3agO z+RJpx#WImMm=eiV($MasM?}3@e>$0Gf9!yHZzu*_Arh604RNA%zvBVDV{a zso0f6y^=eeeH?mkcd^(lFJUpf3ia&CZ1mEh{0K#MZv`emE=uF)yU>*!6MHA%D6g>y z7hvqSXN|T^JAK=`&RLkxUmdkI(n`!Zb2#F~82etXVr5`VWgAc_x0h!#>l3?n%+P^~ zWR++H|0bb%cabp&E}trjE7ewJN*n^d`f9;9@hZi7?O}lm zo{Mt~#XvIUj+H?u1G`nFqdu{@v)BgXizU#1jbxpD)N}-J-Ew*)`;}rV&RR(P6B+5K z=WzzWe%j2ZvW)K9-3hBsVd=pi!)7USP2M?VyxLVIzn;wB3}d|!Zju#o@5s5&UQmS} zhl0TK5wbNh@lsM!uf=wWEu}``okY%kr;$Fq^5~Td|02CG663 zZ>7qbAm5!?m-`090J=bByU)SPm|yN(^U0C&C?oy$R&(egxZlMSw}9bBIvjDmsLBhD z5C*@?kf!jd2j1#dNe$9yeiU1L<{?#0NC60jZ%GN9Ji4or6x5I{&E}@)(HB^-yHAT!Hkr#I9W$k#GSOzop59v5Ujkc58DMAMtO;KRePbx)z;ouIV03sU30=QUqvuu+T)rtIbj4{yH8;mUYEzN zogHhbzR$*8yz2JN63qLUJ!&T%Z%e#HiOz^qW?U6Mz{F=($BoSfS{-LcoR1vzk%K;R z&_@pX%4I)z(H|RLbXr-b!PRBjJm$O_CwiF{NV=yHO$k{RwQF-;40sS(K-b!_OOcBT zJzOPLH%!-(Wg@1BT{J9Lmlb=;*+KmMz~R_f4<|3^oeFWtVzc(GIJaht+SKQEOz>8m zH`#6Fi7ICcK{5oqy%NDK3IULYYsUHdj>X6>UaI8+vv7o5P(M~MRbjj}Uu}$ciRD>X zP3-J4avt2hW%5HiD&E<32ak7KUfbr4J(_wtUduDHyKQ8@P^$kzTV7np*T!;N@4}*) zw@VNe15s0V+b<{V<0TU2;#nXbqgVw;HyQauU09Mxh=+dTpbh4R>Fm`UY@)Z7d*hIj!ccm!WJKF3j0CNj%{%T<6d^W?6{A2MTEP@) zM4h7;NQ{Q<1~Z}eS?3s7W49*B^)ThI9%rD;$vm1bGK{d^c1c-9MjIXBv~0uCv`9o( z@~)%RmJMgpH2w!3UR&Gh(Oo9E*3zSgeS%u5=zYHu3SXQ_HtIiRWJt|I+~pUBE% z3Bi{5SRgSSEfk}A%dvD-CS4h_XXOYRkbrWQMqn<5>kqSI>2)+hunmrY$|Wbq0=7P7 zes!-P6NVD!=+y9c>7tDW9l=M#>$a4IVwXL-=UBZP$r=%Xy!XUB)U$V%y66 zVS896YnM^AP8TDA^=w=Wa&4Ov;t*+^dpmYS@*+FC#PgF9eAD6wAYA5cmm{gyQ&>=s zz`fYs%Dmj#7EqRL*GeVQmV5$;erlVKcd{Iq#!pqvz`2wywcl)ca-pnFe!)B2DM?uC zU~-(3Jc|XOs27Tq9%0tGN$wO4nWgC5cj9o+JlzLzzkSbD*WQ0u8FcyP3xmk9xBV8M zeXEas+Y=)MBl4PCW)$4qkW2FIo>;<6nVkec%vR1_>uPLN*xW_}w8b15GUpyCR(P{x zrIC`=?ea&cZR$WWA&QvgZrflg$Y=FuooorG27r^!M&_3wR%K_fnllvKkt4!!zcJ(7 zqkHEY+ZJKI;>N0? zRXC2NSXpJpIrAMrWsh<1g1NPlya2J%-TG?A3^ldZ0;?rO!BRPKt1Gjn8;~NXzSo4 zYy0{BDH~V_N7;v45cB5mjXP_PLP>AsC+1vV`4&Y1{KKI!yl)a3`xHqpQr~VW%nuTn zLBu)TjjHg@Dj4wKzO9)a@EPTAZUlB9uMU%g}fY?X3^)u6$Y)o|3q zLgLlT^MzD7s^E^Dqonmd5q9ol&6TZI~ zqs_dM-OR14S?4|3=0UJ26XCo0I?P$Pr_!S-DQKd8P*_%;op*QxnG=SkUA1hKN}tMW zW?w{!2QNx|{5Hp$93HcY65Ff-1}l&4LmUhBZNu}?z=BZIZ;LLYuU)s2sMcT;Jg5ti zIPN7*S6c!|E{Yv4A%p8qUkDg5^FrS;;DoG}*A)?oATXXMTp=l9>x7}U8TMsg$gaAJ z3ftbe19uK`pj8v8TrF=}pX=gF4Bj2xt&FHc=Ky@lJ8o*xrr`(V+>7D2aw-O+x)>yU z<;s)KFu{$lbDnWyc^>1K%Ykqe-sEVH#iPU_qO04bsf^N69n+P>qnQ}eU*{Ne#0CbUnVK$6Z<{`eK4_3hbyu}M>pVA#q{ouTbs`q)^V(+Ml zn-%KeZR8y1$=hbAv|Tg-5ZIEt2A89Z#ucl!n4Sku>cJw-eu&)sF4uBv^35N7G48>E zLMWj7SW!1vp#vk8JZ^kg;13J@VSzs^@P`Hdu)rS{_>YeTM!Ox5th`~s=Tw+O>>bL2 zr{%N}`E<;PNWI1zU@hTDZ|N0AEU!6Y7CdrUnI1q)z&uf(Emsk)NiWJ!INm%D6OqKr z)_!E-k4*f($;3fm2(g~kPbW6DYmzl1k{R!gUQ^|HW}n|CE~E>-4Q0Mv@J86i*C*qi zI2Ewxnssv_@m^31d<7;g^90HI5;vnvX<_e-s0ULSzGoS=#~iUR{5KRD)N(yUw4%l! z$XTW3z(_dCTn*uAS-od_J-1IO zx?GPA)Y`x^UrGnd+6l^o&s^3Zv2n4S&LZyY;8hNi`7MUPJT2W}^=#tZJ~^lx>=Urn zy*ZJXMp*J}_GLKLmAT-)GlBp0u5l5FXAlFjKo8J<*ZRBiXV( z4lAT2R(IxOJOlcu*vX0p_IFQE$g^d+S7fi|N#t3rTB~IZ=y;|lz zEVjv{ zUl0*q3`CnhF;K4|vNcXo_yIEcBBtYSR3TTioXC!0jy zEy_OW1nI<>5xpj{qW}>L0DHLbcO3v(bRoLUvB%0<(1^>r)-fzAdz5SyyQ1X_yr(OH zF7vx^L!X7v+{OznO*CsETu+vOJ@^?&%n*?+?_4u_c)zf+GKNZ@D4h9x!qraRRiZGx zr6_jP=1n?Yr_RM=yKmkLj8qYx_1H-z!whzzd3zjl@ym}8c1P64`h)249R`07vP*Q> zHMK5y6qWsvN1e7A`|$cSUSY8i!oBcp&Qmn`pkgev38tp@2#rP>?3^VpW6H3@Oupaq z)~+B%AaKAJ05Vwt+qPAkR{`8HUbpv+xg1zsT$=W0?qz#-od&mK%(C>XG zW%BhRBhrDHSU>IOJ%s{xxuuHuX$ObLB3v?DfuIc1Y%qGJRe_EEUmTp)tuj~8uh-<18^%ls7KD? zK(QG#oGUQM;CW7G4~-~ciO-W&`5(S`LdVuHyOa3tJFU-o|4gZB*X7<1oU9y79GnQj z%+%We2elSAYDyYDrNx~&$Vw21$!CEl$kpg>oTJKdI(Id7PCxaG$QFF{jrlAPnP1%OL$Y-m z+2gi+5|HDzzd}Oem&~-c-os(b*ie{iu<=$E%6qFO-WCMl_$=gHxYm}@lqPM>n{#lV zv49^;DQmOi22+*yoy1r#gZRc`qQ*hLaTPfE`1$||BBFEZvX*P`0`z0VuJvvydg1Du zP5*t>-UHn@qYN*D?EheVowpl5?WeS;xu_7R==oM}hhp2)fqCCC@kDevDH<=_9q_H;@jSW}P)lKWvuMIGW&z1)$4x2TCzk*8+B* zH(1!YU0&K2oNZUYHv{RGTZ)}lU#&UxEkCzaLfph6Pw+t9^L@!vil1}s3(g|?LN{SV zf(PPDr0rUbb!&ZdB)db3GB922?M~cLq%^D)+~$$U{3B39bU3@tC0#VwWtQh2?WoNi3u+~>Oy={N2$iI@U{$24Wt~$} z?(i5o2dUe)I|Jq=v19fP{hYgpY2LaOLOeo;J!(Jw^EYDDh7e#wR;24i4^lmG)jlU9 zdWgG0eq%A7oy@6&Dq4|LVmg8bP8O2$=jfM%?JDb7g=*n6&i!QPzNxp&mny{ob_$gB z7FFiBIQ+cFDl6>{ebADGrSkdWoQd@2WXxWW1af8+R(sT`v)4G>v)8#{e`k2GbDXv7 zfzC_Hr)C{qDZ?6_=@F!{E606o6nrBN9p>fN}=SvyKmxDmT2Ei9@wQg`y!B$q!H_I~C5I%&Bjl8do zA7%|H%C8^4(mfBZk%2#->R_$O!ZP4@RchYYOU@`%vAe_0Op*$pE7&=f_yC--N#U0$ zOfSkA7c0iaeYtPP&YnXm7sOKB7vP#&XB|*ZU2U-JhbYx*brJ*bT=RR4N@I-++a7(6 zral@V+RbZ%x#lJ<+I;CI(ahjk=adD=R~dNp0FuPl8nLJtYNrqS6MQfF(VK_}zEp+z?@aXb?{qUHPBXHcN2Pn7}BaK$$1 zx&ewpz72*<<8~bd=S0z)eeI-^%Bta8PN<)KD^seB@rJmrhtH>88++Yf-~9aZ~fRk3S-j zo4zd(VgswTt~)T{6`;9^W;Q;rWrHsy^V#_`Fj`$5k~CK`!De*jdO`H$^L@?H z2k#m_EL&G!QG3m>;j&iiGWfy)Rk+Td31}o1+KzOHWVUhGfI%$2&}vazr#FRW^k+SqH-@G?4TAVCR@D(MK9Wmhp+bm%R}t=Gw!fcVhV@_ z(2a66mjiw2f;QWrYwyb9n_~6ZF!9nwoiDPeZN-*C=hY4B%{Ck|b`2z}b@dfmTTLE$ zz-g;)L=tWeD&3<&I-m&}4KP?pu#QsI2)&*c8NRvH%z(%Ejb-37kjHR5n4YZV1OvP} zBdalThW1z?vfDYuk6d#}X@vRUBP%V3;MLwcJyO!%VQOVGW5mKS-U^K{Np{Ugq0AB5 zjOZin)%h<+r^cK4qod#|Ak!8H2-hGa*27&jCDQZ~RPgni?rjtV;umJq&YFn*;X>HwY;=ev!)HV(QQzj1%&?U0d(X zB<_OY_w&k~A}}Xz>BpFCrpd1W9}|tjiFL!$fJ}hm>V^%eB@B!zHlg-%sU%q!S2rNV zasnqCjTb=Qjd^5g5ZkSiu5P5^l*w3|XSxeNlW99Zzb1avsP3G6%I7M9JB*vhtqZ`G zE1GS4YsINdZDORU8ZpAg-fEjNYlEr)+cPZ+M#!?#6kck?87~aFoH{&jg8m**XU>+B z+sdAGn zI7~ThA-8GHU3ZDZ&ZlAb>Ioce#9AdYgc^lGPq~hta);CB5*_+dE+457yD+g)%R5ob z^{FkBSX8tcP(R14MxS#iEO(O9II@7C=1mKT{vNF#A{{esR+rhdsj%VhauYqWzyszb z;8qg%KMkRj!GKJVLkybg5ZX+l6*TXK_9f<6$XJ|Ihut__<+PhOES|jRs!&&|doH;0 z*16BnV{poCF2Y@D-e^@l14JcP6n;O?*>VPhi!MMg#sCa$4&jSCHs+=hyu+*p*d9(Yq6&_iQ z<(PBhH0WtSNlpdIC8tCb{VDrOr@WiGpJNtCpqI>HZuOcBIgBa$@p13TznwhGlq$^0ZTut8XKqPooN^19NN;9 z^amhNHf=N^XFCTJ?%-7Sx!W4IAHgrM@-o+fhj4&7ABFnI^$|%E5{)7AwyuoK;b4ZF z9q#QRB%Y(vrbY_IP=}xR%J1VqAZTgNipgLEg90#d6Z}(g8GT$ZcZIHDd1;=cy!&2B z1Cbz>O0G8d&FB!bskCK}uGx{yG_;H^+&=L22fGGvVut0hq#du_L1(OB3nVa8C`P!S zow*tT6mrj$xRMe_tSyDN8fbxZAHpsL#7RyVxX5_|79_d~DTu=+qhJ#n^@of(Y&nm0 zfJmQwNU_ps@EiV!!6-WQ#b5#_(VF#)^?A@^eAKG*tM4~G$X}ZN*&JLGw<@VDV;&&6 z*E)?~J<55zaWTui4^lE!e*HGJNOpdVg7@SYm1{({S*Q?FD8$*6736x(GXA75{gb}* zPx{h7=}Z5lFa49g^iTTI|NrYt+hu&33N8By8kDB=gdH$jPs9LW9pLk6%`l*m>yp9U zducUM;tP6CnfjCLtf@=ldtGOnC(l-z7;(VkwmZ zxpkWXe{`!#M9X^~+_tY>uFhn#-Pt2GFQV?jIsZaiTkgfjfO6Rcagu4K}p z)V$0;-$yhxMtpN$w;CCAm~9SUU>An@Y?&4E)&Z63?3SF&Eex4ha4LobBhq;X*w|#4 zShCSu;}X4H=3;0>lC`yU=$1iQ7)$Osf{ho4s6we2KTPHP-_~xO*+{9kICwCM#U(_$ zfZ)dn*E@uvS-guVqt+JmN;I>JI-O1XIf?~>>%`1KgX1e>5q@Mc3Cwhlwa`%VL`69& zQ}(=96q?T}Oy{_k$;H-&)2v*HB(Qatz{#n6juvS`UF^IcT3Rz!BkOmRB0ZJJU2ADf z@>M=xA01~S8lUUEdl4)i_%DKAE)oNTa7U}0Y;b!Fr3P@RFP3f~l~Vy43R@GO?&MIh zt^;U7nF)X{o*FoSlCWN73a4xq`H2Go$8~2`9sa-kzyHmz|MtVjx9|P@pZ>w#zk2ua z?fVb^+wC~g5eN!p7;936lsOH{lYnB?)R39%OVv!hY?61zxsI7+Y`P|VRB(^cu_Zc5 zQDW;}Y%mCHZF+Du;AXZ=AY=!IWX2-$_Se69b^Oi8|4Tpo_H*kq*pCn}s8lb6`Pe*C zZ!2A-`_9v^fBr^)@L&JAzt#^QU)k?I`LF-_{P^U){KG!?v-|Zg-s_v+_^9WR>AH66MyIW9h5SaMd`e3D?os&(tB%UJ0Vfyexe>i}uDx0{ zx{3A6qW=2N?d|a&UcG<+_WhUj{ncxI^P3lc|KaVMCzkiQpW@f${qr~Pe)zlp++U`b z`L1r|g_jix4S(t_x=!rIB)45*XDb9~e8|v7jRAQIHv(OIfe*ebXd_fCW$}+WZ_lct zL!D-e&F$*o%**U?#0rCdc zZhJTs*+!kr#zL7JuqPplTugUN!?OhrF%^i#*6Eykb)Z63Ep^q)&`DO)WHgCKsQTdUTD z7AX5A84v3Ws3?_${I*o^I-Lt@+=!#F2jbZ8xWaD77Gc8f2yrZCXCzyoZQ-hNXDS)W z?g7$GX7JGFx)FCmP=$;O_yU!=#R~!(_wTIp-+p@YFE8GgG;OvgLatNa{MQGcvG&+#HN>IUzhk7ul=9=>pS|F_V$M#o_s++ z_tX37s^*vFrQB8BsBC_U z;_E4+iJc0c5{oMQxgk2*>T@2LYQttux1Y$1vW>?*Ro-}$@s1_pYat}+3;)$aAWH-o zId`okvu*bQ2%s@<>6;rZWp+wJp1b`O=#o;LuRd;Rdlx<2>gdtBE% zUZ%UQIMmExcPu~FO8_t-4Uu7}aOMo*c9wq@Xe!5;v7KeBWE8L`mT?erj`yG+1&Hcwink%!E!Zd5u^$*x3fxXgoFC_sYo z<6-ER@BQ8DS6|=6fBlD}(Tm@``r(P?eeTEjxP_9h%iG6-+q6%oL25K~B6N5zqL}PB zK6)j>(}o{}JlUjIay5w9vpR%nK7I#|ZRD~hsUpKisJ15FdZ>7gTnX2x=&S*QXvKMa zC5x;Kv(sm@i)&5@y*t_et=*E3+)>}`JGmWxKv?Ne3(B=n5)o+}RV^X7Y<;>+&I^f#0Q`v8pA%v6IC-q|U^o_Ktcm$&|@1(1Cfw2pTjue4m zVQamCdK_uokwUkEvM=c2v|1!RtSbj}DiX&JKR&W)qUw#uQV7buBw${v6;FNJpetDw zxq8bs3~6J}#t+%y#x2+^pO`p!yH6#|k`hrq>m8nXfhDfn`Uu&_D#?*jMY^92$LxR^l|HO05nktRD8EsenydIgdt=rlf$!baREU_@vD# zlWtk>5Xy^P^C_MKK8(9xbU|(YIK5y5eVE=ABkzQ7*{KXoKk5`@8j8gV2|4u}-|hTg z7`i(s0XS0dQSwNelnNn=R)TBY&Wj$o*dbkVK*KLM3*c-(S~%|K(U~uV1~} zZ}t6o@q@n6-}w8d7Wf>U6Jqb<9wWL;#N@2JS&R)`t$z^JbE&z}WL0Rej;?tmC zdE$7cVw}MN;o^@j=Y+PjIzMT&AE@Q@t%}2d^mrj=Eon@y8U-Na;|K$LT`$EN@S%FO z^#sM|XPlmOsJ&Py0gqzd>Oka(ELTO5k!Awl9(FbA07`6D9fg0X{L~dNU>W=fK`icV z&gl#WPLg8BzrWaj^<}ZoD}DX;H&5-Zp7}|ByTax31Y>f&ezsRhlS!ZELzm6ZDv@Qb z0(126WwH7T@{?(Tij;9Vr&;1l1SNH4Y$`|6Y2`?!y6Tz#y zFzj~g#Pb^LHRq9NbyQ15=((fWj&sP&C5WI2FP2}oPRmmdSD(lI%&4`sxvV+lkU0UE z9bUV~Xc0Vqf3KN~4Auf_tY>xPq};hTv`fCToe>Me#hl8yV0i{jP$168wqAfDPeRSE z?GjFfWD%Wt0WU*9Gv8mz$!!A)nR$X@chlYf-#KGWm(2vYc`)-sBJ+F|5imDr*4e85O_{|%= zGye|nEhTc&V0|7}I2xs_xY>Ob)vkjYF6-DL$wHSuT5p4hLAF6;X%{MTPr_}%-r<{zH=5BSNV_ZxV|p&r*}s`KKU(v z?nn8!#PiEsvf+i5poRs2IPAIl5gLcRa0B2} z8RTXbk{;9<-O6l0Rp*?$fe@)@LS01Id0?9_8*)2dAVZ}WU8p%mr#o+Q2^c?qi+}O) zAK&@c)%^>ud0*^Tzj^iMshRV0Kf=fHReD+P(#mH-j4K6M%5k}e5$DoWb+?wKz=x;s z&$gUN8ZGf#V+8w{OQnE4!OgK}BzC}!8jKG73wr^*LY=1rlMG2-DyLO;=eP4=X)7=w z%j$)o5UH`#5Pr*z*C5y45UZjjd^=g_(@Hb65^xD*RrFUB0YO419iAp)hY9q}6%Q_S z%X4JeMo(Ob(h`Y<#3IeFE=)_9R57S;eIYf^@Fl1y9FlA1xQN|!_0gyK- zZGU(OE0OvOf81TIE5!g@5NlyEt;tCytGn?}X*P%^;DM1=IwmJ($=ub{(Q|J3QkaNi zWukpRtNx&cI(T@$K!Kc=ekX_v?Ju z_NhVEGe6CT%Z2)~eR(-MG+6E~T4SO@%?F^bbq7rxDKZES825r=6XjwrxV|%D0B{p0 z>rFVDpA1~DB+6bEZRiA`th01jPP&GSsv6FZl56E0`glaDN8})m1bIQ3Ki@wCek^a5 z;%lSK09XsY^Z-kEWN`D6_gbe9BB*k>951%%+Zgr!Nz1Ci5aa}T`+2i*V}xZ)ZP~0B zEBM4R|Jlb6pI7*)jq@`ok ziyXamSrKGbIs(sA0okVwokFkim}KI~nQk{lkCr-6 z`!$fZJ|2ep66HQ117@poPOYt%#Sj)jx5Nl8!OmhYoX5OcmrCMU%GBZw9z$=mJ1Xkz zHm5bGN6a5=06HB2gh9^>SP8urIM2Bw5`7Fq{3e$%w6F* z)m42u`#KKz-(3Ht(cxQ^)jY5=_q5x9|Hc@4Zy}jPF9SVp%iYgPr@G+^rAIfzrOSrp zmIF>F*Qqv(6fm8QU#&8BK6~YfBmqJNp4y|}8%}-vp4$7jA3nVBH@|!8d-}|e?x#yS zUZyWoK@L}zc@4Y4gPs<^1Q531xoT|2 z!KBHLqpt^22sQv~LmT_RKE~V307kx9QW8&USp^jrD7>emQy4`YhQD*q*7R^usx%apkRZI?34gWG2m}gLkFImH zWtfK|RSti?y=PbcMJ>&z_Th!tCQ4&~hyy1aLU469^qy2&2bO>vgNcDUkO#+`4b7Z^WM4#u zAJ+DlpV#*3gyXY5x1TQPdRe~4FA(3Pd$OlVez<$Y4LiWcl$&bEY&*)3)N~OejRjWk zT=o;PE7U@DmXT1X>|7}>a&rR~9*Pz`NzQ5IbD3m9a*#r$W3TzR`^AT}_#uVj2vPoE zYVoo4Dwn1Ja`Yk55v-QJ87t-E7sd2>c9UDm+^Ljx+dr$tl7l5=r&-ssk?HeM2tb;W zc9IpFCNcME4-5LUS7$#pjCkgU_R}}-{PE43LHL3yb7x2uG%}!Of+;|d6beX9Q$FZo zI2ax~-X>fY!R)}`i?*&|Z2?=PoE6gvp%nZ)8q)gOFV9Rr}&U_ zDdddeu%HTF2fR`?N0Ed&cl!Y-p^b@S2oUw0Hg{V)<*^AnF5t}3d#a_*J*E?GU~jTo zz0rO>XAMfUjg_IOeEe~P^e;@9p8Mf_J7M|~eyeCE#;FtgDlWf8Hep%H`^*S>z=d=4 zRpIHj&(V+6HtD-o))m!^GV-n!=pgXm0J7=0Mh-e1tiYVC0O>NGZ$1or_Li!TH}d_= z>elgkWaz}UOV@o9+ajjX86DJydXlCkrv{=IHsbP;{e1YSAD{YReeQ?(SSI)} zCe=zzjp06N@da8F{;p|wJ~~FmCVYKcfK#tIM+C|Tkpi{^HB=K9##PFgGnm>Ys0qoY zud`NNx(MOUnd;di-(c9?>tk$vyr(@(9~!=14)Wt1f)aHbSapT^0vVcPX)8cRhxZyV z&J~)hPv$(e%#||b!6L3TVW*KG_}BrA-TFC@ME*Pl^a|JihmwAMd=3BNF7i`DrDuL@ zKV44w@kQJ#bUuSfHiZBZ{=_tFO{;TEn(o%n?<@&CiEHduwao?RZ$W;oz%bCgpBv<$ z$9uYQ#JVUZ$PkJPZzs+ob@u}$lO0f`^Z1>`(+4f6$aGZIO|y=&_uj<|M$R-6>C?EG z`da+d^o^VD|=TugP{pqD;iQk(VQW-p%p?6D>Yb zS>IrGnayDg%+!ZPu}eWY4tBg1<4)MIgfHPUid2OiY&z$l|LEVmiJ^jN(P`M-qs)v~ zYWkUZU-D#uUM*p>U5 z9U}fgZ${Dcar65njr_zx^_idBPdC5iW&ZJAuBO!Y{S}h5E5`(=E1mzYBbYf;R)$}d zDqPyhz`W>wkk-MwzuB&Pe!X2)Q1&tn6yAuqhr`rvSK$nmLc|MwFVV)a_aHkKz}; z{qOhiNWAGTOlVNb=I(AkEa=Za=#v-e&;8UM=Yw;7nI)|@R~a<&lcoT-Ufrm!=dNK0 zWqcVYw==;LiQ-4Fk> z{HOoiUe1^DKfQhT@zvWm`ucy|pI*KG`0CAnu(v zWYDZovv4nQ3tC`36H20wT+pDUtgt;bHy|p=&>)CPcySawj<^-}?@{RRG-(^JuOu1I z#9;+dto&K7CMtZ6T@o`&`tsGw|M4VKD|;%)@gh+W@UJR1-QR+be7uh&mh?`*134 zG6G>zGm3Pbyr!4McYQSO@{3NE9(3xFE;*taN?~g%&JH!w?sYa zL=f0I-2c?6k^`jJmOKD@oVKCLP%uc{ZH$WfHW#jqL=uco%l%%N&F+uy>rbCvohPRi z&->IK-q-nM{(9(Hz-h;63)(pp>tv%^2c?jLf#k3?l7eJ4*U?5LvcN~DGWbE10F_F> zfO(h332Yzd3e-u`UjPNAopX9@q71nf*kifqlKB{mNi_|ogNJ;zSd#7ATUokKVAAeD zkLzkwy6Rjc+_FZbj^knSmxu4^=McXgit6o|?UZfUY6}5sKSXO4id#7sP zCTkQ&!NzBoeE2SLTA84zdDSbW1v)t zb`I_L^fLc%X~RIW!e*w4&O(k_)v-<}n9Yl}hCR}9={FPPY-ES~B3Oe5Zn2asvQHsoN1 zVE5EoA6BzdN6ax5GYC3`W4Ya~$2n)FYlSKjwf40uEHr60;B%UuBM#`TJN~-VnPgxH z!*8kuHpJexIDpJ5^m9MA#~H=fc+(tqnfta#37vh} z^c`U3ZbmyI>ny@wwjCiFEpkO_f`C4c;-7!6RyF}#zDx#Y8erMnJ&k?Z=o!{PFLZ*1 zI|&XmWs*O8{C2_^oVh!(6+IMMu%cJ4P#bq?mwg72&QVNld`$hC;5rQ3#8x@z{u65n zFsOUZp>@Upf|s0Y0M&8wKqR0k*G@|smD_~!{;-~Z_D66P&;8_{_(AQT$p&zkd)+!p zsaBD#VGUn~0NG0F%~7(}rV%4DzV$w6e}eH_{I$8cJW;cq+6LU#zNM4ioYE>_{**Mv z2H>}AYWzphK?7ZB<8etzwp=<=uZvH1C4m-Ux)|~otjkoIL1-n3KyZ*wU#D3UyvAt7 z+z1K}MVQ;qF0J_~lBDBmPLt3=Qf*Q+_o)@Y3l);qyFPwJ|B5Aj?;l?MlkV3~y?LMe z@jY&P^ULx1n_7n9i^Z@3bvy?N^O0e9M=>cy)}~kt_L7nlocgx?1Ufs9hnWd9S(0%lnr;|Gv}{o9DbeIuBcZxg zKb0CKH{=tBd|8InCdKY8Na&t~U}WmNV9wJPGOdwDjE=6TCGE3h;!?YsVt-@n@p!Ji z%lh`y(~(-F+hOUlkgt06wgP6WnsxaZLQVX1Y+a&4CY<1;WHCuA7 zr6EgK(4pKwl9oIm2h&!DU*jZ^i!#GxM;W#YHBq~Jy7YKJEoWn3lsg#DScL|5$W9?o zAj#;3L^(E+laWq&Zn@wHU~a#;gYQ{8eDFH)&FoV!SCI8vlwjs67U-{m&d$7He%E?V z>)Gq$QRd&UrXN4plZEK#eQ=M%#PTwKIn5+MEN9g<^Tf$eW1pw-gQ#^KUdhRz2T^5RucBL3e3Lc;hNIDIQlS?Y6)WL?h5X!3*qgNjlYByAQREJUs zBkt4GCaHv##bmb3UpYSx6Myz}(B-)w+D}(g_z#-emd6$17YONxEt*b$kqN{o6f#I;4^|X9Zve7LKOb?@x>Nq1M z?hB=8WN`GTcKoymPJ4KY1|HegA!Kv|-t|Z|6mlB zS{E0jYzsVPTAlwq!hr#I70+NEw<@fin^->NTKy!26rpD~yoPWeGKvOd3Y9WlJ=5Cx z=6Cd;@t>a98$I*0`^lRAGvt#tFQ;|x^{->r+2eCxU7 zlkHYa6Bq{Rra-A8yaOe^kFpjAm_o$amJVJ`c6!_GOjHNj#^b5~fovEnot$^f#l$5h5c7^{4Tu9mH%?Ye=eX-egpzX- zceXd1^edWzR7Ro#SW0i!%7Cr+2)?EFI$;U6Jk9Fnvo9pNqH$?ADoYBJdwWeNbSgRN z$+$a}qSi=;c^)khFDXX^81!Nub58E~b@Lv3P;Ac7b$qjtA&vsT?=i~sIT!rlo&Nr* z1L|`>yl*eizaTUHIP^YQ*wES>DWqqW3{YkD)M$6(PfJrTkOn{FsqN%7w(CTAT6+ad z)^240LqYFc8^{@O`g@5o%Zf_=+44EUxw~S7&)?9Dj~E`n)DYWg?8By>5btii_wG$m zB1=9e>D}Ec95X>59L4KEm6w2_UbevQhgz9(2E2}s+q~Npml(;8z$ysmyR6bMB8|se znf>ZFZ$AC7{r$@)Z)KkQ>HTz7*B@dLeTMCRq*g+56#T93g0^9;m`S8BdP;BzPb&j- zLILYnc2vLD+d(k1ZFudlcTY>cVR&*5U9?!57( zfD9QF$||ohnb_)vM>};G3%eP?Z$=!^8 zh9{p`>n6WqCa3(!sQ%{#s=qw`yN_?*zW(sy>6h?xKf%ZE>-ch^Zfj1%cvr@jK==a2 zpR7jhGw&0f)W{k^#beNWN6uGpzjLX#=?RQ8I#3AYOqlAUPlaK%PtSsM_aM=fKpYBB zx}~`c6KtQ4gNJ{GEBo9}@Nt;mzYKrzSg%&l7!NrI11$fem|Kk)MB;=WZ$SosXw%}# zs9bf~k=>`}sJ4UziBzyVqxi6NxwQSLa+*dfA2^G&h!n=un7-%WXQ~|2 zaIdB2vXNGy=5*`3HJ^xrXhx*le#CAtT9UG^(&(Vb1Zua&mttYDo_Gn)hSK<;(vW&Z zVH=d+POD*O`XdPPKLbJjNq_U?P0ceu#BV!QUtY)u>G`sgI5B1Cf;qC>ggeDC$yQdF zGh>zJT1pv5(XcM=J~{hU3WkUzN68&CO6!eCZ^fHjlTJ)~fNW+{@ckVvZQ!s;{&>zw zbMHQKYq)D$O=7yoL>xIhJi9sar>v_g29-)^$*{-S9k+g&xk7K&UDs+o>s)YGImPP7-XN8w$@O ziaM$VD6^7lgTGF7)tseGnmU)~8nScAyK6f#fCX2?HPi$F>cokh8RoQorDEx{@LIdJ zyZNf(X(iC^U{ke^b@{-+Jq}9hAJ_DEZ(sjNK>g!WiRXTTKN&UsKjme8nZN9cwVky# z6%rbDUC$~*N-2BopdeEFLQLlAA6;`x@~N6`-xxKzxw(TeqnFlKlLVl z?nn5OZ|y&u370UN=A)b%tK<@aRfbtIqUOvkke^ypKYm6aAPK9*is@0zbg}@VYaWej z=*{HEw;e1>onOIK-E;3!W1jA28}+&#H;bV~9xvp8MV`h9$67u~&G9!x3+Vtf`WQE2 zz`@~cEjk8`&#Vyae9eYc7bnx&VH1039WoHUrR)x7zBJEe*4En8d)JqjN#XHTZdtzL z2>2DN`eN&cC##Up{0M(Kc>2R#E4KLpm=3j_pH`tM#E7|QC=oXIVc3?X)6`6Ld5gwv z$yIvaNlTvNcpNWB8#V?#6D1(qRY|9yp3KR#R(5){XHaUSG)=xC>&;>U)1GmG<1v?|bX&X>=o=xpD?1g^YqYytf+7T9tu&zC)Ty z5z#954Y=2eYn>G5O}tzyJ&9=BL4Ooa*zS>zRb4VB<%+$$>*Rnvh;JH7+;2i@{|e7M z&;0}+x5Z!4wo>d8@*T~^-eU#|K%0R;qqy@Cff!Y$8`@psL1`@o5t>^MRrj@PD&|L+ zxC4=!j$B@689Q|?Q+%ghCaApixP`Jp4}BIHW34Rf6zYR@^D=Hk`ohad z&QI)7h_H#V9xB(`R^6SXk8@+@R#awMD8L&NdJo$>6KnE7{kg|*Pov0KP{=nIsDD5f z|Lq@kO)tLmm%p^GK7D-k`l&(Gb3e$RUfRu(;~H3kQAJ=Q9qtL-QK`+r>Bl? zVPay27g^xxVAwr)aJrz~Zug$0SpvCRX?r!KhvbKnG;W^GkVv(oI82hwF5uCl(_eY4 zU48CMNvi?(_ijI;;fx(U<$>KbcHMl&v(+dYy0_%qd)t%frbj59(<7(R;${f6EczG_ z`g3gy{ExS>TbHcSWC*U=(*O)V1`dA}`r+e?-@JbNRHga3AKhb0O}-+E+XfaI02u07 zdygaI%D}a03}%4EgBSMM|QlBKho&eS)17z z2!m>OP!VexU9tACq@&eMjyC18$dlfp`nIY&ow8)$_8v`2@n*d*U9u`EGls=0q7dMd zin6^kB0#W3G_;%&eWr79FN$}A;#Q$*Y>aB0fH@Zr==mI+SUP!V5yKW?KKm}8L27{)hN^Vxm#rzyFbznYlWtgc>O33P^Yme@N45!#av~P6wHl7^HYRU`HKgq;@vCzhZk>ucyeK%`}uvZrcvg!g|hgl!NCqbPjf&h zkDQZ&i}Jlw8CvZ$QFbN^JYRxel~ZSz=S4FHZvzgC{ppajqPRdcHDWt&lU{e{Et@gE zwL;|mn;}JC;YH?@)WI-$TElibx$endDGI{!x<^h( z>}>Pe-uTA$r8PCQ<8|$9!M>7MuN*0If?Rl$?)<05BQE3@$3J|0l8^VykL}wW%;(lk zwi7v|FcCu z{A9`E<95f`RklK3QeBl8x99cv(4b!6OQ%o=n;a z(LHXkF;PL|xXF0yfxOJrR8~F0xRn^O*4!h{-IJ|G2p^Y259O`!<6X`#-|2hv*I(np zzo#_(FgRDK5Kj2A90V<@fvMWO20~nXzh6l zF+A$Vg@{nW0OBF`4#+D>x9(BqX1cgfu5utG5>4b_G>&Ah z|I!`eJhpG_w{QR9)p?R8@!U`DTOaV}@e-E_z4Vz}n-wQ%v$(b1f!)nHErYf=JMFnm zn&WS+oj-jy7lQG=)w~7FAb8GL^iV1QC?BxvAZZ!q_nl{=; zsrA}8ewU>&t?E4c_I2mjEu$#N$tAF))RxXkLqiuE$Xp08$!GEh8Qu}3IAuBe3GfZG zdu-%eRqFM4n$QAo^KnIg_3DQoK7IU7@#eW7-D6<*M>r{vjHp79mg7N_TY-1I|ziBc(XaZU_`A}`ee4ARyG}}V{(I6 z^o{?QupnJTY*=Xuf2iV7*Vt9-Ui=ny0KDjc>p16nWHnV^?ny}TFDM`uU<_GV=cvnl z*(#@#Vq2CjxNOMP(r^=K_;>MX$>Wm#)rYsA-kZPpLEk-%5qR#$_jOtSTbA`d{_p8! ze_8&A|L}*5DYi{5nP&6$K2yH3&Kfdm_5;!i3Voh%lX7cy%uanI<9XU8My0@CC-dy_EFOikYw3UIk2#+ z^gYgy(-ePwJ%!(`J|{&N^8b)bgTi22X^rdH88l+KNjGSTDZ$M2g^hgw4WYN`^)h%f8O|xAuDwmqKT^mjVh-|@p08*L*ZD*k)2F+^UttTPKANV z61NcoJ^Da~&tg3;RoDko(TF0)H+C=hhHZxLL9D^AT@n^Tj|+G@q%b&~ZxFvx?LPu?bWuSoDa ztkwY|!dX&1n`8_E2YJk}~p*^;m8RgQ+MF;)&j&f$q>?Z|8^XZ_jii>Y@lUT!5s!Ayn z$xA)6!e}WqCF36rB67}AHKYlt?K;;tWOoIhHmhb`aPVwcqns3cdV3ynZR@yC&Xk;q z`qZLqcTYLHuL^3g(@Tp&AYmc6Du%HUkPl~HJ_@Il4#8oq6&T0t)YL^!`sPji@rQR$ z{k%T&Lwi&&e4QsDyppwZY;jO@+>1!00HCOn(pp`(t<0rM)TB4A(;1HtJ1^kyoegMG zHgvIyfX?qDNsF2~JCr*E)jCZ1(U2JfYUDNqAdhpxyrxN-T|3&)$#IQ%sc&>5@Li|0 zv^Vmfm~y1$u0-{=Bh<}TtqJaI)sCZk#7x`gxt712)=mOhz$D$xbBj2ZAZ`qVB=bl0 z!cT2SfBxp}@fY7SFg*7YeC)XPm-)+vm}W}dts6h(fX}5D0|07@ysy&?-967`lv@g6 z=bkgQMZknDy3TeSGbaSmx}w=OuERVvB7$S}9 z6Pe1rN1Z8Wqr@*K)yGlczdioZ?c)po^#1KT|IVKHnV;a}mo|T8=jE}Bu02kxj2dal z8&`gNGpe>ZWwp?=(n1!IT;Wm?7%45@cS()k0qHV>}0O7D0r6s<1t=L#q zO|wBEt-ELamTeg!wN6JE7%h-VuEo90LZF~+FWYP3wF#M{ttL(f-*X0`v9{5L!GV6p z^fYIMkD2iMW_&g4;yTuf1Um)_f#%d=6+Qv`+aKA#ef8nRhmZQ^=UMi0U=YS;s(oW6h)`GY9vj&Ov{ZeY;SsH(r4q3*8yN8-~ zjltY~#Fl$k?KKJF19QZdK6*%9;jPxSp!hY)^L2cK?LSQE6Opk4seh`ETg#8wZOvR} ziY`;Ma%UX7`${T(aPw05u}qmM-kj!e4g1_@tl4Xdg!zjSln-x%j+tFU;Ks6JEe zD0?3{rvQGKgZ~FTNeG{aW<2+nZoChiN=?#wEqJ;|nW><D2z&{+n}X zkG)Q9s7lOtTQ@@uwtCkUxhC$w1d<=E_yXOR z3g`9lO?<+)PcTHg@kJ~!`88`@*KrD*KxRIMYNU9VJ$gGef`Nqx0-WxBDf|VZV0#FQ zSB23c`Mwns-P9T;t1FZ>F0s$1kL<2btn6RB|MceLs~`M3U)kq=fZtnK<3I?(4g9n- zw%VXP#|!}?(;dZiEqgC0dttR^vjfztbS@)yJ*^dBed6G;8?!M=K|txzbJl?rv8*zB zE~)rn9y4U&Q*QflVflNvb7n!#m3%O0nzC~(ldaEEB1g>9rmQqax{i9Xpnf*EyJh8BU^TFT$&fmXy?{AL3e;Q5t z%n$K9G| z``LYOO@$0=>L#snS-Z1iywK68#M`X8v+O~yr)O>vnH}`m*D8VSix%pfC&^YBehq1- z09R1z3ViBH$5=_uCvvIcmWltZm}7vGdi=sNIwyR_MR&H2e|&IoorKV)DxAY!z#68> z5JEaJCf>_yj@yZ2L)>;LihVm_7_^b-%2Y0@@#~zZ8_8xGQ_3DkApvk*J$_u%fBU1P z_lF-oy?OQVYc=ODzx?~(P5D3b<9xhluV0Qn3^l5y!%Y^xh}d$@99l30oF-{&uPxQK zkPIcS3eZB%l#RcJSdjpTJ6N?AqJ@;f)HMFFhu0Qpe^g6sv3g3KA<<6Wd+l?+p&^p` zKtMByIWTBjX?f2Fg34+a_;c^B>+*ExOVdl@M-0eSYI#)B-G(NGrh4Ad34u!{5AL3J zs|nINCWS&@tJbPDH>+gm^W)LyZ{Fy~Pw(~hiwnkovMl-B5AgAx=j+1mMBAG|hfPtj zjAC&l!URdJrnWnz+*)&(?YyR{OimgJU-Z_NP%o`E{BqvBs>)j9UXHd{R*Ar(uL%>; zsiU1$0dJg?+R(>6a?;u?wPTU)oI}wLHsg0$HG2w3w0d#7!JI#rCbZP9<_Zr8Q~)A9wGzV`-9P=K;cW zlQZOy6e&UPAfOuVc5*X7dKfb|_v$3;(8{dp?z!Q!3u|X)_0*1tY25`%cQe&>i1a`9 z{@u;j`aX>p9ge7j8rqRv1{z0TUVbp7vFjV%*ojI*%AE(2-syr{7N_HlYrI{XJ*F+# zLQh`Odm1^o3k{87N(68?{eU@eY-i_fnwPzR|dnD@gJx-hEkv4iyivp{2Q?YT`EJA0h|`Gh-V zMKgXui$R(q*xR(S&v`gOo(B~NQt1%#>gkW5-ZspM&@?J!;EPK-C;&TTKfSI3gKRwU?`q%Hj`v(8lH-FCW zK6L){s%!hb*YK@`BKzVzwh^8OZE@8;j?|<$>0i%NB&JerLpVjgV1iIE;APC$<nIB zfwUkp3>9!_RR+4w57SEPNlv#wM^@DznzBNF_*$;3m&OJ}i+~epa3uAyvz`p8*=~tA z_Sz8YmumCt-JJJc!M8wN0`YN78Ya6?azBKOx)Lbz3bN{INz_pZx5;P#C4o)TV@_7~ z$G6BG!7;Lt5qL~Iuto0^f z9LSE-*W&9dIH&)ZKmYV2w#MI`SLGY;y^wDqolMlaqzp5#s8z?4X9^Q2>EjYF90&o2 znl%_)ga}Dqxt7*Uh`wc39UQ|qJpiS%DJA?Yb5G$xEqzZ|g6jj22d=P|sErr0hP)w2 z^q?yUv1i{$D_FAJcAo{)Q!fg$Q6~+CW^B3AbsgPH>?)E)sHrKa@dk3ZjYZ98>e;@0 zmuqca9B96y7uCf+0HX|j`vL!Z9CP!Be%&kizKi(Q!_~=-Z*yW)^ad(QxNiwPW1;VJ zZ3#lZ#u(Sq+=dPfCmeu=+e5>lOT=h-&s>_TEe7$PkSFJ!j{LNN{(BbGm=laRurq|} z#RaYG$9=4vd%?}&z84K0NN8|{r}+BHCGLgU`K1R^KmdI3GcQi1_i=oDgdCQ5;!TPn zQLRm(m|(<^tK`9+H0UuK!ElS}>Y%qD?mxWIaDMLveCxq7Zi+0%#&BB>QV0yy=nR~z zwqB3GtprM^fMR#?P|UMSN3jB|^zd>XK2%~U!Yh3vn^L|Wgzmhd+i`qHwU=E5O<&nq z*XIX|t!Cc2_;Dkhwr8ODYGCJq0klzkrR~bR#)51EnPUY86ikWSjS~`D6pvo43B?7d zHm)vK3_$Ld*by|w1t!et_*?@Qe z5>ozP1q7+>s0FsS3s0l(+&PA8a(}K!sqxA(y6M^RzK)$Cnn0 zQU{S6q<-N7&~>A9x&RPyvhCU`S`aSf;i)Y3_M`pXTPp7NUctAXY@M}`-7`tQE-mvO zJ_xWku(}s^xjV$g1O8V>0A#u%kYHRq5V&1#gut`=PN#4F_W& zy|AY6;d@5w3-W(TDufrlY5T|%l_MK$Sg%w*HD{v#2z7G-2M+52+r8b}ET<$SBBrK04f49}1a;R9XfYe3?GNqa7Ghj5c6YNHu}1}YT_lBS6tUcB%c z!|W}Z?`Vh*W`lYO;5f#`a7{8Ajt$2h=JGr2#4^x<&UmK7{JZlBPSsZhlJC55zaBn~ zKhRgAQvkJKHS-Z>2m)Li7uBf%`sGQ7>`wKO?;P%A<2KEKx4CBLk(#!V&S8MxaAFJu zK5&9dLY17(&BI}n$G)hnV80i;Qi=FEw8(ld-=5d?)|Q~X-4avBMcPaq2`OC|#>g{n0SC!R8@5ZB?k3_mJ5#<<;oWoj_WsAOuAJbKzxRS z5vf4%s#c7XQ$g~nMY}8}HjliO>ool2ycA&*OR58qe&^PC1$?jL#$8@VmXjyU3Cz!x z*!$`H`TX$HYX_V6Ub(MN^#A@WZ~pp|eo;67PePUFO?C6vzx%Ve8Dq-@QCN&Uq=GNm z!7B`(gwUO1=Ogtj$QQ1j1~f_a?l}~0|(XaamUD&b6x~#adtZ~*N$;V zu`7rYV4BWZ&$oNB_K)A^>si(JUb>fK$1fE5 zo`u|O?3wBZt*jgWD9e(!#{1bQtz^Ue$R z>j&z8&@Xoc8?BVZypCXX+6d?Ps2RAXIMY_9xUH?=c>@TH_^hAD&U@AH>jnMh3_-^= zZSAvsfzV{09(#rJTO}7pRPbu=f}cEOIoVQe=CBc>B_g_506- zyw{%RJFnZX_fY~6TYP??8{0$Y4dLuzpwFND3|0r zw`!&T!m|CF?Cir2{{n1c{mW|)^_|!5#pd`A^Yf=P+snXdgz0CUbr5!?qw2bYwoV1c zT*@8%MTkQ-;mqBM`-@vZU!lO6AZsklXU}eiAsvAcFC+Dsz5<7Xb^YOgtTAMu<5Dkf z@_s|xsdrwvUw!X>-aUPuIbEB`*IhTTZdtnFr!9(@{#c=n7t)H2>6RXPM8wcwm<3ef z&b_il$`D{U8^n_fZYT{*g1}k=at=sckeN#$nFhfJAa~2>fZK2AiN5#BeSM<;*Q*<3 zJYo9(xIZ3kI~Cb0^1zkYYK51cF-*6qsKX2embJ*k334z)sp)n~PQohvky>h__SZE!dOvg+n_C@_S zPhHeftO|8A8xwL3M_R?~9GT%ueH3zp2QVb}XV%Pb=)?WqEBEz@{^Mu)1AjU8Jdmk% zA!iIQ0RfalE{vIQ*UKDP+I!_3E4a@bd)>>6F62*Y!0O%@=6mBU)8|asHLzg-3z08u zaB(Va)h)xc2`3a}P@|fjA1E+|G7Uv72!#Z+OMJ$(YGQntRQT`JeyHvq3MyRg5bFfq z5RvmClwuR_t7~XQ$AYQF$=Kmd)-eaf?gaFt7)o?-1Cv08{`^4ylt2CPoBwfM+fu#v z%008FzfvmNbR2215KXu%2Jhq; zRgV$@L68}n_?%%Hkj^Y=IX5q~%LwJt^7*_?K1|qw$lkjrT07a8D(aYkr4L+T2Tg8s z{POoXG&!ey#!Mq~-)%=D2Aq`(McT0j4vYi9_CB#BmkCB4TX3+D$B(bF?mbhU$BqB_ z(;rXe58r_`mK;B$!F&L#W!9vXA(rgGcOuc?t1k$Kqsmiu#hj!=_t*?l z8UR}_ik4Fvv9(7*9W1kne*?-M(+|%F6tmFR!wqcgbA9b`kfs@esMnkm;B7(rKcnQJ zKyU&Ulp6~O%GSL=F2H#Mh%|K5kJ@N<)mNYDKmPH^A|jJPiI+G`k;Ch!trHirocjp%#y!g-Gp#h#~;$3J@k1Acp# zSg;7}k87h@3d8M|7pVAkT^#*=2#C(<1iaaWa3gXZp{OBh=oK5rMi;Ld%I4KL@F{`Q zp)CVJFbJ4O5vB#}h5<&o%VrP!X&xitW-`q&W)I8uF<*VK|I2r;-Q>OZ%DweOwZX)P zWnv?OBEV1W!jwG%Rf@(`wl3HhP)wiVE`?z6j$P9sMNBydfgBXYa-+r?*mTqZ@O{d_ zxNd`whW9o6;_>&AU9nhx=P(@>vTcI=4^B_=AJ|$NS0;w(dNDTGB zV0?jw+lPS1Ul)vz!L#+QDgF4@oLmkI__P6^c6Qw%XK?K}_r+P}q(!PA;PL#||CbFHo9pZJ2CsyLx8>;%+W8&@%^nK~Q5I5?YfRY>;e{&~2+0OpU z_vh26&zi!|EQ41!P4BysZ+Xw+PMfRz;673>`h~SNN+}UXaMQs-4SquNdJJ|Txv#*W z6ZuF1?j+bStqRk3%E^q6#*MuJL@hdE{^nfBd?MKp)7IX)_NO$HDJ+2nYdK94xB1a)?P8M2kkMH zwS>o=ykj^0;ywG7VD#^LDBpV#pFEVmC`J#8rvSo|oSFf#lTrJE0vxMsv}MM8R3ql8 z=|pS01k^DX{Uk5kCq_9gCRXqAKBo+Et`>ZUggjK9wN_h!?apKNRv1P`KJT4yc*o4} zpreCEq7x*@fI3qbe`IV8xJ1^kNH|-a;7cM97zMnfH1w9&k zoS#4K=rr~|0xsa>-RP0=g++G*`vEeM#jq75&>|*b=LLLQ{rO1dsJNyl+0yB;4M4 z)~;3+{CRqA!~CAtwg+%FmLBDYy)y9aephBaziI#J&!3Q5{O0G6uXzgJd+nabOydv! zxim|z6V(z7pO<|;-iI-G*>g7;uyK<%5vfFq7HbRyF;2<%{Z+|2|Og9!&jIg@Ruz<4WM zC>aAd3Nu@&VWJRelMfi5{us6k=%y3*8j5;N!ykzu%*&)Ak@nCE#B4*<6YDkMA;R_% z)USa<>auI3n5HVtSg4eT+%-X{kVU$ALfMUR+l6KHVy`5a$+idz@t3L*OGgnInN~A~ zg!S2-^t(Rw^S7@e72kK+p0~sNC924q=dBpK7o#TMHxWgirIt83O_!KG@1)qvl?P?(%A?OA}y9xq@5c05Ok2_o3Dph*%P z2xuPK6%^>m-HnKSq(I(SxX#4*JF$ISXX;AO>f-KZT?X<7(glVWt-CK)1*dJ)^olM_ zC1)H)Rcl2g#3$&#{OWQ3w=b;m@6S*9&BycU$M639+Ggp!7xAr{Y(POg;OZ)ZP;-^G zk~C-~`rxrEWK#N&J-LZOpNqoU93UMHpm?Ws`_3x|@$Bj#s#_OdmCzmdk|JzjrVqUX zGZsyFbsz$J-YfyyfP0md5%+@b)7rqR^qe>p8Y6H=Fpf8lyTE7$ke#)Oee)uN;^rx>7&NKs##^(vbG3VH_C$ZN3Dijuk?{)AEQZ&Vy#Da(FTv3_#Vsj=Vlgx19PPpg6}$1 z11_F(5FGUIaKjZ9tq4@o#>6-V1XSFBL2|Pk6ITa{)DodE+WTI@ZEGO*lp_ItJF4(9 zxrmQi+E)?%9e+FRynM$0>0dqLzrOl}-+L+Fc)|;eB8gBEWKfKs%0su)ILI zFXs~&3!Rx48&F*kD2%Li^Ez>sayOJz;LXD4sh4-c9TTVYj$WW~-#x78Jotn_R$V$ma54ojZ%CIB`$cqmp@RHzXTC*0MqtFK9t&lh1QwlW-b6p@Ie^V6J4CWhzHyFH@>j{+piwA2_E)q z*R=1vo^L$nL57wPibx3~Q7>&d#e$vrLXlCR=7q$>LBPk=lzIkKK7EH%DDq>4xI*YF;GK0Nb^-X7wCb@kzc}i)W(AhuXcSzWtd0 zx97+F{m-9XJ1o8Tg1+&bEB&Cz*>&ffU2-+0?ZCMLxX)Uby|*^ZiaYgq5@X5@0rDW4 zNTg_lfF?Z9pVP-Jvlm;t)rfpp{s>bippAW3&7PdSfQfldBhz@Ko{-KSq|DHOxU=xN z)x9uh=4(mlK0mn6V_H=kfY4oS$~Mj#eICYT(teQZhYXO20p*uP(lb*iglt=K)!9m- z>c1qRUU|;{``@1P#}A+OpWpmIzxRs1@t|d)Tn}<&L6JTNBt}3PE+f{ZG?Bdpy3B@L zZ;W^ql_j3%_`-M2h&^S^dURA!f9NA8XSR$q9e~q8#d#JdCGtr;tvEm%eR-pMnv+6$z$tcz`S3u=2O~R-@zw~&l8H3mV-?sy@)X?Wo z^H?mX&Omj2PEN7~M6}>;VItBAko8i-DGFf|L^nMyM!gruYBY^^#8Q_9xvzn8lIrIo zoga(3+F8Sqg@dm*@NsEe?E(Y;Z@irU>#ra38{gUQy_|1-l+RsdJ}aO~@12Vtn}XbV ztR*wmw`-E$(;x$7&{ZJhiKWE`%R$u&Ew$wgrYKDwrXuXTf&4Eu!>xK+igq|MKAnrmyejPk(+5cmCcB`o?pfIzEGQ zP+_vtTzqYVgQJQoI%a@SmClqM3Jq8-=>1?w3eaHWfghm4&M$IeN`u_cX7@GQ^U;nn z{80jOcT8l@9Zad5nS6D^poICy zID0S)P`la|*MQ#S0*fecdK!x1_o%r|Zk6F9Ewab8$5iF-Y_&f>=MTyB)?0a;$63xQ0wHKM zJCAK5=N!6g$+r~JP@ zL~V~J_|0cV_SftGFU0K6s>Rou2=Bb0znW+}`kkL|iMMX36VO@E6>_(2Inq+pyqm2s zaf_pmegmpcu)DgKgZoud(m5L;gLB66nJDwn<&D?nnae1d5&RtU-T`Rpv^a&!+k1w_ za~>;rt~9hR*n=JeDwvtYAK}S9V?*QjXI4HIUco`~qox`$7NyO%CsSujE@#_~1Xb1ltz{n(q#b8-xc) zJNUJm_{fNFM+bsY_aA{vlCEKBxh&M$_EdSuKpD1Rbw)0~5LK$nt4c410kGsupe_N7 z-se#2^K4{OIV~q%$gOcSjSE=qWjnefCb*sBp#9Uy0>WSD?9?k7Qnnxk!B+ijO2)Zl z+^cz^qruS<1Vwy3AYOww<3e>q9w0hR{aZfk%_sc3x2X5;y^wD{;5J}_bMDiphgB=K zdGI+vcfJLxU_?2S?ip6G@cv>d0=!Qq_BG^4Cc0W@PvvuS? zE^<;Eke+z%{b?SGQzTRbhx3`nHDlW83fxEt5UsH$WSIPbkeEa9e%xmA)tGm4B2S!i zw_#)|1|B_PZ``pLE+-8)lM~7*#Gcb=XC$KL&o_==zM230;nN3jwExHXmscO|J1^pM z;zPa`d(}bBPnhf65#k#cTlbzT(2pECYzin~w{Sg@U=TD8qjxL5i7vc>yp9Hn=Od2i zp-gk#w2l4fL>$Q?mltZvgcGitp9gOCS!s}QTzXFfoB+J7BaMR5;m?+z%YCuIjIGPi z?#x|0dM>}aIBFp0s@?1%MWc#O3*Vy%OgfQ=F7PF*tmnDBJ@`TuR`SBdF9?pKqH@?@-g0DPFGLhV47nW=72y5ar7utU34ys=b)I+6$Ru7 zTMBdZeaF#IW9yb+S%I&h^iW)m=0x-nfl*j&$rF(64N?XN1jj~_)UX~Xm!SNGKMqjU z4G@Zr9mr+EOfrsL7=LQ)7ix<8HO(6E9!eM-CHS-YkLUpUl=?NQD(hUxK{XV zw}S{NTW`Gi5hOLNAg3;~I`=#_rCU+ox^M$l&$UJzUYl$lMZU8)W@vhl zMVT*P=!yvv3)0Ccdru#Ar_T(qY?)vx#1+~M{N8UOD;#u|&RY<9C&V%j44)AO8Zpfx zE1^S#UYG!#x^~&2x}Df%*PQqlRS)6%bVCet+i;?e*wDWr};hS==*x+D-6N#x< zBPuF>bC*7PtSiUj6xNtF;&XJ&V1Q7jZG(_{!VCbjTWszL{{(sjo?^IUm4<@O8E?d? zt-TSynQM1kev!_qW8itsmAL*#8*rlHdJkc!0Xn14gWE$5DwyKU_D3jy+%H-2Y9s`02G{&U>%mTTixeel~O5 zK>ApGd7_XJ^GsD#hY=}2W43Me2;k5%H{6vE90N+0)*P}QFLLya+cx<=^XSpxQ{uq% z>H_#s7|;!YE8V?GYdkY;etT@z_g=tfj|}nG(A^2#t0n3#X7}Oh9A`Nnpf$!OIjPV* zT&&@Qa@k4|FydSXKvG*x0f&SFS3$mI;&Xv3nLfk?6Jn}u6mU#+upvs$Hs{_iu8DqQ zo!$3dz2|N4S7JgnWVr?~O3rSYipvQ6m~KXxo;2iA!LabuK^R{XHFj9!ShC0F17w9m zIt;%4*$sT@e@3j+}|x5m=%ng}U(Zj_rAXFJ1ud0uJdo`LrE?6W75t;*N_tph-OM zn?C*YFW;SSzW?!6%i=pP-CO&n6^l{oYNez#){H^Z7BCgF$^P2hgMd4e0W-h-Qp-0}6^nN1&TM%hAkz zY#;BDjgB!z~xA+p2N`Iv)$^SIZ{Jr zf*>~WEf}`;Qi_SP%42$dw8yErR}vwmLAeUkTg(yg9QT%*)VbGoQ(1|=fYLZnA;TM< ze}8iPd4%!G<6Pg4Vq;kG0)2ix}-Omc-8UT1vJ^8k?g}F`Sp)V6gl5IEPmqv;&4;t1A&z6a0`h z&qZSj3PRXp5MS(~g`CB6Jrp5Gv|MkJFRz94?;_b7cVb$iSdW8mu$jYn;zo@x;MKh# zY@#t#boLDuz5~DHy=cIPF!t4mF1VrKAedNuTp!J0z#CYe@qAhE`~B(D`Sfa{>Ydl^ zW!?7+EQO8_IcrXuGX}mILH#**LRyL}8ad@aB4w;=8;F4bj9eepO4~ORt~DITEzNJ| z3K|FSH++VwZK9oy)^QMI&8)b6T^uUIp05fDXf0fLLRN7JeUpiMyGHAVZZb%Kx4nkR z80!wq>IOY#Q!Ha3pJU`gWAD8HpNWT%^9K8a5Hu(C-sw01KZxY~XqvTKV#M|IJpU6m z&foO;)5o)4_XxfB`n~*|(ife@s<8_m`;t?%-8>EAJRHfu2%gYz#6|LG?G5fM2a*L4 zFQDLc_EtPFT%9JPQ$zTMliiG>`g2yDG_5-Z zYTI=L;~KDGf(Ak)vH7f5^1~02kWLAIhy4HQM-M@^-Ocw zZ65e~ZTQFU<>ccUH&^fFHJV(g47(kOGnO3Wx%;6UizryNHiOi$@Jqz8Ow>sdnvgMNVjzY{ zVdQao{QHYghuF&w;X>r}s2AbnEr#5WAp0V4)s=0h#vmPH23+PvDsQJi50DN+Ubm=a z*BMhl6bULMkf8Kh$&YgkF2z^#W3fVgf^!?uJee`j1MTS1rGC!H{CixtfAj6Xy!Huw z@0I)2C-l4g>3sU>^E*^0m>U^0=E&Z2J~Ai4lf^ia39V=+MSDHAjYNfT=`6ZQb~cOG zG8fHci;W?+3##NgFD5QfBF>DF*q$Lkm@?!gw97rW8OOFv~H3Gdj$+7H%mq9YRnNZggA?`^YNrJtV-$T@mAI36gsYGGY~v7u=#p zdr=p)+s0kZyc>q@2akT(3|2pM?~2qC+}`4&jKA}4vkvG;Ch5kA?$GJjnAlTHWukqX zFF^#1XM1+GaN3S}(}Bs|(*MST{Y!rL+UfMY7w{#e^>dW1AiNvUhuu9D$#n)Gc5ON2 z09L50ZonN((TH~7IYPjALE;%x>T}@B*c+e+aKiiSMu%K&t-$jm$TH%8%z&kMVmi-ZQ;ue)+T(3g`PG z=Nc$T4UQJ5h{nQwVrO3GbsRd`h&TtkO!Q*{kcvHh5&rTTg;7{cf@tm>G$QWA%YI|W zKRV=S+!f{k48d3{G0C4t4zvdL>iW1oP1%QX*uy-`TDK!ljf+?7u--_m!L2gyLAM|m z=#REG%+}Qv4;sb63<*0@2;Lzmcreka&tzJFR^(R0M5Az8dLB7^e?ESD=(Xqh&g=I4 zA^m#U4w7)qxlS|Gc55F3R>U71%neQ~3SmbBi8?coyHHIQ4#*xRr8)wgiJ`nS0)>OC zGXQxxO~JcYb5b+NOB`@qj=g~@hXv#LFvDZrb+CzXko>zdE+D0-;Z}O09+fpWl0z#s z3Ft?VP%?r2(c#kUJq1x!54a@|_G~8N+ZdyQ(p#r*jM>@1q)HlH^1Do)H%kBX{fGVW zP0QYUuieXg+0WFtX`~bj`PoGP$MWesj^h)?6uJVPMGoG$N+a2_hS;43DX$+NsgSv2 zcn9wd3pLNe&10-3XC&fhw5?98p(e28dEDGmHn%^2@rnrbWQE3Rm)(^#5aUL*&BpXQ zH-d+%u;~;{WcucGgFm$gis%z#o0(=)?LnP3!He`@1ROf+)~FjJ&awp{`3eG$#AWWa z_?6JpKYcv8fBNueT+Y7I#CzxUdn@vEio=j*By2|N!eP!4V87r@STxX!`OLv;>4~YE z)>g(zoAWBdpJO45H9>*eM>zLrNFa9a$QX;Vb26h!qiezmxIt^&=qx=aiD3W$Ye1C0 z-h%i$Ca4hFO&gb*9z#&u7!U;DaeNAcQoG%@=fF@~(MugD8pC=FwxVGg3a~$xFOSX~^|%|nyH-=uUNWG9%Q&ZjE5FOBkJ3P(t^y_xACX?I9JqeS3l@|b z+${WjT;+o)V9UZBZ%{r+irBecFFtii+H4-7vEslaiu(=lY{7xY{f%5lfpV{bz|mz? zu6SjQ8TjFl@WlARoYgh?Mr=W*lj9=%_w2>opFZIx?zObjJ1^WzKg<^|CVWP45aG40 z<51~>%xbV)&M`TTTU<`@CLKVp%%gLj+D)05ttX~CWn)bx*0XRdi~!B7C!l!SA^Xg@ zZa|UrJZyViIxsan-^{4g@LgO&>Ea)rtU1K)Bp$!YLTgK&IG85yMgv1v=%*XTX`Ri+QrFUMw zw=QTFTuD6@0ff7?7^On^7;h7UG*MS|6j*2J{4 zGYhgY0D<@+gPcIq!~eG%W1cc&HoebhRaqC`G{o-vV*Du=C-h+?wQG~AS8ONBukBfu%6+}~*5pzL89C}be zjT^$VEv?!FMcqNtFngOW6zFu_fWBLV$WNlHvx*idtcivMOTGO;{T+tCuevVZc?Ey{ zWbJRjMixCCvi&Yvd3d4T&tMiIxtVL$>>)Adxn?*R8c;ns9C^(ONX{z5o9tq3*Gi-< zdaN5B$NFUQLSPqTx^WT6*usd`1kV?By5CYP{Jod%dHnD-=}(XG6|nevCqQ8rp4EjW zewXi(u0t-!K7>7 z(`9!LdEWaXGsnUJo%v&qf=SP=mTj)FdFt7`6X(6hcao!@h`797EqKQJNbhE@VHo(A ztbky~V%}&=*1)b4}al}Qu^me%S(jrJ1^ezR*Ak`kgu>T zYM)?{#73`lQxOtEBPrK#Ge?3GRrgap)cvgKUNDUoZ0BK$Ho^51bUZ)IiZJuN8*7uF@|TGvCzLt7;@3nhbvHFtVuZyp<<)y3T1gr)(kdNX)LLPs}iE{=w=s9L*@0+7MR_Pg3Hv~cIHgB|^20p5}xP18| zGPI=&09)qgVA4PTEtvGpe}6T#|IW+z@*ef`V-=r%QDa9?c7t}a+Be=3P%+~d2f%kj zr-X`Fw&BgT79wy<>Vh&l<;286asa@79il1TIX5KPTkeEPZbW1f4e~-mcjYyo{z8iQ zo78c=_agr4r20Sqm5*!776x3l!1vF2F`|a~h`?Tys*^-;7B`Ok=>Ify$VU@b58;)) z1oUCV_3$FB*tWS-amf-+OY7QSMd22`}Jr8vQU`H%^_$8)G@m^6aaX4RQC%in;EMC?0EBk>-$!Ii$~YcK2r(h3*-t<-i3bgk#M4MwBV_>Cn+ zFc$An33%-dbtN3@F+*C9*3u*MK0j|%a5)uo?Obasx)|vZtH{$gjy_26hc;}@eEbsk zN??-~4_0(aW9;gB<;ngHEAi)_U%fSd?{WVFMTTgiuFc$#A5q2ah$_YJ(MwcqujjC=0M!GYYyTGX5 z#a1smku2B&%H1ALh#2mJWy##^HXr)t4Q|R2sUriq{pppb2a<^hcB3cbhsWIqS{YQD zCaOl{@NzR|se6nGKGqmp6eMBX1#lO~eC65x{?i}x<9TgM{N8K#*5|cqv7o;rfNu;S zMR(S+=qqW;4f=7Yr7JpW&{;4eIX^gthMAWk&a7o8V@N=sY!fA;lW?T7#kuVua8FvxW{Y5xvT8#5 z4l2vW0cVAc;Klo;(*se^q2N zn|W*k%^i$k!l7N~%#CRo?wjIqGr<|piKWRyx2I24Ao4cFMLdc1fU>>-jvpA{sIE%J z-)VBX)P>zAUX^3wCU`dN>0-aw3T1G+UfZ(uCuu;&TW_aA=v z@K(U(y_fFSk2HRHqz`1-x^`yeZCrfdQiCfNPwpJx=+yPP$Xu5t1xkx3UzJ_oML|4 z;FtGay|+rL6JpJ=n+4^gaS!fh1J{G6#~6vf4wJ}u0IrQKAoLrE)wS%qa1tNB7H@Y9 zeC+U^kWFDGMuIEM0ho=>v*(iSSu0gQvumJ~pC?Tf?jM^9~<4@Po258XCRnM=xXb!(v};^H-0r z|8{BWy;txpm9(G|mM48YSQa=-kCeKq7wnZTx4W)U9ICY^w6XnIGANPp0sv@5Okt;F zbiRt`^|j0&jrw-pRs=~lpG|uKHG~@&l}SJh>^`6_R^!2Ik zgu)FkrbPdF3&s!YcuDo1fxH=^pO4z->e7kp!Qi~^B_1@34oI1Psx@GOu3keWRgi}3tz zU7SEagZwM2MRHSm^w5Lk&!~xq42~~Uh^KgteJz}?BT#FQiJ|C;lz-qRXTagH&#uYt zsIKm-GRhAKcQZg44%}?t%&RZt!@obD{`5Mt<-OPKskb_QsbhcwV*zo=5jsHIz`aK-)VVH^);!y$3{k`$V2^5X9}h$T zw{4t{h5$&0LobMP8`0aoa)#hiz3D>Sfqv|B5cquhe||n6U(4*j_rg8ze(kG1M=kBv zU58AOGZ&^gj*k%B`}*U%&GxmC)CM+unO#bqsI}DE7uPD_m^Chu@9HWrxdDuIh=R{V zO{}i^G4w}b9uF`4xDxkysHAv@SS?!cVHa=TppQ|HWk`)|LDN4$o2ovKd0G2LZ47El zJ~{;$r9~2&dtsY06+Aq`!+X@#7^qp?)M2uSTLK_*V3Zr{7faGFpV04qZ2Vxa-Lby! zx_y0~|M6?MW&MFZ?|R|KzRSU;qSfB`gK5fIJh!Uv%TO;Da&j!|lq1|a9|m^PM-W+R z8GhW6el2QBqvteo68f4*e}yzQIuClqO8f_N0?J67&o9*9UTE~a7w|bWI=_Mrw>O;F zg!3`!IcYUV!igv-?A_JNaUo5jizsGR3cfzZ%54p%*g$*|2_g6o4bf1=Y4 zq;P$RY3p}#bh+18G87A`|v!_ zt*^+{kK5r@jE{?<2v!%wJ*=kTSbg-Y{UAnSS`D=Uj5Bw5CqYRD&)m8WZMR6A-##q* zy%+EWEc)wbwq}r>hrJYOnIi-`-jRg0m?thKU1X7*FYtpE*~Rq-Bqksl4EaE#rP2~aTJ(Wg*oY}x&QkM1)8 z&BpyXFM^2%`wHzt5E&7Y10#+V@Z9RiymRT2u+sxfysn}#FzQztP?n->V}yH_UnqCK z;u!w>&;Q@Y*H~!py?}33Z3+Tbu5%PjlZ#(@trQHhK)4}QxH|3eUrol_o2R5iu0o*v z6q+BsjEH)tQ$9GzU~fH(&`+PQ^4lwWwOw>KXXjDpP(8(lU!64ce8ep@@IU` zmqgXyun-@9`02Y3_bXHQ9}#!?<_#mxdoSVBDd%4)aqa~}4s6sUpH>t4E=)(vAI+YH zSNrjJI1LVR*y!m4+A!k(PWetJ^CZ(-0hm3__lB}`L%HCy+I@guQAT9uj=ycmQ z@y0&GvqkI+}?XCw#4<9q8O9_c!L7L#%Piw z2s*$4?`ZKW=B0|i%a(?YMDHNrM71(}ggYiqYqisxUQ>c8!P8WwkEvswiKOXiORpC6 z%68jm{rA5k!av&EMDS-n#M?#Pw@a;&GH2IP=f$gC5oyr@a}R;5IVgu^BN$;er%3dR*VRu?x zR+qEuvVbvpC74=@msu{k0US7esDLh==}ceyKu0Mo} z8+IubsNEs;vs*QHwIhAE3svEvSTr?}#Y;9ouEzxlhKLYu0B5H4Mk`S$A1iZ51K00% zm1Ee!MMoS>6P%inJz{%HnsBdys5+Yk!;~3kAHh+yHBwzX!X%fE1Fx4~ZI6Q{VuM0; z#euG-QSctUiE@~eMeZwcWSz3t?HKVlFMoLdI3@h-=l07lT>bufX6?RvLmqm&`?By zm=VDl=G`+p#y)Kf$1-Mk`c;Bbje&K~$HZ_9xgQt@p``QKhXzx&@( z{SW<+&whgU_>Zrdmq~51ATSc@5Halx!n!xGQCeIKH7d{6It7;)lg{mRO zcdOw$>wglJ+&b9SH#0d>?8FX&T2crFMj+Gul8(VAw4J&#W(4Giw- zHW~5T|NQ*!Z}!uV57A4{eQR?PGRK4JPJKv`f-=i-7`T4{9@kpHT;J!pxz)8qj|Wa(La^^PCfxv*UP$ zn!$jkt2fkwR>iTd&;V4&M67xTi(wDBRL2LmKKz$2Qr(f($OSCxR=Ohx@VRt!N>%VJ z?)jPwq&OP-)_5)U;YIM=SFaFvx8Bz(xeO>l)R;pV)+O-YaPq3XLk%k z3`~1A>5Ld7H$M9?)poINkt}dT$r6bfYk(eqxHH4f!n%=@1PXn|4$HFB5ZFdhEe;Qy z8jiF(kjwTu=)?5z8How4;f2B-=By|J3!_i7ez^KnW|-T+y{nbrYJn-dHc#DS4E#+8 z($ok<0g5<-q3xR0H5CphJ)j)XginZ<-G*F#^SOTd^TYAcv!C1T>p8x*&3EJmNjzY; z%L=NA!AⅇRmaci8!3$Zkx~#BHS2!CQcn4IWKgU4r*Ly1h*~Sl?w#3t#j*u5pfle zRv^&%SqIZG-TTlcy^|~_bUg?-M=gsm+H{()T}u@*l7#7GkyP-+-f9Q3(;M(5gf}6t zfuDFM=kgiGC>iYzWT1Ex$~_=|Lh^E~l4iOHdf(0>=iE|8fBX4w@8eG|4*@PuesI6M zkH+)EJ09q41a#}cWZkGf?$8O8|i5|E* z9+V8N9UdYWiZmphNzm%wId{SX$c)1T#qG#wFSHJN>uLDmnWN|0ULyj)d|)Xz^4&S8 zdp~trhvcGkT#k^iq>c=|&Jkk-&XesLG!)E6Ya=Al=BO(sPkClY>#MJVM}E2WH%7ky z>_5NHAM4G5;Ip6N-3W=kM)$#l-oU@?l7-y>N9%@SJetByT?K478@BQJUn!ls!*ixs zNz>d~XQgaI?;FMb8smZ@fKTUQh;ODA2muR>@{L1lE^JK?%kAoXX-H1c8u4AbNcKiq zyT|OclvAQn^NoGxvC9Qh*t+nTxD3di*~5754XF*u_M?(Ls=6O*hzR*`t1(eywNAE0P=Ghu#Pa+5~f0Cdn1@Mm)Oax%6i7~poV;E1$P+J zDaOnl3-6RUOYQg@FYLen`R97~!t4FJ`s_OESYzUHFu)D(xGE1d$Wo6Gc|@F5 z6c()}F?Yb+Voan!)&c{6u{7_82csbtHBNVIky>r#MR%Z=U%$Qe*$?!WU)AdemharH zzy>(Wq|lKbX^Qg(R3pPzgWJjY09g()yxTqkuVk(UP#7x{Cm`i?o$*OGVVBZer~`qu z1C^4FCTi>W9Z5j3CZ9<>wBrAlcF$)&)Hh%4QQmAJ_IJQ}Ts#vjwP#4Caz6JZft<($tw=sq73{i=Lr=Z8@ZBG36 z$3A~~_r_lR*^lm*A5j6f>FZPq>90Oc7A{r0Zy)1zXpjfr^-~Y-WY~$~dk+y-pT;pj z%FW!ET=_RU8ylvlRU^*N6Db$Z3u8Agh zH5P^IR7G3H5ZOzehZ{UGDsXf)7d=$o7rYbaB3cQwt|ZZu*PJwC1R%gIW$g``5|~fz zbkg3NgGkWzju!pVzWniFZ0*U9?X4m+LG*0LAtqjp9Tc!32sOKI1(seQr zW~R#+)1nZD^S@5rVI^ElrUhdF<(eAPm76v3TQq8dazS9PFpw( z+#Q8?2K49K8Ch?Mv7#kL=SLa5qU?~ylW8FqT{h%sn-_U&^+|)zf#8$e1f?jZnD{=H zmEHE-*ifJ2UOr{O(YVisBPA)%D81e9{O;%XuXou;A+;wzxqG(d*UJq$hiC2+voz2G zlGQh1u6jVIJ3d%9+Mow&ohl#Nq&2@nBp3?VSkdwOG$uupk@%`ZxS6JmiysSj`LsS+ zgDZ%4)4esJ`Mx87x3JN|(aAY83LMs938soRP}%#I!4YLZ^E5-~iIZ@H;9d>`P(@_3Adw8ru<-41_u_6nxV$|1p?!NXfA{rd)W5>q zxf<5Oid}E1cGg5^DFUA9k+59JY^!0KA`4$_W1O)KDXD$>p{~2D6rEmy85v)?ncg&~dFI_N{r~vs;qT{@pV{pq z{hQ~ertF}Tz4cgQEo=w}V#FAsq5}ff2!_y&;JjS3VCN8#g6gVOtp*1WDqMZS3Omje zf+`&Qi9HG0rPvOrO;lfJ471gnGqf&u#`=B9?*^)-Mm>BZ_u{=lA&% zFYm5F!=rW1lb_x%p``PN_Wh{4)&>4kq@dG*A6ZzE0PF;;OF}h;7v20(_b*8oz(#cjQuR^Y_5uHd(cVCc|Qy;fC7palm-RDaD9lfG* zDscAJHV|{5MU>dqBSHW)WyhD3SZmzVc$`h>;fMyv{4FM9vm@TSd7ra)u`}lc&2~Ym zvte>wh)?bAt1y5I zk_BzzZp^%g^_tv7tPp&|m)44Gc|Z*7;8*7{3U;U7a!jLxjwzMx_S09e5)omy7++X2-oz` zIn)780LW8}5u8ClVIRkM#rNE9hF!I4k*7MwHZg;WW=D_+jfZZ-P(Bqhn(Z94+}b%q zb{(m04ujU2?B_1Y)Md^gxSp46TEh%U*a7ZcHsn3qs(A`?f_@y20!R-U0tmEd*5T4)j=v=A7j1bten&y+oHv-824kG>6tUrJG@ZrbL@7^Yo zKKUWu#$fd8HKy69X@>)EH{-QVk_;ddPtI{BTeO*UV(1(u3}qMllw9z!jS`4ly>qg_r>@_ZhymkvFt`+)hWEt5x(Eu?AL&)k(n)(UB>M2^}r zOpXzw9^{Vb=3X$uy6)9>q6+OpOyD(}mw3in!vwXnBHX8&R5gSR-hfwhpYMrqN>y0* zWCnWmcEa0&5gb6HT-)H9IK7@R{499K5Z!XLaAe{lj`ULB zrv|1hBr!+9O(Jor(fj6U*>vh6sO3lW*>f)mqd9gE&6NZ7!#hygKYjjK_NSNkfB5;+ z!&1hRAKpzkt$+W#PD%JV=t_QID5AhkAsohQMpW=#PPv=+OY=+OG{aeZvGEzH4W1}v*p+H{=N8eM9GW>fdAX{=EO7MwEaY!bSPfRHvO8gA)* zp5CxomEjYrt{Qs@>gQOqo<0+U3Nsk1tYOu$6p8;xR%v#4x0pHUprUqIdTTQ`P4Y9i zkK1qG-+%u3V|_w3vCP`j1NglLYw+NHI$+zd2w(SWtSsb?8_)#w=9Rd7 zV8J8=Zhod6mn2dgXtCuyP_1nmfImQNo4d>?@yA2Qc-1A?2xUn6rfh0cPKM~hxuKn^ zJ{MYix0s&T)1(vPo$At>#IBls^np>f26k&JxW`67B#RXG1Z2dT(s%cmddpFNL94!=WF$ z&a;3s!)Ib`+e+-lSA6WQXU^ViV$ude=N_TQF@!wQ z(B5sbo9&tkc`aJt5ZcG^=_qrDSkEK#95>SwD@_U`IH!tpJ6ZbYpX?7W@ivG5*-!76 zj6?cC=m*xuqfxJ1d3YrbMHj$j_Uv3XQA%!y zS8aT3hr$O{LL!hAA7FGll(&s1W6#LlA@MH^>Pe59n9GQsYu-h1Yb;<-vq{spfp!SG4v8D{X z`vr|)gb+H=tR2cS1;fB07{9Su+o?OYQq98cV|GUg z*=Wk_%RreMO~uZCnGOBt{|X5GkX4aiJDy@laz<=QA*hXdJJ;Hf$S*qd%g z{WgL|(KK%8qJ^y-wVfPI46cn|oK#n!b#^pbm%M z36+Z-i89r>?y#FSHd?%5s7BjkdY2_Lzt8u7`~E}Lk1zf$e0Dzn@Hy;#zC1cTJ^LAc zdu@OJ>d)YBQhPcy%V8YFZ%>_Fff)(HF>=OgDrU&Tuof!#0hduylk`pF+3Fe_V5H3)lut9!LuJ-m`_tcl-d@Bs+Vz;b*k3RKJ!)oz4@4QH?op;;yp6Qk}D z+=%@C&qt@GCqK5gNZ(cJUdI}=DY{6lHcg%me;$r^)6&&xcdV=Qur6O`_P8MQXxDm` z6Z{so+H4S{c41&{u_nQqX(_N)7zH9GW|)&9N;F|ux+~h?%SS6b3v5zs&T;)uq8of z%OL96E-`ZEVqOrr^i_KrcPM~?zL}^nVZPFUU2y_w5~MRwHf~FCw17}PAlXc3-W^1x z0FK^xhVJ~c%h3rxq=4!|2OiZMX0oq$x&@rTC$3Or87Zc@)yc2@`Ugxw^g2;Sf z*zbTZte)pK8v1+0ec$rNJ^Rt!URUMok7?2B6X7>h4^Z>0-QY3qSRe0(33IR-s=tYA zmaI9Y#xWTMk2eeIOjNZ(`iRyQ-mb;UFtnqahqD0t@z|*X11)TQYqeZ0==KzREl}IW zlee6J0gZ7s`9w5)ARxX}{eg(lb9Hrg2%`v9SM9Y8f$?lwp6+xSC6 z4=AoB8!;j;qZ0w;1~gN zeUpD#Q^U^T2M61TOPe~k}6`OEuC%pl4h$&;V`0Phzz>owP6x*OPP`_k+j zFm)A765Y)U`KcA1N69*E1aK;XBdJngb%k^?hL+n9oyOp%)tE;FLe=4@Uo#yB>=z() zq|;k3&66kz6ZP8(M8D*kguErL_}UzAON`(eI;*vOEJi)ixdwBj4q|}-ZrIkGkns|a zZk~amBj*2`4rb=~>VrU;%OqripPa~^vT2hAGJnt8(f)t0&+k6hmv>)2ybhPX*u$>d zlb_*zX!L7lDYDr>$(IhklM>bz-1PwBBOXDjsj7xCL5|B=Fcd^}0Mr$|c3dD@Q@BTm zTz@{;+k=pGg6;5;LMNVBM@c}XTkVITEJb~>D5YDwZ z;BT|7ftwvpk62!H@Y8@fbFo9jm}Y3>2x3321N{=&v(GvD?6WaAOuKcA4{graw_n5m z?WdQY>dnaLv!C6q5u3l2-R3yO(Jq%MidO{j(^Lly)gxN*8R)WLHap5upx)~Y1BD?G zI>4#J7jBg~7+tRHO$+STmQDHW?SYDj3MO~iR=^79gHSoWGZ#U4vAQp@0cQ`}8YaVV z3pl%PL^1_z+2Kv`s%>t7y7x%xBD!J-QdH7$#!%gDO&H4 zW}gNlJdfMs@4sc8m-qGVNBe*N_U_}S505mD&whgUL;kPu(cPLH6rCq>iOHm9>+s0g z&+Z6_Ol08?ZwRj_y`>N8QGz~?P=i^rA;`I{19U&6#3wbjoZP3K-A@pxi?JHEQPgxo zpSF|ktW@5$8cG@S2+~5nWb-YI>Gv<6-{psRytjGwqr3kGemw}I&$EXJ zXW!Nx?0#J*&%{_=1~+&)vg6W#N$+Y#=vzc`xPkFfz8UfyW9Nc<@3A0e14RKc=mI< z-lw_w@$NFfD;Pns7g#?D?#($JEWK+S&cf*H5{)$%R+1}W z6-6Ke<5ynzf;`lEmxbvyo-+Diifaj>_YRd^3XUcCV|L!>_JuubFsk6%3WR;>QxDdZ zp`N?unw@DK97U$j(QyC46jdw{0(RWGvrlY^vUS9z zY_q_+quL-{oUY4VJfi^V1DK3ZXxgDQ63QS;Y@;EymF}g!~ zxGzlgH^#Hw=L{lll!GWx^l;^QhNR2p2QTg02)t)MySH9b%(rk)NEf`f!V!3HtwR8B zGPHq}+OXY(C=)wjM9tUi9i}$C0M_HkxhjW%Y%^*E6VkLf&I$+$*3Ptn3Ah5zJC2af zQy8+{P9ijkY%*0Q39~NL{<8tD4^rT?0SwB@ZDS}kSl3ReECza)R=~5cd?Oc*pkAe+ zvKy=yiwqD#7mO-m_UH@SbE8~j28E~3yW?-xyO;O)^F1n)Kl#zUi3d;$1I@gYy_XQE z=D6b}5Q4#NQcRF{V-xH+k}7R>Fk@m(kOWCHfM4FwLJ{kV@>LG}Ydamo^h;mr;F@Lc z%cE=q@u<@DE)A@60&LWXX2J?s+ZIhc`BlJs4;*{X!FyFyNU=KA9LSmw_ETJX*0QiO zp&~(~mQp}I31~G-8-oA2hYfg?85nfwkQrPBx!VTvLn_O&pV{qe`R(WniFn`wK4wi6 zcW7gDF*Q==WYAf40&o!nOnT+hku=ydFF0i5bLoy?`hdM9YCGuIypG21J?5b+0_tZR zREXLFi2{g1a>;uIb^^gc4Poqs5ov{v&g5v0BR0K<4p@2m94kh?d~{c^Kcc z7;)K4*AZ#ivKdIx9jMz~P-J2+f)dy2wPT~$De4zVJ~r$Dd7S2fqaYiyxvi>&Zv2YG zH9kR~1s}J#BFu_BmG-qF^pQ6-C+*ohY{f4e){?SmzSR& zIx(L7_--@6-2Z;=EploOlPE(*R@Mbez_!=H{Yj2N!Lcs{2BYb@=CzY(ykrz^3T=6x z<)Hkdc*Lk^x(Vic1l78? zr6{Trh7iYCJ@$reWWpvVAPt7&&+9rAah>L;5lnyUW^GYvZR&xo;9nJ$m~? z`aApdhb!0p__+JjC->IvlnFl~DXo$N_|g_;n90fL17=}593#nlV=!AMw=qQIa(AI? z2!6q~9!!B?a%(>ZP97XYc3dAT!<{9^vqT2;d=Wa{Z$Pdp8f1@ z2M*tkNJ=>!xhRW`ds|s7Y>6fh8Ix)a5R^~%nxNoI+eT!^b2-haZNc*uoaj<#n*dJ? z)3Ho25pZDWx{jKl%6C*nCt=xzfoSSpw?m{~v2OL*Px2S9@I`5Vy`$2Bj|2QXurvjo zW&jiNOt6gvl^&cPv8n0=B>-4b!Z{KvvC+byJ}@S&zL60(UGY{uothd_Jcvap-yyi*XhP*i#xRem&k#Q0RI&%-eKgLaP00JnC2l; z*iI{xlSZH}g#luJTbuf5pX&XWcRzi|pC3{Kp8fdVY9ps(cshJ{M~zE+u6_WthwU9o z72M2DFF^bT>PIWw)V;x>s+ylLg6>iEok#sw%#$ zR^I91lraI5%56bo390poLjG`u{aN-|R61I$W1Tz^84^|SnBjUG=;~8wIT~_$_DX}0 zf?ap;-lz6_Mc&0VV6Va(B9)nAUsjP{)}}ty=MO*rx!#>mA09=Pp8fRhqxxTCEuz-d z+FY<$C9K1`&apN+qe9RyVcuX+h)se3)PP%9klf*X#~U^-4*Wv_V4HenjR5zbvu#zM z3)^c^!HY7%(8ndNWi{v>ZYL3#p6&rq0|E>9U&*M(0XkY-#!H(rTfz%Jz3)&3WDI-8 zoeTh4D{85F+A#2AxrVZ%xZG(Vj}N;|xrg!!!I+^`Dn<-hBM&Y!Zk86X}_l4M-ak3tbBXZ`PJ7PpZz@F zdYwDsGo!$#8UfKP{Jh4Hh8uEL!X&-vNH89Ct&VKhb{o_8DGj!fio75G7rikeR2!mk zQq#+T^Au5#et83!Ux0FK9QXO3%t zhz>raO~`5TsU+>`mMAs#WY`oHsJmlRrj@xH*qn+17NT9omF|~4lHuR8*j@09dPt_@;IJp7g=83G zH(q;eGbz6Ulz>a|+=KDM*9=b7VkkR2`+^(!b|KgDS~WxcXS!{|7#^Si@^Y{QcIUM> z02(o^2!HOj`k0_}6B2`ga1yOnxtVl~gdE%kIi0z8lf^i}bb{v%ZWKFxTje@|$-?bD z=l}jo`A3UCz5Daar!PO-k6$l5k3O)^evr2Zsrhx|S{)_*uEcweVaL`W%{urq`GQ8N zYIicqKEOG!Jm?EjHaX#;9cFP%a93@IDR*0k5eizJ!eSbq%l~b`2Z^yIyQh@(8eIo5}~BtCJk)B#5c9{Okh9?|0)1XA9jv+ z8FQY64R&tyIpFIBP4=XD>nm-<_rT$|AJ}h)<3HNVW9j2lpWXdf@%1&`8l%k|m^W+0 zZjL|Z(si0-+pELTfMaPu5@QqkU*BlWpMZn{UnLp~adwPkS>c>@3`@>AD@%2iyP}4P zx>9S^D6CfwHJ)-CB26eTN6*UMA)*B#C1}8)HEnH^X`LoQ(K@hb1-mn-yzwCrC5$<-!&S6%QJqw|X@pYUWt2e;+IU=Fcx*>hrf>*x%G&KUO?c zwLbar{i2lsWk8z03~S9RoxLxIGxC6YoF~_;>sOz~S;Y$rPLP;KUl3OJKEhN{j5&cB z+1i5iF|bwe{?oi-@aj^Lkr z&#|r5oQJTd)V+3x?5i3gF}p+=m-i)+1IB3-)dQb)eD{SyY_OqF#l~O`7;VT-JHC+C z6#+uxDpj8S_k-~-U)6v4_^G~p`P;km;nPp{@FV-=r+8ac{`Ts^n}fbIKu=SRtrrq+ z$+ML@ihMy}ceV}|HASj};VQN^Zqacr78H_nysEGxUVHNO0fW1%W=6Czj*mSXozNnQ z6-1V&)m>r&0TI#=*KvGqSps#r2(5^I=0sRfJF3}NbV-j*KD02kLmfRZ{RL{-7K(>} z-<&pQl<(pN7gv`J-kSF@k-J6u$vq?t!iDbDOb#Iw*xEJ>Z06_VnG0H6GTi! z!^I5QrhUbvvV=cT;314T5cQ!&)X%$i z6(F*5p5d{FtTt*P9Ni9vhj>K?0fH1`ac>fW);IV!O;B$>14H&0U7J0AUH{L|AOH5~ zEd1nW_r^=w64KVRA;_9X%mcI=q=bCEyJ@zrn+<&4Z6qXJIlWblTzUj8kc}xB!}|re z@(!eT15C3dqsEFXyJjm6Hr+Ssl7;!P*Cf?DRgwhv%R% zTc4hLUqk-R$Df`1t0FVT<=}hc=k*`o zQYSzA>AmryqH_;RnQua7M66 z`CFhRXI_Aw-DI=6ILmcJ+{o`E6^@o+hlE6fa^hA&kSIbW6uq_O=DVgikU!1thD>kW zR-gUU-U`8pL;9Vm2Xj~1oCK;2Dzmv8h!xmjpGI1(V4)aN6ElIXt>Nr(9Fw?aVCgt( z^4a^EIdG$zD4eV$yVy)^U+D~UC-ee8Au@oVwrKKrrVE?d8W?n)}xMB;YBx>E#@ zUKFejZ0#(3Yw_Y0G$a6Zt-bxs-4E=TZlP6l?d_Ry>p)ou(e+Rd2B}74Z=TIoa{6e; z0?RZZq1EFq(=_0D)_FpOJz=u5GM#GxH5H?uRKQ$3PG)s#Oh;*|MZ>*nSBr`M^&MG<)PEBfSzcc10|x}U=W z!&`@COAhdQS-2&HmJyf*jz)owc`n{KHU}FviA=Iif@te$!gF@=xL7Np`vAO$ey#T4 zvlYo!29Xb1wjC4Q&1nsd%wMT6_t}r_J|6rvy<{Q;s(%5C*vsOGVN1!LK!rn`cqZz0 zz6a8qv$dSCX&H!#-Uhzc z2{`9l&%vFsd?H=6`bFVyN2#0JAe@Ry_bIwU^SgO$r^BGX>=oSmPM&xx!%M>m-zK*; z{0NqDgN4S*RU7AK@XDmL;vPo%`Afd5_kVtrTYB3PlMeDpyJNuw4w5A>u{6XS4wntN3B?!pP zy%5hCWVgAcoB)ZAzA`2xmEAo8S3R(9P|#Kt6l>`0tq2P*!5sz`6mO?3G3dN=aVv~Z z0k~OfW8jYv*M=+1`Wbf6IrBCJ-I`rL4|0hj@i(D^RTUt* zM+Wb4YuCsUqs>*mnZG*+-E zXT~`Td6E+gD~(_@ssfRNCS!!y9qBU4X3Zk;S<~NhQMos z0|qeTn!7ht1c~=*h`Ve(Ks_e>hzcMMpe|5TH-+Ozq6w~YaE=jUK5Vm7rzMqg@Rhz1 z>}#MU?$vKkM%TymtN82ftC~4hY3I7L$Go0 zBR4_r+7ZwUI^D#WxrtJzowoPpi=^wPmMu}&+^MTWCc9Ji$PVonI@7pIi`^PA{Hk~Y z4a<)48t>^)&0v=}Td&~&-gGXk*<2azPSJ+bM`2-;1U}?YDr=_upy!PY%tgi_h@>qM zCgcPR-ARHrot+BkYs}j(-haX?`pI72`-i_g(!o9X;k|{*3P(>PkNCyx*%WKhO79KK zTm>Oyvc%%W9>vA6_nD)gIO{MXsg7x^nJJ3fG*P8R5IymZbqdZM|GYqLAV&4shzZS6wp=^jPWD<=n3oZrX zTw|HenK9O^#%Eru=tvV2+f^>DqZujt+@5%Uk8$8Tkh>oZ>!1AS-Wt{`7->D$X2)0l zPL%AeFP|;XqJA}ugmW=k-&>Bx%Ay7=G4y*Fu7|2h0P)o3GQx&ou419Kt9KB^B@FSP z1>T$$3&!t9_r4thVxEackkcG;_M~)RhzR|d{-k&_}9As>x%V&*0rrGeAXGU#rk4M>dyChg?g1n@uL6@4^dc=A*G_G13W*C8PN zK>zW-{?~u}kNN#yDgM>F*H5jrC>f$NX|#i}Y8O>%JkU?!n${u-???><1wwLcx~iL} z?Q!CQi>puR_z@88yHA+fQMabWr)2}2WG(FKM;vXN#8qg^%z2+CEWAdbdu&AyurP)- z-`w&ll}~W%)u)&3>TT0G!fgppTo_?Mh=qMBvs~7y*ZCT^t)fr!*1$^-_27TTesun@IQFB=wv{`@J++WfU?%9+vD)>uc+v||NQ*dN3FOgKf2pd{5QRH4zbksOIg|Ctx5C~}^Hm#pfN}VnQLJAA0+I;cf zRCk}^9FS)rCMS-!Y*Oq@hcESZxCFO=5JuybN2tXyf{3TfhPh=+^633y2KKdA=^iDs zav~xiBFlPj6A+`=AX1H(JOS=qIu0$9(WNRC&IKvnoe_p=s{8sF-~G~lI{9b{@$9E| z`)YpM&j^g~GpLU9N3?eZZwj&_bY?L~VDJ zO<)DfF?Qfr6$yisX5f2{ePrO>tx4=7r)i+C?mHlAg)jwFR?AdB3_E<=n0nluoBky} zeEi!xd;hmDe|-FF`s~MdFU9zp`8`BSs29V)e9+jyy|1YE2@feVgeZhlFJ zfyg}Ii(8*tY4+V$7#&m&OXpl$d&PCbm;t9~t^uCRpsU*5#C=5S?X7jRIlD}Bgl1-m zp0n%nriR--3ewxsj*LRL){ZgOEF0f-t8W?C9AG!;=~zj^3vZ`Rx=33xD2cP+QcSZ1 zmxq0Ek?-sf8sB;x|1o}i`T5aO{MnD~RtxtH;6lNP{zkXjve)Dj5Lfw#b(x}J*w6&5 zR!TPc%s?dtSj+~5;vBa77{gs)?6#=`RKdQ^9uN}CBs~`iy~}8YPa1>eOJ{Q%{q8%r zZ8Q%DLbGr*;(-hdcnMOP{eb?R?A%cxL}rG-dIHumS7ATd zu#bg}%n7?d?F#`BH0)^mKDNN#!!7=x_<^MpI29P)G*`l`{OA~UVbW2jMnJ=?A8716 z8|cM%^L#042U;G0?oTI%soQX^#PleanUXc2ZKxr}Y&5VU#Xo*Q%OtJiWbAFCjFosKU;j{F-i7@LwCH(x$P9S)1H2zCz1qV1 zX61tu35k}UlW}Ra^%Ry$3%O(1?yV5>su9iObQ>6dO^G8jmI_4y35J4RUA(9o$g_ed z>Dy=ZUFJ*JJr^iK3F4XBu3HS{;88n$*uG@*0ijY32n{bxVIw`lCg4`EFJ;1oACuIbBlwTgsdxqRWG#l)C#`3Ak7HsA-KTy^Wn z%h+}!+FX#I(zGZmx2-zy>k)#vbl}Q`N8N$^D(%u++?l2ZfL7q5Ne3j=5*4o|=#{~P z9p+R3I0A}%{G5$C#$*sk1E0Rul|qjdC{Et}`6WI->a0F{^==bN{cHNc`J^C>M|1Az zq#Ehf1+5OIDoG?!jgBj~0bdpYhpKym|1@NvLBhQjf>pIbLCVxw<>#nFRTr`+D{Tzy zxzvz4luZD5op)f$066Nb35XQXoWjwr_#kUw$aJrOc__=8RInmFyN(m6h8}xP#&x}q zE=bj$s%T~S`%_t~-r%8C0(uQE>I(h>b6hFDU%KmJ9&#?g7=;*J&>g*s7A?A$XO-vo&^U8gJPTZ7Fs&a8hq2q}!*BoNeEQ+_-J4$e zXRqFkwdSu~IKXoeU)}?%z-tz;RV{0@Mze4@%!*c}^by10?XrakF4`3ZplKv#@_Jna z@yPsW!*G63Hcyu7~~qz7YtjY@z`tZdH;~^u`qaGJwQ`U*%Shk=7fZ2;n0&M zYsJzXuCwz+7$ZaY4(=is!u%SbJa(buthEJHnY2!wuS?>j9js{7k@r21Hh`+yrpK(& zHz^R$Uc6h!d5i!E1&S`lbV@Wnx;PE&qHO_Xx3mUo0f@wy z8mtCEU5>#XQlZ(0cT}>W>A^XM7Lv{Qe9e}+ysWQ#Y|E|!_OIKbJh@DQfJa^+d9E|D zaG>WL%+933IlBRs8^j<6Hfb1w z`z!G7pZ@UaC4R_1=lgG4`>(GbfBxk8gU4Jo!8FF~11*`+fJrM@>NvdoPnTT z;8a1pA#IMex8o9U0AtuFf3+zG$L?uB7VYIo01OwMvGoiCny-U|UfBeHi8&m%W|FlQ z#cUW2bN9Y#9!x=?cLGD-?RWO?j%4`k_50<+0>Ipm@Ei6@<@ zCjijIF!SW@;6VDBki&0t@gA*+J11b%OJX&MqI{jYT%(4>7ck<^UAvBfA#idqk8M|s zzKDDVerkTf)vMhi17h~Enr2q(2miV72LR0&17K%dFSIaRoh=L(RxKU5MqK08G@PNz zgcoqZ0Uu!teXNE4xhSEHf;4ut*_F@1glhL*c%oM---Xlu^mD#@dE>V8{%n06?rj?C z1|iw}YF%$|M5irn`%D9^^Ujdrsn!z=#sO-F#TFw6A$cDBjJZ@48aUKn3BO#0#>f}L zKQ=`-oGAnB;7hECG4V^YioQ>n)c|iH+yVD21gkA~#P!tPH{<^4<@H_uTi zUAs5SOo@IY5Mj_u;@!T-y!dS`BS%`XnS(ptt8KyL)x4 z1}OJHYqhPIQ$q5c6X`(@6$zrw_(Ren^wgP`ffP#4ze0MQ5Js z8$=+BJYzH^-DI!>RI?gLmQ4Ka3c%BGHgY@Ajr z;tE(}j{z>QQWDT1fn~ykh4Mx-ZGNM-zsesBN+k(^?i>;6 zeX5^4L)9Il8$F5;QB-{EcCL(BQapmGp(42^jU|Xj5ojE@k)|I$ou7W6KR&$oJbUTx z;}Y~WX1WHOWCa`U)@aO^k8-rEbtw8psB(?K#V?UADfqj9r0_9x+Rl@}Eux|Wa$70& z%!Ois0AmN@4v$M(eMy!S`G6e^SZKTL?ks6-obXa%Qew1H2W2M=Z-92<7$v5mXE#7h z1prs3Ghv2V43Ub!@tM{;=^`V64+3k&54X9Cv-rNT^LKdXdG-pvB?aU!9(UC|8f1HW z@oFSn7dHT$I?nCQx@C{k%r^8ElN2aS*SYXsBOC^-4e;jT3)CSt+})VUl%8nSfV=_! z5azCZIDFFT`<8vzFp6#5s7WA6Vsnf4)fUK)y7Qf{Z zX%U7==im{cLA#dbGR4(;Fk6@5vG>{MY=o}nzFfqMAf4r_@!!c-(>`^>e3}N@>&A@4 zM5<#LIYL)hYwGQGd@e92mkYz;7m8oHoqjQ@HhV86&~q1VF5tQ%C=UI%RH=JqLGY!i z8*@w;Vn%HdnFRweaWWWK2V|P$&2{b=4Ni|AfIj>PPKJj@?phTC>2j*UuS^3IrqlXfvN5} zNm@v1`G^qRIUpd|-B)9H2ud%l8{*uTs%v)Lw7QH|F((z8vA3Ih5_gc?m=ru`z>7#; z(2Fh0?H7GPhPLL*jnWbvBs&u#Z0c>nYm?DoGn2KI{Mg)ES+3wII6e-$+l=l9z)7B= zrv@)WwZO(LN8(fd{EF7VgQ)+L7w$gl|7EC-5!uVJyX@7+;?Xse=04RH@paSCx@3gX z&|*dlr5&$*PG6uuQbgM*r&%x~pgT>{>G(cb2m(#ah3^wM5jheOz=AgGXK!0~rWC}5 z7`KFZ4*3W+)C?iZD_Ol`WD|~ zz_p?)nK?R90;_mx>TZ26V9>XZ05P|m=EV93``mHH_EfYXD^M7M)49_wNFoHV&o#~g zk8%yXZ_ow3eFFo1hE8=m_%{)*JN{zAbYKEBf2LFw(%2$^F^@;2iwUsr)aI@6Uf^yu(z^d3e)#^7{Q^U;n?q zj^)_k*#bhP-cD;MPLGMfh`kLnNJWg3*O^ioT}Mr5TyXcN*-l8HriWAl=Kc;!-N6{w zMbw!qR}3C_hpcAH2(yEW%>$s+2?E?*mLio-Y>Kv%(SDqJMIv+Afj6S&$ z?=q5G3sh-Xzz_CK0+2|b2LSCUFdU4I)N$xkNJ|<;X%SzB9O z?5H3ms%v`(k8@rVy?9;fMdTT3ARccyAUO-EVXAK>E*p0VaadWqtf~(GDFVK{Y?5~4 z3Q9#fjR-LMbz%;5(2HtmXhV)sAXTxBk-~=Q%D!}%jR|*!ZKx33jaN*FW*}#PfTL+* zLT|S_pZ&}0yLb!k{p_WC3p)@{b}HK z*3bwu`~d=gD(l=!ntB)pdbjMXkq*Jk1iLw9NW;Kd+q`t}2asCK(6uC zGBDRYaZ_D15I+ENclOa7is?qvVyU30KITDHZbA_cZK98{F^;oGKrxL|P0r=`3)O@( zwR2mtPUA&A@7}$3-k%Si@$Sd-`5~O?+3WY#NF>$d24`M7wrOK3ctyLid>fzab#?>x zih4nCig@RV?ApfSir7;un;zd#E0zQvmDA^x6I+zp>A+qn?}Vp11Y>QKYO5aC|+` zFrbkg95Nv5v-f!Q%|D`^D${#*`{P{z?^WVR`f3&sF zUcvjhtFNX0#0=6bd~5cR#h@qdHrkmh@O=`w{)r7wWhS8UO@KwPR?NK-lVK8(@GKDG zyIG2%MBsUmgd7X4>y4q*b>#sZ6UoT`c6Yjyq4<~l9@LJo3>7X2Qm(tnyxNc#cprp_ zvmKQL(-spgPB2qWNR76EzOx31BF;bi<&7!*R$=8sV7xj6PQkJH2b>I?N{{= z$N%{HQ=UIQI{7|%>F&4m%d9KTj$kI1V~m=BP$_eiUPLzUxloHc;51x-Igj+?=xDE& z0434cZ2&gNRZu!k8XaPTL)q>voYjPVSx<8;Z5iLD_nRkdW-1=s{iN7KFOzm?#sqzM((9eM;E} zY+-1v0a31HyPNDGRI3yv;ZEep5=+y=TfHVNH+TjT$%l=p9DH|1Z(#tA7L=H$1HIw9 zF#n9WNotgD(F>Ubnqb3m^ERo5E&b`dK4i2%dFAfQ4qqNpT?HHlW{!5@i{F>Rts@8? z9}^q!)j~33w7t#JF`LSobikj6NhSi^oMABHjw5rc_I}W+2E`amZcuY#!n`M&+p;r9 zZh~0&mfgd-nj7;0EP!CE>}A`IGi5TL0Rh#no|Qx3Lx7@)XcCke*Z*g>!$2dUO~O}@ zqUXp)8oeD5wkJv(2U-$fuV`WRsfR#$hJl- z;ogA8-Qi0a=#56Gw9h@-@aUA)$DJx0SH1A-MylWggMfIFw{3iUIxzxG1N%ozRBC+r5PK?1(f+rkTdXXk|0YTxefKLZK*h8mO}ZdM^=1*iAMJ z&gXkh4f7iQeR|`+{~2G`{Pga8h)*A1;@$c5qsk-n){|HB7wEkHeL_d_0Daz;6pIYh zkHLaF90j-{dI?9hZL4L};aJB{$!OJyM6QF9CoIOB1D_fJeuY{=T0z`nVO9_mpcaH8 z%Ls@n5pAhKCAa82fR#r-DO#&5iCl#$r!Flu~=};31l|rke=N>yS z<^Ug`)jl8+chzeIZn};W(Z*Q{w-=0V45)elWDtiQZ}R{7ZIk1C`t!?&H~0A2i}}_b zyP!g{pv;7Sn<W(oZ;4g8q`4BD_Yn)v2U0?`!<3av!H+%e-$2(D(KuO%(P0ofc8A2d0JVZ9sex;sUg&ejK0+9{sJ+n-9O$PhJO*+asK_vxV7{LK zXcl}@h8N161G%fd6}>m$_X`>7jzQ$eyGU`4j5U|WR%w2K1Vj!QACq~aKxa?U ztcYc_1L*?IOUYb4@^WY5tl4`Ix&@(pNFjPaffkb(vszG@@n{#gL?ah~+zm&c?qNVb zwC~!Dn=Sqy-?sSu%ZH!;g7@^hAKt&%qiEZ+*YmAyw#k5M!zVhj%?XB*k5A-79H|a*|oz|h5lao`CS6~5ycAte?+c5C*+F5R^s*PGm zhGxW8NEqtYb7is|*jfk1S%tR9h8AZmMN#JzwE=PgEP~!g+fJ|o$hqt^M^EcbltdP& zcURql4{k&@`7$7{xoM)>mxcCQOs!RZRlCM{>tX)C?{-<`&ByuKEBeMpTbkm!9&PjK zO~JG0!3RKKVly<6L+0Umx=Ddur3k+dqDm3aiYWTfn1cE5KxYo(lRl?jP`qZ78XZQ( zf6ovV9q71QYrgG{^o8pO9zgCrHsXOD+`UAkT9F3ThR}c03+Dwd^31s<&?{T1AvV0% zksdPeO zn{c15)v6k|*$*s456;Obl4{<-S}omV;?^1b?rw?g`CTunLC4 z1Aio2ZLO@nbaoF!Oqt&4?%ACFPuVZ`v>DT!$|H z>&#PAPV}bLtSO(_WeR|XJ0*c;%GPKBoo3+Hj}eYk60{j0_FQIOs1N$0+>?6ctlY8V zXsv~~XjX0C5@%_Urj9JK-NWSEh8*36F7NJgOiS?It^`RK)~U}6QXs3zDV`kER_Yqp zaH8u9ZhZ^^Ankxoy=NUpei0n&(rmNkr7Bz@URDBN5eu-^;9 zd}Ei1Pp%wlia-RO3UC@=QP}Fu2}PNT8vBI%xv&zrrfO^A!XncSjhMA`Pl#$krv<_n z42fDfadK|1YTW_lDqd?|FEX^r4&8m7m$W@%v@VBnQ)*2oCT0uSUjX&5IgFHHKHG?q zXpbHwAqj0%Z5}|%7Rc0Ke(z}&f#I4HMtu&0j|Z%Xsrb~7h0<`RfGWHC-?&Zv`Q-!m zH%lVVUduPOSQ(K~cn@qN>;voqNIuq=XIr|3ash35tVSP%dZN{o-7yv+INQqt!HFP~ znYuTQj{^#;WE^r=p;AR-gTogKLI4mGvvy9=JDOk3y)HklO-Hsh+6as*cL6bAgzVO( z!&HyxF3bQf{ZvxI!+S-YeCslxpo=09KXfCGfV0qS@ntmJXl3+=M z7E|-CZxlBF>o0fsaY5wSEBVF-2U4=xb8}8Ye|#!xaxGUl{%gY=M4%1q2F1ceRIk7+ zCI`z_rogfs5UjfB5EN43^mEL7W6V1S06hI@Uc=4mk{DN$-sJS#Fb5>uqb4$vh(JiI zaa|u}QSIdley;M86rkYOsR?c{IPd6BZA^0rhQXTY+6#b_g!*z|%o^8}E1xJfn>K=S z*4G-NgH$|h^>qv6{O8EekjuVtzIyiJ-FFhdj0l0TbkMe8$gX$!Tn*wB6;0U1;ZUJD zgb^df*xWMsjC6V$Z)=1?9L5Q4rJKx{9jAcWGuI&4Zq(hG8J%6>nOk~C_(_K`-9h2b za2i03ww_MuXT`{EFk0e!w);F96DtF0eZTTfyU`Bhg%yRMxpl8L2Odq4R1$8Cu;s;y zDDdA9aUYbeZR3C#M)z5`U)|eCUtZt6!83XG!rhJqecRAESq4%=BqGtbN+yEu9Sl8$ zriTil$Y8K+pm)B(f9WeBT5N)J!8DXcxzCO}3M1__2a3Rmsdzg>@uU%SGZg5h>ZO^V z6m@$sVwyG6_l^bpEvoQU%^f^bJL_2D*Nd=g={)0ff%AsF9c)P(K>F~CCd(mCqBw4H zEV%bCp~THq(=rOdg6lkUkE@vXbXLA&yJ=6$! z%78qhA1KTsKxEAX%P0ax%S$P!NukL|i9@x*QZsG?lK*l!m`=pU58xp@s#QIC{cdAA z-;>O(B!EjGxSP(X4J|`oc^adRvQfE}s@B@Z%fTm7Cv(tMUQJYqcMOv=&eSdkF+rn( zqmY@b=a^yJYpa^kY@@9`3^GwqD0Oa02)5St26llthwSXT2ma#{g1eYw?qKMEzliD; z!*eC=^bT=IqYe+!JbM9ePDmnS}SjUk_ z!W9lR<)*BY*MZ|h6qvAtWbg}DI!k+`RacOa!RkL-6HNsiT&Nf2K+ndt@C*}6j!hno zq;>Gq!()gD!F#Y`-2XRoq4nvY6gNrp>29EsGH&_%H00H`346|}5d}vIO7jB` zKg>p(VC%S!mbq$P1cZgNu;KK{x4Zgp0E2zVPY0vaUs(u`n!Qh6#9Nne`^FmDijjK; z@xHAkwcA2lTj;R?v5gMck^5-Q zF|^JWRzlKWP{v*4PDJ-633d+Re&L@Jyut~^2h|~bj)oWPJ>Cb3v(Dk;I2`W--dUuZ z#(>&&^oz?Q3z|!A3(>-j+J+dAv~_5Q*zCpVJGF5^WOjUS9J~n$``4d7ef$G1JisHo z_@ljk_L9Cu3R8?fVD_k%?=49ScVU;l2V3kwNt4gT1mEhD<>I@f_^PqhjunT@hzw!e zI+mr*v-M1}A}J)Qf{joUlxA$h8u7pIxwC9H0+)vOu{gC(K%|YOykM)R2G+>4+L!oz|@-i1h@Xf`@Km{6$nuOOtb{x%Qp zUp~M3#}D=L!<(q7XRqj+JB`S0?@$1&)Lqw=L)erRhZ}Va=`+XHjrk7mn=v#S=j7?s zkbc8RabJ71Z5JUC#D4B6mZm;?NBGW3){hIftE zoalng9T1I)QG_=KhRU53)n^^H+6JztPHxOIL%7}(;=_%y^pwrgWT1?Iw>$*v4S0mf zP@u(_WqO;F{l_}5pWnLQK6~kI=TE+CE){2)PHiE9*~w}6*k<@h_*txTs-&VqmS}Xq zf<>|L!`&^WaH26{r1A(~Xc&tsxRV!}*ua0Jl;1US zuaw-xJ5w}M20MxQI@EE5RD^*WE{o?FCcmPD&x|wHL;-#u991u(E&`NcQS1#fJrJ%l ztaGbG@nYZZP=6hSTryVHK7ilfKBD>IPwxe!Jg+wK%Wqz@bZ46#MWHcI z8=FTz71FAKJgdXzfRe>?;Orp|r+PGDg?I-QBfs6!f6Kr8^zlP}`22F-zq8|i{8;tq zd42LCzNOMjw8BV%q_s9T<{tt0p1TQB45?lNz;4+~O#n4Q3raW$3DV*4M6O{qtKlnx z41F^LrlUe&03_fkXmrB~!4^jF>c~7mK{dZkzP5vTsS(~MoazGcM(vDjAbc!eYkJjH zU|T*wmEj*l){w(6F*MLN3GSHWSvp$H)_tB;c~T*R=$h+F+~~#vU=TF;&K&&@ zZ+uOky=vcf^S9rS=KQ<%_5GWE)y)$Y3ZbN28vxg3GorxRhA15r?hy`e=vV}lfh8fs z(&x62tPMLuEpJl*Y9e>k{+UqC3j_o2h*Cjw$LXQJBl=Iu~=;zT9~^eCjH%&23QX#C3y;kyydG^inKM zC0}Tz`ii^n=|BJQ>3G)9@88wKH}I1e@170z#TSwxMO`do^<$o@NZ4J}4~`W&c|+cY z0xe{s2Td0c*I3$!7&P{{I-h;|27)++0OEr+4*s#x2#Vj%pi+$9G1WS|ishPAZQmA* z%O%EKt!ps|^4=y>#MMJpN5$cQHh+>XzMr&-UK?O*!mO|+wK>gET|ejz4U=}*@$EuA zjV5}`d@!Mf6RB4pZ)jmet&-YDIZA)p1p)OQ(}K@@C2CZ zU`Ah6+D@wt+Y@Ts>?CWSC5-8$oIsrp%s#Xl2e2mO>=7Q;6?>c(OVq?f_rOdK3IZOz z=D6H%)DI#ey_^P`SR#8y`0d{ALsr=s4{chEQMTL4-N^*^|J573+J3=9bkhdNy8oa`FDcA`+I4Mc}GBiVw<-G;T*aw80vT~C7lAM9W$utcb5IJvfISOep)XZE6z27*6X&#@r z-4B|h&DISPs(~;8#-K6v;+t7O0jYf(eM)Lj^)N!3x@cg~A~hjHTo|NLMkNNfwP6aw zMn_i${Gpz>#pPC(g`@{_+Nivotg6 zd!voQQ`uG3WipNG*KiJs0a=19{HDPXS6C|=sv&XKxg99@ySbn~d);m?sQk5=bI_bZ zlf-ez2kYB_LSdj$+B_5Iw-tTB8F(D+l+)&Nj1;eMHbNQ{Hk)f;$pC!Wfj^I-k|W3P zBB3q|SQ67ne7fjd-y2E4Js_d3kKA4xgBi0ll7atqxzKh+KUo)k> z1@lp$D);~hglz9T!yBfbFNXAxq`J*8o$ll(oC~%ZR5Ayejjd00XVe!k8GX1_fky6I zdJtFGDIVQnh5_khh@kSeyd}tDW9iya4LMM2b{6joy)bYXLN_#^ctT|PW;1{F=ik3P z3`RVA+1`5BLRvj+Ljsj}p;>+H_LxEhI zPltIB;>@1Ve43qZpnMnXUJIWSaGy>E3}F+7zf}A#GaR&*JG$H7ne*e>tM?X*k+qgh zi5ZB@?Qs|(i=KvF$aPJRF_26!l$Xm8CkGP|LL^6?1Wr0F>0_dckM+cKnRip$Az-ez z%ejq{n{)HgX%lQj$hX#QB4UA20_l387iyTgp|fxSb(93T(5tk@$G{;$6znRr9ypFx z3;c?m@*2=e<)huGA@z?Zd+ur>#3(GxD6mC*)h0}M4LkT7{nbnQMI!w5up5~_z03di zQ6}Qq>-TM6e}#Shf4-b^Wtxp$ZSS)>0e3Gm7N&?Bu2~HYtCj;@>{W>|zZHNduqDW3 z+ZfN#L1P!}#6q06_u8on=*y1kvHD;eg&9fOs0VZ{m)7V`34t}{3zCWrX&rR|e3%j} z`Pc_rIhtMm`gVmj54A{G4qIw<6@+iS7D5g%4p0WoE}W3^M!ULcm{XgHN*(B6s;)>w zkqx;^j(&dm@E@-~J>t(id*R+njs}8F<8tfO(s7o{-jLbjiq-n&W+xpt@|H=ZfR8qy z9!+Av@Vb>cb?FPT#a5!HI$LLyT7jZv2!iY=iHm!Cd;{PgIx`|PE=jV$qZPE<4n@?%a0%N5+@*n76dCnND4 z1_Oy#LxBs0XVr~Jvy3)3m@h>fGYuvVnM=Ki+ksWp$Rcpgf$q00{8B|)byG!-%!x~G zG1Vs0XdYS%qX|G%ySgGFyb7&~d8DHl&thu>9b3L%K>Z#{F?G+(pe2D57DiZS1*3m6CCX_Xrw*@~Y@B<+ z7r0q>Z-G&jU9Cd|x_NU)aRf)&)f^%?OduY_1lIv3_BJ>QzSqIM?ZRemKRu{NzfkRa z0&F-=BBX~&ivjByTFAhw`bxW|THw{9(8G{~#~_CG{cNbJCd&DjoMqUCAHHdq*3eRi z$CPh_-oO6+dHwk3hsF9QuiO2x_sf3nE#gjr7x|vYwgO{F>9txwYCc(6ohG_^W5s}S zZ|UCc(DJ!>Hto?F3WH>YkZvdU0IYPZ;z0ML56(InJ`L|0;4lt?b!oTF(v=5i9~f2= z<52^8JHkk(;{Vb68~}+xcE26{ldHDNSJs=wR|lwX6G2;-=%~3ZHb8iwmrAh8rK+Q9 zvDaWsg>ECoad)Cxv9*by;&59#I)C`nquAh+7wwmw7yVu9UpcAdd?ppXHV3K^1Z0vB z{GV!~g1|Yo0Z`3MfeUd|%}^7sz8wb`K{dMiY!}u0uu_yS+5z=89|8jw4ho-!;eI@K zJEf4!JhxZV-bdgH-_~eb2Ba8{3z=*_n6wZlk~mX=MM7wF^tNZoq%AdD=3am(IX4l7 zKNymoaZR94nIMHBgNa17MGcAxH7{ttn#EwcD3mD!7lXc^I1MO{h~6bn2^hwEsG;4V^1z z!;JCi$m5Pt)p7@O-M(xOMrdHO&qFfd#dhdngGP#zku_Md&^%U7fk+Oj@4dLz*v)lK zjEA0uiK>l(QEGS_r(5H-u8?#MK(P{7>b7y0-HP_yIS8=azHIaLr%(AP*8A*rd!T3k z%Fj#$HfUn30dZHTwA~7&=Mf8@Wf=63J@*1r23(z)1jk5Nb|exr99ZLP2 zLsbJVTM7&-fyPV?W+;JKMk(>(xP3mGoDC`GQH^z4Km^(qeU~shG<&AC#R1uX00EbB|uWSR8&feOTd)6?3=E+)T$#{WF1{ufrWCR`7}LR7yp0CS#n|ZVf=!>Z8rtx! z3Xuvl1qHG_!<j<1tLY`#ITFa4WtFCWjVHGL;-u>=WWdhOy;!|D58z_gO8)s zVLclmlN-X2&i!Pk)x%-&?tcAE$<{D{Fm|{e2o>-Ob$}CT4;pORw;kCFIt8S!7aiM0 zh<%rx37yt$&FHr;KmPRb(`VokUmprtp1gXuCHrqCLYyS#7jW)ye#2lKD(vLwtL=D2foH(QIi*h==y0l^uZ^7yy8lpkHj zs!8zofKrGb0Z z45~5=lUQ%smf`guh?--7)GmZZUmSL5Nk8DAE#FqsW)vzWs3D+Krho|FRvGvL9z+CR z$SEGnGaO>;S|J$M&YH8)I$lNXtW$FK8Bv^4n7}8M29zb*7&Z-{=Xt;(@A%0(HB7{v zh7O8PIF#Z_;Ubjxy~XxFfAjL;^Lr>mzj}9m%-2^~0=_A`ACX#~yplHur}q8%tpyf# zc69bgy-o~8mrijeAr$2b#c5UIY=|dvB3N<80e69DZ;Wg8OCdI_l`pI6ncg?CD!zdD z@fDKk$SC)yC}{hF+*EEuf@YTG2glTYfZL$6)|_CP86!|+yugec8+UXqCM{jKwe+(x z0e++@VFxi%l4!_v&3-cK==9|QM56mqS`aBj@5KkEjeX(gZm+7xKYn^tM|$?M-KGTB z*X=y1;#Npc@;bgwgVJx1oYq97&4G8KW5%;f=Mdb4Tjzz@OLmz!-O*B@oku$t-{_py zGN1&*;32dH4Yl~g9au9Thad(TlUQzJD~VZPfC*icM=g*8wHY+Au_|*gowj457<0s8 zqAVn(XEyNoud=!I&Ne6fE_2Lkd$rRDNY|J&(HWqF$OJHHyfMm%`W^bx{kHP(kNN5! z1LMaJ?>5g}y4%v=H#Jtnkl%=ff`}Y4LAm8LsK5qVL{$S{H(H~q_^2+x85;&SIa?&O z^$g=cwGM9rE>hOKV4>jIb?pr-VLC4R&}7bp!3wF#X4G%5HrBB6xTS;h1yrX7ue=7# z7dOm&d!W>iLX8o3z~N|~KD8{)Jgxd5G)D9=6n~nhPeThc0E!DcfZL+3XEOn)#puzp zc^LvyZojbjw))pGRKNmWAHRQ}yok4(`>pTBL*Wt*pnOpI;+2AVtAnZcwRDf7R>w)$ zo9*6Ct<^aVz=E8sBb!;hPa&92ryPOtGP8rlU^8~_=TcTgj{}g^l9*GkfFt$0A(=X7 z>dLZ~s69;3L#OjX8Hk<5>J)Vh{#5~TQyt+B!ADca;-o;{~A7 znhht*;nT+6)R2VHU`s`K_BNyan168aw{!gHTCFB;Is`#DUx9UO0z326gIS9z-xN7P!!LheL{XwTV%W zc013;_<$xnjNQQwEdf1AHU{m_7`q3Y8cOdBY;CUL0PR?W-yhBm8>q;7?r z_r?Hvcx)$lC(mSC_}-3TE*Prmur=LwQC~m){K@m(j|V5>hiKX7F5i8#?aMLPI8AgW z4&M#TiO4e@G*4#6xB1^9RV#kGSF){4&C(8aJpbY5t+7aH>Cy!y`EBmTMtpV z>6?=l>;@PbSm4R%>1*Ackye{LY1nm;VO%VuHsql@xV05CyE|r?Bqt*CdzQ9yD5Q;J ztMP=wEH=`+xMEBUb0%d!hjLU$y>U({=pPWcT+6*UDKNcax6PUV_8;fR_kZ&R{OmQn ze`LQ}3Zpy5y>u<477G!qboSMA*Cak5a)G2arIdl9hxh|FknTa%wGoCxc!wjA?nWns zXiOr^BB@4|7(kk>uXSu8ecc$jx{SQ@bBqBd84pDYD?yEIoi?-ucrOPRQX;L1wn=M_ zNW538w*2IN{eou9tHG z=2qbcL!-DuBSgo8O(uleLslK0q>j?&hNgGv~f*I^siJokWxsf>6)k?rehS<2?J zyA6GP`Qhb5eSFC2f9}G)l?a{OCx`Ezp1C^YHO(;c#i(Fbpf(!OFLEotUQWI9B|_}^3UtGz8kz#)}eWhyf5Eg2w| zw#d~O*v8$WBFYq$_l-ca>?2|6NJl&2wgN${76=y>V-IRr-a{^cyaxyQw2s5+sZq0S zWm##`D(^BZ|M>d(_#ZJH{;00>~GH-@g9m~l8Kiy0wjfup(w3fKfFX^&_9FbhO7ZJCa>z2$B z@WWW7LmXt<5`{b|oD-Z7`2brXVoARU!Zapa#oQzVMAX^(lm&VbHyrP1K)5xnK$ck({WJVy)-I{1 z&3;%ed2Q}FD%R=awq*lnqf<%Wl}3wT$nBUnh*{Z?VpxTEK9uYemxM+8xc13#%`Dyp z#v#D&CalbMb0txayyVGZNaPu zW(jFm#jw=0>;iPz03$Q&c3wtNG#ltWPOk7q8~lap`$Rt@aiVFE;%rQJcdj@ci0LyXga0D^;aT&LH(BJsS53e8JpN9e8 z=PumshRU}-O)AtIeWH&9XrnWkEwBvB4~`=%k%nXNb0anz4i&@N+H*1P$;4qJF;BBccl@QwqC{Jm|RMf=y4lW1>{$b z^VrMhT+qh$b zLw@@7mq#DaC$HKscay%?1eX>oWd{t0)%9S^LzKw@ ztr-}2K&5Syij10IHm+u|@rYqUPtGZu6H$_V3_jO^Z-5R2IB(BHIJ1+>9yz$52y%#{h#l{u|d=f+H2PZU4 z(fd>YxPCWMk$-vp`2J6i@(#~lxcd^r*V$ocRQq+4Z}W6T>ZvZy;uvcpApnYHh;$&b zhBIvMxwm`MDuh%6j--A?S9OiOCg38bYYc&VksA_p8_fxzY_HJ+pCAKb_VTuJ^mmhA zdG@;91Dn6>Cjns@wGqIIPEGJG5bH+g)RlGvm&At0v1_c%VQG-wCv_y_2mv?)NozpW zc>rDN;~a#ir=r3Mb}?i!y|v*II#mqlL(b9d_7)nkHtm2mC@0b=d^U6}qu^&gW=j~z zF&Lc^ne>ffsvKn#VG+J+8 zw|{u~{0P7O>{YwHf`0pW@~X9aUDz~UN{pUx0wdbAq zIiT4dJ7J-e;b0@Irj5I_s@j+ssa+e>+!clZgCkReVZ7P>4%3X@K9fbE%(@rj&*m7T zuOoip*j5v^nrNb(9%F&!8L==x1fmfG7L@ouV;-a9klWG-Vxk4^)R1A)3+WYAMR5lX zCp?*F)a}#xt3ST~_~Fr6=-JD5Us3on6*IOkAL;OcHZ`E)&xM`s9au9#puLu2a-L70 z2Y9r$rE68rQ)P|CHinZ}TYVYth^|14-PUu7$*!Vw z-@#FWs0zi*w|h9D<=L{)1Ef?Lo$!YC1K0?mNY#Vxqbs<0mb%{xM9 zlQ*QsKsp1IL%y^&CZlfax&QkgKfHYY^T$t*3JT9&xwjfGiwCqUYdHF?8Pr`8Jc=%c zt^pA5taJMw-E-=Kb~4uwICy5CZlxn%EX(-&o17wr2 z(HFA26w=>E8|~SvcDtMN>*Z62;-#H}*>>2ZZ2%ODnJ*%u%o+?_$Z5Wztl81{KM zIk=z6YIF^R#L{(A0q4b7mo0G5Wv&KJ+3^XLp{OU4XOI?mEL?`PgVEd|9q@5tXeC21 z^G5gwEH?eqDokH0?;Q=iXXwqI6;@Vag7tF=%1>gPzHJbd+M{j}^y>Wn3-HWZ1w z?A;b->jK^uAZRuwB7qZF6iAQ98Oi6&m?`$ZsC(BQOOsuvJ8D} zIx`|8GsCbA`=>-?M9kD-Pj{;?Bo83yw+rj7>Y-=XF3I0ENDu^v)10o(eDfBu*0Z33 zM|i`iTrL|_zh={M=S$?@)_@*$z7l6g5NH-aK!)g~1{Qv5YnuT7H0-Uq^Tb6_3`!O- z4bWv~XtS1FnnCV>*1-AS<;da<_cTBcWE>5@zyiB0+<^kTA0iKcvc9e0e)`=H@7}8R zJ$mTg5~ZljO_m7NIeHpGco&Q!`wGPXj8VmEHa;3+4(ABIduy@#+&zv1uas+MqC9o9 z`YFUjQbZiEpl5;C=Z)LC!W8%Jk+2pe%5=9!=tO`HwOx5pfVO%dsHMs34o=nFI?z{K zuGd2&80NNhsCIg9R~X(xATc~^u%Q~RybA580F|CvS>b11M;>CcFArPiL5E*;S$_59 ze0zTvbpPOCd&~aa@R(tQzJc1SE2{g@fzk%vaWNni?yh;_3?|4EskTA+?ZC{V>Kvmf z=%a$9lsVCuGL)ow+3 z>p<}8+yIdJ=?LecE5*iFk0Fv{6{3_I#SqbPgC@4@h zf#BD%4UGwD+i;oXEA}~#3J|56a*f7~nENpcpKba=g?VEZBy3TPg~T zLiHnITpB`J$c3k!p$tOgf_x z;l7rn>|H~ol;&I$nUS=x|J`1P`l!8EU)6w^O_-cf5;H?Lsc_Rd%Uhij<0SRnhLWZX zX(!<;lFq#vG8IQ|>Z5@+G6wPtO?E4&uMNO>Tq*f_A*hBD?=o4pZna;1`*6PAtKB|& z*j^VCUPSeSG5|ej9R!gf(*{AIv8yXA8HO(6ioTn#YI}@YCLuU>76N5)GlRk27qa1U zW!TYZ;8_A}I23w#0mp=G$VrH^fG!D=(pP=56DJF>M98@qm?9uqHz0rksZPTb9ye{n zW!pkLTUukhM6tKdMHk|nSCT`Dw^58^Cr6YFN`G2IfiG#LZAlZ~2lUTV;$*ke`Pbh* zJe!;Di8voTal>Ac&J4E#Q)>+>x-~`R%)Un2oMH^`g%6*L zTulckzcLBpr9w*`UR+0RUdNvmJ-d!n59!5#Y9Y^R&DVBP-VLHfNxHuN$>@v0{Y3|I ztK(T08rcbt(xxYk8BFUr{h)8Hmi+*#D|jxn^s$B38q?3&V*u6)ryz>&dDbbB@M_vK zEYaq?sm6c%fZJ`{(-1v);NFs)v^;cd`ZmC`)3aX=Wu7qo1$uV_eT3ZwNVAQ~hb{*q z6chw!F-7Woo#EIFjL6ChoZmwm5o7{#vHSG_f@MPB4>$yGLzmo=JoA8TFxm`-ZygzW zP?`)GwRr+SH5D0{izDLZa6C(goj$x z#MZEh;GMCuIu7X66gT*im%G?mhF1h@O4@)JSdP^#(YjRAhz&C%M+}ygH*fT+UQ9`+tI#f;OQGUo%HJT8JVZbIDk*n zwNc91NgcoeLU=~vQus>3x#EmswSa7fuUw-kYLs(cnQOjuqcs*lqKu6q%jygp7+(&~ zEn}}d2)WYH>?~LdRRJ`<5)Kr|MJp=bk~5eQVjQPdFSYNN-GBF&zX#CsdoT|MWcNAVY0F<6G5Yk|AQMI4wA*U=!a;}-XMjFTUbZ-bU6q3Qv$x@8ds}Ro1mI{rmlc69sEzn(;evR9KLwB!nN6G(Fo2y zvd(0k+zAaWPf7r}!AuxPqR_k2zrTD_ME~f~d!_x8mycPgOU!YQKO;1 zwEK7!l=$ane0lWnz13EW+2&HHz-_WFB;t|~;}tcJwTaJq4%r(t*@Kj#1$4Vk zWY?cqOT%veUoezB8DIn&N7`GC*lEAWiDEzo$n z)`tA`?9NEFe@;+vODYaj%s_bYyOaEHUMBhX_WmiZ;Nt5?eyXRtbN%QceRHl65RBRfNq0mk z1K-lAM00MVSPKS*Q7S^p1Hr34&&)s%$+$N6eHKd7v&RC-8Uo4gs%v=mq+%{VvHx z8@2?Qi^;vxP-PX&aIX#L4PMOsqOv-W^hhCx=(Nr)faRZm{rC>y)PH>UJbZU5P!Arz zH!DyJ?B?RKJm`nmIz0#$yUqkQsZ&RJ012=)OB=G#q=C66r{EOaW2nxy1YaB13T#S! zb2brGLpY@%2{c=ti4}8_M`g@d+h09_09{@a?J=B879B(c2tNu}Ehzr7x7K%?R9=Pj z$($X$q;ot5LGQfEvd_tJskOXOC$Z55G|M{_^X8gxLrLEInGr-*<-8#Jb@4mUs>d-g%Hp|gd|^k`_=0dF8f z_u0sjo3Z>{up0HgK|3!&swg_hiA|CkiUbDH)oJ?59Nv8Hqh}~3ccdI50DKLnX&Jy} zHdMezn{+O~_}Y*TSX&_40fBnZoCE!UJ2&w1LEYKyGCVe;v%n6h%{;TWskSX);RYki zm)y?k-#*tX?8BFPQo=`%-7n{K{=8Blp+uO_Jhl>AHQ#41AZgZ_RUlg@VQi9tI($~| zVd;S5f~O$3y2JKDXG(D{BHCWggiQWSS42;8bC7g9wM&e3&OtX(>~(s)dyr*1F=SRp z`;0Qum_%htiW$U0tOQ7IHNLC6Skqa3m z$l|l~WI{5?8B~SOz&bqK?R79_{`B!5pPtXvdmx<$58j(`do_;05QO~C*pMHmp?z4; z*^m^^G*ifn5NC@Kpf01e1>Rr6=7o$OlD&|u7?+v=kAz9I94@grX2pW> z-twrdy>)cwc!*hC(=tNi;ZI10C+*dFcrX0~J$fIGpyjHHl36SjR7Q zDv+h7JB<4QkJ_mLn0Z>{o)#@|d(l}(nUn#-oCEPlFy$w5$+oa#DTu{oCp$Loa zK%W-^VnFN|^Np$f%P&9L=eup$M~~lI^9p`+W?{Rdbv+lut_-!d6Vw8Dlzc|uzPU3x zaV=dEt8El?;g-CxY6^cuXQZ?u3N$FF6F%MKL@5a1rnIIaYeA+0JR4Em&MU;$tx%p( zf#gTC<9Uas4wTT1+wQqEHtJEZ_8a*a48Y^Uq@jQl(h&O#-YZ*N6=P@UXEv_@_o8oD z7gtEZu@Zd&;Gxn^|9M{j+3&yQ_m|Fh1mU|cU+xtq9zBA;m|6a<{I);WkCmKqOK-b3 zz=Kf>A!hc82VcicbPgM>E)wVI2n10K=sPI#CIU^My=<%z-~it;&VKVBzU8-k_tVq){PC-O zxo6CH^Z>qv*NMxePQG{oD8dk%2lcZGh1aU8SfwSaoAd)k9RSPd5-Zb&Xh9*EPtHhI za)U~nmQ0 z8~gGlKYxAt_~AJ*>TX;1u><&8BJ-l@r%gkFzdoF2L@VH*c}o?w<87Z~ z5C($65WBAuKy1!HHb)oWsSQG%&eHvWsOb#9sqck{1{Ro}ZqXbT&$C}qS%%CqPxw*= zT)%3N=^!_9WP=>P-*$Zd?);eNcW+MWqX+M`s{eUXBUVSp5Lw>fY#kAxMbfkdtoc1^ zU1HmwFafs{v<}jlEKmzD2i|=0F(ieC5r@|l)wgrd}b}a42578cUA3pGkOpjZoN&hK-7w!14j9} zJy`!-#mch`tXq(k(0`Y%YBVf9g`$OHZO3L(^lIE`$McFN}~dg%zo@bjHBu zv_daxy{J1>Cno)>bZl>}4+PAy4{oSXZpe*5xZFdNay!Cy!TxOPc%fkmOUw>bccekn zLYwm3)(_h@qkV}g`#xttDJ$F({^OGsC;}<$Nw`FzTha#0&Xj~IuHf9$n)vvY0$ah*Tv2Op=9O9LDtb#!p7 zL9V;5JuPj+mk!|H3NZaN0|M0`^AhdK3+LAX^@f4hEo713PU@GZA3oUoclpPsdxhXf z58mrExxOZo^XQ&co-YZBF+YaVgk4T z19!uJE}ZoBETn{m(+;8=+RUvzDZ4~evvzA`U1}2@8xp+LfTrm{&QEz}PKrYKJ2r{e zw!v4G_e$P6;L`Wz3Ssz4@r^>vX|TK&9EbgKL-3)a+fM-fhd@2rqxG1B09-ZuSw8&q z#q4~K9RJmM|Mcx%Q|{5D_qu=c5`-|o)IaWgj0#-DwyEQ$Pqu|-V!0a-J~lU6y{O>y zeZ>c7;d$W5p`FNjo&Aaw8HiSA_o3*O?U6QUxP=j-gncjw#r*8Mz7?8A;U*(koSjcU zjp86dV&^`bt_^>1DtH)>Rzd_Zs+JESlv|YyF8s!=Pp0XurFw2_2Z<5FIdSp^A~a?A zCDlea7h-mkI`5xn^;e&M_rpJapVYs(#A^2Whr3a44<5i@YM8(h_@0L_O<DIpOLEwC|!ojzHrp#}x(=n>JLwQAY>5TQWdp?_>IHxAm_P4ED*s z+?5VLc;voM>HqR`;i3K8|M(yO?WK63>%aZ!`lKZy;9{^zh4mTXD2pQboa78|;h-M} z4THTq1_Fe2Iqm5Z2oCQE^rBVP9ZG$CuDt7n&kN!qd8KIC_A5ve4!~0_8&dSntx)2M z5K760&FBawb>#47lA_2!M5rG*ZcJ<9?&v5iNdhZ26Jbm^o15U-$9*d5cyl8q7)3$Q zIb>P(eYTH4QMS0(SYrZL*V?W2(! z`5w1B@mSTFfji!(Y;Q;a)`Z4zAjFX5GMtSe3;0LgtM!yKN>oqpXQ+iaN`Nr8+Sop1 z0nGqUIEbWcGWwlS5=?W0%`{{nI1_EVSIIQLdis)oytfNKdf47dd#jP?3W<-JfGo(i z2GayeaB1YSrjdE|Y)2$B(N5Lzipr&okQ;IuLXdB=lJ9k#R zO9P#aRG+63yrt`hV>GpV;cDii5I7I;Ps=f&Uj37g?(@g@@4tQeu6%j^t9SMxK7V|Q zclPc%(o^vm3r8Q&l|$q!TrQQsRPlFG^Hgft0Pt%5a%;?W<&TjH3)_a_eZF)fx@Ag>C<;}(!Q_(7~1DY0#y6M zI2Q?qtOk8KR&`&#_A7A@G;fKzlbHF#x-E?2oETK(RviJ>dfP-82wx zYhYr*05BsP>iwO303$5Z9qMu4tM>+|Hw2yc=lEa#a*qFacZMH5l5fp$n+#hR9Q6d% z6mL|x(2fW}4Mh$l3C9j!WTD^$=S=~oQO%`Nd8HEAnX9d2IxwV0;{XMn9AhacG4$|` zkf?@$3$_SU#^bijPHnF=2N@gWP^EDkEpqVo8Q0{-*%)m*R-CE_lC=rWftt+`$nZ&L z-?G>0*2Yv~@pGbI&kTYuqM1UR+ZBZ$Z;U8h6f}6gaU_4=s_S#6e|dYWe)M3zHOb%; zIeNpW=cxdPL|`T?%B?AYGY@3CLZ7h+C2)X~mK${5c||D^<5CHWgRHh^U9}=zaIgAQ z?`QRjM9A4iRiQ3t1^gXtRAcqj?2a+fNoiPzMKOLS$ToWmF9}TU=;y$}rbtnkR zcWh~UcB$&NhkA=sEGAZCSQ_5wx^7>-r;iB@*xDy+VNcq^L=Ku^9$JEoHKd$u9jA9? z^XS$Dx%J|+h8%&ej1N54on1F*TNmJNbwpYiqQ#M5C3C{ESRO!Cf`l(a?@#gn^fJZo zpFVv1<8`tA;lnrFt$(b0rmY7L>047Bf|jSPN-U63jw2$gZ=&7C={zrUcZX-9gN-b4 zEXz$zQC8iEN;tXJG4a-CT*X9aS$J)50f7*-D__-=6^_W5p5g_4p4{4Lfq?>S117b( zm(PU77(d7byqfBtzI}QB=3GB|Oy8R8iLAAA!1C+`@J-l6WC;Nj#}IVc zsxe_36z;S68SKdj*+LmtyNlF}(Hp)(IFO(R>j$AHA?x@ueABIqXPTO65FhEO1s}_; z90SlDQ|;>t9FucFU2~E$oCTeDo$l$q3VDyZ2KoxX0qx;7E-_qTIB2Nw1{fboNe^Ub%^fF-q=SM|tFu&H(% zAWFb%HAmk_!XRiIc571`NZr;p54chnFpmVDHnLv~jH<)bCeM9vFPIs%Vxp;nI5`Aj zlW7j35}&bN5&I0#aQ476nfBf`=p3FFlT)UOPOgehxf`95)|wQdmX)b?bnH+JuTeP^1nsPDa}9z33JE@z~OFLU$F z0dHZ4y-|Q7$~4SS0v>i3};VM?NYvymO6P`x#6ke@%DIo{_Rll|yHee?c3(PWiSn@(eDbn($vjdevF6f}!8sJnC|+Mj`SghX9c zuuT_GS{`E}f)@#NZ9(uVxQnWoUWt4$oNV{_j#ki}G&oyp$aBRz>i16JOkst}} zWe3@Vv&C|Q3mv!EG5efXUZ`=bSkYDHvevM#b9M%dU*H)6=hRHHX&19Ge1j~EOWoT0 zJgdtG)2hb)#-;3k_{C&@e)@8L|K_TG^nkv(g_Apl8**ybAO`$$Ga2##$o;F5q+~X1|gvM*&EI}({2jPcJqz{MI;?b zI2+bPq*k>n4Ai~HP#91PVVK~0(1Ll*%<}>-LVMxL4HoNxB1ZKIlMtCBLsWBEE84FT zwpJiqO!nxbNAy9xBNJ`6NONNJe_M{l#~Pw?Iw66|Y$8rz;UbDb7T(~)nRjRn(8h!V zkES2oW|kOQ`Z{CPncbX0aK$~G-+EI2^6veGwf*sp1^wvZe6v{#Ej5tL-MXP9w^ORk6<$JvIKEL+`6?KV6R)FOo3^3T0_lV z>mZ|wV!qC5I$go|L5>RyRG{QRQLKZI`RBM?)w19XZ5}6~ZZf)cNdy2=zkoKNcWS_4 zxy+pgoLjWpQQq7DSO_c13GhAA6cuj#+U;k7^cxk>=V|`qo4fX-2lK5-KGO!+z&oZC z3gT0wD9JjFz2{sxa@h89ttkmOJa)?_6Xl>dqR2%T>RLlN4PfK z5S0h6r*lQ4ZXG4HL1G{syER<#&YZpRMlC9QpH4ek(i_dHfAwmT-`KGqJ(_Qy%_i$0 z55qgnGi0GF2I+&BoyciRX1E^2@9xeCqY%fXacIIbRk1fAPjjAX3#IyX7%{A~Htgl@ zSN$Uj<-BU!bR*6IYWC4@pH~Z+Wg96#g6QUfV1m}fWQ}q&iEhYqy&li=Dj5SuKpn8J ziBy&%9d`Ikq8>6}*eXZKWiJysG1lyc^q)4srs}wpBQcZ@SZ{AUuf9K{|M2vI>H9PK z%kR(KlligZ`PMv_ZoufqUc9OqD$N8SxSK6dtudloy>e;iS$f#{n;Ar1J}`>Yp|e( z6}zWmzLbR7yyFLj(i+uI3K_^%;xjw+MU~Xbj2)~p1dvQX>8XHnXk$Q+KNduu1BnrS z{wpW*^E^Kp(_7R0=;3^8nn6ZG&VT|VTiWr@gS)E&y6r*Lf#J)zu71ld=6=(J$QzFt z6*4H3n_lJw#@0B!V{E;_)45hqW>%up5@W7))g}fy|6oqN+O*+)=2Y>GV^eb>oq{G9 zBUrcSKEmjA*cynKJ3|KGiX#(Qrdr1h6l1(v6J$tQr=K3sJ|7EH4JMEnYe1=h5_le- zP?4OsswMyG7t{R5w-@uHNAt~1TWL1Xa;tz7g>iA$LgzPnWy)ufr-ju{9NLQUzGzYX_glm}XHou`U6 zw(gq?oMvRgBPv1Yz_t>#cU@5!VLKB%2IPW`TC?U}YmFg8mNsNsj)g!BG=flfGzMIE zHFNfZlNo##UHr3-{yDJiMY;JLh;VOo10;-O*>Gdoefx^rKD({}0O_w4RJ=R*d z7cMzm*E*Wvc*P|uNY8zqk*kUuC)m1ffn6!RCYffH;e|`G!e}W2QU;p>-zxw}v-oGKE0zxbL zVFdhMZ?<{$?IuE(cp$m5T%*~Ftxz|~A=#Si5aK=cZ0}Nod+QxSfTkPabaf`8L^>$i zPReuv$~tbhb%EwI>{eUyXY>&~dgOkwS3l4B^IO>wP-+84jpLX3dZVYpvE=e32&)4B zAHDcE)0zm8Q_4;zr51x^tTEJ}tu5#q#ECn%vzB_p3HY1>YOFN`J?%cZH@g5-26L5m!l>G^=EjUWtM=)EP%bN1Ah%EK zshkz3?P<#!?mV{wp-jZrqDav|tm?k{Y(+r|ZwTHJI8;X%=hdE_SNX3u25WQ7#?AJk zGT?GXC*IQ8lDrA5B^9ZphYhh6$T==;F0xMTD~`JCFhgDmA;W@T;$=nL+i?Iy=r;) zc<0`;wJAWDjP8MoTEvAnkeIPOTOn1ijix>WNrd~{9<1Oq$(}}uq+5v|b3;R+ zR7egeg3%iB!qPf9pV}K)A>Lqnf>HGlsw9KQX5rw8;x#G)iz_8TT)l9kb`=Sl5iH2* zudvO(E(A6LdF4+Z?$HMyJ$$#*+FwrBhI0xY3_Iwufpo%HBMr3Kg%o!(La&zh%p9oX zwGQzZ!xyVvd?!rHb0vh`3o>2e5!x9=*08 zQA_EdY>VhLEYIz*e5DW~Xf{tf?no@2V;)C5Bba>y|364;B}B6Y6{5kdlb9me63eG|H8n*h(;OIW$ zcIRz)umNNo1)tAx5A(JrLP`+PLy4Hpo#;JmS>p@_+=y}6s2Xr0T0@z=OVRGbWnlxR zeWZ}%ryCu*>&bXFf}ynzJfVvxB<;70^shdB{POkOHJmT4aHYb4dJd#z`7^hOaWZGCo!iR}z>>4W^?2q-WePdf(?wjMikpcB}0EBstZ z2kG8Jis}T=W?&Z+976z$KLLR*UYa20&`RG2wU$sr+1D{Fhhd z>6*iL`Q<&J+uzemzMPLA>gk7f-@ZQGy)Zp`M1MKe`?vf(5_#da47`6bx9o7v6SqD0 zhz*3^n!pfcIODoVjIChy105%zjq8+W65iUgj=_X-SpyGzf^!($g0fc1QiiV*w3O8q zejjf9`hhb>w`?|mBaRNs8Xbf~@8{A2Dl~`B=)ULFxy};0LJ+}60`DSP!Y5!v2a#;H zK-}RRjcY^TIvjChXPphxzbz(oWGBXI@K@L$2%|B2M^?%GmL$2AfgJWn2Bhm z%~y7*0VI_t@w9;d>Ws=!qZ)N@G8K+rxGZYm{xM;@X2ke{$Cn{s{u{|aW)|-9C#l-N zRkiW*X5=#?)~&~-F%HxQWN*)om^37exSp-n%T6!@8Z9Wy1L-G{iIw2mpw38f zU^^mqL$&HG5MLp^D%hGTAdqM{#y69Lv|Kd=?US0UQJnzmadS27&A@>#Zz_m6-&pszC{8Z41k6SSX2ca0bYG9Ana~M(q?6BmBHXg!4T6f}nra|Dw$V|IN!aaHjm~F+ zUFiqM^#l;I`P7x%73rPaWPqHM4f)|P5!4byJ0hWrrJWTGofmERsb>wbRQ@lu)yWJ=CdoH}hYZv1PY-q|i!J7ioYAa4wrljmrL z4~-X|0wOtN;L5v2Tc=_yu>{Dkx0s_K?Ito=5+BnWwW6XFKg(;nnqHNJF1LOXi-xi3i!vQsA2bK z^{=1*>hnGE#iIxCmdL{|%T@8(iZ)`f8L}6upUDpN)FKtX@{%&}2p!>*%Lnsdn|OX= z;bh-?58kfPy?QyxMZvA-hsqEnRxCS9qY7AyUNsd3MapHj;*0bW5^d!uA_HU6DHrG_ z+qYkpq=dh$cVTqDYT$;&!vR6&=eiDToPk0#8Sxp6bY?n3Rbn6HUfQZ|+7aKYHkXF{S!j(wDV5MP@^!EpiA_(5XzHgj}4SGpDaTXJIK!Tq0rZ zI7Ry)|4K3($#$~?kU6D0Apt@g8B&qKq+7l)h#RfFmffxfe3qcL05d&34O zYfn~g-6xF0f$dWExId+T`|16+AD%wE``ulT?4yV9_Hg~aT1x^M9nGQ8n{e1&4YQ`L zfp}BoNo%<9@(nWhx|pC>EH}XfuxgBwNI)YMsqTo%y6~w1ADGtxDTrfF(KcP7K}(0C zlTMRYbYL)D*#dEE>-35>iAY9`vzUWrq6t?zD&RMB+ufq{aMQ6j`kMgkw7O74NK4#= zf(7tI)VO)*6hZI_vUGPWtmKJs>q#In zJ6-hvAD~1A$jYFQ97ZoBqdBiGX?pf;aSEAks@ryA%_7x$uBp}gcA{gr57V;DeJzu| zR~%$@#X$~=qo~)o+)l#DfZbK2fwKYtlLmLdmt`IX1|m07oI+Zl#9Upf{rsl=^);=3 z`0*ps|GrP|Z(eBaPd|P7`1$KyVEdzo^L5wu#UjYT)djd8(Q!auMHU&%(W~ifcD6Wv zFITv!CEF^iwnyO3kn>=;QemBs1FjrgTf)yhRV1LUgiEAkkgPQHUYC!7d~cM{Z!b|2 zW163hFO)cI)ImgEa5K=`&*hRrx7!T`fn+^esKgEg!1NY)VZf+Df;bTXN`sMHrB}3x z2Vcq6vxAYP!E4c>j`w7fooD|Sr}=|Oi z8M2WxcJW08T*J>&NCq7Ve|u)t0nT!e@QQ5G#MgqKmILP~6SBlyHwbAA!nZK)Jb{p> zJ;ag6ctXu%-JR9H`^PUIKfL>Le$1cj-fsNhA^hd33si7_Zs%HA2jFEiP4nw(_szO# zLbMN60v`0XarYKH4gzt%&VU!3EQBS=2Hip@tT;5&4C=gdr8Vk^2~uc->tigbvlpMW zkcPY9r@hrOLgP8%a9vOVZd$So^%JC)dKe zTd+5_*+qaCu!3jV&Mm6&&nph)(S!Fo4rPAFA0b0qd*d+xg(7r&V-rctY7X%R$OhbW zZzV(L37{c3TzFqNwq6)OnE?8XV@i0|+1}C$c34{tRhJH5>;~Q7(ie*Kh1d8iU23n< z!ypVgXn&d^9&hYD=5mIp7m698zMJ3%dIqD!2>YL-5uVL~QAeT53?4q@7a>ZJWjWgZ zy5{U1q333SNT^G@*ttoZSJd`@$S=n}<-0FmKR~Lqxja6RZ!GAUQUUu z?Y2em4ipKHEm;)N1&AqthyaFA#NF=Eysh;H4!%G0v92%?4hOdCW1 znN{&{s6bC6T8eNkl;h=~oUXAkj*6JUnA^-^}j!4(;=idrwyL*wMR{Nqw&s zYn&E?>EilbkVNgq6RIS%Gn*}D<2?rI2JPSwmvo~I>?Ptd56J?6NQWv#(HBCa+gLG%;dIhylH)XQ-cccMJRNtDbg->! z!e_n({kOe90kZA*U0QG2`n=-Tyz}10#;0U7-w7OC*FCD~+|&zr+H)HS_?P+R(;Ii- z2ansU=#1|ZIyc0cVR{VeNOhqwf*R%QWo7J536V~{jA?Id^aUImfq)0rWA%RI%3P7X znUXfK<_6r@cc~!a~dPCYtWmllw zH{=!4R}qQ#JhP8BfUg;DFevT~v5E=@#AbW8F+*2_xPe?wMkN3RK*%CEvVy#AirXO8 zzsfKF;alE)t3G<*ZeKO>GNIC7`V-q>JE#qGoPoj`u&U198j?C%jRnD&;&*ER4(p<} zqR2qFi&3DY2P#4aTWCXf(`LhgxOVGYfGwA9I-5o!pgxtEM!OXK(A#-xn+0;D3H-NoQ~dbjTIDxchAGz;~ed*bD$oD{ORF4ptfM_xl3o)QzAVV z(npqDf%akR^@P49ih1Rj>YO^+Rf4OVR6%-1}09B6Ak zJI`3Kzg)!J6=8sdbS`*#57x)#*6Z}=Z#a;$5ZY{_%a(54eG4|@i#Dq=*N8SJ*xM-z-)>5J^yskzk zWJ;~~y?d?6I~y8nDE6|?MYqq@zVqs@?Hb(9oW#<@@swZ77NGQ7!*D_L$-4xUb|^Lp zi*FAbOOfS1dcakYT5DMaT#B2aC8r@cW?A||=+TA^1Ny%;A^LrF_x-DS`VjB#s>vTc zaIbT)Uqa&&4l%q3JA!OQHueQ%+UeNh-8uVCzptfcx+>Ow@P44%w@fN-3Jm$E%)SVF z7|PgS>-Mn*>Tz;V5$}kX5MWjaHsHPofUAM5l7+)b0DCbTIv@d*9#BN>o$Bo@0-*c& zo?$_dsjmod)o)kn-#z{G?ekCHKL3cH?vBmw!Gm|(s_DNS&xdLcnQ@4tp*+FVd}OWk zF-MCzcEqTXTrS9=L)I%&3X+Vdpqlk`2Xz!N04+L9-S8>VmHw=@kmZ7;+fuhG5M%+| z>~VFP>Q;ehazH7a)+rB+>PQQQT^J<8o=OXGt-b(g)kAGdG2HyIM&(>N*V3uGFFD=L z7ztfUROfWGtL1JweQtpt6@((iU3AJ zvH)liZMCZfzPwxGetVWWkQ&LSrSqBx=jJ>E@jfu(8*1b@5*1usf-nZWVq6@`uQD&9 z2AWA7#B~mz!n-?ow|#+OyES#Cnaf--M`5~Q2mo1YEY;g8;lF?G&wMq1|GiZBRR8qu z4^Llz{P^wbJN(_Jy7zp2^sv6wM-Qh$wZoztem0g_(~wlkog!z;eR_v*0eN01e*uNs zfT*KG#8(UlUkGReksPLsImBi;O%ayNwZR!(I%y4q$pU_(SOb5u+vlsu*&tpau?e_Y zQDP_wcsoc8v5!K#1yv|iEUorwO%{Q$gzT+6ehzYLXvsyVUl4XeJmd__0e8ghA-Hp) zP+S#AlK?yq-BG^H$o~8HAH%-<_}icI^AGnf#E%}m+eJKIj#?RQ%*+4?5KMi(h#2Vj zv{EYOp=caV20qZsCag^zsFe$}N)IMQGM#v@& zoI{v-skD2vS28Y@jMw+RK-MFC5M0fM3g3)t*fb)&sG|Vif5}sMEFu z+E+G$YE==ZIknZIkTbcf0&!N84=SI|Xwr`wc7XGoD58(UO1#@34#SQJn1=3oB^4vE-S|w? zb8SgW*YR9zqJGeI*|(l7c(&(@ms+q#5*wv+GjkDvZCb??%2 zS8kl?4%(7ilI6Y}pXiA0*_l(301}yrng0rq7l|$2f@De78T4=Oc-Kc(mG<7BG~A(q z9d=k%Cb9Nf05acvp8es=+mDa>a?f7Cds4wSycY?4mWd_dp2Am=Zbzd^ItQvFXqRer z7@$KY(wzshV+tg>?*@6uRyfQS^ckkymoMsbTZwM=-U+IJy{Apw=4Q8<9We6H+k%ri zbn`T4R7Z03~3`$Z!1 zxk=5|1`!{(B)7JBYyf&`G8kEPZ0=nv!7&7jc$QE6bi5d-d8GVoqY)~JHFx8)n%ZQi z&8>PrMzh1HvTh$KYNHeknXb(pn<;>PW>$|t7q$q5Z@8H%@Un4ir8Q1(XjTG{))z+C z&gkOS+G+~huBME>FmVod?QF!_S8_X`?;KJ93s~sK*ziB+7ckD^`=i}&|KrUk7z!Rn zU7ovyfAwhTcl~?4f1^J&_HKn@OJDA!q4>sKURS*$Hau97r&&GFLP5r!ieru5Vt~nW zP>~B{?#Ib#qb(M7q3iQ>6~bF2c7*Ilv%|Zhm?6Al0BPge_)R;5LC|uc9)ZRi7{Dez zax|%hXhYw-r=C^4UDf)WNRmX39jN}#bpR+;=#FtjLW;L+jWy7l6<>^j(rCSSUs@{e z$6tB0zx{h6)@Lu{Ymaw=5!FCckXp{rxIiHax-3p3!M<7YFoP9{)TCx$D)X}4K=OQ+ zPjnl5Cpg)mcM{oZ)?~oY#{nMExm1K5l^EP7!71XyyKVvIO*r;uBv%efsGT-cmU~hj zm=9065$p^x5uMn5qGW?&(t%)F7N&s}Qv+nJ<{&g&q1qd{XeiQtpd3#|czCVKMmQ`_ zkET%`uRPx0{Os{QIzl~p5np?_x?nZTxrf2Qa|UhnQ5+2T&`Y1r28Qqw(UX`Q(xlYb zsDgxcw08G^^yVCLQ`$}t2+$HvrG;MCpl8XsvB6Oz*i|RdnFrcyG7`{$FXmG*LTTt(+lAEAc6Co6Ee<2dZlSRd z6EsNIrTP&4dk^=qwDH-C_}arI!RQC>O~;#^1N&0K4+wO44nKoQ-n$?VSgMY4CjspjONC z^pnVR+Yt0^CQ~C>Ud7j*uC$4IS?THA`$Ef?5d&E8VTFU9;EAC5yMv3+oxwV?|+(#rLcVwWEP0|;srqjqBW>Sy4(;2rRlm0jZ? zhiGdfEwqE(6_=6SNM3omzy6!r&0tT_wuFr3DkDm1_Eru5Ax2HS@Hbs+2#IrpClMN1+|lmRrsE2w zIaoQV4(*z5wA%$c5J%@Zga!_d)pV?eN;!KpSOyaE6hO@mROX{K0o;7evK<*|(Gybx zi(L}(&C2Ra9ng^~z%O3gbAS8ygvrld#@8NiUHnN|gaNhAFalZ(f|c15Ug`zO)gTtS zcr2qG5XFMVrn1`H0|Tl=&fZbCMaf*ZuIaIaH8o?7tr%ZP!QL^#x)a9FOYX??-J>RE zohPQJD8jCM=7en#;o1(ZF6OxrQJc~^z~(?FXId|D6enG%q%MbBAu}GR01ypzW$7_c z0ZBsYp;_}Y%L=j63O%n~hJN$6Rmsm@#8=PD2AUa0q+2c@?n7`Y>vNu1OBlvs zOs+N+Sn`ZoE(p9At)g=T{VY9uZ?Gc@2;%5@Xn-Ntr7gWkY=}N{qc*z@RLAo!&sO{3 z!wSCwwx(@l$X552NJSAxpTj{e-rSqw0ggC@N2?Zg85NKo#V9m&I5q|(f6!tdKjI7- zA`2p)QxiF4IIs$(FnDe2weRw8ex})cbY6b)BEI_OjxI~aITZbjeTI)o)z=pGgt{_T z*VadBF@B;wtnZ0)?VjLX9 zl8g@3s$KIxW$YXj=LjHqoqdbW81z~hj=S6IoFQaW9l;Vu4Qp4rT03~H?k$*LY+Er5UX)h zN<>ibOVMRw@bB))yOSx4ot;P}3(A1{>Urwr(ZcugC}jNPHGJ*awj(@=0=hxK8Tdr3 zZQc_Tn8MDr+%iyefU*=_Aq0xj7i7OS@`I%BYU z$vLCulGY-}r~~%bTwY-0fvCv=K8x%*xa)9(qpO?s@e@Dh=JEdP%j13j_R|;Pe3Vmt z_By_P9a6#d*um}9Eq>TE8uGaZXAX28+7N~cehqVsGog+r&}B%I1GbVK6m=mB$J}S` zUJ8QG@j~c(7WL${26ffkY@Xx=xZb(*m)q=PZlDPCk^!IDXVBRjVKIZT8UQ59(oV53 z&kqj+@-#y&U}Ca{!KmsCE8Fq8YY-COI#34~kjBE-SGhU*_0NFIuas!LzP9UrJ5s&Y zK6v&bzIvo;1=963Had^mA(rwnmI7D^tfjPKbNn%Q3)&}e-UpYUsj*HwXTrRK*}`Rn zNpt++kD;7WiTUE1)S^=v&jyNj!=QtK1HyNBinS7h&q+tn!5)I@Y{w){Y!HRPz@(Hb z)aYp5d!4mWjLa>Hk*G1omQJ|GVt8#H*fFUL+IW1|z+N1vLerL7z((Nwi7vxF_P4*y z-(0tkj#W=y##bM2=)8O>&KjOa=_-skZGr-pI`7t%Ktcg{N>SfjqX_CZFQR$i;*%|@nQ|1;Vz2)}Xj2!mbi#9W`wsUOT80%S;jt)u? zcNp5M#z6EGUoQbicUbReC&)w?uDg|2j)lVfaCd5Rn}ZFtd9Q8Dj6}mC0W$Zd1a}+1 z)*brI&jh!R9`2JD@wJERadCBJ9s~%1s&k@n#1c$qnT2K{RZ4R~-;G!j3`lu)3mK61 z;cWq!sTDBZG4P+x$cdp(JRse>v>> z2bOyN?d#CvGRCu)@YUwQS}3zd>$qVL?C5JpWAC6HiW}tum=?v|MLp*9wLld!3jj-b zF@^*&gkmRx5G*b2AB`p6cAzs21emwlL%hB_Omt#;Blc z0~3}NP!{A{qnhqP0AMY|mv=5Ts@}t-nokmClodN8;5ee=8(tgJsDbXo+$9|npxLPp zdui~pGW^USg^+i2JvPBC_pH(7gM0zM2q9YFDq#gC?(G@9> zFxZ57GPBa~p~VhPbBc@&Tm#6JbDTw?jUmvsX#?^5;I?q=!ME`4#EeNg*IhuZf&8GI zhQo?>I*!DUKvd)m+1DtHT9bhEDDiX0?XtTT_`wZ1^Tv#<_F)58?c@%ivia&Fo;+7K zCI{OAo)rh!*Dkx?p6=r}_t|UsY90e$^pnG~3c(&m32+cMn}m*2WeOVP!|-DZli}?G zpu-EcYJno)6Ap|P%3;^J7PDq~;P+M@1GIFNiN8a3)L?a-?wF?2xIIvTv4#MdYGopb zo=t~ep|#zXFJL{UVuEHMjlvpZx*}v1eXDrZ*ua3D)4>~_&CZO?Yh$MK;2ZOOlJUwypp5~t2-p4aHM48SkiFj?V!fq+*uiUUx8 zaYTecu;fTcl+FM=-?8L1`VyM`5)9c|TLGL6uDul4Wjg5AmbA(0K&ZqVe4Av=T3bl$l#5!f{REVV7vEgz6-tG0N1NBWYgQ@U&E6_-V%u&c&;ec8eN)!|XwG zFW`d#UmaDcOnwey>a|`wPtMdje|*Dk``m>i-8d76dJIxdSdRV zB*Ct9KGtZSo!x=8>WZ8-jrHOJOD%zRvAv8t)M@1XwD(TN>?MHz@HGvE1fFDRgy7e28Z#i#Tby9HjbtH$x>63H{5cuukvUrP0I~w{ zCg{$LDF=d&q@_5Ra(QXlFkpWcy>`$2&Ck5?j~ez*Uc^@m%qW3kTtxv6*sIIN|{z(@9sJi^*HGDNAm)%a~IVx*)B#yMe z7M+KO^~pHHiw;6q6Nq$hdCe^&w;f;FIA{$4E-fY)pdPL3*i6i|Q}?!n!W?iH?bOU7 zCN{y*Z2P$L#4i~c;Lf*H%^ zsMTA~g95v&?4&6XK`!R~;IOW^Znic^BE@$RrkZlWwXt#QU2>}WSuk6KAcnVjfU1cHuBf3nIln+K-pqUqHz7?mGtT#S-xy1NLcu z{_>EE`|P#6B{BB-yY{wnL)oGh~=qPX>ayIKosE)1ez|XrKEe@Z}B!|zKF}L5|bvvku!=Ty)8NLc6aLjEA zM&%A9bd<=O9Xj2pU_aq-DoA`WkHgzzi10W#o*f_wIy8p75m+yH%nV=~V!h_VKn4Q+ zd~di{&clcNzrH=>KkavK17l!su0QhIdi(HMKYK}Eeb&&dD*6u>TrLIgDZT33Wjn7FfdD7ILsfNsf$S$O9)fY|7+y~sBD-`LzE6! zB9~{c%ZTNw*`^?chR9@0q1e(LftOCVBVqr~H|E=)-hO$DXZ*+f%cB{hXD{L{u7-X* zL3d`9f+SmxaW+kyGWUc;7wiplMoW2Jaip}S$?IgwW#Tk80aqm^On54ekKR7yVY5d@ zuuu4T6#?wEFjLUPrWpz{hH2B=q7_H4aREp{fS#U&Kz|DicA+UQCfpma7krj1Ioghc z{pPFJrqv*NmU$Mw;Et5bhSlM8vlcaJ8kl0E@$At6zSJ!n6xyV!yq)3vr@!p?kD9vA zUbTCw)VHhdNnDScui!)=%@(HA3WswRRIPC+aM_GOtU_V1WrH?ubfmac43ZKvK}fe_ zSTO+i*lvXc6DX#0FP55#0?`;@+y-C~Ys7uuPit?V%MO~KFh9cSLJl$-!exr_y^}D! z&XjX_5fXxs`UH)U5)HSJ5yh=Dkd0HS1GctLXXTEVu<8U|5l55X|t?U3Kw zFK<5l@cumf{62f>?s=-;+Cjn$=XPSWe^cAi7@#6hH$WS+Ros|Bn=9dHDi}Xk#}H-W zztFq6#8rU)6oQ zs&RGeZ-=Zghx>w2ebfhf^4i^lhh7FZjkoBE4OCH1mn{>2Ol0;~Fd$~Q)-Rn7cHq__ zu$ZmXY(VJ5L?}S5pAPFvY+9iE#PoAq0vc#Aq^*492~1RKa92HBWgWUx`26F+-=4jI z_wcuGz6eCQCfmkuzFs~cIWAub?jN&sSLZEN&=7f`2Ew~ffO~oy;HGKS3_a)UmiX_O zX@`Pm&1)P_#)fp1P)YLZuW;}u_ks@K7Ji%4Q3`#|mZQ6S*u8Y-D zQ>Nz?AlsvmSqK|*sbL8DxHaEh86)+|0{gfVI!E}c_OR)*C#LX{Z5=dlNpFeP|MPmV z57{P<2I-%?mapxx1z1WJJQM&+3o3Sg7O5TR$)Szi2fw(aP)1~v!37U6doTI=*$HI_ z?xoXDi{_(Gq<_PZYO6D^1lpMpq>l!iH}Q!Yx{<}bz4~kbn5f~jYH_;cT2Tm^7)3yq z!3Ru(va>ORd2AnqVt5r3g1i`$8{GTZ2+WL9X)BG9_=b50^~;nt*5Pvk`CszmWYJ@1 zw_6s`zx_-t@aF61{ipo=<)PW<$*XuT1^MP{0>Ia%!s+|%KJN!mehiWVSOywQ2wF^t z%W4dYHKsE!u>FY`NMTk*r9pZJgP9pN;TJ{?_M7rB>=#|dWczX0P+}cd z-pUYmM~snwoC}Yz!M_k8RLs3p{eI0RiM-(;x*7Xk`OF zf!emd5VaU{_Jv_?C5(R7YznW4sJmwC_u$-5pWi-|fINHQ?#W>Xc!VcVCUdBIcI2)4FD#BkR`;8|DbLg-C930 zdfIgyMZZmQ=50JG`rLv_p`%ls3~=A(;Du;t-^HneM$@gQ^0zVrq?2)@c$18gxc4Hw|HQs7>k2!PORiOpV?0^P@ZX!da%6$-Q+pQK4 z0DKBDP}*DElg{V>wQtnZRJ$Sl)@S7zR^6aU zgchv^LAnI8e20vwRR$>|nvRPRM{6@x`_8B>>gIt#IoRRJ@Ulin6jm{KclL-|5a%zp zfBgIqHT2|Vy9MR`*xcd5U2g9{twI{hf$yu%#z9(ZZaZtYG{|7LtMK)8Am3}k2D=Bg zz3T@iINhtQiInK}>&`G@cwlA@+OV2yjTvWO4uu$f#cjdxA4Vte>~*{6481(hvu%$| zTZoiNH~fk~kqz~!hXgJe?DHL`lz`-j1{~`aw6qa$KU|o_uN8LvA=^dBiPjq;J$7(t z>&tNvwUNC$bhs1Y+p2y0$>p|}>_uF|3*AYA%YA4^r*mizpZJaIY4d=(syfCxy`P~) zc^LMS1~N~>q!2p|kUk7%Z3h;5TaSUi>{L0zs~3|Z{dV?+Y`uLwKkcs%Io8i!w)+dr z%hy(lpaR>C(ohznFPBnS#-_c;%6KCzPBd{yH*1;Jpu)Z#d)*qpxAfO!qf z&Ri2lxfjwL&|*nY$D{+M)X`;Nl+$i^(C7=^B!&lgNvFPL3c&FrZ!HmRrMZ!;i{Qa93 zS=xiT?~|AA7Vb8_M^9-Q%pyiUaEsz})6iKb#+ir0&jAb&t_?|tw{zguu6|G^32hr> zcFr=+(p(Kar(zn^$7l$P93eT5 zaJa;Az(*D#B8E4jx+0iKy5^bzu_)Yz19FYNFk}I3N~}>K7<)&Wv3tQCF2Fw|2C)b3 zwrAbmN&nLi_3__>RA@A`Ow9ghIPrq-faTWa9!+-68%;7bTWjgbUHtF*$<8lmk3wE%`e-y z1ps&(1d^FL8?A-O*@DcRv1_WildXoT1Nv!u>Kp*J0BfEmXKLGlsU4GX46rbK1<{&5 zN_Z>L8acWrNWyX3lKE%<_@U0nN9EpUFWhZSp?~|}l8)&Z5GumdwWna-UKrWPwQ$^T zz9=`o0D(>!}|MBJHyFWeJL7%;Fui=cR^a>kou7gkkj3Ssb zg>3+X1Sq%wk<}7qR%C5P5_EqQ&))9f* zy5VmWRH=5Gen3WaVb5<3IUu+vkr+YDH_Jk013UlXF7JI!?uKa=<^Z1mz@OcA21<3pil6&KakMW{2ilZD*AX*)|r2L$(u4;Q$C&!xU4cq~jEq1`9I} zD%ra=hD*<3*zMWTiryG~+WrF8J0wOVARx(XQZ+luIkzntnd>yULISkS5uaU?guVKz zSSw-WOq!SH0^>G%MsbHkHpq5!-y1|lNN%Dv#JckI88z*N%VXG5&p|DBo((VL?nfJe zDkQfB!2gUl^#6bN_K`c_*(-PdM8Co0fs0);lJ?-D)P@rUU)c)p+kvzf)W8{4Ctow- z3KvL9u8B7$rtM(^XjyLyqbC=3HwNN2yUq#Fdod+O%PKL5xWwT{_kA}Y$xU#XZZ*9V zqhA(B3%FsdTT`6}$Vn4)O^!f#Y_fVT95~X)gaVG?m2(JsB7G31o>mqL3=8Enm?Lm+ zV5`n4LE{JxE-H1qo&NIuALH%kN7cV)uiLB7Q)=tpYxZRgft?Pg%>wDUp(+YyBfflb zZQ~An6nal?2u`b-XRS1<2~BI6vp|*#Ij)0?xN@zlbD$*XK`Y9VGj$(ibfw+iN2R5K zAGsGTfelm^W8>UaG8r`(Y=EVhQ4>R)8#jV2Iy^`7rVdOHD3bvHV1{z{2pDYS2vVZM z3%80Ue5fN)eWF$yhVopG+m_2e|7E{>_x8&p1<$h=?lrHHfYM>mJobiv*Wr~ZVLA`o zYSvQd!sbU5v{iG~JZ+-(#zaVJHlTSrOkQan?dCaWKl76CMHVgmMgh6uz(ujD`|?J$ z`)+sjzYB`vJ0eE6DRWHo3?DWjM`a#!W?d@E?Nw-{?83bHL@SLk#%v_qcn|eJjp=~7 zqrhNJ#9fY4lSF>vC@nwntqF?-tBb2HyWfCv8E$;zd0HI zj|Pyv=q5IhT#)sEoAU_f2nFXOgc!hD?|Y?a8*LsNxyR~0j~qiYbZm|qf?Dj>a*K@{ z1lu8Czi)jW@AvQD`nPbyqifBRSMU2%{g-d|)Iq;%FQ4KThlQ%2O0H1Ayvd^J45TMk zXB&Oto)u?}GldJCsBGLZG7*3!s~ybTx}s*?Fd7d;>C_4m^0SuO(WzUVM(@E>aTZ#m zeApc$6Ne>I;0(+>{8|$m!%N$llQ0Q7gSNt6J#){20p$)vys^-1 zg>zQXL2=r*}X6{_Ugg+Ot>g zwtU~d=Z_e3c}u}>oJj}jv0l8853wvXhh=D&jeM6QuvJB4#c~+CTuuX()4agz26&d% z&V&{fe8+7_<{ATZ3HK>fE4wRPeD$(?p*E(|z|wE=8~?r5%Zl|Bpe zh@iA&BWy0x>tGhHwY*df?_IlI;5Mn5Fv!ktb$=5<@0w@>xgc&eY?;Dvqk`F--*-TOtqp(0Sk+OQ=q1xSz_f78p|;>!um!cy4jz=%6o)<{GcXz*pg555FNS?bTXYiM zj@vi2kJD@)aM5tG1;AnDPOXJ6t{c#0Xl<44h0@aHHFNltfU!kr0O~(5!D;l%tE*N? zyw4alWh91aKnCHOC|oF5NQT~eu5q`a{=(mW{rV`)`|M@AH;c;4hqptJ7z&m9J`4Nr z88)b*EiiLuh;XjtXrx<=x0BE))FXM~w1_l&uCo~(kcE=^YBXYxc3K0q9Am>i&=)c5 z1_6Pgc9;9ex{V%1LW;7l8y-f)Rv*=hh5%BOplguNvk^F&F-HZ@ekg{Zq*TR#xS-vF ziv0=HVgSoHGn6KvYuU@;DGFU}=*Hc-K8BsyuZLAYYF;6qt^EACu05ka~mF_Vm*>&jb$MtOVY9T3f*4LDVkj!L~O^ex~x$K**u>!8I~s|~YHJ}}fcfdM?S zG)G$)Hy$)m!IwlO-3x>&otQ-hP(Ki41`JsLN z$&2^bHyQd}`;jF*Weh2vs!Z zPCIAWS`8Nv6@>5SOwz6$6cC-x05a?8+vJ#y9L%UlIbNFKP%gWk$eL?P#~oN>r>5)8 zoBB`h@=uR$G0$GL*K+pUCjK~mV|)`+s(j{klSfitaF=hzrM$ODC3bA-aMxA{rY1#a zp2!~1=A|tqY!ww33LE!(s0#q43&w#?5Fu9{k{iOz9k<)4Y@q)v)wJL)$n>oQyi{2c z_%#4PbZjj$dM^@8kz}J;6Ty_xwZ}+cB8Xi2p0PJF^bH`75IKk#bk0tws4ien8-^H> zBs%jagykQ8c)vf?m%sCpK6~}Czkiw_XG^VW5av2CP9#;t6l6fS59Fq2MzZ^eh8h z3I<#*S6H3~Z3ksk38Ac|^I)p&r!4NXcflo8Aye0ynJvTABzNY_PRZ0gGc+M!<#O9#GKQ++m=PxJRB{gavQg4GhocabJUsy zT&$y=)+XA{jNWNsvRXj$fP_$I;5g;TZQ~W~t1yX->w**h5r^J^;95Vm=0U5iYt1&i zt;Udv@v1e3%j%uEq|GU*7n~cMnC*&tAXVx$*DM^<1;cir&-#Ne?3` z8v`JyMs)#Lo<%TU)J~&=MU{@QJBT8QIjw*gJU8ZxDq?9ivMbFAAMp-QbP<3Qoib`T zxH_$478+x;eA}Wq$fFFXkinJO-eq3@6VpypZ~`~tWdvjML9~7K-tlts#i=3!!g8Wf z2{l=7h+g85djeB`aAX?|QOG{WSQ+c2k-%CQXk^~LtnWVh{+e%)-F_%>e(vJER(x2a zfSeXp><pXYMJGyC!jDgAq_MG~_ZGsV^83Zu1Y*l2D|vHM62$D>k}d_-qve=8XGHtEm_3 z8>N~kUNJDMGAqrShnB;CUJ#xo_0chBJz3`o4AC=2jhDc5uTeZl8yHUSbnG^9_G|z6 z!S~l!Cfc68cHf`ruU;T%-ytTFRD~6|2#$W4NT%2!#_oAWVh_ zI}uT>-P(>J8>A`IN``1}Uv84qM>`jvk^Su54fszB%Upxlb;>P=MY-+PR&OjkF})Xi zF2H6Wv0m+rhSCzyoe({vvhUmHTx^4{TK}Rt9sUvMzZT;PgN|$KeWxR{NnJ)`KPu;B zAA14&x>AcG_j+7``0dB@ztg{d8y0`qCx7lL-gn?$YKEB;ClkbV%e44Z-iJXp(+Mk!R{V`mv=0}n!yuuK3-e(2szt6<%X=UfywnYF$cD47HlQq28pl&~`z#myw_yjW4SgI+Gw| zAj`tKP$a%=*wqgRN&#tDHw%$*s_ol={x2fW507FG&tA6M@9+4Y=7#2OS4RVvd5;u7 z2Vi-C|J#v0)^5dwgNGQCT^P@^6CO=i@1T*w+j3?@(akEr({Avn9fL=4VG)tby2ezT ztq`LhrJ25NzrX(|)2Gi~w%f=<`$^)9nz{O1FzSgnV1^eRoDomvSO@-Ggf6sX}2PLRhVcO0H#XhhHd5w0_oMYlvQtS3ca|zi>p?HLn z9D}#Q2w|TwHD?0-1_JN05uHXuvsq5~zyREgjqB;6pb-tU(W$f)kFrQGpMqtTT&D&E zvPlzQ!wF_u>Z15D@%#V%^24Y1{_gFMkM;NY;ZdmY*{k zpLDd{&RiI##WY zD`+v1ZexsCHcaDnLLkqiXgV6rpiU?3UDSQx_cbmmBO$OwwK8LhtVXjJF6L|H@{23B zr0;>#i63u3BiikDpd?nUzJC4m(t3OICExE4U*Gzp zTg|gq@xHF~ZORzM$w@qU0ETACJ;fE6n6p|jSaE^EG&{vMd>*;bwr(hE%tiowK!d;B zKxxZ4JHUJs^>WyrILgA%>W9K0kEu*Y+}@_6hG4Mn9=V&laNJ_fIH)h-Al!2DZgX@H zvL}?|pqzjicD#U5KyIWF2xkMaQcytKY}H8HtTSk#wlKwOVCGy4vh`Nx;5;f5lGpnH zI?6D|+}4%8Pe#3|{OXTN5YJw}*KVr`C71QFV+Zu2yM5k6l zYd>;ePD6Jb%Rp53_VD|&=lbr4FOQzzLHnhA7xmqgF!ptLgp4(i@fBW&detP>U-@X0tXs3Pl65c-A{%xQf$3v<* zxNhNEA%G;OaMngG62|$1B1t>IY+1*hxsSdTaE9bTW=~l_@fjEXwp528BF1ds737k=r;gFX?VUWmiM&yQT1ln$dF&P|c zkz|J_)zK`U7>l@|X8=J!x}5A7h79W#n3O7CEDMu6YL{*E$fFUsSB6xdy>jR$EDSpcFSoL*qb`TAQJK+qC)hhy4A=uWx}| ze{>#x^4i^hfWKW^Yh}l8Vgq&yHeBo%3>-FOIt{;S@PxTsa6`1Q*j+oOd4nPEz??y@ z#Xd5YZZG#aHO8oosU!!9jTLw3n9Ukyt|>9D)W^ErSoPSxrq!$kX`YS@ZyzVU;{lG? zXhTNtXoxt>ieUEE0N`0r5p25wZQ_35sKziIAUtWlY#dEJP?9+SOJ~mPs4x<$Q?bUj zy93j2KYjlA{_U51^IFsV*~|ADZKoP|#(Hqk=cXlHq9#s@gY3%s74VdT()nJ(TB42t z0MkOd3o)u7NLL!jsy%>2Y(j!8&#)rKH473rGo|-NLR(}R1?2qbX!4;04Y;2riUG|l z##Cxt*Ku7BI$|5+!FiT6$ONnqo6J&_Xiu&Qd9D%)px`iDP2;|EgDkkBw>_-4+qP;y zwhrm0?r6D*IOp^O&sOj}0T%9Dr_X-c)HLqbq}$BpvYT$@(gUXe)X8Zh#)`(^YEg%U zx>xclBF5MwbU=lOz2`yZ|z7hS$QCY-KznAqd_2z*(g9E(HFBSAG46` z%(}dbwq!F?u8I&Mt-vK+C-vKq3pyY%_XdAvz{zP#!H*ZkfZ*I6SDn%g!i^6Hvku_o z9%~Wn2AoqC=#mS7fZi?l#@G>Rj5M_{eh5Q3g7lrK6-+?1mjTVqa+}%z@A>6TWWD{6 zZ$5qg_$fa>40}I&4PWE7oRv^?9WI|MT8Y7k3hDEN9l~%%_fp6B_XL%-uOxi_VM)qb z-ta4m>}|%G?rCR^biwI+^b>2WIekFG#6BY+C7mD*Zq#J^?aMm{yQh+Pzu0}Hb`an% zsx?;RK|rW$fDJYVt$|87m(WJI0is=zoSOkPI#$D4>*r`Pd&k}K2zIw?@VkShJlfz}pA=z1W0CF5FFfz>b6j#hk70^66uvdR1^_ zHq=uZ`VNU8pyRJ%$_ao!V}3hPM+2s73Q}QvUp;FZV6lM*h5{LypQA8UO$*g`j2YbJ zBJksGrY*&B!8dE&&hyer*g`doM^I(7V`}~U6_3I-F+OwDLRmRdnK3UdARZa-}cE+@Q zYlLJ_z-0#Q;A%bVI>2QDu%>$QRO{(I#^^`MGqer0p#=hZ^xk^qX~vwRaDQkMva~Y- z^|Kje_Zsw3#p+dhwboj~k?2Fvp2W-oC|WX=kZL)ZF!r6+*2e5oSD51EdOaePIA%NZ zSa)j60S0NyYm_junZRgwL1!E0%Rcu>*1C&(|Ni5rc+`}8@~YjJAie<#cU9AcpRB+c zdb(gHWWuY$ZGyokl;HU^G~mK_$2eOv4Q%^&ucH(&np{(OA*=&Sqe z#k>FNev6K>PK?en#wbsR#AWwos?-TS=H17Hx)`3SwE!I%a*e$ZWAyTzYXBYx1hha! z(evI+==JwB*xlXcHrBQKEW+_Fk4e)(Q+B@{T3vKq^$efH-nI>Nw+OjP)c4sm0O_e= zoh~BiDh#w@IA2WrI5AAJMpfsDu`{iuJP9EsfIdmkw28HM3H}OaZ%|g0E;V@{w^y70 z@*Zilw;wRN`sH!&=GhDQ+JkLH)tb)aw&y$`GI|411j3Mge07{8Ca&?eJWM<9#)dkU zf)o@$R8W)x+zp8=`?_B@6=i!h$&Gl~e~LU{rQ$9-q#?2WgLW5a4s@MVX{~2y%r$B zOBCcs_0j2eJN?g}e)#Yg1ocPNbo1w4l)4KdxYFR!afBsf&Ya0z5D zG0KB{ZF2)|?V#mJ0=mdR*>yrdA#+G?=IAtBSTJHiE+x@vguQ+E$=1mOkgD70K9t|X zPMtu1wL}H>fKxuepXqgQZ?)O1I@WIt5FfMF=(NHv9YL(tG0eI*a<>p%!jukVRtt3R znh!lxA*V~VCD_z@V;-Eh8JGY1^ZD{O{!no7>=pd}Wd8@A?9cza|9;snzEvj}>Vb&v z`x?g@Juyh?g+a7tt*MC9Y9NTMiyh>>E#8OwIvb%Jq&}Ko@%Z%MbLj$n0DORYHZ2U0 z^-(Alb=$qn5HB)nw(Iut`VWQ?c=qbu^0eBwk_1xo7^#<|p=SX$jpqC4aeTyF(=M?K zcqf?DB)mdbV3W#Q_l6XmY5M9Y$=g(n`82AIQO!#t4Bvcj^_3@U2RUeii^M!#1#@%HW1+!=J_Gx)QFaGr>jKC|e?z7kL`*Zz&zrVUKf7*Y)g8knD!?SN{ zuH0ko1P%4%aU_fe#^ezg!;x-~sS6{hz;V(xh(v1bSDyFp>Z%{CO zWal47A8-EkMduRK#voRL7P&2mCGhGQSkY>WX(gq;j% z2fw73sK+&SkX5L6Txm)6Spa+AHFW;`dH>C~_Swt#{jvTV9_x>P*nj_-np0ZM-nnd2 z$mk2^ABA8?Wwe9}Hn|<7%pDGDHU^}^V3^j1TzkTAw}8QF*KHf;g{^{;EQobL)}25` z>DcMr52`SoF?+oGnzxa}bE03vHDkhYf_-X<>$BWKks^!D}D01-NR*Ha%%H(hv2@y7q}Q~ z#|{jhR5{k3C}^vb5}6W6NSdCSmd6 zjy%l9a8+lTwZM$XVHFM>j!3!<;vX}RBCW6E#*61k)tj6b6CxJSs!O~9NWlWZbTmfwE%q|@6UZ>@B<~$TeMsO+SrMaZ5yUA z6X~d&J8>j2#*L~Zga%9PD<5aJl~8#_rnzY4q`iC=p9>2z%>D6OZDhIm;t zP?X2d3nOE|r06#>YCJ?Go5dxTwH>KA2tR+f@Ir;e&hQe@Or1qss7;*X|y%^^E{>XpE-) zAVI(*u~|1xL;SLJWllnaYx-C{6ts=PL_vcUlaH4h+Doz*epMch9=}6vA>J=xnl*>W zE)RR)F0pg%vAj70nsnPiUoi;#%5_XIx9DfXsntiYrC?YC1CCeGzUVUO+9DJsJYqMv z8)qAeB*p4f3Vj=mF&T3d4OskrRvv+?iotqdojnG$NaxVqN$FRA{`h~Xd$%P`m*YGy zY!NUB>Ohbv%d&L95RV5@S(#at<*;=xnN^uU1B032Y!xe2&FA@e-r$V-QqJYUOLza6K5u?;2#O7~#-v3JxDc4OQUgj3Y&4ck zrBY1FBa@9I{qB_4sW&!b97rXa;6xdKh#SVy5H1tmUTp#ddM2Kvp-3c6j0RdD$#8Bj z>Ca_U`O(XETWwh18|Z?L$m~{PcFxS=oT@f~9y=%25(;NqR|FPl@ya^b!IZa|#{<-A z$C(L|D`Ybx@m;!J_aV|S#@C^G4@dzTv@Z>faqXFRc{ESxDZ6ykzQHsZ9JFX81i2V} zI0{rHoqfri1oNH)GoOa-eJN(o*e$u7_8GHjf@}&5#ag6mPRI#xvyY42r8rkr z$c)2{bR3>IAkK2;Nx1EbCdL2_ey?jLaH-9mvC$*Pe9UdgaJbE;FlJ3I?ATYwzqBtu z-8D}QrbTLN9FDOz_;GAuBcoe{j@-cEajbz<_sQ6Opl*)iqt51qxI)j<8uimhGW_r| zQPtR@cb=mC{@thdZ(riLJbK}7pV0pGhzid~6B{On`W)BBq;!}eo(Lb_p6=c+ZV}Ik zrZ0nn%@Ph|TP>8Q*JextV}vl*Jdk;*&$$9S92vHt+~cVwYIxyw$Vq4|z5SXdZwZPm zf_MOM!PW?b2Sv~7LILg*y9p}ttM71$*<-Y-3Cs1Y4!1SZz z8l#7vD?%m#sK(AcU`4tu_9B#4Z~Y~d%cEEBRq}I<^Y#(l zyF$&OaH3q4ZPBR!#T&#VvqOpl>8V-=?N4aq%@Ek{k?2t`h$*}w)CS}oKF)ok!4;V4 zHq?UygTd1PX}y|l-PDE-#&_@b5e3crbH0=tee}ZJKceev3K&s<$Z>Qa{?%HAlecxc z&l9X80y^*nZqL>v+AcUIS7x-h3+JT6TIz+Z&pvoo>JSimc)YsaXCfZD|^`F6I9A9NsZtzT!um_ z4%pl_W0$8gve&sy0ngr;y}Cvm;XP|)_yYQdk)>^<9*06_hav>%9=%4mk$~QORqi>C z5kb!eHIEofaRPLQpn3ckmlF6!o<&5D=2P!04|&ym_WlzKHRD?8?2S`ol(k zU~GsT7<)dc5sk*$>ze6lYiTGVl}%8niGWAj%(>HM>!($MBkq z+irHQy(eMcsRC(T#ynt_-Ka_ z3Zp1`kV}I9*a)&P+6`{C*$qRU10#%ld|Z|DtF$^HzXUQbR*u_f(y#XK-~aLH_)BBR zk6yX^Pw4Zeh^!e+Z8Hjv&m%yI44czYi&Vs)`c*y#|AM7VT>OHcc99Fe)-@)OxW4d~y9N`_omC2FPj-Pm7DdlhXQLvcQ;eXhU{3W@8=jYTKp%=Gv#vRt zOT#pJEl=|TSK}J$-eaOG3gOTKf*n&V0|h}SiydFE-4UHfYwmVW^o!p;{Vrd$?+v-v1*I5JS*ts3F4`glDdS-C9tXtN(7gt!KG*}KOzdUx{l z%rawfkPUJvPpUYEZhuE8vkjE?PQ&+r{Pu-gePxxRpc1({1DOTxMl})X!5iNAwJ?yo zz<9tq)gS>QqtjG7qs$JZY4c=8i&JAA6e&ni+Xo{XgHvXsmV$%7ZL^=X1M{snm-F9z z-0P*@=z|ySe$L`6n1$pbP92^A6okmJ>m?VR&Qgp)C*%x@Fc*_p28MC9w^iVVw8b?+ za&Z3h+?f&YT{@;J;qxG;p ztfAS|_Udpsb-8MgK2~w<9f=t6m<36hU{18h4n006-fugj8B5c1{FHEw4Yqc6^rhX) zlusFk3|qP3_DbbIHv!1_+cMG5C=>YTm3xgPstp4R(>KpCq?Pm4K&;Ix7x|Sy1+Bn~ z6|N1*OvGL=!oEt8=DNh{7*l7!BS-M`ztcG~U7H(@E`Wtp^ZW;pNW>VcQ5UH60yep@R+vw5VeFPTAl$GE!ZTQ2LJ6m+i^j4@UI^ zZYxagVFJyU>77T)a3d1Hub@MT19LsBDKG!*zc zk^4mSz&5kuu1rsgu2jd*M9>N&)Duh2fDLe^-FK2tkZXD% zR&6-e?EywM?3aWr_-+cJv zOP!ZTFWqYd7Wl{lk}Sk3TXXM0fSyN;qwun}O}Zi$ckHUQcYM$Y2HzU1vLE6=@Qw$D zl&DUR0_BoVu8XI!I25$1wHai+O?3+6_*t#r>4tP7g9CLJyr-wriXLl>1sm+~%d^>7 z;`BCpTZ%cf2?!Mp2XRVI8Uh{TF z@tbG<&6m$lF9ri2y?*!Aqvw)+?sEkcXA1!+p-`8a4fN|NQ8C84G(R%N?3&tjU4p^V z7~ML~^h$03xkf_eRlB-6Cg=89v7Nw^bIjf!N5)oXw*w+awK47nV){CJddLbIESFP# z_hay(P6Bn~$O%2oXD(J;4zAfT0cFc%G^Hxt9j5hN(?Yh1M`hD=q-5yc->k;*!4@>=OGHy}$Gjf%knO)7++Cs~Z!&5s| zMPPJbgjOkIk9GF&)DaCTyEVe3v&Ts2yzuP;(Hy9~OSldWl9%qY$39~PZNKGATCN%U zD2fcdE#E*6Vb{}0CLq^)x%WYd>RE3|6PK)+kzt7bKr#f&d(J&Abex=m#H*rK4rI9= zpacP@gqMl|(CUW(iCp{KUD01(6N%Rs^+nm+W7qE93-)z-0@4f&QMb&=c6IU^ds`H6 zn1Nkz=sH?m?%BGEtd!G;gbk_qbuhINkvR3oF{?GRc1-}F#11F^!!CBl?g)twK@A3_ z**#Fr9|UY`!#cHfh$I_I9G0ay7%G35uiW5z96R3pm=m zYI71ceeE&UM*agK1A>ZE5^rR1b6fhL+qdtp@*_rKUIcbLdgbn`g3nJWDx^K}9hftk zpU%{wJu9j{m@%y0QgxyIygU3=2ZiXxt4j=Ir%)_8$wSv-aBRQ;-(sko(=tR=L3cE3 z)Sa$zJXh%&7Lo0)@hxODC^WYZkb6Dgs-Rkni{s?M?iNHWi(OdCrI;&5aAR&Ed>nBa zB8wih`-~U$f7YxhgkRso_no`bEpjkNAT2blHpZ#>Z6zKPK^7F%n`*pfdKXa z=Q`W=9D)A16DBkQ0YfCCl$CaLodpODQ!b3zWg9-V725NopE?+<>a-yMt#;awLg%E< zs1!N1#3*BwUnQK=}KfDu~mXNL$YjwXS;u&tKoiG*B z#OUHY0PaqZ6xK1I%g1CkRLJ`>Y)Q6E;OWkGMbZ|55Q5?HmdtU!ygT{vRY={VSMN1Q z9W1Svf>!M~jo4fI0U&Pz6M}B*u0?aRa3W6^kYcwX5czTu;fO)xj3V^(PB`s3{`CkB zjK-ULf%3CAvt?rXCkf>jTc`TIJ;?n0fRc}1z}H~h)*uwD3c|0qq9eApK$YQgxFL=f zDdrWX!RaECf;KyD)L`S#Tp7vJkN_G6%sI*>8Uh^n+(83W5zs{j26ezwUXIq82(8=4 zl^n%8Jz%O+q_7FsN@$0wt0DZltAskrg1UWQWSWF!vsU+BD7ukc{4Y6-plGuzs7`%P zH`FS|8l_-;tafaSHRf)mv<~NO{o!wZ_x63fG&B6*Rl8}K!dyL{_eV&DPLjUxI0F^V z19j!y!RgxO%4yXPG!xXWKAt1=HmaFzY`A;JYYb;Q-q{lbjF^JX)0$ud9?(#LZnGAx zyWw%bLpQuUZcF%8MvVqaYpo`vhS;9MQ0^1GW)~h~*+7_VPbQvSP5_48WE{BscAuT` zK%AytBUl6mzwIJxo2Vl20Ee=M>OgfC-_cp@G3&NG`0MAP;pda;{SN8DYxmb}8B`pe zPo^;c0{A!gS?5TiKC`cgpc@V(WtL}v7%wxc8K4{mBZOF zV5ze!NzleZiDhM5Ag%U=okInyoxAkz3X8HrwoZ!coaP+pw+Uz~4sPp_%RAB;j$9VR z&IM<^tp^Gs7nE=$s;yuy3?1mS=m|d}5QV$vam8$ds9ng%D=T3N0l{s>A^p>5|McYV zUZY(-dj0Mz4&Q|22j}lHM3eDm8(az~ln>H<(Csg&}dLz1wMi zXPM7Gz5m0%bU=OV;{EkSU4IE7%?oKa@DtQGtji+{pB@6PcAzvhax80GQGd>kF(HbC zt8T#cp=08ogtXVGn_$qYlY@t$K-)@j6ZDKrhEGgFlL;-HE;a7>gPru+cJzS)>NtzZ z`Se0WD-yse{N%Yk$j0%u0QzO?qFu@ZFFI?mlP}CR1k=n!;;6^maF`>r*01{Ga4gRR z4WT!l9i;2Ki+U9uK7Ic2ZN4b3e(>VmRvo^NDL={VH~JS!(|wh0d*(2 zqpy{P>GfQ@-TCgxsTYqA)OU;mz$M54tBPx5gehwde9hT`s=*f!=joQY z){M~y4JX>Cv15m_8(L_42xgCHMK*yMe zkbmff$1T<&{K3uk-Us--f*uP6oHK-WS(YNmDMNRJZ-cY~Q-K)84H1u}D6uuz5zops zDf_-#_`63 zJ!G8Z<3@-?(^vy_XIM-}nk{bt5x`(I_P+S#BLRLwXJ{iHAfD#+41W_c?n?W zX$??KOfF#KkpqKdzS%oaT4&qsJjLJr;nVwfZ{kZ;z7)WJ^x}QHsDF!#%6};-g_>wW zl{U@@19(OW1<5{$us`Q8>olg+m=JUZ8L(9%Hq5_d#xN<<3>iJ`$L*-Rg3Kd%|2XkX!1vLLK1<_Q`H zQt@!IAs^X!4z?gaG6VIS@DfrC*8=sPx6ve?5CMafKIovqwsBm+feeuBmFYNKHe{8U z4%Uirfffw1JP}Upvc{dO@A8np z3IFs`?cvdDcN;hRw)1ri0`3O-83Dmhh#uSCeK+1nO8Z)tgVJJ~^|M|x^uW9BVy@K~a!mov2Y1;f?ZhB1~aCEmtMWQkW1RR)i+#Ckp z`#I#Lr~w>EKWYXI!EES?59d#R;*Xznp8fT<=+4B#u6&R%^Sw(baU zhlHF%@D6JTyz@}RdEg$nE&TolSN7Ata%msEgs<_Khwh~fT|2@Eog!+=K5L1!!c4s_ zoZul+xs<^rAqD!ek3Hc1wCx1#xw!8_?emZf)fJ~;j*!-sVq*xl7HT@m>PH)TQRQ+Q zWl0gdBbQ+pj}Xf4Q_e>6Y-8qPqi>;8TLVXKoH+qQ2hmmmr0?RhXmIb2;Tc`#g4d&A zGO=)NTXwlpgbuO4# zxgFWlx$vzZ1Ll%OYXm6$B52Mx?VyRN>J+fKMqqcz+cmi`{?jHYrWzxKF3dI@jgNZ$@O zioDvS0(GR!0kY#^j^W^?b1^0?wpm=o&ASL_L&O>VWzKZuloD!|Xdx-F zw}UkKvK9)w?1BGIaOAfRO-r2?w2il@$heCr!R!o6;Uy-@OPY3zH2~=3wao<(m_Lzlb)E?s6}kZ8uxQY&-u~c zzJ2=i;^*|i3-=mp#e~8(&0>WYXGftkAGt6p*AI4Vts5%J<1jqY;C@~8a)fZ^6}%B? zZKEsCqobg8W}H2SjhQ>)t+}AN=!+pVCJ!+iQWdjS-ZXopsY3sUUs~@M!cX3+5BVFc^ty_&7-2c0*sY0Uwno zD0TM}cAWv+^}HlQX4vrpQGsW6ZmNEjsP)(PEkE$tJG3^?F~{j_akSY7$v z4FW)<+?IX+_QM~4_Xg98FNRniymYTIwbinvbuBcS+dkSZ9*FOma4SH}>0yNrv?3p3 zU6`tY{R3?Zb-Z^hEt1+{u;qz&Icgyokbt)=y3f7ANN$Y&M7yvW0Y+loj=Akn%nFD1 zwgYjMO(SQ)EngIfMoz)Grxy`Ak6ydmYdXHZcmtKS zFrX_%J-pg*G2p*)L$Z}FOXnppDo3>%;6D<4)OiA9V-%PdSge-a=j;Oa_Bk6-V{%1e zXgNE)Jz|)T-N-JuqTw=czoS1Ntl*;;?jHR4wJkmZ!{ zPKT+(ymmAzxU^v#EldI)%;_#}7-*7oDB{tgK+0FA&aU2?qdcGZT~9F?Dn~RpJw{=Y z@fuPf>A*J6^oGf@ZI~yNP_vPDXVQ1?Prj-Aynp}ZoqvA%;iYHw(Mx#Sa2sFI_kaY! zMTrfz*m2%d&oT`1H9jLxo(a-I!kf^y;D9?izF}Mdc;}X!G>4CBIBT>DtJT)3)Fi4)cG3eamC2Uyqj`E5$vG#KO7~yg}yT>rZ<;sM@6YmLm&Bcq-bT}q}K~m zC$O~BH8|f}hw5Uje$Wd)10xCp`xBxT(FD7e&X!QAB4{aVW4CJK_R{{%yB|ON>BTMY zV^{6|&HMEP)AvDahZ1tAxh5HW8ACA$j2*b9}P&?*HFlJ2|*u*n@o_rR0 z0*$;cvBadVYqXO!Fht3q1nIgm=ef`yU3IwMKBzrxMVpSkVQb*mO6rb=KB{OOgA;W{ z*B+!ZO*#s-T@%?mnm#ez*N^z_G}HL-Lg;eWfu`gdTM#UnP~e|4yq;xFOqo%vb^GT1 zPut(VeG^ab&Kv*m;q8xaexGkYi+Y*W&pHPsMI-*>lWwR0yTyT91Rdp}X6u1qqGXsd{ z3GcLUn;_yKN%XVsr#^b^?)#}le&EqcRfu5EFoHg zsi)eTKt*Cu-BfmKNZ}9AZCe-^QEQgWwvY)-&;(JIV-guoYs_j#wb0&?x%eF9Yq?jC zgL`4lBftS8O8`~DeXTdXyc9Tl^s;@soWH>3l&>P0BvG{FkoT4%43_C2Zcxrgv=Ljd za?Owj_wEga@0@+$$ZQpQ*lDR2D70s_jeUym<69@19%t;5#S_3k#*0uJ=0j^Hbf&jW zwix3yU2Le_+aja~`D}sS8DUYlfcm(=ult(o1=!z%dEynjY?KmS)Pj-3>FL#ScR5Nd z?OY&EXuxV%!u4hw!m}0#jJ5rJ(&E4U^4*6&?YB=~FX;bVFNzEvymYTZwVPfOK?mt{ z^qEdTJ=6f8tQv+PS&;SF=GfV#36G7Fz%HL{ssY_N<|^UXa2g)caee;-X|cJwTB?)a zThI*x(10Ih*J@|oWw%G`?I8AfT~Q=NE_2frdqyu}^x@krYiH9#30eH~ZVfIdRQ<^u zarS_h52N8O*=r)ri`Q6R31$y&8iT#1qNklw1)X7g+?J94u0Fl_mk?MFUcA>3SSG_E z{hI(Sm7rD29c`m%G@)HMdA#q@RtH;+Ou5z^vE!gTGA6AsE!uHt(Pa{*23H^$wTb*C zF#K&WAPA9NC*rodk3RQ^x{aCrTn5}8ylQuS@Ne@KFbsk&Z>W3pj%w)%59QhuQ!4|L z4R&bg5%6tSO3pI|jOwuf&%16mX=_6z+Oy`~!?alpB=S}+A6Pe^>k!;(1Cv@t-P@dZ z&6st-d7_v{WYj9SxeE+8bZ0_|Xcv$a*>G(0cq7wrg*3ocmbFX3wwe5I*D+!4F zPTUnTww*g7x*}JQ6A>|A2RauWck>nh?t8*_zkmBS_lsi82e06(Mf}#cjJ|qm-vp4! zWYVE+(=d-F)Wj)A;IzN|L^c>E$$H8pzg~Oc7sFqmkx1Zw0v|box(7S>ggQ13PG;Q% z8wCb-`mk8tN~TE~a6us*sd-%0)jNO(Jy>?aM$0&NDx#8_3sm1=n`>legn`;N7`Xd^ zpyKjWd#r;3D*F*$-V|;ynH6Yf)xl16`s7BEdPg?<@a9i18oVC8Z1*9g=LZ!%*t824 zi#?$UItx2cJ0+TX$Xe_JsdA!W7BMDj;qcgiZBlKaACKs9n;06rX0Z!Q5ZE%z^ef_L&VA7N*}bh`i0FbF=_TxgT#1Ofm*sZzsmTynFhmFZrgP-sUUg zsE=O2*LF#pHOb~dNgD&OqAqck5jXLEb^r)6r$e?Pn7?nRu~t}5Y~fZ@-YYAjofMcU z6G1n2%=%KBSH{OS>srkgyTSt;ow|%;L;7tJNrFUhHpRd{Q)7%pbloEZ6AW=CD83sc zWXGT>daH0cn^7n#w;@9(B0-i~ILmd6hvAN&EFqwB%nVMH4H*^wjGQOKv&!yB_`kT4 zNH6tHAG~b0uU-2ZSCMs03#1b*5wHbjyVMSFC1}Ga2&!;FypaKM6VQbUv8+jkc_rit z&Kzegs8F`cflOk};(-A&qBT9CGxD}Hn*fSgXczZ+e-_ik*LlcGq3#DS=4%%@ z31hcG3m>d&sy7)XaL08SSEYgCw+7@)s<3GQ6g&)0=uU=uy)2?h+su3oM)-$>e64?Q&+-_QQ_!wPj^qQcqT@&uG z4PX)mTRj2sba9hrx{WNVCL-}uwycGIw$a3&Kk$v2>g7lY*d2|gtVmnY3 zMIwU5V>ZslGFS1!S9PyhZ6KSluB;|f-5DIFHYa(*mx?v^J_M#cG(Uj0ES!`HVP14g z=&C4fKC;C|SscMefb(z)1-8Y>S0_7F?1I9>Oh2lLtnHu#2jBp|bYO7Ps4IGsq#@ zblbD-me@01!7{1=vhz`N+OHSk(4liL9F4IZ4Q`BN=xS*bhsvcfwu#g^C(tDUr@gnF zl~7p1L7&+J49w0epb?RL`6B=On~VJNbNuL~eC-l5&eUj4OQ6;VQDOXz? z^!C+j{pdA)?OOMAgAf!Aw{s1@$VAWzhjolam1MVtDYtcqtSuX`g?9EP>{ro#qe|BZ zM30FVOeo=VHz#0bTFT2>8Sffd(g1On}Zp{qat5mPlG|I4s8WJ$H zeg>xw)S$PYNko9_47?@9F&PPzf9uxM0bVP&wOZhtH#@@)2H=%=8(?Ko%&f3|c5jWm z*7UMS_Il;*{hwaA%y_6@f;&BUJzu-dTGDeJ1&EO_)&{qOvR?7g@RT790SKHdQ9g8R zAsON)99en*iw!G{qs9mZ*2+>@dk;{R$)Sq6jAAJ7p$%kf;o<2b^9;EyR4;@nu!RZn z1JTJitZ76W>O5faS747FXOq#osM^*YLgG0{4Uy2yW@}>RAN(2jp-rmAhA@FKr-kZp z0CiZR%0nB{ABbz%D;u%@`d8Qa?fdude&-+e?_YhWAHArrUF>sOrzTnmQG>X;XroWP zni?3gLCwq7SUXlMAt;C7N}i~VZG;A?^!RcfaeP=d+FPLigkSP|SK?p1*dN~ibAJ4=hrG>KF7~4r^|gz= zk&4v`_KHZOqkz$4GkV~V0+kh6dW^pzEY?sJUP!jJp^gN0H$*#|N}bsi@px5O+(nwG zPUMgduR@;2#L!kd*)S1Fv>2~tT{IgKOD7L7n$tlS=g|%yV<+Q$ zCPq=0j_Ix8z0OID4z6YeLrUka2rFK3#ISyG=50^29iqh~2njTfS2kt;+h1Mmk58ZW z53fGek6zGMFEmFxT%$%duw)UL-n+c|CDEHFJ8h%2I}Qpn(fgrl(NvNAh8jeeR)^t> z2t%+mVnL^>xdf&HT1yb78BG>>Pa3)A0eleN>pMJD*DD_!H5TP6v`(XYE3}JGBZzAF zOqe$+E6a}c>=OeXNn{(N7*pZ?JjkgbrG;rYLxQRGB24P8Fpv`a&cxpp&%?4qE#l=1 z{hwdF(64-~AHAZlR!xX}xMEVH0!gm{yVDLM4x z&T$%w&w(V0_Te-T&u`hGJl86WQ5=Bk0NJC1ZxN5C?QZ1c=w^f=Na!5UU5EkVZzmn; z(j`~8nGtl-b*Oj3g9?e5PhZFkpHN1EkvyP<6tfNFAv{w^RrIO8%)w#3pnYI|2cz`> zM$`YFz4s?x?a!|~(2riuSNCMF0Lq5#g%@Ne(83*zfKR*1%URe`o^ybJ%`1iBSf9j8f810SAcoLlTrLt!#8I1iTWw0;gH zX1$j5Ia`CAbr*C3COnz5qi!PPq^Xjl)5Y0rUVR5GIj?G{ylnw}05+F5v zAlf2hD!c~&RKYSVTAYe1C08%^O=>C30Ld1ZKzLu`AF6uj8{E zaxvHr_mMfsF=gKbU13<$2?8bFAWgk;y!v*G{^zH6+`k>8KmG91#P*}t^R?@YydV-t z#C%1zvm#N1!EZv)5>F7=+p|)0hjuQz+{B1;x7sZj3)M&pf7!L4IkeqTB)Cwc&8D$M zuXCdDT)iC+?$`~jyhX201~zysG*y9}ZQb??K`TO7QNuchF`Xkw7V`zV^r@-~Gg+%2 zuu*Wt7=%BmvbS>Q075y>;vv_^GHp_W(w9Rfz*Vxl?%4mzm-+cRKRNf;F7u<8^R>%d z5w1*tQ8;>@5VV5uelT$?@Eq7-OuY9|)Fih;Jb1Vv7=in*D$bbz*CyP^YlCfvwi{kI ziqk(01lTYrg&Esr0owNjT5HdWs=svcN(KBxiMWQ?^ z7$y`ra;&e~;SBu%4M~omJ~wU9WL&o&UkihGz2Ormc9p<$^FWGZzg8{zkAHQU|NQ#H z{OHwuwZu(J!}mCdF>>ofPzGUKyiL(OT`?F9gAU=}l@UfWp+}{Y?GmioiFRhosRawH zVoq;Q$Yc+cc6&7e7j9^vAgyCt)ox|E`99<4-A}>L4${q7x*B65o{I#c_lu==@eoVb zDYL@G(*wn@$7m}KjF3g20aa5sw1{P$*{&`SzRZD9n)!XW4KDgTO6bew((FlhqvoqQ~eGkXegi?Pfm@Kju zc5*g#5eb;^2cvks{2WABN{~loAegXnQ~^Uu+u7SC`GgVpj2w{I#BDoL*Pc-mg^-oZ zo2o0A{8XHnfeyGM9qbX`yREisEDKAgqP+m3PoyUU<7@4t);`)to4jV%5~SEK-^$iP zDm2$&f}uHW%WmTqeDiNVdF98~Dawyty>A!w?{QK8`~US19W#ah@PGcpUnX60E!LHC z%}x8kRJ*Nt%(`iH0Wu#ZXVKb*c4-Z7(A8MqJHrmt*wUT}w z3irtZ;x2ti#}4wEKsvXvk+?8=Ew>V2{@s91p5qdJt977Lgh!w(XtPZ_OxP{0prnCA zrFBhr!6zKuscj6|%3zkNd8T)W+SD_|a<9K889n^v{t0wmKTKWB+ys!ujyV&-s`y zj-)+$?QR`0?YH_Yp0J9{R()m0GfpyU8J(GiJ?5+y$Qv0Zs_B3^l)8XLSeT*1B2lqI zMP!F@PJ#Kj9Z<3kM!;x8 zurfx^iE#iM7{)RXYmmQ)+B~|cv&A_wDv@%Ig^apfMpboV1^ zU(d7`7?zAJ`xK&$AUAA^F`WgY8i@nLUNH)%XanED)d`Sw4yYy-L(JtE4z#UpSuLeu z>pkUXk1ZgFKMQ?>j0B(s% zVCT(iQ6Q!pqYkj+eU~9wP68x{6*8SLXl49SFnf&}I$D;{jEx46BefAfb=@sbbx z(W`c|{r!g1s0Hm6Cf}2y8W2w{;r0R;0K0G6)-cT8;l-hPPHVRsco$0NKG*8o9ARz{ zL!g6T#x5OL`PLE(I(+w}wNufAy=YuD`ka1lbJIq<_BohO0S9%;*lGM2uBJAvcjsae0wo} z{prKUr+1(0%^zNRKp(w!x7-{0HoVkoSHoQ z^FRIY^zri-fBSz7;XLz_*Tx1x9~4@ProoXl@P7l8Kt)fn;rGymlE{WMVI$CF$fX)X z=X~9dJ6(&*at@U9I*3{jpv&ljk45e$4r+a}zJ2ZUqh!Uw$xsUJG?-LpNjb`9x&qxblD)A!W+0-!VsSdIN32g`Mm|3Hp2ch z0l0_3;dUwx-5BIQ&f&4n2vnFMSr_I#TEkcrg7dC(ln};xrRBm#>jI6IyD*&*tqnED z`vt>+5E#hixrEL-;5Qx9z@IB!pj4W48LMuG9Dn^6wB1Wz^9Qfp{oPe9bYNJFk#AqR zCt3I<)3V)GS4bx2Sc%T+C@HE_vQcQ2wQL#Y6`-uUILlOhAAGyEjRg-i22?H|9e&*t zmuB44wJ(*deexf_?kncE6w;uE5fG9=?aZ-d$RX6BJkgA>gOj8?fE}37<}KObr(7cV zd=g%~0qldHrTSsOT)TVlM()zb-dNby<1E zg%E8RG}kTN^jjk3!`m;vdwTcgho?_p{O!~Kc=0gs=#~6-ul>K@@3p3TmSBg{inpl; zC}FiRGGXPI`*)}{udzmk2=$bdjg>8cH>?Arn>SiWs7^UG8@w-$<|+tpBfI#0dVtj_%ZkzJ(p&gjH8)p$+Y)JToVyppiB8wnxXjzn=4E^x} zTT&=4+hkl8hJAHZnxK@t6N&~je8FI!M8zwnj&AO=I#IjLvEp-(v{NujS7T(K$G}5b z0w9=Q=X@@MK@4m|BpBBYz>`gtlWfn$&|J-pEim$uj#DMPb>kEP^Qib{d7lzYrjZv# zh`h6YpBMXIp5A?a`&2)E>&)b*w@>drf4}LzVuD+#UxY~Daq8e=2k(=BGtL3v$_NfjOo$-KRq#{y*!GQ**S z8eNq8MyRFpw~yyHl83?F-N(@-_#sp{V$YpUdo~l{hE;>@c^$-&4I%$d3w-D*J%ugN zXn5+{It{!z-xRy0n-_k<6oZ#GpaH_`c}B^y=8!wh+nu&HB&J&N1kF!ZAFDQ|9{|Ul zxsfi%0+oPBAr+TxE?_G_;{D%fHs?FmX&7*@<8c^vBQW8^EIyYM7MruL?PJqR-#4d>}PMasdfaQ%4D^-;^xCviY*|%fI2miwW5($ za7pbe)1a%9w7(2X{?ix#$afHNJH?zMO&8t@8zW1)>pS7@k)^{XwP zo_()NMkjf|D!eW3p{3Lzu9<>Kyy=#EC``e{y)URfXA7R#5i>v{dzB>oH9*Rf(R7Sr zBDV%(Iy6QElN_i{WGL%PCtnwS*LuU72ZzLoc6k5p0Qqmf{Foo!K7Ib?m)-AA{^{xC z$M+xK{P6S=Aon#&7u>rUTs-qz%T_kpv}GZ{U{-bk7-rP2jo4S%Li1Jc+)E zazn>-698h7vz^Yl8|CQ-7&2+7tirJ-vCgRFUWE2WC-+{>XOEeu--hA@GSN+rV$X8q z4vyMFa0JyoHwKgpxyFVv4ng^JSocZ_NSbPKd?fJjALooWG9W!j-Z#2BX{_w5!{_DSdIA4NuJa`FzsyCVbwtuZ|%#Jg-_k{*sg|(eP z7!UDbf*j$vMr3UT^|pZ%nkZt8Hn=Lx*NW8)9<3M$iHr*8G3Ve$Jux;u8=UNGkl5T# z%QJVIIM>W>1A1|0^!PDdejLpSG^L1?P!cjW zZ1RH-&Cwc)qG1Kz8a_w6Hb_@zBH`wIwvx>z%>I2a;@{wY`g#WadK}pA-__IC#>I7) zz0{C;@M_+lL4O+e8_93=JKGQQ@`^Fijl2%Z!wo++-HHr=?>T$|a#>pp@Bct@5+;Px z+T`dUMvE)VR4jTHlTwg@@;VL!gC78Om&>tW2+YLR7-QJJ>tZ9XcMOU2vt(SotqTFA zpr?s-!so}kdN5i`vq_G_6Q3LaN~*o*-JTWqQ}1pI_A|ew9^cKw1hzS zyr9XJx%Ue<+^;@=dcN0Q3~)bo^?s@^wD!HA2E;%DmsN8ZnuRVkXAY7&81h|hWLzEn z4DOi!g>(VE#RI$KIGbuAa|g<>lrjFN20PR0E_p^o&3Q%~s!CGss~1lA(5Q@cJL!d3 zh)e5^%Eqj1GpqxJ6rwb?c<-%=Hi*q8CVGZotFjR~;32KAqpT_CEEIW8Vzi{JSxIlR zbs8&nbxA)gQJ9@PKDX?XJ>}d+Uw(5}+j!A@`q(A>$-c$fUpoA<`Z_}mM#0_@TRKQ^ ztpRYaQ@~pYr1e>SNXg{G6F#$}W9}j(Bnr{BiP;d$Cd)*~Y1%q8T+Rj>)B+!|K|vsk zsV_HS6kKo3aZ1|p$89?e3_(;iNtVr{3g1)%F%qyl+7paYtr|3S7boiFv| zW;r$(E?JE96IgQL!OuUp?bf<4TaLptq!@@vb{x-)#A}>$7Dj?Mym3bstl_S;#zcWC zhnF&e1b}5}*@rT1)kzBf?ai&_;~47WOZgDujT`OR!1xEIzX1H;Nuq-~Bcm>=jmz7f zaB-IbjM>A6>28Y73Tn6=uI^Z>lZUGf^z1R;ABm3@PzZ!G>UKR%4KD_U%Vx-)=ip>t*HagLR$^`(lh z{=zYi@Mn@?jJ!bEr3)Pjl+E4YqLRsuNGTRipku4r(5RIR~I<5p6 zY!USJAwfEiy z%4n?CpP9!ooUr}t+;HLE+Y2K#yXRTroNIdrj+WT1y4oRh6ZwnveHx1KE{8aQzRx(` zeZ-HY7w^??W@`WJ=k|Mjv-)3WVJ1>gXW$&iLpyN{^I^BPy#T<(r-roeW4F* zW4F2Q81#3a>Fe_i=p}8#*xb|_m*ka@ksVJ8rPLY^-sM?qZjwAOV@r{8wQns3fE9D*zUJ8*$hL0Bt-DbKaW z$G*K9V7t}rzy!eR(r-n6*)2H^>eT5#$nuuDw2L1gJ+ZoiZO& z%lZ&>3oJbbHRLzPWZ92tCI1;O*B}1zpZ@gQI{%;i?0&CD*FR5HY2+vs0s_(1apkzrekSpLjJ1O( zA$%bhZT*iTMRZk5dzUXDY@Aupew!<)s&}5ZKVeUetNrR8x{K5XGg%blhfxOJdHBG@ zI98q8_O92I{HjCI+&n!hxNN2YH)IvYmvhjNC+~MiPb&t`z7|}6 ztoyHS7~qLzE4>9fO$=p&ih~~YIo*z3A0R5Lf3EIoK$?3P$^s|SgHXr6?6vz}(p8t# z>!fai zBXjd_GRXvFcR%X=n#j3k{Ync~89m#b?vew%hRnxn1&_G%+gM{1JhYiLS^Ufs1R}Tc zQ)X{Bq7n<-aTt81wa~sZ!v|%Z>UdOb;5dE0c6+a_sl)RTy70rx_22w;r~U8$!~WCX z{nMZR{@?wU*XL(H#9zN=HaZYm4F4?E^>p_n?xUHu_(U_T&dQP%vbO-PZ{K z7k~v!W*S!j5%o)l?MZ@k>+f_oBki!o-Ex3BjM@9r73~rkH*SFBxlrhRljS(OznP;L%*n4bDj`v5H(I~ zdo#Ys+@Ac>!A@Wf>;pf#fdOP#(`yMVGpMOlY5NodPiJw!wlgJfvN8evK<8lk?@VE=$+0gstF<|^M)p|v$gb3$r3o{RxK5~q--cMV1 zi&QQG2&@b#Y+WOD>>X z+I+-z?HNzk8?TzxTjSsX@v#1Wyg>a(%dR;09xS!EYgYd%j@~!OS%2A5#kY+Z&*mOI zyaUg@8ZezSUcDug%CUOa1=2$1CjZfI97MrEuAiQ`1{c*3k-}xIa+JEzxq1fNm z|MI8$hd=)PKmNmSCjR~8hxvOw*VaG7P4HFhaRv08$0s)LoFHvQ&Lz7?-*Dn8@;ovc|WF$ditl6C43F}1>^wx1*q(`AsvPdYW#01kryK4!!??(In@$LDD7H9 z651B};M#gdWgpri<<@I0bvE1Q_`PjkqB)116JLws^b3&8^*e`E~g#6-%@usqMD zi~R`ZfN-Hw?~Hd_8E%`2A1rt7qphFv-m6wXRNj687+?xVmh_OR9>V;B&)r7aX((tV%t)SzK}hM(Kae2iaG zido-4`itCmK_VOj^5MEhgjrksw0AGHSwD(im%*OC`P{lNz+8chvzyF)n+RuJ^zdqN#B!ioBuHFkT7GD-wrMtRd-z6zHR=e9XrZh6Z7w8ipNHi#I z1QFBb_XYR?d6Y9ZA1UFw22{uX;;c#6T6Res4kpcDKi>cC2RhCCm<<9G@@;uo{endC zt*iC>^6j~OSj=d36Vbboy71b7R&F=HRJ=S`wh4k-dk!b7_Q{er=j{E%yUz>21^s=E zMtqhY$@6}dIo0T=SL<^|Xph_ERoZ#oiL(fO)gT%s5~+@8Z^Te?er$vtpMGA+>{hUa zmM~C%W4~VY@*HJTUXS2`GiQ~|)@R^XIyo?&{fpf^)=cYqJYsu-F~wynp8 zpXLW%@uGeZ_590O*6q)Yfw&DwV6qJ$$epJXNZbp|)HYpT6d)j|0g`FFGqm~pTw5x; zopJN7-NDv`y|A#t;*duM2fYMj34;V!w~au2}xHco%=lXBSFcKYLu-F9YQ zDZ4sct26z){kefTDEuv~-`xBBw zXRkfqn~izOKoZ^tA#0)YC{me3V6rYLq2c2#8)ppv%lP)M?xeuOEFs>UerK*hbY?my z_aJV;X12cc-uc>SSePk>0?_CeWckG@t-~ST#`<{Pr0$$nA09sL-l>Zf;|_4AQ0dW6 z<&gHPpo{1eC<)j9Xg z-P5SK&w732t7`}ce12Hq96OoR0-*J3se>JHAMKpx1OR#}c%LGi3LVi|r{3GNSVYwJ znrrK@tL}02UwrNUtN-wafBc^+|MYi%tUvtEf1kf8)c(nj^f$nHKly9$<4c#_*OWFs z_7;d$CWmcKJ=-7+ZbwP6kex2?r+F;%Ty05w{J&MI_%_xvJM8%V>O{n!32wlnw?6AW z<}mNwKG!bY3&UX()gOm##3Cg6>c{xsWDswaI@Z&>s*EHjtpyKHs%7m9ZnM3-@96V* zx2-!I4Y$J<9CWu!R?|T%VF-@&GcGCc(j+RKPqeOFp7Fo<(*2iz@%{eI`}Jo((ck|& zXF$OQh9S`E!&_{>(l2)U`Ir!$ZGdH^ljy$YAcv_CLS^ci-z<~h;B3w3Xq8qMH~#hq z*9))E?lI9$5uWbbuj*}HSXMum7R_GdcKX4t;mUD~o6SMeWr$ zijw|x&bTr6R^NRdZ<**~A`zB6;LMco#5YUs-D+LWThBgts&ALgnn|SR>ZE&)ki~E@ zfr!l(zk-1d!J|7SkEM6n48^AQ%TPUf*<5{?>8yS($#UstRn^|iQj$kCpY?Iu0npmJ zSUkve-VRaU7;Uqf!{66BfsQ*JmCsmjq^^JQO#3hX6TkUy@uq(A1N{vpTjaZSzBrW+ zKH6JuiGuZ6j`tn!es8AhzM1z*=6&R1JFzWLiHP2Myp#Lv9oI5#?Y2j}@Ct1TpKHhM zLgd&!I|;(Q!@aHfh|7$~0TsGGIaAJ!i`(c*)qt>Xt582he?+nmUyn*M1~R5* zqjdnnlF_7rO@DeaVJhW1k2qOhB=VBqn5ee1pT11E7JpQHbQXlyJ^O+YAcvVZD@P3{ zv_?zk*;NsQN3LS`lUa?clkjJBUNvi52QxfM{p6T&A8|yz-VHe}tEYwg!(vpS5XR!P z+W&Ix_J8`D1CgKoB!Bq7xz=Z`6D}S&8DA=$z_e(4C1_hOrADzYhGWX6;$O+z1 z*FLgawrI`(-;cf>D+YUrcoLbs~hS)#6GZ>WXo0rz@KX><8JVdQQt)>sJ!+f93PH zpZz$0{lZ4}G%+TESf1Hwkpp!;PuJ>!+hR;D7hNyK^AqZRp!#L*L(Z zpbbTy_Xt&@Etp$l+xL^pufm-E5AXi{Z?36+@>BcGL(2##5VCXQ7M$+Xubs5DS}~d{ z-|Ju)-Lh8)K{8(uNl+}D-OA(3t82vPEN+LoeUD9l-@ih!^<``6DI1MgB{t3{v*i4R zcwm3_rMIOz=3{iYW(_6-XZu5kY!*4kXg*U$j)RG2Z_S8`AZj zsV5je?esP~pJTypL60cyVLEDB-KsPy2&36c&Y8T zRB1o?q5b-`!nxA;soSu1w|3bQvvPI`VwN{rwATD9@dfRu;P4pRC3T(8Ic)EVf zp8MC5nDetA+pk}&JbG!MSs}@{DOgL^J=SJ++|vEIcF@TndZ}z9o)3G3u&6Do(_wn= zJ#Ee|{$|E_q|&bj7uP8r;=#D@rwG}-1gd@Qxu^bfk@XidI{A*f>UhmHPrE+$xkSH6 z&|)}R7BfB4+m?+@F}LsI_T(w4r{@-PP+@j3Ky(p5k2LyJT$BC)6z=IGW~#=XES5{< zoFhMO)&G@{e}48;`^$Uv|M{K0S6=|?fBV1wum9~w`v2uWP5#s0{n_h>tDQ6JN9(UtJgEfy?rnJ{G^wser(@x8FP&Y z(kTN^1JUKqS=JfX-uVmfW3|!e8y;1}F3zd4zZdMEX;Wv?lScLvApUyz_WtO5rF`G@ zx^!=Z)1N!%NF1+2#c(6Fy$U+u*uKAbB>V?=#=69i*?XXSVMGnuZEZPP#F$}v&q?dY z+K+s^X8g|k0=Lu&hLIp6W0@eQ|f zK(y~|XusWJxFP}CK^{x!G>n1smjUa4#BMpJWw$u-y4<~AJp$!tPG`HjORQwI(cVTv zeY%$SY4Z?BrRR&Rg8fDYa6A2hZIHrwU3vCU^^Jl@vTK*V*SWqgi8rf{n)6rr(reea zcQsNuIJEmEQcWqu$z$4lcgOuD9gEnKtv6oit=m~GyZDCF}`U%h1i6%wEN!{7a({^8aiep^WUlON)5_)pTtTnKj0)O@2C z_9Z3!4ss+@uj;UF_t_2g-bO***0X+d(MUBvy?ZOn6>If9X1&{dZAEaD>r0Y31Tf^w z(Z-hb6>oi6Kk?_I>=%^F|NZ~_pZ|CN^&kKAkAJB9-`5}i@!$Q^pK!tcKhWm?WaP~6 z<0Cu{k~L*jj$qk1V%@7pk@sDqBB#tdgE-_@y=>jZ64VkRx3$@4=pi7l9kBxGT?6X& zob7g`Ki5XBqjAY&m&pNzpN*k;&h~u-oB*+p!eF+jeui*?d9#B`Lb{Q}sSTxurH}@& z<=p9Y%=g6}k#Yz5gq)t-*tmM;UW_e9j`yOAxoLoKpT3;9Z8n$X{g%-7_4O_GXqhVOa9dUuM{{MrtyvtA2rWL@-i3`AzLg9aw9ixZ^bJ<*Ba z2;auHDIU@}WrDplTPuiTGRB*PCHC7~dz-R%@MaGgWIF1e8FM%D@sccBf6@pReRuAo zw|8;|*X><*Zt`LlT+P|PY#U8E_T~}o){aS;dmn~skeRr@yWB!+eSRX@UuvZSmu3)- z(9HP#&By_zfcWjlc0F877NpI5gEgD?uapwoF6|d(VQx!ggnpV`gA_SB^7?u+`^3ti zwywU0AbUN0i^6YssU-P}MKq6iTMbl7RUzlqdkFG;hu>d z_+qaIw_;t{GqRE|=V~*|FF|PIEw-g4dP_-5EfaY8ulb0_mcw_gLq@{+6j=b8<{UNe zQJbxM_G}Sf)IF&+2MKn)wI|c%N?fj=n6TvDV&VvN!hiW~oW^VYt(ngm4lyCb z#n}u z*!R2v=Wb$D3#^C|5Ma{5_Cz$&tJ-Y4^dIT5X0uqdfW3GwP-{)DEe& zyY3k~h|KN89`l1+uz(m2D$Y~^)49|$&eWw`R2bzN;p>CM$hE7j)iS8W<`BV2JLvSJT9_LUS~XL@>VYdihr z3@P@p#-)tzlx3RkmS8WptawKltu7LRW>MPYm z_v@)s4XD;C$bf)@JkIL=Yz9k+UUueqF~T>4_fX&EPG`C$asVne#lY^(=Gjd0r>!*uliu-$embSh<-IuA95q>^q-CR+cogvGSL&gUO(EQ$s z`7VEXo+vRU(pe4eVkKR;>k~}QSUn(n|%QwQ^HP;=TS>pp$KZk+kZ^0k+<-F%H z6>jw!UE6Fj+a8$sdmH!KblZw51&1rl%V_tVRhQ0@fcL#G38d}~MA;w=>l40^Fhj|* zG%%VBiIofq=3b%jSy(h>TiZ>MF6&xn#!VaLE7$cim!DPu&|Z~$$UN<|$2olu+(?(( zhmX+Pr%WP9I=f(NJTh|>Me-fcGwAPuuoo#7s6K#-wWQWIZSMfQBXzYYXU|nioMJwA zWD-2m8aX}g^&vC*$qA_R-FL5k`q|L8ylX&HbNt@)F}h~X_r-CJ-5UX-cJ^(wOvm?? z1G;JsKeD38s%V5*PqHr3!P(UK=rI#p^={0wyT|sy5_9*lR$syV5UjMd+$QU74dq2S zKB?Pm6qogjuXnm*YPGyfVzSMcZ)UOY~$4~m)x;d^tlF#Sl{{l7n-da0r?ziSW zg7NKZj-dwLXbeR>h)cTpMa<;{K9K@5_8K7XOU992m(ww@ z_0Yf0{k?%G>pD?=;!y~|9~JUTO3~+IRNK`C7>rfjn+v^Tj{&t@;J!A*yTrimq5H@3PBhUOJ~(1Rs$vp{{*fhboLX ziCp`IL=-bPnCu`+tF4<$nX0FgAyN1`Uy6WiAh6=Vajc#GSt)i2Xkq;|dQd-uf{(Y>qg zjsB1LxnZOUw`_@63Os#`YH>m>o&XZG1WL*$Y@xgn$j0c^iPck_7 zxO2wbDvb!b)a}ld*N#SOk8-JG@ia0U-PEjIFRDk$Al03FCyK`kz1ukm8T`zXM`u3S zU5TukfQtxOIU7{&WD4+N8-g^OPi*A6XPD#eKGS9k`BL<5XMu4d<}dakPDggMm)yrW zIu&IGin+CXRw@bZ#-#mKLt2PTPO_146i4FZoY}W=BQbM+SiRaz=6+x(m~DO2EZ*|k z{U9O)#56y@61yde_%kK@+>Yw$Sv2Y<(sN$+j1R5at3Whmh6@+gwz0TmR1)&*c?W>H zFw)&4_n2|K3&lm7J=^o9rW{bcM|6?Sh@`nqKZB>RcgM-{zLY^WhFdq81ZTdf=t&vA zB9K&Q7*~rf8zHi8vVLMO(pe8DUt}Af28*%O>VD%4m~ARcdt0FYN8(Ix>!8ngWu2$c zKa$|9E$i{YL;Ypq7Z=-yP9O1QU#!ibq;-h*tQWLbJauhgmCw?v%JstNhtzh-T=&j? z;y}VGvpwCX?ePvu1MA0C+IK(?&JfrRfT*?Cv}3;JB6U`Vuwsr*n1jwr4xD@D!OU#W zxb@RVTW3WPAF^nD@V3}{-syLl_y!%nAG^6nwYTiD-RhxH_6vDs3K>ZIrT5lk+{6y@ zuCyzykidW~g_>(XQ%?z-6hbi-*%ob8zR1%9&*dHVE_{fY>O zFETSndmK$O79|W>U~dOt$b27b->0tQZ{EzgVr8uAfS-^>z3y{d)Xn?#S#h3Z6;&7H zMDOP#-ffpoZm$e&do}mDW5?{%7zuOk)V6|Kz@&SpfMvFT zm+OwD&fd!>Fp=|IG76^gWwGIdDH$BeG5edSH`}eXSph$@b&Y6)k@rpW#wK4W%a8A= z+A7Qw?_mY&lnK9KeMb{D%o_&DPDSrptO$#QHU&g^&Kl3>K#pePoo4;hoVJ^)`Jx@0 z-RKC>D7@T$Yf4gP2@v`7IYy>v?sasLT{rlrjcoJXYo8F>kX8?yj=!&)8eOh$iMDw}%8+Cv zVz=0DHstGQN$$+v)_e??`#x;)m+!0ROHLjXpRJbmS2KMwkf2CdO2Et;C9<5^r6}EE zt>TWLIy+z0beFCs&-jP?gv#5`&4dUcT9^j}1bHn5NKg>edm_s^FBJlcn+-UGC;OPf zji!px-bj^*ntqZz%H3M~B;^R-WNpA(_Pq;hYST0fbD!u7TI*tqB#Z|Xi>9Fm==l}X zt07(Qt}*kQPH}IuLFw~>OUImHk(h68k?rO&vDn?auX7umu_sBC6rBB=FEpyaIg1FB z;&)jap*AJYU0m0j0~~oylSE8Z3qQ)*Yd}8}!iHP4+xSK*1@o~9r>Ip-95Uw;_c<4Z zEf;>8^|6^A+NzT+X6pqnzT^vex^w5-78M&Q^*zc!Xu|B4ecnvFJMP^> zj}wkyw0q;6v(R1iYi-m5F5j5hE4Be9Qk-jZQQp?)TkNBs7D>Dj30Ma;0O1FbCiITW z_#WqkBl9K>mV?RT~;9DRqR85u~;2kqDF0Q@iPrK z$U+Sqw>zc9Hv)iHym$3>J}$u0ua!B1O9B1g^)(yu^g)}~?~d#b`th~?ZFYRD?_WRC z;e3v_&o8ot-54*RPFBWza!g&WKjfwt75frbV7ETm1I>H8l+Kl`kRH|!HeXH24#P|;02cN>fwn~eom zh@}pyrzAGm6ltx*i!DucF__Gi*nnT;7EUX(KdaI-0EPx9tH?ajhO4tuQFQ$l1=I`y1??-9_Hm z(y0+Xdb*wgH=0o#^SFjvB93w+3{tH+Kju5W`bfouBb$il?HPX4b(N$J+h;O#YDD_~jSkN0^Rfirjle zf&=K6oANYtU_)6)yp`us<+0gOx1Av`gpn%0ytauBCfQ+TyYbY}osv4Sllw(mN+$uyio8&9F|(jzSk{dfot+bvMMo8?8K|>)S1w*m@u(cGokZIWGZ;(wMQD zAW1rXfe))xqS z$0XgThnc0`-8-FjwZVHOT|v3t&WQc10DOH@7CGaSb@s3S8c8dOp{urbnHQ zWyqdlvrK%xP~u{>K92c$SZ^Ed>U;d1Txh+rv>lS*kYbeFL+N^VZMq3`y7wzt+V#fj zeoM;_!m)EuEUi8C+oipD?5^K=Z#9bJH#KKaZtg8qC3)iI%88g}nVmby73=fuyJ=kB zRA-vKKSKNvs)(2KoMF_Cu2-($y59<&duYzpfDNf%HVysWq)98dqp!W=tx?_V7B!ct zPth;Cz;=IArm=FdvBvn;>g#6Xo4Z@Xam0pc7;&vN8uQ;ASyGd9aCuBqW|AersB{y#sFX+*Zw_T!d^|N4yHgIl=}Js((( ztiPL-#i;9SrM-%=u_9RLbTWdV-lK1Kf|zz=ay`$!(i4_cjPpwc-R#>N+%ZY#4w%zEf`2=^o$LMo!Z10bp<;~5zryJ^HM9Mbtq2Y<=7qKSqdD6Nu zH^6;8K9lu3BZt(|y;|po80d)yvOE6t4|J%rRbvf8R$J$Z{Q9IUNkb^V`Z=Ksh0D)SM92jAVue!6B^NTnHRk)o!TeCD>Y^$5V zjS6Z*G$L!LTNNR8byymE>*XgIU^8RwR5zxHaa8Cor|lO( zW6p^BUV+@SDH7+E-ammRQk?4Vo`8jSbrz>9ko@@@`k?e7fdSo96%(Vts+aUm;|Z`qWtmU!^!VP!Z9f8gra5R zu&)?h6j>7=7Sig|M6PPZ5vI{Q(i$^~=w4dHecxTMsp$N}!H|4Zrd%PZm?m7n~F54aNmjqAI zhOlUd4)&5Gdv8m)q)=J!3XL}MHFVX1tm=65GtW7vSKYDelS0_bw8Djksk*np-o!rn zE$irF%KlNjMVx)g3M@`dZtS8j3z|Bnne8A9>2ER>gnS{KfEaJrZc;5osBb*O;5qKo zO-QPkq){UQcnsI>>r;Speezp6Wn1v;{qz{a9w~k?5G%5tzwB%;xiMTaryaHDDf5GP z3`S9RG8Ge!zXxFHvuPE#6?VfNtFxN7;i#HC{XkzpU4O6sqGkE{AAyC{9nP?Y;Eu(~ zbLU05vFEcu8vDbC z9ZAnyfu;1Vdz~X{rx~ZfX;cYNug_^!XD?Oh1a#^?jOsh1xi*DecWWrL+gy=cQ_bz% z`+}ve0h4Ftzi%x)+N$psI8O<1yriL62zn4jA^Sun=R}<4RA!7>tdP{NeXzcqjxDjy zryHcs=o2+@fZmvW-R?TSNRP|#8;|TdcdRL|gKp3n4H@^)!_53GS^Lwe1;RWVS4oTC z%g5Q~hFWxdOQ-b^C(<(ZJ8P~^D8p*;jO|7$YsMY4`U9}>w<-nm=bQ1)wg+b>^jIOz zuh;txp`L`gTW_yr<%hJ$xBX0{TpjJi9aVY1R9?jD55LoeHgV=VrydI*wB474C8ZFt zt!QmOS-vm+-rLQXv~oM8ou<*0!I$*zaT!3BuRGdA?$c26w)3ng0zV3Rj`R3|Z$EcP z9W>#@v$JP!)(lU9PEXd~NTOZOLpb{Nly529`V`PU7a>7lXy*$xzGd37i>8oS|MCj! zRg5ymjllSShe^RZ8x2vQE2q*bV`0vTez^G;WbJLaO^Q*KnK4LitSYg zlhq309T$80qG~dBVlP!_bjs=LPB(iOJ!xUFwEnEMZxg{oWDN#hq#qXky2#sj*r!TOU+Ry+*7PR|iLN`(~4z3;nGa&HS(&#Ke>QpO%FgZ8BHwoN?Xj zF2a#M87a!qmbXKv(q|dHP*UM(I+B4V-_R5UShruCv~mQwndvg&Q@CkAb}7kjF+lhs#q|t+5y1hVbyWVb2uT)IzX+L5?OPDl8}a7JUxFB(ki= zAbXbCP35k3zOl=}Y{G_L&u)z98FV)12u2F5$K_43$m<2r4h$Fm*k(6l*nxA6TsHeu zpK*AS!fE-rf|Sv&54k>jl&-hGPcSj6>h1>>VE|Hu1~S^H(^j!iM!;~!kdV3F#rVpk z2SQdXAT*XQNo2UvnG2q?rTd5SUyd!E)gF~`Z&aN|3KImhm^aM>$veGdJv3d_Xk6Xc z%n{o&W2-y*`;`3_Sv?R426$LCFLwrX^NVPC!}q?Yb8T}^aYt-ejfb@y+hpH28jtHE zYOr)OUkrOzV+dBCZo8lB<4qQzY^d)lAMfgP>c4H@+DHVi?#b0>S2BS+vp+nSAp)I+ z!T31#`}hd$Wv;AA99c9Jbn6HV++_?@=!Plr#Sv9M>}xMSi89uB9nk~l46C7i+CC#> z)*+5?mMg$s;5+Ue^|DtcitoE`WxlyvuiwWA3IV!mgNmW0EKA?3$ocuNSzk`oZ zGCg%Ns8d9b*vF2l)v$-Vnb|f89J`*p_h95hDMjG1ZJ}++USCeoV~0UF0Sg~Sdk!H1 zXz*P9)H?y-ih^k(eS^gRzUk}l;HK;?712W>hdO7jw;P@B3+m}Ao*eSVwkof#?WHLZ z+qb0-CrYs5m^3&D+uuSzyK3!Q8*a(0h;?!;!jg{oZmZY961S-#Klj)ocEn~i^in~T z%~u*BlM`eD3U1lhGjLGfS=&h7p~RkF2^>z3ANjNA8u$TBM(tY zTLXKGOAnT4-^53S_2p)4-YTS+Vgd^Txp}ilR6a-WeMv{y))+58I=YqwW7+4MI%lo@ zM%lHCDf{+0mVLn_shgP7GY$?4!=vyF9Pe!p77ODw_&LHdxTFjD3kYJj_ifN5;t9h1 zWh3)WT$aR7?7ITmNyzxVlHni%9j=V<;qtP{e!oDTTRN{ zCZva8*eH;gmy($^qo2N%L6evOI;{R!-I_LM>)uaHvJ2L#_#C2XOe5PyeIn0kObF<) zPiA-LW{O<%IL^$m4lt|HFXKypU7u?6TBs&D2G;zDstK`laax|b&8Au(tQGIVFAsd- zJiW7Z^24Kzkyj}Xb|WzDHJj}Uzl=}grnaK?c+E{%y@Jg}bac_)?3r&NRV8`_BNJx8 zz-V2cv-j3bOwNrl+5-Zj(Ya> zH+I%)?P=baEtzv}IbU&2H~V&azEP2OZPb*W9;-i;??fCyo)am+zYRU7o6Z z(NuMgw7D(s=sSeUbnXRcP?VG-*yUT{H4ve(Fqd9ttZe!^8iRLmb&1!)x>G(h4+a)jHj{73hujtw zbl(puGf}j;;34(Ct=oFI7QRD@ww5%xASt9(*}&dF)q=HF3C(F?pJn`I4FuY&u=NR^ z%wae!;R=oAOQpBQV_!!~Cu&|;YU<7{(uErCbL-(IYPAMd{Q1f9*)bCZhAsK+nB$va z%&zIiWJ(Z=YRT3=@>`Q79;n2-On}6evYms?aa^FFuZ%8Ohx9xVJ>rG zxoVz6Wf&MTv#}wwgs@_3J6no7jujHQ)zC4eS=RM_3;!Rb8L6;F`qc^0E}KQ?c%Q)_ z_V}VNeTy6OWIzB(j36K%lyGNkR33M39gx4UBYQXBrPK>_X5M^B?UAh*Ax8RlG|6OM zi^b049y#maO4N1DoNCy!`Xt%l?8M%ucg(XtGqs`j%{F=Tj}Lx{M9^G7UlRn)Dv;sd zFCtB2ygOfKP{6ffZaV@tkfLqUg9`r*($t8EU3891ob%ysAQq}9&yjGj(M9;y#_~7O zvR^5=`T5T;@wnD%Kejy!pR3RNy^clXX-BmY4;Q$ih*@|RNT7Nv?`6OX`GHLi=4F$1 zbbd4H$M0mL0vS1QHrII!@v_&*wW@(Aute&7Hbqc^l)$oqbnxRZoY*$+EZjk{u(iQ{ zcp3oB3P)9^r0<;%knf@sUV}b+Ihn1vt%c?b0$SlqD!?hYOGdUX*kkt2Pmg@;B>ps} zFIS$tBY(cEeG_HJ;pJj-**NpI9)C;j=vFHk+p=+HbBQK% z1zkvhqe%=1Olq^b?j`rgG^l;75~o7b9!`yT^#h}z9eYI?QIn35H4F8^oPf*v?2vHs zZ4{Ud4nD@QF*ml6cl!bPfB1oqs5C0f=#}#+YzB`-VgT3_+aqfhkrZb};{9i77RRD5 zhPKF29fE|)c^eRisIhy8$lsvJeJha#(Z$Wy)6wx|<_l;BTs@C9u;8j~ zSG4yxUT-=KfzJPrxpPgEB-OR$l#ql#3iW=*f`V|t> zaO${L9ChV;>RihFP!s-W{}Gx%6w|+|sTdJIQDs>d3S@O%+(i ztUK!T1bIcatTEB(BDYeHw%yR{j@Ompg3*ic@_@}enx5Row1rqGrF1eL1wrWIza`@y zzwBQOvRFn{ou&3o7m#W%T!g~^O}WtYpNb|M&3D1Hd+q50Qn(k{`#27d!Lz)aGRptf@KiC?hO5&XE8K3d z3Ly$h)^h!zL?om(<^?d+A}nc_j)kqq_Q~?`nrQlRS-%NKY&2ZjcFQHXP1cx=9w{@? zX1A94hNF#RGz&MKG*j**kjl#v^+k_4TQBAp^U3Ch2uzC7KMzcc+smxrN`N~(N&zH(t3KLw+T_Dc`-lw)J4v|a9kmPpr0hOi_YAwtUir=Ap2S*6#4J2_E=H5+~g zBmjN{>8W#M$72%lI^m0%NhUW;n!1A(;3$JaT{&|PQF!j^*RyCLA8Ug_9<6R=V*V6G z6TM;?TuD$Q9oN-Ig(tgYcCE>`biP~@x1jxksX@4KEEP)X^YRr=0l#0ya0}ky5q

lRju?@sA>>HuES&efM# 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

CcOV1?yl8k2_Er)+ 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 z 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 @|^T9cC@Tk~16zM4f<5T(A+Q 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

+ { load() }) + const repositoryOptions = computed(() => { if (!repositoriesData.value) return [] - return Object.keys(repositoriesData.value).map(name => ({ label: name, value: name })) + return Object.keys(repositoriesData.value).sort().map(name => name) }) diff --git a/src/components/snapshotpolicies/SnapshotPolicies.vue b/src/components/snapshotpolicies/SnapshotPolicies.vue index 80822a57..c328abc3 100644 --- a/src/components/snapshotpolicies/SnapshotPolicies.vue +++ b/src/components/snapshotpolicies/SnapshotPolicies.vue @@ -8,37 +8,23 @@ -
- - - {{ t('snapshot_policies.unsupported_version') }} - -
- +
diff --git a/src/components/snapshotpolicies/SnapshotPoliciesTable.vue b/src/components/snapshotpolicies/SnapshotPoliciesTable.vue index 055a3c28..7f664abb 100644 --- a/src/components/snapshotpolicies/SnapshotPoliciesTable.vue +++ b/src/components/snapshotpolicies/SnapshotPoliciesTable.vue @@ -6,7 +6,7 @@ :filtered-results-count="filterStateProps.filteredResultsCount" class="q-ml-md" /> - + @@ -15,33 +15,20 @@ :rows-per-page-options="DEFAULT_ROWS_PER_PAGE" :pagination="{ sortBy: 'name' }"> diff --git a/src/composables/CallElasticsearch.ts b/src/composables/CallElasticsearch.ts index 95f3a6ee..9f53ee82 100644 --- a/src/composables/CallElasticsearch.ts +++ b/src/composables/CallElasticsearch.ts @@ -15,7 +15,7 @@ export interface RequestState { status: number } -export function useElasticsearchAdapter () { +export function useElasticsearchAdapter() { const connectionStore = useConnectionStore() const requestState: Ref = ref({ @@ -127,14 +127,14 @@ const elasticsearchError = (error: any) => { * const { requestState, data, load } = useElasticsearchRequest('clusterInfo') * onMounted(load) */ -export function useElasticsearchRequest (method: ElasticsearchMethod, params?: object) { +export function useElasticsearchRequest(method: ElasticsearchMethod, params?: object) { const { requestState, loading, callElasticsearch } = useElasticsearchAdapter() const data: Ref = ref(null) const load = () => { return callElasticsearch(method, params) - .then(body => (data.value = body)) - .catch(() => (data.value = null)) + .then(body => (data.value = body)) + .catch(() => (data.value = null)) } return { diff --git a/src/composables/components/snapshotpolicies/EditSnapshotPolicy.ts b/src/composables/components/snapshotpolicies/EditSnapshotPolicy.ts index 36a4a32c..b14d2529 100644 --- a/src/composables/components/snapshotpolicies/EditSnapshotPolicy.ts +++ b/src/composables/components/snapshotpolicies/EditSnapshotPolicy.ts @@ -1,13 +1,14 @@ import { useTranslation } from '../../i18n' import { computed, ref } from 'vue' import { defineElasticsearchRequest, useElasticsearchAdapter } from '../../CallElasticsearch' -import type { SnapshotPolicyForm, SnapshotPolicyRequestBody, EmitFunction, ElasticsearchResponse } from '../../../types/snapshotPolicies' +import type { SnapshotPolicyForm, SnapshotPolicyRequestBody, ElasticsearchResponse } from '../../../types/snapshotPolicies' -export const useEditSnapshotPolicy = (emit: EmitFunction) => { +export const useEditSnapshotPolicy = (emit: any) => { const t = useTranslation() const dialog = ref(false) const policy = ref({ + id: '', name: '', schedule: '', repository: '', @@ -26,6 +27,7 @@ export const useEditSnapshotPolicy = (emit: EmitFunction) => { const resetForm = () => { policy.value = { + id: '', name: '', schedule: '', repository: '', @@ -49,13 +51,14 @@ export const useEditSnapshotPolicy = (emit: EmitFunction) => { }) const { callElasticsearch } = useElasticsearchAdapter() - const loadPolicy = async (policyName: string) => { + const loadPolicy = async (policyId: string) => { try { - const data = await callElasticsearch('slmGetPolicy', { policy: policyName }) - if (data && data[policyName]) { - const p = data[policyName].policy + const data = await callElasticsearch('slmGetPolicy', { policy: policyId }) + if (data && data[policyId]) { + const p = data[policyId].policy policy.value = { - name: policyName, + id: policyId, + name: p.name, schedule: p.schedule, repository: p.repository, indices: p.config?.indices?.join(',') || '*', @@ -75,6 +78,7 @@ export const useEditSnapshotPolicy = (emit: EmitFunction) => { if (!formValid.value) return const policyBody: SnapshotPolicyRequestBody = { + name: policy.value.name, schedule: policy.value.schedule, repository: policy.value.repository, config: { @@ -84,7 +88,6 @@ export const useEditSnapshotPolicy = (emit: EmitFunction) => { } } - // Add retention if specified if (policy.value.retentionExpireAfter || policy.value.retentionMaxCount || policy.value.retentionMinCount) { policyBody.retention = {} if (policy.value.retentionExpireAfter) { diff --git a/src/composables/components/snapshotpolicies/NewSnapshotPolicy.ts b/src/composables/components/snapshotpolicies/NewSnapshotPolicy.ts index 4fe05ab9..ca6d5856 100644 --- a/src/composables/components/snapshotpolicies/NewSnapshotPolicy.ts +++ b/src/composables/components/snapshotpolicies/NewSnapshotPolicy.ts @@ -1,13 +1,14 @@ import { useTranslation } from '../../i18n' import { computed, ref } from 'vue' import { defineElasticsearchRequest } from '../../CallElasticsearch' -import type { SnapshotPolicyForm, SnapshotPolicyRequestBody, EmitFunction, ElasticsearchResponse } from '../../../types/snapshotPolicies' +import type { SnapshotPolicyForm, SnapshotPolicyRequestBody, ElasticsearchResponse } from '../../../types/snapshotPolicies' -export const useNewSnapshotPolicy = (emit: EmitFunction) => { +export const useNewSnapshotPolicy = (emit: any) => { const t = useTranslation() const dialog = ref(false) const policy = ref({ + id: '', name: '', schedule: '', repository: '', @@ -20,13 +21,14 @@ export const useNewSnapshotPolicy = (emit: EmitFunction) => { }) const formValid = computed(() => ( - policy.value.name.length > 0 && - policy.value.schedule.length > 0 && + policy.value.name.length > 0 && + policy.value.schedule.length > 0 && policy.value.repository.length > 0 )) const resetForm = () => { policy.value = { + id: '', name: '', schedule: '', repository: '', @@ -44,15 +46,16 @@ export const useNewSnapshotPolicy = (emit: EmitFunction) => { dialog.value = false } - const { run, loading } = defineElasticsearchRequest({ - emit: (event: string) => emit(event as 'reload'), - method: 'slmPutPolicy' + const { run, loading } = defineElasticsearchRequest({ + emit: (event: string) => emit(event as 'reload'), + method: 'slmPutPolicy' }) - + const createPolicy = async () => { if (!formValid.value) return const policyBody: SnapshotPolicyRequestBody = { + name: policy.value.name, schedule: policy.value.schedule, repository: policy.value.repository, config: { @@ -62,7 +65,6 @@ export const useNewSnapshotPolicy = (emit: EmitFunction) => { } } - // Add retention if specified if (policy.value.retentionExpireAfter || policy.value.retentionMaxCount || policy.value.retentionMinCount) { policyBody.retention = {} if (policy.value.retentionExpireAfter) { @@ -78,7 +80,7 @@ export const useNewSnapshotPolicy = (emit: EmitFunction) => { const success = await run({ params: { - policy: policy.value.name, + policy: policy.value.id, body: policyBody }, snackbarOptions: (body: ElasticsearchResponse) => { @@ -88,7 +90,7 @@ export const useNewSnapshotPolicy = (emit: EmitFunction) => { } } }) - + if (success) closeDialog() } diff --git a/src/composables/components/snapshotpolicies/SnapshotPoliciesTable.ts b/src/composables/components/snapshotpolicies/SnapshotPoliciesTable.ts index 46133847..99fdd290 100644 --- a/src/composables/components/snapshotpolicies/SnapshotPoliciesTable.ts +++ b/src/composables/components/snapshotpolicies/SnapshotPoliciesTable.ts @@ -4,7 +4,7 @@ import { filterItems } from '../../../helpers/filters' import { defineElasticsearchRequest } from '../../CallElasticsearch' import { genColumns } from '../../../helpers/tableColumns' import { setupFilterState } from '../shared/FilterState.ts' -import type { SnapshotPolicy, EmitFunction } from '../../../types/snapshotPolicies' +import type { SnapshotPolicy } from '../../../types/snapshotPolicies' export type EsSnapshotPolicy = { version: number @@ -17,35 +17,33 @@ export type SnapshotPoliciesTableProps = { policies: Record } -export const useSnapshotPoliciesTable = (props: SnapshotPoliciesTableProps, emit: EmitFunction) => { +export const useSnapshotPoliciesTable = (props: SnapshotPoliciesTableProps, emit: any) => { const t = useTranslation() const filter = ref('') const editingPolicyName = ref('') - const results = computed(() => Object.entries(props.policies)) - const filteredResults = computed(() => { - if (results.value.length === 0) return [] - const policies = results.value.map(([name, policy]) => ({ - name, + const results = computed(() => ( + Object.entries(props.policies).map(([id, policy]) => ({ + id, + name: policy.policy.name, schedule: policy.policy.schedule, repository: policy.policy.repository, - retention: policy.policy.retention ? - (policy.policy.retention.expire_after || `${policy.policy.retention.max_count || 'N/A'} snapshots`) : - 'No retention' + retention: policy.policy.retention ? + (policy.policy.retention.expire_after || `${policy.policy.retention.max_count || 'N/A'} snapshots`) : + 'No retention', + ...policy })) - return filterItems(policies, filter.value, ['name']) - }) + )) - const { run: deleteRun } = defineElasticsearchRequest({ - emit: (event: string) => emit(event as 'reload'), - method: 'slmDeletePolicy' - }) - const { run: executeRun } = defineElasticsearchRequest({ - emit: (event: string) => emit(event as 'reload'), - method: 'slmExecutePolicy' + const filteredResults = computed(() => { + if (results.value.length === 0) return [] + return filterItems(results.value, filter.value, ['id', 'name', 'repository']) }) + const { run: deleteRun } = defineElasticsearchRequest({ emit, method: 'slmDeletePolicy' }) + const { run: executeRun } = defineElasticsearchRequest({ emit, method: 'slmExecutePolicy' }) + const deletePolicy = (name: string) => { return deleteRun({ confirmMsg: t('snapshot_policies.policies_table.delete_policy.confirm', { name }), @@ -69,6 +67,7 @@ export const useSnapshotPoliciesTable = (props: SnapshotPoliciesTableProps, emit const filterStateProps = setupFilterState(results, filteredResults) const columns = genColumns([ + { label: t('snapshot_policies.policies_table.table.headers.id'), field: 'id' }, { label: t('snapshot_policies.policies_table.table.headers.name'), field: 'name' }, { label: t('snapshot_policies.policies_table.table.headers.schedule'), field: 'schedule' }, { label: t('snapshot_policies.policies_table.table.headers.repository'), field: 'repository' }, diff --git a/src/locales/cn.json b/src/locales/cn.json index 4ca9ac24..dec41e17 100644 --- a/src/locales/cn.json +++ b/src/locales/cn.json @@ -734,6 +734,7 @@ "policies_table": { "table": { "headers": { + "id": "ID", "name": "名称", "schedule": "计划", "repository": "仓库", diff --git a/src/locales/en.json b/src/locales/en.json index 6502fed2..677749c8 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -734,6 +734,7 @@ "policies_table": { "table": { "headers": { + "id": "ID", "name": "Name", "schedule": "Schedule", "repository": "Repository", diff --git a/src/locales/fr.json b/src/locales/fr.json index 0f9cd550..0507c491 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -734,6 +734,7 @@ "policies_table": { "table": { "headers": { + "id": "ID", "name": "Nom", "schedule": "Planification", "repository": "Dépôt", diff --git a/src/locales/it.json b/src/locales/it.json index 8cb69500..b2a822dc 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -734,6 +734,7 @@ "policies_table": { "table": { "headers": { + "id": "ID", "name": "Nome", "schedule": "Programmazione", "repository": "Repository", diff --git a/src/locales/jp.json b/src/locales/jp.json index a13d99b0..90f30e8f 100644 --- a/src/locales/jp.json +++ b/src/locales/jp.json @@ -734,6 +734,7 @@ "policies_table": { "table": { "headers": { + "id": "ID", "name": "名前", "schedule": "スケジュール", "repository": "リポジトリ", diff --git a/src/locales/ru.json b/src/locales/ru.json index 337e75f1..aa13e0d6 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -734,6 +734,7 @@ "policies_table": { "table": { "headers": { + "id": "ID", "name": "Название", "schedule": "Расписание", "repository": "Репозиторий", diff --git a/src/services/ElasticsearchAdapter.ts b/src/services/ElasticsearchAdapter.ts index 806367c6..3ed96763 100644 --- a/src/services/ElasticsearchAdapter.ts +++ b/src/services/ElasticsearchAdapter.ts @@ -288,8 +288,7 @@ export default class ElasticsearchAdapter { return this.request(`_snapshot/${repository}/${snapshot}`, 'GET') } - // Snapshot Lifecycle Management (SLM) APIs - available from ES 7.4.0+ - slmGetPolicies () { + catSlmPolicies () { return this.request('_slm/policy', 'GET') } diff --git a/src/types/snapshotPolicies.ts b/src/types/snapshotPolicies.ts index 79996edb..5f75021a 100644 --- a/src/types/snapshotPolicies.ts +++ b/src/types/snapshotPolicies.ts @@ -24,6 +24,7 @@ export interface SnapshotPolicyResponse { } export interface SnapshotPolicyForm { + id: string name: string schedule: string repository: string @@ -36,14 +37,13 @@ export interface SnapshotPolicyForm { } export interface SnapshotPolicyRequestBody { + name: string schedule: string repository: string config: SnapshotPolicyConfig retention?: SnapshotPolicyRetention } -export type EmitFunction = (event: 'reload', ...args: unknown[]) => void - export interface SnapshotRepository { type: string settings: { From 095c9ad8fde96f93a86d1cbdb6f03059d4a86b43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Wed, 8 Oct 2025 20:04:48 +0200 Subject: [PATCH 08/46] move policies to modal --- Makefile | 3 + src/components/base/AppHeader.vue | 47 +++---- .../NewRepositorySnapshotPolicy.vue} | 45 ++---- .../repositories/RepositoryPolicies.vue | 72 ++++++++++ .../SnapshotRepositoriesTable.vue | 64 ++++----- .../snapshotpolicies/EditSnapshotPolicy.vue | 114 --------------- .../snapshotpolicies/SnapshotPolicies.vue | 30 ---- .../SnapshotPoliciesTable.vue | 64 --------- .../NewRepositorySnapshotPolicy.ts | 105 ++++++++++++++ .../repositories/RepositoryPolicies.ts | 100 ++++++++++++++ .../snapshotpolicies/EditSnapshotPolicy.ts | 130 ------------------ .../snapshotpolicies/NewSnapshotPolicy.ts | 106 -------------- .../snapshotpolicies/SnapshotPoliciesTable.ts | 89 ------------ src/locales/cn.json | 22 +-- src/locales/en.json | 22 +-- src/locales/fr.json | 22 +-- src/locales/it.json | 22 +-- src/locales/jp.json | 22 +-- src/locales/ru.json | 22 +-- src/router.ts | 2 - 20 files changed, 408 insertions(+), 695 deletions(-) rename src/components/{snapshotpolicies/NewSnapshotPolicy.vue => repositories/NewRepositorySnapshotPolicy.vue} (65%) create mode 100644 src/components/repositories/RepositoryPolicies.vue delete mode 100644 src/components/snapshotpolicies/EditSnapshotPolicy.vue delete mode 100644 src/components/snapshotpolicies/SnapshotPolicies.vue delete mode 100644 src/components/snapshotpolicies/SnapshotPoliciesTable.vue create mode 100644 src/composables/components/repositories/NewRepositorySnapshotPolicy.ts create mode 100644 src/composables/components/repositories/RepositoryPolicies.ts delete mode 100644 src/composables/components/snapshotpolicies/EditSnapshotPolicy.ts delete mode 100644 src/composables/components/snapshotpolicies/NewSnapshotPolicy.ts delete mode 100644 src/composables/components/snapshotpolicies/SnapshotPoliciesTable.ts diff --git a/Makefile b/Makefile index 98810f16..8a742447 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,9 @@ UID := $(shell id -u) dev: docker compose -f compose.yml up --build +lint: + docker compose -f compose.yml run --rm elasticvue npm run lint -- --fix + build_docker_ci: docker build --platform linux/amd64 -f docker/Dockerfile_ci -t elasticvue-ci . diff --git a/src/components/base/AppHeader.vue b/src/components/base/AppHeader.vue index 57e06225..fa47985d 100644 --- a/src/components/base/AppHeader.vue +++ b/src/components/base/AppHeader.vue @@ -3,42 +3,39 @@ logo - + Elasticvue - - - - - - - - - + + + + + + + + diff --git a/src/components/snapshotpolicies/NewSnapshotPolicy.vue b/src/components/repositories/NewRepositorySnapshotPolicy.vue similarity index 65% rename from src/components/snapshotpolicies/NewSnapshotPolicy.vue rename to src/components/repositories/NewRepositorySnapshotPolicy.vue index 9a1fb5fa..89a46028 100644 --- a/src/components/snapshotpolicies/NewSnapshotPolicy.vue +++ b/src/components/repositories/NewRepositorySnapshotPolicy.vue @@ -1,11 +1,11 @@ \ No newline at end of file +defineProps({ + status: { + type: String, + default: 'unknown' + }, + loading: { + type: Boolean, + default: false + } +}) + diff --git a/src/components/clusterselection/ClusterTable.vue b/src/components/clusterselection/ClusterTable.vue index dda2bf34..5ec812a9 100644 --- a/src/components/clusterselection/ClusterTable.vue +++ b/src/components/clusterselection/ClusterTable.vue @@ -4,41 +4,45 @@ - - \ No newline at end of file +import { ref } from 'vue' +import AddCluster from '../setup/AddCluster.vue' +import { useTranslation } from '../../composables/i18n.ts' +import { buildConfig } from '../../buildConfig.ts' +import ConfigureHelp from '../setup/ConfigureHelp.vue' + +const dialog = ref(false) +const t = useTranslation() + diff --git a/src/components/clusterselection/UnsupportedVersion.vue b/src/components/clusterselection/UnsupportedVersion.vue index 724e7a41..698bbe4f 100644 --- a/src/components/clusterselection/UnsupportedVersion.vue +++ b/src/components/clusterselection/UnsupportedVersion.vue @@ -1,11 +1,10 @@ \ No newline at end of file +defineProps<{ majorVersion: string }>() + diff --git a/src/components/home/ClusterHealth.vue b/src/components/home/ClusterHealth.vue index e2165e1d..777fe239 100644 --- a/src/components/home/ClusterHealth.vue +++ b/src/components/home/ClusterHealth.vue @@ -21,7 +21,7 @@ Timed out - {{ data.timed_out }} + {{ data.timed_out }} @@ -30,7 +30,7 @@ Relocating shards - + {{ data.relocating_shards }} @@ -41,7 +41,7 @@ Initializing shards - + {{ data.initializing_shards }} @@ -52,7 +52,7 @@ Unassigned shards - + {{ data.unassigned_shards }} @@ -63,7 +63,7 @@ Delayed unassigned shards - + {{ data.delayed_unassigned_shards }} @@ -85,8 +85,10 @@ Active shards percent - + {{ data.active_shards_percent_as_number.toFixed(2) }}% @@ -125,31 +127,31 @@ diff --git a/src/components/home/ClusterInformation.vue b/src/components/home/ClusterInformation.vue index 6fc810c7..7ce21d57 100644 --- a/src/components/home/ClusterInformation.vue +++ b/src/components/home/ClusterInformation.vue @@ -141,32 +141,32 @@ \ No newline at end of file +const { requestState, data, load } = useElasticsearchRequest('clusterInfo') +onMounted(load) + diff --git a/src/components/home/HomePage.vue b/src/components/home/HomePage.vue index c02518e0..2590e2a7 100644 --- a/src/components/home/HomePage.vue +++ b/src/components/home/HomePage.vue @@ -15,8 +15,8 @@ Your cluster is running in
- serverless mode. - , which significantly limits the functionality of Elasticvue due to many unavailable APIs. + serverless mode.
, which significantly limits the functionality of Elasticvue due to many unavailable APIs. @@ -38,10 +38,10 @@ diff --git a/src/components/home/HomeStatus.vue b/src/components/home/HomeStatus.vue index 909146ec..494a47c6 100644 --- a/src/components/home/HomeStatus.vue +++ b/src/components/home/HomeStatus.vue @@ -2,7 +2,7 @@
-

{{ data.cluster_name }}

+

{{ data.cluster_name }}

{{ connectionStore.activeCluster?.uuid }}
@@ -20,7 +20,7 @@

- + {{ data.nodes.count.total }} nodes

@@ -36,16 +36,14 @@

- + {{ data.indices?.shards?.total || 0 }} shards

{{ data.indices.shards?.primaries || 0 }} primaries

-

- {{ (data.indices?.shards?.total || 0) - (data.indices.shards?.primaries || 0) }} replicas -

+

{{ (data.indices?.shards?.total || 0) - (data.indices.shards?.primaries || 0) }} replicas

@@ -54,7 +52,7 @@

- + {{ data.indices.count }} indices

@@ -68,45 +66,45 @@ \ No newline at end of file +const { load, data } = useElasticsearchRequest('clusterStats') +let interval: number +onMounted(() => { + load() + interval = window.setInterval(load, 10000) +}) +onUnmounted(() => clearInterval(interval)) + diff --git a/src/components/home/UnhealthyReason.vue b/src/components/home/UnhealthyReason.vue index 20d849c7..88df8e26 100644 --- a/src/components/home/UnhealthyReason.vue +++ b/src/components/home/UnhealthyReason.vue @@ -26,30 +26,30 @@ \ No newline at end of file +watch(() => props.health, loadUnhealthyIndices) +onMounted(loadUnhealthyIndices) + diff --git a/src/components/indextemplates/IndexTemplateRow.vue b/src/components/indextemplates/IndexTemplateRow.vue index f057274b..cd7e42ae 100644 --- a/src/components/indextemplates/IndexTemplateRow.vue +++ b/src/components/indextemplates/IndexTemplateRow.vue @@ -19,17 +19,17 @@ \ No newline at end of file +const props = defineProps<{ row: GenericIndexTemplate }>() +const expand = ref(false) +const cleanedRow = computed(() => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { indexPatterns, ...rest } = props.row + return rest +}) + diff --git a/src/components/indextemplates/IndexTemplates.vue b/src/components/indextemplates/IndexTemplates.vue index d4702ea0..2a9335ad 100644 --- a/src/components/indextemplates/IndexTemplates.vue +++ b/src/components/indextemplates/IndexTemplates.vue @@ -11,26 +11,33 @@ - +
diff --git a/src/components/indextemplates/IndexTemplatesTable.vue b/src/components/indextemplates/IndexTemplatesTable.vue index 81d93c52..d800b213 100644 --- a/src/components/indextemplates/IndexTemplatesTable.vue +++ b/src/components/indextemplates/IndexTemplatesTable.vue @@ -9,13 +9,19 @@ - + - + @@ -23,18 +29,20 @@ -
+
- - diff --git a/src/components/indices/ClusterIndices.vue b/src/components/indices/ClusterIndices.vue index 6b21c5e5..63087668 100644 --- a/src/components/indices/ClusterIndices.vue +++ b/src/components/indices/ClusterIndices.vue @@ -16,30 +16,30 @@ diff --git a/src/components/indices/IndexAliases.vue b/src/components/indices/IndexAliases.vue index 57beec47..3172e525 100644 --- a/src/components/indices/IndexAliases.vue +++ b/src/components/indices/IndexAliases.vue @@ -9,7 +9,7 @@ - +

@@ -26,40 +26,46 @@
- + - +
- - \ No newline at end of file +const { dialog, requestState, reindex, dest } = useIndexReindex(props, emit) + diff --git a/src/components/indices/IndexRow.vue b/src/components/indices/IndexRow.vue index edce8a30..74d57385 100644 --- a/src/components/indices/IndexRow.vue +++ b/src/components/indices/IndexRow.vue @@ -4,8 +4,7 @@ - + {{ index.index }} @@ -22,17 +21,16 @@ -
+
{{ index.pri }}p  {{ index.rep }}r
@@ -55,7 +53,7 @@ - + @@ -63,7 +61,7 @@ {{ t('indices.index_row.options.show_info') }} - + @@ -75,9 +73,7 @@ - + @@ -86,46 +82,57 @@ method="indexForcemerge" :method-params="{ indices: [props.index.index] }" :text="t('indices.index_row.options.forcemerge.text')" - :growl="t('indices.index_row.options.forcemerge.growl', {index: index.index})" + :growl="t('indices.index_row.options.forcemerge.growl', { index: index.index })" icon="call_merge" - @done="emitReloadAndCloseMenu" /> + @done="emitReloadAndCloseMenu" + /> - + - + - + - - + + @@ -134,18 +141,21 @@ method="deleteByQuery" :method-params="{ index: props.index.index }" :text="t('indices.index_row.options.delete_by_query.text')" - :growl="t('indices.index_row.options.delete_by_query.growl', {index: index.index})" - :confirm="t('indices.index_row.options.delete_by_query.confirm', {index: index.index})" + :growl="t('indices.index_row.options.delete_by_query.growl', { index: index.index })" + :confirm="t('indices.index_row.options.delete_by_query.confirm', { index: index.index })" icon="delete" - @done="emitReloadAndCloseMenu" /> + @done="emitReloadAndCloseMenu" + /> - + @@ -154,23 +164,23 @@ diff --git a/src/components/indices/IndicesTable.vue b/src/components/indices/IndicesTable.vue index dec0c4a5..a5bdddb3 100644 --- a/src/components/indices/IndicesTable.vue +++ b/src/components/indices/IndicesTable.vue @@ -6,10 +6,12 @@ {{ t('index_templates.heading') }} - +
@@ -19,13 +21,19 @@ - + - + @@ -33,21 +41,23 @@

-
+
- - diff --git a/src/components/indices/RowMenuAction.vue b/src/components/indices/RowMenuAction.vue index ae4749d3..314c554c 100644 --- a/src/components/indices/RowMenuAction.vue +++ b/src/components/indices/RowMenuAction.vue @@ -11,25 +11,25 @@ \ No newline at end of file +const { run, requestState } = useRowMenuAction({ + method: props.method, + methodParams: props.methodParams, + growl: props.growl, + confirm: props.confirm, + emit +}) + diff --git a/src/components/nodes/ClusterNodes.vue b/src/components/nodes/ClusterNodes.vue index c1470bc0..771c1bb2 100644 --- a/src/components/nodes/ClusterNodes.vue +++ b/src/components/nodes/ClusterNodes.vue @@ -57,57 +57,57 @@ diff --git a/src/components/nodes/NodeAttributes.vue b/src/components/nodes/NodeAttributes.vue index 2556b17b..f76ff622 100644 --- a/src/components/nodes/NodeAttributes.vue +++ b/src/components/nodes/NodeAttributes.vue @@ -5,9 +5,9 @@ \ No newline at end of file +const { filtered } = useNodeAttributes(props) + diff --git a/src/components/nodes/NodeIcons.vue b/src/components/nodes/NodeIcons.vue index 89ff6c32..6559df74 100644 --- a/src/components/nodes/NodeIcons.vue +++ b/src/components/nodes/NodeIcons.vue @@ -1,19 +1,31 @@ diff --git a/src/components/nodes/NodePercentProgress.vue b/src/components/nodes/NodePercentProgress.vue index 57bb6f39..eb9feded 100644 --- a/src/components/nodes/NodePercentProgress.vue +++ b/src/components/nodes/NodePercentProgress.vue @@ -3,17 +3,17 @@ diff --git a/src/components/nodes/NodesTable.vue b/src/components/nodes/NodesTable.vue index e3655c9b..56681ffd 100644 --- a/src/components/nodes/NodesTable.vue +++ b/src/components/nodes/NodesTable.vue @@ -1,21 +1,25 @@ \ No newline at end of file +const { tabs, activeTabName, addTab, updateTab, removeTab, setTabContent } = useRestQueryTabs() +defineExpose({ setTabContent, addTab }) + diff --git a/src/components/rest/RestQueryHistoryList.vue b/src/components/rest/RestQueryHistoryList.vue index d9d2bcd7..27404137 100644 --- a/src/components/rest/RestQueryHistoryList.vue +++ b/src/components/rest/RestQueryHistoryList.vue @@ -1,13 +1,15 @@ diff --git a/src/components/search/SearchResultsBulk.vue b/src/components/search/SearchResultsBulk.vue index f751a4c8..9e56b5a4 100644 --- a/src/components/search/SearchResultsBulk.vue +++ b/src/components/search/SearchResultsBulk.vue @@ -1,40 +1,44 @@ \ No newline at end of file +const menu: Ref = ref(null) +const emitAndCloseMenu = () => { + menu.value?.hide() + emit('reload') +} + diff --git a/src/components/search/SearchResultsTable.vue b/src/components/search/SearchResultsTable.vue index 7b7b71f8..b5940afa 100644 --- a/src/components/search/SearchResultsTable.vue +++ b/src/components/search/SearchResultsTable.vue @@ -1,7 +1,10 @@ diff --git a/src/components/settings/GlobalSettings.vue b/src/components/settings/GlobalSettings.vue index 52139fe3..53a94f8f 100644 --- a/src/components/settings/GlobalSettings.vue +++ b/src/components/settings/GlobalSettings.vue @@ -3,7 +3,7 @@
-

+

{{ t('settings.heading') }}

@@ -13,16 +13,21 @@
- +
@@ -30,15 +35,20 @@
- +
@@ -46,17 +56,22 @@
- +
@@ -99,41 +114,37 @@ \ No newline at end of file + localStorage.clear() + window.location.reload() +} + diff --git a/src/components/settings/ImportBackupForm.vue b/src/components/settings/ImportBackupForm.vue index 23989e50..37078388 100644 --- a/src/components/settings/ImportBackupForm.vue +++ b/src/components/settings/ImportBackupForm.vue @@ -1,50 +1,58 @@ \ No newline at end of file +} + diff --git a/src/components/settings/ImportExport.vue b/src/components/settings/ImportExport.vue index 4f1db366..9c543369 100644 --- a/src/components/settings/ImportExport.vue +++ b/src/components/settings/ImportExport.vue @@ -16,11 +16,13 @@ {{ t('settings.import_export.export.heading') }}

XU~q*_f!SecS_?1Z*oGjbDcZtQULeZoZHBd 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 z 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 X@Xyco>KFf8zu^A^<3g*5%6u6Bvsk1j diff --git a/.yarnrc.yml b/.yarnrc.yml deleted file mode 100644 index 3186f3f0..00000000 --- a/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 232df530..b41f23cf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,6 +13,6 @@ issue first. 1. Fork the repo [https://github.com/cars10/elasticvue/fork](https://github.com/cars10/elasticvue/fork) 2. Checkout a new branch `git checkout -b my-feature develop` 3. Commit your changes `git commit -am 'new feature'` -4. **Lint your code!** `yarn lint --fix` +4. **Lint your code!** `npm run lint --fix` 5. Push your branch `git push origin my-feature` 6. Create a pull request diff --git a/Makefile b/Makefile index 8780d4f6..ee7a5dae 100644 --- a/Makefile +++ b/Makefile @@ -4,21 +4,22 @@ TAURI_SIGNING_PRIVATE_KEY_PASSWORD ?= UID := $(shell id -u) build_docker_ci: - docker build -f docker/Dockerfile_ci -t elasticvue-ci . + docker build --platform linux/amd64 -f docker/Dockerfile_ci -t elasticvue-ci . ci: build_docker_ci - docker run --rm -e CI="$(CI)" -v ./playwright-report-ci:/app/playwright-report elasticvue-ci yarn ci + docker run --platform linux/amd64 --rm -e CI="$(CI)" -v ./playwright-report-ci:/app/playwright-report elasticvue-ci npm run ci # https://github.com/tauri-apps/tauri/issues/8929 build_tauri: - NO_STRIP=true yarn tauri:build --verbose + NO_STRIP=true npm run tauri:build --verbose build_docker_tauri: - docker build -t elasticvue-linux-tauri -f docker/Dockerfile_tauri --build-arg USERID="$(UID)" . - docker run --rm -e TAURI_SIGNING_PRIVATE_KEY="$(TAURI_SIGNING_PRIVATE_KEY)" \ - -e TAURI_SIGNING_PRIVATE_KEY_PASSWORD="$(TAURI_SIGNING_PRIVATE_KEY_PASSWORD)" \ - -v .:/app \ - elasticvue-linux-tauri bash -c "yarn && . ~/.cargo/env && rm -rf src-tauri/target && yarn tauri:build" + docker build --platform linux/amd64 -t elasticvue-linux-tauri -f docker/Dockerfile_tauri --build-arg USERID="$(UID)" . + docker run --platform linux/amd64 --rm -v ./src-tauri/target:/app/src-tauri/target \ + -e TAURI_SIGNING_PRIVATE_KEY="$(TAURI_SIGNING_PRIVATE_KEY)" \ + -e TAURI_SIGNING_PRIVATE_KEY_PASSWORD="$(TAURI_SIGNING_PRIVATE_KEY_PASSWORD)" \ + -e NO_STRIP=true \ + elasticvue-linux-tauri bash -c ". ~/.cargo/env && rm -rf src-tauri/target/* && ARCH=x86_64 NO_STRIP=true npm run tauri:build --verbose" # Build docker image to run elasticvue served by nginx build_docker_nginx: @@ -38,4 +39,4 @@ run_docker_nginx: docker run -p 8080:8080 elasticvue e2e: build_docker_ci - docker run --rm -v ./playwright-report-ci:/app/playwright-report elasticvue-ci yarn test:e2e $(TEST) + docker run --rm -v ./playwright-report-ci:/app/playwright-report elasticvue-ci npm run test:e2e $(TEST) diff --git a/docker/Dockerfile b/docker/Dockerfile index 64a5bd12..569f0df6 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,12 +1,11 @@ # Build elasticvue -FROM node:22.5.1-bookworm AS builder +FROM node:22.20.0-bookworm AS builder RUN mkdir /app WORKDIR /app -RUN corepack enable -COPY package.json yarn.lock .yarnrc.yml ./ -RUN yarn install +COPY package.json package-lock.json ./ +RUN npm install COPY . . -RUN VITE_APP_BUILD_MODE=docker yarn build +RUN VITE_APP_BUILD_MODE=docker npm run build # Create lightweight nginx image diff --git a/docker/Dockerfile_browser_ext b/docker/Dockerfile_browser_ext index 34da2cd4..23f5f293 100644 --- a/docker/Dockerfile_browser_ext +++ b/docker/Dockerfile_browser_ext @@ -1,4 +1,4 @@ -FROM node:22.5.1-bookworm +FROM node:22.20.0-bookworm ARG USERID=1000 ENV APP_HOME=/app @@ -15,13 +15,11 @@ RUN apt-get update -qq \ WORKDIR $APP_HOME -RUN corepack enable - RUN npm install --global web-ext COPY . . -RUN yarn install +RUN npm install RUN chown -R $USERID:$USERID $APP_HOME diff --git a/docker/Dockerfile_ci b/docker/Dockerfile_ci index 541f5962..516e0ae5 100644 --- a/docker/Dockerfile_ci +++ b/docker/Dockerfile_ci @@ -1,4 +1,4 @@ -FROM node:22.5.1-bookworm +FROM node:22.20.0-bookworm RUN mkdir /app WORKDIR /app @@ -9,10 +9,10 @@ RUN apt-get update \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* -RUN corepack enable -COPY package.json yarn.lock .yarnrc.yml ./ +COPY package.json ./ -RUN yarn install -RUN yarn playwright install --with-deps +RUN npm install -g npm +RUN npm install +RUN npx playwright install --with-deps COPY . . diff --git a/docker/Dockerfile_multiarch b/docker/Dockerfile_multiarch index 276c048f..1e747738 100644 --- a/docker/Dockerfile_multiarch +++ b/docker/Dockerfile_multiarch @@ -1,12 +1,11 @@ # Build elasticvue -FROM --platform=$BUILDPLATFORM node:22.5.1-bookworm AS builder +FROM --platform=$BUILDPLATFORM node:22.20.0-bookworm AS builder RUN mkdir /app WORKDIR /app -RUN corepack enable -COPY package.json yarn.lock .yarnrc.yml ./ -RUN yarn install +COPY package.json package-lock.json ./ +RUN npm install COPY . . -RUN VITE_APP_BUILD_MODE=docker yarn build +RUN VITE_APP_BUILD_MODE=docker npm run build # Create lightweight nginx image diff --git a/docker/Dockerfile_tauri b/docker/Dockerfile_tauri index c5833893..e49666aa 100644 --- a/docker/Dockerfile_tauri +++ b/docker/Dockerfile_tauri @@ -33,8 +33,6 @@ RUN mkdir -p /etc/apt/keyrings \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* -RUN corepack enable - # download old versions because of EGL issues, see https://github.com/h3poteto/fedistar/issues/1717 RUN mkdir -p /tmp/ubuntu-packages \ && cd /tmp/ubuntu-packages \ @@ -67,4 +65,10 @@ RUN apt-get update \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* +COPY . . + +RUN npm install -g npm +RUN npm install +RUN chown -R $USERID:$USERID $APP_HOME + USER $USERID diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..825494ee --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6333 @@ +{ + "name": "elasticvue", + "version": "1.8.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "elasticvue", + "version": "1.8.0", + "dependencies": { + "@codemirror/lang-json": "^6.0.1", + "@intlify/unplugin-vue-i18n": "^6.0.8", + "@lezer/common": "^1.2.3", + "@quasar/extras": "^1.17.0", + "@replit/codemirror-vim": "^6.3.0", + "@tauri-apps/api": "2.8.0", + "@tauri-apps/plugin-clipboard-manager": "2.3.0", + "@tauri-apps/plugin-dialog": "2.4.0", + "@tauri-apps/plugin-fs": "2.4.2", + "@tauri-apps/plugin-opener": "2.5.0", + "@tauri-apps/plugin-process": "2.3.0", + "@tauri-apps/plugin-updater": "2.9.0", + "aws4fetch": "^1.0.20", + "codemirror": "^6.0.2", + "idb": "^8.0.3", + "json-bigint": "^1.0.0", + "optional": "^0.1.4", + "pinia": "^3.0.3", + "pinia-plugin-persistedstate": "^4.3.0", + "pretty-bytes": "^7.0.0", + "quasar": "^2.18.1", + "ua-parser-js": "^2.0.3", + "uuid": "^11.1.0", + "vue": "^3.5.17", + "vue-i18n": "^11.1.6", + "vue-resizable": "^2.1.7", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@intlify/eslint-plugin-vue-i18n": "^4.0.1", + "@playwright/test": "^1.53.1", + "@quasar/vite-plugin": "^1.9.0", + "@tauri-apps/cli": "2.8.4", + "@types/json-bigint": "^1.0.4", + "@vitejs/plugin-vue": "^5.2.4", + "@vue/eslint-config-typescript": "^14.5.1", + "@vue/tsconfig": "^0.7.0", + "cross-env": "^7.0.3", + "eslint": "^9.29.0", + "eslint-plugin-vue": "^10.2.0", + "sass": "^1.89.2", + "typescript": "^5.8.3", + "vite": "^6.3.5", + "vite-bundle-visualizer": "^1.2.1", + "vitest": "^3.2.4", + "vue-tsc": "^2.2.10" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@codemirror/autocomplete": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.19.0.tgz", + "integrity": "sha512-61Hfv3cF07XvUxNeC3E7jhG8XNi1Yom1G0lRC936oLnlF+jrbrv8rc/J98XlYzcsAoTVupfsf5fLej1aI8kyIg==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/commands": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.9.0.tgz", + "integrity": "sha512-454TVgjhO6cMufsyyGN70rGIfJxJEjcqjBG2x2Y03Y/+Fm99d3O/Kv1QDYWuG6hvxsgmjXmBuATikIIYvERX+w==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.0" + } + }, + "node_modules/@codemirror/lang-json": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.2.tgz", + "integrity": "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/json": "^1.0.0" + } + }, + "node_modules/@codemirror/language": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.3.tgz", + "integrity": "sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.1.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/lint": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.0.tgz", + "integrity": "sha512-wZxW+9XDytH3SKvS8cQzMyQCaaazH8XL1EMHleHe00wVzsv7NBQKVW2yzEHrRhmM7ZOhVdItPbvlRBvMp9ej7A==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.35.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/search": { + "version": "6.5.11", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.11.tgz", + "integrity": "sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", + "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", + "license": "MIT", + "dependencies": { + "@marijn/find-cluster-break": "^1.0.0" + } + }, + "node_modules/@codemirror/view": { + "version": "6.38.4", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.4.tgz", + "integrity": "sha512-hduz0suCcUSC/kM8Fq3A9iLwInJDl8fD1xLpTIk+5xkNm8z/FT7UsIa9sOXrkpChh+XXc18RzswE8QqELsVl+g==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.5.0", + "crelt": "^1.0.6", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", + "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", + "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", + "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", + "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", + "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", + "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", + "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", + "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", + "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", + "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", + "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", + "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", + "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", + "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", + "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", + "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", + "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", + "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", + "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", + "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", + "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", + "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", + "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", + "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", + "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", + "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/js": { + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", + "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@intlify/bundle-utils": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-10.0.1.tgz", + "integrity": "sha512-WkaXfSevtpgtUR4t8K2M6lbR7g03mtOxFeh+vXp5KExvPqS12ppaRj1QxzwRuRI5VUto54A22BjKoBMLyHILWQ==", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "^11.1.2", + "@intlify/shared": "^11.1.2", + "acorn": "^8.8.2", + "escodegen": "^2.1.0", + "estree-walker": "^2.0.2", + "jsonc-eslint-parser": "^2.3.0", + "mlly": "^1.2.0", + "source-map-js": "^1.0.1", + "yaml-eslint-parser": "^1.2.2" + }, + "engines": { + "node": ">= 18" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/core-base": { + "version": "11.1.12", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.1.12.tgz", + "integrity": "sha512-whh0trqRsSqVLNEUCwU59pyJZYpU8AmSWl8M3Jz2Mv5ESPP6kFh4juas2NpZ1iCvy7GlNRffUD1xr84gceimjg==", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "11.1.12", + "@intlify/shared": "11.1.12" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/eslint-plugin-vue-i18n": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@intlify/eslint-plugin-vue-i18n/-/eslint-plugin-vue-i18n-4.1.0.tgz", + "integrity": "sha512-MPAr3LGTrkB5CZBHN5eUf4kASUEiSaDM371jADmxNbTL1Ew7IAyCIBGm3+/1sWcvsfVHe4wz8RFoo6FpeQZ4Nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/eslintrc": "^3.0.0", + "@intlify/core-base": "^11.0.0", + "@intlify/message-compiler": "^11.0.0", + "debug": "^4.3.4", + "eslint-compat-utils": "^0.6.0", + "glob": "^10.3.3", + "globals": "^16.0.0", + "ignore": "^7.0.0", + "import-fresh": "^3.3.0", + "is-language-code": "^3.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "lodash": "^4.17.21", + "parse5": "^7.1.2", + "semver": "^7.5.4", + "synckit": "^0.10.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0 || ^9.0.0-0", + "jsonc-eslint-parser": "^2.3.0", + "vue-eslint-parser": "^10.0.0", + "yaml-eslint-parser": "^1.2.2" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "11.1.12", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.1.12.tgz", + "integrity": "sha512-Fv9iQSJoJaXl4ZGkOCN1LDM3trzze0AS2zRz2EHLiwenwL6t0Ki9KySYlyr27yVOj5aVz0e55JePO+kELIvfdQ==", + "license": "MIT", + "dependencies": { + "@intlify/shared": "11.1.12", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "11.1.12", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.1.12.tgz", + "integrity": "sha512-Om86EjuQtA69hdNj3GQec9ZC0L0vPSAnXzB3gP/gyJ7+mA7t06d9aOAiqMZ+xEOsumGP4eEBlfl8zF2LOTzf2A==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/unplugin-vue-i18n": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-6.0.8.tgz", + "integrity": "sha512-Vvm3KhjE6TIBVUQAk37rBiaYy2M5OcWH0ZcI1XKEsOTeN1o0bErk+zeuXmcrcMc/73YggfI8RoxOUz9EB/69JQ==", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@intlify/bundle-utils": "^10.0.1", + "@intlify/shared": "^11.1.2", + "@intlify/vue-i18n-extensions": "^8.0.0", + "@rollup/pluginutils": "^5.1.0", + "@typescript-eslint/scope-manager": "^8.13.0", + "@typescript-eslint/typescript-estree": "^8.13.0", + "debug": "^4.3.3", + "fast-glob": "^3.2.12", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "pathe": "^1.0.0", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2", + "unplugin": "^1.1.0", + "vue": "^3.4" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "petite-vue-i18n": "*", + "vue": "^3.2.25", + "vue-i18n": "*" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/vue-i18n-extensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@intlify/vue-i18n-extensions/-/vue-i18n-extensions-8.0.0.tgz", + "integrity": "sha512-w0+70CvTmuqbskWfzeYhn0IXxllr6mU+IeM2MU0M+j9OW64jkrvqY+pYFWrUnIIC9bEdij3NICruicwd5EgUuQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.24.6", + "@intlify/shared": "^10.0.0", + "@vue/compiler-dom": "^3.2.45", + "vue-i18n": "^10.0.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@intlify/shared": "^9.0.0 || ^10.0.0 || ^11.0.0", + "@vue/compiler-dom": "^3.0.0", + "vue": "^3.0.0", + "vue-i18n": "^9.0.0 || ^10.0.0 || ^11.0.0" + }, + "peerDependenciesMeta": { + "@intlify/shared": { + "optional": true + }, + "@vue/compiler-dom": { + "optional": true + }, + "vue": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/core-base": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-10.0.8.tgz", + "integrity": "sha512-FoHslNWSoHjdUBLy35bpm9PV/0LVI/DSv9L6Km6J2ad8r/mm0VaGg06C40FqlE8u2ADcGUM60lyoU7Myo4WNZQ==", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "10.0.8", + "@intlify/shared": "10.0.8" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/message-compiler": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-10.0.8.tgz", + "integrity": "sha512-DV+sYXIkHVd5yVb2mL7br/NEUwzUoLBsMkV3H0InefWgmYa34NLZUvMCGi5oWX+Hqr2Y2qUxnVrnOWF4aBlgWg==", + "license": "MIT", + "dependencies": { + "@intlify/shared": "10.0.8", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/shared": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-10.0.8.tgz", + "integrity": "sha512-BcmHpb5bQyeVNrptC3UhzpBZB/YHHDoEREOUERrmF2BRxsyOEuRrq+Z96C/D4+2KJb8kuHiouzAei7BXlG0YYw==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@intlify/vue-i18n-extensions/node_modules/vue-i18n": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-10.0.8.tgz", + "integrity": "sha512-mIjy4utxMz9lMMo6G9vYePv7gUFt4ztOMhY9/4czDJxZ26xPeJ49MAGa9wBAE3XuXbYCrtVPmPxNjej7JJJkZQ==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "10.0.8", + "@intlify/shared": "10.0.8", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@lezer/common": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", + "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", + "license": "MIT" + }, + "node_modules/@lezer/highlight": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", + "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz", + "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", + "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@marijn/find-cluster-break": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", + "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@playwright/test": { + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.1.tgz", + "integrity": "sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.55.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@quasar/extras": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@quasar/extras/-/extras-1.17.0.tgz", + "integrity": "sha512-KqAHdSJfIDauiR1nJ8rqHWT0diqD0QradZKoVIZJAilHAvgwyPIY7MbyR2z4RIMkUIMUSqBZcbshMpEw+9A30w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + } + }, + "node_modules/@quasar/vite-plugin": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@quasar/vite-plugin/-/vite-plugin-1.10.0.tgz", + "integrity": "sha512-4PJoTclz4ZjAfyqe0+hlkKcFJt0e2NX3Ac3hy8ILqUPdtZ24nCo5/xEHvTxZGBQMKRPwwePbO8CVs4n9EKJEug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + }, + "peerDependencies": { + "@vitejs/plugin-vue": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "quasar": "^2.16.0", + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@replit/codemirror-vim": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@replit/codemirror-vim/-/codemirror-vim-6.3.0.tgz", + "integrity": "sha512-aTx931ULAMuJx6xLf7KQDOL7CxD+Sa05FktTDrtLaSy53uj01ll3Zf17JdKsriER248oS55GBzg0CfCTjEneAQ==", + "license": "MIT", + "peerDependencies": { + "@codemirror/commands": "6.x.x", + "@codemirror/language": "6.x.x", + "@codemirror/search": "6.x.x", + "@codemirror/state": "6.x.x", + "@codemirror/view": "6.x.x" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz", + "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz", + "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz", + "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz", + "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz", + "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz", + "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz", + "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz", + "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz", + "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz", + "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz", + "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz", + "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz", + "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz", + "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz", + "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", + "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz", + "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz", + "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz", + "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz", + "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz", + "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz", + "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tauri-apps/api": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.8.0.tgz", + "integrity": "sha512-ga7zdhbS2GXOMTIZRT0mYjKJtR9fivsXzsyq5U3vjDL0s6DTMwYRm0UHNjzTY5dh4+LSC68Sm/7WEiimbQNYlw==", + "license": "Apache-2.0 OR MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.8.4.tgz", + "integrity": "sha512-ejUZBzuQRcjFV+v/gdj/DcbyX/6T4unZQjMSBZwLzP/CymEjKcc2+Fc8xTORThebHDUvqoXMdsCZt8r+hyN15g==", + "dev": true, + "license": "Apache-2.0 OR MIT", + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "2.8.4", + "@tauri-apps/cli-darwin-x64": "2.8.4", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.8.4", + "@tauri-apps/cli-linux-arm64-gnu": "2.8.4", + "@tauri-apps/cli-linux-arm64-musl": "2.8.4", + "@tauri-apps/cli-linux-riscv64-gnu": "2.8.4", + "@tauri-apps/cli-linux-x64-gnu": "2.8.4", + "@tauri-apps/cli-linux-x64-musl": "2.8.4", + "@tauri-apps/cli-win32-arm64-msvc": "2.8.4", + "@tauri-apps/cli-win32-ia32-msvc": "2.8.4", + "@tauri-apps/cli-win32-x64-msvc": "2.8.4" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.8.4.tgz", + "integrity": "sha512-BKu8HRkYV01SMTa7r4fLx+wjgtRK8Vep7lmBdHDioP6b8XH3q2KgsAyPWfEZaZIkZ2LY4SqqGARaE9oilNe0oA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-darwin-x64": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.8.4.tgz", + "integrity": "sha512-imb9PfSd/7G6VAO7v1bQ2A3ZH4NOCbhGJFLchxzepGcXf9NKkfun157JH9mko29K6sqAwuJ88qtzbKCbWJTH9g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.8.4.tgz", + "integrity": "sha512-Ml215UnDdl7/fpOrF1CNovym/KjtUbCuPgrcZ4IhqUCnhZdXuphud/JT3E8X97Y03TZ40Sjz8raXYI2ET0exzw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-gnu": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.8.4.tgz", + "integrity": "sha512-pbcgBpMyI90C83CxE5REZ9ODyIlmmAPkkJXtV398X3SgZEIYy5TACYqlyyv2z5yKgD8F8WH4/2fek7+jH+ZXAw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-musl": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.8.4.tgz", + "integrity": "sha512-zumFeaU1Ws5Ay872FTyIm7z8kfzEHu8NcIn8M6TxbJs0a7GRV21KBdpW1zNj2qy7HynnpQCqjAYXTUUmm9JAOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-riscv64-gnu": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.8.4.tgz", + "integrity": "sha512-qiqbB3Zz6IyO201f+1ojxLj65WYj8mixL5cOMo63nlg8CIzsP23cPYUrx1YaDPsCLszKZo7tVs14pc7BWf+/aQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-gnu": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.8.4.tgz", + "integrity": "sha512-TaqaDd9Oy6k45Hotx3pOf+pkbsxLaApv4rGd9mLuRM1k6YS/aw81YrsMryYPThrxrScEIUcmNIHaHsLiU4GMkw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-musl": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.8.4.tgz", + "integrity": "sha512-ot9STAwyezN8w+bBHZ+bqSQIJ0qPZFlz/AyscpGqB/JnJQVDFQcRDmUPFEaAtt2UUHSWzN3GoTJ5ypqLBp2WQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-arm64-msvc": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.8.4.tgz", + "integrity": "sha512-+2aJ/g90dhLiOLFSD1PbElXX3SoMdpO7HFPAZB+xot3CWlAZD1tReUFy7xe0L5GAR16ZmrxpIDM9v9gn5xRy/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-ia32-msvc": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.8.4.tgz", + "integrity": "sha512-yj7WDxkL1t9Uzr2gufQ1Hl7hrHuFKTNEOyascbc109EoiAqCp0tgZ2IykQqOZmZOHU884UAWI1pVMqBhS/BfhA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-x64-msvc": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.8.4.tgz", + "integrity": "sha512-XuvGB4ehBdd7QhMZ9qbj/8icGEatDuBNxyYHbLKsTYh90ggUlPa/AtaqcC1Fo69lGkTmq9BOKrs1aWSi7xDonA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/plugin-clipboard-manager": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-clipboard-manager/-/plugin-clipboard-manager-2.3.0.tgz", + "integrity": "sha512-81NOBA2P+OTY8RLkBwyl9ZR/0CeggLub4F6zxcxUIfFOAqtky7J61+K/MkH2SC1FMxNBxrX0swDuKvkjkHadlA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.6.0" + } + }, + "node_modules/@tauri-apps/plugin-dialog": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.4.0.tgz", + "integrity": "sha512-OvXkrEBfWwtd8tzVCEXIvRfNEX87qs2jv6SqmVPiHcJjBhSF/GUvjqUNIDmKByb5N8nvDqVUM7+g1sXwdC/S9w==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, + "node_modules/@tauri-apps/plugin-fs": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-fs/-/plugin-fs-2.4.2.tgz", + "integrity": "sha512-YGhmYuTgXGsi6AjoV+5mh2NvicgWBfVJHHheuck6oHD+HC9bVWPaHvCP0/Aw4pHDejwrvT8hE3+zZAaWf+hrig==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, + "node_modules/@tauri-apps/plugin-opener": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-opener/-/plugin-opener-2.5.0.tgz", + "integrity": "sha512-B0LShOYae4CZjN8leiNDbnfjSrTwoZakqKaWpfoH6nXiJwt6Rgj6RnVIffG3DoJiKsffRhMkjmBV9VeilSb4TA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, + "node_modules/@tauri-apps/plugin-process": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-process/-/plugin-process-2.3.0.tgz", + "integrity": "sha512-0DNj6u+9csODiV4seSxxRbnLpeGYdojlcctCuLOCgpH9X3+ckVZIEj6H7tRQ7zqWr7kSTEWnrxtAdBb0FbtrmQ==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.6.0" + } + }, + "node_modules/@tauri-apps/plugin-updater": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-updater/-/plugin-updater-2.9.0.tgz", + "integrity": "sha512-j++sgY8XpeDvzImTrzWA08OqqGqgkNyxczLD7FjNJJx/uXxMZFz5nDcfkyoI/rCjYuj2101Tci/r/HFmOmoxCg==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.6.0" + } + }, + "node_modules/@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/json-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/json-bigint/-/json-bigint-1.0.4.tgz", + "integrity": "sha512-ydHooXLbOmxBbubnA7Eh+RpBzuaIiQjh8WGJYQB50JFGFrdxW7JzVlyEV7fAXw0T2sqJ1ysTneJbiyNLqZRAag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz", + "integrity": "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/type-utils": "8.45.0", + "@typescript-eslint/utils": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.45.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.45.0.tgz", + "integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.45.0.tgz", + "integrity": "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.45.0", + "@typescript-eslint/types": "^8.45.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz", + "integrity": "sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz", + "integrity": "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz", + "integrity": "sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/utils": "8.45.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.45.0.tgz", + "integrity": "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz", + "integrity": "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.45.0", + "@typescript-eslint/tsconfig-utils": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.45.0.tgz", + "integrity": "sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz", + "integrity": "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.45.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", + "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.15" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", + "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", + "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.22.tgz", + "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "@vue/shared": "3.5.22", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", + "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz", + "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "@vue/compiler-core": "3.5.22", + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.19", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz", + "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "14.6.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-14.6.0.tgz", + "integrity": "sha512-UpiRY/7go4Yps4mYCjkvlIbVWmn9YvPGQDxTAlcKLphyaD77LjIu3plH4Y9zNT0GB4f3K5tMmhhtRhPOgrQ/bQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.35.1", + "fast-glob": "^3.3.3", + "typescript-eslint": "^8.35.1", + "vue-eslint-parser": "^10.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0", + "eslint-plugin-vue": "^9.28.0 || ^10.0.0", + "typescript": ">=4.8.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", + "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.22.tgz", + "integrity": "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.22.tgz", + "integrity": "sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz", + "integrity": "sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.22", + "@vue/runtime-core": "3.5.22", + "@vue/shared": "3.5.22", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.22.tgz", + "integrity": "sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22" + }, + "peerDependencies": { + "vue": "3.5.22" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.7.0.tgz", + "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": "5.x", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/aws4fetch": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/aws4fetch/-/aws4fetch-1.0.20.tgz", + "integrity": "sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/birpc": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.6.1.tgz", + "integrity": "sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/codemirror": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.2.tgz", + "integrity": "sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "license": "MIT" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT" + }, + "node_modules/deep-pick-omit": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/deep-pick-omit/-/deep-pick-omit-1.2.1.tgz", + "integrity": "sha512-2J6Kc/m3irCeqVG42T+SaUMesaK7oGWaedGnQQK/+O0gYc+2SP5bKh/KKTE7d7SJ+GCA9UUE1GRzh6oDe0EnGw==", + "license": "MIT" + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-europe-js": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/detect-europe-js/-/detect-europe-js-0.1.2.tgz", + "integrity": "sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", + "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.10", + "@esbuild/android-arm": "0.25.10", + "@esbuild/android-arm64": "0.25.10", + "@esbuild/android-x64": "0.25.10", + "@esbuild/darwin-arm64": "0.25.10", + "@esbuild/darwin-x64": "0.25.10", + "@esbuild/freebsd-arm64": "0.25.10", + "@esbuild/freebsd-x64": "0.25.10", + "@esbuild/linux-arm": "0.25.10", + "@esbuild/linux-arm64": "0.25.10", + "@esbuild/linux-ia32": "0.25.10", + "@esbuild/linux-loong64": "0.25.10", + "@esbuild/linux-mips64el": "0.25.10", + "@esbuild/linux-ppc64": "0.25.10", + "@esbuild/linux-riscv64": "0.25.10", + "@esbuild/linux-s390x": "0.25.10", + "@esbuild/linux-x64": "0.25.10", + "@esbuild/netbsd-arm64": "0.25.10", + "@esbuild/netbsd-x64": "0.25.10", + "@esbuild/openbsd-arm64": "0.25.10", + "@esbuild/openbsd-x64": "0.25.10", + "@esbuild/openharmony-arm64": "0.25.10", + "@esbuild/sunos-x64": "0.25.10", + "@esbuild/win32-arm64": "0.25.10", + "@esbuild/win32-ia32": "0.25.10", + "@esbuild/win32-x64": "0.25.10" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", + "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.36.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz", + "integrity": "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.5.0.tgz", + "integrity": "sha512-7BZHsG3kC2vei8F2W8hnfDi9RK+cv5eKPMvzBdrl8Vuc0hR5odGQRli8VVzUkrmUHkxFEm4Iio1r5HOKslO0Aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "@stylistic/eslint-plugin": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@typescript-eslint/parser": "^7.0.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "vue-eslint-parser": "^10.0.0" + }, + "peerDependenciesMeta": { + "@stylistic/eslint-plugin": { + "optional": true + }, + "@typescript-eslint/parser": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expect-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", + "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.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", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "license": "ISC" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/idb": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.3.tgz", + "integrity": "sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg==", + "license": "ISC" + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-from-esm": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/import-from-esm/-/import-from-esm-1.3.4.tgz", + "integrity": "sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "import-meta-resolve": "^4.0.0" + }, + "engines": { + "node": ">=16.20" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-language-code": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-language-code/-/is-language-code-3.1.0.tgz", + "integrity": "sha512-zJdQ3QTeLye+iphMeK3wks+vXSRFKh68/Pnlw7aOfApFSEIOhYa8P9vwwa6QrImNNBMJTiL1PpYF0f4BxDuEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.14.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-standalone-pwa": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-standalone-pwa/-/is-standalone-pwa-0.1.1.tgz", + "integrity": "sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT" + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-eslint-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.1.tgz", + "integrity": "sha512-uuPNLJkKN8NXAlZlQ6kmUF9qO+T6Kyd7oV4+/7yy8Jz6+MZNyhPq8EdLpdfnPVzUC8qSf1b4j1azKaGnFsjmsw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mlly": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.15.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.1" + } + }, + "node_modules/mlly/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optional": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz", + "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==", + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", + "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia-plugin-persistedstate": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-4.5.0.tgz", + "integrity": "sha512-QTkP1xJVyCdr2I2p3AKUZM84/e+IS+HktRxKGAIuDzkyaKKV48mQcYkJFVVDuvTxlI5j6X3oZObpqoVB8JnWpw==", + "license": "MIT", + "dependencies": { + "deep-pick-omit": "^1.2.1", + "defu": "^6.1.4", + "destr": "^2.0.5" + }, + "peerDependencies": { + "@nuxt/kit": ">=3.0.0", + "@pinia/nuxt": ">=0.10.0", + "pinia": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@pinia/nuxt": { + "optional": true + }, + "pinia": { + "optional": true + } + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/playwright": { + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.1.tgz", + "integrity": "sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.55.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.1.tgz", + "integrity": "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-7.1.0.tgz", + "integrity": "sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/quasar": { + "version": "2.18.5", + "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.18.5.tgz", + "integrity": "sha512-5ItDSsNjqBVRrC7SqcdvT1F5mghVyJ/KmaWNwnaT5mM91a7gWpT/d7wTCIFxxDbWLZdkHKI+cpdudEqnfcSw9A==", + "license": "MIT", + "engines": { + "node": ">= 10.18.1", + "npm": ">= 6.13.4", + "yarn": ">= 1.21.1" + }, + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz", + "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.3", + "@rollup/rollup-android-arm64": "4.52.3", + "@rollup/rollup-darwin-arm64": "4.52.3", + "@rollup/rollup-darwin-x64": "4.52.3", + "@rollup/rollup-freebsd-arm64": "4.52.3", + "@rollup/rollup-freebsd-x64": "4.52.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", + "@rollup/rollup-linux-arm-musleabihf": "4.52.3", + "@rollup/rollup-linux-arm64-gnu": "4.52.3", + "@rollup/rollup-linux-arm64-musl": "4.52.3", + "@rollup/rollup-linux-loong64-gnu": "4.52.3", + "@rollup/rollup-linux-ppc64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-musl": "4.52.3", + "@rollup/rollup-linux-s390x-gnu": "4.52.3", + "@rollup/rollup-linux-x64-gnu": "4.52.3", + "@rollup/rollup-linux-x64-musl": "4.52.3", + "@rollup/rollup-openharmony-arm64": "4.52.3", + "@rollup/rollup-win32-arm64-msvc": "4.52.3", + "@rollup/rollup-win32-ia32-msvc": "4.52.3", + "@rollup/rollup-win32-x64-gnu": "4.52.3", + "@rollup/rollup-win32-x64-msvc": "4.52.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-visualizer": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.14.0.tgz", + "integrity": "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "open": "^8.4.0", + "picomatch": "^4.0.2", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "rolldown": "1.x", + "rollup": "2.x || 3.x || 4.x" + }, + "peerDependenciesMeta": { + "rolldown": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sass": { + "version": "1.93.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", + "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/style-mod": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", + "license": "MIT" + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/synckit": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.10.4.tgz", + "integrity": "sha512-2SG1TnJGjMkD4+gblONMGYSrwAzYi+ymOitD+Jb/iMYm57nH20PlkVeMQRah3yDMKEa0QQYUF/QPWpdW7C6zNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.0", + "tslib": "^2.8.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, + "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", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.45.0.tgz", + "integrity": "sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.45.0", + "@typescript-eslint/parser": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/utils": "8.45.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/ua-is-frozen": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ua-is-frozen/-/ua-is-frozen-0.1.2.tgz", + "integrity": "sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT" + }, + "node_modules/ua-parser-js": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-2.0.5.tgz", + "integrity": "sha512-sZErtx3rhpvZQanWW5umau4o/snfoLqRcQwQIZ54377WtRzIecnIKvjpkd5JwPcSUMglGnbIgcsQBGAbdi3S9Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "AGPL-3.0-or-later", + "dependencies": { + "detect-europe-js": "^0.1.2", + "is-standalone-pwa": "^0.1.1", + "ua-is-frozen": "^0.1.2", + "undici": "^7.12.0" + }, + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "license": "MIT" + }, + "node_modules/undici": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", + "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/unplugin": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/vite": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz", + "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-bundle-visualizer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vite-bundle-visualizer/-/vite-bundle-visualizer-1.2.1.tgz", + "integrity": "sha512-cwz/Pg6+95YbgIDp+RPwEToc4TKxfsFWSG/tsl2DSZd9YZicUag1tQXjJ5xcL7ydvEoaC2FOZeaXOU60t9BRXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "import-from-esm": "^1.3.3", + "rollup-plugin-visualizer": "^5.11.0", + "tmp": "^0.2.1" + }, + "bin": { + "vite-bundle-visualizer": "bin.js" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + } + }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-node/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vitest": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz", + "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-sfc": "3.5.22", + "@vue/runtime-dom": "3.5.22", + "@vue/server-renderer": "3.5.22", + "@vue/shared": "3.5.22" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz", + "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.6.0", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-i18n": { + "version": "11.1.12", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.1.12.tgz", + "integrity": "sha512-BnstPj3KLHLrsqbVU2UOrPmr0+Mv11bsUZG0PyCOzsawCivk8W00GMXHeVUWIDOgNaScCuZah47CZFE+Wnl8mw==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.1.12", + "@intlify/shared": "11.1.12", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-i18n/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/vue-resizable": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/vue-resizable/-/vue-resizable-2.1.7.tgz", + "integrity": "sha512-zEbWhRR8iXT8+nt3u8rkfrNpkPNsPkf7HteBh+AlPIsJ7rf9fyNwMqr0Q4FRzIpNIpZD5Zrr4+3+YELU0vc1Iw==", + "license": "MIT" + }, + "node_modules/vue-router": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.1.tgz", + "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/vue-tsc": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz", + "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.15", + "@vue/language-core": "2.2.12" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yaml-eslint-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.0.tgz", + "integrity": "sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.0.0", + "yaml": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} \ No newline at end of file diff --git a/package.json b/package.json index 58341a9b..a6679c74 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,9 @@ "test:e2e:all": "playwright test", "test:e2e:watch": "PWTEST_WATCH=1 playwright test --project=chromium", "test:e2e:report": "playwright show-report", - "ci": "yarn lint && yarn tsc && yarn test:unit && yarn test:e2e:all", + "ci": "npm run lint && npm run tsc && npm run test:unit && npm run test:e2e:all", "tauri:dev": "tauri dev", - "tauri:build": "tauri build", + "tauri:build": "NO_STRIP=true tauri build", "bundle:report": "vite-bundle-visualizer" }, "dependencies": { @@ -24,17 +24,18 @@ "@lezer/common": "^1.2.3", "@quasar/extras": "^1.17.0", "@replit/codemirror-vim": "^6.3.0", - "@tauri-apps/api": "^2.5.0", - "@tauri-apps/plugin-clipboard-manager": "^2.2.3", - "@tauri-apps/plugin-dialog": "^2.2.2", - "@tauri-apps/plugin-fs": "^2.3.0", - "@tauri-apps/plugin-opener": "^2.3.0", - "@tauri-apps/plugin-process": "^2.2.2", - "@tauri-apps/plugin-updater": "^2.8.1", + "@tauri-apps/api": "2.8.0", + "@tauri-apps/plugin-clipboard-manager": "2.3.0", + "@tauri-apps/plugin-dialog": "2.4.0", + "@tauri-apps/plugin-fs": "2.4.2", + "@tauri-apps/plugin-opener": "2.5.0", + "@tauri-apps/plugin-process": "2.3.0", + "@tauri-apps/plugin-updater": "2.9.0", "aws4fetch": "^1.0.20", "codemirror": "^6.0.2", "idb": "^8.0.3", "json-bigint": "^1.0.0", + "optional": "^0.1.4", "pinia": "^3.0.3", "pinia-plugin-persistedstate": "^4.3.0", "pretty-bytes": "^7.0.0", @@ -50,7 +51,7 @@ "@intlify/eslint-plugin-vue-i18n": "^4.0.1", "@playwright/test": "^1.53.1", "@quasar/vite-plugin": "^1.9.0", - "@tauri-apps/cli": "^2.5.0", + "@tauri-apps/cli": "2.8.4", "@types/json-bigint": "^1.0.4", "@vitejs/plugin-vue": "^5.2.4", "@vue/eslint-config-typescript": "^14.5.1", @@ -64,6 +65,5 @@ "vite-bundle-visualizer": "^1.2.1", "vitest": "^3.2.4", "vue-tsc": "^2.2.10" - }, - "packageManager": "yarn@4.7.0" -} + } +} \ No newline at end of file diff --git a/playwright.config.ts b/playwright.config.ts index 9eb01c8f..5782aef1 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -60,7 +60,7 @@ export default defineConfig({ /* Run your local dev server before starting the tests */ webServer: { - command: 'yarn dev --port=5175', + command: 'npm run dev -- --port=5175', url: 'http://localhost:5175', reuseExistingServer: !process.env.CI, }, diff --git a/scripts/build_browser_extensions.sh b/scripts/build_browser_extensions.sh index 29220683..5a7440f5 100755 --- a/scripts/build_browser_extensions.sh +++ b/scripts/build_browser_extensions.sh @@ -12,7 +12,7 @@ rm -rf artifacts/* function buildExtension () { VARIANT=$1 rm -rf dist/* - VITE_APP_BUILD_MODE=browser_extension VITE_APP_VARIANT=$VARIANT yarn build + VITE_APP_BUILD_MODE=browser_extension VITE_APP_VARIANT=$VARIANT npm run build rm -rf browser_extension/"$VARIANT"/assets browser_extension/"$VARIANT"/images browser_extension/"$VARIANT"/index.html cp -r ./src/assets/images/logo/manifest browser_extension/"$VARIANT"/logo cp -r dist/* browser_extension/"$VARIANT"/ diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 99b1ce8a..5e7dece1 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] @@ -41,12 +41,6 @@ dependencies = [ "alloc-no-stdlib", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -58,9 +52,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -73,9 +67,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -88,56 +82,56 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.9" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" dependencies = [ "derive_arbitrary", ] [[package]] name = "arboard" -version = "3.5.0" +version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1df21f715862ede32a0c525ce2ca4d52626bb0007f8c18b87a384503ac33e70" +checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" dependencies = [ "clipboard-win", "image", "log", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit", "objc2-core-foundation", "objc2-core-graphics", "objc2-foundation 0.3.1", "parking_lot", "percent-encoding", - "windows-sys 0.59.0", + "windows-sys 0.60.2", "wl-clipboard-rs", "x11rb", ] @@ -151,12 +145,15 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.9.1", + "rand 0.9.2", "raw-window-handle", "serde", "serde_repr", "tokio", "url", + "wayland-backend", + "wayland-client", + "wayland-protocols", "zbus", ] @@ -174,9 +171,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -186,9 +183,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" dependencies = [ "async-task", "concurrent-queue", @@ -200,28 +197,27 @@ dependencies = [ [[package]] name = "async-io" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" dependencies = [ - "async-lock", + "autocfg", "cfg-if", "concurrent-queue", "futures-io", "futures-lite", "parking", "polling", - "rustix 1.0.7", + "rustix 1.1.2", "slab", - "tracing", - "windows-sys 0.59.0", + "windows-sys 0.61.1", ] [[package]] name = "async-lock" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" dependencies = [ "event-listener", "event-listener-strategy", @@ -230,9 +226,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" dependencies = [ "async-channel", "async-io", @@ -243,8 +239,7 @@ dependencies = [ "cfg-if", "event-listener", "futures-lite", - "rustix 1.0.7", - "tracing", + "rustix 1.1.2", ] [[package]] @@ -255,14 +250,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "async-signal" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" dependencies = [ "async-io", "async-lock", @@ -270,10 +265,10 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.0.7", + "rustix 1.1.2", "signal-hook-registry", "slab", - "windows-sys 0.59.0", + "windows-sys 0.61.1", ] [[package]] @@ -284,13 +279,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -330,9 +325,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -340,7 +335,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link 0.2.0", ] [[package]] @@ -363,9 +358,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" dependencies = [ "serde", ] @@ -394,14 +389,14 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" dependencies = [ - "objc2 0.6.1", + "objc2 0.6.2", ] [[package]] name = "blocking" -version = "1.6.1" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ "async-channel", "async-task", @@ -412,9 +407,9 @@ dependencies = [ [[package]] name = "brotli" -version = "7.0.0" +version = "8.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -423,9 +418,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "4.0.3" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a334ef7c9e23abf0ce748e8cd309037da93e606ad52eb372e4ce327a0dcfbdfd" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -433,15 +428,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.18.1" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytemuck" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" [[package]] name = "byteorder" @@ -470,7 +465,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cairo-sys-rs", "glib", "libc", @@ -491,11 +486,11 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.10" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -518,25 +513,26 @@ dependencies = [ "semver", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "cargo_toml" -version = "0.22.1" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02260d489095346e5cafd04dea8e8cb54d1d74fcd759022a9b72986ebe9a1257" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" dependencies = [ "serde", - "toml", + "toml 0.9.7", ] [[package]] name = "cc" -version = "1.2.27" +version = "1.2.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" +checksum = "e1354349954c6fc9cb0deab020f27f783cf0b604e8bb754dc4658ecf0d29c35f" dependencies = [ + "find-msvc-tools", "shlex", ] @@ -569,9 +565,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -581,22 +577,21 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-link", + "windows-link 0.2.0", ] [[package]] name = "clipboard-win" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" +checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" dependencies = [ "error-code", ] @@ -664,7 +659,7 @@ version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation", "core-graphics-types", "foreign-types", @@ -677,7 +672,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "core-foundation", "libc", ] @@ -693,9 +688,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -715,6 +710,12 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + [[package]] name = "crypto-common" version = "0.1.6" @@ -727,15 +728,15 @@ dependencies = [ [[package]] name = "cssparser" -version = "0.27.2" +version = "0.29.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" dependencies = [ "cssparser-macros", "dtoa-short", - "itoa 0.4.8", + "itoa", "matches", - "phf 0.8.0", + "phf 0.10.1", "proc-macro2", "quote", "smallvec", @@ -749,7 +750,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -759,14 +760,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "darling" -version = "0.20.11" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ "darling_core", "darling_macro", @@ -774,48 +775,48 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.11" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "darling_macro" -version = "0.20.11" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", - "serde", + "serde_core", ] [[package]] name = "derive_arbitrary" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -828,7 +829,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -859,7 +860,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.60.2", + "windows-sys 0.61.1", ] [[package]] @@ -868,26 +869,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" -[[package]] -name = "dispatch2" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a0d569e003ff27784e0e14e4a594048698e0c0f0b66cabcb51511be55a7caa0" -dependencies = [ - "bitflags 2.9.1", - "block2 0.6.1", - "libc", - "objc2 0.6.1", -] - [[package]] name = "dispatch2" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.4", + "block2 0.6.1", + "libc", + "objc2 0.6.2", ] [[package]] @@ -898,14 +889,23 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", +] + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading 0.8.9", ] [[package]] name = "dlopen2" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" +checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff" dependencies = [ "dlopen2_derive", "libc", @@ -921,7 +921,7 @@ checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -962,9 +962,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "elasticvue" @@ -987,14 +987,14 @@ dependencies = [ [[package]] name = "embed-resource" -version = "3.0.4" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0963f530273dc3022ab2bdc3fcd6d488e850256f2284a82b7413cb9481ee85dd" +checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e" dependencies = [ "cc", "memchr", "rustc_version", - "toml", + "toml 0.9.7", "vswhom", "winreg", ] @@ -1029,7 +1029,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1063,22 +1063,23 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" +checksum = "259d404d09818dec19332e31d94558aeb442fea04c817006456c24b5460bbd4b" dependencies = [ "serde", + "serde_core", "typeid", ] [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.1", ] [[package]] @@ -1089,9 +1090,9 @@ checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -1114,6 +1115,26 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "fax" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" +dependencies = [ + "fax_derive", +] + +[[package]] +name = "fax_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "fdeflate" version = "0.3.7" @@ -1130,7 +1151,7 @@ source = "git+https://github.com/cars10/fetch_reqwest#f295bc50c1a5594c4b9c1afff1 dependencies = [ "log", "multimap", - "rand 0.9.1", + "rand 0.9.2", "reqwest", "serde", "serde_json", @@ -1148,16 +1169,22 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" + [[package]] name = "fixedbitset" version = "0.4.2" @@ -1198,7 +1225,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1209,9 +1236,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -1260,9 +1287,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand", "futures-core", @@ -1279,7 +1306,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1431,12 +1458,12 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.4.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" dependencies = [ - "libc", - "windows-targets 0.48.5", + "rustix 1.1.2", + "windows-targets 0.52.6", ] [[package]] @@ -1473,15 +1500,15 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.7+wasi-0.2.4", "wasm-bindgen", ] [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "gio" @@ -1521,7 +1548,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "futures-channel", "futures-core", "futures-executor", @@ -1545,11 +1572,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" dependencies = [ "heck 0.4.1", - "proc-macro-crate 2.0.0", + "proc-macro-crate 2.0.2", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1564,9 +1591,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "gobject-sys" @@ -1628,7 +1655,17 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", +] + +[[package]] +name = "half" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +dependencies = [ + "cfg-if", + "crunchy", ] [[package]] @@ -1639,9 +1676,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] name = "heck" @@ -1669,16 +1706,14 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "html5ever" -version = "0.26.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" +checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" dependencies = [ "log", "mac", "markup5ever", - "proc-macro2", - "quote", - "syn 1.0.109", + "match_token", ] [[package]] @@ -1689,7 +1724,7 @@ checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", - "itoa 1.0.15", + "itoa", ] [[package]] @@ -1723,18 +1758,20 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "http", "http-body", "httparse", - "itoa 1.0.15", + "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -1759,9 +1796,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.14" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ "base64 0.22.1", "bytes", @@ -1783,9 +1820,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1793,7 +1830,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core", + "windows-core 0.62.1", ] [[package]] @@ -1812,7 +1849,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98" dependencies = [ "byteorder", - "png", + "png 0.17.16", ] [[package]] @@ -1909,9 +1946,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -1930,14 +1967,15 @@ dependencies = [ [[package]] name = "image" -version = "0.25.6" +version = "0.25.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" +checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" dependencies = [ "bytemuck", "byteorder-lite", + "moxcms", "num-traits", - "png", + "png 0.18.0", "tiff", ] @@ -1954,13 +1992,14 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.16.0", "serde", + "serde_core", ] [[package]] @@ -1972,6 +2011,17 @@ dependencies = [ "cfb", ] +[[package]] +name = "io-uring" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "libc", +] + [[package]] name = "ipnet" version = "2.11.0" @@ -2013,12 +2063,6 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - [[package]] name = "itoa" version = "1.0.15" @@ -2069,7 +2113,7 @@ checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2094,17 +2138,11 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" -[[package]] -name = "jpeg-decoder" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" - [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -2138,21 +2176,20 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "serde", "unicode-segmentation", ] [[package]] name = "kuchikiki" -version = "0.8.2" +version = "0.8.8-speedreader" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" +checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" dependencies = [ "cssparser", "html5ever", - "indexmap 1.9.3", - "matches", + "indexmap 2.11.4", "selectors", ] @@ -2182,15 +2219,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" dependencies = [ "gtk-sys", - "libloading", + "libloading 0.7.4", "once_cell", ] [[package]] name = "libc" -version = "0.2.174" +version = "0.2.176" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" [[package]] name = "libloading" @@ -2202,13 +2239,23 @@ dependencies = [ "winapi", ] +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link 0.2.0", +] + [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "libc", "redox_syscall", ] @@ -2221,9 +2268,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -2243,9 +2290,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lru-slab" @@ -2261,18 +2308,29 @@ checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] name = "markup5ever" -version = "0.11.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" dependencies = [ "log", - "phf 0.10.1", - "phf_codegen 0.10.0", + "phf 0.11.3", + "phf_codegen 0.11.3", "string_cache", "string_cache_codegen", "tendril", ] +[[package]] +name = "match_token" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "matches" version = "0.1.10" @@ -2281,9 +2339,9 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memoffset" @@ -2333,25 +2391,35 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "moxcms" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd32fa8935aeadb8a8a6b6b351e40225570a37c43de67690383d87ef170cd08" +dependencies = [ + "num-traits", + "pxfm", +] + [[package]] name = "muda" -version = "0.16.1" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4de14a9b5d569ca68d7c891d613b390cf5ab4f851c77aaa2f9e435555d3d9492" +checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" dependencies = [ "crossbeam-channel", "dpi", "gtk", "keyboard-types", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit", "objc2-core-foundation", "objc2-foundation 0.3.1", "once_cell", - "png", + "png 0.17.16", "serde", - "thiserror 2.0.12", - "windows-sys 0.59.0", + "thiserror 2.0.17", + "windows-sys 0.60.2", ] [[package]] @@ -2369,7 +2437,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "jni-sys", "log", "ndk-sys", @@ -2405,7 +2473,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "cfg-if", "cfg_aliases", "libc", @@ -2445,23 +2513,24 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" dependencies = [ "num_enum_derive", + "rustversion", ] [[package]] name = "num_enum_derive" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2482,9 +2551,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" +checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc" dependencies = [ "objc2-encode", "objc2-exception-helper", @@ -2496,10 +2565,10 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.6.1", "libc", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-cloud-kit", "objc2-core-data", "objc2-core-foundation", @@ -2515,8 +2584,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17614fdcd9b411e6ff1117dfb1d0150f908ba83a7df81b1f118005fe0a8ea15d" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.4", + "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -2526,8 +2595,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "291fbbf7d29287518e8686417cf7239c74700fd4b607623140a7d4a3c834329d" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.4", + "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -2537,9 +2606,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ - "bitflags 2.9.1", - "dispatch2 0.3.0", - "objc2 0.6.1", + "bitflags 2.9.4", + "dispatch2", + "objc2 0.6.2", ] [[package]] @@ -2548,9 +2617,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ - "bitflags 2.9.1", - "dispatch2 0.3.0", - "objc2 0.6.1", + "bitflags 2.9.4", + "dispatch2", + "objc2 0.6.2", "objc2-core-foundation", "objc2-io-surface", ] @@ -2561,7 +2630,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79b3dc0cc4386b6ccf21c157591b34a7f44c8e75b064f85502901ab2188c007e" dependencies = [ - "objc2 0.6.1", + "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -2586,7 +2655,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -2598,10 +2667,10 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.6.1", "libc", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-core-foundation", ] @@ -2611,8 +2680,18 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.4", + "objc2 0.6.2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-javascript-core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9052cb1bb50a4c161d934befcf879526fb87ae9a68858f241e693ca46225cf5a" +dependencies = [ + "objc2 0.6.2", "objc2-core-foundation", ] @@ -2622,7 +2701,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -2634,8 +2713,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26bb88504b5a050dbba515d2414607bf5e57dd56b107bc5f0351197a3e7bdc5d" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.4", + "objc2 0.6.2", "objc2-app-kit", "objc2-foundation 0.3.1", ] @@ -2646,7 +2725,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -2659,19 +2738,30 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ffb6a0cd5f182dc964334388560b12a57f7b74b3e2dec5e2722aa2dfb2ccd5" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.4", + "objc2 0.6.2", "objc2-foundation 0.3.1", ] +[[package]] +name = "objc2-security" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1f8e0ef3ab66b08c42644dcb34dba6ec0a574bbd8adbb8bdbdc7a2779731a44" +dependencies = [ + "bitflags 2.9.4", + "objc2 0.6.2", + "objc2-core-foundation", +] + [[package]] name = "objc2-ui-kit" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25b1312ad7bc8a0e92adae17aa10f90aae1fb618832f9b993b022b591027daed" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.4", + "objc2 0.6.2", "objc2-core-foundation", "objc2-foundation 0.3.1", ] @@ -2682,19 +2772,21 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91672909de8b1ce1c2252e95bbee8c1649c9ad9d14b9248b3d7b4c47903c47ad" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "block2 0.6.1", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit", "objc2-core-foundation", "objc2-foundation 0.3.1", + "objc2-javascript-core", + "objc2-security", ] [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] @@ -2755,12 +2847,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "732c71caeaa72c065bb69d7ea08717bd3f4863a4f451402fc9513e29dbd5261b" dependencies = [ - "objc2 0.6.1", + "objc2 0.6.2", "objc2-foundation 0.3.1", "objc2-osa-kit", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] @@ -2831,9 +2923,9 @@ checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petgraph" @@ -2842,7 +2934,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.9.0", + "indexmap 2.11.4", ] [[package]] @@ -2851,9 +2943,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" dependencies = [ - "phf_macros 0.8.0", "phf_shared 0.8.0", - "proc-macro-hack", ] [[package]] @@ -2862,7 +2952,9 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" dependencies = [ + "phf_macros 0.10.0", "phf_shared 0.10.0", + "proc-macro-hack", ] [[package]] @@ -2887,12 +2979,12 @@ dependencies = [ [[package]] name = "phf_codegen" -version = "0.10.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", + "phf_generator 0.11.3", + "phf_shared 0.11.3", ] [[package]] @@ -2927,12 +3019,12 @@ dependencies = [ [[package]] name = "phf_macros" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", + "phf_generator 0.10.0", + "phf_shared 0.10.0", "proc-macro-hack", "proc-macro2", "quote", @@ -2949,7 +3041,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3010,13 +3102,13 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plist" -version = "1.7.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d77244ce2d584cd84f6a15f86195b8c9b2a0dfbfd817c09e0464244091a58ed" +checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" dependencies = [ "base64 0.22.1", - "indexmap 2.9.0", - "quick-xml", + "indexmap 2.11.4", + "quick-xml 0.38.3", "serde", "time", ] @@ -3034,19 +3126,31 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "png" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" +dependencies = [ + "bitflags 2.9.4", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + [[package]] name = "polling" -version = "3.8.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.0.7", - "tracing", - "windows-sys 0.59.0", + "rustix 1.1.2", + "windows-sys 0.61.1", ] [[package]] @@ -3066,9 +3170,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -3106,20 +3210,21 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" dependencies = [ - "toml_edit 0.20.7", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", ] [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.22.27", + "toml_edit 0.23.6", ] [[package]] @@ -3154,13 +3259,28 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] +[[package]] +name = "pxfm" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83f9b339b02259ada5c0f4a389b7fb472f933aa17ce176fd2ad98f28bb401fde" +dependencies = [ + "num-traits", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quick-xml" version = "0.37.5" @@ -3170,11 +3290,20 @@ dependencies = [ "memchr", ] +[[package]] +name = "quick-xml" +version = "0.38.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89" +dependencies = [ + "memchr", +] + [[package]] name = "quinn" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", @@ -3184,7 +3313,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -3192,20 +3321,20 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.12" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", "getrandom 0.3.3", "lru-slab", - "rand 0.9.1", + "rand 0.9.2", "ring", "rustc-hash", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -3213,23 +3342,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -3267,9 +3396,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -3358,49 +3487,49 @@ checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", ] [[package]] name = "redox_users" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ "aho-corasick", "memchr", @@ -3410,9 +3539,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ "aho-corasick", "memchr", @@ -3421,15 +3550,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "reqwest" -version = "0.12.20" +version = "0.12.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813" +checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" dependencies = [ "base64 0.22.1", "bytes", @@ -3468,19 +3597,19 @@ dependencies = [ [[package]] name = "rfd" -version = "0.15.3" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80c844748fdc82aae252ee4594a89b6e7ebef1063de7951545564cbc4e57075d" +checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" dependencies = [ "ashpd", "block2 0.6.1", - "dispatch2 0.2.0", + "dispatch2", "glib-sys", "gobject-sys", "gtk-sys", "js-sys", "log", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit", "objc2-core-foundation", "objc2-foundation 0.3.1", @@ -3507,9 +3636,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -3532,7 +3661,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "errno", "libc", "linux-raw-sys 0.4.15", @@ -3541,22 +3670,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.7" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.1", ] [[package]] name = "rustls" -version = "0.23.28" +version = "0.23.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" +checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" dependencies = [ "once_cell", "ring", @@ -3578,9 +3707,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.3" +version = "0.103.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" dependencies = [ "ring", "rustls-pki-types", @@ -3589,9 +3718,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" @@ -3635,6 +3764,18 @@ dependencies = [ "serde_json", ] +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "schemars_derive" version = "0.8.22" @@ -3644,9 +3785,15 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.104", + "syn 2.0.106", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" @@ -3655,62 +3802,72 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "selectors" -version = "0.22.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" dependencies = [ "bitflags 1.3.2", "cssparser", "derive_more", "fxhash", "log", - "matches", "phf 0.8.0", "phf_codegen 0.8.0", "precomputed-hash", "servo_arc", "smallvec", - "thin-slice", ] [[package]] name = "semver" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" dependencies = [ "serde", + "serde_core", ] [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] [[package]] name = "serde-untagged" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" dependencies = [ "erased-serde", "serde", + "serde_core", "typeid", ] +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3721,19 +3878,20 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ - "itoa 1.0.15", + "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] @@ -3744,7 +3902,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3756,6 +3914,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5417783452c2be558477e104686f7de5dae53dba813c28435e0e70f82d9b04ee" +dependencies = [ + "serde_core", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3763,23 +3930,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.15", + "itoa", "ryu", "serde", ] [[package]] name = "serde_with" -version = "3.13.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf65a400f8f66fb7b0552869ad70157166676db75ed8181f8104ea91cf9d0b42" +checksum = "c522100790450cf78eeac1507263d0a350d4d5b30df0c8e1fe051a10c22b376e" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.9.0", + "indexmap 2.11.4", "schemars 0.9.0", + "schemars 1.0.4", "serde", "serde_derive", "serde_json", @@ -3789,21 +3957,21 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.13.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81679d9ed988d5e9a5e6531dc3f2c28efbd639cbd1dfb628df08edea6004da77" +checksum = "327ada00f7d64abaac1e55a6911e90cf665aa051b9a561c7006c157f4633135e" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "serialize-to-javascript" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" dependencies = [ "serde", "serde_json", @@ -3812,20 +3980,20 @@ dependencies = [ [[package]] name = "serialize-to-javascript-impl" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.106", ] [[package]] name = "servo_arc" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" dependencies = [ "nodrop", "stable_deref_trait", @@ -3850,9 +4018,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -3877,9 +4045,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" @@ -3889,12 +4057,12 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.5.10" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4018,9 +4186,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.104" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -4044,7 +4212,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4056,17 +4224,18 @@ dependencies = [ "cfg-expr", "heck 0.5.0", "pkg-config", - "toml", + "toml 0.8.2", "version-compare", ] [[package]] name = "tao" -version = "0.33.0" +version = "0.34.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e59c1f38e657351a2e822eadf40d6a2ad4627b9c25557bc1180ec1b3295ef82" +checksum = "959469667dbcea91e5485fc48ba7dd6023face91bb0f1a14681a70f99847c3f7" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", + "block2 0.6.1", "core-foundation", "core-graphics", "crossbeam-channel", @@ -4083,7 +4252,7 @@ dependencies = [ "ndk", "ndk-context", "ndk-sys", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit", "objc2-foundation 0.3.1", "once_cell", @@ -4094,7 +4263,7 @@ dependencies = [ "unicode-segmentation", "url", "windows", - "windows-core", + "windows-core 0.61.2", "windows-version", "x11-dl", ] @@ -4107,7 +4276,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4129,17 +4298,17 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.5.1" +version = "2.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7b0bc1aec81bda6bc455ea98fcaed26b3c98c1648c627ad6ff1c704e8bf8cbc" +checksum = "d4d1d3b3dc4c101ac989fd7db77e045cc6d91a25349cd410455cb5c57d510c1c" dependencies = [ "anyhow", "bytes", + "cookie", "dirs", "dunce", "embed_plist", - "futures-util", - "getrandom 0.2.16", + "getrandom 0.3.3", "glob", "gtk", "heck 0.5.0", @@ -4149,10 +4318,11 @@ dependencies = [ "log", "mime", "muda", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit", "objc2-foundation 0.3.1", "objc2-ui-kit", + "objc2-web-kit", "percent-encoding", "plist", "raw-window-handle", @@ -4167,7 +4337,7 @@ dependencies = [ "tauri-runtime", "tauri-runtime-wry", "tauri-utils", - "thiserror 2.0.12", + "thiserror 2.0.17", "tokio", "tray-icon", "url", @@ -4180,9 +4350,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.2.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a0350f0df1db385ca5c02888a83e0e66655c245b7443db8b78a70da7d7f8fc" +checksum = "9c432ccc9ff661803dab74c6cd78de11026a578a9307610bbc39d3c55be7943f" dependencies = [ "anyhow", "cargo_toml", @@ -4196,31 +4366,31 @@ dependencies = [ "serde_json", "tauri-utils", "tauri-winres", - "toml", + "toml 0.9.7", "walkdir", ] [[package]] name = "tauri-codegen" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93f035551bf7b11b3f51ad9bc231ebbe5e085565527991c16cf326aa38cdf47" +checksum = "1ab3a62cf2e6253936a8b267c2e95839674e7439f104fa96ad0025e149d54d8a" dependencies = [ "base64 0.22.1", "brotli", "ico", "json-patch", "plist", - "png", + "png 0.17.16", "proc-macro2", "quote", "semver", "serde", "serde_json", "sha2", - "syn 2.0.104", + "syn 2.0.106", "tauri-utils", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "url", "uuid", @@ -4229,23 +4399,23 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8db4df25e2d9d45de0c4c910da61cd5500190da14ae4830749fee3466dddd112" +checksum = "4368ea8094e7045217edb690f493b55b30caf9f3e61f79b4c24b6db91f07995e" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "tauri-codegen", "tauri-utils", ] [[package]] name = "tauri-plugin" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a5ebe6a610d1b78a94650896e6f7c9796323f408800cef436e0fa0539de601" +checksum = "9946a3cede302eac0c6eb6c6070ac47b1768e326092d32efbb91f21ed58d978f" dependencies = [ "anyhow", "glob", @@ -4254,15 +4424,15 @@ dependencies = [ "serde", "serde_json", "tauri-utils", - "toml", + "toml 0.9.7", "walkdir", ] [[package]] name = "tauri-plugin-clipboard-manager" -version = "2.2.3" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11fa4f17a6d380490597f7632aca40b65d379cb374cb92bd9d80f333309b7fd7" +checksum = "adddd9e9275b20e77af3061d100a25a884cced3c4c9ef680bd94dd0f7e26c1ca" dependencies = [ "arboard", "log", @@ -4270,14 +4440,14 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin", - "thiserror 2.0.12", + "thiserror 2.0.17", ] [[package]] name = "tauri-plugin-dialog" -version = "2.2.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33318fe222fc2a612961de8b0419e2982767f213f54a4d3a21b0d7b85c41df8" +checksum = "0beee42a4002bc695550599b011728d9dfabf82f767f134754ed6655e434824e" dependencies = [ "log", "raw-window-handle", @@ -4287,15 +4457,15 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-plugin-fs", - "thiserror 2.0.12", + "thiserror 2.0.17", "url", ] [[package]] name = "tauri-plugin-fs" -version = "2.3.0" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ead0daec5d305adcefe05af9d970fc437bcc7996052d564e7393eb291252da" +checksum = "315784ec4be45e90a987687bae7235e6be3d6e9e350d2b75c16b8a4bf22c1db7" dependencies = [ "anyhow", "dunce", @@ -4308,16 +4478,16 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-utils", - "thiserror 2.0.12", - "toml", + "thiserror 2.0.17", + "toml 0.9.7", "url", ] [[package]] name = "tauri-plugin-opener" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8983f50326d34437142a6d560b5c3426e91324297519b6eeb32ed0a1d1e0f2" +checksum = "786156aa8e89e03d271fbd3fe642207da8e65f3c961baa9e2930f332bf80a1f5" dependencies = [ "dunce", "glob", @@ -4329,7 +4499,7 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin", - "thiserror 2.0.12", + "thiserror 2.0.17", "url", "windows", "zbus", @@ -4337,9 +4507,9 @@ dependencies = [ [[package]] name = "tauri-plugin-process" -version = "2.2.2" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d870adae9408be585abd56eade2b5def2660339512b7c8de5ddf21238b67a34" +checksum = "7461c622a5ea00eb9cd9f7a08dbd3bf79484499fd5c21aa2964677f64ca651ab" dependencies = [ "tauri", "tauri-plugin", @@ -4347,9 +4517,9 @@ dependencies = [ [[package]] name = "tauri-plugin-updater" -version = "2.8.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b068673e9037376ca9906f99b00ae5f9e6eb62f456f900b4435c38d57cfa73e4" +checksum = "27cbc31740f4d507712550694749572ec0e43bdd66992db7599b89fbfd6b167b" dependencies = [ "base64 0.22.1", "dirs", @@ -4369,7 +4539,7 @@ dependencies = [ "tauri", "tauri-plugin", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.17", "time", "tokio", "url", @@ -4379,37 +4549,40 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f004905d549854069e6774533d742b03cacfd6f03deb08940a8677586cbe39" +checksum = "d4cfc9ad45b487d3fded5a4731a567872a4812e9552e3964161b08edabf93846" dependencies = [ "cookie", "dpi", "gtk", "http", "jni", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-ui-kit", + "objc2-web-kit", "raw-window-handle", "serde", "serde_json", "tauri-utils", - "thiserror 2.0.12", + "thiserror 2.0.17", "url", + "webkit2gtk", + "webview2-com", "windows", ] [[package]] name = "tauri-runtime-wry" -version = "2.6.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f85d056f4d4b014fe874814034f3416d57114b617a493a4fe552580851a3f3a2" +checksum = "c1fe9d48bd122ff002064e88cfcd7027090d789c4302714e68fcccba0f4b7807" dependencies = [ "gtk", "http", "jni", "log", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit", "objc2-foundation 0.3.1", "once_cell", @@ -4428,9 +4601,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.4.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2900399c239a471bcff7f15c4399eb1a8c4fe511ba2853e07c996d771a5e0a4" +checksum = "41a3852fdf9a4f8fbeaa63dc3e9a85284dd6ef7200751f0bd66ceee30c93f212" dependencies = [ "anyhow", "brotli", @@ -4456,8 +4629,8 @@ dependencies = [ "serde_json", "serde_with", "swift-rs", - "thiserror 2.0.12", - "toml", + "thiserror 2.0.17", + "toml 0.9.7", "url", "urlpattern", "uuid", @@ -4466,26 +4639,25 @@ dependencies = [ [[package]] name = "tauri-winres" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d321dbc6f998d825ab3f0d62673e810c861aac2d0de2cc2c395328f1d113b4" +checksum = "fd21509dd1fa9bd355dc29894a6ff10635880732396aa38c0066c1e6c1ab8074" dependencies = [ "embed-resource", - "indexmap 2.9.0", - "toml", + "toml 0.9.7", ] [[package]] name = "tempfile" -version = "3.20.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix 1.0.7", - "windows-sys 0.59.0", + "rustix 1.1.2", + "windows-sys 0.61.1", ] [[package]] @@ -4499,12 +4671,6 @@ dependencies = [ "utf-8", ] -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - [[package]] name = "thiserror" version = "1.0.69" @@ -4516,11 +4682,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.17", ] [[package]] @@ -4531,39 +4697,42 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "tiff" -version = "0.9.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" dependencies = [ + "fax", "flate2", - "jpeg-decoder", + "half", + "quick-error", "weezl", + "zune-jpeg", ] [[package]] name = "time" -version = "0.3.41" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", - "itoa 1.0.15", + "itoa", "num-conv", "powerfmt", "serde", @@ -4573,15 +4742,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -4599,9 +4768,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -4614,26 +4783,28 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.1" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", "pin-project-lite", "signal-hook-registry", + "slab", "socket2", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -4641,9 +4812,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", @@ -4654,66 +4825,99 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.23" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" dependencies = [ "serde", - "serde_spanned", - "toml_datetime", - "toml_edit 0.22.27", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00e5e5d9bf2475ac9d4f0d9edab68cc573dc2fd644b0dba36b0c30a92dd9eaa0" +dependencies = [ + "indexmap 2.11.4", + "serde_core", + "serde_spanned 1.0.2", + "toml_datetime 0.7.2", + "toml_parser", + "toml_writer", + "winnow 0.7.13", ] [[package]] name = "toml_datetime" -version = "0.6.11" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.9.0", - "toml_datetime", + "indexmap 2.11.4", + "toml_datetime 0.6.3", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.20.7" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.9.0", - "toml_datetime", + "indexmap 2.11.4", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.27" +version = "0.23.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" dependencies = [ - "indexmap 2.9.0", - "serde", - "serde_spanned", - "toml_datetime", - "toml_write", - "winnow 0.7.11", + "indexmap 2.11.4", + "toml_datetime 0.7.2", + "toml_parser", + "winnow 0.7.13", ] [[package]] -name = "toml_write" -version = "0.1.2" +name = "toml_parser" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" +dependencies = [ + "winnow 0.7.13", +] + +[[package]] +name = "toml_writer" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d163a63c116ce562a22cda521fcc4d79152e7aba014456fb5eb442f6d6a10109" [[package]] name = "tower" @@ -4736,7 +4940,7 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "bytes", "futures-util", "http", @@ -4779,7 +4983,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4793,33 +4997,32 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.20.1" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7eee98ec5c90daf179d55c20a49d8c0d043054ce7c26336c09a24d31f14fa0" +checksum = "a0d92153331e7d02ec09137538996a7786fe679c629c279e82a6be762b7e6fe2" dependencies = [ "crossbeam-channel", "dirs", "libappindicator", "muda", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit", "objc2-core-foundation", "objc2-core-graphics", "objc2-foundation 0.3.1", "once_cell", - "png", + "png 0.17.16", "serde", - "thiserror 2.0.12", + "thiserror 2.0.17", "windows-sys 0.59.0", ] [[package]] name = "tree_magic_mini" -version = "3.1.6" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac5e8971f245c3389a5a76e648bfc80803ae066a1243a75db0064d7c1129d63" +checksum = "f943391d896cdfe8eec03a04d7110332d445be7df856db382dd96a730667562c" dependencies = [ - "fnv", "memchr", "nom", "once_cell", @@ -4840,9 +5043,9 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "uds_windows" @@ -4898,9 +5101,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-segmentation" @@ -4916,9 +5119,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -4958,9 +5161,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.17.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ "getrandom 0.3.3", "js-sys", @@ -5033,44 +5236,54 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.7+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -5081,9 +5294,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5091,22 +5304,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] @@ -5126,36 +5339,37 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121" +checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" dependencies = [ "cc", "downcast-rs", - "rustix 0.38.44", + "rustix 1.1.2", + "scoped-tls", "smallvec", "wayland-sys", ] [[package]] name = "wayland-client" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61" +checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.9.1", - "rustix 0.38.44", + "bitflags 2.9.4", + "rustix 1.1.2", "wayland-backend", "wayland-scanner", ] [[package]] name = "wayland-protocols" -version = "0.32.8" +version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a" +checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "wayland-backend", "wayland-client", "wayland-scanner", @@ -5163,11 +5377,11 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cb6cdc73399c0e06504c437fe3cf886f25568dd5454473d565085b36d6a8bbf" +checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5176,29 +5390,31 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" +checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.37.5", "quote", ] [[package]] name = "wayland-sys" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" +checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" dependencies = [ + "dlib", + "log", "pkg-config", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -5260,23 +5476,23 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8782dd5a41a24eed3a4f40b606249b3e236ca61adf1f25ea4d45c73de122b502" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" dependencies = [ "rustls-pki-types", ] [[package]] name = "webview2-com" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b542b5cfbd9618c46c2784e4d41ba218c336ac70d44c55e47b251033e7d85601" +checksum = "d4ba622a989277ef3886dd5afb3e280e3dd6d974b766118950a08f8f678ad6a4" dependencies = [ "webview2-com-macros", "webview2-com-sys", "windows", - "windows-core", + "windows-core 0.61.2", "windows-implement", "windows-interface", ] @@ -5289,18 +5505,18 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "webview2-com-sys" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae2d11c4a686e4409659d7891791254cf9286d3cfe0eef54df1523533d22295" +checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c" dependencies = [ - "thiserror 2.0.12", + "thiserror 2.0.17", "windows", - "windows-core", + "windows-core 0.61.2", ] [[package]] @@ -5327,11 +5543,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.1", ] [[package]] @@ -5346,7 +5562,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" dependencies = [ - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit", "objc2-core-foundation", "objc2-foundation 0.3.1", @@ -5362,9 +5578,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ "windows-collections", - "windows-core", + "windows-core 0.61.2", "windows-future", - "windows-link", + "windows-link 0.1.3", "windows-numerics", ] @@ -5374,7 +5590,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "windows-core", + "windows-core 0.61.2", ] [[package]] @@ -5385,9 +5601,22 @@ checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6844ee5416b285084d3d3fffd743b925a6c9385455f64f6d4fa3031c4c2749a9" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.0", + "windows-result 0.4.0", + "windows-strings 0.5.0", ] [[package]] @@ -5396,31 +5625,31 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ - "windows-core", - "windows-link", + "windows-core 0.61.2", + "windows-link 0.1.3", "windows-threading", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5429,14 +5658,20 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + [[package]] name = "windows-numerics" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" dependencies = [ - "windows-core", - "windows-link", + "windows-core 0.61.2", + "windows-link 0.1.3", ] [[package]] @@ -5445,7 +5680,16 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" +dependencies = [ + "windows-link 0.2.0", ] [[package]] @@ -5454,7 +5698,16 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" +dependencies = [ + "windows-link 0.2.0", ] [[package]] @@ -5490,7 +5743,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.2", + "windows-targets 0.53.4", +] + +[[package]] +name = "windows-sys" +version = "0.61.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" +dependencies = [ + "windows-link 0.2.0", ] [[package]] @@ -5508,21 +5770,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -5541,10 +5788,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "2d42b7b7f66d2a06854650af09cfdf8713e427a439c97ad65a6375318033ac4b" dependencies = [ + "windows-link 0.2.0", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -5561,16 +5809,16 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] name = "windows-version" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c" +checksum = "700dad7c058606087f6fdc1f88da5841e06da40334413c6cd4367b25ef26d24e" dependencies = [ - "windows-link", + "windows-link 0.2.0", ] [[package]] @@ -5579,12 +5827,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -5603,12 +5845,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -5627,12 +5863,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -5663,12 +5893,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -5687,12 +5911,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -5711,12 +5929,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -5735,12 +5947,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -5764,9 +5970,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] @@ -5782,13 +5988,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.1", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "wl-clipboard-rs" @@ -5801,7 +6004,7 @@ dependencies = [ "os_pipe", "rustix 0.38.44", "tempfile", - "thiserror 2.0.12", + "thiserror 2.0.17", "tree_magic_mini", "wayland-backend", "wayland-client", @@ -5817,14 +6020,15 @@ checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "wry" -version = "0.51.2" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c886a0a9d2a94fd90cfa1d929629b79cfefb1546e2c7430c63a47f0664c0e4e2" +checksum = "31f0e9642a0d061f6236c54ccae64c2722a7879ad4ec7dff59bd376d446d8e90" dependencies = [ "base64 0.22.1", "block2 0.6.1", "cookie", "crossbeam-channel", + "dirs", "dpi", "dunce", "gdkx11", @@ -5836,7 +6040,7 @@ dependencies = [ "kuchikiki", "libc", "ndk", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit", "objc2-core-foundation", "objc2-foundation 0.3.1", @@ -5848,13 +6052,13 @@ dependencies = [ "sha2", "soup3", "tao-macros", - "thiserror 2.0.12", + "thiserror 2.0.17", "url", "webkit2gtk", "webkit2gtk-sys", "webview2-com", "windows", - "windows-core", + "windows-core 0.61.2", "windows-version", "x11-dl", ] @@ -5882,29 +6086,29 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" dependencies = [ "gethostname", - "rustix 0.38.44", + "rustix 1.1.2", "x11rb-protocol", ] [[package]] name = "x11rb-protocol" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" [[package]] name = "xattr" -version = "1.5.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix 1.0.7", + "rustix 1.1.2", ] [[package]] @@ -5927,15 +6131,15 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure", ] [[package]] name = "zbus" -version = "5.7.1" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3a7c7cee313d044fca3f48fa782cb750c79e4ca76ba7bc7718cd4024cdf6f68" +checksum = "2d07e46d035fb8e375b2ce63ba4e4ff90a7f73cf2ffb0138b29e1158d2eaadf7" dependencies = [ "async-broadcast", "async-executor", @@ -5958,8 +6162,8 @@ dependencies = [ "tokio", "tracing", "uds_windows", - "windows-sys 0.59.0", - "winnow 0.7.11", + "windows-sys 0.60.2", + "winnow 0.7.13", "zbus_macros", "zbus_names", "zvariant", @@ -5967,14 +6171,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.7.1" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17e7e5eec1550f747e71a058df81a9a83813ba0f6a95f39c4e218bdc7ba366a" +checksum = "57e797a9c847ed3ccc5b6254e8bcce056494b375b511b3d6edcec0aeb4defaca" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "zbus_names", "zvariant", "zvariant_utils", @@ -5988,28 +6192,28 @@ checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", - "winnow 0.7.11", + "winnow 0.7.13", "zvariant", ] [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6029,15 +6233,15 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" @@ -6052,9 +6256,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -6069,59 +6273,73 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "zip" -version = "4.1.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7dcdb4229c0e79c2531a24de7726a0e980417a74fb4d030a35f535665439a0" +checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" dependencies = [ "arbitrary", "crc32fast", - "indexmap 2.9.0", + "indexmap 2.11.4", "memchr", ] +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-jpeg" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" +dependencies = [ + "zune-core", +] + [[package]] name = "zvariant" -version = "5.5.3" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d30786f75e393ee63a21de4f9074d4c038d52c5b1bb4471f955db249f9dffb1" +checksum = "999dd3be73c52b1fccd109a4a81e4fcd20fab1d3599c8121b38d04e1419498db" dependencies = [ "endi", "enumflags2", "serde", "url", - "winnow 0.7.11", + "winnow 0.7.13", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.5.3" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75fda702cd42d735ccd48117b1630432219c0e9616bf6cb0f8350844ee4d9580" +checksum = "6643fd0b26a46d226bd90d3f07c1b5321fe9bb7f04673cb37ac6d6883885b68e" dependencies = [ - "proc-macro-crate 3.3.0", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" +checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" dependencies = [ "proc-macro2", "quote", "serde", - "static_assertions", - "syn 2.0.104", - "winnow 0.7.11", + "syn 2.0.106", + "winnow 0.7.13", ] diff --git a/src-tauri/gen/schemas/acl-manifests.json b/src-tauri/gen/schemas/acl-manifests.json index 5756a995..1edbe15f 100644 --- a/src-tauri/gen/schemas/acl-manifests.json +++ b/src-tauri/gen/schemas/acl-manifests.json @@ -1 +1 @@ -{"clipboard-manager":{"default_permission":{"identifier":"default","description":"No features are enabled by default, as we believe\nthe clipboard can be inherently dangerous and it is \napplication specific if read and/or write access is needed.\n\nClipboard interaction needs to be explicitly enabled.\n","permissions":[]},"permissions":{"allow-clear":{"identifier":"allow-clear","description":"Enables the clear command without any pre-configured scope.","commands":{"allow":["clear"],"deny":[]}},"allow-read-image":{"identifier":"allow-read-image","description":"Enables the read_image command without any pre-configured scope.","commands":{"allow":["read_image"],"deny":[]}},"allow-read-text":{"identifier":"allow-read-text","description":"Enables the read_text command without any pre-configured scope.","commands":{"allow":["read_text"],"deny":[]}},"allow-write-html":{"identifier":"allow-write-html","description":"Enables the write_html command without any pre-configured scope.","commands":{"allow":["write_html"],"deny":[]}},"allow-write-image":{"identifier":"allow-write-image","description":"Enables the write_image command without any pre-configured scope.","commands":{"allow":["write_image"],"deny":[]}},"allow-write-text":{"identifier":"allow-write-text","description":"Enables the write_text command without any pre-configured scope.","commands":{"allow":["write_text"],"deny":[]}},"deny-clear":{"identifier":"deny-clear","description":"Denies the clear command without any pre-configured scope.","commands":{"allow":[],"deny":["clear"]}},"deny-read-image":{"identifier":"deny-read-image","description":"Denies the read_image command without any pre-configured scope.","commands":{"allow":[],"deny":["read_image"]}},"deny-read-text":{"identifier":"deny-read-text","description":"Denies the read_text command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text"]}},"deny-write-html":{"identifier":"deny-write-html","description":"Denies the write_html command without any pre-configured scope.","commands":{"allow":[],"deny":["write_html"]}},"deny-write-image":{"identifier":"deny-write-image","description":"Denies the write_image command without any pre-configured scope.","commands":{"allow":[],"deny":["write_image"]}},"deny-write-text":{"identifier":"deny-write-text","description":"Denies the write_text command without any pre-configured scope.","commands":{"allow":[],"deny":["write_text"]}}},"permission_sets":{},"global_scope_schema":null},"core":{"default_permission":{"identifier":"default","description":"Default core plugins set.","permissions":["core:path:default","core:event:default","core:window:default","core:webview:default","core:app:default","core:image:default","core:resources:default","core:menu:default","core:tray:default"]},"permissions":{},"permission_sets":{},"global_scope_schema":null},"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version","allow-identifier"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-fetch-data-store-identifiers":{"identifier":"allow-fetch-data-store-identifiers","description":"Enables the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":["fetch_data_store_identifiers"],"deny":[]}},"allow-identifier":{"identifier":"allow-identifier","description":"Enables the identifier command without any pre-configured scope.","commands":{"allow":["identifier"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-remove-data-store":{"identifier":"allow-remove-data-store","description":"Enables the remove_data_store command without any pre-configured scope.","commands":{"allow":["remove_data_store"],"deny":[]}},"allow-set-app-theme":{"identifier":"allow-set-app-theme","description":"Enables the set_app_theme command without any pre-configured scope.","commands":{"allow":["set_app_theme"],"deny":[]}},"allow-set-dock-visibility":{"identifier":"allow-set-dock-visibility","description":"Enables the set_dock_visibility command without any pre-configured scope.","commands":{"allow":["set_dock_visibility"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-fetch-data-store-identifiers":{"identifier":"deny-fetch-data-store-identifiers","description":"Denies the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_data_store_identifiers"]}},"deny-identifier":{"identifier":"deny-identifier","description":"Denies the identifier command without any pre-configured scope.","commands":{"allow":[],"deny":["identifier"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-remove-data-store":{"identifier":"deny-remove-data-store","description":"Denies the remove_data_store command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_data_store"]}},"deny-set-app-theme":{"identifier":"deny-set-app-theme","description":"Denies the set_app_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_app_theme"]}},"deny-set-dock-visibility":{"identifier":"deny-set-dock-visibility","description":"Denies the set_dock_visibility command without any pre-configured scope.","commands":{"allow":[],"deny":["set_dock_visibility"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-webviews","allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-clear-all-browsing-data":{"identifier":"allow-clear-all-browsing-data","description":"Enables the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":["clear_all_browsing_data"],"deny":[]}},"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-get-all-webviews":{"identifier":"allow-get-all-webviews","description":"Enables the get_all_webviews command without any pre-configured scope.","commands":{"allow":["get_all_webviews"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-background-color":{"identifier":"allow-set-webview-background-color","description":"Enables the set_webview_background_color command without any pre-configured scope.","commands":{"allow":["set_webview_background_color"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-hide":{"identifier":"allow-webview-hide","description":"Enables the webview_hide command without any pre-configured scope.","commands":{"allow":["webview_hide"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-show":{"identifier":"allow-webview-show","description":"Enables the webview_show command without any pre-configured scope.","commands":{"allow":["webview_show"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-clear-all-browsing-data":{"identifier":"deny-clear-all-browsing-data","description":"Denies the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":[],"deny":["clear_all_browsing_data"]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-get-all-webviews":{"identifier":"deny-get-all-webviews","description":"Denies the get_all_webviews command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_webviews"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-background-color":{"identifier":"deny-set-webview-background-color","description":"Denies the set_webview_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_background_color"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-hide":{"identifier":"deny-webview-hide","description":"Denies the webview_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_hide"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-show":{"identifier":"deny-webview-show","description":"Denies the webview_show command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_show"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-windows","allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-is-enabled","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-is-always-on-top","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-get-all-windows":{"identifier":"allow-get-all-windows","description":"Enables the get_all_windows command without any pre-configured scope.","commands":{"allow":["get_all_windows"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-always-on-top":{"identifier":"allow-is-always-on-top","description":"Enables the is_always_on_top command without any pre-configured scope.","commands":{"allow":["is_always_on_top"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-background-color":{"identifier":"allow-set-background-color","description":"Enables the set_background_color command without any pre-configured scope.","commands":{"allow":["set_background_color"],"deny":[]}},"allow-set-badge-count":{"identifier":"allow-set-badge-count","description":"Enables the set_badge_count command without any pre-configured scope.","commands":{"allow":["set_badge_count"],"deny":[]}},"allow-set-badge-label":{"identifier":"allow-set-badge-label","description":"Enables the set_badge_label command without any pre-configured scope.","commands":{"allow":["set_badge_label"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-overlay-icon":{"identifier":"allow-set-overlay-icon","description":"Enables the set_overlay_icon command without any pre-configured scope.","commands":{"allow":["set_overlay_icon"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-theme":{"identifier":"allow-set-theme","description":"Enables the set_theme command without any pre-configured scope.","commands":{"allow":["set_theme"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-get-all-windows":{"identifier":"deny-get-all-windows","description":"Denies the get_all_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_windows"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-always-on-top":{"identifier":"deny-is-always-on-top","description":"Denies the is_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["is_always_on_top"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-background-color":{"identifier":"deny-set-background-color","description":"Denies the set_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_background_color"]}},"deny-set-badge-count":{"identifier":"deny-set-badge-count","description":"Denies the set_badge_count command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_count"]}},"deny-set-badge-label":{"identifier":"deny-set-badge-label","description":"Denies the set_badge_label command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_label"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-overlay-icon":{"identifier":"deny-set-overlay-icon","description":"Denies the set_overlay_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_overlay_icon"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-theme":{"identifier":"deny-set-theme","description":"Denies the set_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_theme"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"dialog":{"default_permission":{"identifier":"default","description":"This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n","permissions":["allow-ask","allow-confirm","allow-message","allow-save","allow-open"]},"permissions":{"allow-ask":{"identifier":"allow-ask","description":"Enables the ask command without any pre-configured scope.","commands":{"allow":["ask"],"deny":[]}},"allow-confirm":{"identifier":"allow-confirm","description":"Enables the confirm command without any pre-configured scope.","commands":{"allow":["confirm"],"deny":[]}},"allow-message":{"identifier":"allow-message","description":"Enables the message command without any pre-configured scope.","commands":{"allow":["message"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"deny-ask":{"identifier":"deny-ask","description":"Denies the ask command without any pre-configured scope.","commands":{"allow":[],"deny":["ask"]}},"deny-confirm":{"identifier":"deny-confirm","description":"Denies the confirm command without any pre-configured scope.","commands":{"allow":[],"deny":["confirm"]}},"deny-message":{"identifier":"deny-message","description":"Denies the message command without any pre-configured scope.","commands":{"allow":[],"deny":["message"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}}},"permission_sets":{},"global_scope_schema":null},"fs":{"default_permission":{"identifier":"default","description":"This set of permissions describes the what kind of\nfile system access the `fs` plugin has enabled or denied by default.\n\n#### Granted Permissions\n\nThis default permission set enables read access to the\napplication specific directories (AppConfig, AppData, AppLocalData, AppCache,\nAppLog) and all files and sub directories created in it.\nThe location of these directories depends on the operating system,\nwhere the application is run.\n\nIn general these directories need to be manually created\nby the application at runtime, before accessing files or folders\nin it is possible.\n\nTherefore, it is also allowed to create all of these folders via\nthe `mkdir` command.\n\n#### Denied Permissions\n\nThis default permission set prevents access to critical components\nof the Tauri application by default.\nOn Windows the webview data folder access is denied.\n","permissions":["create-app-specific-dirs","read-app-specific-dirs-recursive","deny-default"]},"permissions":{"allow-copy-file":{"identifier":"allow-copy-file","description":"Enables the copy_file command without any pre-configured scope.","commands":{"allow":["copy_file"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-exists":{"identifier":"allow-exists","description":"Enables the exists command without any pre-configured scope.","commands":{"allow":["exists"],"deny":[]}},"allow-fstat":{"identifier":"allow-fstat","description":"Enables the fstat command without any pre-configured scope.","commands":{"allow":["fstat"],"deny":[]}},"allow-ftruncate":{"identifier":"allow-ftruncate","description":"Enables the ftruncate command without any pre-configured scope.","commands":{"allow":["ftruncate"],"deny":[]}},"allow-lstat":{"identifier":"allow-lstat","description":"Enables the lstat command without any pre-configured scope.","commands":{"allow":["lstat"],"deny":[]}},"allow-mkdir":{"identifier":"allow-mkdir","description":"Enables the mkdir command without any pre-configured scope.","commands":{"allow":["mkdir"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-read":{"identifier":"allow-read","description":"Enables the read command without any pre-configured scope.","commands":{"allow":["read"],"deny":[]}},"allow-read-dir":{"identifier":"allow-read-dir","description":"Enables the read_dir command without any pre-configured scope.","commands":{"allow":["read_dir"],"deny":[]}},"allow-read-file":{"identifier":"allow-read-file","description":"Enables the read_file command without any pre-configured scope.","commands":{"allow":["read_file"],"deny":[]}},"allow-read-text-file":{"identifier":"allow-read-text-file","description":"Enables the read_text_file command without any pre-configured scope.","commands":{"allow":["read_text_file"],"deny":[]}},"allow-read-text-file-lines":{"identifier":"allow-read-text-file-lines","description":"Enables the read_text_file_lines command without any pre-configured scope.","commands":{"allow":["read_text_file_lines","read_text_file_lines_next"],"deny":[]}},"allow-read-text-file-lines-next":{"identifier":"allow-read-text-file-lines-next","description":"Enables the read_text_file_lines_next command without any pre-configured scope.","commands":{"allow":["read_text_file_lines_next"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-rename":{"identifier":"allow-rename","description":"Enables the rename command without any pre-configured scope.","commands":{"allow":["rename"],"deny":[]}},"allow-seek":{"identifier":"allow-seek","description":"Enables the seek command without any pre-configured scope.","commands":{"allow":["seek"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"allow-stat":{"identifier":"allow-stat","description":"Enables the stat command without any pre-configured scope.","commands":{"allow":["stat"],"deny":[]}},"allow-truncate":{"identifier":"allow-truncate","description":"Enables the truncate command without any pre-configured scope.","commands":{"allow":["truncate"],"deny":[]}},"allow-unwatch":{"identifier":"allow-unwatch","description":"Enables the unwatch command without any pre-configured scope.","commands":{"allow":["unwatch"],"deny":[]}},"allow-watch":{"identifier":"allow-watch","description":"Enables the watch command without any pre-configured scope.","commands":{"allow":["watch"],"deny":[]}},"allow-write":{"identifier":"allow-write","description":"Enables the write command without any pre-configured scope.","commands":{"allow":["write"],"deny":[]}},"allow-write-file":{"identifier":"allow-write-file","description":"Enables the write_file command without any pre-configured scope.","commands":{"allow":["write_file","open","write"],"deny":[]}},"allow-write-text-file":{"identifier":"allow-write-text-file","description":"Enables the write_text_file command without any pre-configured scope.","commands":{"allow":["write_text_file"],"deny":[]}},"create-app-specific-dirs":{"identifier":"create-app-specific-dirs","description":"This permissions allows to create the application specific directories.\n","commands":{"allow":["mkdir","scope-app-index"],"deny":[]}},"deny-copy-file":{"identifier":"deny-copy-file","description":"Denies the copy_file command without any pre-configured scope.","commands":{"allow":[],"deny":["copy_file"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-exists":{"identifier":"deny-exists","description":"Denies the exists command without any pre-configured scope.","commands":{"allow":[],"deny":["exists"]}},"deny-fstat":{"identifier":"deny-fstat","description":"Denies the fstat command without any pre-configured scope.","commands":{"allow":[],"deny":["fstat"]}},"deny-ftruncate":{"identifier":"deny-ftruncate","description":"Denies the ftruncate command without any pre-configured scope.","commands":{"allow":[],"deny":["ftruncate"]}},"deny-lstat":{"identifier":"deny-lstat","description":"Denies the lstat command without any pre-configured scope.","commands":{"allow":[],"deny":["lstat"]}},"deny-mkdir":{"identifier":"deny-mkdir","description":"Denies the mkdir command without any pre-configured scope.","commands":{"allow":[],"deny":["mkdir"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-read":{"identifier":"deny-read","description":"Denies the read command without any pre-configured scope.","commands":{"allow":[],"deny":["read"]}},"deny-read-dir":{"identifier":"deny-read-dir","description":"Denies the read_dir command without any pre-configured scope.","commands":{"allow":[],"deny":["read_dir"]}},"deny-read-file":{"identifier":"deny-read-file","description":"Denies the read_file command without any pre-configured scope.","commands":{"allow":[],"deny":["read_file"]}},"deny-read-text-file":{"identifier":"deny-read-text-file","description":"Denies the read_text_file command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file"]}},"deny-read-text-file-lines":{"identifier":"deny-read-text-file-lines","description":"Denies the read_text_file_lines command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file_lines"]}},"deny-read-text-file-lines-next":{"identifier":"deny-read-text-file-lines-next","description":"Denies the read_text_file_lines_next command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file_lines_next"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-rename":{"identifier":"deny-rename","description":"Denies the rename command without any pre-configured scope.","commands":{"allow":[],"deny":["rename"]}},"deny-seek":{"identifier":"deny-seek","description":"Denies the seek command without any pre-configured scope.","commands":{"allow":[],"deny":["seek"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}},"deny-stat":{"identifier":"deny-stat","description":"Denies the stat command without any pre-configured scope.","commands":{"allow":[],"deny":["stat"]}},"deny-truncate":{"identifier":"deny-truncate","description":"Denies the truncate command without any pre-configured scope.","commands":{"allow":[],"deny":["truncate"]}},"deny-unwatch":{"identifier":"deny-unwatch","description":"Denies the unwatch command without any pre-configured scope.","commands":{"allow":[],"deny":["unwatch"]}},"deny-watch":{"identifier":"deny-watch","description":"Denies the watch command without any pre-configured scope.","commands":{"allow":[],"deny":["watch"]}},"deny-webview-data-linux":{"identifier":"deny-webview-data-linux","description":"This denies read access to the\n`$APPLOCALDATA` folder on linux as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.","commands":{"allow":[],"deny":[]}},"deny-webview-data-windows":{"identifier":"deny-webview-data-windows","description":"This denies read access to the\n`$APPLOCALDATA/EBWebView` folder on windows as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.","commands":{"allow":[],"deny":[]}},"deny-write":{"identifier":"deny-write","description":"Denies the write command without any pre-configured scope.","commands":{"allow":[],"deny":["write"]}},"deny-write-file":{"identifier":"deny-write-file","description":"Denies the write_file command without any pre-configured scope.","commands":{"allow":[],"deny":["write_file"]}},"deny-write-text-file":{"identifier":"deny-write-text-file","description":"Denies the write_text_file command without any pre-configured scope.","commands":{"allow":[],"deny":["write_text_file"]}},"read-all":{"identifier":"read-all","description":"This enables all read related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","read_file","read","open","read_text_file","read_text_file_lines","read_text_file_lines_next","seek","stat","lstat","fstat","exists","watch","unwatch"],"deny":[]}},"read-app-specific-dirs-recursive":{"identifier":"read-app-specific-dirs-recursive","description":"This permission allows recursive read functionality on the application\nspecific base directories. \n","commands":{"allow":["read_dir","read_file","read_text_file","read_text_file_lines","read_text_file_lines_next","exists","scope-app-recursive"],"deny":[]}},"read-dirs":{"identifier":"read-dirs","description":"This enables directory read and file metadata related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","stat","lstat","fstat","exists"],"deny":[]}},"read-files":{"identifier":"read-files","description":"This enables file read related commands without any pre-configured accessible paths.","commands":{"allow":["read_file","read","open","read_text_file","read_text_file_lines","read_text_file_lines_next","seek","stat","lstat","fstat","exists"],"deny":[]}},"read-meta":{"identifier":"read-meta","description":"This enables all index or metadata related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","stat","lstat","fstat","exists","size"],"deny":[]}},"scope":{"identifier":"scope","description":"An empty permission you can use to modify the global scope.","commands":{"allow":[],"deny":[]}},"scope-app":{"identifier":"scope-app","description":"This scope permits access to all files and list content of top level directories in the application folders.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"},{"path":"$APPCONFIG/*"},{"path":"$APPDATA"},{"path":"$APPDATA/*"},{"path":"$APPLOCALDATA"},{"path":"$APPLOCALDATA/*"},{"path":"$APPCACHE"},{"path":"$APPCACHE/*"},{"path":"$APPLOG"},{"path":"$APPLOG/*"}]}},"scope-app-index":{"identifier":"scope-app-index","description":"This scope permits to list all files and folders in the application directories.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"},{"path":"$APPDATA"},{"path":"$APPLOCALDATA"},{"path":"$APPCACHE"},{"path":"$APPLOG"}]}},"scope-app-recursive":{"identifier":"scope-app-recursive","description":"This scope permits recursive access to the complete application folders, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"},{"path":"$APPCONFIG/**"},{"path":"$APPDATA"},{"path":"$APPDATA/**"},{"path":"$APPLOCALDATA"},{"path":"$APPLOCALDATA/**"},{"path":"$APPCACHE"},{"path":"$APPCACHE/**"},{"path":"$APPLOG"},{"path":"$APPLOG/**"}]}},"scope-appcache":{"identifier":"scope-appcache","description":"This scope permits access to all files and list content of top level directories in the `$APPCACHE` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE"},{"path":"$APPCACHE/*"}]}},"scope-appcache-index":{"identifier":"scope-appcache-index","description":"This scope permits to list all files and folders in the `$APPCACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE"}]}},"scope-appcache-recursive":{"identifier":"scope-appcache-recursive","description":"This scope permits recursive access to the complete `$APPCACHE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE"},{"path":"$APPCACHE/**"}]}},"scope-appconfig":{"identifier":"scope-appconfig","description":"This scope permits access to all files and list content of top level directories in the `$APPCONFIG` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"},{"path":"$APPCONFIG/*"}]}},"scope-appconfig-index":{"identifier":"scope-appconfig-index","description":"This scope permits to list all files and folders in the `$APPCONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"}]}},"scope-appconfig-recursive":{"identifier":"scope-appconfig-recursive","description":"This scope permits recursive access to the complete `$APPCONFIG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"},{"path":"$APPCONFIG/**"}]}},"scope-appdata":{"identifier":"scope-appdata","description":"This scope permits access to all files and list content of top level directories in the `$APPDATA` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA"},{"path":"$APPDATA/*"}]}},"scope-appdata-index":{"identifier":"scope-appdata-index","description":"This scope permits to list all files and folders in the `$APPDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA"}]}},"scope-appdata-recursive":{"identifier":"scope-appdata-recursive","description":"This scope permits recursive access to the complete `$APPDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA"},{"path":"$APPDATA/**"}]}},"scope-applocaldata":{"identifier":"scope-applocaldata","description":"This scope permits access to all files and list content of top level directories in the `$APPLOCALDATA` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA"},{"path":"$APPLOCALDATA/*"}]}},"scope-applocaldata-index":{"identifier":"scope-applocaldata-index","description":"This scope permits to list all files and folders in the `$APPLOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA"}]}},"scope-applocaldata-recursive":{"identifier":"scope-applocaldata-recursive","description":"This scope permits recursive access to the complete `$APPLOCALDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA"},{"path":"$APPLOCALDATA/**"}]}},"scope-applog":{"identifier":"scope-applog","description":"This scope permits access to all files and list content of top level directories in the `$APPLOG` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG"},{"path":"$APPLOG/*"}]}},"scope-applog-index":{"identifier":"scope-applog-index","description":"This scope permits to list all files and folders in the `$APPLOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG"}]}},"scope-applog-recursive":{"identifier":"scope-applog-recursive","description":"This scope permits recursive access to the complete `$APPLOG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG"},{"path":"$APPLOG/**"}]}},"scope-audio":{"identifier":"scope-audio","description":"This scope permits access to all files and list content of top level directories in the `$AUDIO` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO"},{"path":"$AUDIO/*"}]}},"scope-audio-index":{"identifier":"scope-audio-index","description":"This scope permits to list all files and folders in the `$AUDIO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO"}]}},"scope-audio-recursive":{"identifier":"scope-audio-recursive","description":"This scope permits recursive access to the complete `$AUDIO` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO"},{"path":"$AUDIO/**"}]}},"scope-cache":{"identifier":"scope-cache","description":"This scope permits access to all files and list content of top level directories in the `$CACHE` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE"},{"path":"$CACHE/*"}]}},"scope-cache-index":{"identifier":"scope-cache-index","description":"This scope permits to list all files and folders in the `$CACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE"}]}},"scope-cache-recursive":{"identifier":"scope-cache-recursive","description":"This scope permits recursive access to the complete `$CACHE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE"},{"path":"$CACHE/**"}]}},"scope-config":{"identifier":"scope-config","description":"This scope permits access to all files and list content of top level directories in the `$CONFIG` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG"},{"path":"$CONFIG/*"}]}},"scope-config-index":{"identifier":"scope-config-index","description":"This scope permits to list all files and folders in the `$CONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG"}]}},"scope-config-recursive":{"identifier":"scope-config-recursive","description":"This scope permits recursive access to the complete `$CONFIG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG"},{"path":"$CONFIG/**"}]}},"scope-data":{"identifier":"scope-data","description":"This scope permits access to all files and list content of top level directories in the `$DATA` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA"},{"path":"$DATA/*"}]}},"scope-data-index":{"identifier":"scope-data-index","description":"This scope permits to list all files and folders in the `$DATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA"}]}},"scope-data-recursive":{"identifier":"scope-data-recursive","description":"This scope permits recursive access to the complete `$DATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA"},{"path":"$DATA/**"}]}},"scope-desktop":{"identifier":"scope-desktop","description":"This scope permits access to all files and list content of top level directories in the `$DESKTOP` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP"},{"path":"$DESKTOP/*"}]}},"scope-desktop-index":{"identifier":"scope-desktop-index","description":"This scope permits to list all files and folders in the `$DESKTOP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP"}]}},"scope-desktop-recursive":{"identifier":"scope-desktop-recursive","description":"This scope permits recursive access to the complete `$DESKTOP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP"},{"path":"$DESKTOP/**"}]}},"scope-document":{"identifier":"scope-document","description":"This scope permits access to all files and list content of top level directories in the `$DOCUMENT` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT"},{"path":"$DOCUMENT/*"}]}},"scope-document-index":{"identifier":"scope-document-index","description":"This scope permits to list all files and folders in the `$DOCUMENT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT"}]}},"scope-document-recursive":{"identifier":"scope-document-recursive","description":"This scope permits recursive access to the complete `$DOCUMENT` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT"},{"path":"$DOCUMENT/**"}]}},"scope-download":{"identifier":"scope-download","description":"This scope permits access to all files and list content of top level directories in the `$DOWNLOAD` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD"},{"path":"$DOWNLOAD/*"}]}},"scope-download-index":{"identifier":"scope-download-index","description":"This scope permits to list all files and folders in the `$DOWNLOAD`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD"}]}},"scope-download-recursive":{"identifier":"scope-download-recursive","description":"This scope permits recursive access to the complete `$DOWNLOAD` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD"},{"path":"$DOWNLOAD/**"}]}},"scope-exe":{"identifier":"scope-exe","description":"This scope permits access to all files and list content of top level directories in the `$EXE` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE"},{"path":"$EXE/*"}]}},"scope-exe-index":{"identifier":"scope-exe-index","description":"This scope permits to list all files and folders in the `$EXE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE"}]}},"scope-exe-recursive":{"identifier":"scope-exe-recursive","description":"This scope permits recursive access to the complete `$EXE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE"},{"path":"$EXE/**"}]}},"scope-font":{"identifier":"scope-font","description":"This scope permits access to all files and list content of top level directories in the `$FONT` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT"},{"path":"$FONT/*"}]}},"scope-font-index":{"identifier":"scope-font-index","description":"This scope permits to list all files and folders in the `$FONT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT"}]}},"scope-font-recursive":{"identifier":"scope-font-recursive","description":"This scope permits recursive access to the complete `$FONT` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT"},{"path":"$FONT/**"}]}},"scope-home":{"identifier":"scope-home","description":"This scope permits access to all files and list content of top level directories in the `$HOME` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME"},{"path":"$HOME/*"}]}},"scope-home-index":{"identifier":"scope-home-index","description":"This scope permits to list all files and folders in the `$HOME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME"}]}},"scope-home-recursive":{"identifier":"scope-home-recursive","description":"This scope permits recursive access to the complete `$HOME` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME"},{"path":"$HOME/**"}]}},"scope-localdata":{"identifier":"scope-localdata","description":"This scope permits access to all files and list content of top level directories in the `$LOCALDATA` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA"},{"path":"$LOCALDATA/*"}]}},"scope-localdata-index":{"identifier":"scope-localdata-index","description":"This scope permits to list all files and folders in the `$LOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA"}]}},"scope-localdata-recursive":{"identifier":"scope-localdata-recursive","description":"This scope permits recursive access to the complete `$LOCALDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA"},{"path":"$LOCALDATA/**"}]}},"scope-log":{"identifier":"scope-log","description":"This scope permits access to all files and list content of top level directories in the `$LOG` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG"},{"path":"$LOG/*"}]}},"scope-log-index":{"identifier":"scope-log-index","description":"This scope permits to list all files and folders in the `$LOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG"}]}},"scope-log-recursive":{"identifier":"scope-log-recursive","description":"This scope permits recursive access to the complete `$LOG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG"},{"path":"$LOG/**"}]}},"scope-picture":{"identifier":"scope-picture","description":"This scope permits access to all files and list content of top level directories in the `$PICTURE` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE"},{"path":"$PICTURE/*"}]}},"scope-picture-index":{"identifier":"scope-picture-index","description":"This scope permits to list all files and folders in the `$PICTURE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE"}]}},"scope-picture-recursive":{"identifier":"scope-picture-recursive","description":"This scope permits recursive access to the complete `$PICTURE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE"},{"path":"$PICTURE/**"}]}},"scope-public":{"identifier":"scope-public","description":"This scope permits access to all files and list content of top level directories in the `$PUBLIC` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC"},{"path":"$PUBLIC/*"}]}},"scope-public-index":{"identifier":"scope-public-index","description":"This scope permits to list all files and folders in the `$PUBLIC`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC"}]}},"scope-public-recursive":{"identifier":"scope-public-recursive","description":"This scope permits recursive access to the complete `$PUBLIC` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC"},{"path":"$PUBLIC/**"}]}},"scope-resource":{"identifier":"scope-resource","description":"This scope permits access to all files and list content of top level directories in the `$RESOURCE` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE"},{"path":"$RESOURCE/*"}]}},"scope-resource-index":{"identifier":"scope-resource-index","description":"This scope permits to list all files and folders in the `$RESOURCE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE"}]}},"scope-resource-recursive":{"identifier":"scope-resource-recursive","description":"This scope permits recursive access to the complete `$RESOURCE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE"},{"path":"$RESOURCE/**"}]}},"scope-runtime":{"identifier":"scope-runtime","description":"This scope permits access to all files and list content of top level directories in the `$RUNTIME` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME"},{"path":"$RUNTIME/*"}]}},"scope-runtime-index":{"identifier":"scope-runtime-index","description":"This scope permits to list all files and folders in the `$RUNTIME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME"}]}},"scope-runtime-recursive":{"identifier":"scope-runtime-recursive","description":"This scope permits recursive access to the complete `$RUNTIME` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME"},{"path":"$RUNTIME/**"}]}},"scope-temp":{"identifier":"scope-temp","description":"This scope permits access to all files and list content of top level directories in the `$TEMP` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP"},{"path":"$TEMP/*"}]}},"scope-temp-index":{"identifier":"scope-temp-index","description":"This scope permits to list all files and folders in the `$TEMP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP"}]}},"scope-temp-recursive":{"identifier":"scope-temp-recursive","description":"This scope permits recursive access to the complete `$TEMP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP"},{"path":"$TEMP/**"}]}},"scope-template":{"identifier":"scope-template","description":"This scope permits access to all files and list content of top level directories in the `$TEMPLATE` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE"},{"path":"$TEMPLATE/*"}]}},"scope-template-index":{"identifier":"scope-template-index","description":"This scope permits to list all files and folders in the `$TEMPLATE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE"}]}},"scope-template-recursive":{"identifier":"scope-template-recursive","description":"This scope permits recursive access to the complete `$TEMPLATE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE"},{"path":"$TEMPLATE/**"}]}},"scope-video":{"identifier":"scope-video","description":"This scope permits access to all files and list content of top level directories in the `$VIDEO` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO"},{"path":"$VIDEO/*"}]}},"scope-video-index":{"identifier":"scope-video-index","description":"This scope permits to list all files and folders in the `$VIDEO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO"}]}},"scope-video-recursive":{"identifier":"scope-video-recursive","description":"This scope permits recursive access to the complete `$VIDEO` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO"},{"path":"$VIDEO/**"}]}},"write-all":{"identifier":"write-all","description":"This enables all write related commands without any pre-configured accessible paths.","commands":{"allow":["mkdir","create","copy_file","remove","rename","truncate","ftruncate","write","write_file","write_text_file"],"deny":[]}},"write-files":{"identifier":"write-files","description":"This enables all file write related commands without any pre-configured accessible paths.","commands":{"allow":["create","copy_file","remove","rename","truncate","ftruncate","write","write_file","write_text_file"],"deny":[]}}},"permission_sets":{"allow-app-meta":{"identifier":"allow-app-meta","description":"This allows non-recursive read access to metadata of the application folders, including file listing and statistics.","permissions":["read-meta","scope-app-index"]},"allow-app-meta-recursive":{"identifier":"allow-app-meta-recursive","description":"This allows full recursive read access to metadata of the application folders, including file listing and statistics.","permissions":["read-meta","scope-app-recursive"]},"allow-app-read":{"identifier":"allow-app-read","description":"This allows non-recursive read access to the application folders.","permissions":["read-all","scope-app"]},"allow-app-read-recursive":{"identifier":"allow-app-read-recursive","description":"This allows full recursive read access to the complete application folders, files and subdirectories.","permissions":["read-all","scope-app-recursive"]},"allow-app-write":{"identifier":"allow-app-write","description":"This allows non-recursive write access to the application folders.","permissions":["write-all","scope-app"]},"allow-app-write-recursive":{"identifier":"allow-app-write-recursive","description":"This allows full recursive write access to the complete application folders, files and subdirectories.","permissions":["write-all","scope-app-recursive"]},"allow-appcache-meta":{"identifier":"allow-appcache-meta","description":"This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-appcache-index"]},"allow-appcache-meta-recursive":{"identifier":"allow-appcache-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-appcache-recursive"]},"allow-appcache-read":{"identifier":"allow-appcache-read","description":"This allows non-recursive read access to the `$APPCACHE` folder.","permissions":["read-all","scope-appcache"]},"allow-appcache-read-recursive":{"identifier":"allow-appcache-read-recursive","description":"This allows full recursive read access to the complete `$APPCACHE` folder, files and subdirectories.","permissions":["read-all","scope-appcache-recursive"]},"allow-appcache-write":{"identifier":"allow-appcache-write","description":"This allows non-recursive write access to the `$APPCACHE` folder.","permissions":["write-all","scope-appcache"]},"allow-appcache-write-recursive":{"identifier":"allow-appcache-write-recursive","description":"This allows full recursive write access to the complete `$APPCACHE` folder, files and subdirectories.","permissions":["write-all","scope-appcache-recursive"]},"allow-appconfig-meta":{"identifier":"allow-appconfig-meta","description":"This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-appconfig-index"]},"allow-appconfig-meta-recursive":{"identifier":"allow-appconfig-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-appconfig-recursive"]},"allow-appconfig-read":{"identifier":"allow-appconfig-read","description":"This allows non-recursive read access to the `$APPCONFIG` folder.","permissions":["read-all","scope-appconfig"]},"allow-appconfig-read-recursive":{"identifier":"allow-appconfig-read-recursive","description":"This allows full recursive read access to the complete `$APPCONFIG` folder, files and subdirectories.","permissions":["read-all","scope-appconfig-recursive"]},"allow-appconfig-write":{"identifier":"allow-appconfig-write","description":"This allows non-recursive write access to the `$APPCONFIG` folder.","permissions":["write-all","scope-appconfig"]},"allow-appconfig-write-recursive":{"identifier":"allow-appconfig-write-recursive","description":"This allows full recursive write access to the complete `$APPCONFIG` folder, files and subdirectories.","permissions":["write-all","scope-appconfig-recursive"]},"allow-appdata-meta":{"identifier":"allow-appdata-meta","description":"This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-appdata-index"]},"allow-appdata-meta-recursive":{"identifier":"allow-appdata-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-appdata-recursive"]},"allow-appdata-read":{"identifier":"allow-appdata-read","description":"This allows non-recursive read access to the `$APPDATA` folder.","permissions":["read-all","scope-appdata"]},"allow-appdata-read-recursive":{"identifier":"allow-appdata-read-recursive","description":"This allows full recursive read access to the complete `$APPDATA` folder, files and subdirectories.","permissions":["read-all","scope-appdata-recursive"]},"allow-appdata-write":{"identifier":"allow-appdata-write","description":"This allows non-recursive write access to the `$APPDATA` folder.","permissions":["write-all","scope-appdata"]},"allow-appdata-write-recursive":{"identifier":"allow-appdata-write-recursive","description":"This allows full recursive write access to the complete `$APPDATA` folder, files and subdirectories.","permissions":["write-all","scope-appdata-recursive"]},"allow-applocaldata-meta":{"identifier":"allow-applocaldata-meta","description":"This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-applocaldata-index"]},"allow-applocaldata-meta-recursive":{"identifier":"allow-applocaldata-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-applocaldata-recursive"]},"allow-applocaldata-read":{"identifier":"allow-applocaldata-read","description":"This allows non-recursive read access to the `$APPLOCALDATA` folder.","permissions":["read-all","scope-applocaldata"]},"allow-applocaldata-read-recursive":{"identifier":"allow-applocaldata-read-recursive","description":"This allows full recursive read access to the complete `$APPLOCALDATA` folder, files and subdirectories.","permissions":["read-all","scope-applocaldata-recursive"]},"allow-applocaldata-write":{"identifier":"allow-applocaldata-write","description":"This allows non-recursive write access to the `$APPLOCALDATA` folder.","permissions":["write-all","scope-applocaldata"]},"allow-applocaldata-write-recursive":{"identifier":"allow-applocaldata-write-recursive","description":"This allows full recursive write access to the complete `$APPLOCALDATA` folder, files and subdirectories.","permissions":["write-all","scope-applocaldata-recursive"]},"allow-applog-meta":{"identifier":"allow-applog-meta","description":"This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.","permissions":["read-meta","scope-applog-index"]},"allow-applog-meta-recursive":{"identifier":"allow-applog-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.","permissions":["read-meta","scope-applog-recursive"]},"allow-applog-read":{"identifier":"allow-applog-read","description":"This allows non-recursive read access to the `$APPLOG` folder.","permissions":["read-all","scope-applog"]},"allow-applog-read-recursive":{"identifier":"allow-applog-read-recursive","description":"This allows full recursive read access to the complete `$APPLOG` folder, files and subdirectories.","permissions":["read-all","scope-applog-recursive"]},"allow-applog-write":{"identifier":"allow-applog-write","description":"This allows non-recursive write access to the `$APPLOG` folder.","permissions":["write-all","scope-applog"]},"allow-applog-write-recursive":{"identifier":"allow-applog-write-recursive","description":"This allows full recursive write access to the complete `$APPLOG` folder, files and subdirectories.","permissions":["write-all","scope-applog-recursive"]},"allow-audio-meta":{"identifier":"allow-audio-meta","description":"This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.","permissions":["read-meta","scope-audio-index"]},"allow-audio-meta-recursive":{"identifier":"allow-audio-meta-recursive","description":"This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.","permissions":["read-meta","scope-audio-recursive"]},"allow-audio-read":{"identifier":"allow-audio-read","description":"This allows non-recursive read access to the `$AUDIO` folder.","permissions":["read-all","scope-audio"]},"allow-audio-read-recursive":{"identifier":"allow-audio-read-recursive","description":"This allows full recursive read access to the complete `$AUDIO` folder, files and subdirectories.","permissions":["read-all","scope-audio-recursive"]},"allow-audio-write":{"identifier":"allow-audio-write","description":"This allows non-recursive write access to the `$AUDIO` folder.","permissions":["write-all","scope-audio"]},"allow-audio-write-recursive":{"identifier":"allow-audio-write-recursive","description":"This allows full recursive write access to the complete `$AUDIO` folder, files and subdirectories.","permissions":["write-all","scope-audio-recursive"]},"allow-cache-meta":{"identifier":"allow-cache-meta","description":"This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-cache-index"]},"allow-cache-meta-recursive":{"identifier":"allow-cache-meta-recursive","description":"This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-cache-recursive"]},"allow-cache-read":{"identifier":"allow-cache-read","description":"This allows non-recursive read access to the `$CACHE` folder.","permissions":["read-all","scope-cache"]},"allow-cache-read-recursive":{"identifier":"allow-cache-read-recursive","description":"This allows full recursive read access to the complete `$CACHE` folder, files and subdirectories.","permissions":["read-all","scope-cache-recursive"]},"allow-cache-write":{"identifier":"allow-cache-write","description":"This allows non-recursive write access to the `$CACHE` folder.","permissions":["write-all","scope-cache"]},"allow-cache-write-recursive":{"identifier":"allow-cache-write-recursive","description":"This allows full recursive write access to the complete `$CACHE` folder, files and subdirectories.","permissions":["write-all","scope-cache-recursive"]},"allow-config-meta":{"identifier":"allow-config-meta","description":"This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-config-index"]},"allow-config-meta-recursive":{"identifier":"allow-config-meta-recursive","description":"This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-config-recursive"]},"allow-config-read":{"identifier":"allow-config-read","description":"This allows non-recursive read access to the `$CONFIG` folder.","permissions":["read-all","scope-config"]},"allow-config-read-recursive":{"identifier":"allow-config-read-recursive","description":"This allows full recursive read access to the complete `$CONFIG` folder, files and subdirectories.","permissions":["read-all","scope-config-recursive"]},"allow-config-write":{"identifier":"allow-config-write","description":"This allows non-recursive write access to the `$CONFIG` folder.","permissions":["write-all","scope-config"]},"allow-config-write-recursive":{"identifier":"allow-config-write-recursive","description":"This allows full recursive write access to the complete `$CONFIG` folder, files and subdirectories.","permissions":["write-all","scope-config-recursive"]},"allow-data-meta":{"identifier":"allow-data-meta","description":"This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.","permissions":["read-meta","scope-data-index"]},"allow-data-meta-recursive":{"identifier":"allow-data-meta-recursive","description":"This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.","permissions":["read-meta","scope-data-recursive"]},"allow-data-read":{"identifier":"allow-data-read","description":"This allows non-recursive read access to the `$DATA` folder.","permissions":["read-all","scope-data"]},"allow-data-read-recursive":{"identifier":"allow-data-read-recursive","description":"This allows full recursive read access to the complete `$DATA` folder, files and subdirectories.","permissions":["read-all","scope-data-recursive"]},"allow-data-write":{"identifier":"allow-data-write","description":"This allows non-recursive write access to the `$DATA` folder.","permissions":["write-all","scope-data"]},"allow-data-write-recursive":{"identifier":"allow-data-write-recursive","description":"This allows full recursive write access to the complete `$DATA` folder, files and subdirectories.","permissions":["write-all","scope-data-recursive"]},"allow-desktop-meta":{"identifier":"allow-desktop-meta","description":"This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.","permissions":["read-meta","scope-desktop-index"]},"allow-desktop-meta-recursive":{"identifier":"allow-desktop-meta-recursive","description":"This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.","permissions":["read-meta","scope-desktop-recursive"]},"allow-desktop-read":{"identifier":"allow-desktop-read","description":"This allows non-recursive read access to the `$DESKTOP` folder.","permissions":["read-all","scope-desktop"]},"allow-desktop-read-recursive":{"identifier":"allow-desktop-read-recursive","description":"This allows full recursive read access to the complete `$DESKTOP` folder, files and subdirectories.","permissions":["read-all","scope-desktop-recursive"]},"allow-desktop-write":{"identifier":"allow-desktop-write","description":"This allows non-recursive write access to the `$DESKTOP` folder.","permissions":["write-all","scope-desktop"]},"allow-desktop-write-recursive":{"identifier":"allow-desktop-write-recursive","description":"This allows full recursive write access to the complete `$DESKTOP` folder, files and subdirectories.","permissions":["write-all","scope-desktop-recursive"]},"allow-document-meta":{"identifier":"allow-document-meta","description":"This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.","permissions":["read-meta","scope-document-index"]},"allow-document-meta-recursive":{"identifier":"allow-document-meta-recursive","description":"This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.","permissions":["read-meta","scope-document-recursive"]},"allow-document-read":{"identifier":"allow-document-read","description":"This allows non-recursive read access to the `$DOCUMENT` folder.","permissions":["read-all","scope-document"]},"allow-document-read-recursive":{"identifier":"allow-document-read-recursive","description":"This allows full recursive read access to the complete `$DOCUMENT` folder, files and subdirectories.","permissions":["read-all","scope-document-recursive"]},"allow-document-write":{"identifier":"allow-document-write","description":"This allows non-recursive write access to the `$DOCUMENT` folder.","permissions":["write-all","scope-document"]},"allow-document-write-recursive":{"identifier":"allow-document-write-recursive","description":"This allows full recursive write access to the complete `$DOCUMENT` folder, files and subdirectories.","permissions":["write-all","scope-document-recursive"]},"allow-download-meta":{"identifier":"allow-download-meta","description":"This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.","permissions":["read-meta","scope-download-index"]},"allow-download-meta-recursive":{"identifier":"allow-download-meta-recursive","description":"This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.","permissions":["read-meta","scope-download-recursive"]},"allow-download-read":{"identifier":"allow-download-read","description":"This allows non-recursive read access to the `$DOWNLOAD` folder.","permissions":["read-all","scope-download"]},"allow-download-read-recursive":{"identifier":"allow-download-read-recursive","description":"This allows full recursive read access to the complete `$DOWNLOAD` folder, files and subdirectories.","permissions":["read-all","scope-download-recursive"]},"allow-download-write":{"identifier":"allow-download-write","description":"This allows non-recursive write access to the `$DOWNLOAD` folder.","permissions":["write-all","scope-download"]},"allow-download-write-recursive":{"identifier":"allow-download-write-recursive","description":"This allows full recursive write access to the complete `$DOWNLOAD` folder, files and subdirectories.","permissions":["write-all","scope-download-recursive"]},"allow-exe-meta":{"identifier":"allow-exe-meta","description":"This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.","permissions":["read-meta","scope-exe-index"]},"allow-exe-meta-recursive":{"identifier":"allow-exe-meta-recursive","description":"This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.","permissions":["read-meta","scope-exe-recursive"]},"allow-exe-read":{"identifier":"allow-exe-read","description":"This allows non-recursive read access to the `$EXE` folder.","permissions":["read-all","scope-exe"]},"allow-exe-read-recursive":{"identifier":"allow-exe-read-recursive","description":"This allows full recursive read access to the complete `$EXE` folder, files and subdirectories.","permissions":["read-all","scope-exe-recursive"]},"allow-exe-write":{"identifier":"allow-exe-write","description":"This allows non-recursive write access to the `$EXE` folder.","permissions":["write-all","scope-exe"]},"allow-exe-write-recursive":{"identifier":"allow-exe-write-recursive","description":"This allows full recursive write access to the complete `$EXE` folder, files and subdirectories.","permissions":["write-all","scope-exe-recursive"]},"allow-font-meta":{"identifier":"allow-font-meta","description":"This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.","permissions":["read-meta","scope-font-index"]},"allow-font-meta-recursive":{"identifier":"allow-font-meta-recursive","description":"This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.","permissions":["read-meta","scope-font-recursive"]},"allow-font-read":{"identifier":"allow-font-read","description":"This allows non-recursive read access to the `$FONT` folder.","permissions":["read-all","scope-font"]},"allow-font-read-recursive":{"identifier":"allow-font-read-recursive","description":"This allows full recursive read access to the complete `$FONT` folder, files and subdirectories.","permissions":["read-all","scope-font-recursive"]},"allow-font-write":{"identifier":"allow-font-write","description":"This allows non-recursive write access to the `$FONT` folder.","permissions":["write-all","scope-font"]},"allow-font-write-recursive":{"identifier":"allow-font-write-recursive","description":"This allows full recursive write access to the complete `$FONT` folder, files and subdirectories.","permissions":["write-all","scope-font-recursive"]},"allow-home-meta":{"identifier":"allow-home-meta","description":"This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.","permissions":["read-meta","scope-home-index"]},"allow-home-meta-recursive":{"identifier":"allow-home-meta-recursive","description":"This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.","permissions":["read-meta","scope-home-recursive"]},"allow-home-read":{"identifier":"allow-home-read","description":"This allows non-recursive read access to the `$HOME` folder.","permissions":["read-all","scope-home"]},"allow-home-read-recursive":{"identifier":"allow-home-read-recursive","description":"This allows full recursive read access to the complete `$HOME` folder, files and subdirectories.","permissions":["read-all","scope-home-recursive"]},"allow-home-write":{"identifier":"allow-home-write","description":"This allows non-recursive write access to the `$HOME` folder.","permissions":["write-all","scope-home"]},"allow-home-write-recursive":{"identifier":"allow-home-write-recursive","description":"This allows full recursive write access to the complete `$HOME` folder, files and subdirectories.","permissions":["write-all","scope-home-recursive"]},"allow-localdata-meta":{"identifier":"allow-localdata-meta","description":"This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-localdata-index"]},"allow-localdata-meta-recursive":{"identifier":"allow-localdata-meta-recursive","description":"This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-localdata-recursive"]},"allow-localdata-read":{"identifier":"allow-localdata-read","description":"This allows non-recursive read access to the `$LOCALDATA` folder.","permissions":["read-all","scope-localdata"]},"allow-localdata-read-recursive":{"identifier":"allow-localdata-read-recursive","description":"This allows full recursive read access to the complete `$LOCALDATA` folder, files and subdirectories.","permissions":["read-all","scope-localdata-recursive"]},"allow-localdata-write":{"identifier":"allow-localdata-write","description":"This allows non-recursive write access to the `$LOCALDATA` folder.","permissions":["write-all","scope-localdata"]},"allow-localdata-write-recursive":{"identifier":"allow-localdata-write-recursive","description":"This allows full recursive write access to the complete `$LOCALDATA` folder, files and subdirectories.","permissions":["write-all","scope-localdata-recursive"]},"allow-log-meta":{"identifier":"allow-log-meta","description":"This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.","permissions":["read-meta","scope-log-index"]},"allow-log-meta-recursive":{"identifier":"allow-log-meta-recursive","description":"This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.","permissions":["read-meta","scope-log-recursive"]},"allow-log-read":{"identifier":"allow-log-read","description":"This allows non-recursive read access to the `$LOG` folder.","permissions":["read-all","scope-log"]},"allow-log-read-recursive":{"identifier":"allow-log-read-recursive","description":"This allows full recursive read access to the complete `$LOG` folder, files and subdirectories.","permissions":["read-all","scope-log-recursive"]},"allow-log-write":{"identifier":"allow-log-write","description":"This allows non-recursive write access to the `$LOG` folder.","permissions":["write-all","scope-log"]},"allow-log-write-recursive":{"identifier":"allow-log-write-recursive","description":"This allows full recursive write access to the complete `$LOG` folder, files and subdirectories.","permissions":["write-all","scope-log-recursive"]},"allow-picture-meta":{"identifier":"allow-picture-meta","description":"This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.","permissions":["read-meta","scope-picture-index"]},"allow-picture-meta-recursive":{"identifier":"allow-picture-meta-recursive","description":"This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.","permissions":["read-meta","scope-picture-recursive"]},"allow-picture-read":{"identifier":"allow-picture-read","description":"This allows non-recursive read access to the `$PICTURE` folder.","permissions":["read-all","scope-picture"]},"allow-picture-read-recursive":{"identifier":"allow-picture-read-recursive","description":"This allows full recursive read access to the complete `$PICTURE` folder, files and subdirectories.","permissions":["read-all","scope-picture-recursive"]},"allow-picture-write":{"identifier":"allow-picture-write","description":"This allows non-recursive write access to the `$PICTURE` folder.","permissions":["write-all","scope-picture"]},"allow-picture-write-recursive":{"identifier":"allow-picture-write-recursive","description":"This allows full recursive write access to the complete `$PICTURE` folder, files and subdirectories.","permissions":["write-all","scope-picture-recursive"]},"allow-public-meta":{"identifier":"allow-public-meta","description":"This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.","permissions":["read-meta","scope-public-index"]},"allow-public-meta-recursive":{"identifier":"allow-public-meta-recursive","description":"This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.","permissions":["read-meta","scope-public-recursive"]},"allow-public-read":{"identifier":"allow-public-read","description":"This allows non-recursive read access to the `$PUBLIC` folder.","permissions":["read-all","scope-public"]},"allow-public-read-recursive":{"identifier":"allow-public-read-recursive","description":"This allows full recursive read access to the complete `$PUBLIC` folder, files and subdirectories.","permissions":["read-all","scope-public-recursive"]},"allow-public-write":{"identifier":"allow-public-write","description":"This allows non-recursive write access to the `$PUBLIC` folder.","permissions":["write-all","scope-public"]},"allow-public-write-recursive":{"identifier":"allow-public-write-recursive","description":"This allows full recursive write access to the complete `$PUBLIC` folder, files and subdirectories.","permissions":["write-all","scope-public-recursive"]},"allow-resource-meta":{"identifier":"allow-resource-meta","description":"This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.","permissions":["read-meta","scope-resource-index"]},"allow-resource-meta-recursive":{"identifier":"allow-resource-meta-recursive","description":"This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.","permissions":["read-meta","scope-resource-recursive"]},"allow-resource-read":{"identifier":"allow-resource-read","description":"This allows non-recursive read access to the `$RESOURCE` folder.","permissions":["read-all","scope-resource"]},"allow-resource-read-recursive":{"identifier":"allow-resource-read-recursive","description":"This allows full recursive read access to the complete `$RESOURCE` folder, files and subdirectories.","permissions":["read-all","scope-resource-recursive"]},"allow-resource-write":{"identifier":"allow-resource-write","description":"This allows non-recursive write access to the `$RESOURCE` folder.","permissions":["write-all","scope-resource"]},"allow-resource-write-recursive":{"identifier":"allow-resource-write-recursive","description":"This allows full recursive write access to the complete `$RESOURCE` folder, files and subdirectories.","permissions":["write-all","scope-resource-recursive"]},"allow-runtime-meta":{"identifier":"allow-runtime-meta","description":"This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.","permissions":["read-meta","scope-runtime-index"]},"allow-runtime-meta-recursive":{"identifier":"allow-runtime-meta-recursive","description":"This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.","permissions":["read-meta","scope-runtime-recursive"]},"allow-runtime-read":{"identifier":"allow-runtime-read","description":"This allows non-recursive read access to the `$RUNTIME` folder.","permissions":["read-all","scope-runtime"]},"allow-runtime-read-recursive":{"identifier":"allow-runtime-read-recursive","description":"This allows full recursive read access to the complete `$RUNTIME` folder, files and subdirectories.","permissions":["read-all","scope-runtime-recursive"]},"allow-runtime-write":{"identifier":"allow-runtime-write","description":"This allows non-recursive write access to the `$RUNTIME` folder.","permissions":["write-all","scope-runtime"]},"allow-runtime-write-recursive":{"identifier":"allow-runtime-write-recursive","description":"This allows full recursive write access to the complete `$RUNTIME` folder, files and subdirectories.","permissions":["write-all","scope-runtime-recursive"]},"allow-temp-meta":{"identifier":"allow-temp-meta","description":"This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.","permissions":["read-meta","scope-temp-index"]},"allow-temp-meta-recursive":{"identifier":"allow-temp-meta-recursive","description":"This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.","permissions":["read-meta","scope-temp-recursive"]},"allow-temp-read":{"identifier":"allow-temp-read","description":"This allows non-recursive read access to the `$TEMP` folder.","permissions":["read-all","scope-temp"]},"allow-temp-read-recursive":{"identifier":"allow-temp-read-recursive","description":"This allows full recursive read access to the complete `$TEMP` folder, files and subdirectories.","permissions":["read-all","scope-temp-recursive"]},"allow-temp-write":{"identifier":"allow-temp-write","description":"This allows non-recursive write access to the `$TEMP` folder.","permissions":["write-all","scope-temp"]},"allow-temp-write-recursive":{"identifier":"allow-temp-write-recursive","description":"This allows full recursive write access to the complete `$TEMP` folder, files and subdirectories.","permissions":["write-all","scope-temp-recursive"]},"allow-template-meta":{"identifier":"allow-template-meta","description":"This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.","permissions":["read-meta","scope-template-index"]},"allow-template-meta-recursive":{"identifier":"allow-template-meta-recursive","description":"This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.","permissions":["read-meta","scope-template-recursive"]},"allow-template-read":{"identifier":"allow-template-read","description":"This allows non-recursive read access to the `$TEMPLATE` folder.","permissions":["read-all","scope-template"]},"allow-template-read-recursive":{"identifier":"allow-template-read-recursive","description":"This allows full recursive read access to the complete `$TEMPLATE` folder, files and subdirectories.","permissions":["read-all","scope-template-recursive"]},"allow-template-write":{"identifier":"allow-template-write","description":"This allows non-recursive write access to the `$TEMPLATE` folder.","permissions":["write-all","scope-template"]},"allow-template-write-recursive":{"identifier":"allow-template-write-recursive","description":"This allows full recursive write access to the complete `$TEMPLATE` folder, files and subdirectories.","permissions":["write-all","scope-template-recursive"]},"allow-video-meta":{"identifier":"allow-video-meta","description":"This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.","permissions":["read-meta","scope-video-index"]},"allow-video-meta-recursive":{"identifier":"allow-video-meta-recursive","description":"This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.","permissions":["read-meta","scope-video-recursive"]},"allow-video-read":{"identifier":"allow-video-read","description":"This allows non-recursive read access to the `$VIDEO` folder.","permissions":["read-all","scope-video"]},"allow-video-read-recursive":{"identifier":"allow-video-read-recursive","description":"This allows full recursive read access to the complete `$VIDEO` folder, files and subdirectories.","permissions":["read-all","scope-video-recursive"]},"allow-video-write":{"identifier":"allow-video-write","description":"This allows non-recursive write access to the `$VIDEO` folder.","permissions":["write-all","scope-video"]},"allow-video-write-recursive":{"identifier":"allow-video-write-recursive","description":"This allows full recursive write access to the complete `$VIDEO` folder, files and subdirectories.","permissions":["write-all","scope-video-recursive"]},"deny-default":{"identifier":"deny-default","description":"This denies access to dangerous Tauri relevant files and folders by default.","permissions":["deny-webview-data-linux","deny-webview-data-windows"]}},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"A path that can be accessed by the webview when using the fs APIs. FS scope path pattern.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},{"properties":{"path":{"description":"A path that can be accessed by the webview when using the fs APIs.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"}},"required":["path"],"type":"object"}],"description":"FS scope entry.","title":"FsScopeEntry"}},"opener":{"default_permission":{"identifier":"default","description":"This permission set allows opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application\nas well as reveal file in directories using default file explorer","permissions":["allow-open-url","allow-reveal-item-in-dir","allow-default-urls"]},"permissions":{"allow-default-urls":{"identifier":"allow-default-urls","description":"This enables opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"url":"mailto:*"},{"url":"tel:*"},{"url":"http://*"},{"url":"https://*"}]}},"allow-open-path":{"identifier":"allow-open-path","description":"Enables the open_path command without any pre-configured scope.","commands":{"allow":["open_path"],"deny":[]}},"allow-open-url":{"identifier":"allow-open-url","description":"Enables the open_url command without any pre-configured scope.","commands":{"allow":["open_url"],"deny":[]}},"allow-reveal-item-in-dir":{"identifier":"allow-reveal-item-in-dir","description":"Enables the reveal_item_in_dir command without any pre-configured scope.","commands":{"allow":["reveal_item_in_dir"],"deny":[]}},"deny-open-path":{"identifier":"deny-open-path","description":"Denies the open_path command without any pre-configured scope.","commands":{"allow":[],"deny":["open_path"]}},"deny-open-url":{"identifier":"deny-open-url","description":"Denies the open_url command without any pre-configured scope.","commands":{"allow":[],"deny":["open_url"]}},"deny-reveal-item-in-dir":{"identifier":"deny-reveal-item-in-dir","description":"Denies the reveal_item_in_dir command without any pre-configured scope.","commands":{"allow":[],"deny":["reveal_item_in_dir"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"properties":{"app":{"allOf":[{"$ref":"#/definitions/Application"}],"description":"An application to open this url with, for example: firefox."},"url":{"description":"A URL that can be opened by the webview when using the Opener APIs.\n\nWildcards can be used following the UNIX glob pattern.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"}},"required":["url"],"type":"object"},{"properties":{"app":{"allOf":[{"$ref":"#/definitions/Application"}],"description":"An application to open this path with, for example: xdg-open."},"path":{"description":"A path that can be opened by the webview when using the Opener APIs.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"}},"required":["path"],"type":"object"}],"definitions":{"Application":{"anyOf":[{"description":"Open in default application.","type":"null"},{"description":"If true, allow open with any application.","type":"boolean"},{"description":"Allow specific application to open with.","type":"string"}],"description":"Opener scope application."}},"description":"Opener scope entry.","title":"OpenerScopeEntry"}},"process":{"default_permission":{"identifier":"default","description":"This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n","permissions":["allow-exit","allow-restart"]},"permissions":{"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-restart":{"identifier":"allow-restart","description":"Enables the restart command without any pre-configured scope.","commands":{"allow":["restart"],"deny":[]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-restart":{"identifier":"deny-restart","description":"Denies the restart command without any pre-configured scope.","commands":{"allow":[],"deny":["restart"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file +{"clipboard-manager":{"default_permission":{"identifier":"default","description":"No features are enabled by default, as we believe\nthe clipboard can be inherently dangerous and it is \napplication specific if read and/or write access is needed.\n\nClipboard interaction needs to be explicitly enabled.\n","permissions":[]},"permissions":{"allow-clear":{"identifier":"allow-clear","description":"Enables the clear command without any pre-configured scope.","commands":{"allow":["clear"],"deny":[]}},"allow-read-image":{"identifier":"allow-read-image","description":"Enables the read_image command without any pre-configured scope.","commands":{"allow":["read_image"],"deny":[]}},"allow-read-text":{"identifier":"allow-read-text","description":"Enables the read_text command without any pre-configured scope.","commands":{"allow":["read_text"],"deny":[]}},"allow-write-html":{"identifier":"allow-write-html","description":"Enables the write_html command without any pre-configured scope.","commands":{"allow":["write_html"],"deny":[]}},"allow-write-image":{"identifier":"allow-write-image","description":"Enables the write_image command without any pre-configured scope.","commands":{"allow":["write_image"],"deny":[]}},"allow-write-text":{"identifier":"allow-write-text","description":"Enables the write_text command without any pre-configured scope.","commands":{"allow":["write_text"],"deny":[]}},"deny-clear":{"identifier":"deny-clear","description":"Denies the clear command without any pre-configured scope.","commands":{"allow":[],"deny":["clear"]}},"deny-read-image":{"identifier":"deny-read-image","description":"Denies the read_image command without any pre-configured scope.","commands":{"allow":[],"deny":["read_image"]}},"deny-read-text":{"identifier":"deny-read-text","description":"Denies the read_text command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text"]}},"deny-write-html":{"identifier":"deny-write-html","description":"Denies the write_html command without any pre-configured scope.","commands":{"allow":[],"deny":["write_html"]}},"deny-write-image":{"identifier":"deny-write-image","description":"Denies the write_image command without any pre-configured scope.","commands":{"allow":[],"deny":["write_image"]}},"deny-write-text":{"identifier":"deny-write-text","description":"Denies the write_text command without any pre-configured scope.","commands":{"allow":[],"deny":["write_text"]}}},"permission_sets":{},"global_scope_schema":null},"core":{"default_permission":{"identifier":"default","description":"Default core plugins set.","permissions":["core:path:default","core:event:default","core:window:default","core:webview:default","core:app:default","core:image:default","core:resources:default","core:menu:default","core:tray:default"]},"permissions":{},"permission_sets":{},"global_scope_schema":null},"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version","allow-identifier","allow-bundle-type"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-bundle-type":{"identifier":"allow-bundle-type","description":"Enables the bundle_type command without any pre-configured scope.","commands":{"allow":["bundle_type"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-fetch-data-store-identifiers":{"identifier":"allow-fetch-data-store-identifiers","description":"Enables the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":["fetch_data_store_identifiers"],"deny":[]}},"allow-identifier":{"identifier":"allow-identifier","description":"Enables the identifier command without any pre-configured scope.","commands":{"allow":["identifier"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-remove-data-store":{"identifier":"allow-remove-data-store","description":"Enables the remove_data_store command without any pre-configured scope.","commands":{"allow":["remove_data_store"],"deny":[]}},"allow-set-app-theme":{"identifier":"allow-set-app-theme","description":"Enables the set_app_theme command without any pre-configured scope.","commands":{"allow":["set_app_theme"],"deny":[]}},"allow-set-dock-visibility":{"identifier":"allow-set-dock-visibility","description":"Enables the set_dock_visibility command without any pre-configured scope.","commands":{"allow":["set_dock_visibility"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-bundle-type":{"identifier":"deny-bundle-type","description":"Denies the bundle_type command without any pre-configured scope.","commands":{"allow":[],"deny":["bundle_type"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-fetch-data-store-identifiers":{"identifier":"deny-fetch-data-store-identifiers","description":"Denies the fetch_data_store_identifiers command without any pre-configured scope.","commands":{"allow":[],"deny":["fetch_data_store_identifiers"]}},"deny-identifier":{"identifier":"deny-identifier","description":"Denies the identifier command without any pre-configured scope.","commands":{"allow":[],"deny":["identifier"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-remove-data-store":{"identifier":"deny-remove-data-store","description":"Denies the remove_data_store command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_data_store"]}},"deny-set-app-theme":{"identifier":"deny-set-app-theme","description":"Denies the set_app_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_app_theme"]}},"deny-set-dock-visibility":{"identifier":"deny-set-dock-visibility","description":"Denies the set_dock_visibility command without any pre-configured scope.","commands":{"allow":[],"deny":["set_dock_visibility"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin, which enables all commands.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-webviews","allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-clear-all-browsing-data":{"identifier":"allow-clear-all-browsing-data","description":"Enables the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":["clear_all_browsing_data"],"deny":[]}},"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-get-all-webviews":{"identifier":"allow-get-all-webviews","description":"Enables the get_all_webviews command without any pre-configured scope.","commands":{"allow":["get_all_webviews"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-auto-resize":{"identifier":"allow-set-webview-auto-resize","description":"Enables the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":["set_webview_auto_resize"],"deny":[]}},"allow-set-webview-background-color":{"identifier":"allow-set-webview-background-color","description":"Enables the set_webview_background_color command without any pre-configured scope.","commands":{"allow":["set_webview_background_color"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-hide":{"identifier":"allow-webview-hide","description":"Enables the webview_hide command without any pre-configured scope.","commands":{"allow":["webview_hide"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-show":{"identifier":"allow-webview-show","description":"Enables the webview_show command without any pre-configured scope.","commands":{"allow":["webview_show"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-clear-all-browsing-data":{"identifier":"deny-clear-all-browsing-data","description":"Denies the clear_all_browsing_data command without any pre-configured scope.","commands":{"allow":[],"deny":["clear_all_browsing_data"]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-get-all-webviews":{"identifier":"deny-get-all-webviews","description":"Denies the get_all_webviews command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_webviews"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-auto-resize":{"identifier":"deny-set-webview-auto-resize","description":"Denies the set_webview_auto_resize command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_auto_resize"]}},"deny-set-webview-background-color":{"identifier":"deny-set-webview-background-color","description":"Denies the set_webview_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_background_color"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-hide":{"identifier":"deny-webview-hide","description":"Denies the webview_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_hide"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-show":{"identifier":"deny-webview-show","description":"Denies the webview_show command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_show"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-windows","allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-is-enabled","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-is-always-on-top","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-get-all-windows":{"identifier":"allow-get-all-windows","description":"Enables the get_all_windows command without any pre-configured scope.","commands":{"allow":["get_all_windows"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-always-on-top":{"identifier":"allow-is-always-on-top","description":"Enables the is_always_on_top command without any pre-configured scope.","commands":{"allow":["is_always_on_top"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-background-color":{"identifier":"allow-set-background-color","description":"Enables the set_background_color command without any pre-configured scope.","commands":{"allow":["set_background_color"],"deny":[]}},"allow-set-badge-count":{"identifier":"allow-set-badge-count","description":"Enables the set_badge_count command without any pre-configured scope.","commands":{"allow":["set_badge_count"],"deny":[]}},"allow-set-badge-label":{"identifier":"allow-set-badge-label","description":"Enables the set_badge_label command without any pre-configured scope.","commands":{"allow":["set_badge_label"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-focusable":{"identifier":"allow-set-focusable","description":"Enables the set_focusable command without any pre-configured scope.","commands":{"allow":["set_focusable"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-overlay-icon":{"identifier":"allow-set-overlay-icon","description":"Enables the set_overlay_icon command without any pre-configured scope.","commands":{"allow":["set_overlay_icon"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-simple-fullscreen":{"identifier":"allow-set-simple-fullscreen","description":"Enables the set_simple_fullscreen command without any pre-configured scope.","commands":{"allow":["set_simple_fullscreen"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-theme":{"identifier":"allow-set-theme","description":"Enables the set_theme command without any pre-configured scope.","commands":{"allow":["set_theme"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-get-all-windows":{"identifier":"deny-get-all-windows","description":"Denies the get_all_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_windows"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-always-on-top":{"identifier":"deny-is-always-on-top","description":"Denies the is_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["is_always_on_top"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-background-color":{"identifier":"deny-set-background-color","description":"Denies the set_background_color command without any pre-configured scope.","commands":{"allow":[],"deny":["set_background_color"]}},"deny-set-badge-count":{"identifier":"deny-set-badge-count","description":"Denies the set_badge_count command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_count"]}},"deny-set-badge-label":{"identifier":"deny-set-badge-label","description":"Denies the set_badge_label command without any pre-configured scope.","commands":{"allow":[],"deny":["set_badge_label"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-focusable":{"identifier":"deny-set-focusable","description":"Denies the set_focusable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focusable"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-overlay-icon":{"identifier":"deny-set-overlay-icon","description":"Denies the set_overlay_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_overlay_icon"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-simple-fullscreen":{"identifier":"deny-set-simple-fullscreen","description":"Denies the set_simple_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_simple_fullscreen"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-theme":{"identifier":"deny-set-theme","description":"Denies the set_theme command without any pre-configured scope.","commands":{"allow":[],"deny":["set_theme"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"dialog":{"default_permission":{"identifier":"default","description":"This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n","permissions":["allow-ask","allow-confirm","allow-message","allow-save","allow-open"]},"permissions":{"allow-ask":{"identifier":"allow-ask","description":"Enables the ask command without any pre-configured scope.","commands":{"allow":["ask"],"deny":[]}},"allow-confirm":{"identifier":"allow-confirm","description":"Enables the confirm command without any pre-configured scope.","commands":{"allow":["confirm"],"deny":[]}},"allow-message":{"identifier":"allow-message","description":"Enables the message command without any pre-configured scope.","commands":{"allow":["message"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"deny-ask":{"identifier":"deny-ask","description":"Denies the ask command without any pre-configured scope.","commands":{"allow":[],"deny":["ask"]}},"deny-confirm":{"identifier":"deny-confirm","description":"Denies the confirm command without any pre-configured scope.","commands":{"allow":[],"deny":["confirm"]}},"deny-message":{"identifier":"deny-message","description":"Denies the message command without any pre-configured scope.","commands":{"allow":[],"deny":["message"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}}},"permission_sets":{},"global_scope_schema":null},"fs":{"default_permission":{"identifier":"default","description":"This set of permissions describes the what kind of\nfile system access the `fs` plugin has enabled or denied by default.\n\n#### Granted Permissions\n\nThis default permission set enables read access to the\napplication specific directories (AppConfig, AppData, AppLocalData, AppCache,\nAppLog) and all files and sub directories created in it.\nThe location of these directories depends on the operating system,\nwhere the application is run.\n\nIn general these directories need to be manually created\nby the application at runtime, before accessing files or folders\nin it is possible.\n\nTherefore, it is also allowed to create all of these folders via\nthe `mkdir` command.\n\n#### Denied Permissions\n\nThis default permission set prevents access to critical components\nof the Tauri application by default.\nOn Windows the webview data folder access is denied.\n","permissions":["create-app-specific-dirs","read-app-specific-dirs-recursive","deny-default"]},"permissions":{"allow-copy-file":{"identifier":"allow-copy-file","description":"Enables the copy_file command without any pre-configured scope.","commands":{"allow":["copy_file"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-exists":{"identifier":"allow-exists","description":"Enables the exists command without any pre-configured scope.","commands":{"allow":["exists"],"deny":[]}},"allow-fstat":{"identifier":"allow-fstat","description":"Enables the fstat command without any pre-configured scope.","commands":{"allow":["fstat"],"deny":[]}},"allow-ftruncate":{"identifier":"allow-ftruncate","description":"Enables the ftruncate command without any pre-configured scope.","commands":{"allow":["ftruncate"],"deny":[]}},"allow-lstat":{"identifier":"allow-lstat","description":"Enables the lstat command without any pre-configured scope.","commands":{"allow":["lstat"],"deny":[]}},"allow-mkdir":{"identifier":"allow-mkdir","description":"Enables the mkdir command without any pre-configured scope.","commands":{"allow":["mkdir"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-read":{"identifier":"allow-read","description":"Enables the read command without any pre-configured scope.","commands":{"allow":["read"],"deny":[]}},"allow-read-dir":{"identifier":"allow-read-dir","description":"Enables the read_dir command without any pre-configured scope.","commands":{"allow":["read_dir"],"deny":[]}},"allow-read-file":{"identifier":"allow-read-file","description":"Enables the read_file command without any pre-configured scope.","commands":{"allow":["read_file"],"deny":[]}},"allow-read-text-file":{"identifier":"allow-read-text-file","description":"Enables the read_text_file command without any pre-configured scope.","commands":{"allow":["read_text_file"],"deny":[]}},"allow-read-text-file-lines":{"identifier":"allow-read-text-file-lines","description":"Enables the read_text_file_lines command without any pre-configured scope.","commands":{"allow":["read_text_file_lines","read_text_file_lines_next"],"deny":[]}},"allow-read-text-file-lines-next":{"identifier":"allow-read-text-file-lines-next","description":"Enables the read_text_file_lines_next command without any pre-configured scope.","commands":{"allow":["read_text_file_lines_next"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-rename":{"identifier":"allow-rename","description":"Enables the rename command without any pre-configured scope.","commands":{"allow":["rename"],"deny":[]}},"allow-seek":{"identifier":"allow-seek","description":"Enables the seek command without any pre-configured scope.","commands":{"allow":["seek"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"allow-stat":{"identifier":"allow-stat","description":"Enables the stat command without any pre-configured scope.","commands":{"allow":["stat"],"deny":[]}},"allow-truncate":{"identifier":"allow-truncate","description":"Enables the truncate command without any pre-configured scope.","commands":{"allow":["truncate"],"deny":[]}},"allow-unwatch":{"identifier":"allow-unwatch","description":"Enables the unwatch command without any pre-configured scope.","commands":{"allow":["unwatch"],"deny":[]}},"allow-watch":{"identifier":"allow-watch","description":"Enables the watch command without any pre-configured scope.","commands":{"allow":["watch"],"deny":[]}},"allow-write":{"identifier":"allow-write","description":"Enables the write command without any pre-configured scope.","commands":{"allow":["write"],"deny":[]}},"allow-write-file":{"identifier":"allow-write-file","description":"Enables the write_file command without any pre-configured scope.","commands":{"allow":["write_file","open","write"],"deny":[]}},"allow-write-text-file":{"identifier":"allow-write-text-file","description":"Enables the write_text_file command without any pre-configured scope.","commands":{"allow":["write_text_file"],"deny":[]}},"create-app-specific-dirs":{"identifier":"create-app-specific-dirs","description":"This permissions allows to create the application specific directories.\n","commands":{"allow":["mkdir","scope-app-index"],"deny":[]}},"deny-copy-file":{"identifier":"deny-copy-file","description":"Denies the copy_file command without any pre-configured scope.","commands":{"allow":[],"deny":["copy_file"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-exists":{"identifier":"deny-exists","description":"Denies the exists command without any pre-configured scope.","commands":{"allow":[],"deny":["exists"]}},"deny-fstat":{"identifier":"deny-fstat","description":"Denies the fstat command without any pre-configured scope.","commands":{"allow":[],"deny":["fstat"]}},"deny-ftruncate":{"identifier":"deny-ftruncate","description":"Denies the ftruncate command without any pre-configured scope.","commands":{"allow":[],"deny":["ftruncate"]}},"deny-lstat":{"identifier":"deny-lstat","description":"Denies the lstat command without any pre-configured scope.","commands":{"allow":[],"deny":["lstat"]}},"deny-mkdir":{"identifier":"deny-mkdir","description":"Denies the mkdir command without any pre-configured scope.","commands":{"allow":[],"deny":["mkdir"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-read":{"identifier":"deny-read","description":"Denies the read command without any pre-configured scope.","commands":{"allow":[],"deny":["read"]}},"deny-read-dir":{"identifier":"deny-read-dir","description":"Denies the read_dir command without any pre-configured scope.","commands":{"allow":[],"deny":["read_dir"]}},"deny-read-file":{"identifier":"deny-read-file","description":"Denies the read_file command without any pre-configured scope.","commands":{"allow":[],"deny":["read_file"]}},"deny-read-text-file":{"identifier":"deny-read-text-file","description":"Denies the read_text_file command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file"]}},"deny-read-text-file-lines":{"identifier":"deny-read-text-file-lines","description":"Denies the read_text_file_lines command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file_lines"]}},"deny-read-text-file-lines-next":{"identifier":"deny-read-text-file-lines-next","description":"Denies the read_text_file_lines_next command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file_lines_next"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-rename":{"identifier":"deny-rename","description":"Denies the rename command without any pre-configured scope.","commands":{"allow":[],"deny":["rename"]}},"deny-seek":{"identifier":"deny-seek","description":"Denies the seek command without any pre-configured scope.","commands":{"allow":[],"deny":["seek"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}},"deny-stat":{"identifier":"deny-stat","description":"Denies the stat command without any pre-configured scope.","commands":{"allow":[],"deny":["stat"]}},"deny-truncate":{"identifier":"deny-truncate","description":"Denies the truncate command without any pre-configured scope.","commands":{"allow":[],"deny":["truncate"]}},"deny-unwatch":{"identifier":"deny-unwatch","description":"Denies the unwatch command without any pre-configured scope.","commands":{"allow":[],"deny":["unwatch"]}},"deny-watch":{"identifier":"deny-watch","description":"Denies the watch command without any pre-configured scope.","commands":{"allow":[],"deny":["watch"]}},"deny-webview-data-linux":{"identifier":"deny-webview-data-linux","description":"This denies read access to the\n`$APPLOCALDATA` folder on linux as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.","commands":{"allow":[],"deny":[]}},"deny-webview-data-windows":{"identifier":"deny-webview-data-windows","description":"This denies read access to the\n`$APPLOCALDATA/EBWebView` folder on windows as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.","commands":{"allow":[],"deny":[]}},"deny-write":{"identifier":"deny-write","description":"Denies the write command without any pre-configured scope.","commands":{"allow":[],"deny":["write"]}},"deny-write-file":{"identifier":"deny-write-file","description":"Denies the write_file command without any pre-configured scope.","commands":{"allow":[],"deny":["write_file"]}},"deny-write-text-file":{"identifier":"deny-write-text-file","description":"Denies the write_text_file command without any pre-configured scope.","commands":{"allow":[],"deny":["write_text_file"]}},"read-all":{"identifier":"read-all","description":"This enables all read related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","read_file","read","open","read_text_file","read_text_file_lines","read_text_file_lines_next","seek","stat","lstat","fstat","exists","watch","unwatch"],"deny":[]}},"read-app-specific-dirs-recursive":{"identifier":"read-app-specific-dirs-recursive","description":"This permission allows recursive read functionality on the application\nspecific base directories. \n","commands":{"allow":["read_dir","read_file","read_text_file","read_text_file_lines","read_text_file_lines_next","exists","scope-app-recursive"],"deny":[]}},"read-dirs":{"identifier":"read-dirs","description":"This enables directory read and file metadata related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","stat","lstat","fstat","exists"],"deny":[]}},"read-files":{"identifier":"read-files","description":"This enables file read related commands without any pre-configured accessible paths.","commands":{"allow":["read_file","read","open","read_text_file","read_text_file_lines","read_text_file_lines_next","seek","stat","lstat","fstat","exists"],"deny":[]}},"read-meta":{"identifier":"read-meta","description":"This enables all index or metadata related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","stat","lstat","fstat","exists","size"],"deny":[]}},"scope":{"identifier":"scope","description":"An empty permission you can use to modify the global scope.","commands":{"allow":[],"deny":[]}},"scope-app":{"identifier":"scope-app","description":"This scope permits access to all files and list content of top level directories in the application folders.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"},{"path":"$APPCONFIG/*"},{"path":"$APPDATA"},{"path":"$APPDATA/*"},{"path":"$APPLOCALDATA"},{"path":"$APPLOCALDATA/*"},{"path":"$APPCACHE"},{"path":"$APPCACHE/*"},{"path":"$APPLOG"},{"path":"$APPLOG/*"}]}},"scope-app-index":{"identifier":"scope-app-index","description":"This scope permits to list all files and folders in the application directories.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"},{"path":"$APPDATA"},{"path":"$APPLOCALDATA"},{"path":"$APPCACHE"},{"path":"$APPLOG"}]}},"scope-app-recursive":{"identifier":"scope-app-recursive","description":"This scope permits recursive access to the complete application folders, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"},{"path":"$APPCONFIG/**"},{"path":"$APPDATA"},{"path":"$APPDATA/**"},{"path":"$APPLOCALDATA"},{"path":"$APPLOCALDATA/**"},{"path":"$APPCACHE"},{"path":"$APPCACHE/**"},{"path":"$APPLOG"},{"path":"$APPLOG/**"}]}},"scope-appcache":{"identifier":"scope-appcache","description":"This scope permits access to all files and list content of top level directories in the `$APPCACHE` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE"},{"path":"$APPCACHE/*"}]}},"scope-appcache-index":{"identifier":"scope-appcache-index","description":"This scope permits to list all files and folders in the `$APPCACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE"}]}},"scope-appcache-recursive":{"identifier":"scope-appcache-recursive","description":"This scope permits recursive access to the complete `$APPCACHE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE"},{"path":"$APPCACHE/**"}]}},"scope-appconfig":{"identifier":"scope-appconfig","description":"This scope permits access to all files and list content of top level directories in the `$APPCONFIG` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"},{"path":"$APPCONFIG/*"}]}},"scope-appconfig-index":{"identifier":"scope-appconfig-index","description":"This scope permits to list all files and folders in the `$APPCONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"}]}},"scope-appconfig-recursive":{"identifier":"scope-appconfig-recursive","description":"This scope permits recursive access to the complete `$APPCONFIG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"},{"path":"$APPCONFIG/**"}]}},"scope-appdata":{"identifier":"scope-appdata","description":"This scope permits access to all files and list content of top level directories in the `$APPDATA` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA"},{"path":"$APPDATA/*"}]}},"scope-appdata-index":{"identifier":"scope-appdata-index","description":"This scope permits to list all files and folders in the `$APPDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA"}]}},"scope-appdata-recursive":{"identifier":"scope-appdata-recursive","description":"This scope permits recursive access to the complete `$APPDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA"},{"path":"$APPDATA/**"}]}},"scope-applocaldata":{"identifier":"scope-applocaldata","description":"This scope permits access to all files and list content of top level directories in the `$APPLOCALDATA` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA"},{"path":"$APPLOCALDATA/*"}]}},"scope-applocaldata-index":{"identifier":"scope-applocaldata-index","description":"This scope permits to list all files and folders in the `$APPLOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA"}]}},"scope-applocaldata-recursive":{"identifier":"scope-applocaldata-recursive","description":"This scope permits recursive access to the complete `$APPLOCALDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA"},{"path":"$APPLOCALDATA/**"}]}},"scope-applog":{"identifier":"scope-applog","description":"This scope permits access to all files and list content of top level directories in the `$APPLOG` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG"},{"path":"$APPLOG/*"}]}},"scope-applog-index":{"identifier":"scope-applog-index","description":"This scope permits to list all files and folders in the `$APPLOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG"}]}},"scope-applog-recursive":{"identifier":"scope-applog-recursive","description":"This scope permits recursive access to the complete `$APPLOG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG"},{"path":"$APPLOG/**"}]}},"scope-audio":{"identifier":"scope-audio","description":"This scope permits access to all files and list content of top level directories in the `$AUDIO` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO"},{"path":"$AUDIO/*"}]}},"scope-audio-index":{"identifier":"scope-audio-index","description":"This scope permits to list all files and folders in the `$AUDIO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO"}]}},"scope-audio-recursive":{"identifier":"scope-audio-recursive","description":"This scope permits recursive access to the complete `$AUDIO` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO"},{"path":"$AUDIO/**"}]}},"scope-cache":{"identifier":"scope-cache","description":"This scope permits access to all files and list content of top level directories in the `$CACHE` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE"},{"path":"$CACHE/*"}]}},"scope-cache-index":{"identifier":"scope-cache-index","description":"This scope permits to list all files and folders in the `$CACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE"}]}},"scope-cache-recursive":{"identifier":"scope-cache-recursive","description":"This scope permits recursive access to the complete `$CACHE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE"},{"path":"$CACHE/**"}]}},"scope-config":{"identifier":"scope-config","description":"This scope permits access to all files and list content of top level directories in the `$CONFIG` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG"},{"path":"$CONFIG/*"}]}},"scope-config-index":{"identifier":"scope-config-index","description":"This scope permits to list all files and folders in the `$CONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG"}]}},"scope-config-recursive":{"identifier":"scope-config-recursive","description":"This scope permits recursive access to the complete `$CONFIG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG"},{"path":"$CONFIG/**"}]}},"scope-data":{"identifier":"scope-data","description":"This scope permits access to all files and list content of top level directories in the `$DATA` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA"},{"path":"$DATA/*"}]}},"scope-data-index":{"identifier":"scope-data-index","description":"This scope permits to list all files and folders in the `$DATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA"}]}},"scope-data-recursive":{"identifier":"scope-data-recursive","description":"This scope permits recursive access to the complete `$DATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA"},{"path":"$DATA/**"}]}},"scope-desktop":{"identifier":"scope-desktop","description":"This scope permits access to all files and list content of top level directories in the `$DESKTOP` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP"},{"path":"$DESKTOP/*"}]}},"scope-desktop-index":{"identifier":"scope-desktop-index","description":"This scope permits to list all files and folders in the `$DESKTOP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP"}]}},"scope-desktop-recursive":{"identifier":"scope-desktop-recursive","description":"This scope permits recursive access to the complete `$DESKTOP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP"},{"path":"$DESKTOP/**"}]}},"scope-document":{"identifier":"scope-document","description":"This scope permits access to all files and list content of top level directories in the `$DOCUMENT` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT"},{"path":"$DOCUMENT/*"}]}},"scope-document-index":{"identifier":"scope-document-index","description":"This scope permits to list all files and folders in the `$DOCUMENT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT"}]}},"scope-document-recursive":{"identifier":"scope-document-recursive","description":"This scope permits recursive access to the complete `$DOCUMENT` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT"},{"path":"$DOCUMENT/**"}]}},"scope-download":{"identifier":"scope-download","description":"This scope permits access to all files and list content of top level directories in the `$DOWNLOAD` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD"},{"path":"$DOWNLOAD/*"}]}},"scope-download-index":{"identifier":"scope-download-index","description":"This scope permits to list all files and folders in the `$DOWNLOAD`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD"}]}},"scope-download-recursive":{"identifier":"scope-download-recursive","description":"This scope permits recursive access to the complete `$DOWNLOAD` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD"},{"path":"$DOWNLOAD/**"}]}},"scope-exe":{"identifier":"scope-exe","description":"This scope permits access to all files and list content of top level directories in the `$EXE` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE"},{"path":"$EXE/*"}]}},"scope-exe-index":{"identifier":"scope-exe-index","description":"This scope permits to list all files and folders in the `$EXE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE"}]}},"scope-exe-recursive":{"identifier":"scope-exe-recursive","description":"This scope permits recursive access to the complete `$EXE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE"},{"path":"$EXE/**"}]}},"scope-font":{"identifier":"scope-font","description":"This scope permits access to all files and list content of top level directories in the `$FONT` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT"},{"path":"$FONT/*"}]}},"scope-font-index":{"identifier":"scope-font-index","description":"This scope permits to list all files and folders in the `$FONT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT"}]}},"scope-font-recursive":{"identifier":"scope-font-recursive","description":"This scope permits recursive access to the complete `$FONT` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT"},{"path":"$FONT/**"}]}},"scope-home":{"identifier":"scope-home","description":"This scope permits access to all files and list content of top level directories in the `$HOME` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME"},{"path":"$HOME/*"}]}},"scope-home-index":{"identifier":"scope-home-index","description":"This scope permits to list all files and folders in the `$HOME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME"}]}},"scope-home-recursive":{"identifier":"scope-home-recursive","description":"This scope permits recursive access to the complete `$HOME` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME"},{"path":"$HOME/**"}]}},"scope-localdata":{"identifier":"scope-localdata","description":"This scope permits access to all files and list content of top level directories in the `$LOCALDATA` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA"},{"path":"$LOCALDATA/*"}]}},"scope-localdata-index":{"identifier":"scope-localdata-index","description":"This scope permits to list all files and folders in the `$LOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA"}]}},"scope-localdata-recursive":{"identifier":"scope-localdata-recursive","description":"This scope permits recursive access to the complete `$LOCALDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA"},{"path":"$LOCALDATA/**"}]}},"scope-log":{"identifier":"scope-log","description":"This scope permits access to all files and list content of top level directories in the `$LOG` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG"},{"path":"$LOG/*"}]}},"scope-log-index":{"identifier":"scope-log-index","description":"This scope permits to list all files and folders in the `$LOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG"}]}},"scope-log-recursive":{"identifier":"scope-log-recursive","description":"This scope permits recursive access to the complete `$LOG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG"},{"path":"$LOG/**"}]}},"scope-picture":{"identifier":"scope-picture","description":"This scope permits access to all files and list content of top level directories in the `$PICTURE` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE"},{"path":"$PICTURE/*"}]}},"scope-picture-index":{"identifier":"scope-picture-index","description":"This scope permits to list all files and folders in the `$PICTURE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE"}]}},"scope-picture-recursive":{"identifier":"scope-picture-recursive","description":"This scope permits recursive access to the complete `$PICTURE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE"},{"path":"$PICTURE/**"}]}},"scope-public":{"identifier":"scope-public","description":"This scope permits access to all files and list content of top level directories in the `$PUBLIC` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC"},{"path":"$PUBLIC/*"}]}},"scope-public-index":{"identifier":"scope-public-index","description":"This scope permits to list all files and folders in the `$PUBLIC`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC"}]}},"scope-public-recursive":{"identifier":"scope-public-recursive","description":"This scope permits recursive access to the complete `$PUBLIC` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC"},{"path":"$PUBLIC/**"}]}},"scope-resource":{"identifier":"scope-resource","description":"This scope permits access to all files and list content of top level directories in the `$RESOURCE` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE"},{"path":"$RESOURCE/*"}]}},"scope-resource-index":{"identifier":"scope-resource-index","description":"This scope permits to list all files and folders in the `$RESOURCE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE"}]}},"scope-resource-recursive":{"identifier":"scope-resource-recursive","description":"This scope permits recursive access to the complete `$RESOURCE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE"},{"path":"$RESOURCE/**"}]}},"scope-runtime":{"identifier":"scope-runtime","description":"This scope permits access to all files and list content of top level directories in the `$RUNTIME` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME"},{"path":"$RUNTIME/*"}]}},"scope-runtime-index":{"identifier":"scope-runtime-index","description":"This scope permits to list all files and folders in the `$RUNTIME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME"}]}},"scope-runtime-recursive":{"identifier":"scope-runtime-recursive","description":"This scope permits recursive access to the complete `$RUNTIME` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME"},{"path":"$RUNTIME/**"}]}},"scope-temp":{"identifier":"scope-temp","description":"This scope permits access to all files and list content of top level directories in the `$TEMP` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP"},{"path":"$TEMP/*"}]}},"scope-temp-index":{"identifier":"scope-temp-index","description":"This scope permits to list all files and folders in the `$TEMP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP"}]}},"scope-temp-recursive":{"identifier":"scope-temp-recursive","description":"This scope permits recursive access to the complete `$TEMP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP"},{"path":"$TEMP/**"}]}},"scope-template":{"identifier":"scope-template","description":"This scope permits access to all files and list content of top level directories in the `$TEMPLATE` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE"},{"path":"$TEMPLATE/*"}]}},"scope-template-index":{"identifier":"scope-template-index","description":"This scope permits to list all files and folders in the `$TEMPLATE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE"}]}},"scope-template-recursive":{"identifier":"scope-template-recursive","description":"This scope permits recursive access to the complete `$TEMPLATE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE"},{"path":"$TEMPLATE/**"}]}},"scope-video":{"identifier":"scope-video","description":"This scope permits access to all files and list content of top level directories in the `$VIDEO` folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO"},{"path":"$VIDEO/*"}]}},"scope-video-index":{"identifier":"scope-video-index","description":"This scope permits to list all files and folders in the `$VIDEO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO"}]}},"scope-video-recursive":{"identifier":"scope-video-recursive","description":"This scope permits recursive access to the complete `$VIDEO` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO"},{"path":"$VIDEO/**"}]}},"write-all":{"identifier":"write-all","description":"This enables all write related commands without any pre-configured accessible paths.","commands":{"allow":["mkdir","create","copy_file","remove","rename","truncate","ftruncate","write","write_file","write_text_file"],"deny":[]}},"write-files":{"identifier":"write-files","description":"This enables all file write related commands without any pre-configured accessible paths.","commands":{"allow":["create","copy_file","remove","rename","truncate","ftruncate","write","write_file","write_text_file"],"deny":[]}}},"permission_sets":{"allow-app-meta":{"identifier":"allow-app-meta","description":"This allows non-recursive read access to metadata of the application folders, including file listing and statistics.","permissions":["read-meta","scope-app-index"]},"allow-app-meta-recursive":{"identifier":"allow-app-meta-recursive","description":"This allows full recursive read access to metadata of the application folders, including file listing and statistics.","permissions":["read-meta","scope-app-recursive"]},"allow-app-read":{"identifier":"allow-app-read","description":"This allows non-recursive read access to the application folders.","permissions":["read-all","scope-app"]},"allow-app-read-recursive":{"identifier":"allow-app-read-recursive","description":"This allows full recursive read access to the complete application folders, files and subdirectories.","permissions":["read-all","scope-app-recursive"]},"allow-app-write":{"identifier":"allow-app-write","description":"This allows non-recursive write access to the application folders.","permissions":["write-all","scope-app"]},"allow-app-write-recursive":{"identifier":"allow-app-write-recursive","description":"This allows full recursive write access to the complete application folders, files and subdirectories.","permissions":["write-all","scope-app-recursive"]},"allow-appcache-meta":{"identifier":"allow-appcache-meta","description":"This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-appcache-index"]},"allow-appcache-meta-recursive":{"identifier":"allow-appcache-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-appcache-recursive"]},"allow-appcache-read":{"identifier":"allow-appcache-read","description":"This allows non-recursive read access to the `$APPCACHE` folder.","permissions":["read-all","scope-appcache"]},"allow-appcache-read-recursive":{"identifier":"allow-appcache-read-recursive","description":"This allows full recursive read access to the complete `$APPCACHE` folder, files and subdirectories.","permissions":["read-all","scope-appcache-recursive"]},"allow-appcache-write":{"identifier":"allow-appcache-write","description":"This allows non-recursive write access to the `$APPCACHE` folder.","permissions":["write-all","scope-appcache"]},"allow-appcache-write-recursive":{"identifier":"allow-appcache-write-recursive","description":"This allows full recursive write access to the complete `$APPCACHE` folder, files and subdirectories.","permissions":["write-all","scope-appcache-recursive"]},"allow-appconfig-meta":{"identifier":"allow-appconfig-meta","description":"This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-appconfig-index"]},"allow-appconfig-meta-recursive":{"identifier":"allow-appconfig-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-appconfig-recursive"]},"allow-appconfig-read":{"identifier":"allow-appconfig-read","description":"This allows non-recursive read access to the `$APPCONFIG` folder.","permissions":["read-all","scope-appconfig"]},"allow-appconfig-read-recursive":{"identifier":"allow-appconfig-read-recursive","description":"This allows full recursive read access to the complete `$APPCONFIG` folder, files and subdirectories.","permissions":["read-all","scope-appconfig-recursive"]},"allow-appconfig-write":{"identifier":"allow-appconfig-write","description":"This allows non-recursive write access to the `$APPCONFIG` folder.","permissions":["write-all","scope-appconfig"]},"allow-appconfig-write-recursive":{"identifier":"allow-appconfig-write-recursive","description":"This allows full recursive write access to the complete `$APPCONFIG` folder, files and subdirectories.","permissions":["write-all","scope-appconfig-recursive"]},"allow-appdata-meta":{"identifier":"allow-appdata-meta","description":"This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-appdata-index"]},"allow-appdata-meta-recursive":{"identifier":"allow-appdata-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-appdata-recursive"]},"allow-appdata-read":{"identifier":"allow-appdata-read","description":"This allows non-recursive read access to the `$APPDATA` folder.","permissions":["read-all","scope-appdata"]},"allow-appdata-read-recursive":{"identifier":"allow-appdata-read-recursive","description":"This allows full recursive read access to the complete `$APPDATA` folder, files and subdirectories.","permissions":["read-all","scope-appdata-recursive"]},"allow-appdata-write":{"identifier":"allow-appdata-write","description":"This allows non-recursive write access to the `$APPDATA` folder.","permissions":["write-all","scope-appdata"]},"allow-appdata-write-recursive":{"identifier":"allow-appdata-write-recursive","description":"This allows full recursive write access to the complete `$APPDATA` folder, files and subdirectories.","permissions":["write-all","scope-appdata-recursive"]},"allow-applocaldata-meta":{"identifier":"allow-applocaldata-meta","description":"This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-applocaldata-index"]},"allow-applocaldata-meta-recursive":{"identifier":"allow-applocaldata-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-applocaldata-recursive"]},"allow-applocaldata-read":{"identifier":"allow-applocaldata-read","description":"This allows non-recursive read access to the `$APPLOCALDATA` folder.","permissions":["read-all","scope-applocaldata"]},"allow-applocaldata-read-recursive":{"identifier":"allow-applocaldata-read-recursive","description":"This allows full recursive read access to the complete `$APPLOCALDATA` folder, files and subdirectories.","permissions":["read-all","scope-applocaldata-recursive"]},"allow-applocaldata-write":{"identifier":"allow-applocaldata-write","description":"This allows non-recursive write access to the `$APPLOCALDATA` folder.","permissions":["write-all","scope-applocaldata"]},"allow-applocaldata-write-recursive":{"identifier":"allow-applocaldata-write-recursive","description":"This allows full recursive write access to the complete `$APPLOCALDATA` folder, files and subdirectories.","permissions":["write-all","scope-applocaldata-recursive"]},"allow-applog-meta":{"identifier":"allow-applog-meta","description":"This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.","permissions":["read-meta","scope-applog-index"]},"allow-applog-meta-recursive":{"identifier":"allow-applog-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.","permissions":["read-meta","scope-applog-recursive"]},"allow-applog-read":{"identifier":"allow-applog-read","description":"This allows non-recursive read access to the `$APPLOG` folder.","permissions":["read-all","scope-applog"]},"allow-applog-read-recursive":{"identifier":"allow-applog-read-recursive","description":"This allows full recursive read access to the complete `$APPLOG` folder, files and subdirectories.","permissions":["read-all","scope-applog-recursive"]},"allow-applog-write":{"identifier":"allow-applog-write","description":"This allows non-recursive write access to the `$APPLOG` folder.","permissions":["write-all","scope-applog"]},"allow-applog-write-recursive":{"identifier":"allow-applog-write-recursive","description":"This allows full recursive write access to the complete `$APPLOG` folder, files and subdirectories.","permissions":["write-all","scope-applog-recursive"]},"allow-audio-meta":{"identifier":"allow-audio-meta","description":"This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.","permissions":["read-meta","scope-audio-index"]},"allow-audio-meta-recursive":{"identifier":"allow-audio-meta-recursive","description":"This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.","permissions":["read-meta","scope-audio-recursive"]},"allow-audio-read":{"identifier":"allow-audio-read","description":"This allows non-recursive read access to the `$AUDIO` folder.","permissions":["read-all","scope-audio"]},"allow-audio-read-recursive":{"identifier":"allow-audio-read-recursive","description":"This allows full recursive read access to the complete `$AUDIO` folder, files and subdirectories.","permissions":["read-all","scope-audio-recursive"]},"allow-audio-write":{"identifier":"allow-audio-write","description":"This allows non-recursive write access to the `$AUDIO` folder.","permissions":["write-all","scope-audio"]},"allow-audio-write-recursive":{"identifier":"allow-audio-write-recursive","description":"This allows full recursive write access to the complete `$AUDIO` folder, files and subdirectories.","permissions":["write-all","scope-audio-recursive"]},"allow-cache-meta":{"identifier":"allow-cache-meta","description":"This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-cache-index"]},"allow-cache-meta-recursive":{"identifier":"allow-cache-meta-recursive","description":"This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-cache-recursive"]},"allow-cache-read":{"identifier":"allow-cache-read","description":"This allows non-recursive read access to the `$CACHE` folder.","permissions":["read-all","scope-cache"]},"allow-cache-read-recursive":{"identifier":"allow-cache-read-recursive","description":"This allows full recursive read access to the complete `$CACHE` folder, files and subdirectories.","permissions":["read-all","scope-cache-recursive"]},"allow-cache-write":{"identifier":"allow-cache-write","description":"This allows non-recursive write access to the `$CACHE` folder.","permissions":["write-all","scope-cache"]},"allow-cache-write-recursive":{"identifier":"allow-cache-write-recursive","description":"This allows full recursive write access to the complete `$CACHE` folder, files and subdirectories.","permissions":["write-all","scope-cache-recursive"]},"allow-config-meta":{"identifier":"allow-config-meta","description":"This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-config-index"]},"allow-config-meta-recursive":{"identifier":"allow-config-meta-recursive","description":"This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-config-recursive"]},"allow-config-read":{"identifier":"allow-config-read","description":"This allows non-recursive read access to the `$CONFIG` folder.","permissions":["read-all","scope-config"]},"allow-config-read-recursive":{"identifier":"allow-config-read-recursive","description":"This allows full recursive read access to the complete `$CONFIG` folder, files and subdirectories.","permissions":["read-all","scope-config-recursive"]},"allow-config-write":{"identifier":"allow-config-write","description":"This allows non-recursive write access to the `$CONFIG` folder.","permissions":["write-all","scope-config"]},"allow-config-write-recursive":{"identifier":"allow-config-write-recursive","description":"This allows full recursive write access to the complete `$CONFIG` folder, files and subdirectories.","permissions":["write-all","scope-config-recursive"]},"allow-data-meta":{"identifier":"allow-data-meta","description":"This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.","permissions":["read-meta","scope-data-index"]},"allow-data-meta-recursive":{"identifier":"allow-data-meta-recursive","description":"This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.","permissions":["read-meta","scope-data-recursive"]},"allow-data-read":{"identifier":"allow-data-read","description":"This allows non-recursive read access to the `$DATA` folder.","permissions":["read-all","scope-data"]},"allow-data-read-recursive":{"identifier":"allow-data-read-recursive","description":"This allows full recursive read access to the complete `$DATA` folder, files and subdirectories.","permissions":["read-all","scope-data-recursive"]},"allow-data-write":{"identifier":"allow-data-write","description":"This allows non-recursive write access to the `$DATA` folder.","permissions":["write-all","scope-data"]},"allow-data-write-recursive":{"identifier":"allow-data-write-recursive","description":"This allows full recursive write access to the complete `$DATA` folder, files and subdirectories.","permissions":["write-all","scope-data-recursive"]},"allow-desktop-meta":{"identifier":"allow-desktop-meta","description":"This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.","permissions":["read-meta","scope-desktop-index"]},"allow-desktop-meta-recursive":{"identifier":"allow-desktop-meta-recursive","description":"This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.","permissions":["read-meta","scope-desktop-recursive"]},"allow-desktop-read":{"identifier":"allow-desktop-read","description":"This allows non-recursive read access to the `$DESKTOP` folder.","permissions":["read-all","scope-desktop"]},"allow-desktop-read-recursive":{"identifier":"allow-desktop-read-recursive","description":"This allows full recursive read access to the complete `$DESKTOP` folder, files and subdirectories.","permissions":["read-all","scope-desktop-recursive"]},"allow-desktop-write":{"identifier":"allow-desktop-write","description":"This allows non-recursive write access to the `$DESKTOP` folder.","permissions":["write-all","scope-desktop"]},"allow-desktop-write-recursive":{"identifier":"allow-desktop-write-recursive","description":"This allows full recursive write access to the complete `$DESKTOP` folder, files and subdirectories.","permissions":["write-all","scope-desktop-recursive"]},"allow-document-meta":{"identifier":"allow-document-meta","description":"This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.","permissions":["read-meta","scope-document-index"]},"allow-document-meta-recursive":{"identifier":"allow-document-meta-recursive","description":"This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.","permissions":["read-meta","scope-document-recursive"]},"allow-document-read":{"identifier":"allow-document-read","description":"This allows non-recursive read access to the `$DOCUMENT` folder.","permissions":["read-all","scope-document"]},"allow-document-read-recursive":{"identifier":"allow-document-read-recursive","description":"This allows full recursive read access to the complete `$DOCUMENT` folder, files and subdirectories.","permissions":["read-all","scope-document-recursive"]},"allow-document-write":{"identifier":"allow-document-write","description":"This allows non-recursive write access to the `$DOCUMENT` folder.","permissions":["write-all","scope-document"]},"allow-document-write-recursive":{"identifier":"allow-document-write-recursive","description":"This allows full recursive write access to the complete `$DOCUMENT` folder, files and subdirectories.","permissions":["write-all","scope-document-recursive"]},"allow-download-meta":{"identifier":"allow-download-meta","description":"This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.","permissions":["read-meta","scope-download-index"]},"allow-download-meta-recursive":{"identifier":"allow-download-meta-recursive","description":"This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.","permissions":["read-meta","scope-download-recursive"]},"allow-download-read":{"identifier":"allow-download-read","description":"This allows non-recursive read access to the `$DOWNLOAD` folder.","permissions":["read-all","scope-download"]},"allow-download-read-recursive":{"identifier":"allow-download-read-recursive","description":"This allows full recursive read access to the complete `$DOWNLOAD` folder, files and subdirectories.","permissions":["read-all","scope-download-recursive"]},"allow-download-write":{"identifier":"allow-download-write","description":"This allows non-recursive write access to the `$DOWNLOAD` folder.","permissions":["write-all","scope-download"]},"allow-download-write-recursive":{"identifier":"allow-download-write-recursive","description":"This allows full recursive write access to the complete `$DOWNLOAD` folder, files and subdirectories.","permissions":["write-all","scope-download-recursive"]},"allow-exe-meta":{"identifier":"allow-exe-meta","description":"This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.","permissions":["read-meta","scope-exe-index"]},"allow-exe-meta-recursive":{"identifier":"allow-exe-meta-recursive","description":"This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.","permissions":["read-meta","scope-exe-recursive"]},"allow-exe-read":{"identifier":"allow-exe-read","description":"This allows non-recursive read access to the `$EXE` folder.","permissions":["read-all","scope-exe"]},"allow-exe-read-recursive":{"identifier":"allow-exe-read-recursive","description":"This allows full recursive read access to the complete `$EXE` folder, files and subdirectories.","permissions":["read-all","scope-exe-recursive"]},"allow-exe-write":{"identifier":"allow-exe-write","description":"This allows non-recursive write access to the `$EXE` folder.","permissions":["write-all","scope-exe"]},"allow-exe-write-recursive":{"identifier":"allow-exe-write-recursive","description":"This allows full recursive write access to the complete `$EXE` folder, files and subdirectories.","permissions":["write-all","scope-exe-recursive"]},"allow-font-meta":{"identifier":"allow-font-meta","description":"This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.","permissions":["read-meta","scope-font-index"]},"allow-font-meta-recursive":{"identifier":"allow-font-meta-recursive","description":"This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.","permissions":["read-meta","scope-font-recursive"]},"allow-font-read":{"identifier":"allow-font-read","description":"This allows non-recursive read access to the `$FONT` folder.","permissions":["read-all","scope-font"]},"allow-font-read-recursive":{"identifier":"allow-font-read-recursive","description":"This allows full recursive read access to the complete `$FONT` folder, files and subdirectories.","permissions":["read-all","scope-font-recursive"]},"allow-font-write":{"identifier":"allow-font-write","description":"This allows non-recursive write access to the `$FONT` folder.","permissions":["write-all","scope-font"]},"allow-font-write-recursive":{"identifier":"allow-font-write-recursive","description":"This allows full recursive write access to the complete `$FONT` folder, files and subdirectories.","permissions":["write-all","scope-font-recursive"]},"allow-home-meta":{"identifier":"allow-home-meta","description":"This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.","permissions":["read-meta","scope-home-index"]},"allow-home-meta-recursive":{"identifier":"allow-home-meta-recursive","description":"This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.","permissions":["read-meta","scope-home-recursive"]},"allow-home-read":{"identifier":"allow-home-read","description":"This allows non-recursive read access to the `$HOME` folder.","permissions":["read-all","scope-home"]},"allow-home-read-recursive":{"identifier":"allow-home-read-recursive","description":"This allows full recursive read access to the complete `$HOME` folder, files and subdirectories.","permissions":["read-all","scope-home-recursive"]},"allow-home-write":{"identifier":"allow-home-write","description":"This allows non-recursive write access to the `$HOME` folder.","permissions":["write-all","scope-home"]},"allow-home-write-recursive":{"identifier":"allow-home-write-recursive","description":"This allows full recursive write access to the complete `$HOME` folder, files and subdirectories.","permissions":["write-all","scope-home-recursive"]},"allow-localdata-meta":{"identifier":"allow-localdata-meta","description":"This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-localdata-index"]},"allow-localdata-meta-recursive":{"identifier":"allow-localdata-meta-recursive","description":"This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-localdata-recursive"]},"allow-localdata-read":{"identifier":"allow-localdata-read","description":"This allows non-recursive read access to the `$LOCALDATA` folder.","permissions":["read-all","scope-localdata"]},"allow-localdata-read-recursive":{"identifier":"allow-localdata-read-recursive","description":"This allows full recursive read access to the complete `$LOCALDATA` folder, files and subdirectories.","permissions":["read-all","scope-localdata-recursive"]},"allow-localdata-write":{"identifier":"allow-localdata-write","description":"This allows non-recursive write access to the `$LOCALDATA` folder.","permissions":["write-all","scope-localdata"]},"allow-localdata-write-recursive":{"identifier":"allow-localdata-write-recursive","description":"This allows full recursive write access to the complete `$LOCALDATA` folder, files and subdirectories.","permissions":["write-all","scope-localdata-recursive"]},"allow-log-meta":{"identifier":"allow-log-meta","description":"This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.","permissions":["read-meta","scope-log-index"]},"allow-log-meta-recursive":{"identifier":"allow-log-meta-recursive","description":"This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.","permissions":["read-meta","scope-log-recursive"]},"allow-log-read":{"identifier":"allow-log-read","description":"This allows non-recursive read access to the `$LOG` folder.","permissions":["read-all","scope-log"]},"allow-log-read-recursive":{"identifier":"allow-log-read-recursive","description":"This allows full recursive read access to the complete `$LOG` folder, files and subdirectories.","permissions":["read-all","scope-log-recursive"]},"allow-log-write":{"identifier":"allow-log-write","description":"This allows non-recursive write access to the `$LOG` folder.","permissions":["write-all","scope-log"]},"allow-log-write-recursive":{"identifier":"allow-log-write-recursive","description":"This allows full recursive write access to the complete `$LOG` folder, files and subdirectories.","permissions":["write-all","scope-log-recursive"]},"allow-picture-meta":{"identifier":"allow-picture-meta","description":"This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.","permissions":["read-meta","scope-picture-index"]},"allow-picture-meta-recursive":{"identifier":"allow-picture-meta-recursive","description":"This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.","permissions":["read-meta","scope-picture-recursive"]},"allow-picture-read":{"identifier":"allow-picture-read","description":"This allows non-recursive read access to the `$PICTURE` folder.","permissions":["read-all","scope-picture"]},"allow-picture-read-recursive":{"identifier":"allow-picture-read-recursive","description":"This allows full recursive read access to the complete `$PICTURE` folder, files and subdirectories.","permissions":["read-all","scope-picture-recursive"]},"allow-picture-write":{"identifier":"allow-picture-write","description":"This allows non-recursive write access to the `$PICTURE` folder.","permissions":["write-all","scope-picture"]},"allow-picture-write-recursive":{"identifier":"allow-picture-write-recursive","description":"This allows full recursive write access to the complete `$PICTURE` folder, files and subdirectories.","permissions":["write-all","scope-picture-recursive"]},"allow-public-meta":{"identifier":"allow-public-meta","description":"This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.","permissions":["read-meta","scope-public-index"]},"allow-public-meta-recursive":{"identifier":"allow-public-meta-recursive","description":"This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.","permissions":["read-meta","scope-public-recursive"]},"allow-public-read":{"identifier":"allow-public-read","description":"This allows non-recursive read access to the `$PUBLIC` folder.","permissions":["read-all","scope-public"]},"allow-public-read-recursive":{"identifier":"allow-public-read-recursive","description":"This allows full recursive read access to the complete `$PUBLIC` folder, files and subdirectories.","permissions":["read-all","scope-public-recursive"]},"allow-public-write":{"identifier":"allow-public-write","description":"This allows non-recursive write access to the `$PUBLIC` folder.","permissions":["write-all","scope-public"]},"allow-public-write-recursive":{"identifier":"allow-public-write-recursive","description":"This allows full recursive write access to the complete `$PUBLIC` folder, files and subdirectories.","permissions":["write-all","scope-public-recursive"]},"allow-resource-meta":{"identifier":"allow-resource-meta","description":"This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.","permissions":["read-meta","scope-resource-index"]},"allow-resource-meta-recursive":{"identifier":"allow-resource-meta-recursive","description":"This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.","permissions":["read-meta","scope-resource-recursive"]},"allow-resource-read":{"identifier":"allow-resource-read","description":"This allows non-recursive read access to the `$RESOURCE` folder.","permissions":["read-all","scope-resource"]},"allow-resource-read-recursive":{"identifier":"allow-resource-read-recursive","description":"This allows full recursive read access to the complete `$RESOURCE` folder, files and subdirectories.","permissions":["read-all","scope-resource-recursive"]},"allow-resource-write":{"identifier":"allow-resource-write","description":"This allows non-recursive write access to the `$RESOURCE` folder.","permissions":["write-all","scope-resource"]},"allow-resource-write-recursive":{"identifier":"allow-resource-write-recursive","description":"This allows full recursive write access to the complete `$RESOURCE` folder, files and subdirectories.","permissions":["write-all","scope-resource-recursive"]},"allow-runtime-meta":{"identifier":"allow-runtime-meta","description":"This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.","permissions":["read-meta","scope-runtime-index"]},"allow-runtime-meta-recursive":{"identifier":"allow-runtime-meta-recursive","description":"This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.","permissions":["read-meta","scope-runtime-recursive"]},"allow-runtime-read":{"identifier":"allow-runtime-read","description":"This allows non-recursive read access to the `$RUNTIME` folder.","permissions":["read-all","scope-runtime"]},"allow-runtime-read-recursive":{"identifier":"allow-runtime-read-recursive","description":"This allows full recursive read access to the complete `$RUNTIME` folder, files and subdirectories.","permissions":["read-all","scope-runtime-recursive"]},"allow-runtime-write":{"identifier":"allow-runtime-write","description":"This allows non-recursive write access to the `$RUNTIME` folder.","permissions":["write-all","scope-runtime"]},"allow-runtime-write-recursive":{"identifier":"allow-runtime-write-recursive","description":"This allows full recursive write access to the complete `$RUNTIME` folder, files and subdirectories.","permissions":["write-all","scope-runtime-recursive"]},"allow-temp-meta":{"identifier":"allow-temp-meta","description":"This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.","permissions":["read-meta","scope-temp-index"]},"allow-temp-meta-recursive":{"identifier":"allow-temp-meta-recursive","description":"This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.","permissions":["read-meta","scope-temp-recursive"]},"allow-temp-read":{"identifier":"allow-temp-read","description":"This allows non-recursive read access to the `$TEMP` folder.","permissions":["read-all","scope-temp"]},"allow-temp-read-recursive":{"identifier":"allow-temp-read-recursive","description":"This allows full recursive read access to the complete `$TEMP` folder, files and subdirectories.","permissions":["read-all","scope-temp-recursive"]},"allow-temp-write":{"identifier":"allow-temp-write","description":"This allows non-recursive write access to the `$TEMP` folder.","permissions":["write-all","scope-temp"]},"allow-temp-write-recursive":{"identifier":"allow-temp-write-recursive","description":"This allows full recursive write access to the complete `$TEMP` folder, files and subdirectories.","permissions":["write-all","scope-temp-recursive"]},"allow-template-meta":{"identifier":"allow-template-meta","description":"This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.","permissions":["read-meta","scope-template-index"]},"allow-template-meta-recursive":{"identifier":"allow-template-meta-recursive","description":"This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.","permissions":["read-meta","scope-template-recursive"]},"allow-template-read":{"identifier":"allow-template-read","description":"This allows non-recursive read access to the `$TEMPLATE` folder.","permissions":["read-all","scope-template"]},"allow-template-read-recursive":{"identifier":"allow-template-read-recursive","description":"This allows full recursive read access to the complete `$TEMPLATE` folder, files and subdirectories.","permissions":["read-all","scope-template-recursive"]},"allow-template-write":{"identifier":"allow-template-write","description":"This allows non-recursive write access to the `$TEMPLATE` folder.","permissions":["write-all","scope-template"]},"allow-template-write-recursive":{"identifier":"allow-template-write-recursive","description":"This allows full recursive write access to the complete `$TEMPLATE` folder, files and subdirectories.","permissions":["write-all","scope-template-recursive"]},"allow-video-meta":{"identifier":"allow-video-meta","description":"This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.","permissions":["read-meta","scope-video-index"]},"allow-video-meta-recursive":{"identifier":"allow-video-meta-recursive","description":"This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.","permissions":["read-meta","scope-video-recursive"]},"allow-video-read":{"identifier":"allow-video-read","description":"This allows non-recursive read access to the `$VIDEO` folder.","permissions":["read-all","scope-video"]},"allow-video-read-recursive":{"identifier":"allow-video-read-recursive","description":"This allows full recursive read access to the complete `$VIDEO` folder, files and subdirectories.","permissions":["read-all","scope-video-recursive"]},"allow-video-write":{"identifier":"allow-video-write","description":"This allows non-recursive write access to the `$VIDEO` folder.","permissions":["write-all","scope-video"]},"allow-video-write-recursive":{"identifier":"allow-video-write-recursive","description":"This allows full recursive write access to the complete `$VIDEO` folder, files and subdirectories.","permissions":["write-all","scope-video-recursive"]},"deny-default":{"identifier":"deny-default","description":"This denies access to dangerous Tauri relevant files and folders by default.","permissions":["deny-webview-data-linux","deny-webview-data-windows"]}},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"A path that can be accessed by the webview when using the fs APIs. FS scope path pattern.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},{"properties":{"path":{"description":"A path that can be accessed by the webview when using the fs APIs.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"}},"required":["path"],"type":"object"}],"description":"FS scope entry.","title":"FsScopeEntry"}},"opener":{"default_permission":{"identifier":"default","description":"This permission set allows opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application\nas well as reveal file in directories using default file explorer","permissions":["allow-open-url","allow-reveal-item-in-dir","allow-default-urls"]},"permissions":{"allow-default-urls":{"identifier":"allow-default-urls","description":"This enables opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"url":"mailto:*"},{"url":"tel:*"},{"url":"http://*"},{"url":"https://*"}]}},"allow-open-path":{"identifier":"allow-open-path","description":"Enables the open_path command without any pre-configured scope.","commands":{"allow":["open_path"],"deny":[]}},"allow-open-url":{"identifier":"allow-open-url","description":"Enables the open_url command without any pre-configured scope.","commands":{"allow":["open_url"],"deny":[]}},"allow-reveal-item-in-dir":{"identifier":"allow-reveal-item-in-dir","description":"Enables the reveal_item_in_dir command without any pre-configured scope.","commands":{"allow":["reveal_item_in_dir"],"deny":[]}},"deny-open-path":{"identifier":"deny-open-path","description":"Denies the open_path command without any pre-configured scope.","commands":{"allow":[],"deny":["open_path"]}},"deny-open-url":{"identifier":"deny-open-url","description":"Denies the open_url command without any pre-configured scope.","commands":{"allow":[],"deny":["open_url"]}},"deny-reveal-item-in-dir":{"identifier":"deny-reveal-item-in-dir","description":"Denies the reveal_item_in_dir command without any pre-configured scope.","commands":{"allow":[],"deny":["reveal_item_in_dir"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"properties":{"app":{"allOf":[{"$ref":"#/definitions/Application"}],"description":"An application to open this url with, for example: firefox."},"url":{"description":"A URL that can be opened by the webview when using the Opener APIs.\n\nWildcards can be used following the UNIX glob pattern.\n\nExamples:\n\n- \"https://*\" : allows all HTTPS origin\n\n- \"https://*.github.com/tauri-apps/tauri\": allows any subdomain of \"github.com\" with the \"tauri-apps/api\" path\n\n- \"https://myapi.service.com/users/*\": allows access to any URLs that begins with \"https://myapi.service.com/users/\"","type":"string"}},"required":["url"],"type":"object"},{"properties":{"app":{"allOf":[{"$ref":"#/definitions/Application"}],"description":"An application to open this path with, for example: xdg-open."},"path":{"description":"A path that can be opened by the webview when using the Opener APIs.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"}},"required":["path"],"type":"object"}],"definitions":{"Application":{"anyOf":[{"description":"Open in default application.","type":"null"},{"description":"If true, allow open with any application.","type":"boolean"},{"description":"Allow specific application to open with.","type":"string"}],"description":"Opener scope application."}},"description":"Opener scope entry.","title":"OpenerScopeEntry"}},"process":{"default_permission":{"identifier":"default","description":"This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n","permissions":["allow-exit","allow-restart"]},"permissions":{"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-restart":{"identifier":"allow-restart","description":"Enables the restart command without any pre-configured scope.","commands":{"allow":["restart"],"deny":[]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-restart":{"identifier":"deny-restart","description":"Denies the restart command without any pre-configured scope.","commands":{"allow":[],"deny":["restart"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/src-tauri/gen/schemas/desktop-schema.json b/src-tauri/gen/schemas/desktop-schema.json index 0f1e3d40..7204184c 100644 --- a/src-tauri/gen/schemas/desktop-schema.json +++ b/src-tauri/gen/schemas/desktop-schema.json @@ -37,7 +37,7 @@ ], "definitions": { "Capability": { - "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", "type": "object", "required": [ "identifier", @@ -49,7 +49,7 @@ "type": "string" }, "description": { - "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.", + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.", "default": "", "type": "string" }, @@ -2229,10 +2229,10 @@ "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`" }, { - "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`", + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`", "type": "string", "const": "core:app:default", - "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`" + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`" }, { "description": "Enables the app_hide command without any pre-configured scope.", @@ -2246,6 +2246,12 @@ "const": "core:app:allow-app-show", "markdownDescription": "Enables the app_show command without any pre-configured scope." }, + { + "description": "Enables the bundle_type command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-bundle-type", + "markdownDescription": "Enables the bundle_type command without any pre-configured scope." + }, { "description": "Enables the default_window_icon command without any pre-configured scope.", "type": "string", @@ -2312,6 +2318,12 @@ "const": "core:app:deny-app-show", "markdownDescription": "Denies the app_show command without any pre-configured scope." }, + { + "description": "Denies the bundle_type command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-bundle-type", + "markdownDescription": "Denies the bundle_type command without any pre-configured scope." + }, { "description": "Denies the default_window_icon command without any pre-configured scope.", "type": "string", @@ -3062,6 +3074,12 @@ "const": "core:webview:allow-reparent", "markdownDescription": "Enables the reparent command without any pre-configured scope." }, + { + "description": "Enables the set_webview_auto_resize command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-auto-resize", + "markdownDescription": "Enables the set_webview_auto_resize command without any pre-configured scope." + }, { "description": "Enables the set_webview_background_color command without any pre-configured scope.", "type": "string", @@ -3164,6 +3182,12 @@ "const": "core:webview:deny-reparent", "markdownDescription": "Denies the reparent command without any pre-configured scope." }, + { + "description": "Denies the set_webview_auto_resize command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-auto-resize", + "markdownDescription": "Denies the set_webview_auto_resize command without any pre-configured scope." + }, { "description": "Denies the set_webview_background_color command without any pre-configured scope.", "type": "string", @@ -3512,6 +3536,12 @@ "const": "core:window:allow-set-focus", "markdownDescription": "Enables the set_focus command without any pre-configured scope." }, + { + "description": "Enables the set_focusable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focusable", + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." + }, { "description": "Enables the set_fullscreen command without any pre-configured scope.", "type": "string", @@ -3584,6 +3614,12 @@ "const": "core:window:allow-set-shadow", "markdownDescription": "Enables the set_shadow command without any pre-configured scope." }, + { + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-simple-fullscreen", + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." + }, { "description": "Enables the set_size command without any pre-configured scope.", "type": "string", @@ -3956,6 +3992,12 @@ "const": "core:window:deny-set-focus", "markdownDescription": "Denies the set_focus command without any pre-configured scope." }, + { + "description": "Denies the set_focusable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focusable", + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." + }, { "description": "Denies the set_fullscreen command without any pre-configured scope.", "type": "string", @@ -4028,6 +4070,12 @@ "const": "core:window:deny-set-shadow", "markdownDescription": "Denies the set_shadow command without any pre-configured scope." }, + { + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-simple-fullscreen", + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." + }, { "description": "Denies the set_size command without any pre-configured scope.", "type": "string", diff --git a/src-tauri/gen/schemas/linux-schema.json b/src-tauri/gen/schemas/linux-schema.json index 0f1e3d40..7204184c 100644 --- a/src-tauri/gen/schemas/linux-schema.json +++ b/src-tauri/gen/schemas/linux-schema.json @@ -37,7 +37,7 @@ ], "definitions": { "Capability": { - "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows' and webviews' fine grained access to the Tauri core, application, or plugin commands. If a webview or its window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", "type": "object", "required": [ "identifier", @@ -49,7 +49,7 @@ "type": "string" }, "description": { - "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.", + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programmatic access to files selected by the user.", "default": "", "type": "string" }, @@ -2229,10 +2229,10 @@ "markdownDescription": "Default core plugins set.\n#### This default permission set includes:\n\n- `core:path:default`\n- `core:event:default`\n- `core:window:default`\n- `core:webview:default`\n- `core:app:default`\n- `core:image:default`\n- `core:resources:default`\n- `core:menu:default`\n- `core:tray:default`" }, { - "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`", + "description": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`", "type": "string", "const": "core:app:default", - "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`" + "markdownDescription": "Default permissions for the plugin.\n#### This default permission set includes:\n\n- `allow-version`\n- `allow-name`\n- `allow-tauri-version`\n- `allow-identifier`\n- `allow-bundle-type`" }, { "description": "Enables the app_hide command without any pre-configured scope.", @@ -2246,6 +2246,12 @@ "const": "core:app:allow-app-show", "markdownDescription": "Enables the app_show command without any pre-configured scope." }, + { + "description": "Enables the bundle_type command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-bundle-type", + "markdownDescription": "Enables the bundle_type command without any pre-configured scope." + }, { "description": "Enables the default_window_icon command without any pre-configured scope.", "type": "string", @@ -2312,6 +2318,12 @@ "const": "core:app:deny-app-show", "markdownDescription": "Denies the app_show command without any pre-configured scope." }, + { + "description": "Denies the bundle_type command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-bundle-type", + "markdownDescription": "Denies the bundle_type command without any pre-configured scope." + }, { "description": "Denies the default_window_icon command without any pre-configured scope.", "type": "string", @@ -3062,6 +3074,12 @@ "const": "core:webview:allow-reparent", "markdownDescription": "Enables the reparent command without any pre-configured scope." }, + { + "description": "Enables the set_webview_auto_resize command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-auto-resize", + "markdownDescription": "Enables the set_webview_auto_resize command without any pre-configured scope." + }, { "description": "Enables the set_webview_background_color command without any pre-configured scope.", "type": "string", @@ -3164,6 +3182,12 @@ "const": "core:webview:deny-reparent", "markdownDescription": "Denies the reparent command without any pre-configured scope." }, + { + "description": "Denies the set_webview_auto_resize command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-auto-resize", + "markdownDescription": "Denies the set_webview_auto_resize command without any pre-configured scope." + }, { "description": "Denies the set_webview_background_color command without any pre-configured scope.", "type": "string", @@ -3512,6 +3536,12 @@ "const": "core:window:allow-set-focus", "markdownDescription": "Enables the set_focus command without any pre-configured scope." }, + { + "description": "Enables the set_focusable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focusable", + "markdownDescription": "Enables the set_focusable command without any pre-configured scope." + }, { "description": "Enables the set_fullscreen command without any pre-configured scope.", "type": "string", @@ -3584,6 +3614,12 @@ "const": "core:window:allow-set-shadow", "markdownDescription": "Enables the set_shadow command without any pre-configured scope." }, + { + "description": "Enables the set_simple_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-simple-fullscreen", + "markdownDescription": "Enables the set_simple_fullscreen command without any pre-configured scope." + }, { "description": "Enables the set_size command without any pre-configured scope.", "type": "string", @@ -3956,6 +3992,12 @@ "const": "core:window:deny-set-focus", "markdownDescription": "Denies the set_focus command without any pre-configured scope." }, + { + "description": "Denies the set_focusable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focusable", + "markdownDescription": "Denies the set_focusable command without any pre-configured scope." + }, { "description": "Denies the set_fullscreen command without any pre-configured scope.", "type": "string", @@ -4028,6 +4070,12 @@ "const": "core:window:deny-set-shadow", "markdownDescription": "Denies the set_shadow command without any pre-configured scope." }, + { + "description": "Denies the set_simple_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-simple-fullscreen", + "markdownDescription": "Denies the set_simple_fullscreen command without any pre-configured scope." + }, { "description": "Denies the set_size command without any pre-configured scope.", "type": "string", diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index d4d8fdcd..467f3d6b 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -35,9 +35,9 @@ "createUpdaterArtifacts": "v1Compatible" }, "build": { - "beforeBuildCommand": "npx cross-env VITE_APP_BUILD_MODE=tauri yarn build", + "beforeBuildCommand": "npx cross-env VITE_APP_BUILD_MODE=tauri npm run build", "frontendDist": "../dist", - "beforeDevCommand": "npx cross-env VITE_APP_BUILD_MODE=tauri yarn dev --port=5174", + "beforeDevCommand": "npx cross-env VITE_APP_BUILD_MODE=tauri npm run dev -- --port=5174", "devUrl": "http://localhost:5174" }, "productName": "elasticvue", diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 36cb5b80..00000000 --- a/yarn.lock +++ /dev/null @@ -1,6025 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@babel/helper-string-parser@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-string-parser@npm:7.25.9" - checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-string-parser@npm:7.27.1" - checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-identifier@npm:7.25.9" - checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-validator-identifier@npm:7.27.1" - checksum: 10c0/c558f11c4871d526498e49d07a84752d1800bf72ac0d3dad100309a2eaba24efbf56ea59af5137ff15e3a00280ebe588560534b0e894a4750f8b1411d8f78b84 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.24.6, @babel/parser@npm:^7.25.3": - version: 7.26.5 - resolution: "@babel/parser@npm:7.26.5" - dependencies: - "@babel/types": "npm:^7.26.5" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/2e77dd99ee028ee3c10fa03517ae1169f2432751adf71315e4dc0d90b61639d51760d622f418f6ac665ae4ea65f8485232a112ea0e76f18e5900225d3d19a61e - languageName: node - linkType: hard - -"@babel/parser@npm:^7.27.5": - version: 7.27.5 - resolution: "@babel/parser@npm:7.27.5" - dependencies: - "@babel/types": "npm:^7.27.3" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/f7faaebf21cc1f25d9ca8ac02c447ed38ef3460ea95be7ea760916dcf529476340d72a5a6010c6641d9ed9d12ad827c8424840277ec2295c5b082ba0f291220a - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.14.0": - version: 7.26.0 - resolution: "@babel/runtime@npm:7.26.0" - dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/12c01357e0345f89f4f7e8c0e81921f2a3e3e101f06e8eaa18a382b517376520cd2fa8c237726eb094dab25532855df28a7baaf1c26342b52782f6936b07c287 - languageName: node - linkType: hard - -"@babel/types@npm:^7.26.5": - version: 7.26.5 - resolution: "@babel/types@npm:7.26.5" - dependencies: - "@babel/helper-string-parser": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/0278053b69d7c2b8573aa36dc5242cad95f0d965e1c0ed21ccacac6330092e59ba5949753448f6d6eccf6ad59baaef270295cc05218352e060ea8c68388638c4 - languageName: node - linkType: hard - -"@babel/types@npm:^7.27.3": - version: 7.27.6 - resolution: "@babel/types@npm:7.27.6" - dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - checksum: 10c0/39d556be114f2a6d874ea25ad39826a9e3a0e98de0233ae6d932f6d09a4b222923a90a7274c635ed61f1ba49bbd345329226678800900ad1c8d11afabd573aaf - languageName: node - linkType: hard - -"@codemirror/autocomplete@npm:^6.0.0": - version: 6.18.4 - resolution: "@codemirror/autocomplete@npm:6.18.4" - dependencies: - "@codemirror/language": "npm:^6.0.0" - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.17.0" - "@lezer/common": "npm:^1.0.0" - checksum: 10c0/602ea9395b3ebbb258669d7a946f650cc734742d1f67fd277c804ae152411f198546a1dc0c64ff2fda12a46eb83d766540ab609d1e3afa817bfe8131d10dfbdb - languageName: node - linkType: hard - -"@codemirror/commands@npm:^6.0.0": - version: 6.8.0 - resolution: "@codemirror/commands@npm:6.8.0" - dependencies: - "@codemirror/language": "npm:^6.0.0" - "@codemirror/state": "npm:^6.4.0" - "@codemirror/view": "npm:^6.27.0" - "@lezer/common": "npm:^1.1.0" - checksum: 10c0/689f85a305f96fbe43df888c901411aefc1b937cfc8217f74d8d4d36d8bb343c5a7eae4f153391749d5fd9e49001338e39b898ce39de837d63bc83e2a6d8180d - languageName: node - linkType: hard - -"@codemirror/lang-json@npm:^6.0.1": - version: 6.0.1 - resolution: "@codemirror/lang-json@npm:6.0.1" - dependencies: - "@codemirror/language": "npm:^6.0.0" - "@lezer/json": "npm:^1.0.0" - checksum: 10c0/c70301ba43d44dbd1ff0ccab6ec6e3fb9825d61d4854b4839441a8144a9c96997acdad16d93199d157308dd80088a5e9f14b66f395c7e79f4dadc6b4e70ce8a8 - languageName: node - linkType: hard - -"@codemirror/language@npm:^6.0.0": - version: 6.10.8 - resolution: "@codemirror/language@npm:6.10.8" - dependencies: - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.23.0" - "@lezer/common": "npm:^1.1.0" - "@lezer/highlight": "npm:^1.0.0" - "@lezer/lr": "npm:^1.0.0" - style-mod: "npm:^4.0.0" - checksum: 10c0/b7d07bc4726046563d4cfcd5d26ae64300fbfa58d81c034674d25e346ace0b5b2a53446d0b246ff09f6b0111a7ff35d827f2d5cc4ef95de9dfd43e4d068fe3a7 - languageName: node - linkType: hard - -"@codemirror/lint@npm:^6.0.0": - version: 6.8.4 - resolution: "@codemirror/lint@npm:6.8.4" - dependencies: - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.35.0" - crelt: "npm:^1.0.5" - checksum: 10c0/2614f25c50061b8bea4a430d19b25dca03e3d3059ade0bbc5768d2a1ac1dbc2e653ccc810d951860e6bd9e37031c850f439054c6df6522d533d93984df68bc79 - languageName: node - linkType: hard - -"@codemirror/search@npm:^6.0.0": - version: 6.5.8 - resolution: "@codemirror/search@npm:6.5.8" - dependencies: - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.0.0" - crelt: "npm:^1.0.5" - checksum: 10c0/67a36fb0781427b23c39e223ecd9729b170a2e28874825b2d63b551761e620f2523707d7e593426b5cc4d5ea520ffb9026408de02a0aacfe55453e70e2d9b7a2 - languageName: node - linkType: hard - -"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.4.0, @codemirror/state@npm:^6.5.0": - version: 6.5.1 - resolution: "@codemirror/state@npm:6.5.1" - dependencies: - "@marijn/find-cluster-break": "npm:^1.0.0" - checksum: 10c0/94c4ab3a55f580a0549b81a2264521fa0381c3766e32093e43ab0c5e54948e71fbc9939883be2340b7b7ccd2646a49e96b234f644877aa33b088eed901f6de57 - languageName: node - linkType: hard - -"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.27.0, @codemirror/view@npm:^6.35.0": - version: 6.36.2 - resolution: "@codemirror/view@npm:6.36.2" - dependencies: - "@codemirror/state": "npm:^6.5.0" - style-mod: "npm:^4.1.0" - w3c-keyname: "npm:^2.2.4" - checksum: 10c0/321398fe16d8d072d5d8c1600f73a6a8b634a32d83faad8dc21d1388d86a53daaa06c7507e8e5d92bb732e99fd4aeb74a745716656f14a35e2c758ad14474038 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/aix-ppc64@npm:0.25.0" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/android-arm64@npm:0.25.0" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/android-arm@npm:0.25.0" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/android-x64@npm:0.25.0" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/darwin-arm64@npm:0.25.0" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/darwin-x64@npm:0.25.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/freebsd-arm64@npm:0.25.0" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/freebsd-x64@npm:0.25.0" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-arm64@npm:0.25.0" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-arm@npm:0.25.0" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-ia32@npm:0.25.0" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-loong64@npm:0.25.0" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-mips64el@npm:0.25.0" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-ppc64@npm:0.25.0" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-riscv64@npm:0.25.0" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-s390x@npm:0.25.0" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/linux-x64@npm:0.25.0" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/netbsd-arm64@npm:0.25.0" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/netbsd-x64@npm:0.25.0" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/openbsd-arm64@npm:0.25.0" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/openbsd-x64@npm:0.25.0" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/sunos-x64@npm:0.25.0" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/win32-arm64@npm:0.25.0" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/win32-ia32@npm:0.25.0" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.25.0": - version: 0.25.0 - resolution: "@esbuild/win32-x64@npm:0.25.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.1 - resolution: "@eslint-community/eslint-utils@npm:4.4.1" - dependencies: - eslint-visitor-keys: "npm:^3.4.3" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.7.0": - version: 4.7.0 - resolution: "@eslint-community/eslint-utils@npm:4.7.0" - dependencies: - eslint-visitor-keys: "npm:^3.4.3" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10c0/c0f4f2bd73b7b7a9de74b716a664873d08ab71ab439e51befe77d61915af41a81ecec93b408778b3a7856185244c34c2c8ee28912072ec14def84ba2dec70adf - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1": - version: 4.12.1 - resolution: "@eslint-community/regexpp@npm:4.12.1" - checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 - languageName: node - linkType: hard - -"@eslint/config-array@npm:^0.20.1": - version: 0.20.1 - resolution: "@eslint/config-array@npm:0.20.1" - dependencies: - "@eslint/object-schema": "npm:^2.1.6" - debug: "npm:^4.3.1" - minimatch: "npm:^3.1.2" - checksum: 10c0/709108c3925d83c2166024646829ab61ba5fa85c6568daefd32508899f46ed8dc36d7153042df6dcc7e58ad543bc93298b646575daecb5eb4e39a43d838dab42 - languageName: node - linkType: hard - -"@eslint/config-helpers@npm:^0.2.1": - version: 0.2.2 - resolution: "@eslint/config-helpers@npm:0.2.2" - checksum: 10c0/98f7cefe484bb754674585d9e73cf1414a3ab4fd0783c385465288d13eb1a8d8e7d7b0611259fc52b76b396c11a13517be5036d1f48eeb877f6f0a6b9c4f03ad - languageName: node - linkType: hard - -"@eslint/core@npm:^0.14.0": - version: 0.14.0 - resolution: "@eslint/core@npm:0.14.0" - dependencies: - "@types/json-schema": "npm:^7.0.15" - checksum: 10c0/259f279445834ba2d2cbcc18e9d43202a4011fde22f29d5fb802181d66e0f6f0bd1f6b4b4b46663451f545d35134498231bd5e656e18d9034a457824b92b7741 - languageName: node - linkType: hard - -"@eslint/core@npm:^0.15.0": - version: 0.15.0 - resolution: "@eslint/core@npm:0.15.0" - dependencies: - "@types/json-schema": "npm:^7.0.15" - checksum: 10c0/9882c69acfe29743ce473a619d5248589c6687561afaabe8ec8d7ffed07592db16edcca3af022f33ea92fe5f6cfbe3545ee53e89292579d22a944ebaeddcf72d - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^3.0.0": - version: 3.2.0 - resolution: "@eslint/eslintrc@npm:3.2.0" - dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^10.0.1" - globals: "npm:^14.0.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: 10c0/43867a07ff9884d895d9855edba41acf325ef7664a8df41d957135a81a477ff4df4196f5f74dc3382627e5cc8b7ad6b815c2cea1b58f04a75aced7c43414ab8b - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^3.3.1": - version: 3.3.1 - resolution: "@eslint/eslintrc@npm:3.3.1" - dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^10.0.1" - globals: "npm:^14.0.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: 10c0/b0e63f3bc5cce4555f791a4e487bf999173fcf27c65e1ab6e7d63634d8a43b33c3693e79f192cbff486d7df1be8ebb2bd2edc6e70ddd486cbfa84a359a3e3b41 - languageName: node - linkType: hard - -"@eslint/js@npm:9.29.0": - version: 9.29.0 - resolution: "@eslint/js@npm:9.29.0" - checksum: 10c0/d0ccf37063fa27a3fae9347cb044f84ca10b5a2fa19ffb2b3fedf3b96843ac1ff359ea9f0ab0e80f2f16fda4cb0dc61ea0fed0375090f050fe0a029e7d6de3a3 - languageName: node - linkType: hard - -"@eslint/object-schema@npm:^2.1.6": - version: 2.1.6 - resolution: "@eslint/object-schema@npm:2.1.6" - checksum: 10c0/b8cdb7edea5bc5f6a96173f8d768d3554a628327af536da2fc6967a93b040f2557114d98dbcdbf389d5a7b290985ad6a9ce5babc547f36fc1fde42e674d11a56 - languageName: node - linkType: hard - -"@eslint/plugin-kit@npm:^0.3.1": - version: 0.3.2 - resolution: "@eslint/plugin-kit@npm:0.3.2" - dependencies: - "@eslint/core": "npm:^0.15.0" - levn: "npm:^0.4.1" - checksum: 10c0/e069b0a46eb9fa595a1ac7dea4540a9daa493afba88875ee054e9117609c1c41555e779303cb4cff36cf88f603ba6eba2556a927e8ced77002828206ee17fc7e - languageName: node - linkType: hard - -"@humanfs/core@npm:^0.19.1": - version: 0.19.1 - resolution: "@humanfs/core@npm:0.19.1" - checksum: 10c0/aa4e0152171c07879b458d0e8a704b8c3a89a8c0541726c6b65b81e84fd8b7564b5d6c633feadc6598307d34564bd53294b533491424e8e313d7ab6c7bc5dc67 - languageName: node - linkType: hard - -"@humanfs/node@npm:^0.16.6": - version: 0.16.6 - resolution: "@humanfs/node@npm:0.16.6" - dependencies: - "@humanfs/core": "npm:^0.19.1" - "@humanwhocodes/retry": "npm:^0.3.0" - checksum: 10c0/8356359c9f60108ec204cbd249ecd0356667359b2524886b357617c4a7c3b6aace0fd5a369f63747b926a762a88f8a25bc066fa1778508d110195ce7686243e1 - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 - languageName: node - linkType: hard - -"@humanwhocodes/retry@npm:^0.3.0": - version: 0.3.1 - resolution: "@humanwhocodes/retry@npm:0.3.1" - checksum: 10c0/f0da1282dfb45e8120480b9e2e275e2ac9bbe1cf016d046fdad8e27cc1285c45bb9e711681237944445157b430093412b4446c1ab3fc4bb037861b5904101d3b - languageName: node - linkType: hard - -"@humanwhocodes/retry@npm:^0.4.2": - version: 0.4.2 - resolution: "@humanwhocodes/retry@npm:0.4.2" - checksum: 10c0/0235525d38f243bee3bf8b25ed395fbf957fb51c08adae52787e1325673071abe856c7e18e530922ed2dd3ce12ed82ba01b8cee0279ac52a3315fcdc3a69ef0c - languageName: node - linkType: hard - -"@intlify/bundle-utils@npm:^10.0.1": - version: 10.0.1 - resolution: "@intlify/bundle-utils@npm:10.0.1" - dependencies: - "@intlify/message-compiler": "npm:^11.1.2" - "@intlify/shared": "npm:^11.1.2" - acorn: "npm:^8.8.2" - escodegen: "npm:^2.1.0" - estree-walker: "npm:^2.0.2" - jsonc-eslint-parser: "npm:^2.3.0" - mlly: "npm:^1.2.0" - source-map-js: "npm:^1.0.1" - yaml-eslint-parser: "npm:^1.2.2" - peerDependenciesMeta: - petite-vue-i18n: - optional: true - vue-i18n: - optional: true - checksum: 10c0/fb24c4d14c1f2e149d621e5a56bdd9e1d91ce2e00f62d56493e89b8eec45bd81bf23e147a85ee3aa7f84289602cbb8b8b17bdbeed081dd99285cfd31d5d62ca0 - languageName: node - linkType: hard - -"@intlify/core-base@npm:10.0.5": - version: 10.0.5 - resolution: "@intlify/core-base@npm:10.0.5" - dependencies: - "@intlify/message-compiler": "npm:10.0.5" - "@intlify/shared": "npm:10.0.5" - checksum: 10c0/595c9623dce01f8d4ac5ad4b9086b1927956c63ad18098434a0a991e69147c6284619338bc4a9fe6f3c2a4c666d957a2c19ecfe61f3cc30abe130e0d80e17f94 - languageName: node - linkType: hard - -"@intlify/core-base@npm:11.1.6": - version: 11.1.6 - resolution: "@intlify/core-base@npm:11.1.6" - dependencies: - "@intlify/message-compiler": "npm:11.1.6" - "@intlify/shared": "npm:11.1.6" - checksum: 10c0/33348898b95cc67923dd46adac6860ce768b78d5215de7cd5e8e1b3fc07baf9b8e8c75c59d0b8e95cb8360a805e6ab52656ac8a9107b01af9561196f4b539bac - languageName: node - linkType: hard - -"@intlify/core-base@npm:^11.0.0": - version: 11.1.3 - resolution: "@intlify/core-base@npm:11.1.3" - dependencies: - "@intlify/message-compiler": "npm:11.1.3" - "@intlify/shared": "npm:11.1.3" - checksum: 10c0/b7a454092851e426ad1ccae7adebd08689c12db705ecbeffc08d168af112e60f4ea94614c38a843bdb57eeada3a14c43bd7e49a41817129a65025595fce7c577 - languageName: node - linkType: hard - -"@intlify/eslint-plugin-vue-i18n@npm:^4.0.1": - version: 4.0.1 - resolution: "@intlify/eslint-plugin-vue-i18n@npm:4.0.1" - dependencies: - "@eslint/eslintrc": "npm:^3.0.0" - "@intlify/core-base": "npm:^11.0.0" - "@intlify/message-compiler": "npm:^11.0.0" - debug: "npm:^4.3.4" - eslint-compat-utils: "npm:^0.6.0" - glob: "npm:^10.3.3" - globals: "npm:^16.0.0" - ignore: "npm:^7.0.0" - import-fresh: "npm:^3.3.0" - is-language-code: "npm:^3.1.0" - js-yaml: "npm:^4.1.0" - json5: "npm:^2.2.3" - lodash: "npm:^4.17.21" - parse5: "npm:^7.1.2" - semver: "npm:^7.5.4" - synckit: "npm:^0.10.0" - peerDependencies: - eslint: ^8.0.0 || ^9.0.0-0 - jsonc-eslint-parser: ^2.3.0 - vue-eslint-parser: ^10.0.0 - yaml-eslint-parser: ^1.2.2 - checksum: 10c0/f53ee650081b1511ec3134f1fdfc85ff4478484df4354446926dec461705f232ded64ad61e816cd1bb53ebccd8893bba23819f2a6fbb7613cd27fda0532c670b - languageName: node - linkType: hard - -"@intlify/message-compiler@npm:10.0.5": - version: 10.0.5 - resolution: "@intlify/message-compiler@npm:10.0.5" - dependencies: - "@intlify/shared": "npm:10.0.5" - source-map-js: "npm:^1.0.2" - checksum: 10c0/66312b863fccd822be4f0fda485685a0eb9f500e84023689d0f2540be32159e2c4e828d3ada4923c78c219d0f31a9bb41595da8f40e0fdbd45037db393198ec2 - languageName: node - linkType: hard - -"@intlify/message-compiler@npm:11.1.3, @intlify/message-compiler@npm:^11.0.0, @intlify/message-compiler@npm:^11.1.2": - version: 11.1.3 - resolution: "@intlify/message-compiler@npm:11.1.3" - dependencies: - "@intlify/shared": "npm:11.1.3" - source-map-js: "npm:^1.0.2" - checksum: 10c0/710e426e9413caebcff41625ccd4992c3f78765ac361e307e79a278922a1d78bccf00a8e7a00494833079f5e683762e72e9a2b447b0792ed76664ea15b64ddfd - languageName: node - linkType: hard - -"@intlify/message-compiler@npm:11.1.6": - version: 11.1.6 - resolution: "@intlify/message-compiler@npm:11.1.6" - dependencies: - "@intlify/shared": "npm:11.1.6" - source-map-js: "npm:^1.0.2" - checksum: 10c0/c0febb54a4694a7a4af60c37dc1925652c436914a51fb23097075c881121b9bd4186536611c716526b2de6174aa019549ce86e908001c80cd1c04d9b3deeb745 - languageName: node - linkType: hard - -"@intlify/shared@npm:10.0.5, @intlify/shared@npm:^10.0.0": - version: 10.0.5 - resolution: "@intlify/shared@npm:10.0.5" - checksum: 10c0/4435a714e4a324fd2f40c01be3f55abc7bd87e6280b25e6fce720178f8cf5e01fece538c2fbd72fca64471589f46531dd89bc772455ffad831c7e43f01655097 - languageName: node - linkType: hard - -"@intlify/shared@npm:11.1.3, @intlify/shared@npm:^11.1.2": - version: 11.1.3 - resolution: "@intlify/shared@npm:11.1.3" - checksum: 10c0/17ee348d5c92ff3b2de054e6e771e3592a96ea27ca196884951a7490ee675987c9737e5658e952d0aece1670730abb2f987eef32de9f42ef0eef65a28c1c781d - languageName: node - linkType: hard - -"@intlify/shared@npm:11.1.6": - version: 11.1.6 - resolution: "@intlify/shared@npm:11.1.6" - checksum: 10c0/5223159dee51395152c87d3b13ad0487b03944c2dbe32968345fe5350e4bfa991ff9ecb2cd69139f04b8b778176b4c4e14c6e25b80bc0fee071bf8cdf81d788d - languageName: node - linkType: hard - -"@intlify/unplugin-vue-i18n@npm:^6.0.8": - version: 6.0.8 - resolution: "@intlify/unplugin-vue-i18n@npm:6.0.8" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - "@intlify/bundle-utils": "npm:^10.0.1" - "@intlify/shared": "npm:^11.1.2" - "@intlify/vue-i18n-extensions": "npm:^8.0.0" - "@rollup/pluginutils": "npm:^5.1.0" - "@typescript-eslint/scope-manager": "npm:^8.13.0" - "@typescript-eslint/typescript-estree": "npm:^8.13.0" - debug: "npm:^4.3.3" - fast-glob: "npm:^3.2.12" - js-yaml: "npm:^4.1.0" - json5: "npm:^2.2.3" - pathe: "npm:^1.0.0" - picocolors: "npm:^1.0.0" - source-map-js: "npm:^1.0.2" - unplugin: "npm:^1.1.0" - vue: "npm:^3.4" - peerDependencies: - petite-vue-i18n: "*" - vue: ^3.2.25 - vue-i18n: "*" - peerDependenciesMeta: - petite-vue-i18n: - optional: true - vue-i18n: - optional: true - checksum: 10c0/55c7068bbd366d683cb65a26088e181084e89849f39b6ce1cb2bf3804ba840b3af22b4e3187d60933401bd4f0ed252005721acfa2d24a60f1e4163a36e0d7d8a - languageName: node - linkType: hard - -"@intlify/vue-i18n-extensions@npm:^8.0.0": - version: 8.0.0 - resolution: "@intlify/vue-i18n-extensions@npm:8.0.0" - dependencies: - "@babel/parser": "npm:^7.24.6" - "@intlify/shared": "npm:^10.0.0" - "@vue/compiler-dom": "npm:^3.2.45" - vue-i18n: "npm:^10.0.0" - peerDependencies: - "@intlify/shared": ^9.0.0 || ^10.0.0 || ^11.0.0 - "@vue/compiler-dom": ^3.0.0 - vue: ^3.0.0 - vue-i18n: ^9.0.0 || ^10.0.0 || ^11.0.0 - peerDependenciesMeta: - "@intlify/shared": - optional: true - "@vue/compiler-dom": - optional: true - vue: - optional: true - vue-i18n: - optional: true - checksum: 10c0/8e4261dca1db9f840767e356a0079400790ec14aca204e7c6a354d1ca23387bbeeb9262df04771c1f3f0bf837ea45b44ba5089ba231d583f362c84388a3f1731 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e - languageName: node - linkType: hard - -"@isaacs/fs-minipass@npm:^4.0.0": - version: 4.0.1 - resolution: "@isaacs/fs-minipass@npm:4.0.1" - dependencies: - minipass: "npm:^7.0.4" - checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.0 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" - checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 - languageName: node - linkType: hard - -"@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.1.0, @lezer/common@npm:^1.2.0, @lezer/common@npm:^1.2.3": - version: 1.2.3 - resolution: "@lezer/common@npm:1.2.3" - checksum: 10c0/fe9f8e111080ef94037a34ca2af1221c8d01c1763ba5ecf708a286185c76119509a5d19d924c8842172716716ddce22d7834394670c4a9432f0ba9f3b7c0f50d - languageName: node - linkType: hard - -"@lezer/highlight@npm:^1.0.0": - version: 1.2.1 - resolution: "@lezer/highlight@npm:1.2.1" - dependencies: - "@lezer/common": "npm:^1.0.0" - checksum: 10c0/51b4c08596a0dfeec6a7b7ed90a7f2743ab42e7e8ff8b89707fd042860e4e133dbd8243639fcaf077305ae6c303aa74e69794015eb16cb34741f5ac6721f283c - languageName: node - linkType: hard - -"@lezer/json@npm:^1.0.0": - version: 1.0.3 - resolution: "@lezer/json@npm:1.0.3" - dependencies: - "@lezer/common": "npm:^1.2.0" - "@lezer/highlight": "npm:^1.0.0" - "@lezer/lr": "npm:^1.0.0" - checksum: 10c0/e91c957cc0825e927b55fbcd233d7ee0b39f9c2a89d9475489f394b7eba2b59e5f480d157a12d5cd6ae6f14bc99f9ccd8e8113baad498199ef1b13c49105f546 - languageName: node - linkType: hard - -"@lezer/lr@npm:^1.0.0": - version: 1.4.2 - resolution: "@lezer/lr@npm:1.4.2" - dependencies: - "@lezer/common": "npm:^1.0.0" - checksum: 10c0/22bb5d0d4b33d0de5eb0706b7e5b5f2d20f570e112d9110009bd35b62ff10f2eb4eff8da4cf373dd4ddf5e06a304120b8f039add7ed9997c981c13945d5329cd - languageName: node - linkType: hard - -"@marijn/find-cluster-break@npm:^1.0.0": - version: 1.0.2 - resolution: "@marijn/find-cluster-break@npm:1.0.2" - checksum: 10c0/1a17a60b16083cc5f7ce89d7b7d8aa87ce4099723e3e9e34e229ef2cd8a980e69d481ca8ee90ffedfec5119af1aed581642fb60ed0365e7e90634c81ea6b630f - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/agent@npm:3.0.0" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/fs@npm:4.0.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 - languageName: node - linkType: hard - -"@nuxt/kit@npm:^3.17.2": - version: 3.17.5 - resolution: "@nuxt/kit@npm:3.17.5" - dependencies: - c12: "npm:^3.0.4" - consola: "npm:^3.4.2" - defu: "npm:^6.1.4" - destr: "npm:^2.0.5" - errx: "npm:^0.1.0" - exsolve: "npm:^1.0.5" - ignore: "npm:^7.0.5" - jiti: "npm:^2.4.2" - klona: "npm:^2.0.6" - knitwork: "npm:^1.2.0" - mlly: "npm:^1.7.4" - ohash: "npm:^2.0.11" - pathe: "npm:^2.0.3" - pkg-types: "npm:^2.1.0" - scule: "npm:^1.3.0" - semver: "npm:^7.7.2" - std-env: "npm:^3.9.0" - tinyglobby: "npm:^0.2.14" - ufo: "npm:^1.6.1" - unctx: "npm:^2.4.1" - unimport: "npm:^5.0.1" - untyped: "npm:^2.0.0" - checksum: 10c0/bbbdd412e8b256228a3ff34645d7286de05d6fde06d79e6d1a8b84f465c1e0f4cae42f855779704b19bbad7c88d15fc945cc201de3f6abd51bcf980912223df0 - languageName: node - linkType: hard - -"@parcel/watcher-android-arm64@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-android-arm64@npm:2.5.0" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@parcel/watcher-darwin-arm64@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-darwin-arm64@npm:2.5.0" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@parcel/watcher-darwin-x64@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-darwin-x64@npm:2.5.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@parcel/watcher-freebsd-x64@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-freebsd-x64@npm:2.5.0" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@parcel/watcher-linux-arm-glibc@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-linux-arm-glibc@npm:2.5.0" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@parcel/watcher-linux-arm-musl@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-linux-arm-musl@npm:2.5.0" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - -"@parcel/watcher-linux-arm64-glibc@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.5.0" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@parcel/watcher-linux-arm64-musl@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-linux-arm64-musl@npm:2.5.0" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@parcel/watcher-linux-x64-glibc@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-linux-x64-glibc@npm:2.5.0" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@parcel/watcher-linux-x64-musl@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-linux-x64-musl@npm:2.5.0" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@parcel/watcher-win32-arm64@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-win32-arm64@npm:2.5.0" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@parcel/watcher-win32-ia32@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-win32-ia32@npm:2.5.0" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@parcel/watcher-win32-x64@npm:2.5.0": - version: 2.5.0 - resolution: "@parcel/watcher-win32-x64@npm:2.5.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@parcel/watcher@npm:^2.4.1": - version: 2.5.0 - resolution: "@parcel/watcher@npm:2.5.0" - dependencies: - "@parcel/watcher-android-arm64": "npm:2.5.0" - "@parcel/watcher-darwin-arm64": "npm:2.5.0" - "@parcel/watcher-darwin-x64": "npm:2.5.0" - "@parcel/watcher-freebsd-x64": "npm:2.5.0" - "@parcel/watcher-linux-arm-glibc": "npm:2.5.0" - "@parcel/watcher-linux-arm-musl": "npm:2.5.0" - "@parcel/watcher-linux-arm64-glibc": "npm:2.5.0" - "@parcel/watcher-linux-arm64-musl": "npm:2.5.0" - "@parcel/watcher-linux-x64-glibc": "npm:2.5.0" - "@parcel/watcher-linux-x64-musl": "npm:2.5.0" - "@parcel/watcher-win32-arm64": "npm:2.5.0" - "@parcel/watcher-win32-ia32": "npm:2.5.0" - "@parcel/watcher-win32-x64": "npm:2.5.0" - detect-libc: "npm:^1.0.3" - is-glob: "npm:^4.0.3" - micromatch: "npm:^4.0.5" - node-addon-api: "npm:^7.0.0" - node-gyp: "npm:latest" - dependenciesMeta: - "@parcel/watcher-android-arm64": - optional: true - "@parcel/watcher-darwin-arm64": - optional: true - "@parcel/watcher-darwin-x64": - optional: true - "@parcel/watcher-freebsd-x64": - optional: true - "@parcel/watcher-linux-arm-glibc": - optional: true - "@parcel/watcher-linux-arm-musl": - optional: true - "@parcel/watcher-linux-arm64-glibc": - optional: true - "@parcel/watcher-linux-arm64-musl": - optional: true - "@parcel/watcher-linux-x64-glibc": - optional: true - "@parcel/watcher-linux-x64-musl": - optional: true - "@parcel/watcher-win32-arm64": - optional: true - "@parcel/watcher-win32-ia32": - optional: true - "@parcel/watcher-win32-x64": - optional: true - checksum: 10c0/9bad727d8b11e5d150ec47459254544c583adaa47d047b8ef65e1c74aede1a0767dc7fc6b8997649dae07318d6ef39caba6a1c405d306398d5bcd47074ec5d29 - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd - languageName: node - linkType: hard - -"@pkgr/core@npm:^0.2.0": - version: 0.2.4 - resolution: "@pkgr/core@npm:0.2.4" - checksum: 10c0/2528a443bbbef5d4686614e1d73f834f19ccbc975f62b2a64974a6b97bcdf677b9c5e8948e04808ac4f0d853e2f422adfaae2a06e9e9f4f5cf8af76f1adf8dc1 - languageName: node - linkType: hard - -"@playwright/test@npm:^1.53.1": - version: 1.53.1 - resolution: "@playwright/test@npm:1.53.1" - dependencies: - playwright: "npm:1.53.1" - bin: - playwright: cli.js - checksum: 10c0/f2ef7899ca6bc178c9f2ba6c8633d0bbeb5ba135048e9df01ecb949c6f743811ba5ef76d495f619454074c81dbfa28be12e4c0a1224bb2af0d4cb403182c716f - languageName: node - linkType: hard - -"@quasar/extras@npm:^1.17.0": - version: 1.17.0 - resolution: "@quasar/extras@npm:1.17.0" - checksum: 10c0/b303d3e1f71f63302eb89659cca48cdf7eace53963bb9d1b55611ebe3f7d76c4557d0c754983de90ef1a681c31667788bccf55881e5bffb50ca18a4e93b1ff43 - languageName: node - linkType: hard - -"@quasar/vite-plugin@npm:^1.9.0": - version: 1.9.0 - resolution: "@quasar/vite-plugin@npm:1.9.0" - peerDependencies: - "@vitejs/plugin-vue": ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - quasar: ^2.16.0 - vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 - vue: ^3.0.0 - checksum: 10c0/dbcc1a874be0a86314d738f661acaff39bcd6fb129dba00d90f904b00f252c23246ab25e5ac10cfdd73abb320b2357d2af08d48c6f0d503a2400f4816ff1b45d - languageName: node - linkType: hard - -"@replit/codemirror-vim@npm:^6.3.0": - version: 6.3.0 - resolution: "@replit/codemirror-vim@npm:6.3.0" - peerDependencies: - "@codemirror/commands": 6.x.x - "@codemirror/language": 6.x.x - "@codemirror/search": 6.x.x - "@codemirror/state": 6.x.x - "@codemirror/view": 6.x.x - checksum: 10c0/ba222b8fb85f9e4f4e1ef08271c00a48ba5c35c16d8731daa3fa8f2b004a3a5ea51599d485f58be871b769ffd0e8c84b086dcd0071e4813b57497cc998f1b9ae - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^5.1.0": - version: 5.1.4 - resolution: "@rollup/pluginutils@npm:5.1.4" - dependencies: - "@types/estree": "npm:^1.0.0" - estree-walker: "npm:^2.0.2" - picomatch: "npm:^4.0.2" - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - checksum: 10c0/6d58fbc6f1024eb4b087bc9bf59a1d655a8056a60c0b4021d3beaeec3f0743503f52467fd89d2cf0e7eccf2831feb40a05ad541a17637ea21ba10b21c2004deb - languageName: node - linkType: hard - -"@rollup/rollup-android-arm-eabi@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.40.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@rollup/rollup-android-arm-eabi@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.44.0" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@rollup/rollup-android-arm64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-android-arm64@npm:4.40.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-android-arm64@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-android-arm64@npm:4.44.0" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-arm64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-darwin-arm64@npm:4.40.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-arm64@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.44.0" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-x64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-darwin-x64@npm:4.40.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-x64@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.44.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-arm64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.40.1" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-arm64@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.44.0" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-x64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-freebsd-x64@npm:4.40.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-x64@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-freebsd-x64@npm:4.44.0" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-gnueabihf@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.40.1" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-gnueabihf@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.44.0" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-musleabihf@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.40.1" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-musleabihf@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.44.0" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.40.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-gnu@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.44.0" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-musl@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.40.1" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-musl@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.44.0" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-loongarch64-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.40.1" - conditions: os=linux & cpu=loong64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-loongarch64-gnu@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.44.0" - conditions: os=linux & cpu=loong64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.1" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.44.0" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.40.1" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-gnu@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.44.0" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-musl@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.40.1" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-musl@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.44.0" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-s390x-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.40.1" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-s390x-gnu@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.44.0" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.40.1" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-gnu@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.44.0" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-musl@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.40.1" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-musl@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.44.0" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-win32-arm64-msvc@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.40.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-arm64-msvc@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.44.0" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-ia32-msvc@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.40.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@rollup/rollup-win32-ia32-msvc@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.44.0" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-msvc@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.40.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-msvc@npm:4.44.0": - version: 4.44.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.44.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@tauri-apps/api@npm:^2.0.0": - version: 2.2.0 - resolution: "@tauri-apps/api@npm:2.2.0" - checksum: 10c0/0ff0d9735c33d71c934e34045ef3077831fa98de25a42dc4c343120b482c8c114b87ef83dc02195923c23226fe6b8cb3e6bbaa099ab64d741346ba80c164435a - languageName: node - linkType: hard - -"@tauri-apps/api@npm:^2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/api@npm:2.5.0" - checksum: 10c0/8eeb28049d48f5f89a5419cdf313bb159305204b193a5f27ebddbe0704ff43037c8b2e78518de831d7393e00178f0c0ac66cef1a57b99c632de71eca29f562c0 - languageName: node - linkType: hard - -"@tauri-apps/cli-darwin-arm64@npm:2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/cli-darwin-arm64@npm:2.5.0" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@tauri-apps/cli-darwin-x64@npm:2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/cli-darwin-x64@npm:2.5.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@tauri-apps/cli-linux-arm-gnueabihf@npm:2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/cli-linux-arm-gnueabihf@npm:2.5.0" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@tauri-apps/cli-linux-arm64-gnu@npm:2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/cli-linux-arm64-gnu@npm:2.5.0" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@tauri-apps/cli-linux-arm64-musl@npm:2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/cli-linux-arm64-musl@npm:2.5.0" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@tauri-apps/cli-linux-riscv64-gnu@npm:2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/cli-linux-riscv64-gnu@npm:2.5.0" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@tauri-apps/cli-linux-x64-gnu@npm:2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/cli-linux-x64-gnu@npm:2.5.0" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@tauri-apps/cli-linux-x64-musl@npm:2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/cli-linux-x64-musl@npm:2.5.0" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@tauri-apps/cli-win32-arm64-msvc@npm:2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/cli-win32-arm64-msvc@npm:2.5.0" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@tauri-apps/cli-win32-ia32-msvc@npm:2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/cli-win32-ia32-msvc@npm:2.5.0" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@tauri-apps/cli-win32-x64-msvc@npm:2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/cli-win32-x64-msvc@npm:2.5.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@tauri-apps/cli@npm:^2.5.0": - version: 2.5.0 - resolution: "@tauri-apps/cli@npm:2.5.0" - dependencies: - "@tauri-apps/cli-darwin-arm64": "npm:2.5.0" - "@tauri-apps/cli-darwin-x64": "npm:2.5.0" - "@tauri-apps/cli-linux-arm-gnueabihf": "npm:2.5.0" - "@tauri-apps/cli-linux-arm64-gnu": "npm:2.5.0" - "@tauri-apps/cli-linux-arm64-musl": "npm:2.5.0" - "@tauri-apps/cli-linux-riscv64-gnu": "npm:2.5.0" - "@tauri-apps/cli-linux-x64-gnu": "npm:2.5.0" - "@tauri-apps/cli-linux-x64-musl": "npm:2.5.0" - "@tauri-apps/cli-win32-arm64-msvc": "npm:2.5.0" - "@tauri-apps/cli-win32-ia32-msvc": "npm:2.5.0" - "@tauri-apps/cli-win32-x64-msvc": "npm:2.5.0" - dependenciesMeta: - "@tauri-apps/cli-darwin-arm64": - optional: true - "@tauri-apps/cli-darwin-x64": - optional: true - "@tauri-apps/cli-linux-arm-gnueabihf": - optional: true - "@tauri-apps/cli-linux-arm64-gnu": - optional: true - "@tauri-apps/cli-linux-arm64-musl": - optional: true - "@tauri-apps/cli-linux-riscv64-gnu": - optional: true - "@tauri-apps/cli-linux-x64-gnu": - optional: true - "@tauri-apps/cli-linux-x64-musl": - optional: true - "@tauri-apps/cli-win32-arm64-msvc": - optional: true - "@tauri-apps/cli-win32-ia32-msvc": - optional: true - "@tauri-apps/cli-win32-x64-msvc": - optional: true - bin: - tauri: tauri.js - checksum: 10c0/5ce96349371692b7d6c6b9c20af6b137f57373335331d806904e3e37d0a4feac2bbd2fd394bfcffcc2d352ba25b579142e784e18946a83a405a69912078d33bb - languageName: node - linkType: hard - -"@tauri-apps/plugin-clipboard-manager@npm:^2.2.3": - version: 2.2.3 - resolution: "@tauri-apps/plugin-clipboard-manager@npm:2.2.3" - dependencies: - "@tauri-apps/api": "npm:^2.0.0" - checksum: 10c0/d42bd59d9141319aa0e6a4dfffc4e734cc10bff0ba7d4f0e930718d45c3a9f23698f93aff78b4f87799d0b0fc4fb95d134d08a8c264ccf4f7003864bebc40ecd - languageName: node - linkType: hard - -"@tauri-apps/plugin-dialog@npm:^2.2.2": - version: 2.2.2 - resolution: "@tauri-apps/plugin-dialog@npm:2.2.2" - dependencies: - "@tauri-apps/api": "npm:^2.0.0" - checksum: 10c0/d08a30c35d93bb99ac9f8a33c98d8e4bab83308346b8db0ecf54ad8dffc798623fc4db16fb4c40167b905d894012e04577106b96b2fcccb53960d5a9544e8ccd - languageName: node - linkType: hard - -"@tauri-apps/plugin-fs@npm:^2.3.0": - version: 2.3.0 - resolution: "@tauri-apps/plugin-fs@npm:2.3.0" - dependencies: - "@tauri-apps/api": "npm:^2.0.0" - checksum: 10c0/be5762753ef11bb08e5f79f9366fd30fd5587f0287ce35d16976b5b3236e24ac94f3e476b7d75c8cbe4d4174c1ff9a59e6918e8f61c765a8f36001c709061d92 - languageName: node - linkType: hard - -"@tauri-apps/plugin-opener@npm:^2.3.0": - version: 2.3.0 - resolution: "@tauri-apps/plugin-opener@npm:2.3.0" - dependencies: - "@tauri-apps/api": "npm:^2.0.0" - checksum: 10c0/6b4e9cd572eb17e528e41814356bd2ea0c2ec5a5858e8087ba19f9e2bb769c513d4f262b222e4347555ec3ddc5289f11bc4e62e6860f2525840570789c45bf27 - languageName: node - linkType: hard - -"@tauri-apps/plugin-process@npm:^2.2.2": - version: 2.2.2 - resolution: "@tauri-apps/plugin-process@npm:2.2.2" - dependencies: - "@tauri-apps/api": "npm:^2.0.0" - checksum: 10c0/9621e042e50606cf94bf05c571d8391c83a6a040e262af472025fc1c0a90e262e2a34f9083d4bd62617a9865790f843c9a3ffaf7c0e04ca0e6337c8249e1f647 - languageName: node - linkType: hard - -"@tauri-apps/plugin-updater@npm:^2.8.1": - version: 2.8.1 - resolution: "@tauri-apps/plugin-updater@npm:2.8.1" - dependencies: - "@tauri-apps/api": "npm:^2.0.0" - checksum: 10c0/0f36fd7a2461ec793f2ee1b82b453c67f9d054db0236556f0cbfd256d6ca13bd19a7824db08aa8a45f47a9f015cb3aad1f193cb5cbf05347d8757410cbc27090 - languageName: node - linkType: hard - -"@types/chai@npm:^5.2.2": - version: 5.2.2 - resolution: "@types/chai@npm:5.2.2" - dependencies: - "@types/deep-eql": "npm:*" - checksum: 10c0/49282bf0e8246800ebb36f17256f97bd3a8c4fb31f92ad3c0eaa7623518d7e87f1eaad4ad206960fcaf7175854bdff4cb167e4fe96811e0081b4ada83dd533ec - languageName: node - linkType: hard - -"@types/deep-eql@npm:*": - version: 4.0.2 - resolution: "@types/deep-eql@npm:4.0.2" - checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844 - languageName: node - linkType: hard - -"@types/estree@npm:1.0.7": - version: 1.0.7 - resolution: "@types/estree@npm:1.0.7" - checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c - languageName: node - linkType: hard - -"@types/estree@npm:1.0.8": - version: 1.0.8 - resolution: "@types/estree@npm:1.0.8" - checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 - languageName: node - linkType: hard - -"@types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": - version: 1.0.6 - resolution: "@types/estree@npm:1.0.6" - checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a - languageName: node - linkType: hard - -"@types/json-bigint@npm:^1.0.4": - version: 1.0.4 - resolution: "@types/json-bigint@npm:1.0.4" - checksum: 10c0/bb567bac8d64f541abb3cb716d5c699c460b9aa4a9fc5fc81a3cee9cb57fe8c03914022049dcdadff213972979a5d08267405d55d2ed6aa95d3558f08347008a - languageName: node - linkType: hard - -"@types/json-schema@npm:^7.0.15": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db - languageName: node - linkType: hard - -"@types/node-fetch@npm:^2.6.12": - version: 2.6.12 - resolution: "@types/node-fetch@npm:2.6.12" - dependencies: - "@types/node": "npm:*" - form-data: "npm:^4.0.0" - checksum: 10c0/7693acad5499b7df2d1727d46cff092a63896dc04645f36b973dd6dd754a59a7faba76fcb777bdaa35d80625c6a9dd7257cca9c401a4bab03b04480cda7fd1af - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 22.13.8 - resolution: "@types/node@npm:22.13.8" - dependencies: - undici-types: "npm:~6.20.0" - checksum: 10c0/bfc92b734a9dce6ac5daee0a52feccdf5dcb3804d895e4bc5384e2f4644612b8801725cd03c8c3c0888fb5eeb16b875877ac44b77641e0196dc1a837b1c2a366 - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/eslint-plugin@npm:8.34.1" - dependencies: - "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.34.1" - "@typescript-eslint/type-utils": "npm:8.34.1" - "@typescript-eslint/utils": "npm:8.34.1" - "@typescript-eslint/visitor-keys": "npm:8.34.1" - graphemer: "npm:^1.4.0" - ignore: "npm:^7.0.0" - natural-compare: "npm:^1.4.0" - ts-api-utils: "npm:^2.1.0" - peerDependencies: - "@typescript-eslint/parser": ^8.34.1 - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/f1c9f25e4fe4b59622312dfa0ca1e80fa7945296ba5c04362a5fda084a17e23a6b98dac331f5a13bcb1ba34a2b598a3f5c41aa288f0c51fe60196e912954e56a - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/parser@npm:8.34.1" - dependencies: - "@typescript-eslint/scope-manager": "npm:8.34.1" - "@typescript-eslint/types": "npm:8.34.1" - "@typescript-eslint/typescript-estree": "npm:8.34.1" - "@typescript-eslint/visitor-keys": "npm:8.34.1" - debug: "npm:^4.3.4" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/bf8070245d53ef6926ff6630bb72f245923f545304e2a61508fb944802a83fed8eab961d9010956d07999d51afdfbbec82aea9d6185295551a7c17c00d759183 - languageName: node - linkType: hard - -"@typescript-eslint/project-service@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/project-service@npm:8.34.1" - dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.34.1" - "@typescript-eslint/types": "npm:^8.34.1" - debug: "npm:^4.3.4" - peerDependencies: - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/9333a890625f6777054db17a6b299281ae7502bb7615261d15b885a75b8cf65fc91591389c93b37ecd14b651d8e94851dac8718e5dcc8ed0600533535dae855c - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/scope-manager@npm:8.34.1" - dependencies: - "@typescript-eslint/types": "npm:8.34.1" - "@typescript-eslint/visitor-keys": "npm:8.34.1" - checksum: 10c0/2af608fa3900f4726322e33bf4f3a376fdace3ac0f310cf7d9256bbc2905c3896138176a47dd195d2c2229f27fe43f5deb4bc7729db2eb18389926dedea78077 - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:^8.13.0": - version: 8.20.0 - resolution: "@typescript-eslint/scope-manager@npm:8.20.0" - dependencies: - "@typescript-eslint/types": "npm:8.20.0" - "@typescript-eslint/visitor-keys": "npm:8.20.0" - checksum: 10c0/a8074768d06c863169294116624a45c19377ff0b8635ad5fa4ae673b43cf704d1b9b79384ceef0ff0abb78b107d345cd90fe5572354daf6ad773fe462ee71e6a - languageName: node - linkType: hard - -"@typescript-eslint/tsconfig-utils@npm:8.34.1, @typescript-eslint/tsconfig-utils@npm:^8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/tsconfig-utils@npm:8.34.1" - peerDependencies: - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/8d1ead8b7c279b48e2ed96f083ec119a9aeea1ca9cdd40576ec271b996b9fd8cfa0ddb0aafbb4e14bc27fc62c69c5be66d39b1de68eab9ddd7f1861da267423d - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/type-utils@npm:8.34.1" - dependencies: - "@typescript-eslint/typescript-estree": "npm:8.34.1" - "@typescript-eslint/utils": "npm:8.34.1" - debug: "npm:^4.3.4" - ts-api-utils: "npm:^2.1.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/502a2cdfe47f1f34206c747b5a70e0242dd99f570511db3dda9c5f999d9abadfbbb1dfa82a1fa437a1689d232715412e61c97d95f19c9314ba5ad23196b4096d - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:8.20.0": - version: 8.20.0 - resolution: "@typescript-eslint/types@npm:8.20.0" - checksum: 10c0/21292d4ca089897015d2bf5ab99909a7b362902f63f4ba10696676823b50d00c7b4cd093b4b43fba01d12bc3feca3852d2c28528c06d8e45446b7477887dbee7 - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:8.34.1, @typescript-eslint/types@npm:^8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/types@npm:8.34.1" - checksum: 10c0/db1b3dce6a70b28ddb13c76fbb5983240d9395656df5f7cbd99bfd9905e39c0dab2132870f01dbc406b48739c437f7d344a879a824cedaba81b91a53110dc23a - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/typescript-estree@npm:8.34.1" - dependencies: - "@typescript-eslint/project-service": "npm:8.34.1" - "@typescript-eslint/tsconfig-utils": "npm:8.34.1" - "@typescript-eslint/types": "npm:8.34.1" - "@typescript-eslint/visitor-keys": "npm:8.34.1" - debug: "npm:^4.3.4" - fast-glob: "npm:^3.3.2" - is-glob: "npm:^4.0.3" - minimatch: "npm:^9.0.4" - semver: "npm:^7.6.0" - ts-api-utils: "npm:^2.1.0" - peerDependencies: - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/4ee7249db91b9840361f34f80b7b6d646a3af159c7298d79a33d8a11c98792fd3a395343e5e17e0fa29529e8f0113bac8baadcef90d1e140bd736a48f0485042 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:^8.13.0": - version: 8.20.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.20.0" - dependencies: - "@typescript-eslint/types": "npm:8.20.0" - "@typescript-eslint/visitor-keys": "npm:8.20.0" - debug: "npm:^4.3.4" - fast-glob: "npm:^3.3.2" - is-glob: "npm:^4.0.3" - minimatch: "npm:^9.0.4" - semver: "npm:^7.6.0" - ts-api-utils: "npm:^2.0.0" - peerDependencies: - typescript: ">=4.8.4 <5.8.0" - checksum: 10c0/54a2c1da7d1c5f7e865b941e8a3c98eb4b5f56ed8741664a84065173bde9602cdb8866b0984b26816d6af885c1528311c11e7286e869ed424483b74366514cbd - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:8.34.1, @typescript-eslint/utils@npm:^8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/utils@npm:8.34.1" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.7.0" - "@typescript-eslint/scope-manager": "npm:8.34.1" - "@typescript-eslint/types": "npm:8.34.1" - "@typescript-eslint/typescript-estree": "npm:8.34.1" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/e3085877f7940c02a37653e6bc52ac6cde115e755b1f788fe4331202f371b3421cc4d0878c7d3eb054e14e9b3a064496a707a73eac471cb2b73593b9e9d4b998 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:8.20.0": - version: 8.20.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.20.0" - dependencies: - "@typescript-eslint/types": "npm:8.20.0" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/e95d8b2685e8beb6637bf2e9d06e4177a400d3a2b142ba749944690f969ee3186b750082fd9bf34ada82acf1c5dd5970201dfd97619029c8ecca85fb4b50dbd8 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/visitor-keys@npm:8.34.1" - dependencies: - "@typescript-eslint/types": "npm:8.34.1" - eslint-visitor-keys: "npm:^4.2.1" - checksum: 10c0/0e5a9b3d93905d16d3cf8cb5fb346dcc6f760482eb7d0ac209aefc09a32f78ef28a687634df6ad08e81fb3e1083e8805f34472de6bbc501c0105ad654d518f40 - languageName: node - linkType: hard - -"@vitejs/plugin-vue@npm:^5.2.4": - version: 5.2.4 - resolution: "@vitejs/plugin-vue@npm:5.2.4" - peerDependencies: - vite: ^5.0.0 || ^6.0.0 - vue: ^3.2.25 - checksum: 10c0/9559224f178daf35e3a665410d09089b0ce7c0402981f8757481c24c22f29df377f96cc6161d92f74d16c37c6e32ac19fea99086f75338ad6ceb9b5ee8375509 - languageName: node - linkType: hard - -"@vitest/expect@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/expect@npm:3.2.4" - dependencies: - "@types/chai": "npm:^5.2.2" - "@vitest/spy": "npm:3.2.4" - "@vitest/utils": "npm:3.2.4" - chai: "npm:^5.2.0" - tinyrainbow: "npm:^2.0.0" - checksum: 10c0/7586104e3fd31dbe1e6ecaafb9a70131e4197dce2940f727b6a84131eee3decac7b10f9c7c72fa5edbdb68b6f854353bd4c0fa84779e274207fb7379563b10db - languageName: node - linkType: hard - -"@vitest/mocker@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/mocker@npm:3.2.4" - dependencies: - "@vitest/spy": "npm:3.2.4" - estree-walker: "npm:^3.0.3" - magic-string: "npm:^0.30.17" - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - checksum: 10c0/f7a4aea19bbbf8f15905847ee9143b6298b2c110f8b64789224cb0ffdc2e96f9802876aa2ca83f1ec1b6e1ff45e822abb34f0054c24d57b29ab18add06536ccd - languageName: node - linkType: hard - -"@vitest/pretty-format@npm:3.2.4, @vitest/pretty-format@npm:^3.2.4": - version: 3.2.4 - resolution: "@vitest/pretty-format@npm:3.2.4" - dependencies: - tinyrainbow: "npm:^2.0.0" - checksum: 10c0/5ad7d4278e067390d7d633e307fee8103958806a419ca380aec0e33fae71b44a64415f7a9b4bc11635d3c13d4a9186111c581d3cef9c65cc317e68f077456887 - languageName: node - linkType: hard - -"@vitest/runner@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/runner@npm:3.2.4" - dependencies: - "@vitest/utils": "npm:3.2.4" - pathe: "npm:^2.0.3" - strip-literal: "npm:^3.0.0" - checksum: 10c0/e8be51666c72b3668ae3ea348b0196656a4a5adb836cb5e270720885d9517421815b0d6c98bfdf1795ed02b994b7bfb2b21566ee356a40021f5bf4f6ed4e418a - languageName: node - linkType: hard - -"@vitest/snapshot@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/snapshot@npm:3.2.4" - dependencies: - "@vitest/pretty-format": "npm:3.2.4" - magic-string: "npm:^0.30.17" - pathe: "npm:^2.0.3" - checksum: 10c0/f8301a3d7d1559fd3d59ed51176dd52e1ed5c2d23aa6d8d6aa18787ef46e295056bc726a021698d8454c16ed825ecba163362f42fa90258bb4a98cfd2c9424fc - languageName: node - linkType: hard - -"@vitest/spy@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/spy@npm:3.2.4" - dependencies: - tinyspy: "npm:^4.0.3" - checksum: 10c0/6ebf0b4697dc238476d6b6a60c76ba9eb1dd8167a307e30f08f64149612fd50227682b876420e4c2e09a76334e73f72e3ebf0e350714dc22474258292e202024 - languageName: node - linkType: hard - -"@vitest/utils@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/utils@npm:3.2.4" - dependencies: - "@vitest/pretty-format": "npm:3.2.4" - loupe: "npm:^3.1.4" - tinyrainbow: "npm:^2.0.0" - checksum: 10c0/024a9b8c8bcc12cf40183c246c244b52ecff861c6deb3477cbf487ac8781ad44c68a9c5fd69f8c1361878e55b97c10d99d511f2597f1f7244b5e5101d028ba64 - languageName: node - linkType: hard - -"@volar/language-core@npm:2.4.11, @volar/language-core@npm:~2.4.11": - version: 2.4.11 - resolution: "@volar/language-core@npm:2.4.11" - dependencies: - "@volar/source-map": "npm:2.4.11" - checksum: 10c0/ccc5de0c28b4186dc99ff9856b2ac2318ee1818480af3ca406f3c09d42b19b6df8698b525f6cf0fed368332fc76659cd4433fb38e6a55a85c7cefc97d665ccf8 - languageName: node - linkType: hard - -"@volar/source-map@npm:2.4.11": - version: 2.4.11 - resolution: "@volar/source-map@npm:2.4.11" - checksum: 10c0/8e5badf9f67d669679c48fe32258e082d823523ca2807438d38c0aac6c52b84d43580c8921b559fc5a27c0c7457ffcba569e60de7a597851690dec04ed77c5fc - languageName: node - linkType: hard - -"@volar/typescript@npm:~2.4.11": - version: 2.4.11 - resolution: "@volar/typescript@npm:2.4.11" - dependencies: - "@volar/language-core": "npm:2.4.11" - path-browserify: "npm:^1.0.1" - vscode-uri: "npm:^3.0.8" - checksum: 10c0/bca9bda9c8c95fd06672b834d1804810fdad496e15ee8e2099f76de74fa529d835f342afb6b976e6e3bc4599a3bbbfd007a842694fe1300cf6286783b827f917 - languageName: node - linkType: hard - -"@vue/compiler-core@npm:3.5.13": - version: 3.5.13 - resolution: "@vue/compiler-core@npm:3.5.13" - dependencies: - "@babel/parser": "npm:^7.25.3" - "@vue/shared": "npm:3.5.13" - entities: "npm:^4.5.0" - estree-walker: "npm:^2.0.2" - source-map-js: "npm:^1.2.0" - checksum: 10c0/b89f3e3ca92c3177ae449ada1480df13d99b5b3b2cdcf3202fd37dc30f294a1db1f473209f8bae9233e2d338632219d39b2bfa6941d158cea55255e4b0b30f90 - languageName: node - linkType: hard - -"@vue/compiler-core@npm:3.5.17": - version: 3.5.17 - resolution: "@vue/compiler-core@npm:3.5.17" - dependencies: - "@babel/parser": "npm:^7.27.5" - "@vue/shared": "npm:3.5.17" - entities: "npm:^4.5.0" - estree-walker: "npm:^2.0.2" - source-map-js: "npm:^1.2.1" - checksum: 10c0/d6b50f6f0a71a77a04452877c601cfd6ea13ec07aa68a061523166c1150e159f64230eee28e1042e6113e334a11c25c306bae5d463931a9e7f96261a29a0042d - languageName: node - linkType: hard - -"@vue/compiler-dom@npm:3.5.13, @vue/compiler-dom@npm:^3.2.45, @vue/compiler-dom@npm:^3.5.0": - version: 3.5.13 - resolution: "@vue/compiler-dom@npm:3.5.13" - dependencies: - "@vue/compiler-core": "npm:3.5.13" - "@vue/shared": "npm:3.5.13" - checksum: 10c0/8f424a71883c9ef4abdd125d2be8d12dd8cf94ba56089245c88734b1f87c65e10597816070ba2ea0a297a2f66dc579f39275a9a53ef5664c143a12409612cd72 - languageName: node - linkType: hard - -"@vue/compiler-dom@npm:3.5.17": - version: 3.5.17 - resolution: "@vue/compiler-dom@npm:3.5.17" - dependencies: - "@vue/compiler-core": "npm:3.5.17" - "@vue/shared": "npm:3.5.17" - checksum: 10c0/27e4c201522abcb2755318fc502a4cf8a752fb90441bbd954c018990e80bb30e4075dadefa7f36671028779d9c21d34d76330f6b441921e317cf1c102a5411b6 - languageName: node - linkType: hard - -"@vue/compiler-sfc@npm:3.5.13": - version: 3.5.13 - resolution: "@vue/compiler-sfc@npm:3.5.13" - dependencies: - "@babel/parser": "npm:^7.25.3" - "@vue/compiler-core": "npm:3.5.13" - "@vue/compiler-dom": "npm:3.5.13" - "@vue/compiler-ssr": "npm:3.5.13" - "@vue/shared": "npm:3.5.13" - estree-walker: "npm:^2.0.2" - magic-string: "npm:^0.30.11" - postcss: "npm:^8.4.48" - source-map-js: "npm:^1.2.0" - checksum: 10c0/5fd57895ce2801e480c08f31f91f0d1746ed08a9c1973895fd7269615f5bcdf75497978fb358bda738938d9844dea2404064c53b2cdda991014225297acce19e - languageName: node - linkType: hard - -"@vue/compiler-sfc@npm:3.5.17": - version: 3.5.17 - resolution: "@vue/compiler-sfc@npm:3.5.17" - dependencies: - "@babel/parser": "npm:^7.27.5" - "@vue/compiler-core": "npm:3.5.17" - "@vue/compiler-dom": "npm:3.5.17" - "@vue/compiler-ssr": "npm:3.5.17" - "@vue/shared": "npm:3.5.17" - estree-walker: "npm:^2.0.2" - magic-string: "npm:^0.30.17" - postcss: "npm:^8.5.6" - source-map-js: "npm:^1.2.1" - checksum: 10c0/63c9b4cac42291c5c7edaaa26a6b052fd47b7b7dda2c40ad7b344c4195b8add97e4a89e73e50bf94ee33b402cc075d69602c76cbd4627eedcf6061c9df91c8e7 - languageName: node - linkType: hard - -"@vue/compiler-ssr@npm:3.5.13": - version: 3.5.13 - resolution: "@vue/compiler-ssr@npm:3.5.13" - dependencies: - "@vue/compiler-dom": "npm:3.5.13" - "@vue/shared": "npm:3.5.13" - checksum: 10c0/67621337b12fc414fcf9f16578961850724713a9fb64501136e432c2dfe95de99932c46fa24be9820f8bcdf8e7281f815f585b519a95ea979753bafd637dde1b - languageName: node - linkType: hard - -"@vue/compiler-ssr@npm:3.5.17": - version: 3.5.17 - resolution: "@vue/compiler-ssr@npm:3.5.17" - dependencies: - "@vue/compiler-dom": "npm:3.5.17" - "@vue/shared": "npm:3.5.17" - checksum: 10c0/80f0ccb05e8c6b3c72d4ea50ec87a1f89704483608053b1fcc88669886069edcd21cabc6608816c09d99fc6cab1985d676bf3725175f80482f2b3aaf51a15416 - languageName: node - linkType: hard - -"@vue/compiler-vue2@npm:^2.7.16": - version: 2.7.16 - resolution: "@vue/compiler-vue2@npm:2.7.16" - dependencies: - de-indent: "npm:^1.0.2" - he: "npm:^1.2.0" - checksum: 10c0/c76c3fad770b9a7da40b314116cc9da173da20e5fd68785c8ed8dd8a87d02f239545fa296e16552e040ec86b47bfb18283b39447b250c2e76e479bd6ae475bb3 - languageName: node - linkType: hard - -"@vue/devtools-api@npm:^6.5.0, @vue/devtools-api@npm:^6.6.4": - version: 6.6.4 - resolution: "@vue/devtools-api@npm:6.6.4" - checksum: 10c0/0a993ae23618166e1bee5a7c14cebd8312752b93c143cbdd48fb2d0f7ade070d0e6baf757cd920d4681fef8f9acf29515162160f38cc7410f9a684d2df21b6de - languageName: node - linkType: hard - -"@vue/devtools-api@npm:^7.7.2": - version: 7.7.2 - resolution: "@vue/devtools-api@npm:7.7.2" - dependencies: - "@vue/devtools-kit": "npm:^7.7.2" - checksum: 10c0/418d3c868143a91518bc846965f7c8a955f072b8526d0f739f4d7dc00b13a0f56b214d876bfff338dc841762b526a1a4c11b5e8b0ab6dd7f3250a694ec8dfbe3 - languageName: node - linkType: hard - -"@vue/devtools-kit@npm:^7.7.2": - version: 7.7.2 - resolution: "@vue/devtools-kit@npm:7.7.2" - dependencies: - "@vue/devtools-shared": "npm:^7.7.2" - birpc: "npm:^0.2.19" - hookable: "npm:^5.5.3" - mitt: "npm:^3.0.1" - perfect-debounce: "npm:^1.0.0" - speakingurl: "npm:^14.0.1" - superjson: "npm:^2.2.1" - checksum: 10c0/e052ba756558040855304b6ee13ba39131a44c89a9f78ab262c79f8a0e6b58fa379e1efa306a9a50675cac3e48baeb3f86b1560f64edf48cbc0695165d0b2be6 - languageName: node - linkType: hard - -"@vue/devtools-shared@npm:^7.7.2": - version: 7.7.2 - resolution: "@vue/devtools-shared@npm:7.7.2" - dependencies: - rfdc: "npm:^1.4.1" - checksum: 10c0/6399135da41a91f48c3db7c59cedb01ad331af7784ef0877c15c669ad5a5d1cce68f73d50d81f85a31a90b0d6323ff807ebe5b1fb041d1e86932f2c983a0cdad - languageName: node - linkType: hard - -"@vue/eslint-config-typescript@npm:^14.5.1": - version: 14.5.1 - resolution: "@vue/eslint-config-typescript@npm:14.5.1" - dependencies: - "@typescript-eslint/utils": "npm:^8.34.1" - fast-glob: "npm:^3.3.3" - typescript-eslint: "npm:^8.34.1" - vue-eslint-parser: "npm:^10.1.3" - peerDependencies: - eslint: ^9.10.0 - eslint-plugin-vue: ^9.28.0 || ^10.0.0 - typescript: ">=4.8.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/a31356dd8e308e00b5f068474d1637ba4d101eaeb8f8d4637ada1e945e6425db926c5f65755229e4135232037063ba04e5bb474df2b3d0f9e57055f951c2ad24 - languageName: node - linkType: hard - -"@vue/language-core@npm:2.2.10": - version: 2.2.10 - resolution: "@vue/language-core@npm:2.2.10" - dependencies: - "@volar/language-core": "npm:~2.4.11" - "@vue/compiler-dom": "npm:^3.5.0" - "@vue/compiler-vue2": "npm:^2.7.16" - "@vue/shared": "npm:^3.5.0" - alien-signals: "npm:^1.0.3" - minimatch: "npm:^9.0.3" - muggle-string: "npm:^0.4.1" - path-browserify: "npm:^1.0.1" - peerDependencies: - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/77a97c8a5f806b7461e0f2d11a1b4013ca9efca1cac4b1f193d907c00d286e22856ad2465045a2e855ceb724f2e38fdcf05890df071cd9031a82267bf3a77f4f - languageName: node - linkType: hard - -"@vue/reactivity@npm:3.5.13": - version: 3.5.13 - resolution: "@vue/reactivity@npm:3.5.13" - dependencies: - "@vue/shared": "npm:3.5.13" - checksum: 10c0/4bf2754a4b8cc31afc8da5bdfd12bba6be67b2963a65f7c9e2b59810883c58128dfc58cce6d1e479c4f666190bc0794f17208d9efd3fc909a2e4843d2cc0e69e - languageName: node - linkType: hard - -"@vue/reactivity@npm:3.5.17": - version: 3.5.17 - resolution: "@vue/reactivity@npm:3.5.17" - dependencies: - "@vue/shared": "npm:3.5.17" - checksum: 10c0/60ef16300b3819323df52eb243a9b6eabfd877ff0a97a2ee9e12537cbf855b52b78d57abb3cabf79c434e1afa4cbae738225bb2fdf8872d237ae6513f03f03e1 - languageName: node - linkType: hard - -"@vue/runtime-core@npm:3.5.13": - version: 3.5.13 - resolution: "@vue/runtime-core@npm:3.5.13" - dependencies: - "@vue/reactivity": "npm:3.5.13" - "@vue/shared": "npm:3.5.13" - checksum: 10c0/b6be854bf082a224222614a334fbeac0e7b6445f3cf4ea45cbd49ae4bb1551200c461c14c7a452d748f2459f7402ad4dee5522d51be5a28ea4ae1f699a7c016f - languageName: node - linkType: hard - -"@vue/runtime-core@npm:3.5.17": - version: 3.5.17 - resolution: "@vue/runtime-core@npm:3.5.17" - dependencies: - "@vue/reactivity": "npm:3.5.17" - "@vue/shared": "npm:3.5.17" - checksum: 10c0/dd6cc5e451cce2d979ce53f0c9dc100d47f38fe70398f061eed111d51a904199f984429b6243e2044272018375da5fd9ce469d1e72b7fb316a1160f700fa9950 - languageName: node - linkType: hard - -"@vue/runtime-dom@npm:3.5.13": - version: 3.5.13 - resolution: "@vue/runtime-dom@npm:3.5.13" - dependencies: - "@vue/reactivity": "npm:3.5.13" - "@vue/runtime-core": "npm:3.5.13" - "@vue/shared": "npm:3.5.13" - csstype: "npm:^3.1.3" - checksum: 10c0/8ee7f3980d19f77f8e7ae854e3ff1f7ee9a9b8b4e214c8d0492e1180ae818e33c04803b3d094503524d557431a30728b78cf15c3683d8abbbbd1b263a299d62a - languageName: node - linkType: hard - -"@vue/runtime-dom@npm:3.5.17": - version: 3.5.17 - resolution: "@vue/runtime-dom@npm:3.5.17" - dependencies: - "@vue/reactivity": "npm:3.5.17" - "@vue/runtime-core": "npm:3.5.17" - "@vue/shared": "npm:3.5.17" - csstype: "npm:^3.1.3" - checksum: 10c0/963d9b901e465621f24db745988f2f63c07fd7aa2a552e77d9dbd2a70f2c3f002f340866f085fa2fd791b62f7cd3e8a37f701351a49b839b4bbe5649fe9acc43 - languageName: node - linkType: hard - -"@vue/server-renderer@npm:3.5.13": - version: 3.5.13 - resolution: "@vue/server-renderer@npm:3.5.13" - dependencies: - "@vue/compiler-ssr": "npm:3.5.13" - "@vue/shared": "npm:3.5.13" - peerDependencies: - vue: 3.5.13 - checksum: 10c0/f500bdabc199abf41f1d84defd2a365a47afce1f2223a34c32fada84f6193b39ec2ce50636483409eec81b788b8ef0fa1ff59c63ca0c74764d738c24409eef8f - languageName: node - linkType: hard - -"@vue/server-renderer@npm:3.5.17": - version: 3.5.17 - resolution: "@vue/server-renderer@npm:3.5.17" - dependencies: - "@vue/compiler-ssr": "npm:3.5.17" - "@vue/shared": "npm:3.5.17" - peerDependencies: - vue: 3.5.17 - checksum: 10c0/34c6bcf909fe64820dc28d97fdcb4752346b923b5bd4a09521228988dc86e3b70c1edfd4f0daf8d6b5f4d74cc56c9bdac2ec9c17e7ef0e616e575d8f7b910d3a - languageName: node - linkType: hard - -"@vue/shared@npm:3.5.13, @vue/shared@npm:^3.5.0": - version: 3.5.13 - resolution: "@vue/shared@npm:3.5.13" - checksum: 10c0/2c940ef907116f1c2583ca1d7733984e5705983ab07054c4e72f1d95eb0f7bdf4d01efbdaee1776c2008f79595963f44e98fced057f5957d86d57b70028f5025 - languageName: node - linkType: hard - -"@vue/shared@npm:3.5.17": - version: 3.5.17 - resolution: "@vue/shared@npm:3.5.17" - checksum: 10c0/915d8f80d863826531cf6ddefeb52455cbffcbca4d14717472b7765b3142d2ad9900dfce351e90a22e1fe9e2f8fca588421de6e751e1c816ab9e1fdefa3e8a0d - languageName: node - linkType: hard - -"@vue/tsconfig@npm:^0.7.0": - version: 0.7.0 - resolution: "@vue/tsconfig@npm:0.7.0" - peerDependencies: - typescript: 5.x - vue: ^3.4.0 - peerDependenciesMeta: - typescript: - optional: true - vue: - optional: true - checksum: 10c0/5b36db5ee9e14b47e516164a21ebbf24e558042a16162a69291fe3dc0dcdf598bc0d9dada1b1008d95afab97a22396e8579e4f0df141a015ffa0837bf6ccbf2f - languageName: node - linkType: hard - -"abbrev@npm:^3.0.0": - version: 3.0.0 - resolution: "abbrev@npm:3.0.0" - checksum: 10c0/049704186396f571650eb7b22ed3627b77a5aedf98bb83caf2eac81ca2a3e25e795394b0464cfb2d6076df3db6a5312139eac5b6a126ca296ac53c5008069c28 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 - languageName: node - linkType: hard - -"acorn@npm:^8.14.0, acorn@npm:^8.5.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0": - version: 8.14.0 - resolution: "acorn@npm:8.14.0" - bin: - acorn: bin/acorn - checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 - languageName: node - linkType: hard - -"acorn@npm:^8.14.1, acorn@npm:^8.15.0": - version: 8.15.0 - resolution: "acorn@npm:8.15.0" - bin: - acorn: bin/acorn - checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec - languageName: node - linkType: hard - -"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": - version: 7.1.3 - resolution: "agent-base@npm:7.1.3" - checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 - languageName: node - linkType: hard - -"ajv@npm:^6.12.4": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: "npm:^3.1.1" - fast-json-stable-stringify: "npm:^2.0.0" - json-schema-traverse: "npm:^0.4.1" - uri-js: "npm:^4.2.2" - checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 - languageName: node - linkType: hard - -"alien-signals@npm:^1.0.3": - version: 1.0.4 - resolution: "alien-signals@npm:1.0.4" - checksum: 10c0/da6e1c9e143dc3faa11bd674a542bbd85cde72da74b3bfa5077194a1a2c4766e9a3f835017e90cfe290a7db929afe458f4de9b35be29f0c8e4f43dad99e3cd97 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.1.0 - resolution: "ansi-regex@npm:6.1.0" - checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e - languageName: node - linkType: hard - -"assertion-error@npm:^2.0.1": - version: 2.0.1 - resolution: "assertion-error@npm:2.0.1" - checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"aws4fetch@npm:^1.0.20": - version: 1.0.20 - resolution: "aws4fetch@npm:1.0.20" - checksum: 10c0/a4eac7bd0d1c3e611c17ed1ef41ac0b48c0a8e74a985ad968c071e74d94586d3572edc943b43fa5ca756c686ea73baa2f48e264d657bb8c2e95c8e0037d48a87 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"bignumber.js@npm:^9.0.0": - version: 9.1.2 - resolution: "bignumber.js@npm:9.1.2" - checksum: 10c0/e17786545433f3110b868725c449fa9625366a6e675cd70eb39b60938d6adbd0158cb4b3ad4f306ce817165d37e63f4aa3098ba4110db1d9a3b9f66abfbaf10d - languageName: node - linkType: hard - -"birpc@npm:^0.2.19": - version: 0.2.19 - resolution: "birpc@npm:0.2.19" - checksum: 10c0/be3c6a4044e3041a5d8eb4c4d50b57b46158dc8149ada718ead20544e50b68b72b34c9d8bf0457d23d5f18e5a66d206b8bef5ff22c1018e1e39d373187eed455 - languageName: node - linkType: hard - -"boolbase@npm:^1.0.0": - version: 1.0.0 - resolution: "boolbase@npm:1.0.0" - checksum: 10c0/e4b53deb4f2b85c52be0e21a273f2045c7b6a6ea002b0e139c744cb6f95e9ec044439a52883b0d74dedd1ff3da55ed140cfdddfed7fb0cccbed373de5dce1bcf - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: "npm:^1.0.0" - checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f - languageName: node - linkType: hard - -"braces@npm:^3.0.3": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: "npm:^7.1.1" - checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 - languageName: node - linkType: hard - -"c12@npm:^3.0.4": - version: 3.0.4 - resolution: "c12@npm:3.0.4" - dependencies: - chokidar: "npm:^4.0.3" - confbox: "npm:^0.2.2" - defu: "npm:^6.1.4" - dotenv: "npm:^16.5.0" - exsolve: "npm:^1.0.5" - giget: "npm:^2.0.0" - jiti: "npm:^2.4.2" - ohash: "npm:^2.0.11" - pathe: "npm:^2.0.3" - perfect-debounce: "npm:^1.0.0" - pkg-types: "npm:^2.1.0" - rc9: "npm:^2.1.2" - peerDependencies: - magicast: ^0.3.5 - peerDependenciesMeta: - magicast: - optional: true - checksum: 10c0/564c3c835c3238541501f4cbac010aadaea3471c8fe8d696ed38d7f884f3d8642106e0206e204b0fe3e9cb64700462fde4211e9ff430fd624e19de059126f4a4 - languageName: node - linkType: hard - -"cac@npm:^6.7.14": - version: 6.7.14 - resolution: "cac@npm:6.7.14" - checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 - languageName: node - linkType: hard - -"cacache@npm:^19.0.1": - version: 19.0.1 - resolution: "cacache@npm:19.0.1" - dependencies: - "@npmcli/fs": "npm:^4.0.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^7.0.2" - ssri: "npm:^12.0.0" - tar: "npm:^7.4.3" - unique-filename: "npm:^4.0.0" - checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 - languageName: node - linkType: hard - -"chai@npm:^5.2.0": - version: 5.2.0 - resolution: "chai@npm:5.2.0" - dependencies: - assertion-error: "npm:^2.0.1" - check-error: "npm:^2.1.1" - deep-eql: "npm:^5.0.1" - loupe: "npm:^3.1.0" - pathval: "npm:^2.0.0" - checksum: 10c0/dfd1cb719c7cebb051b727672d382a35338af1470065cb12adb01f4ee451bbf528e0e0f9ab2016af5fc1eea4df6e7f4504dc8443f8f00bd8fb87ad32dc516f7d - languageName: node - linkType: hard - -"chalk@npm:^4.0.0": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 - languageName: node - linkType: hard - -"check-error@npm:^2.1.1": - version: 2.1.1 - resolution: "check-error@npm:2.1.1" - checksum: 10c0/979f13eccab306cf1785fa10941a590b4e7ea9916ea2a4f8c87f0316fc3eab07eabefb6e587424ef0f88cbcd3805791f172ea739863ca3d7ce2afc54641c7f0e - languageName: node - linkType: hard - -"chokidar@npm:^4.0.0, chokidar@npm:^4.0.3": - version: 4.0.3 - resolution: "chokidar@npm:4.0.3" - dependencies: - readdirp: "npm:^4.0.1" - checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad - languageName: node - linkType: hard - -"chownr@npm:^3.0.0": - version: 3.0.0 - resolution: "chownr@npm:3.0.0" - checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 - languageName: node - linkType: hard - -"citty@npm:^0.1.6": - version: 0.1.6 - resolution: "citty@npm:0.1.6" - dependencies: - consola: "npm:^3.2.3" - checksum: 10c0/d26ad82a9a4a8858c7e149d90b878a3eceecd4cfd3e2ed3cd5f9a06212e451fb4f8cbe0fa39a3acb1b3e8f18e22db8ee5def5829384bad50e823d4b301609b48 - languageName: node - linkType: hard - -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^7.0.0" - checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 - languageName: node - linkType: hard - -"codemirror@npm:^6.0.2": - version: 6.0.2 - resolution: "codemirror@npm:6.0.2" - dependencies: - "@codemirror/autocomplete": "npm:^6.0.0" - "@codemirror/commands": "npm:^6.0.0" - "@codemirror/language": "npm:^6.0.0" - "@codemirror/lint": "npm:^6.0.0" - "@codemirror/search": "npm:^6.0.0" - "@codemirror/state": "npm:^6.0.0" - "@codemirror/view": "npm:^6.0.0" - checksum: 10c0/8d198d8aebc32e56c966ac57b0fe8f832b7d601a2f62819ba3a294570233982bf4d5b499a764194b6b26dbc5313a156c2611cbc542234ea6eae6accf07a651ab - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - -"confbox@npm:^0.1.8": - version: 0.1.8 - resolution: "confbox@npm:0.1.8" - checksum: 10c0/fc2c68d97cb54d885b10b63e45bd8da83a8a71459d3ecf1825143dd4c7f9f1b696b3283e07d9d12a144c1301c2ebc7842380bdf0014e55acc4ae1c9550102418 - languageName: node - linkType: hard - -"confbox@npm:^0.2.1, confbox@npm:^0.2.2": - version: 0.2.2 - resolution: "confbox@npm:0.2.2" - checksum: 10c0/7c246588d533d31e8cdf66cb4701dff6de60f9be77ab54c0d0338e7988750ac56863cc0aca1b3f2046f45ff223a765d3e5d4977a7674485afcd37b6edf3fd129 - languageName: node - linkType: hard - -"consola@npm:^3.2.3, consola@npm:^3.4.0": - version: 3.4.0 - resolution: "consola@npm:3.4.0" - checksum: 10c0/bc7f7ad46514375109a80f3ae8330097eb1e5d89232a24eb830f3ac383e22036a62c53d33561cd73d7cda4b3691fba85e3dcf35229ef7721b324aae291ceb40c - languageName: node - linkType: hard - -"consola@npm:^3.4.2": - version: 3.4.2 - resolution: "consola@npm:3.4.2" - checksum: 10c0/7cebe57ecf646ba74b300bcce23bff43034ed6fbec9f7e39c27cee1dc00df8a21cd336b466ad32e304ea70fba04ec9e890c200270de9a526ce021ba8a7e4c11a - languageName: node - linkType: hard - -"copy-anything@npm:^3.0.2": - version: 3.0.5 - resolution: "copy-anything@npm:3.0.5" - dependencies: - is-what: "npm:^4.1.8" - checksum: 10c0/01eadd500c7e1db71d32d95a3bfaaedcb839ef891c741f6305ab0461398056133de08f2d1bf4c392b364e7bdb7ce498513896e137a7a183ac2516b065c28a4fe - languageName: node - linkType: hard - -"crelt@npm:^1.0.5": - version: 1.0.6 - resolution: "crelt@npm:1.0.6" - checksum: 10c0/e0fb76dff50c5eb47f2ea9b786c17f9425c66276025adee80876bdbf4a84ab72e899e56d3928431ab0cb057a105ef704df80fe5726ef0f7b1658f815521bdf09 - languageName: node - linkType: hard - -"cross-env@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-env@npm:7.0.3" - dependencies: - cross-spawn: "npm:^7.0.1" - bin: - cross-env: src/bin/cross-env.js - cross-env-shell: src/bin/cross-env-shell.js - checksum: 10c0/f3765c25746c69fcca369655c442c6c886e54ccf3ab8c16847d5ad0e91e2f337d36eedc6599c1227904bf2a228d721e690324446876115bc8e7b32a866735ecf - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.6": - version: 7.0.6 - resolution: "cross-spawn@npm:7.0.6" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 - languageName: node - linkType: hard - -"cssesc@npm:^3.0.0": - version: 3.0.0 - resolution: "cssesc@npm:3.0.0" - bin: - cssesc: bin/cssesc - checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 - languageName: node - linkType: hard - -"csstype@npm:^3.1.3": - version: 3.1.3 - resolution: "csstype@npm:3.1.3" - checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 - languageName: node - linkType: hard - -"de-indent@npm:^1.0.2": - version: 1.0.2 - resolution: "de-indent@npm:1.0.2" - checksum: 10c0/7058ce58abd6dfc123dd204e36be3797abd419b59482a634605420f47ae97639d0c183ec5d1b904f308a01033f473673897afc2bd59bc620ebf1658763ef4291 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.4.0": - version: 4.4.0 - resolution: "debug@npm:4.4.0" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de - languageName: node - linkType: hard - -"debug@npm:^4.4.1": - version: 4.4.1 - resolution: "debug@npm:4.4.1" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 - languageName: node - linkType: hard - -"deep-eql@npm:^5.0.1": - version: 5.0.2 - resolution: "deep-eql@npm:5.0.2" - checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c - languageName: node - linkType: hard - -"deep-pick-omit@npm:^1.2.1": - version: 1.2.1 - resolution: "deep-pick-omit@npm:1.2.1" - checksum: 10c0/6010abbf022e3dd857c140847cd51be6c55e9470f421bb39b6def3984232656668460bc0f0e522f40ae413f6406e13228fda0a88970c13b251d903c864cc1cde - languageName: node - linkType: hard - -"define-lazy-prop@npm:^2.0.0": - version: 2.0.0 - resolution: "define-lazy-prop@npm:2.0.0" - checksum: 10c0/db6c63864a9d3b7dc9def55d52764968a5af296de87c1b2cc71d8be8142e445208071953649e0386a8cc37cfcf9a2067a47207f1eb9ff250c2a269658fdae422 - languageName: node - linkType: hard - -"defu@npm:^6.1.4": - version: 6.1.4 - resolution: "defu@npm:6.1.4" - checksum: 10c0/2d6cc366262dc0cb8096e429368e44052fdf43ed48e53ad84cc7c9407f890301aa5fcb80d0995abaaf842b3949f154d060be4160f7a46cb2bc2f7726c81526f5 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"destr@npm:^2.0.3": - version: 2.0.3 - resolution: "destr@npm:2.0.3" - checksum: 10c0/10e7eff5149e2839a4dd29a1e9617c3c675a3b53608d78d74fc6f4abc31daa977e6de08e0eea78965527a0d5a35467ae2f9624e0a4646d54aa1162caa094473e - languageName: node - linkType: hard - -"destr@npm:^2.0.5": - version: 2.0.5 - resolution: "destr@npm:2.0.5" - checksum: 10c0/efabffe7312a45ad90d79975376be958c50069f1156b94c181199763a7f971e113bd92227c26b94a169c71ca7dbc13583b7e96e5164743969fc79e1ff153e646 - languageName: node - linkType: hard - -"detect-europe-js@npm:^0.1.2": - version: 0.1.2 - resolution: "detect-europe-js@npm:0.1.2" - checksum: 10c0/46fccf2a9ddeec8ecb7a369be1452f84856cbd0ccdeb3c47e41fe6c9d69f63d6bd75f91b5aa1ae310e56d8fbcbff0e802b1504cdcc3a92f3327c94408e6d07a2 - languageName: node - linkType: hard - -"detect-libc@npm:^1.0.3": - version: 1.0.3 - resolution: "detect-libc@npm:1.0.3" - bin: - detect-libc: ./bin/detect-libc.js - checksum: 10c0/4da0deae9f69e13bc37a0902d78bf7169480004b1fed3c19722d56cff578d16f0e11633b7fbf5fb6249181236c72e90024cbd68f0b9558ae06e281f47326d50d - languageName: node - linkType: hard - -"dotenv@npm:^16.5.0": - version: 16.5.0 - resolution: "dotenv@npm:16.5.0" - checksum: 10c0/5bc94c919fbd955bf0ba44d33922a1e93d1078e64a1db5c30faeded1d996e7a83c55332cb8ea4fae5a9ca4d0be44cbceb95c5811e70f9f095298df09d1997dd9 - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 - languageName: node - linkType: hard - -"elasticvue@workspace:.": - version: 0.0.0-use.local - resolution: "elasticvue@workspace:." - dependencies: - "@codemirror/lang-json": "npm:^6.0.1" - "@intlify/eslint-plugin-vue-i18n": "npm:^4.0.1" - "@intlify/unplugin-vue-i18n": "npm:^6.0.8" - "@lezer/common": "npm:^1.2.3" - "@playwright/test": "npm:^1.53.1" - "@quasar/extras": "npm:^1.17.0" - "@quasar/vite-plugin": "npm:^1.9.0" - "@replit/codemirror-vim": "npm:^6.3.0" - "@tauri-apps/api": "npm:^2.5.0" - "@tauri-apps/cli": "npm:^2.5.0" - "@tauri-apps/plugin-clipboard-manager": "npm:^2.2.3" - "@tauri-apps/plugin-dialog": "npm:^2.2.2" - "@tauri-apps/plugin-fs": "npm:^2.3.0" - "@tauri-apps/plugin-opener": "npm:^2.3.0" - "@tauri-apps/plugin-process": "npm:^2.2.2" - "@tauri-apps/plugin-updater": "npm:^2.8.1" - "@types/json-bigint": "npm:^1.0.4" - "@vitejs/plugin-vue": "npm:^5.2.4" - "@vue/eslint-config-typescript": "npm:^14.5.1" - "@vue/tsconfig": "npm:^0.7.0" - aws4fetch: "npm:^1.0.20" - codemirror: "npm:^6.0.2" - cross-env: "npm:^7.0.3" - eslint: "npm:^9.29.0" - eslint-plugin-vue: "npm:^10.2.0" - idb: "npm:^8.0.3" - json-bigint: "npm:^1.0.0" - pinia: "npm:^3.0.3" - pinia-plugin-persistedstate: "npm:^4.3.0" - pretty-bytes: "npm:^7.0.0" - quasar: "npm:^2.18.1" - sass: "npm:^1.89.2" - typescript: "npm:^5.8.3" - ua-parser-js: "npm:^2.0.3" - uuid: "npm:^11.1.0" - vite: "npm:^6.3.5" - vite-bundle-visualizer: "npm:^1.2.1" - vitest: "npm:^3.2.4" - vue: "npm:^3.5.17" - vue-i18n: "npm:^11.1.6" - vue-resizable: "npm:^2.1.7" - vue-router: "npm:^4.5.1" - vue-tsc: "npm:^2.2.10" - languageName: unknown - linkType: soft - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: "npm:^0.6.2" - checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 - languageName: node - linkType: hard - -"entities@npm:^4.5.0": - version: 4.5.0 - resolution: "entities@npm:4.5.0" - checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 - languageName: node - linkType: hard - -"errx@npm:^0.1.0": - version: 0.1.0 - resolution: "errx@npm:0.1.0" - checksum: 10c0/11f293dd737c3a0d9594065507e70b48333bcf340e33f324b2674ea7861a7e8f29f155d17070f85bb76f5da6e4f21b108c3ec8818b10f9fb78a467b36b63d3c4 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-module-lexer@npm:^1.7.0": - version: 1.7.0 - resolution: "es-module-lexer@npm:1.7.0" - checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"esbuild@npm:^0.25.0": - version: 0.25.0 - resolution: "esbuild@npm:0.25.0" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.0" - "@esbuild/android-arm": "npm:0.25.0" - "@esbuild/android-arm64": "npm:0.25.0" - "@esbuild/android-x64": "npm:0.25.0" - "@esbuild/darwin-arm64": "npm:0.25.0" - "@esbuild/darwin-x64": "npm:0.25.0" - "@esbuild/freebsd-arm64": "npm:0.25.0" - "@esbuild/freebsd-x64": "npm:0.25.0" - "@esbuild/linux-arm": "npm:0.25.0" - "@esbuild/linux-arm64": "npm:0.25.0" - "@esbuild/linux-ia32": "npm:0.25.0" - "@esbuild/linux-loong64": "npm:0.25.0" - "@esbuild/linux-mips64el": "npm:0.25.0" - "@esbuild/linux-ppc64": "npm:0.25.0" - "@esbuild/linux-riscv64": "npm:0.25.0" - "@esbuild/linux-s390x": "npm:0.25.0" - "@esbuild/linux-x64": "npm:0.25.0" - "@esbuild/netbsd-arm64": "npm:0.25.0" - "@esbuild/netbsd-x64": "npm:0.25.0" - "@esbuild/openbsd-arm64": "npm:0.25.0" - "@esbuild/openbsd-x64": "npm:0.25.0" - "@esbuild/sunos-x64": "npm:0.25.0" - "@esbuild/win32-arm64": "npm:0.25.0" - "@esbuild/win32-ia32": "npm:0.25.0" - "@esbuild/win32-x64": "npm:0.25.0" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/5767b72da46da3cfec51661647ec850ddbf8a8d0662771139f10ef0692a8831396a0004b2be7966cecdb08264fb16bdc16290dcecd92396fac5f12d722fa013d - languageName: node - linkType: hard - -"escalade@npm:^3.1.1": - version: 3.2.0 - resolution: "escalade@npm:3.2.0" - checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^5.0.0": - version: 5.0.0 - resolution: "escape-string-regexp@npm:5.0.0" - checksum: 10c0/6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 - languageName: node - linkType: hard - -"escodegen@npm:^2.1.0": - version: 2.1.0 - resolution: "escodegen@npm:2.1.0" - dependencies: - esprima: "npm:^4.0.1" - estraverse: "npm:^5.2.0" - esutils: "npm:^2.0.2" - source-map: "npm:~0.6.1" - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 10c0/e1450a1f75f67d35c061bf0d60888b15f62ab63aef9df1901cffc81cffbbb9e8b3de237c5502cf8613a017c1df3a3003881307c78835a1ab54d8c8d2206e01d3 - languageName: node - linkType: hard - -"eslint-compat-utils@npm:^0.6.0": - version: 0.6.4 - resolution: "eslint-compat-utils@npm:0.6.4" - dependencies: - semver: "npm:^7.5.4" - peerDependencies: - eslint: ">=6.0.0" - checksum: 10c0/5b665c4051e978b9f9c48621f63d07e6b2a8ba1b334fc430f1ce0d8b596968677bdb54c23c00ca961ad5b4673d5e83e014a52b4baf9a2f7d4ccd79e3c213acfb - languageName: node - linkType: hard - -"eslint-plugin-vue@npm:^10.2.0": - version: 10.2.0 - resolution: "eslint-plugin-vue@npm:10.2.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - natural-compare: "npm:^1.4.0" - nth-check: "npm:^2.1.1" - postcss-selector-parser: "npm:^6.0.15" - semver: "npm:^7.6.3" - xml-name-validator: "npm:^4.0.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - vue-eslint-parser: ^10.0.0 - checksum: 10c0/ee07376bcf450970c66bde3eb7c1d26854dc3260c05fb2d52eeace5790d5e6173e7542e215690bf0149fde2238926721ff807df1beee33e5aba71e6634eac351 - languageName: node - linkType: hard - -"eslint-scope@npm:^8.2.0": - version: 8.3.0 - resolution: "eslint-scope@npm:8.3.0" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^5.2.0" - checksum: 10c0/23bf54345573201fdf06d29efa345ab508b355492f6c6cc9e2b9f6d02b896f369b6dd5315205be94b8853809776c4d13353b85c6b531997b164ff6c3328ecf5b - languageName: node - linkType: hard - -"eslint-scope@npm:^8.4.0": - version: 8.4.0 - resolution: "eslint-scope@npm:8.4.0" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^5.2.0" - checksum: 10c0/407f6c600204d0f3705bd557f81bd0189e69cd7996f408f8971ab5779c0af733d1af2f1412066b40ee1588b085874fc37a2333986c6521669cdbdd36ca5058e0 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.0.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-visitor-keys@npm:4.2.0" - checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^4.2.1": - version: 4.2.1 - resolution: "eslint-visitor-keys@npm:4.2.1" - checksum: 10c0/fcd43999199d6740db26c58dbe0c2594623e31ca307e616ac05153c9272f12f1364f5a0b1917a8e962268fdecc6f3622c1c2908b4fcc2e047a106fe6de69dc43 - languageName: node - linkType: hard - -"eslint@npm:^9.29.0": - version: 9.29.0 - resolution: "eslint@npm:9.29.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.12.1" - "@eslint/config-array": "npm:^0.20.1" - "@eslint/config-helpers": "npm:^0.2.1" - "@eslint/core": "npm:^0.14.0" - "@eslint/eslintrc": "npm:^3.3.1" - "@eslint/js": "npm:9.29.0" - "@eslint/plugin-kit": "npm:^0.3.1" - "@humanfs/node": "npm:^0.16.6" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@humanwhocodes/retry": "npm:^0.4.2" - "@types/estree": "npm:^1.0.6" - "@types/json-schema": "npm:^7.0.15" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.6" - debug: "npm:^4.3.2" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^8.4.0" - eslint-visitor-keys: "npm:^4.2.1" - espree: "npm:^10.4.0" - esquery: "npm:^1.5.0" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^8.0.0" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - peerDependencies: - jiti: "*" - peerDependenciesMeta: - jiti: - optional: true - bin: - eslint: bin/eslint.js - checksum: 10c0/75e3f841e0f8b0fa93dbb2ba6ae538bd8b611c3654117bc3dadf90bb009923dfd2c15ec2948dc6e6b8b571317cc125c5cceb9255da8cd644ee740020df645dd8 - languageName: node - linkType: hard - -"espree@npm:^10.0.1, espree@npm:^10.3.0": - version: 10.3.0 - resolution: "espree@npm:10.3.0" - dependencies: - acorn: "npm:^8.14.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 - languageName: node - linkType: hard - -"espree@npm:^10.4.0": - version: 10.4.0 - resolution: "espree@npm:10.4.0" - dependencies: - acorn: "npm:^8.15.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.2.1" - checksum: 10c0/c63fe06131c26c8157b4083313cb02a9a54720a08e21543300e55288c40e06c3fc284bdecf108d3a1372c5934a0a88644c98714f38b6ae8ed272b40d9ea08d6b - languageName: node - linkType: hard - -"espree@npm:^9.0.0": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: "npm:^8.9.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 - languageName: node - linkType: hard - -"esprima@npm:^4.0.1": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 - languageName: node - linkType: hard - -"esquery@npm:^1.5.0, esquery@npm:^1.6.0": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" - dependencies: - estraverse: "npm:^5.1.0" - checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: "npm:^5.2.0" - checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 - languageName: node - linkType: hard - -"estree-walker@npm:^2.0.2": - version: 2.0.2 - resolution: "estree-walker@npm:2.0.2" - checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af - languageName: node - linkType: hard - -"estree-walker@npm:^3.0.3": - version: 3.0.3 - resolution: "estree-walker@npm:3.0.3" - dependencies: - "@types/estree": "npm:^1.0.0" - checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 - languageName: node - linkType: hard - -"expect-type@npm:^1.2.1": - version: 1.2.1 - resolution: "expect-type@npm:1.2.1" - checksum: 10c0/b775c9adab3c190dd0d398c722531726cdd6022849b4adba19dceab58dda7e000a7c6c872408cd73d665baa20d381eca36af4f7b393a4ba60dd10232d1fb8898 - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.2 - resolution: "exponential-backoff@npm:3.1.2" - checksum: 10c0/d9d3e1eafa21b78464297df91f1776f7fbaa3d5e3f7f0995648ca5b89c069d17055033817348d9f4a43d1c20b0eab84f75af6991751e839df53e4dfd6f22e844 - languageName: node - linkType: hard - -"exsolve@npm:^1.0.1, exsolve@npm:^1.0.5": - version: 1.0.7 - resolution: "exsolve@npm:1.0.7" - checksum: 10c0/4479369d0bd84bb7e0b4f5d9bc18d26a89b6dbbbccd73f9d383d14892ef78ddbe159e01781055342f83dc00ebe90044036daf17ddf55cc21e2cac6609aa15631 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.12, fast-glob@npm:^3.3.2, fast-glob@npm:^3.3.3": - version: 3.3.3 - resolution: "fast-glob@npm:3.3.3" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.8" - checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.18.0 - resolution: "fastq@npm:1.18.0" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 - languageName: node - linkType: hard - -"fdir@npm:^6.4.4": - version: 6.4.4 - resolution: "fdir@npm:6.4.4" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10c0/6ccc33be16945ee7bc841e1b4178c0b4cf18d3804894cb482aa514651c962a162f96da7ffc6ebfaf0df311689fb70091b04dd6caffe28d56b9ebdc0e7ccadfdd - languageName: node - linkType: hard - -"fdir@npm:^6.4.6": - version: 6.4.6 - resolution: "fdir@npm:6.4.6" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9 - languageName: node - linkType: hard - -"file-entry-cache@npm:^8.0.0": - version: 8.0.0 - resolution: "file-entry-cache@npm:8.0.0" - dependencies: - flat-cache: "npm:^4.0.0" - checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 - languageName: node - linkType: hard - -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: "npm:^6.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a - languageName: node - linkType: hard - -"flat-cache@npm:^4.0.0": - version: 4.0.1 - resolution: "flat-cache@npm:4.0.1" - dependencies: - flatted: "npm:^3.2.9" - keyv: "npm:^4.5.4" - checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc - languageName: node - linkType: hard - -"flatted@npm:^3.2.9": - version: 3.3.2 - resolution: "flatted@npm:3.3.2" - checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334 - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.3.0 - resolution: "foreground-child@npm:3.3.0" - dependencies: - cross-spawn: "npm:^7.0.0" - signal-exit: "npm:^4.0.1" - checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 - languageName: node - linkType: hard - -"form-data@npm:^4.0.0": - version: 4.0.2 - resolution: "form-data@npm:4.0.2" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - mime-types: "npm:^2.1.12" - checksum: 10c0/e534b0cf025c831a0929bf4b9bbe1a9a6b03e273a8161f9947286b9b13bf8fb279c6944aae0070c4c311100c6d6dbb815cd955dc217728caf73fad8dc5b8ee9c - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 - languageName: node - linkType: hard - -"fsevents@npm:2.3.2": - version: 2.3.2 - resolution: "fsevents@npm:2.3.2" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/be78a3efa3e181cda3cf7a4637cb527bcebb0bd0ea0440105a3bb45b86f9245b307dc10a2507e8f4498a7d4ec349d1910f4d73e4d4495b16103106e07eee735b - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin": - version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.5": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.6": - version: 1.3.0 - resolution: "get-intrinsic@npm:1.3.0" - dependencies: - call-bind-apply-helpers: "npm:^1.0.2" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - function-bind: "npm:^1.1.2" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/52c81808af9a8130f581e6a6a83e1ba4a9f703359e7a438d1369a5267a25412322f03dcbd7c549edaef0b6214a0630a28511d7df0130c93cfd380f4fa0b5b66a - languageName: node - linkType: hard - -"get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"giget@npm:^2.0.0": - version: 2.0.0 - resolution: "giget@npm:2.0.0" - dependencies: - citty: "npm:^0.1.6" - consola: "npm:^3.4.0" - defu: "npm:^6.1.4" - node-fetch-native: "npm:^1.6.6" - nypm: "npm:^0.6.0" - pathe: "npm:^2.0.3" - bin: - giget: dist/cli.mjs - checksum: 10c0/606d81652643936ee7f76653b4dcebc09703524ff7fd19692634ce69e3fc6775a377760d7508162379451c03bf43cc6f46716aeadeb803f7cef3fc53d0671396 - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 - languageName: node - linkType: hard - -"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.3, glob@npm:^10.3.7": - version: 10.4.5 - resolution: "glob@npm:10.4.5" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^3.1.2" - minimatch: "npm:^9.0.4" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^1.11.1" - bin: - glob: dist/esm/bin.mjs - checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e - languageName: node - linkType: hard - -"globals@npm:^14.0.0": - version: 14.0.0 - resolution: "globals@npm:14.0.0" - checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d - languageName: node - linkType: hard - -"globals@npm:^16.0.0": - version: 16.0.0 - resolution: "globals@npm:16.0.0" - checksum: 10c0/8906d5f01838df64a81d6c2a7b7214312e2216cf65c5ed1546dc9a7d0febddf55ffa906cf04efd5b01eec2534d6f14859a89535d1a68241832810e41ef3fd5bb - languageName: node - linkType: hard - -"gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"he@npm:^1.2.0": - version: 1.2.0 - resolution: "he@npm:1.2.0" - bin: - he: bin/he - checksum: 10c0/a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17 - languageName: node - linkType: hard - -"hookable@npm:^5.5.3": - version: 5.5.3 - resolution: "hookable@npm:5.5.3" - checksum: 10c0/275f4cc84d27f8d48c5a5cd5685b6c0fea9291be9deea5bff0cfa72856ed566abde1dcd8cb1da0f9a70b4da3d7ec0d60dc3554c4edbba647058cc38816eced3d - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.6 - resolution: "https-proxy-agent@npm:7.0.6" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:4" - checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 - languageName: node - linkType: hard - -"idb@npm:^8.0.3": - version: 8.0.3 - resolution: "idb@npm:8.0.3" - checksum: 10c0/421cd9a3281b7564528857031cc33fd9e95753f8191e483054cb25d1ceea7303a0d1462f4f69f5b41606f0f066156999e067478abf2460dfcf9cab80dae2a2b2 - languageName: node - linkType: hard - -"ignore@npm:^5.2.0": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 - languageName: node - linkType: hard - -"ignore@npm:^7.0.0": - version: 7.0.4 - resolution: "ignore@npm:7.0.4" - checksum: 10c0/90e1f69ce352b9555caecd9cbfd07abe7626d312a6f90efbbb52c7edca6ea8df065d66303863b30154ab1502afb2da8bc59d5b04e1719a52ef75bbf675c488eb - languageName: node - linkType: hard - -"ignore@npm:^7.0.5": - version: 7.0.5 - resolution: "ignore@npm:7.0.5" - checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d - languageName: node - linkType: hard - -"immutable@npm:^5.0.2": - version: 5.0.3 - resolution: "immutable@npm:5.0.3" - checksum: 10c0/3269827789e1026cd25c2ea97f0b2c19be852ffd49eda1b674b20178f73d84fa8d945ad6f5ac5bc4545c2b4170af9f6e1f77129bc1cae7974a4bf9b04a9cdfb9 - languageName: node - linkType: hard - -"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: "npm:^1.0.0" - resolve-from: "npm:^4.0.0" - checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 - languageName: node - linkType: hard - -"import-from-esm@npm:^1.3.3": - version: 1.3.4 - resolution: "import-from-esm@npm:1.3.4" - dependencies: - debug: "npm:^4.3.4" - import-meta-resolve: "npm:^4.0.0" - checksum: 10c0/fcd42ead421892e1d9dbc90e510f45c7d3b58887c35077cf2318e4aa39b52c07c06e2b54efd16dfe8e712421439c23794d18a5e8956cca237fc90790ed8e2241 - languageName: node - linkType: hard - -"import-meta-resolve@npm:^4.0.0": - version: 4.1.0 - resolution: "import-meta-resolve@npm:4.1.0" - checksum: 10c0/42f3284b0460635ddf105c4ad99c6716099c3ce76702602290ad5cbbcd295700cbc04e4bdf47bacf9e3f1a4cec2e1ff887dabc20458bef398f9de22ddff45ef5 - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 - languageName: node - linkType: hard - -"ip-address@npm:^9.0.5": - version: 9.0.5 - resolution: "ip-address@npm:9.0.5" - dependencies: - jsbn: "npm:1.1.0" - sprintf-js: "npm:^1.1.3" - checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc - languageName: node - linkType: hard - -"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - -"is-language-code@npm:^3.1.0": - version: 3.1.0 - resolution: "is-language-code@npm:3.1.0" - dependencies: - "@babel/runtime": "npm:^7.14.0" - checksum: 10c0/5e779fc17b4897c0e5d31f986e6b1a4ac19ce832db93d5da82e13281685aa3ef13c5372698d423cc346fcef42843bad527d69071e7b140c0f75cbc99b4afdd0d - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - -"is-standalone-pwa@npm:^0.1.1": - version: 0.1.1 - resolution: "is-standalone-pwa@npm:0.1.1" - checksum: 10c0/af1a11edef4a8f00c24014576285070fb73eebb3583cae790c0a825e338e19f05048a26e5fd5ef10f6056032d6a4520054ff824532c15df784933c0fcc5e13fd - languageName: node - linkType: hard - -"is-what@npm:^4.1.8": - version: 4.1.16 - resolution: "is-what@npm:4.1.16" - checksum: 10c0/611f1947776826dcf85b57cfb7bd3b3ea6f4b94a9c2f551d4a53f653cf0cb9d1e6518846648256d46ee6c91d114b6d09d2ac8a07306f7430c5900f87466aae5b - languageName: node - linkType: hard - -"is-wsl@npm:^2.2.0": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: "npm:^2.0.0" - checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d - languageName: node - linkType: hard - -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 - languageName: node - linkType: hard - -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 - languageName: node - linkType: hard - -"jiti@npm:^2.4.2": - version: 2.4.2 - resolution: "jiti@npm:2.4.2" - bin: - jiti: lib/jiti-cli.mjs - checksum: 10c0/4ceac133a08c8faff7eac84aabb917e85e8257f5ad659e843004ce76e981c457c390a220881748ac67ba1b940b9b729b30fb85cbaf6e7989f04b6002c94da331 - languageName: node - linkType: hard - -"js-tokens@npm:^9.0.1": - version: 9.0.1 - resolution: "js-tokens@npm:9.0.1" - checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e - languageName: node - linkType: hard - -"js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f - languageName: node - linkType: hard - -"jsbn@npm:1.1.0": - version: 1.1.0 - resolution: "jsbn@npm:1.1.0" - checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 - languageName: node - linkType: hard - -"json-bigint@npm:^1.0.0": - version: 1.0.0 - resolution: "json-bigint@npm:1.0.0" - dependencies: - bignumber.js: "npm:^9.0.0" - checksum: 10c0/e3f34e43be3284b573ea150a3890c92f06d54d8ded72894556357946aeed9877fd795f62f37fe16509af189fd314ab1104d0fd0f163746ad231b9f378f5b33f4 - languageName: node - linkType: hard - -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 - languageName: node - linkType: hard - -"json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c - languageName: node - linkType: hard - -"jsonc-eslint-parser@npm:^2.3.0": - version: 2.4.0 - resolution: "jsonc-eslint-parser@npm:2.4.0" - dependencies: - acorn: "npm:^8.5.0" - eslint-visitor-keys: "npm:^3.0.0" - espree: "npm:^9.0.0" - semver: "npm:^7.3.5" - checksum: 10c0/1bef9f4f12122824e1d13ef651b7a8d16cbf6995bfd08fabb81df34ff0cf57f5c1c822dd5ee7aece0575fb1351538c8c5ce86f9b94d8f41bcd3bbe2773b62db3 - languageName: node - linkType: hard - -"keyv@npm:^4.5.4": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: "npm:3.0.1" - checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e - languageName: node - linkType: hard - -"klona@npm:^2.0.6": - version: 2.0.6 - resolution: "klona@npm:2.0.6" - checksum: 10c0/94eed2c6c2ce99f409df9186a96340558897b3e62a85afdc1ee39103954d2ebe1c1c4e9fe2b0952771771fa96d70055ede8b27962a7021406374fdb695fd4d01 - languageName: node - linkType: hard - -"knitwork@npm:^1.2.0": - version: 1.2.0 - resolution: "knitwork@npm:1.2.0" - checksum: 10c0/26113ce2909595054a78b36a79a7cdddf1336438b111688c91a74620148d15182e073c9504d2261ff4cad888d7ef330df91abc0b03d2b52ff3cff7c5b469bfb5 - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: "npm:^1.2.1" - type-check: "npm:~0.4.0" - checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e - languageName: node - linkType: hard - -"local-pkg@npm:^1.1.1": - version: 1.1.1 - resolution: "local-pkg@npm:1.1.1" - dependencies: - mlly: "npm:^1.7.4" - pkg-types: "npm:^2.0.1" - quansync: "npm:^0.2.8" - checksum: 10c0/fe8f9d0443fb066c3f28a4c89d587dd7cba3ab02645cd16598f8d5f30968acf60af1b0ec2d6ad768475ec9f52baad124f31a93d2fbc034f645bcc02bf3a84882 - languageName: node - linkType: hard - -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" - dependencies: - p-locate: "npm:^5.0.0" - checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 - languageName: node - linkType: hard - -"lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 - languageName: node - linkType: hard - -"lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c - languageName: node - linkType: hard - -"loupe@npm:^3.1.0": - version: 3.1.2 - resolution: "loupe@npm:3.1.2" - checksum: 10c0/b13c02e3ddd6a9d5f8bf84133b3242de556512d824dddeea71cce2dbd6579c8f4d672381c4e742d45cf4423d0701765b4a6e5fbc24701def16bc2b40f8daa96a - languageName: node - linkType: hard - -"loupe@npm:^3.1.4": - version: 3.1.4 - resolution: "loupe@npm:3.1.4" - checksum: 10c0/5c2e6aefaad25f812d361c750b8cf4ff91d68de289f141d7c85c2ce9bb79eeefa06a93c85f7b87cba940531ed8f15e492f32681d47eed23842ad1963eb3a154d - languageName: node - linkType: hard - -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.4.3 - resolution: "lru-cache@npm:10.4.3" - checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb - languageName: node - linkType: hard - -"magic-string@npm:^0.30.11, magic-string@npm:^0.30.17": - version: 0.30.17 - resolution: "magic-string@npm:0.30.17" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - checksum: 10c0/16826e415d04b88378f200fe022b53e638e3838b9e496edda6c0e086d7753a44a6ed187adc72d19f3623810589bf139af1a315541cd6a26ae0771a0193eaf7b8 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^14.0.3": - version: 14.0.3 - resolution: "make-fetch-happen@npm:14.0.3" - dependencies: - "@npmcli/agent": "npm:^3.0.0" - cacache: "npm:^19.0.1" - http-cache-semantics: "npm:^4.1.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^4.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^1.0.0" - proc-log: "npm:^5.0.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^12.0.0" - checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 - languageName: node - linkType: hard - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"merge2@npm:^1.3.0": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb - languageName: node - linkType: hard - -"micromatch@npm:^4.0.5, micromatch@npm:^4.0.8": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" - dependencies: - braces: "npm:^3.0.3" - picomatch: "npm:^2.3.1" - checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 - languageName: node - linkType: hard - -"minimatch@npm:^9.0.3, minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e - languageName: node - linkType: hard - -"minipass-fetch@npm:^4.0.0": - version: 4.0.1 - resolution: "minipass-fetch@npm:4.0.1" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^3.0.1" - dependenciesMeta: - encoding: - optional: true - checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": - version: 7.1.2 - resolution: "minipass@npm:7.1.2" - checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 - languageName: node - linkType: hard - -"minizlib@npm:^3.0.1": - version: 3.0.1 - resolution: "minizlib@npm:3.0.1" - dependencies: - minipass: "npm:^7.0.4" - rimraf: "npm:^5.0.5" - checksum: 10c0/82f8bf70da8af656909a8ee299d7ed3b3372636749d29e105f97f20e88971be31f5ed7642f2e898f00283b68b701cc01307401cdc209b0efc5dd3818220e5093 - languageName: node - linkType: hard - -"mitt@npm:^3.0.1": - version: 3.0.1 - resolution: "mitt@npm:3.0.1" - checksum: 10c0/3ab4fdecf3be8c5255536faa07064d05caa3dd332bd318ff02e04621f7b3069ca1de9106cfe8e7ced675abfc2bec2ce4c4ef321c4a1bb1fb29df8ae090741913 - languageName: node - linkType: hard - -"mkdirp@npm:^3.0.1": - version: 3.0.1 - resolution: "mkdirp@npm:3.0.1" - bin: - mkdirp: dist/cjs/src/bin.js - checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d - languageName: node - linkType: hard - -"mlly@npm:^1.2.0, mlly@npm:^1.7.4": - version: 1.7.4 - resolution: "mlly@npm:1.7.4" - dependencies: - acorn: "npm:^8.14.0" - pathe: "npm:^2.0.1" - pkg-types: "npm:^1.3.0" - ufo: "npm:^1.5.4" - checksum: 10c0/69e738218a13d6365caf930e0ab4e2b848b84eec261597df9788cefb9930f3e40667be9cb58a4718834ba5f97a6efeef31d3b5a95f4388143fd4e0d0deff72ff - languageName: node - linkType: hard - -"ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 - languageName: node - linkType: hard - -"muggle-string@npm:^0.4.1": - version: 0.4.1 - resolution: "muggle-string@npm:0.4.1" - checksum: 10c0/e914b63e24cd23f97e18376ec47e4ba3aa24365e4776212b666add2e47bb158003212980d732c49abf3719568900af7861873844a6e2d3a7ca7e86952c0e99e9 - languageName: node - linkType: hard - -"nanoid@npm:^3.3.11": - version: 3.3.11 - resolution: "nanoid@npm:3.3.11" - bin: - nanoid: bin/nanoid.cjs - checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b - languageName: node - linkType: hard - -"nanoid@npm:^3.3.8": - version: 3.3.8 - resolution: "nanoid@npm:3.3.8" - bin: - nanoid: bin/nanoid.cjs - checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120 - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 - languageName: node - linkType: hard - -"negotiator@npm:^1.0.0": - version: 1.0.0 - resolution: "negotiator@npm:1.0.0" - checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b - languageName: node - linkType: hard - -"node-addon-api@npm:^7.0.0": - version: 7.1.1 - resolution: "node-addon-api@npm:7.1.1" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/fb32a206276d608037fa1bcd7e9921e177fe992fc610d098aa3128baca3c0050fc1e014fa007e9b3874cf865ddb4f5bd9f43ccb7cbbbe4efaff6a83e920b17e9 - languageName: node - linkType: hard - -"node-fetch-native@npm:^1.6.6": - version: 1.6.6 - resolution: "node-fetch-native@npm:1.6.6" - checksum: 10c0/8c12dab0e640d8bc126a03d604af9cf3fc1b87f2cda5af0c71601079d5ed835c1dc149c7042b61c83f252a382e1cf1e541788f4c9e8e6c089af77497190f5dc3 - languageName: node - linkType: hard - -"node-fetch@npm:^2.7.0": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 11.1.0 - resolution: "node-gyp@npm:11.1.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^14.0.3" - nopt: "npm:^8.0.0" - proc-log: "npm:^5.0.0" - semver: "npm:^7.3.5" - tar: "npm:^7.4.3" - which: "npm:^5.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/c38977ce502f1ea41ba2b8721bd5b49bc3d5b3f813eabfac8414082faf0620ccb5211e15c4daecc23ed9f5e3e9cc4da00e575a0bcfc2a95a069294f2afa1e0cd - languageName: node - linkType: hard - -"nopt@npm:^8.0.0": - version: 8.1.0 - resolution: "nopt@npm:8.1.0" - dependencies: - abbrev: "npm:^3.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef - languageName: node - linkType: hard - -"nth-check@npm:^2.1.1": - version: 2.1.1 - resolution: "nth-check@npm:2.1.1" - dependencies: - boolbase: "npm:^1.0.0" - checksum: 10c0/5fee7ff309727763689cfad844d979aedd2204a817fbaaf0e1603794a7c20db28548d7b024692f953557df6ce4a0ee4ae46cd8ebd9b36cfb300b9226b567c479 - languageName: node - linkType: hard - -"nypm@npm:^0.6.0": - version: 0.6.0 - resolution: "nypm@npm:0.6.0" - dependencies: - citty: "npm:^0.1.6" - consola: "npm:^3.4.0" - pathe: "npm:^2.0.3" - pkg-types: "npm:^2.0.0" - tinyexec: "npm:^0.3.2" - bin: - nypm: dist/cli.mjs - checksum: 10c0/899f16c2df1bdf3ef4de5f7d4ed5530e2e1ca097cc7dedbaa25abb6b8e44bb470c25cd26639f6e3e4f5734867e61f7f77c4ed5dfbe86b2a1bdef4525a2dc0026 - languageName: node - linkType: hard - -"ohash@npm:^2.0.11": - version: 2.0.11 - resolution: "ohash@npm:2.0.11" - checksum: 10c0/d07c8d79cc26da082c1a7c8d5b56c399dd4ed3b2bd069fcae6bae78c99a9bcc3ad813b1e1f49ca2f335292846d689c6141a762cf078727d2302a33d414e69c79 - languageName: node - linkType: hard - -"open@npm:^8.4.0": - version: 8.4.2 - resolution: "open@npm:8.4.2" - dependencies: - define-lazy-prop: "npm:^2.0.0" - is-docker: "npm:^2.1.1" - is-wsl: "npm:^2.2.0" - checksum: 10c0/bb6b3a58401dacdb0aad14360626faf3fb7fba4b77816b373495988b724fb48941cad80c1b65d62bb31a17609b2cd91c41a181602caea597ca80dfbcc27e84c9 - languageName: node - linkType: hard - -"optionator@npm:^0.9.3": - version: 0.9.4 - resolution: "optionator@npm:0.9.4" - dependencies: - deep-is: "npm:^0.1.3" - fast-levenshtein: "npm:^2.0.6" - levn: "npm:^0.4.1" - prelude-ls: "npm:^1.2.1" - type-check: "npm:^0.4.0" - word-wrap: "npm:^1.2.5" - checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - -"p-locate@npm:^5.0.0": - version: 5.0.0 - resolution: "p-locate@npm:5.0.0" - dependencies: - p-limit: "npm:^3.0.2" - checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a - languageName: node - linkType: hard - -"p-map@npm:^7.0.2": - version: 7.0.3 - resolution: "p-map@npm:7.0.3" - checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c - languageName: node - linkType: hard - -"package-json-from-dist@npm:^1.0.0": - version: 1.0.1 - resolution: "package-json-from-dist@npm:1.0.1" - checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: "npm:^3.0.0" - checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 - languageName: node - linkType: hard - -"parse5@npm:^7.1.2": - version: 7.2.1 - resolution: "parse5@npm:7.2.1" - dependencies: - entities: "npm:^4.5.0" - checksum: 10c0/829d37a0c709215a887e410a7118d754f8e1afd7edb529db95bc7bbf8045fb0266a7b67801331d8e8d9d073ea75793624ec27ce9ff3b96862c3b9008f4d68e80 - languageName: node - linkType: hard - -"path-browserify@npm:^1.0.1": - version: 1.0.1 - resolution: "path-browserify@npm:1.0.1" - checksum: 10c0/8b8c3fd5c66bd340272180590ae4ff139769e9ab79522e2eb82e3d571a89b8117c04147f65ad066dccfb42fcad902e5b7d794b3d35e0fd840491a8ddbedf8c66 - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c - languageName: node - linkType: hard - -"path-scurry@npm:^1.11.1": - version: 1.11.1 - resolution: "path-scurry@npm:1.11.1" - dependencies: - lru-cache: "npm:^10.2.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d - languageName: node - linkType: hard - -"pathe@npm:^1.0.0": - version: 1.1.2 - resolution: "pathe@npm:1.1.2" - checksum: 10c0/64ee0a4e587fb0f208d9777a6c56e4f9050039268faaaaecd50e959ef01bf847b7872785c36483fa5cdcdbdfdb31fef2ff222684d4fc21c330ab60395c681897 - languageName: node - linkType: hard - -"pathe@npm:^2.0.1": - version: 2.0.2 - resolution: "pathe@npm:2.0.2" - checksum: 10c0/21fce96ca9cebf037b075de8e5cc4ac6aa1009bce57946a72695f47ded84cf4b29f03bed721ea0f6e39b69eb1a0620bcee1f72eca46086765214a2965399b83a - languageName: node - linkType: hard - -"pathe@npm:^2.0.2, pathe@npm:^2.0.3": - version: 2.0.3 - resolution: "pathe@npm:2.0.3" - checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 - languageName: node - linkType: hard - -"pathval@npm:^2.0.0": - version: 2.0.0 - resolution: "pathval@npm:2.0.0" - checksum: 10c0/602e4ee347fba8a599115af2ccd8179836a63c925c23e04bd056d0674a64b39e3a081b643cc7bc0b84390517df2d800a46fcc5598d42c155fe4977095c2f77c5 - languageName: node - linkType: hard - -"perfect-debounce@npm:^1.0.0": - version: 1.0.0 - resolution: "perfect-debounce@npm:1.0.0" - checksum: 10c0/e2baac416cae046ef1b270812cf9ccfb0f91c04ea36ac7f5b00bc84cb7f41bdbba087c0ab21b4e02a7ef3a1f1f6db399f137cecec46868bd7d8d88c2a9ee431f - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": - version: 1.1.1 - resolution: "picocolors@npm:1.1.1" - checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 - languageName: node - linkType: hard - -"picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be - languageName: node - linkType: hard - -"picomatch@npm:^4.0.2": - version: 4.0.2 - resolution: "picomatch@npm:4.0.2" - checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc - languageName: node - linkType: hard - -"pinia-plugin-persistedstate@npm:^4.3.0": - version: 4.3.0 - resolution: "pinia-plugin-persistedstate@npm:4.3.0" - dependencies: - "@nuxt/kit": "npm:^3.17.2" - deep-pick-omit: "npm:^1.2.1" - defu: "npm:^6.1.4" - destr: "npm:^2.0.5" - peerDependencies: - "@pinia/nuxt": ">=0.10.0" - pinia: ">=3.0.0" - peerDependenciesMeta: - "@pinia/nuxt": - optional: true - pinia: - optional: true - checksum: 10c0/f19271a1d5d382a39e2d63ccf314ffa7460fa45a90caea7efbd9791e2abadbab61a9186fb04fafc507f8093b7f6d8c644337f6b2d26fc1603cb9d06e08ae45ec - languageName: node - linkType: hard - -"pinia@npm:^3.0.3": - version: 3.0.3 - resolution: "pinia@npm:3.0.3" - dependencies: - "@vue/devtools-api": "npm:^7.7.2" - peerDependencies: - typescript: ">=4.4.4" - vue: ^2.7.0 || ^3.5.11 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/486f464ce402e33c502caf564bebcd00c364e7d57432373f64201da0cdbbc96a6357fecb5ee09882228d3c17d400af1f0c9550ddf2d19f2ef2931860a427cc23 - languageName: node - linkType: hard - -"pkg-types@npm:^1.3.0": - version: 1.3.1 - resolution: "pkg-types@npm:1.3.1" - dependencies: - confbox: "npm:^0.1.8" - mlly: "npm:^1.7.4" - pathe: "npm:^2.0.1" - checksum: 10c0/19e6cb8b66dcc66c89f2344aecfa47f2431c988cfa3366bdfdcfb1dd6695f87dcce37fbd90fe9d1605e2f4440b77f391e83c23255347c35cf84e7fd774d7fcea - languageName: node - linkType: hard - -"pkg-types@npm:^2.0.0, pkg-types@npm:^2.0.1, pkg-types@npm:^2.1.0": - version: 2.1.0 - resolution: "pkg-types@npm:2.1.0" - dependencies: - confbox: "npm:^0.2.1" - exsolve: "npm:^1.0.1" - pathe: "npm:^2.0.3" - checksum: 10c0/7729d0a2367ba0aa2caf0f84a6ff0b73b13f4e9a3d62c229ddfa6d45d1f3898f590acdbaa64d779d56737d4ebea2d085961efd59094b8adf8baa34d829599b75 - languageName: node - linkType: hard - -"playwright-core@npm:1.53.1": - version: 1.53.1 - resolution: "playwright-core@npm:1.53.1" - bin: - playwright-core: cli.js - checksum: 10c0/8780552740741b94c346373ab6f949e9a44d3df54016b12123da9fe2f5fb60c1838197642916789b0a2ffb567e4ba0089f2e57d496bef7e460ddc4526f9b3b0f - languageName: node - linkType: hard - -"playwright@npm:1.53.1": - version: 1.53.1 - resolution: "playwright@npm:1.53.1" - dependencies: - fsevents: "npm:2.3.2" - playwright-core: "npm:1.53.1" - dependenciesMeta: - fsevents: - optional: true - bin: - playwright: cli.js - checksum: 10c0/3dcbcd3791a7f0d1007db4d3126c8136258a2002c2fbfc8b840086b64cbc1fb628b2e25dd3b345d685fb27ba39790ab0f4ce81a8faade7dc748af3a63bdf3550 - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.15": - version: 6.1.2 - resolution: "postcss-selector-parser@npm:6.1.2" - dependencies: - cssesc: "npm:^3.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e - languageName: node - linkType: hard - -"postcss@npm:^8.4.48": - version: 8.5.1 - resolution: "postcss@npm:8.5.1" - dependencies: - nanoid: "npm:^3.3.8" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/c4d90c59c98e8a0c102b77d3f4cac190f883b42d63dc60e2f3ed840f16197c0c8e25a4327d2e9a847b45a985612317dc0534178feeebd0a1cf3eb0eecf75cae4 - languageName: node - linkType: hard - -"postcss@npm:^8.5.3": - version: 8.5.3 - resolution: "postcss@npm:8.5.3" - dependencies: - nanoid: "npm:^3.3.8" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/b75510d7b28c3ab728c8733dd01538314a18c52af426f199a3c9177e63eb08602a3938bfb66b62dc01350b9aed62087eabbf229af97a1659eb8d3513cec823b3 - languageName: node - linkType: hard - -"postcss@npm:^8.5.5, postcss@npm:^8.5.6": - version: 8.5.6 - resolution: "postcss@npm:8.5.6" - dependencies: - nanoid: "npm:^3.3.11" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/5127cc7c91ed7a133a1b7318012d8bfa112da9ef092dddf369ae699a1f10ebbd89b1b9f25f3228795b84585c72aabd5ced5fc11f2ba467eedf7b081a66fad024 - languageName: node - linkType: hard - -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd - languageName: node - linkType: hard - -"pretty-bytes@npm:^7.0.0": - version: 7.0.0 - resolution: "pretty-bytes@npm:7.0.0" - checksum: 10c0/94b3e3fa62674b8fe953245d18155d44bd5771da26e07bdf59270c0b4c0c808dff1ff4a63beab49e9d9fd6b1a38fd0e0a32735cfb0a61c65fcd121e1a3fcd03c - languageName: node - linkType: hard - -"proc-log@npm:^5.0.0": - version: 5.0.0 - resolution: "proc-log@npm:5.0.0" - checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: "npm:^2.0.2" - retry: "npm:^0.12.0" - checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 - languageName: node - linkType: hard - -"punycode@npm:^2.1.0": - version: 2.3.1 - resolution: "punycode@npm:2.3.1" - checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 - languageName: node - linkType: hard - -"quansync@npm:^0.2.8": - version: 0.2.10 - resolution: "quansync@npm:0.2.10" - checksum: 10c0/f86f1d644f812a3a7c42de79eb401c47a5a67af82a9adff8a8afb159325e03e00f77cebbf42af6340a0bd47bd0c1fbe999e7caf7e1bbb30d7acb00c8729b7530 - languageName: node - linkType: hard - -"quasar@npm:^2.18.1": - version: 2.18.1 - resolution: "quasar@npm:2.18.1" - checksum: 10c0/41edfe6b65852e567b00133d64feaa624c42aba3e655e6be2621be7e5ff3945d45f23a091da0637c54b1f69462cb6f97873dbae25de52e411a009c10b5323412 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 - languageName: node - linkType: hard - -"rc9@npm:^2.1.2": - version: 2.1.2 - resolution: "rc9@npm:2.1.2" - dependencies: - defu: "npm:^6.1.4" - destr: "npm:^2.0.3" - checksum: 10c0/a2ead3b94bf033e35e4ea40d70062a09feddb8f589c3f5a8fe4e9342976974296aee9f6e9e72bd5e78e6ae4b7bc16dc244f63699fd7322c16314e3238db982c9 - languageName: node - linkType: hard - -"readdirp@npm:^4.0.1": - version: 4.1.1 - resolution: "readdirp@npm:4.1.1" - checksum: 10c0/a1afc90d0e57ce4caa28046875519453fd09663ade0d0c29fe0d6a117eca4596cfdf1a9ebb0859ad34cca7b9351d4f0d8d962a4363d40f3f37e57dba51ffb6b6 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.14.0": - version: 0.14.1 - resolution: "regenerator-runtime@npm:0.14.1" - checksum: 10c0/1b16eb2c4bceb1665c89de70dcb64126a22bc8eb958feef3cd68fe11ac6d2a4899b5cd1b80b0774c7c03591dc57d16631a7f69d2daa2ec98100e2f29f7ec4cc4 - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 - languageName: node - linkType: hard - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 - languageName: node - linkType: hard - -"rfdc@npm:^1.4.1": - version: 1.4.1 - resolution: "rfdc@npm:1.4.1" - checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 - languageName: node - linkType: hard - -"rimraf@npm:^5.0.5": - version: 5.0.10 - resolution: "rimraf@npm:5.0.10" - dependencies: - glob: "npm:^10.3.7" - bin: - rimraf: dist/esm/bin.mjs - checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc - languageName: node - linkType: hard - -"rollup-plugin-visualizer@npm:^5.11.0": - version: 5.14.0 - resolution: "rollup-plugin-visualizer@npm:5.14.0" - dependencies: - open: "npm:^8.4.0" - picomatch: "npm:^4.0.2" - source-map: "npm:^0.7.4" - yargs: "npm:^17.5.1" - peerDependencies: - rolldown: 1.x - rollup: 2.x || 3.x || 4.x - peerDependenciesMeta: - rolldown: - optional: true - rollup: - optional: true - bin: - rollup-plugin-visualizer: dist/bin/cli.js - checksum: 10c0/ec6ca9ed125bce9994ba49a340bda730661d8e8dc5c5dc014dc757185182e1eda49c6708f990cb059095e71a3741a5248f1e6ba0ced7056020692888e06b1ddf - languageName: node - linkType: hard - -"rollup@npm:^4.34.9": - version: 4.40.1 - resolution: "rollup@npm:4.40.1" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.40.1" - "@rollup/rollup-android-arm64": "npm:4.40.1" - "@rollup/rollup-darwin-arm64": "npm:4.40.1" - "@rollup/rollup-darwin-x64": "npm:4.40.1" - "@rollup/rollup-freebsd-arm64": "npm:4.40.1" - "@rollup/rollup-freebsd-x64": "npm:4.40.1" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.40.1" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.40.1" - "@rollup/rollup-linux-arm64-gnu": "npm:4.40.1" - "@rollup/rollup-linux-arm64-musl": "npm:4.40.1" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.40.1" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.40.1" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.40.1" - "@rollup/rollup-linux-riscv64-musl": "npm:4.40.1" - "@rollup/rollup-linux-s390x-gnu": "npm:4.40.1" - "@rollup/rollup-linux-x64-gnu": "npm:4.40.1" - "@rollup/rollup-linux-x64-musl": "npm:4.40.1" - "@rollup/rollup-win32-arm64-msvc": "npm:4.40.1" - "@rollup/rollup-win32-ia32-msvc": "npm:4.40.1" - "@rollup/rollup-win32-x64-msvc": "npm:4.40.1" - "@types/estree": "npm:1.0.7" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-freebsd-arm64": - optional: true - "@rollup/rollup-freebsd-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-loongarch64-gnu": - optional: true - "@rollup/rollup-linux-powerpc64le-gnu": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-riscv64-musl": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10c0/11c44b5ef9b3fd521c5501b3f1c36af4ca07821aeff41d41f45336eee324d8f5b46c1a92189f5c8cd146bc21ac10418d57cb4571637ea09aced1ae831a2a4ae0 - languageName: node - linkType: hard - -"rollup@npm:^4.40.0": - version: 4.44.0 - resolution: "rollup@npm:4.44.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.44.0" - "@rollup/rollup-android-arm64": "npm:4.44.0" - "@rollup/rollup-darwin-arm64": "npm:4.44.0" - "@rollup/rollup-darwin-x64": "npm:4.44.0" - "@rollup/rollup-freebsd-arm64": "npm:4.44.0" - "@rollup/rollup-freebsd-x64": "npm:4.44.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.44.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.44.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.44.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.44.0" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.44.0" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.44.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.44.0" - "@rollup/rollup-linux-riscv64-musl": "npm:4.44.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.44.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.44.0" - "@rollup/rollup-linux-x64-musl": "npm:4.44.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.44.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.44.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.44.0" - "@types/estree": "npm:1.0.8" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-freebsd-arm64": - optional: true - "@rollup/rollup-freebsd-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-loongarch64-gnu": - optional: true - "@rollup/rollup-linux-powerpc64le-gnu": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-riscv64-musl": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10c0/ff3e0741f2fc7b7b183079628cf50fcfc9163bef86ecfbc9f4e4023adfdee375b7075940963514e2bc4969764688d38d67095bce038b0ad5d572207f114afff5 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"sass@npm:^1.89.2": - version: 1.89.2 - resolution: "sass@npm:1.89.2" - dependencies: - "@parcel/watcher": "npm:^2.4.1" - chokidar: "npm:^4.0.0" - immutable: "npm:^5.0.2" - source-map-js: "npm:>=0.6.2 <2.0.0" - dependenciesMeta: - "@parcel/watcher": - optional: true - bin: - sass: sass.js - checksum: 10c0/752ccc7581b0c6395f63918116c20924e99943a86d79e94f5c4a0d41b1e981fe1f0ecd1ee82fff21496f81dbc91f68fb35a498166562ec8ec53e7aad7c3dbd9d - languageName: node - linkType: hard - -"scule@npm:^1.3.0": - version: 1.3.0 - resolution: "scule@npm:1.3.0" - checksum: 10c0/5d1736daa10622c420f2aa74e60d3c722e756bfb139fa784ae5c66669fdfe92932d30ed5072e4ce3107f9c3053e35ad73b2461cb18de45b867e1d4dea63f8823 - languageName: node - linkType: hard - -"semver@npm:^7.3.5, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": - version: 7.6.3 - resolution: "semver@npm:7.6.3" - bin: - semver: bin/semver.js - checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf - languageName: node - linkType: hard - -"semver@npm:^7.7.2": - version: 7.7.2 - resolution: "semver@npm:7.7.2" - bin: - semver: bin/semver.js - checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: "npm:^3.0.0" - checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 - languageName: node - linkType: hard - -"siginfo@npm:^2.0.0": - version: 2.0.0 - resolution: "siginfo@npm:2.0.0" - checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.5 - resolution: "socks-proxy-agent@npm:8.0.5" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:^4.3.4" - socks: "npm:^2.8.3" - checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 - languageName: node - linkType: hard - -"socks@npm:^2.8.3": - version: 2.8.4 - resolution: "socks@npm:2.8.4" - dependencies: - ip-address: "npm:^9.0.5" - smart-buffer: "npm:^4.2.0" - checksum: 10c0/00c3271e233ccf1fb83a3dd2060b94cc37817e0f797a93c560b9a7a86c4a0ec2961fb31263bdd24a3c28945e24868b5f063cd98744171d9e942c513454b50ae5 - languageName: node - linkType: hard - -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf - languageName: node - linkType: hard - -"source-map@npm:^0.7.4": - version: 0.7.4 - resolution: "source-map@npm:0.7.4" - checksum: 10c0/dc0cf3768fe23c345ea8760487f8c97ef6fca8a73c83cd7c9bf2fde8bc2c34adb9c0824d6feb14bc4f9e37fb522e18af621543f1289038a66ac7586da29aa7dc - languageName: node - linkType: hard - -"source-map@npm:~0.6.1": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 - languageName: node - linkType: hard - -"speakingurl@npm:^14.0.1": - version: 14.0.1 - resolution: "speakingurl@npm:14.0.1" - checksum: 10c0/1de1d1b938a7c4d9e79593ff7a26d312ec04a7c3234ca40b7f9b8106daf74ea9d2110a077f5db97ecf3762b83069e3ccbf9694431b51d4fcfd863f0b3333c342 - languageName: node - linkType: hard - -"sprintf-js@npm:^1.1.3": - version: 1.1.3 - resolution: "sprintf-js@npm:1.1.3" - checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec - languageName: node - linkType: hard - -"ssri@npm:^12.0.0": - version: 12.0.0 - resolution: "ssri@npm:12.0.0" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d - languageName: node - linkType: hard - -"stackback@npm:0.0.2": - version: 0.0.2 - resolution: "stackback@npm:0.0.2" - checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 - languageName: node - linkType: hard - -"std-env@npm:^3.9.0": - version: 3.9.0 - resolution: "std-env@npm:3.9.0" - checksum: 10c0/4a6f9218aef3f41046c3c7ecf1f98df00b30a07f4f35c6d47b28329bc2531eef820828951c7d7b39a1c5eb19ad8a46e3ddfc7deb28f0a2f3ceebee11bab7ba50 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: "npm:^0.2.0" - emoji-regex: "npm:^9.2.2" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd - languageName: node - linkType: hard - -"strip-literal@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-literal@npm:3.0.0" - dependencies: - js-tokens: "npm:^9.0.1" - checksum: 10c0/d81657f84aba42d4bbaf2a677f7e7f34c1f3de5a6726db8bc1797f9c0b303ba54d4660383a74bde43df401cf37cce1dff2c842c55b077a4ceee11f9e31fba828 - languageName: node - linkType: hard - -"style-mod@npm:^4.0.0, style-mod@npm:^4.1.0": - version: 4.1.2 - resolution: "style-mod@npm:4.1.2" - checksum: 10c0/ad4d870b3642b0e42ecc7be0e106dd14b7af11985e34fee8de34e5e38c3214bfc96fa7055acea86d75a3a59ddea3f6a8c6641001a66494d7df72d09685e3fadb - languageName: node - linkType: hard - -"superjson@npm:^2.2.1": - version: 2.2.2 - resolution: "superjson@npm:2.2.2" - dependencies: - copy-anything: "npm:^3.0.2" - checksum: 10c0/aa49ebe6653e963020bc6a1ed416d267dfda84cfcc3cbd3beffd75b72e44eb9df7327215f3e3e77528f6e19ad8895b16a4964fdcd56d1799d14350db8c92afbc - languageName: node - linkType: hard - -"supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 - languageName: node - linkType: hard - -"synckit@npm:^0.10.0": - version: 0.10.3 - resolution: "synckit@npm:0.10.3" - dependencies: - "@pkgr/core": "npm:^0.2.0" - tslib: "npm:^2.8.1" - checksum: 10c0/9855d10231ae9b69c3aa08d46c96bd4befdcac33da44e29fb80e5c1430e453b5a33b8c073cdd25cfe9578f1d625c7d60c394ece1e202237116c1484def614041 - languageName: node - linkType: hard - -"tar@npm:^7.4.3": - version: 7.4.3 - resolution: "tar@npm:7.4.3" - dependencies: - "@isaacs/fs-minipass": "npm:^4.0.0" - chownr: "npm:^3.0.0" - minipass: "npm:^7.1.2" - minizlib: "npm:^3.0.1" - mkdirp: "npm:^3.0.1" - yallist: "npm:^5.0.0" - checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d - languageName: node - linkType: hard - -"tinybench@npm:^2.9.0": - version: 2.9.0 - resolution: "tinybench@npm:2.9.0" - checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c - languageName: node - linkType: hard - -"tinyexec@npm:^0.3.2": - version: 0.3.2 - resolution: "tinyexec@npm:0.3.2" - checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.13": - version: 0.2.13 - resolution: "tinyglobby@npm:0.2.13" - dependencies: - fdir: "npm:^6.4.4" - picomatch: "npm:^4.0.2" - checksum: 10c0/ef07dfaa7b26936601d3f6d999f7928a4d1c6234c5eb36896bb88681947c0d459b7ebe797022400e555fe4b894db06e922b95d0ce60cb05fd827a0a66326b18c - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.14": - version: 0.2.14 - resolution: "tinyglobby@npm:0.2.14" - dependencies: - fdir: "npm:^6.4.4" - picomatch: "npm:^4.0.2" - checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6 - languageName: node - linkType: hard - -"tinypool@npm:^1.1.1": - version: 1.1.1 - resolution: "tinypool@npm:1.1.1" - checksum: 10c0/bf26727d01443061b04fa863f571016950888ea994ba0cd8cba3a1c51e2458d84574341ab8dbc3664f1c3ab20885c8cf9ff1cc4b18201f04c2cde7d317fff69b - languageName: node - linkType: hard - -"tinyrainbow@npm:^2.0.0": - version: 2.0.0 - resolution: "tinyrainbow@npm:2.0.0" - checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f - languageName: node - linkType: hard - -"tinyspy@npm:^4.0.3": - version: 4.0.3 - resolution: "tinyspy@npm:4.0.3" - checksum: 10c0/0a92a18b5350945cc8a1da3a22c9ad9f4e2945df80aaa0c43e1b3a3cfb64d8501e607ebf0305e048e3c3d3e0e7f8eb10cea27dc17c21effb73e66c4a3be36373 - languageName: node - linkType: hard - -"tmp@npm:^0.2.1": - version: 0.2.3 - resolution: "tmp@npm:0.2.3" - checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 - languageName: node - linkType: hard - -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 - languageName: node - linkType: hard - -"ts-api-utils@npm:^2.0.0": - version: 2.0.0 - resolution: "ts-api-utils@npm:2.0.0" - peerDependencies: - typescript: ">=4.8.4" - checksum: 10c0/6165e29a5b75bd0218e3cb0f9ee31aa893dbd819c2e46dbb086c841121eb0436ed47c2c18a20cb3463d74fd1fb5af62e2604ba5971cc48e5b38ebbdc56746dfc - languageName: node - linkType: hard - -"ts-api-utils@npm:^2.1.0": - version: 2.1.0 - resolution: "ts-api-utils@npm:2.1.0" - peerDependencies: - typescript: ">=4.8.4" - checksum: 10c0/9806a38adea2db0f6aa217ccc6bc9c391ddba338a9fe3080676d0d50ed806d305bb90e8cef0276e793d28c8a929f400abb184ddd7ff83a416959c0f4d2ce754f - languageName: node - linkType: hard - -"tslib@npm:^2.8.1": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 - languageName: node - linkType: hard - -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: "npm:^1.2.1" - checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 - languageName: node - linkType: hard - -"typescript-eslint@npm:^8.34.1": - version: 8.34.1 - resolution: "typescript-eslint@npm:8.34.1" - dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.34.1" - "@typescript-eslint/parser": "npm:8.34.1" - "@typescript-eslint/utils": "npm:8.34.1" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/6de5d2ce180d1609a8a5383557a2787f17620ebc9a4d84fba9d9240db8005cc3084a7840ebafe532fba9970fe12822ee415615041f3527334fdfc45c411d35b6 - languageName: node - linkType: hard - -"typescript@npm:^5.8.3": - version: 5.8.3 - resolution: "typescript@npm:5.8.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/5f8bb01196e542e64d44db3d16ee0e4063ce4f3e3966df6005f2588e86d91c03e1fb131c2581baf0fb65ee79669eea6e161cd448178986587e9f6844446dbb48 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": - version: 5.8.3 - resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/39117e346ff8ebd87ae1510b3a77d5d92dae5a89bde588c747d25da5c146603a99c8ee588c7ef80faaf123d89ed46f6dbd918d534d641083177d5fac38b8a1cb - languageName: node - linkType: hard - -"ua-is-frozen@npm:^0.1.2": - version: 0.1.2 - resolution: "ua-is-frozen@npm:0.1.2" - checksum: 10c0/fb41929bd4924c9676391e6d7197d30580749a96697a83c8b6e77fb137e3ff8492dcd1e6f871f6a9517848651a93af37bfefb25385f16d90e19678ade22d30b7 - languageName: node - linkType: hard - -"ua-parser-js@npm:^2.0.3": - version: 2.0.3 - resolution: "ua-parser-js@npm:2.0.3" - dependencies: - "@types/node-fetch": "npm:^2.6.12" - detect-europe-js: "npm:^0.1.2" - is-standalone-pwa: "npm:^0.1.1" - node-fetch: "npm:^2.7.0" - ua-is-frozen: "npm:^0.1.2" - bin: - ua-parser-js: script/cli.js - checksum: 10c0/0fd098a19c11ecddf35f65a9a86a44e4d6147fbed4ad1813d0142c55d305ba2220f41b48c5a60f082552ff4a93bbb5edb1b24de0af45271d1735b63794fef1e0 - languageName: node - linkType: hard - -"ufo@npm:^1.5.4": - version: 1.5.4 - resolution: "ufo@npm:1.5.4" - checksum: 10c0/b5dc4dc435c49c9ef8890f1b280a19ee4d0954d1d6f9ab66ce62ce64dd04c7be476781531f952a07c678d51638d02ad4b98e16237be29149295b0f7c09cda765 - languageName: node - linkType: hard - -"ufo@npm:^1.6.1": - version: 1.6.1 - resolution: "ufo@npm:1.6.1" - checksum: 10c0/5a9f041e5945fba7c189d5410508cbcbefef80b253ed29aa2e1f8a2b86f4bd51af44ee18d4485e6d3468c92be9bf4a42e3a2b72dcaf27ce39ce947ec994f1e6b - languageName: node - linkType: hard - -"unctx@npm:^2.4.1": - version: 2.4.1 - resolution: "unctx@npm:2.4.1" - dependencies: - acorn: "npm:^8.14.0" - estree-walker: "npm:^3.0.3" - magic-string: "npm:^0.30.17" - unplugin: "npm:^2.1.0" - checksum: 10c0/08d334fbe51ad4bad4c7b7cc5efec84e61b39ca44e20cda2750a37f20b8e122ed4ce525d6a152b4c463ca1545c38fb556049d8c4ee0299afba4fdb0057d711ee - languageName: node - linkType: hard - -"undici-types@npm:~6.20.0": - version: 6.20.0 - resolution: "undici-types@npm:6.20.0" - checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf - languageName: node - linkType: hard - -"unimport@npm:^5.0.1": - version: 5.0.1 - resolution: "unimport@npm:5.0.1" - dependencies: - acorn: "npm:^8.14.1" - escape-string-regexp: "npm:^5.0.0" - estree-walker: "npm:^3.0.3" - local-pkg: "npm:^1.1.1" - magic-string: "npm:^0.30.17" - mlly: "npm:^1.7.4" - pathe: "npm:^2.0.3" - picomatch: "npm:^4.0.2" - pkg-types: "npm:^2.1.0" - scule: "npm:^1.3.0" - strip-literal: "npm:^3.0.0" - tinyglobby: "npm:^0.2.13" - unplugin: "npm:^2.3.2" - unplugin-utils: "npm:^0.2.4" - checksum: 10c0/42a66a63faf7ce0f0650e062e3ff89bcaab4bcf6b5457be2454b20a379607af67fff2fc8db6b04649c852e89cfc83abf80df5a43cd7c9c5f074eb4eab8568d72 - languageName: node - linkType: hard - -"unique-filename@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-filename@npm:4.0.0" - dependencies: - unique-slug: "npm:^5.0.0" - checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc - languageName: node - linkType: hard - -"unique-slug@npm:^5.0.0": - version: 5.0.0 - resolution: "unique-slug@npm:5.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 - languageName: node - linkType: hard - -"unplugin-utils@npm:^0.2.4": - version: 0.2.4 - resolution: "unplugin-utils@npm:0.2.4" - dependencies: - pathe: "npm:^2.0.2" - picomatch: "npm:^4.0.2" - checksum: 10c0/b5ab2db37823f5b4c8ee8719caa4b5a50b2da33c74c8110d46deb7a2399dfa15cbcaa0cff62aa6400c76e778e42becd9195c09b6502c0c007d03610f432c875f - languageName: node - linkType: hard - -"unplugin@npm:^1.1.0": - version: 1.16.1 - resolution: "unplugin@npm:1.16.1" - dependencies: - acorn: "npm:^8.14.0" - webpack-virtual-modules: "npm:^0.6.2" - checksum: 10c0/dd5f8c5727d0135847da73cf03fb199107f1acf458167034886fda3405737dab871ad3926431b4f70e1e82cdac482ac1383cea4019d782a68515c8e3e611b6cc - languageName: node - linkType: hard - -"unplugin@npm:^2.1.0": - version: 2.1.2 - resolution: "unplugin@npm:2.1.2" - dependencies: - acorn: "npm:^8.14.0" - webpack-virtual-modules: "npm:^0.6.2" - checksum: 10c0/ae24ee275de96a700df416c3241f910ac964011c2e23dc726feb768fe10fc40bef3dbe2d0d8d267ed988c6c3393c3a9782d5b7b30df4a27e8dab244d86b4d4be - languageName: node - linkType: hard - -"unplugin@npm:^2.3.2": - version: 2.3.5 - resolution: "unplugin@npm:2.3.5" - dependencies: - acorn: "npm:^8.14.1" - picomatch: "npm:^4.0.2" - webpack-virtual-modules: "npm:^0.6.2" - checksum: 10c0/42d172be9b52cc139c69a8baefab6c44e99d7fbdafb9e5738348bc60f6c1302b9913543641f69b76bb07c6ff7d01fde3d8a67c9d3d7a976cc17d972c1ff88081 - languageName: node - linkType: hard - -"untyped@npm:^2.0.0": - version: 2.0.0 - resolution: "untyped@npm:2.0.0" - dependencies: - citty: "npm:^0.1.6" - defu: "npm:^6.1.4" - jiti: "npm:^2.4.2" - knitwork: "npm:^1.2.0" - scule: "npm:^1.3.0" - bin: - untyped: dist/cli.mjs - checksum: 10c0/24ed5347532d05c67fa89741e7d94fab8f706ea7ab8c4c52704d25b80e3744844d89d5bfd4fa72046ee234b3ee0dee9abc4579a20a10c783e6159db92502274f - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.2": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 - languageName: node - linkType: hard - -"uuid@npm:^11.1.0": - version: 11.1.0 - resolution: "uuid@npm:11.1.0" - bin: - uuid: dist/esm/bin/uuid - checksum: 10c0/34aa51b9874ae398c2b799c88a127701408cd581ee89ec3baa53509dd8728cbb25826f2a038f9465f8b7be446f0fbf11558862965b18d21c993684297628d4d3 - languageName: node - linkType: hard - -"vite-bundle-visualizer@npm:^1.2.1": - version: 1.2.1 - resolution: "vite-bundle-visualizer@npm:1.2.1" - dependencies: - cac: "npm:^6.7.14" - import-from-esm: "npm:^1.3.3" - rollup-plugin-visualizer: "npm:^5.11.0" - tmp: "npm:^0.2.1" - bin: - vite-bundle-visualizer: bin.js - checksum: 10c0/038946556ba742726927047de97b0e38fbc2191ebbeb79d2e0767d1fb6fad1500ffeaea6c69bd9c906fdd26327165c9adcdb211286da166fb08ab02100149b41 - languageName: node - linkType: hard - -"vite-node@npm:3.2.4": - version: 3.2.4 - resolution: "vite-node@npm:3.2.4" - dependencies: - cac: "npm:^6.7.14" - debug: "npm:^4.4.1" - es-module-lexer: "npm:^1.7.0" - pathe: "npm:^2.0.3" - vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" - bin: - vite-node: vite-node.mjs - checksum: 10c0/6ceca67c002f8ef6397d58b9539f80f2b5d79e103a18367288b3f00a8ab55affa3d711d86d9112fce5a7fa658a212a087a005a045eb8f4758947dd99af2a6c6b - languageName: node - linkType: hard - -"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0": - version: 7.0.0-beta.2 - resolution: "vite@npm:7.0.0-beta.2" - dependencies: - esbuild: "npm:^0.25.0" - fdir: "npm:^6.4.6" - fsevents: "npm:~2.3.3" - picomatch: "npm:^4.0.2" - postcss: "npm:^8.5.5" - rollup: "npm:^4.40.0" - tinyglobby: "npm:^0.2.14" - peerDependencies: - "@types/node": ^20.19.0 || >=22.12.0 - jiti: ">=1.21.0" - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: ">=0.54.8" - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - bin: - vite: bin/vite.js - checksum: 10c0/2cd51b6749171e255e478329c3f5c6fad9a3de0f36731396d1bebd77411bd93b5d835d0d8549fe707ddf5fb0e0c2f562e29b04d095d73408e4d340464182d140 - languageName: node - linkType: hard - -"vite@npm:^6.3.5": - version: 6.3.5 - resolution: "vite@npm:6.3.5" - dependencies: - esbuild: "npm:^0.25.0" - fdir: "npm:^6.4.4" - fsevents: "npm:~2.3.3" - picomatch: "npm:^4.0.2" - postcss: "npm:^8.5.3" - rollup: "npm:^4.34.9" - tinyglobby: "npm:^0.2.13" - peerDependencies: - "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: ">=1.21.0" - less: "*" - lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - bin: - vite: bin/vite.js - checksum: 10c0/df70201659085133abffc6b88dcdb8a57ef35f742a01311fc56a4cfcda6a404202860729cc65a2c401a724f6e25f9ab40ce4339ed4946f550541531ced6fe41c - languageName: node - linkType: hard - -"vitest@npm:^3.2.4": - version: 3.2.4 - resolution: "vitest@npm:3.2.4" - dependencies: - "@types/chai": "npm:^5.2.2" - "@vitest/expect": "npm:3.2.4" - "@vitest/mocker": "npm:3.2.4" - "@vitest/pretty-format": "npm:^3.2.4" - "@vitest/runner": "npm:3.2.4" - "@vitest/snapshot": "npm:3.2.4" - "@vitest/spy": "npm:3.2.4" - "@vitest/utils": "npm:3.2.4" - chai: "npm:^5.2.0" - debug: "npm:^4.4.1" - expect-type: "npm:^1.2.1" - magic-string: "npm:^0.30.17" - pathe: "npm:^2.0.3" - picomatch: "npm:^4.0.2" - std-env: "npm:^3.9.0" - tinybench: "npm:^2.9.0" - tinyexec: "npm:^0.3.2" - tinyglobby: "npm:^0.2.14" - tinypool: "npm:^1.1.1" - tinyrainbow: "npm:^2.0.0" - vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" - vite-node: "npm:3.2.4" - why-is-node-running: "npm:^2.3.0" - peerDependencies: - "@edge-runtime/vm": "*" - "@types/debug": ^4.1.12 - "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 - "@vitest/browser": 3.2.4 - "@vitest/ui": 3.2.4 - happy-dom: "*" - jsdom: "*" - peerDependenciesMeta: - "@edge-runtime/vm": - optional: true - "@types/debug": - optional: true - "@types/node": - optional: true - "@vitest/browser": - optional: true - "@vitest/ui": - optional: true - happy-dom: - optional: true - jsdom: - optional: true - bin: - vitest: vitest.mjs - checksum: 10c0/5bf53ede3ae6a0e08956d72dab279ae90503f6b5a05298a6a5e6ef47d2fd1ab386aaf48fafa61ed07a0ebfe9e371772f1ccbe5c258dd765206a8218bf2eb79eb - languageName: node - linkType: hard - -"vscode-uri@npm:^3.0.8": - version: 3.0.8 - resolution: "vscode-uri@npm:3.0.8" - checksum: 10c0/f7f217f526bf109589969fe6e66b71e70b937de1385a1d7bb577ca3ee7c5e820d3856a86e9ff2fa9b7a0bc56a3dd8c3a9a557d3fedd7df414bc618d5e6b567f9 - languageName: node - linkType: hard - -"vue-eslint-parser@npm:^10.1.3": - version: 10.1.3 - resolution: "vue-eslint-parser@npm:10.1.3" - dependencies: - debug: "npm:^4.4.0" - eslint-scope: "npm:^8.2.0" - eslint-visitor-keys: "npm:^4.2.0" - espree: "npm:^10.3.0" - esquery: "npm:^1.6.0" - lodash: "npm:^4.17.21" - semver: "npm:^7.6.3" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - checksum: 10c0/b4a045113966a90d0b8248a9e9eb67db65e654335cedab5d8a2dd01e0d4f1d95caf4135fe9d6a2739cc8cef1ff6f4da9457ea7ba118176d5a5b6a22862661f58 - languageName: node - linkType: hard - -"vue-i18n@npm:^10.0.0": - version: 10.0.5 - resolution: "vue-i18n@npm:10.0.5" - dependencies: - "@intlify/core-base": "npm:10.0.5" - "@intlify/shared": "npm:10.0.5" - "@vue/devtools-api": "npm:^6.5.0" - peerDependencies: - vue: ^3.0.0 - checksum: 10c0/070ab39eb0e046d3ba298ba952efe1ea18d22ddecb4a73411e5f1863954e582d7f98a25c4fcac8330b40745fcffd404cc936c8abd102fd3628ac2abb9d0fe58b - languageName: node - linkType: hard - -"vue-i18n@npm:^11.1.6": - version: 11.1.6 - resolution: "vue-i18n@npm:11.1.6" - dependencies: - "@intlify/core-base": "npm:11.1.6" - "@intlify/shared": "npm:11.1.6" - "@vue/devtools-api": "npm:^6.5.0" - peerDependencies: - vue: ^3.0.0 - checksum: 10c0/c50a47790291736f5a27b99dde739451478dd0ffa88108e4207f94b7afcd15c6750a5d6055e863ceb0e37b5174104a732c2ab6c744061f23d91ac9a5f338e2eb - languageName: node - linkType: hard - -"vue-resizable@npm:^2.1.7": - version: 2.1.7 - resolution: "vue-resizable@npm:2.1.7" - checksum: 10c0/c47194602404cee03695ab8925059547e3f0b7e69f1d920876908c2a37ac29f26e05b21db36e472c60b0dccad5d32f22ef528c97a98eee010b1057a7b79bab30 - languageName: node - linkType: hard - -"vue-router@npm:^4.5.1": - version: 4.5.1 - resolution: "vue-router@npm:4.5.1" - dependencies: - "@vue/devtools-api": "npm:^6.6.4" - peerDependencies: - vue: ^3.2.0 - checksum: 10c0/89fbc11e46c19a4c4d62b807596a0210726dc09bd9e6a319ded1ac0951e6933e581c56acd1b846d3891673b9bad7348564d28ecd8424126d63578b3b5d291d96 - languageName: node - linkType: hard - -"vue-tsc@npm:^2.2.10": - version: 2.2.10 - resolution: "vue-tsc@npm:2.2.10" - dependencies: - "@volar/typescript": "npm:~2.4.11" - "@vue/language-core": "npm:2.2.10" - peerDependencies: - typescript: ">=5.0.0" - bin: - vue-tsc: ./bin/vue-tsc.js - checksum: 10c0/bb1476f1ff0e8d6ee4291abc79fb5854b4c558846f72686e953f63431fb1f0c7e5708e1563e06bc7c58e90b326496cf48f4551af3a946a053b072c8276d8047e - languageName: node - linkType: hard - -"vue@npm:^3.4": - version: 3.5.13 - resolution: "vue@npm:3.5.13" - dependencies: - "@vue/compiler-dom": "npm:3.5.13" - "@vue/compiler-sfc": "npm:3.5.13" - "@vue/runtime-dom": "npm:3.5.13" - "@vue/server-renderer": "npm:3.5.13" - "@vue/shared": "npm:3.5.13" - peerDependencies: - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/4bbb5caf3f04fed933b01c100804f3693ff902984a3152ea1359a972264fa3240f6551d32f0163a79c64df3715b4d6691818c9f652cdd41b2473c69e2b0a373d - languageName: node - linkType: hard - -"vue@npm:^3.5.17": - version: 3.5.17 - resolution: "vue@npm:3.5.17" - dependencies: - "@vue/compiler-dom": "npm:3.5.17" - "@vue/compiler-sfc": "npm:3.5.17" - "@vue/runtime-dom": "npm:3.5.17" - "@vue/server-renderer": "npm:3.5.17" - "@vue/shared": "npm:3.5.17" - peerDependencies: - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/271e7aeca24495145e0e00e8553c681ae4feb08309207aa7bf6e13d0603ca8e1b6a8091d62542041aef2f4874940ee3f0a186a7753f0729fa5a12576861b34a8 - languageName: node - linkType: hard - -"w3c-keyname@npm:^2.2.4": - version: 2.2.8 - resolution: "w3c-keyname@npm:2.2.8" - checksum: 10c0/37cf335c90efff31672ebb345577d681e2177f7ff9006a9ad47c68c5a9d265ba4a7b39d6c2599ceea639ca9315584ce4bd9c9fbf7a7217bfb7a599e71943c4c4 - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db - languageName: node - linkType: hard - -"webpack-virtual-modules@npm:^0.6.2": - version: 0.6.2 - resolution: "webpack-virtual-modules@npm:0.6.2" - checksum: 10c0/5ffbddf0e84bf1562ff86cf6fcf039c74edf09d78358a6904a09bbd4484e8bb6812dc385fe14330b715031892dcd8423f7a88278b57c9f5002c84c2860179add - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: "npm:^2.0.0" - bin: - node-which: ./bin/node-which - checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f - languageName: node - linkType: hard - -"which@npm:^5.0.0": - version: 5.0.0 - resolution: "which@npm:5.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b - languageName: node - linkType: hard - -"why-is-node-running@npm:^2.3.0": - version: 2.3.0 - resolution: "why-is-node-running@npm:2.3.0" - dependencies: - siginfo: "npm:^2.0.0" - stackback: "npm:0.0.2" - bin: - why-is-node-running: cli.js - checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 - languageName: node - linkType: hard - -"word-wrap@npm:^1.2.5": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: "npm:^6.1.0" - string-width: "npm:^5.0.1" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 - languageName: node - linkType: hard - -"xml-name-validator@npm:^4.0.0": - version: 4.0.0 - resolution: "xml-name-validator@npm:4.0.0" - checksum: 10c0/c1bfa219d64e56fee265b2bd31b2fcecefc063ee802da1e73bad1f21d7afd89b943c9e2c97af2942f60b1ad46f915a4c81e00039c7d398b53cf410e29d3c30bd - languageName: node - linkType: hard - -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a - languageName: node - linkType: hard - -"yallist@npm:^5.0.0": - version: 5.0.0 - resolution: "yallist@npm:5.0.0" - checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 - languageName: node - linkType: hard - -"yaml-eslint-parser@npm:^1.2.2": - version: 1.2.3 - resolution: "yaml-eslint-parser@npm:1.2.3" - dependencies: - eslint-visitor-keys: "npm:^3.0.0" - lodash: "npm:^4.17.21" - yaml: "npm:^2.0.0" - checksum: 10c0/dc2263f3e83ea8958d882f355039a2b72b4852a9492545fb7753fae070b1e73e211d2555318fb3ab8a4c7545d8f9b4e4670ffa5ef63d54622b3483de7401f633 - languageName: node - linkType: hard - -"yaml@npm:^2.0.0": - version: 2.7.0 - resolution: "yaml@npm:2.7.0" - bin: - yaml: bin.mjs - checksum: 10c0/886a7d2abbd70704b79f1d2d05fe9fb0aa63aefb86e1cb9991837dced65193d300f5554747a872b4b10ae9a12bc5d5327e4d04205f70336e863e35e89d8f4ea9 - languageName: node - linkType: hard - -"yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 - languageName: node - linkType: hard - -"yargs@npm:^17.5.1": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" - dependencies: - cliui: "npm:^8.0.1" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.3" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^21.1.1" - checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f - languageName: node - linkType: hard From 7cba5bb2aebbe6675e5511d9c6ca43171b672906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Sat, 4 Oct 2025 21:28:25 +0200 Subject: [PATCH 02/46] fix some build issues --- Makefile | 3 +-- docker/Dockerfile_tauri | 5 +++++ package-lock.json | 2 +- src-tauri/tauri.conf.json | 4 ++-- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index ee7a5dae..6d7e29cb 100644 --- a/Makefile +++ b/Makefile @@ -18,8 +18,7 @@ build_docker_tauri: docker run --platform linux/amd64 --rm -v ./src-tauri/target:/app/src-tauri/target \ -e TAURI_SIGNING_PRIVATE_KEY="$(TAURI_SIGNING_PRIVATE_KEY)" \ -e TAURI_SIGNING_PRIVATE_KEY_PASSWORD="$(TAURI_SIGNING_PRIVATE_KEY_PASSWORD)" \ - -e NO_STRIP=true \ - elasticvue-linux-tauri bash -c ". ~/.cargo/env && rm -rf src-tauri/target/* && ARCH=x86_64 NO_STRIP=true npm run tauri:build --verbose" + elasticvue-linux-tauri bash -c ". ~/.cargo/env && rm -rf src-tauri/target/* && NO_STRIP=true npm run tauri:build" # Build docker image to run elasticvue served by nginx build_docker_nginx: diff --git a/docker/Dockerfile_tauri b/docker/Dockerfile_tauri index e49666aa..c754adbc 100644 --- a/docker/Dockerfile_tauri +++ b/docker/Dockerfile_tauri @@ -3,6 +3,7 @@ ARG USERID=1000 ENV NODE_VERSION=22 ENV APP_HOME=/app +ENV APPIMAGE_EXTRACT_AND_RUN=false RUN useradd --uid $USERID -m dev RUN mkdir -p $APP_HOME @@ -52,6 +53,10 @@ RUN mkdir -p /tmp/ubuntu-packages \ RUN apt-get update \ && apt-get install -y build-essential \ file \ + patchelf \ + zsync \ + desktop-file-utils \ + libfuse2 \ libssl-dev \ libgtk-3-dev \ libxdo-dev \ diff --git a/package-lock.json b/package-lock.json index 825494ee..a9fbc668 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6330,4 +6330,4 @@ } } } -} \ No newline at end of file +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 467f3d6b..c43ef059 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -60,8 +60,8 @@ "windows": [ { "title": "elasticvue", - "width": 1920, - "height": 1080, + "width": 1300, + "height": 700, "resizable": true, "fullscreen": false } From 2ea53a7fc8c5e3d6abbc7e9fbb57ac409626ac8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Sat, 4 Oct 2025 21:35:19 +0200 Subject: [PATCH 03/46] docker dev setup --- Makefile | 5 ++++- compose.yml | 13 +++++++++++++ docker/Dockerfile_dev | 7 +++++++ docker/{Dockerfile => Dockerfile_nginx} | 0 package-lock.json | 20 ++++++++++++++++++++ 5 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 compose.yml create mode 100644 docker/Dockerfile_dev rename docker/{Dockerfile => Dockerfile_nginx} (100%) diff --git a/Makefile b/Makefile index 6d7e29cb..98810f16 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,9 @@ TAURI_SIGNING_PRIVATE_KEY ?= TAURI_SIGNING_PRIVATE_KEY_PASSWORD ?= UID := $(shell id -u) +dev: + docker compose -f compose.yml up --build + build_docker_ci: docker build --platform linux/amd64 -f docker/Dockerfile_ci -t elasticvue-ci . @@ -22,7 +25,7 @@ build_docker_tauri: # Build docker image to run elasticvue served by nginx build_docker_nginx: - docker build -f docker/Dockerfile -t elasticvue . + docker build -f docker/Dockerfile_nginx -t elasticvue . # Build docker image to run elasticvue served by nginx MULTIARCH build_docker_nginx_multiarch: diff --git a/compose.yml b/compose.yml new file mode 100644 index 00000000..e0e6bfa9 --- /dev/null +++ b/compose.yml @@ -0,0 +1,13 @@ +services: + elasticvue: + container_name: elasticvue + build: + context: . + dockerfile: docker/Dockerfile_dev + args: + NODE_VERSION: 22.20.0 + command: npm run dev -- --host 0.0.0.0 + ports: + - 5173:5173 + volumes: + - ./:/app diff --git a/docker/Dockerfile_dev b/docker/Dockerfile_dev new file mode 100644 index 00000000..9f1a26dc --- /dev/null +++ b/docker/Dockerfile_dev @@ -0,0 +1,7 @@ +ARG NODE_VERSION=22.20.0 +FROM node:$NODE_VERSION-alpine + +RUN mkdir /app +WORKDIR /app +COPY package.json package-lock.json ./ +RUN npm install diff --git a/docker/Dockerfile b/docker/Dockerfile_nginx similarity index 100% rename from docker/Dockerfile rename to docker/Dockerfile_nginx diff --git a/package-lock.json b/package-lock.json index a9fbc668..54100bec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -129,6 +129,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.9.0.tgz", "integrity": "sha512-454TVgjhO6cMufsyyGN70rGIfJxJEjcqjBG2x2Y03Y/+Fm99d3O/Kv1QDYWuG6hvxsgmjXmBuATikIIYvERX+w==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.4.0", @@ -151,6 +152,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.3.tgz", "integrity": "sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", @@ -176,6 +178,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.11.tgz", "integrity": "sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -187,6 +190,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", "license": "MIT", + "peer": true, "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } @@ -196,6 +200,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.4.tgz", "integrity": "sha512-hduz0suCcUSC/kM8Fq3A9iLwInJDl8fD1xLpTIk+5xkNm8z/FT7UsIa9sOXrkpChh+XXc18RzswE8QqELsVl+g==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.5.0", "crelt": "^1.0.6", @@ -2260,6 +2265,7 @@ "integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.45.0", "@typescript-eslint/types": "8.45.0", @@ -2482,6 +2488,7 @@ "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^18.0.0 || >=20.0.0" }, @@ -2903,6 +2910,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3544,6 +3552,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3621,6 +3630,7 @@ "integrity": "sha512-7BZHsG3kC2vei8F2W8hnfDi9RK+cv5eKPMvzBdrl8Vuc0hR5odGQRli8VVzUkrmUHkxFEm4Iio1r5HOKslO0Aw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "natural-compare": "^1.4.0", @@ -4787,6 +4797,7 @@ "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", "license": "MIT", + "peer": true, "dependencies": { "@vue/devtools-api": "^7.7.2" }, @@ -4956,6 +4967,7 @@ "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.18.5.tgz", "integrity": "sha512-5ItDSsNjqBVRrC7SqcdvT1F5mghVyJ/KmaWNwnaT5mM91a7gWpT/d7wTCIFxxDbWLZdkHKI+cpdudEqnfcSw9A==", "license": "MIT", + "peer": true, "engines": { "node": ">= 10.18.1", "npm": ">= 6.13.4", @@ -5041,6 +5053,7 @@ "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -5147,6 +5160,7 @@ "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -5552,6 +5566,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5699,6 +5714,7 @@ "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -5924,6 +5940,7 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz", "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", "license": "MIT", + "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.22", "@vue/compiler-sfc": "3.5.22", @@ -5946,6 +5963,7 @@ "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0", @@ -5982,6 +6000,7 @@ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.1.12.tgz", "integrity": "sha512-BnstPj3KLHLrsqbVU2UOrPmr0+Mv11bsUZG0PyCOzsawCivk8W00GMXHeVUWIDOgNaScCuZah47CZFE+Wnl8mw==", "license": "MIT", + "peer": true, "dependencies": { "@intlify/core-base": "11.1.12", "@intlify/shared": "11.1.12", @@ -6232,6 +6251,7 @@ "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.0.tgz", "integrity": "sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==", "license": "MIT", + "peer": true, "dependencies": { "eslint-visitor-keys": "^3.0.0", "yaml": "^2.0.0" From cac64951695ce371e4597158615507949c3df9dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Sat, 4 Oct 2025 22:01:21 +0200 Subject: [PATCH 04/46] fix #309 --- CHANGELOG.md | 706 +++++++++--------- .../components/rest/RestQueryForm.ts | 4 +- src/helpers/cleanRestPath.ts | 82 ++ tests/unit/helpers/cleanRestPath.spec.ts | 410 ++++++++++ 4 files changed, 849 insertions(+), 353 deletions(-) create mode 100644 src/helpers/cleanRestPath.ts create mode 100644 tests/unit/helpers/cleanRestPath.spec.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 28abdeb6..39fa1177 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,58 +1,62 @@ # Changelog +## 1.9.0 + +- fix REST API requests with document IDs containing slashes, fixes [#309](https://github.com/cars10/elasticvue/issues/309) + ## 1.8.0 -* adds support for connecting to elasticsearch with aws iam credentials, fixes [#304](https://github.com/cars10/elasticvue/pull/304), thanks @ChrisMcKee -* automatically import predefined clusters when using docker, fixes [#254](https://github.com/cars10/elasticvue/issues/254) -* fix filtering indices -* fix opening links in the desktop app -* internal refactorings -* dependency updates +- adds support for connecting to elasticsearch with aws iam credentials, fixes [#304](https://github.com/cars10/elasticvue/pull/304), thanks @ChrisMcKee +- automatically import predefined clusters when using docker, fixes [#254](https://github.com/cars10/elasticvue/issues/254) +- fix filtering indices +- fix opening links in the desktop app +- internal refactorings +- dependency updates ## 1.7.0 -* adds copy button to CORS settings -* remove deprecation for elasticsearch 9, fixes [#297](https://github.com/cars10/elasticvue/issues/297) -* adds support for serverless mode, fixes [#288](https://github.com/cars10/elasticvue/issues/288) +- adds copy button to CORS settings +- remove deprecation for elasticsearch 9, fixes [#297](https://github.com/cars10/elasticvue/issues/297) +- adds support for serverless mode, fixes [#288](https://github.com/cars10/elasticvue/issues/288) ## 1.6.2 This release only contains a new docker image. -* fix docker image predefined clusters, for real this time, fixes [#293](https://github.com/cars10/elasticvue/issues/293) +- fix docker image predefined clusters, for real this time, fixes [#293](https://github.com/cars10/elasticvue/issues/293) ## 1.6.1 This release only contains a new docker image. -* fix docker image predefined clusters, fixes [#293](https://github.com/cars10/elasticvue/issues/293) +- fix docker image predefined clusters, fixes [#293](https://github.com/cars10/elasticvue/issues/293) ## 1.6.0 -* fix hidden indices in elasticsearch >= 8 -* disable spellcheck on all inputs to disable macos automatically changing quotes +- fix hidden indices in elasticsearch >= 8 +- disable spellcheck on all inputs to disable macos automatically changing quotes ## 1.5.0 -* adds russian and japanese translation, thanks to @AnchorI -* adds italian translation, thanks to @mikiubo -* the docker image now works in openshift, thanks @Fearvel , +- adds russian and japanese translation, thanks to @AnchorI +- adds italian translation, thanks to @mikiubo +- the docker image now works in openshift, thanks @Fearvel , fixes [#286](https://github.com/cars10/elasticvue/issues/286) -* adds update check. this check is also used to anonymously track daily users of elasticvue. +- adds update check. this check is also used to anonymously track daily users of elasticvue. Check [PRIVACY.md](https://github.com/cars10/elasticvue/blob/master/PRIVACY.md) for details. -* fix issue when changing search indices - the search query was wrongly reset -* adds buttons to collapse/expand json, fixes [#291](https://github.com/cars10/elasticvue/issues/291) -* added keyboard shortcuts to search for mac, thanks @prashantsingh3553 -* show number of shards on nodes overview for elasticsearch >= 8, fixes [#287](https://github.com/cars10/elasticvue/issues/287) +- fix issue when changing search indices - the search query was wrongly reset +- adds buttons to collapse/expand json, fixes [#291](https://github.com/cars10/elasticvue/issues/291) +- added keyboard shortcuts to search for mac, thanks @prashantsingh3553 +- show number of shards on nodes overview for elasticsearch >= 8, fixes [#287](https://github.com/cars10/elasticvue/issues/287) ## 1.4.0 -* for elasticsearch 7 and 8, query both `_template` and `_index_template` endpoints, +- for elasticsearch 7 and 8, query both `_template` and `_index_template` endpoints, fixes [#281](https://github.com/cars10/elasticvue/issues/281) -* improve shards view -* fix issue when multiple indices are selected and one is manually deleted -* add shard recovery view, fixes [#272](https://github.com/cars10/elasticvue/issues/272) -* adds chip indicating filtered tables. This should fix issues with users not noticing that the filter is still present. +- improve shards view +- fix issue when multiple indices are selected and one is manually deleted +- add shard recovery view, fixes [#272](https://github.com/cars10/elasticvue/issues/272) +- adds chip indicating filtered tables. This should fix issues with users not noticing that the filter is still present. ## 1.3.1 @@ -61,7 +65,7 @@ older versions of glibc, like `debian:bookworm` or `ubuntu:jammy`. ## 1.2.0 -* adds support for date math in index names. You can use something like `` as your index name, when +- adds support for date math in index names. You can use something like `` as your index name, when searching and also in the `REST` view. fixes [#267](https://github.com/cars10/elasticvue/issues/267) ## 1.1.2 @@ -72,50 +76,50 @@ if you are using the desktop app. Sorry for the inconvenience. ## 1.1.1 -* truncate long fields in search results table, fixes [#211](https://github.com/cars10/elasticvue/issues/211) -* fix search results table column filtering again, fixes [#244](https://github.com/cars10/elasticvue/issues/244) -* fix hotkey issues, fixes [#273](https://github.com/cars10/elasticvue/issues/273) -* adds health filter to shards view +- truncate long fields in search results table, fixes [#211](https://github.com/cars10/elasticvue/issues/211) +- fix search results table column filtering again, fixes [#244](https://github.com/cars10/elasticvue/issues/244) +- fix hotkey issues, fixes [#273](https://github.com/cars10/elasticvue/issues/273) +- adds health filter to shards view ## 1.1.0 -* update to tauri `2.0`, fixes [#228](https://github.com/cars10/elasticvue/issues/228) -* adds `auto` theme setting (default), fixes [#255](https://github.com/cars10/elasticvue/issues/255) -* adds support for `http_proxy` env variable for elasticvue desktop, +- update to tauri `2.0`, fixes [#228](https://github.com/cars10/elasticvue/issues/228) +- adds `auto` theme setting (default), fixes [#255](https://github.com/cars10/elasticvue/issues/255) +- adds support for `http_proxy` env variable for elasticvue desktop, fixes [#241](https://github.com/cars10/elasticvue/issues/241) ## 1.0.12 -* parse kibana console queries on paste in REST editor. You can paste kibana console queries into the editor (or use the +- parse kibana console queries on paste in REST editor. You can paste kibana console queries into the editor (or use the dedicated button) to fill out the form automatically. -* fix sorting issue when changing indices, fixes [#261](https://github.com/cars10/elasticvue/issues/261) +- fix sorting issue when changing indices, fixes [#261](https://github.com/cars10/elasticvue/issues/261) ## 1.0.11 -* show node version on nodes overview, fixes [#260](https://github.com/cars10/elasticvue/issues/260) -* add vim mode in editor, thanks @fqdeng, fixes [#253](https://github.com/cars10/elasticvue/pull/253) -* update chinese translation, thanks @XiangtingLee, fixes [#251](https://github.com/cars10/elasticvue/pull/251) -* adds french translation, thanks @XNxa, fixes [#250](https://github.com/cars10/elasticvue/pull/250) -* update to vue `3.5` +- show node version on nodes overview, fixes [#260](https://github.com/cars10/elasticvue/issues/260) +- add vim mode in editor, thanks @fqdeng, fixes [#253](https://github.com/cars10/elasticvue/pull/253) +- update chinese translation, thanks @XiangtingLee, fixes [#251](https://github.com/cars10/elasticvue/pull/251) +- adds french translation, thanks @XNxa, fixes [#250](https://github.com/cars10/elasticvue/pull/250) +- update to vue `3.5` ## 1.0.10 -* fix table column size regression introduced in `1.0.9`, fixes [#245](https://github.com/cars10/elasticvue/issues/245) -* fix filtering when `null` values are present, fixes [#244](https://github.com/cars10/elasticvue/issues/244) -* reset search table sort when changing index +- fix table column size regression introduced in `1.0.9`, fixes [#245](https://github.com/cars10/elasticvue/issues/245) +- fix filtering when `null` values are present, fixes [#244](https://github.com/cars10/elasticvue/issues/244) +- reset search table sort when changing index ## 1.0.9 -* improve index templates, fixes [#242](https://github.com/cars10/elasticvue/issues/242) -* improve shards table, fixes [#237](https://github.com/cars10/elasticvue/issues/237) -* fix handling of index names including `%`, fixes [#221](https://github.com/cars10/elasticvue/issues/221) -* dependency updates +- improve index templates, fixes [#242](https://github.com/cars10/elasticvue/issues/242) +- improve shards table, fixes [#237](https://github.com/cars10/elasticvue/issues/237) +- fix handling of index names including `%`, fixes [#221](https://github.com/cars10/elasticvue/issues/221) +- dependency updates ## 1.0.8 -* fix update&delete documents that use `routing`, fixes [#235](https://github.com/cars10/elasticvue/issues/235) -* adds shard relocation confirm msg and cancel button, fixes [#236](https://github.com/cars10/elasticvue/issues/236) -* fix ui issue with long cluster names, fixes [#230](https://github.com/cars10/elasticvue/issues/230) +- fix update&delete documents that use `routing`, fixes [#235](https://github.com/cars10/elasticvue/issues/235) +- adds shard relocation confirm msg and cancel button, fixes [#236](https://github.com/cars10/elasticvue/issues/236) +- fix ui issue with long cluster names, fixes [#230](https://github.com/cars10/elasticvue/issues/230) ## 1.0.7 @@ -124,55 +128,55 @@ version. ## 1.0.6 -* double click to edit search results, fixes [#225](https://github.com/cars10/elasticvue/issues/225) +- double click to edit search results, fixes [#225](https://github.com/cars10/elasticvue/issues/225) ## 1.0.5 -* adds request logging to desktop app -* fix issue when elasticsearch url ends with a slash, fixes [#214](https://github.com/cars10/elasticvue/pull/214) -* fix build setup when hosting elasticvue on a subdirectory -* fix error when showing documents that include `id` prop, fixes [#219](https://github.com/cars10/elasticvue/issues/219) -* save per_page & sort settings on indices page -* show index creation date on indices page -* warn when selecting huge page sizes -* add some query string examples -* show search query execution time -* adds "clear" button to search column selection options +- adds request logging to desktop app +- fix issue when elasticsearch url ends with a slash, fixes [#214](https://github.com/cars10/elasticvue/pull/214) +- fix build setup when hosting elasticvue on a subdirectory +- fix error when showing documents that include `id` prop, fixes [#219](https://github.com/cars10/elasticvue/issues/219) +- save per_page & sort settings on indices page +- show index creation date on indices page +- warn when selecting huge page sizes +- add some query string examples +- show search query execution time +- adds "clear" button to search column selection options ## 1.0.4 -* show shard size on hover, fixes [#199](https://github.com/cars10/elasticvue/pull/199) +- show shard size on hover, fixes [#199](https://github.com/cars10/elasticvue/pull/199) and [#203](https://github.com/cars10/elasticvue/pull/203) -* fix cluster selection filter, fixes [#210](https://github.com/cars10/elasticvue/issues/210) -* limit index bulk actions to 16 indices sent in chunks, fixes [#213](https://github.com/cars10/elasticvue/issues/213) +- fix cluster selection filter, fixes [#210](https://github.com/cars10/elasticvue/issues/210) +- limit index bulk actions to 16 indices sent in chunks, fixes [#213](https://github.com/cars10/elasticvue/issues/213) ## 1.0.3 -* updates chinese translations. thanks @slow-groovin! [#192](https://github.com/cars10/elasticvue/pull/192) -* don't automatically open autocomplete in editor, press `Ctrl+Space` to open, +- updates chinese translations. thanks @slow-groovin! [#192](https://github.com/cars10/elasticvue/pull/192) +- don't automatically open autocomplete in editor, press `Ctrl+Space` to open, fixes [#189](https://github.com/cars10/elasticvue/issues/189) -* send search query with `Ctrl+Enter` when editing query, fixes [#190](https://github.com/cars10/elasticvue/issues/190) -* fix sorting in nodes table, fixes [#193](https://github.com/cars10/elasticvue/issues/193) +- send search query with `Ctrl+Enter` when editing query, fixes [#190](https://github.com/cars10/elasticvue/issues/190) +- fix sorting in nodes table, fixes [#193](https://github.com/cars10/elasticvue/issues/193) ## 1.0.2 -* fixes issue with old versions of elasticsearch that do not provide a uuid, +- fixes issue with old versions of elasticsearch that do not provide a uuid, fixes [#182](https://github.com/cars10/elasticvue/issues/182) -* adds document meta information when editing documents, fixes [#187](https://github.com/cars10/elasticvue/issues/187) -* remap hotkey for sending rest request to `Ctrl+Enter`, fixes [#183](https://github.com/cars10/elasticvue/issues/183) -* cache index table filter, fixes [#181](https://github.com/cars10/elasticvue/issues/181) +- adds document meta information when editing documents, fixes [#187](https://github.com/cars10/elasticvue/issues/187) +- remap hotkey for sending rest request to `Ctrl+Enter`, fixes [#183](https://github.com/cars10/elasticvue/issues/183) +- cache index table filter, fixes [#181](https://github.com/cars10/elasticvue/issues/181) ## 1.0.1 This release fixes some bugs that where introduced in `1.0`. It also adds the ability to configure clusters when using elasticvue via docker. -* you can add predefined clusters when starting elasticvue via docker, check the readme for details. +- you can add predefined clusters when starting elasticvue via docker, check the readme for details. fixes [#112](https://github.com/cars10/elasticvue/issues/112) -* fix issues when showing documents if `routing` is enabled, +- fix issues when showing documents if `routing` is enabled, fixes [#177](https://github.com/cars10/elasticvue/issues/177) -* fix issue when trying to show all shards, fixes [#174](https://github.com/cars10/elasticvue/issues/174) -* fix issue with jumping cursor in rest editor, fixes [#180](https://github.com/cars10/elasticvue/issues/180) +- fix issue when trying to show all shards, fixes [#174](https://github.com/cars10/elasticvue/issues/174) +- fix issue with jumping cursor in rest editor, fixes [#180](https://github.com/cars10/elasticvue/issues/180) ## 1.0.0 @@ -188,108 +192,108 @@ Older versions of elasticsearch should work, but you might encounter small bugs #### How to run elasticvue? -* Recommended: desktop app for linux, mac and windows (no cluster configuration required) - * Download on the [releases page](https://github.com/cars10/elasticvue/releases/latest) -* Browser extension (no cluster configuration required) - * [Google chrome](https://chrome.google.com/webstore/detail/elasticvue/hkedbapjpblbodpgbajblpnlpenaebaa) - * [Firefox](https://addons.mozilla.org/en-US/firefox/addon/elasticvue/) - * [Microsoft Edge](https://microsoftedge.microsoft.com/addons/detail/geifniocjfnfilcbeloeidajlfmhdlgo) -* [Docker](https://hub.docker.com/r/cars10/elasticvue) (cluster configuration **required**) -* [Web version](https://app.elasticvue.com/) (cluster configuration **required**) -* [Building manually](https://github.com/cars10/elasticvue/wiki/Building-Elasticvue) (cluster configuration +- Recommended: desktop app for linux, mac and windows (no cluster configuration required) + - Download on the [releases page](https://github.com/cars10/elasticvue/releases/latest) +- Browser extension (no cluster configuration required) + - [Google chrome](https://chrome.google.com/webstore/detail/elasticvue/hkedbapjpblbodpgbajblpnlpenaebaa) + - [Firefox](https://addons.mozilla.org/en-US/firefox/addon/elasticvue/) + - [Microsoft Edge](https://microsoftedge.microsoft.com/addons/detail/geifniocjfnfilcbeloeidajlfmhdlgo) +- [Docker](https://hub.docker.com/r/cars10/elasticvue) (cluster configuration **required**) +- [Web version](https://app.elasticvue.com/) (cluster configuration **required**) +- [Building manually](https://github.com/cars10/elasticvue/wiki/Building-Elasticvue) (cluster configuration **required**) ### Updates & new features Elasticvue `1.0` adds many new features: -* Modernized tech stack and huge performance improvements -* Setup: - * New welcome page - * Adds the ability to directly import a backup - * Improved cluster setup, can also update cluster credentials -* Home: New dashboard that includes more information about your cluster -* Indices: You can reindex indices into other indices, you can also delete all documents from and index -* Search: You are able to edit documents on the search page directly. Also values of `@timestamp` fields are localized +- Modernized tech stack and huge performance improvements +- Setup: + - New welcome page + - Adds the ability to directly import a backup + - Improved cluster setup, can also update cluster credentials +- Home: New dashboard that includes more information about your cluster +- Indices: You can reindex indices into other indices, you can also delete all documents from and index +- Search: You are able to edit documents on the search page directly. Also values of `@timestamp` fields are localized by default -* Rest: Now includes tabs, history and saved queries - all saved separately per cluster. -* Snapshots: You can now create s3 repositories. -* New theme and improved accessibility -* Improved desktop version -* You can use comments in search query and rest request bodies `// some comment` -* Improved compatibility with old versions of elasticsearch. The official support is still limited to non-EOL versions, +- Rest: Now includes tabs, history and saved queries - all saved separately per cluster. +- Snapshots: You can now create s3 repositories. +- New theme and improved accessibility +- Improved desktop version +- You can use comments in search query and rest request bodies `// some comment` +- Improved compatibility with old versions of elasticsearch. The official support is still limited to non-EOL versions, but older versions should work better now. ### Removed features -* Nodes grid view -* Rest query vertical view -* Utilities (these are now included in the rest query examples) +- Nodes grid view +- Rest query vertical view +- Utilities (these are now included in the rest query examples) ## 1.0.0-beta-7 -* don't create duplicates in rest history when sending the same request again, +- don't create duplicates in rest history when sending the same request again, fixes [#162](https://github.com/cars10/elasticvue/issues/162) -* show number of segments in indices table, fixes [#171](https://github.com/cars10/elasticvue/issues/171) -* show node attributes, fixes [#169](https://github.com/cars10/elasticvue/issues/169) +- show number of segments in indices table, fixes [#171](https://github.com/cars10/elasticvue/issues/171) +- show node attributes, fixes [#169](https://github.com/cars10/elasticvue/issues/169) ## 1.0.0-beta-6 -* adds confirm when closing indices, fixes [#153](https://github.com/cars10/elasticvue/issues/153) -* link rest api docs to current version docs, fixes [#163](https://github.com/cars10/elasticvue/issues/163) -* sort shards by health, fixes [#161](https://github.com/cars10/elasticvue/issues/161) -* fixes index table filter -* replaces `ace` editor with `codemirror 6` -* more improvements for older versions of elasticvue -* dependency updates +- adds confirm when closing indices, fixes [#153](https://github.com/cars10/elasticvue/issues/153) +- link rest api docs to current version docs, fixes [#163](https://github.com/cars10/elasticvue/issues/163) +- sort shards by health, fixes [#161](https://github.com/cars10/elasticvue/issues/161) +- fixes index table filter +- replaces `ace` editor with `codemirror 6` +- more improvements for older versions of elasticvue +- dependency updates ## 1.0.0-beta-5 -* re-adds `json-bigint` to support numbers bigger then `Number.MAX_SAFE_INTEGER` -* add `Hack` font -* update to node 20 -* adjust mock data for tests & screenshot scripts +- re-adds `json-bigint` to support numbers bigger then `Number.MAX_SAFE_INTEGER` +- add `Hack` font +- update to node 20 +- adjust mock data for tests & screenshot scripts ## 1.0.0-beta-4 -* fix build issues +- fix build issues ## 1.0.0-beta-3 -* improve compatibility with older versions of elasticsearch -* improve snapshot repository creation -* various small bugfixes -* updates dependencies +- improve compatibility with older versions of elasticsearch +- improve snapshot repository creation +- various small bugfixes +- updates dependencies ## 1.0.0-beta-2 -* show warning when using unsupported versions of elasticsearch -* fix issue with opening documents in search view -* save rest query tab responses +- show warning when using unsupported versions of elasticsearch +- fix issue with opening documents in search view +- save rest query tab responses ## 1.0.0-beta-1 [For downloads check the releases page](https://github.com/cars10/elasticvue/releases) -*This is a beta version. The browser addons are not updated yet, and the `:latest` tag of the docker image still points -to the previous stable version.* +_This is a beta version. The browser addons are not updated yet, and the `:latest` tag of the docker image still points +to the previous stable version._ This release is a complete rewrite of elasticvue in vue 3. I also switched from vue-cli to vite, from vuetify to quasar and used typescript. Elasticvue received a lot of improvements, fixes and new features, some of the most notable are: **New features** -* Setup: improved setup page with ability to directly import an elasticvue backup -* Home: improved dashboard with more cluster information -* Cluster management: ability to change cluster credentials -* Indices: can reindex indices into other indices and delete all documents from and index -* Search: you can now edit documents on the search page directly. Also adds a setting to localize `@timestamp` values. -* Rest: completely rewritten. Now includes tabs, history, saved queries - all saved separately per cluster. -* Snapshots: can create s3 repositories. -* New theme -* Improved desktop version -* Huge performance improvements -* Ability to use comments in search query and rest request bodies `// some comment` +- Setup: improved setup page with ability to directly import an elasticvue backup +- Home: improved dashboard with more cluster information +- Cluster management: ability to change cluster credentials +- Indices: can reindex indices into other indices and delete all documents from and index +- Search: you can now edit documents on the search page directly. Also adds a setting to localize `@timestamp` values. +- Rest: completely rewritten. Now includes tabs, history, saved queries - all saved separately per cluster. +- Snapshots: can create s3 repositories. +- New theme +- Improved desktop version +- Huge performance improvements +- Ability to use comments in search query and rest request bodies `// some comment` **Fixes** @@ -298,168 +302,168 @@ quasar. **Removed features** -* Nodes grid view -* Rest query vertical view -* Support for numbers bigger then `Number.MAX_SAFE_INTEGER` -* Utilities (these are now included in the rest query examples) +- Nodes grid view +- Rest query vertical view +- Support for numbers bigger then `Number.MAX_SAFE_INTEGER` +- Utilities (these are now included in the rest query examples) ## 0.44.1 -* update dockerfile base images, fixes [#129](https://github.com/cars10/elasticvue/issues/129) +- update dockerfile base images, fixes [#129](https://github.com/cars10/elasticvue/issues/129) ## 0.44.0 -* [feat]: show content while reloading, fixes [#125](https://github.com/cars10/elasticvue/issues/125) -* [feat]: adds index templates table, fixes [#126](https://github.com/cars10/elasticvue/issues/126) -* restructure snapshots & repositories table +- [feat]: show content while reloading, fixes [#125](https://github.com/cars10/elasticvue/issues/125) +- [feat]: adds index templates table, fixes [#126](https://github.com/cars10/elasticvue/issues/126) +- restructure snapshots & repositories table ## 0.43.0 -* [feat]: add support to connect via API key, thanks @tkdave, [#110](https://github.com/cars10/elasticvue/issues/110) -* [feat]: desktop app menu & icon fixes for mac -* [feat]: dependency updates, use vue 2.7, prepare vue 3.0 update +- [feat]: add support to connect via API key, thanks @tkdave, [#110](https://github.com/cars10/elasticvue/issues/110) +- [feat]: desktop app menu & icon fixes for mac +- [feat]: dependency updates, use vue 2.7, prepare vue 3.0 update ## 0.42.1 -* fix build action +- fix build action ## 0.42.0 -* [fix]: fix additional issues with cluster selection, fixes [#103](https://github.com/cars10/elasticvue/issues/103) -* [feat]: show `_score` in search results, fixes [#104](https://github.com/cars10/elasticvue/issues/104) +- [fix]: fix additional issues with cluster selection, fixes [#103](https://github.com/cars10/elasticvue/issues/103) +- [feat]: show `_score` in search results, fixes [#104](https://github.com/cars10/elasticvue/issues/104) ## 0.41.0 -* [fix]: fix some issues with browser extensions and cluster swapping, +- [fix]: fix some issues with browser extensions and cluster swapping, fixes [#103](https://github.com/cars10/elasticvue/issues/103) ## 0.40.0 -* [fix]: fix shards overview, fixes [#92](https://github.com/cars10/elasticvue/issues/92) -* [fix]: reset current page if new search has less results than current page, +- [fix]: fix shards overview, fixes [#92](https://github.com/cars10/elasticvue/issues/92) +- [fix]: reset current page if new search has less results than current page, fixes [#99](https://github.com/cars10/elasticvue/issues/99) -* [fix]: adds option to disable sticky table headers, fixes [#75](https://github.com/cars10/elasticvue/issues/75) -* [feat]: change url to include cluster the id. This makes it much easier to work with different clusters in different +- [fix]: adds option to disable sticky table headers, fixes [#75](https://github.com/cars10/elasticvue/issues/75) +- [feat]: change url to include cluster the id. This makes it much easier to work with different clusters in different browser tabs. ## 0.39.0 -* [fix]: improve elasticsearch 8 support, fixes [#93](https://github.com/cars10/elasticvue/issues/93) -* [fix]: elasticsearch version not updated, fixes [#94](https://github.com/cars10/elasticvue/issues/94) -* [fix]: add additional button to reset the whole custom search body, +- [fix]: improve elasticsearch 8 support, fixes [#93](https://github.com/cars10/elasticvue/issues/93) +- [fix]: elasticsearch version not updated, fixes [#94](https://github.com/cars10/elasticvue/issues/94) +- [fix]: add additional button to reset the whole custom search body, fixes [#95](https://github.com/cars10/elasticvue/issues/95) -* adds support for arm64 and arm/v7, fixes [#76](https://github.com/cars10/elasticvue/issues/76) +- adds support for arm64 and arm/v7, fixes [#76](https://github.com/cars10/elasticvue/issues/76) ## 0.38.0 This version includes some fixes for outdated versions of elasticsearch (like `2.x` and `5.x`). -* [fix]: support snapshots for elasticsearch < 6, fixes [#83](https://github.com/cars10/elasticvue/issues/83) -* [revert]: revert [#85](https://github.com/cars10/elasticvue/issues/85], +- [fix]: support snapshots for elasticsearch < 6, fixes [#83](https://github.com/cars10/elasticvue/issues/83) +- [revert]: revert [#85](https://github.com/cars10/elasticvue/issues/85], fixes [#90](https://github.com/cars10/elasticvue/issues/90) ## 0.37.0 -* [feat]: BETA: adds shard overview + relocation, fixes [#72](https://github.com/cars10/elasticvue/issues/72) -* [feat]: adds index bulk actions, fixes [#78](https://github.com/cars10/elasticvue/issues/78) -* [feat]: save active cluster in sessionStorage instead of localStorage, +- [feat]: BETA: adds shard overview + relocation, fixes [#72](https://github.com/cars10/elasticvue/issues/72) +- [feat]: adds index bulk actions, fixes [#78](https://github.com/cars10/elasticvue/issues/78) +- [feat]: save active cluster in sessionStorage instead of localStorage, fixes [#81](https://github.com/cars10/elasticvue/issues/81) -* [feat]: add `track_total_hits` to default search query, fixes [#85](https://github.com/cars10/elasticvue/issues/85) -* [feat]: set page title (e.g. `elasticvue | Search`) -* [feat]: show node role explanation on hover -* [feat]: can copy node uri to clipboard in cluster selection table -* [fix]: do not add body of previous request in rest history to `GET` or `HEAD` requests -* [fix]: fix missing favicon, thanks @rdc-112 -* many small improvements and bugfixes +- [feat]: add `track_total_hits` to default search query, fixes [#85](https://github.com/cars10/elasticvue/issues/85) +- [feat]: set page title (e.g. `elasticvue | Search`) +- [feat]: show node role explanation on hover +- [feat]: can copy node uri to clipboard in cluster selection table +- [fix]: do not add body of previous request in rest history to `GET` or `HEAD` requests +- [fix]: fix missing favicon, thanks @rdc-112 +- many small improvements and bugfixes ## 0.36.4 -* [fix]: syntax error in query leads to errors during result loading, +- [fix]: syntax error in query leads to errors during result loading, fixes [#68](https://github.com/cars10/elasticvue/issues/68) -* [fix]: rest query bug when cluster url ends with a slash, fixes [#69](https://github.com/cars10/elasticvue/issues/69) +- [fix]: rest query bug when cluster url ends with a slash, fixes [#69](https://github.com/cars10/elasticvue/issues/69) ## 0.36.3 -* [fix]: error when having an uneven amount of cpu cores, fixes [#61](https://github.com/cars10/elasticvue/issues/61) -* [fix]: reset search after failed query [#66][p66) +- [fix]: error when having an uneven amount of cpu cores, fixes [#61](https://github.com/cars10/elasticvue/issues/61) +- [fix]: reset search after failed query [#66]p66) ## 0.36.2 -* [fix]: Rest requests not sending body, fixes [#65](https://github.com/cars10/elasticvue/issues/65) +- [fix]: Rest requests not sending body, fixes [#65](https://github.com/cars10/elasticvue/issues/65) ## 0.36.1 -* [fix]: GET requests not sending `Accept: application/json` by default +- [fix]: GET requests not sending `Accept: application/json` by default ## 0.36.0 This version includes many fixes and improvements mentioned in the survey. Thanks! -* [feat]: Adds history for rest queries. The history can also be backed up and restored in the settings -* [feat]: i18n support including chinese -* [feat]: Adds button to reset the "hide indices regex" setting to default -* [feat]: When deleting an index the name of the index is now included in the confirm message -* [feat]: Adds "Copy content" button to editors -* [feat]: Can download search response as json -* [feat]: Can download rest query response as json -* [feat]: Can send a request body via GET when using rest queries -* [feat]: Cleanup code editor settings -* [feat]: Simplify footer, move link to reset settings to settings page -* [fix]: Adds tooltip to document count column in the indices table, +- [feat]: Adds history for rest queries. The history can also be backed up and restored in the settings +- [feat]: i18n support including chinese +- [feat]: Adds button to reset the "hide indices regex" setting to default +- [feat]: When deleting an index the name of the index is now included in the confirm message +- [feat]: Adds "Copy content" button to editors +- [feat]: Can download search response as json +- [feat]: Can download rest query response as json +- [feat]: Can send a request body via GET when using rest queries +- [feat]: Cleanup code editor settings +- [feat]: Simplify footer, move link to reset settings to settings page +- [fix]: Adds tooltip to document count column in the indices table, fixes [#54](https://github.com/cars10/elasticvue/issues/54) -* removes link to survey, view the results [here](https://github.com/cars10/elasticvue/issues/55) -* some small css and color improvements +- removes link to survey, view the results [here](https://github.com/cars10/elasticvue/issues/55) +- some small css and color improvements Big thanks to @qiwihui for the chinese translation! ## 0.35.0 -* Reworks saved cluster selection to table (with pagination and filter) to improve support for users with 10+ clusters -* Can open documents in new tab by using `ctrl`+`click`. Standalone click will still open document in modal. Please +- Reworks saved cluster selection to table (with pagination and filter) to improve support for users with 10+ clusters +- Can open documents in new tab by using `ctrl`+`click`. Standalone click will still open document in modal. Please report if this does not work on macOS. -* Adds icons for first/last page in all tables -* Adds "uncheck" button to deselect all columns in search table -* Adds additional hint to set `http.cors.allow-headers` when adding a cluster that uses authorization +- Adds icons for first/last page in all tables +- Adds "uncheck" button to deselect all columns in search table +- Adds additional hint to set `http.cors.allow-headers` when adding a cluster that uses authorization ## 0.34.0 -* Use `json-bigint` to parse responses, fixes [#52](https://github.com/cars10/elasticvue/issues/52]. This adds support +- Use `json-bigint` to parse responses, fixes [#52](https://github.com/cars10/elasticvue/issues/52]. This adds support for displaying numbers bigger than `9007199254740991`. I still recommend to use strings for numbers like this if you do not need the value for calculations. -* Add import/export for elasticvue settings, fixes [#53](https://github.com/cars10/elasticvue/issues/53) -* Add configurable regex to hide indices, fixes [#50](https://github.com/cars10/elasticvue/issues/50]. The default value +- Add import/export for elasticvue settings, fixes [#53](https://github.com/cars10/elasticvue/issues/53) +- Add configurable regex to hide indices, fixes [#50](https://github.com/cars10/elasticvue/issues/50]. The default value is `^\..*` -* Improve visibility of active buttons in code viewer/editor -* Autofocus code editor in modals -* Remove fuzzy table filtering. You can still filter specific fields when filtering search results -* Adds a link to an upcoming survey about elasticvue +- Improve visibility of active buttons in code viewer/editor +- Autofocus code editor in modals +- Remove fuzzy table filtering. You can still filter specific fields when filtering search results +- Adds a link to an upcoming survey about elasticvue ## 0.33.0 -* [feat]: adds hint about certificates when connecting to a cluster that uses ssl -* [feat]: more color, contrast and a11y improvements -* updates addon setup and configuration. We now need a separate manifest for chrome because of the new manifest v3 +- [feat]: adds hint about certificates when connecting to a cluster that uses ssl +- [feat]: more color, contrast and a11y improvements +- updates addon setup and configuration. We now need a separate manifest for chrome because of the new manifest v3 spec. (This might cause issues, please do not hesitate to open an issue on github!) -* updates dependencies -* removes component specs, these need to be rewritten after upgrading vue & vuetify +- updates dependencies +- removes component specs, these need to be rewritten after upgrading vue & vuetify ## 0.32.0 -* [feat]: adds ability to completely customize the search query, +- [feat]: adds ability to completely customize the search query, fixes [#42](https://github.com/cars10/elasticvue/issues/42) -* [feat]: adds autocomplete to editors on `Seach` and `Rest` pages (it is *not* context sensitive) -* [feat]: change forms to connect/add a cluster, adds dedicated fields for username and password. This should fix any +- [feat]: adds autocomplete to editors on `Seach` and `Rest` pages (it is _not_ context sensitive) +- [feat]: change forms to connect/add a cluster, adds dedicated fields for username and password. This should fix any issues with passwords that are not urlsafe, fixes [#43](https://github.com/cars10/elasticvue/issues/43) -* [feat]: small color changes to improve a11y and contrast -* converted the remaining components to the new vue composition api +- [feat]: small color changes to improve a11y and contrast +- converted the remaining components to the new vue composition api ## 0.31.0 -* [feat]: support `_bulk` api, fixes [#39](https://github.com/cars10/elasticvue/issues/39) -* [feat]: can show, add and remove index aliases, fixes [#38](https://github.com/cars10/elasticvue/issues/38) -* [feat]: can rename elasticsearch instances, fixes [#41](https://github.com/cars10/elasticvue/issues/41) -* [feat]: adds `x` to all modals +- [feat]: support `_bulk` api, fixes [#39](https://github.com/cars10/elasticvue/issues/39) +- [feat]: can show, add and remove index aliases, fixes [#38](https://github.com/cars10/elasticvue/issues/38) +- [feat]: can rename elasticsearch instances, fixes [#41](https://github.com/cars10/elasticvue/issues/41) +- [feat]: adds `x` to all modals ## 0.30.1 @@ -471,14 +475,14 @@ For this release i rewrote almost all components to use the new vue composition performance and prepares elasticvue for the update to vuejs 3, but might have added some bugs. Please reach out if you encounter any issues! -* [feat]: can add multiple elasticsearch instances, fixes [#35](https://github.com/cars10/elasticvue/issues/35) -* [feat]: adds "copy error" button to error messages -* [feat]: can search indices by clicking on their name in the indices table -* [feat]: cleanup tables and remove "sticky header" option. The tables now always use a sticky header +- [feat]: can add multiple elasticsearch instances, fixes [#35](https://github.com/cars10/elasticvue/issues/35) +- [feat]: adds "copy error" button to error messages +- [feat]: can search indices by clicking on their name in the indices table +- [feat]: cleanup tables and remove "sticky header" option. The tables now always use a sticky header ## 0.26.0 -* [feat]: can host elasticvue inside subdirectory, fixes [#31](https://github.com/cars10/elasticvue/issues/31) +- [feat]: can host elasticvue inside subdirectory, fixes [#31](https://github.com/cars10/elasticvue/issues/31) ## 0.25.0 @@ -486,40 +490,40 @@ This is a re-release of 0.24.0 because i made a mistake publishing it. ## 0.24.0 -* [fix]: fix sorting on search page ASC/DESC beeing the wrong way around -* [fix]: fix opening documents with ids containing a forward slash (`/`), +- [fix]: fix sorting on search page ASC/DESC beeing the wrong way around +- [fix]: fix opening documents with ids containing a forward slash (`/`), fixes [#29](https://github.com/cars10/elasticvue/issues/29) ## 0.23.1 -* [fix]: fix parsing issue when indices are closed [#28](https://github.com/cars10/elasticvue/issues/28) +- [fix]: fix parsing issue when indices are closed [#28](https://github.com/cars10/elasticvue/issues/28) ## 0.23.0 -* [feat]: initial support for elasticsearch 8, fix [#23](https://github.com/cars10/elasticvue/issues/23) -* [feat]: hide the *request body* input when doing rest queries as GET or HEAD, +- [feat]: initial support for elasticsearch 8, fix [#23](https://github.com/cars10/elasticvue/issues/23) +- [feat]: hide the _request body_ input when doing rest queries as GET or HEAD, fixes [#26](https://github.com/cars10/elasticvue/issues/26) -* [fix]: fix sorting indices by storage. now takes units into consideration, +- [fix]: fix sorting indices by storage. now takes units into consideration, fixes [#24](https://github.com/cars10/elasticvue/issues/24) ## 0.22.0 -* [feat]: change searching to use elasticsearch pagination+sort. **this limits the filter to the current +- [feat]: change searching to use elasticsearch pagination+sort. **this limits the filter to the current page.** [#20](https://github.com/cars10/elasticvue/issues/20) -* [feat]: can click on index aliases on index overview to directly search -* [fix]: fix showing index info/stats not always showing the correct result in modal -* remove the deprecated [elasticsearch](https://www.npmjs.com/package/elasticsearch) library and api browser page. +- [feat]: can click on index aliases on index overview to directly search +- [fix]: fix showing index info/stats not always showing the correct result in modal +- remove the deprecated [elasticsearch](https://www.npmjs.com/package/elasticsearch) library and api browser page. see [#22](https://github.com/cars10/elasticvue/issues/22] for details ## 0.21.0 -* [fix]: adds support for hosts with path/subdirectory where elasticsearch is not available at the url root, for +- [fix]: adds support for hosts with path/subdirectory where elasticsearch is not available at the url root, for example `example.com/elasticsearch` ([#19](https://github.com/cars10/elasticvue/issues/19)) ## 0.20.0 This version removes the need to configure CORS **if you use one of the browser extensions**. I am not entirely happy -with this change, but after some discussion ([#14](https://github.com/cars10/elasticvue/issues/14], [#17][p17)) i think +with this change, but after some discussion ([#14](https://github.com/cars10/elasticvue/issues/14], [#17]p17)) i think we i should prioritize usability in this case. @@ -527,241 +531,241 @@ case. ## 0.19.0 -* beautify code on paste (for rest and api browser) -* improve visibility of modal dialogs -* add edge extension, thx @yoke88, fixes [#15](https://github.com/cars10/elasticvue/issues/15) -* add docker environment variables example to configure page +- beautify code on paste (for rest and api browser) +- improve visibility of modal dialogs +- add edge extension, thx @yoke88, fixes [#15](https://github.com/cars10/elasticvue/issues/15) +- add docker environment variables example to configure page ## 0.18.0 -* The docker image now uses nginx to host elasticvue instead of express. This decreases the image size and increases +- The docker image now uses nginx to host elasticvue instead of express. This decreases the image size and increases performance. -* updates vuetify. this changes the colors of the dark theme, +- updates vuetify. this changes the colors of the dark theme, see [vuetify](https://github.com/vuetifyjs/vuetify/releases/tag/v2.2.6) -* rework snapshot and repository management -* ui improvements for navbar and indices table +- rework snapshot and repository management +- ui improvements for navbar and indices table ### 0.17.0 -* [feat] show index aliases on index overview, fixes [#13](https://github.com/cars10/elasticvue/issues/13) -* use node 12 +- [feat] show index aliases on index overview, fixes [#13](https://github.com/cars10/elasticvue/issues/13) +- use node 12 ### 0.16.2 -* [fix] fix connecting to servers on port 80 and 443 [#11](https://github.com/cars10/elasticvue/issues/11) -* increase width of `host` input field in setup form +- [fix] fix connecting to servers on port 80 and 443 [#11](https://github.com/cars10/elasticvue/issues/11) +- increase width of `host` input field in setup form ### 0.16.1 -* [fix] fix connecting with passwords with special characters [#10](https://github.com/cars10/elasticvue/issues/10) +- [fix] fix connecting with passwords with special characters [#10](https://github.com/cars10/elasticvue/issues/10) ### 0.16.0 -* [merge] merge fix, thx @cengler [#9](https://github.com/cars10/elasticvue/issues/9) -* updates dependencies -* supported elasticsearch versions: `5.6`, `6.8`, `7.0`, `7.1`, `7.2`, `7.3`, `7.4`, `7.5` +- [merge] merge fix, thx @cengler [#9](https://github.com/cars10/elasticvue/issues/9) +- updates dependencies +- supported elasticsearch versions: `5.6`, `6.8`, `7.0`, `7.1`, `7.2`, `7.3`, `7.4`, `7.5` ### 0.15.0 -* [fix] fix [#8](https://github.com/cars10/elasticvue/issues/8) -* [fix] fix exact filtering (using `"query"`) when filtering for fields that contain uppercase characters -* [fix] fix filtering for numbers +- [fix] fix [#8](https://github.com/cars10/elasticvue/issues/8) +- [fix] fix exact filtering (using `"query"`) when filtering for fields that contain uppercase characters +- [fix] fix filtering for numbers ### 0.14.0 -* [feat] adds reload button to modals -* [feat] can switch between vertical/horizontal layout in query/api browser -* [feat] decrease navbar size when scrolled down -* updates logos +- [feat] adds reload button to modals +- [feat] can switch between vertical/horizontal layout in query/api browser +- [feat] decrease navbar size when scrolled down +- updates logos ### 0.13.0 -* firefox addon is now available on [addons.mozilla.org](https://addons.mozilla.org/en-US/firefox/addon/elasticvue/)! -* [feat] can switch between vertical/horizontal layout in query/rest -* [feat] can beautify code in readonly editor +- firefox addon is now available on [addons.mozilla.org](https://addons.mozilla.org/en-US/firefox/addon/elasticvue/)! +- [feat] can switch between vertical/horizontal layout in query/rest +- [feat] can beautify code in readonly editor ### 0.12.0 -* improvements for the code editor (json views): - * [feat] enable searchbox for code editor - * [feat] add beautify button to code editor (hotkey: ctrl+alt+l) -* [feat] show different "no results" text in results table based on current filters. thx @georgeyeint (see discussion +- improvements for the code editor (json views): + - [feat] enable searchbox for code editor + - [feat] add beautify button to code editor (hotkey: ctrl+alt+l) +- [feat] show different "no results" text in results table based on current filters. thx @georgeyeint (see discussion in [#7](https://github.com/cars10/elasticvue/issues/7)) -* [bug] fix switching between index pattern and index selection ([#7](https://github.com/cars10/elasticvue/issues/7)) -* [bug] fix indices & search table not showing empty results when search result is empty +- [bug] fix switching between index pattern and index selection ([#7](https://github.com/cars10/elasticvue/issues/7)) +- [bug] fix indices & search table not showing empty results when search result is empty ### 0.11.0 -* [feat] can filter exact with `"` in all filter and select inputs -* [feat] async filtering for indices table and search results table (using web workers) -* [feat] adds examples to both query forms (rest and api browser) -* [feat] adds more options to snapshot creation form -* updates dependencies, most notably vuetify 2.x +- [feat] can filter exact with `"` in all filter and select inputs +- [feat] async filtering for indices table and search results table (using web workers) +- [feat] adds examples to both query forms (rest and api browser) +- [feat] adds more options to snapshot creation form +- updates dependencies, most notably vuetify 2.x ### 0.10.2 -* [bug] fix usage with elasticsearch `7.1.1`. thx @iDmple ([#5](https://github.com/cars10/elasticvue/issues/5)) +- [bug] fix usage with elasticsearch `7.1.1`. thx @iDmple ([#5](https://github.com/cars10/elasticvue/issues/5)) ### 0.10.1 -* [bug] fix clicking search result item might open previous opened item. thx +- [bug] fix clicking search result item might open previous opened item. thx @foqq ([#4](https://github.com/cars10/elasticvue/issues/4)) ### 0.10.0 -* [bug] fix redirect loop in chrome extension on macos and windows. thx +- [bug] fix redirect loop in chrome extension on macos and windows. thx @foqq ([#2](https://github.com/cars10/elasticvue/issues/2)) -* [feat] you can now switch between index selection and index patterns -* performance improvements (removes global components and mixins) -* updates dependencies +- [feat] you can now switch between index selection and index patterns +- performance improvements (removes global components and mixins) +- updates dependencies ### 0.9.2 -* cleanup after source_includes changes +- cleanup after source_includes changes ### 0.9.1 -* fix source_includes breaking search +- fix source_includes breaking search ### 0.9.0 -* snapshot management - * create and remove snapshot repositories - * take and restore snapshots for all/specific indices -* updates dependencies (vue 2.6, vuetify 1.5) +- snapshot management + - create and remove snapshot repositories + - take and restore snapshots for all/specific indices +- updates dependencies (vue 2.6, vuetify 1.5) ### 0.8.0 -* adds api-browser component -* better handling of network errors -* only search still existing indices -* removes reconnect input in toolbar -* adds/fixes some specs -* updates dependencies +- adds api-browser component +- better handling of network errors +- only search still existing indices +- removes reconnect input in toolbar +- adds/fixes some specs +- updates dependencies ### 0.7.1 -* fix css issue +- fix css issue ### 0.7.0 -* added node overview -* added management options for indices -* adds timer setting to reload buttons for interval querying -* can always connect to cluster without testing +- added node overview +- added management options for indices +- adds timer setting to reload buttons for interval querying +- can always connect to cluster without testing ### 0.6.0 -* fix css for table settings button -* fix chrome extension build script -* adds cerebro to readme +- fix css for table settings button +- fix chrome extension build script +- adds cerebro to readme ### 0.5.0 -* adds logo -* adds e2e specs +- adds logo +- adds e2e specs ### 0.4.0 -* can use authorized clusters (via `username:password@host` syntax) -* can toggle table columns during search -* switch from karma to jest specs +- can use authorized clusters (via `username:password@host` syntax) +- can toggle table columns during search +- switch from karma to jest specs ### 0.3.0 -* switch to port 8080 in development builds and docker container -* fixes some responsiveness errors -* adds ability to create indices -* adds setting to enable/disable sticky table headers -* internal refactorings to match vue style guide -* adds utility to create some test data +- switch to port 8080 in development builds and docker container +- fixes some responsiveness errors +- adds ability to create indices +- adds setting to enable/disable sticky table headers +- internal refactorings to match vue style guide +- adds utility to create some test data ### 0.2.3 -* switch to vue-cli-3 -* refactor resizing code editors +- switch to vue-cli-3 +- refactor resizing code editors ### 0.2.2 -* fix fixed table headers +- fix fixed table headers ### 0.2.1 -* use a different lib to stringify params +- use a different lib to stringify params ### 0.2.0 -* adds options to hide `_index` and `_score` columns on search page -* autoscroll page when resizing editors -* correctly build request on query page when using GET and params together -* internal state refactorings +- adds options to hide `_index` and `_score` columns on search page +- autoscroll page when resizing editors +- correctly build request on query page when using GET and params together +- internal state refactorings ### 0.1.8 -* fix broken build +- fix broken build ### 0.1.7 -* better table resizing -* fix bug where sourceIncludes option was deleted automatically -* small performance improvement +- better table resizing +- fix bug where sourceIncludes option was deleted automatically +- small performance improvement ### 0.1.6 -* fix column name filter on search page +- fix column name filter on search page ### 0.1.5 -* text changes -* fix bug when reloading indices on search -* use node 10 for docker image -* adds more specs -* updates dependencies +- text changes +- fix bug when reloading indices on search +- use node 10 for docker image +- adds more specs +- updates dependencies ### 0.1.4 -* fixes grid sizes -* makes table headers sticky and tables scrollable -* adds filters for source includes and size on search view -* save table pagination and sort settings in store -* updates dependencies +- fixes grid sizes +- makes table headers sticky and tables scrollable +- adds filters for source includes and size on search view +- save table pagination and sort settings in store +- updates dependencies ### 0.1.3 -* can connect via ctrl+enter during initial setup -* rewrote query page - you can now directly fetch your cluster -* can resize code editors -* some internal changes to be more compliant to vue best practices +- can connect via ctrl+enter during initial setup +- rewrote query page - you can now directly fetch your cluster +- can resize code editors +- some internal changes to be more compliant to vue best practices ### 0.1.2 -* adds some basic specs -* changes urls to point to elasticvue.com -* load editor component async +- adds some basic specs +- changes urls to point to elasticvue.com +- load editor component async ### 0.1.1 -* fix github dependency in package.json because docker image did not build +- fix github dependency in package.json because docker image did not build ### 0.1.0 -* updates dependencies -* fixed some bugs regarding fuzzy matching -* add better editor to view query results (ace) +- updates dependencies +- fixed some bugs regarding fuzzy matching +- add better editor to view query results (ace) ### 0.0.3 -* updates dependencies -* show version in footer -* renamed "browse" to "search" -* enabled fuzzy matching for all filters (tables and selects) -* reworked connection workflow +- updates dependencies +- show version in footer +- renamed "browse" to "search" +- enabled fuzzy matching for all filters (tables and selects) +- reworked connection workflow ### 0.0.2 -* Adds tooltip to reset button -* Adds more information on 403 errors +- Adds tooltip to reset button +- Adds more information on 403 errors ### 0.0.1 -* initial release +- initial release diff --git a/src/composables/components/rest/RestQueryForm.ts b/src/composables/components/rest/RestQueryForm.ts index cf5d2f5b..29487b46 100644 --- a/src/composables/components/rest/RestQueryForm.ts +++ b/src/composables/components/rest/RestQueryForm.ts @@ -9,7 +9,7 @@ import { fetchMethod } from '../../../helpers/fetch' import { IdbRestQueryTab, IdbRestQueryTabRequest } from '../../../db/types.ts' import { debounce } from '../../../helpers/debounce.ts' import { parseKibana } from '../../../helpers/parseKibana.ts' -import { cleanIndexName } from '../../../helpers/cleanIndexName.ts' +import { cleanRestPath } from '../../../helpers/cleanRestPath.ts' type RestQueryFormProps = { tab: IdbRestQueryTab @@ -48,7 +48,7 @@ export const useRestQueryForm = (props: RestQueryFormProps, emit: any) => { let url = connectionStore.activeCluster.uri if (!url.endsWith('/') && !props.tab.request.path.startsWith('/')) url += '/' - url += cleanIndexName(props.tab.request.path) + url += cleanRestPath(props.tab.request.path) try { const fetchResponse = await fetchMethod(url, options) diff --git a/src/helpers/cleanRestPath.ts b/src/helpers/cleanRestPath.ts new file mode 100644 index 00000000..edd23fd2 --- /dev/null +++ b/src/helpers/cleanRestPath.ts @@ -0,0 +1,82 @@ +import { cleanIndexName } from './cleanIndexName' + +/** + * Properly handles REST API paths by separating index names from document IDs + * and applying appropriate encoding to each part. + * + * @param path - The REST API path (e.g., "my-index/_doc/document-with-/-char") + * @returns The properly encoded path + */ +export const cleanRestPath = (path: string): string => { + if (!path) return path + + // Find the first slash to separate index from the rest + const firstSlashIndex = path.indexOf('/') + + if (firstSlashIndex === -1) { + // No slash found, just clean the index name + return cleanIndexName(path) + } + + // Split into index and the rest + const indexName = path.substring(0, firstSlashIndex) + const restOfPath = path.substring(firstSlashIndex + 1) + + // Clean the index name + const cleanedIndexName = cleanIndexName(indexName) + + // For the rest of the path, we need to handle it more carefully + // We need to preserve the structure but encode document IDs + // The issue is that when we split by slash, we lose the slashes in the document ID + // So we need to be more careful about how we handle this + + let encodedRestOfPath: string + + // If the path contains slashes, we need to handle it specially + if (restOfPath.includes('/')) { + // Split by slash to get the parts + const restParts = restOfPath.split('/') + + if (restParts.length >= 2) { + // We have at least type and document ID + // The last part is the document ID, but it might be split by slashes + // We need to reconstruct the document ID by joining the parts after the type + const typePart = restParts[0] + const documentIdParts = restParts.slice(1) + + // Reconstruct the document ID by joining the parts + const documentId = documentIdParts.join('/') + + // Encode the document ID if it's not already encoded + let encodedDocumentId: string + if (documentId.includes('%')) { + // Already encoded, don't encode again + encodedDocumentId = documentId + } else { + // Encode the document ID + encodedDocumentId = encodeURIComponent(documentId) + } + + // Reconstruct the path + encodedRestOfPath = `${typePart}/${encodedDocumentId}` + } else { + // Only one part, encode it + const part = restParts[0] + if (part.includes('%')) { + encodedRestOfPath = restOfPath + } else { + encodedRestOfPath = encodeURIComponent(part) + } + } + } else { + // No slashes, just encode the whole thing + if (restOfPath.includes('%')) { + encodedRestOfPath = restOfPath + } else { + encodedRestOfPath = encodeURIComponent(restOfPath) + } + } + + // Reconstruct the path + return `${cleanedIndexName}/${encodedRestOfPath}` +} diff --git a/tests/unit/helpers/cleanRestPath.spec.ts b/tests/unit/helpers/cleanRestPath.spec.ts new file mode 100644 index 00000000..71e47aad --- /dev/null +++ b/tests/unit/helpers/cleanRestPath.spec.ts @@ -0,0 +1,410 @@ +import { describe, it, expect } from 'vitest' +import { cleanRestPath } from '../../../src/helpers/cleanRestPath' + +describe.concurrent('helpers/cleanRestPath.ts', () => { + describe('basic functionality', () => { + it('should return empty string for empty input', () => { + expect(cleanRestPath('')).toBe('') + }) + + it('should handle null/undefined input gracefully', () => { + expect(cleanRestPath(null as any)).toBe(null) + expect(cleanRestPath(undefined as any)).toBe(undefined) + }) + + it('should handle simple index names without slashes', () => { + const testCases = [ + 'movies', + 'kube-2024.12.21', + 'my-index', + 'test_index' + ] + testCases.forEach(indexName => { + expect(cleanRestPath(indexName)).toBe(indexName) + }) + }) + }) + + describe('index name cleaning', () => { + it('should clean index names with special characters', () => { + const testCases = [ + { + input: 'foo//_doc', + expected: 'foo//bar', + expected: 'movies/%//bar' // The function only cleans the index part, not the rest + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + }) + + describe('document ID encoding', () => { + it('should encode document IDs with slashes', () => { + const testCases = [ + { + input: 'my-index/my-cat/document-with-/-char', + expected: 'my-index/my-cat/document-with-%2F-char' + }, + { + input: 'my-index/_doc/document-with-/-char', + expected: 'my-index/_doc/document-with-%2F-char' + }, + { + input: 'test-index/type/doc/with/multiple/slashes', + expected: 'test-index/type/doc%2Fwith%2Fmultiple%2Fslashes' + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + + it('should encode document IDs with special characters', () => { + const testCases = [ + { + input: 'my-index/type/document with spaces', + expected: 'my-index/type/document%20with%20spaces' + }, + { + input: 'my-index/type/document+with+plus', + expected: 'my-index/type/document%2Bwith%2Bplus' + }, + { + input: 'my-index/type/document:with:colons', + expected: 'my-index/type/document%3Awith%3Acolons' + }, + { + input: 'my-index/type/document?with?question', + expected: 'my-index/type/document%3Fwith%3Fquestion' + }, + { + input: 'my-index/type/document#with#hash', + expected: 'my-index/type/document%23with%23hash' + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + + it('should not double-encode already encoded document IDs', () => { + const testCases = [ + { + input: 'my-index/my-cat/document-with-%2F-char', + expected: 'my-index/my-cat/document-with-%2F-char' + }, + { + input: 'my-index/type/document%20with%20spaces', + expected: 'my-index/type/document%20with%20spaces' + }, + { + input: 'my-index/type/document%2Bwith%2Bplus', + expected: 'my-index/type/document%2Bwith%2Bplus' + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + }) + + describe('API endpoints', () => { + it('should not modify API endpoints', () => { + const testCases = [ + 'my-index/_search', + 'my-index/_mapping', + 'my-index/_settings', + 'my-index/_stats', + 'my-index/_aliases', + 'my-index/_refresh', + 'my-index/_flush', + 'my-index/_forcemerge', + 'my-index/_shrink', + 'my-index/_split', + 'my-index/_clone', + 'my-index/_rollover', + 'my-index/_freeze', + 'my-index/_unfreeze', + 'my-index/_close', + 'my-index/_open', + 'my-index/_reindex', + 'my-index/_update_by_query', + 'my-index/_delete_by_query', + 'my-index/_bulk', + 'my-index/_msearch', + 'my-index/_mget', + 'my-index/_explain', + 'my-index/_validate/query', + 'my-index/_analyze', + 'my-index/_termvectors', + 'my-index/_field_caps', + 'my-index/_search_shards', + 'my-index/_search/template', + 'my-index/_render/template', + 'my-index/_scripts', + 'my-index/_ingest', + 'my-index/_transform', + 'my-index/_ml', + 'my-index/_watcher', + 'my-index/_security', + 'my-index/_xpack', + 'my-index/_cat', + 'my-index/_cluster', + 'my-index/_nodes', + 'my-index/_tasks', + 'my-index/_snapshot', + 'my-index/_repositories', + 'my-index/_ilm', + 'my-index/_slm', + 'my-index/_enrich', + 'my-index/_data_frame', + 'my-index/_rollup', + 'my-index/_transform', + 'my-index/_async_search', + 'my-index/_eql', + 'my-index/_graph', + 'my-index/_license', + 'my-index/_monitoring', + 'my-index/_telemetry', + 'my-index/_usage', + 'my-index/_features', + 'my-index/_info', + 'my-index/_health' + ] + testCases.forEach(endpoint => { + expect(cleanRestPath(endpoint)).toBe(endpoint) + }) + }) + }) + + describe('complex scenarios', () => { + it('should handle paths with multiple segments', () => { + const testCases = [ + { + input: 'my-index/type/doc-id', + expected: 'my-index/type/doc-id' + }, + { + input: 'my-index/type/doc-id/sub-path', + expected: 'my-index/type/doc-id%2Fsub-path' + }, + { + input: 'my-index/type/doc-id/sub-path/another', + expected: 'my-index/type/doc-id%2Fsub-path%2Fanother' + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + + it('should handle paths with query parameters', () => { + const testCases = [ + { + input: 'my-index/_search?q=test', + expected: 'my-index/_search%3Fq%3Dtest' // Query parameters are part of the document ID and get encoded + }, + { + input: 'my-index/type/doc-id?routing=test', + expected: 'my-index/type/doc-id%3Frouting%3Dtest' // Query parameters are part of the document ID and get encoded + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + + it('should handle paths with fragments', () => { + const testCases = [ + { + input: 'my-index/_search#fragment', + expected: 'my-index/_search%23fragment' // Fragments are part of the document ID and get encoded + }, + { + input: 'my-index/type/doc-id#fragment', + expected: 'my-index/type/doc-id%23fragment' // Fragments are part of the document ID and get encoded + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + }) + + describe('edge cases', () => { + it('should handle paths with only slashes', () => { + expect(cleanRestPath('/')).toBe('/') + expect(cleanRestPath('//')).toBe('//') + expect(cleanRestPath('///')).toBe('//%2F') // The last slash gets encoded as part of the document ID + }) + + it('should handle paths starting with slash', () => { + const testCases = [ + { + input: '/my-index', + expected: '/my-index' + }, + { + input: '/my-index/type/doc-id', + expected: '/my-index/type%2Fdoc-id' // The document ID part gets encoded + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + + it('should handle paths ending with slash', () => { + const testCases = [ + { + input: 'my-index/', + expected: 'my-index/' + }, + { + input: 'my-index/type/', + expected: 'my-index/type/' + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + + it('should handle paths with empty segments', () => { + const testCases = [ + { + input: 'my-index//doc-id', + expected: 'my-index//doc-id' // The empty segment is preserved as-is + }, + { + input: 'my-index/type//doc-id', + expected: 'my-index/type/%2Fdoc-id' // The empty segment gets encoded as %2F + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + + it('should handle very long paths', () => { + const longPath = 'my-index/type/' + 'a'.repeat(1000) + const result = cleanRestPath(longPath) + expect(result).toBe(longPath) + }) + + it('should handle paths with unicode characters', () => { + const testCases = [ + { + input: 'my-index/type/文档-id', + expected: 'my-index/type/%E6%96%87%E6%A1%A3-id' + }, + { + input: 'my-index/type/документ-id', + expected: 'my-index/type/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82-id' + }, + { + input: 'my-index/type/文档/with/slashes', + expected: 'my-index/type/%E6%96%87%E6%A1%A3%2Fwith%2Fslashes' + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + }) + + describe('real-world scenarios', () => { + it('should handle common Elasticsearch patterns', () => { + const testCases = [ + { + input: 'logs-2024.01.01/_doc/1', + expected: 'logs-2024.01.01/_doc/1' + }, + { + input: 'logs-2024.01.01/_doc/1/2/3', + expected: 'logs-2024.01.01/_doc/1%2F2%2F3' + }, + { + input: 'my-index/_doc/document-with-/-char', + expected: 'my-index/_doc/document-with-%2F-char' + }, + { + input: 'my-index/_doc/document-with-/-char/and/more', + expected: 'my-index/_doc/document-with-%2F-char%2Fand%2Fmore' + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + + it('should handle Kibana-style paths', () => { + const testCases = [ + { + input: '.kibana/_doc/config:7.0.0', + expected: '.kibana/_doc/config%3A7.0.0' + }, + { + input: '.kibana/_doc/index-pattern:logs-*', + expected: '.kibana/_doc/index-pattern%3Alogs-*' // The * is not encoded as it's not a special character for URL encoding + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + + it('should handle paths with special Elasticsearch characters', () => { + const testCases = [ + { + input: 'my-index/_doc/doc.with.dots', + expected: 'my-index/_doc/doc.with.dots' + }, + { + input: 'my-index/_doc/doc-with-dashes', + expected: 'my-index/_doc/doc-with-dashes' + }, + { + input: 'my-index/_doc/doc_with_underscores', + expected: 'my-index/_doc/doc_with_underscores' + }, + { + input: 'my-index/_doc/doc+with+plus', + expected: 'my-index/_doc/doc%2Bwith%2Bplus' + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + }) + + describe('performance and stress tests', () => { + it('should handle many consecutive slashes', () => { + const input = 'my-index/type/doc////////id' + const result = cleanRestPath(input) + expect(result).toBe('my-index/type/doc%2F%2F%2F%2F%2F%2F%2F%2Fid') // All slashes in the document ID get encoded + }) + + it('should handle mixed encoding scenarios', () => { + const testCases = [ + { + input: 'my-index/type/doc%2Fid/more', + expected: 'my-index/type/doc%2Fid/more' // Already encoded parts are not double-encoded + }, + { + input: 'my-index/type/doc%2Fid%2Fmore', + expected: 'my-index/type/doc%2Fid%2Fmore' // Already encoded parts are not double-encoded + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + }) +}) From 2cc832ac5c84101bfb5e24743be5856807d41ff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Sat, 4 Oct 2025 22:22:30 +0200 Subject: [PATCH 05/46] fix type error --- tests/unit/helpers/cleanRestPath.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/helpers/cleanRestPath.spec.ts b/tests/unit/helpers/cleanRestPath.spec.ts index 71e47aad..28cf44ee 100644 --- a/tests/unit/helpers/cleanRestPath.spec.ts +++ b/tests/unit/helpers/cleanRestPath.spec.ts @@ -8,8 +8,8 @@ describe.concurrent('helpers/cleanRestPath.ts', () => { }) it('should handle null/undefined input gracefully', () => { - expect(cleanRestPath(null as any)).toBe(null) - expect(cleanRestPath(undefined as any)).toBe(undefined) + expect(cleanRestPath(null as unknown as string)).toBe(null) + expect(cleanRestPath(undefined as unknown as string)).toBe(undefined) }) it('should handle simple index names without slashes', () => { From 14d46be7104747ff085315f7e0ff6a0db234aec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Sat, 4 Oct 2025 23:05:38 +0200 Subject: [PATCH 06/46] draft: snapshot policies --- eslint.config.mjs | 1 - src/components/base/AppHeader.vue | 6 +- .../snapshotpolicies/EditSnapshotPolicy.vue | 114 ++++++++++++++++ .../snapshotpolicies/NewSnapshotPolicy.vue | 108 +++++++++++++++ .../snapshotpolicies/SnapshotPolicies.vue | 44 ++++++ .../SnapshotPoliciesTable.vue | 77 +++++++++++ .../snapshotpolicies/EditSnapshotPolicy.ts | 127 ++++++++++++++++++ .../snapshotpolicies/NewSnapshotPolicy.ts | 104 ++++++++++++++ .../snapshotpolicies/SnapshotPoliciesTable.ts | 90 +++++++++++++ src/helpers/slmSupport.ts | 28 ++++ src/locales/cn.json | 78 ++++++++++- src/locales/en.json | 78 ++++++++++- src/locales/fr.json | 78 ++++++++++- src/locales/it.json | 78 ++++++++++- src/locales/jp.json | 78 ++++++++++- src/locales/ru.json | 78 ++++++++++- src/router.ts | 2 + src/services/ElasticsearchAdapter.ts | 25 ++++ src/types/snapshotPolicies.ts | 66 +++++++++ 19 files changed, 1252 insertions(+), 8 deletions(-) create mode 100644 src/components/snapshotpolicies/EditSnapshotPolicy.vue create mode 100644 src/components/snapshotpolicies/NewSnapshotPolicy.vue create mode 100644 src/components/snapshotpolicies/SnapshotPolicies.vue create mode 100644 src/components/snapshotpolicies/SnapshotPoliciesTable.vue create mode 100644 src/composables/components/snapshotpolicies/EditSnapshotPolicy.ts create mode 100644 src/composables/components/snapshotpolicies/NewSnapshotPolicy.ts create mode 100644 src/composables/components/snapshotpolicies/SnapshotPoliciesTable.ts create mode 100644 src/helpers/slmSupport.ts create mode 100644 src/types/snapshotPolicies.ts diff --git a/eslint.config.mjs b/eslint.config.mjs index a21fa033..0f3610ea 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -12,7 +12,6 @@ export default defineConfigWithVueTs( { rules: { 'semi': ['error', 'never'], - 'vue/script-indent': ['error', 2, { 'baseIndent': 1 }], 'vue/max-attributes-per-line': 'off', 'vue/first-attribute-linebreak': 'off', 'vue/html-closing-bracket-newline': 'off', diff --git a/src/components/base/AppHeader.vue b/src/components/base/AppHeader.vue index b63dfa76..57e06225 100644 --- a/src/components/base/AppHeader.vue +++ b/src/components/base/AppHeader.vue @@ -22,6 +22,8 @@ + @@ -32,9 +34,11 @@ import { useLogo } from '../../composables/Logo' import ClusterSelection from '../clusterselection/ClusterSelection.vue' import { useTranslation } from '../../composables/i18n.ts' - import {useConnectionStore} from '../../store/connection.ts' + import { useSlmSupport } from '../../helpers/slmSupport' + import { useConnectionStore } from '../../store/connection' const t = useTranslation() const logo = useLogo() const connectionStore = useConnectionStore() + const { isSlmSupported } = useSlmSupport() diff --git a/src/components/snapshotpolicies/EditSnapshotPolicy.vue b/src/components/snapshotpolicies/EditSnapshotPolicy.vue new file mode 100644 index 00000000..5dcdb30c --- /dev/null +++ b/src/components/snapshotpolicies/EditSnapshotPolicy.vue @@ -0,0 +1,114 @@ + + + diff --git a/src/components/snapshotpolicies/NewSnapshotPolicy.vue b/src/components/snapshotpolicies/NewSnapshotPolicy.vue new file mode 100644 index 00000000..e4ad89a4 --- /dev/null +++ b/src/components/snapshotpolicies/NewSnapshotPolicy.vue @@ -0,0 +1,108 @@ + + + diff --git a/src/components/snapshotpolicies/SnapshotPolicies.vue b/src/components/snapshotpolicies/SnapshotPolicies.vue new file mode 100644 index 00000000..80822a57 --- /dev/null +++ b/src/components/snapshotpolicies/SnapshotPolicies.vue @@ -0,0 +1,44 @@ + + + diff --git a/src/components/snapshotpolicies/SnapshotPoliciesTable.vue b/src/components/snapshotpolicies/SnapshotPoliciesTable.vue new file mode 100644 index 00000000..055a3c28 --- /dev/null +++ b/src/components/snapshotpolicies/SnapshotPoliciesTable.vue @@ -0,0 +1,77 @@ + + + diff --git a/src/composables/components/snapshotpolicies/EditSnapshotPolicy.ts b/src/composables/components/snapshotpolicies/EditSnapshotPolicy.ts new file mode 100644 index 00000000..36a4a32c --- /dev/null +++ b/src/composables/components/snapshotpolicies/EditSnapshotPolicy.ts @@ -0,0 +1,127 @@ +import { useTranslation } from '../../i18n' +import { computed, ref } from 'vue' +import { defineElasticsearchRequest, useElasticsearchAdapter } from '../../CallElasticsearch' +import type { SnapshotPolicyForm, SnapshotPolicyRequestBody, EmitFunction, ElasticsearchResponse } from '../../../types/snapshotPolicies' + +export const useEditSnapshotPolicy = (emit: EmitFunction) => { + const t = useTranslation() + + const dialog = ref(false) + const policy = ref({ + name: '', + schedule: '', + repository: '', + indices: '*', + ignoreUnavailable: false, + includeGlobalState: true, + retentionExpireAfter: '', + retentionMaxCount: null, + retentionMinCount: null + }) + + const formValid = computed(() => ( + policy.value.schedule.length > 0 && + policy.value.repository.length > 0 + )) + + const resetForm = () => { + policy.value = { + name: '', + schedule: '', + repository: '', + indices: '*', + ignoreUnavailable: false, + includeGlobalState: true, + retentionExpireAfter: '', + retentionMaxCount: null, + retentionMinCount: null + } + } + + const closeDialog = () => { + resetForm() + dialog.value = false + } + + const { run, loading } = defineElasticsearchRequest({ + emit: (event: string) => emit(event as 'reload'), + method: 'slmPutPolicy' + }) + const { callElasticsearch } = useElasticsearchAdapter() + + const loadPolicy = async (policyName: string) => { + try { + const data = await callElasticsearch('slmGetPolicy', { policy: policyName }) + if (data && data[policyName]) { + const p = data[policyName].policy + policy.value = { + name: policyName, + schedule: p.schedule, + repository: p.repository, + indices: p.config?.indices?.join(',') || '*', + ignoreUnavailable: p.config?.ignore_unavailable || false, + includeGlobalState: p.config?.include_global_state || false, + retentionExpireAfter: p.retention?.expire_after || '', + retentionMaxCount: p.retention?.max_count || null, + retentionMinCount: p.retention?.min_count || null + } + } + } catch (error) { + console.error('Failed to load policy:', error) + } + } + + const updatePolicy = async (policyName: string) => { + if (!formValid.value) return + + const policyBody: SnapshotPolicyRequestBody = { + schedule: policy.value.schedule, + repository: policy.value.repository, + config: { + indices: policy.value.indices.split(',').map((i: string) => i.trim()).filter((i: string) => i.length > 0), + ignore_unavailable: policy.value.ignoreUnavailable, + include_global_state: policy.value.includeGlobalState + } + } + + // Add retention if specified + if (policy.value.retentionExpireAfter || policy.value.retentionMaxCount || policy.value.retentionMinCount) { + policyBody.retention = {} + if (policy.value.retentionExpireAfter) { + policyBody.retention.expire_after = policy.value.retentionExpireAfter + } + if (policy.value.retentionMaxCount) { + policyBody.retention.max_count = policy.value.retentionMaxCount + } + if (policy.value.retentionMinCount) { + policyBody.retention.min_count = policy.value.retentionMinCount + } + } + + const success = await run({ + params: { + policy: policyName, + body: policyBody + }, + snackbarOptions: (body: ElasticsearchResponse) => { + return { + title: t('snapshot_policies.edit_policy.update_policy.growl', { name: policyName }), + body: JSON.stringify(body) + } + } + }) + + if (success) closeDialog() + } + + return { + dialog, + policy, + formValid, + loading, + loadPolicy, + updatePolicy, + resetForm, + closeDialog + } +} diff --git a/src/composables/components/snapshotpolicies/NewSnapshotPolicy.ts b/src/composables/components/snapshotpolicies/NewSnapshotPolicy.ts new file mode 100644 index 00000000..4fe05ab9 --- /dev/null +++ b/src/composables/components/snapshotpolicies/NewSnapshotPolicy.ts @@ -0,0 +1,104 @@ +import { useTranslation } from '../../i18n' +import { computed, ref } from 'vue' +import { defineElasticsearchRequest } from '../../CallElasticsearch' +import type { SnapshotPolicyForm, SnapshotPolicyRequestBody, EmitFunction, ElasticsearchResponse } from '../../../types/snapshotPolicies' + +export const useNewSnapshotPolicy = (emit: EmitFunction) => { + const t = useTranslation() + + const dialog = ref(false) + const policy = ref({ + name: '', + schedule: '', + repository: '', + indices: '*', + ignoreUnavailable: false, + includeGlobalState: true, + retentionExpireAfter: '', + retentionMaxCount: null, + retentionMinCount: null + }) + + const formValid = computed(() => ( + policy.value.name.length > 0 && + policy.value.schedule.length > 0 && + policy.value.repository.length > 0 + )) + + const resetForm = () => { + policy.value = { + name: '', + schedule: '', + repository: '', + indices: '*', + ignoreUnavailable: false, + includeGlobalState: true, + retentionExpireAfter: '', + retentionMaxCount: null, + retentionMinCount: null + } + } + + const closeDialog = () => { + resetForm() + dialog.value = false + } + + const { run, loading } = defineElasticsearchRequest({ + emit: (event: string) => emit(event as 'reload'), + method: 'slmPutPolicy' + }) + + const createPolicy = async () => { + if (!formValid.value) return + + const policyBody: SnapshotPolicyRequestBody = { + schedule: policy.value.schedule, + repository: policy.value.repository, + config: { + indices: policy.value.indices.split(',').map((i: string) => i.trim()).filter((i: string) => i.length > 0), + ignore_unavailable: policy.value.ignoreUnavailable, + include_global_state: policy.value.includeGlobalState + } + } + + // Add retention if specified + if (policy.value.retentionExpireAfter || policy.value.retentionMaxCount || policy.value.retentionMinCount) { + policyBody.retention = {} + if (policy.value.retentionExpireAfter) { + policyBody.retention.expire_after = policy.value.retentionExpireAfter + } + if (policy.value.retentionMaxCount) { + policyBody.retention.max_count = policy.value.retentionMaxCount + } + if (policy.value.retentionMinCount) { + policyBody.retention.min_count = policy.value.retentionMinCount + } + } + + const success = await run({ + params: { + policy: policy.value.name, + body: policyBody + }, + snackbarOptions: (body: ElasticsearchResponse) => { + return { + title: t('snapshot_policies.new_policy.create_policy.growl', { name: policy.value.name }), + body: JSON.stringify(body) + } + } + }) + + if (success) closeDialog() + } + + return { + dialog, + policy, + formValid, + loading, + createPolicy, + resetForm, + closeDialog + } +} diff --git a/src/composables/components/snapshotpolicies/SnapshotPoliciesTable.ts b/src/composables/components/snapshotpolicies/SnapshotPoliciesTable.ts new file mode 100644 index 00000000..46133847 --- /dev/null +++ b/src/composables/components/snapshotpolicies/SnapshotPoliciesTable.ts @@ -0,0 +1,90 @@ +import { useTranslation } from '../../i18n' +import { computed, ref } from 'vue' +import { filterItems } from '../../../helpers/filters' +import { defineElasticsearchRequest } from '../../CallElasticsearch' +import { genColumns } from '../../../helpers/tableColumns' +import { setupFilterState } from '../shared/FilterState.ts' +import type { SnapshotPolicy, EmitFunction } from '../../../types/snapshotPolicies' + +export type EsSnapshotPolicy = { + version: number + modified_date: string + modified_date_millis: number + policy: SnapshotPolicy & { name: string } +} + +export type SnapshotPoliciesTableProps = { + policies: Record +} + +export const useSnapshotPoliciesTable = (props: SnapshotPoliciesTableProps, emit: EmitFunction) => { + const t = useTranslation() + + const filter = ref('') + const editingPolicyName = ref('') + + const results = computed(() => Object.entries(props.policies)) + const filteredResults = computed(() => { + if (results.value.length === 0) return [] + const policies = results.value.map(([name, policy]) => ({ + name, + schedule: policy.policy.schedule, + repository: policy.policy.repository, + retention: policy.policy.retention ? + (policy.policy.retention.expire_after || `${policy.policy.retention.max_count || 'N/A'} snapshots`) : + 'No retention' + })) + return filterItems(policies, filter.value, ['name']) + }) + + const { run: deleteRun } = defineElasticsearchRequest({ + emit: (event: string) => emit(event as 'reload'), + method: 'slmDeletePolicy' + }) + const { run: executeRun } = defineElasticsearchRequest({ + emit: (event: string) => emit(event as 'reload'), + method: 'slmExecutePolicy' + }) + + const deletePolicy = (name: string) => { + return deleteRun({ + confirmMsg: t('snapshot_policies.policies_table.delete_policy.confirm', { name }), + params: { policy: name }, + snackbarOptions: { body: t('snapshot_policies.policies_table.delete_policy.growl', { name }) } + }) + } + + const executePolicy = (name: string) => { + return executeRun({ + confirmMsg: t('snapshot_policies.policies_table.execute_policy.confirm', { name }), + params: { policy: name }, + snackbarOptions: { body: t('snapshot_policies.policies_table.execute_policy.growl', { name }) } + }) + } + + const editPolicy = (name: string) => { + editingPolicyName.value = name + } + + const filterStateProps = setupFilterState(results, filteredResults) + + const columns = genColumns([ + { label: t('snapshot_policies.policies_table.table.headers.name'), field: 'name' }, + { label: t('snapshot_policies.policies_table.table.headers.schedule'), field: 'schedule' }, + { label: t('snapshot_policies.policies_table.table.headers.repository'), field: 'repository' }, + { label: t('snapshot_policies.policies_table.table.headers.retention'), field: 'retention' }, + { label: '' } + ]) + + return { + emit, + editPolicy, + executePolicy, + filter, + filteredResults, + filterStateProps, + deletePolicy, + columns, + editingPolicyName + } +} diff --git a/src/helpers/slmSupport.ts b/src/helpers/slmSupport.ts new file mode 100644 index 00000000..45189795 --- /dev/null +++ b/src/helpers/slmSupport.ts @@ -0,0 +1,28 @@ +import { computed } from 'vue' +import { useConnectionStore } from '../store/connection' + +/** + * Helper to check if Snapshot Lifecycle Management (SLM) is supported + * SLM was introduced in Elasticsearch 7.4.0 + */ +export const useSlmSupport = () => { + const connectionStore = useConnectionStore() + + const isSlmSupported = computed(() => { + const cluster = connectionStore.activeCluster + if (!cluster) return false + + const majorVersion = cluster.majorVersion + if (!majorVersion) return false + + // SLM was introduced in ES 7.4.0 + if (parseInt(majorVersion) < 7) return false + if (parseInt(majorVersion) === 7 && cluster.version < '7.4.0') return false + + return true + }) + + return { + isSlmSupported + } +} diff --git a/src/locales/cn.json b/src/locales/cn.json index f83ad822..4ca9ac24 100644 --- a/src/locales/cn.json +++ b/src/locales/cn.json @@ -11,7 +11,8 @@ "shards": "分片", "search": "搜索", "rest": "REST", - "snapshots": "快照" + "snapshots": "快照", + "snapshot_policies": "Snapshot Policies" } }, "language_switcher": { @@ -48,6 +49,7 @@ "cancel": "取消", "close": "关闭", "create": "创建", + "update": "更新", "delete": "删除", "success": "成功", "bulk": "批量操作", @@ -680,6 +682,80 @@ } } }, + "snapshot_policies": { + "heading": "快照策略", + "unsupported_version": "此 Elasticsearch 版本不支持快照生命周期管理。SLM 从 7.4.0 版本开始可用。", + "new_policy": { + "heading": "新建快照策略", + "create_policy": { + "growl": "快照策略 '{name}' 创建成功。" + }, + "form": { + "name": { + "label": "策略名称*", + "required": "策略名称是必需的" + }, + "schedule": { + "label": "计划*", + "hint": "Cron 表达式(例如,'0 30 1 * * ?' 表示每天凌晨 1:30)", + "required": "计划是必需的" + }, + "repository": { + "label": "仓库*", + "required": "仓库是必需的" + }, + "indices": { + "label": "索引", + "hint": "要包含的索引的逗号分隔列表(默认:'*')" + }, + "ignore_unavailable": { + "label": "忽略不可用的索引" + }, + "include_global_state": { + "label": "包含全局状态" + }, + "retention": { + "heading": "保留设置", + "expire_after": { + "label": "过期时间", + "hint": "快照过期的时间段(例如,'30d'、'1w'、'1m')" + }, + "max_count": { + "label": "最大数量", + "hint": "保留的最大快照数量" + }, + "min_count": { + "label": "最小数量", + "hint": "保留的最小快照数量" + } + } + } + }, + "policies_table": { + "table": { + "headers": { + "name": "名称", + "schedule": "计划", + "repository": "仓库", + "retention": "保留" + } + }, + "delete_policy": { + "confirm": "删除快照策略 '{name}'?", + "growl": "快照策略 '{name}' 删除成功。" + }, + "execute_policy": { + "confirm": "立即执行快照策略 '{name}'?", + "growl": "快照策略 '{name}' 执行成功。" + } + }, + "edit_policy": { + "heading": "编辑快照策略 '{name}'", + "update_policy": { + "growl": "快照策略 '{name}' 更新成功。" + } + } + }, "update_check": { "downloading": "下载中... {progress}%", "heading": "一个新的 elasticvue 版本可用。", diff --git a/src/locales/en.json b/src/locales/en.json index 7824f84f..6502fed2 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -11,7 +11,8 @@ "shards": "Shards", "search": "Search", "rest": "REST", - "snapshots": "Snapshots" + "snapshots": "Snapshots", + "snapshot_policies": "Snapshot Policies" } }, "language_switcher": { @@ -48,6 +49,7 @@ "cancel": "Cancel", "close": "Close", "create": "Create", + "update": "Update", "delete": "Delete", "success": "Success", "bulk": "Bulk Action", @@ -680,6 +682,80 @@ } } }, + "snapshot_policies": { + "heading": "Snapshot Policies", + "unsupported_version": "Snapshot Lifecycle Management is not supported in this Elasticsearch version. SLM is available from version 7.4.0 onwards.", + "new_policy": { + "heading": "New Snapshot Policy", + "create_policy": { + "growl": "The snapshot policy '{name}' was successfully created." + }, + "form": { + "name": { + "label": "Policy name*", + "required": "Policy name is required" + }, + "schedule": { + "label": "Schedule*", + "hint": "Cron expression (e.g., '0 30 1 * * ?' for daily at 1:30 AM)", + "required": "Schedule is required" + }, + "repository": { + "label": "Repository*", + "required": "Repository is required" + }, + "indices": { + "label": "Indices", + "hint": "Comma-separated list of indices to include (default: '*')" + }, + "ignore_unavailable": { + "label": "Ignore unavailable indices" + }, + "include_global_state": { + "label": "Include global state" + }, + "retention": { + "heading": "Retention Settings", + "expire_after": { + "label": "Expire after", + "hint": "Time period after which snapshots expire (e.g., '30d', '1w', '1m')" + }, + "max_count": { + "label": "Maximum count", + "hint": "Maximum number of snapshots to keep" + }, + "min_count": { + "label": "Minimum count", + "hint": "Minimum number of snapshots to keep" + } + } + } + }, + "policies_table": { + "table": { + "headers": { + "name": "Name", + "schedule": "Schedule", + "repository": "Repository", + "retention": "Retention" + } + }, + "delete_policy": { + "confirm": "Delete snapshot policy '{name}'?", + "growl": "The snapshot policy '{name}' was successfully deleted." + }, + "execute_policy": { + "confirm": "Execute snapshot policy '{name}' now?", + "growl": "The snapshot policy '{name}' was successfully executed." + } + }, + "edit_policy": { + "heading": "Edit Snapshot Policy '{name}'", + "update_policy": { + "growl": "The snapshot policy '{name}' was successfully updated." + } + } + }, "update_check": { "downloading": "Downloading... {progress}%", "heading": "A new version of elasticvue is available.", diff --git a/src/locales/fr.json b/src/locales/fr.json index 67e7a4d6..0f9cd550 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -11,7 +11,8 @@ "shards": "Partitions", "search": "Rechercher", "rest": "REST", - "snapshots": "Sauvegardes" + "snapshots": "Sauvegardes", + "snapshot_policies": "Snapshot Policies" } }, "language_switcher": { @@ -48,6 +49,7 @@ "cancel": "Annuler", "close": "Fermer", "create": "Créer", + "update": "Mettre à jour", "delete": "Supprimer", "success": "Succès", "bulk": "Action groupée", @@ -680,6 +682,80 @@ } } }, + "snapshot_policies": { + "heading": "Politiques de Snapshots", + "unsupported_version": "La gestion du cycle de vie des snapshots n'est pas prise en charge dans cette version d'Elasticsearch. SLM est disponible à partir de la version 7.4.0.", + "new_policy": { + "heading": "Nouvelle Politique de Snapshot", + "create_policy": { + "growl": "La politique de snapshot '{name}' a été créée avec succès." + }, + "form": { + "name": { + "label": "Nom de la politique*", + "required": "Le nom de la politique est requis" + }, + "schedule": { + "label": "Planification*", + "hint": "Expression cron (ex: '0 30 1 * * ?' pour tous les jours à 1h30)", + "required": "La planification est requise" + }, + "repository": { + "label": "Dépôt*", + "required": "Le dépôt est requis" + }, + "indices": { + "label": "Indices", + "hint": "Liste d'indices à inclure séparés par des virgules (par défaut: '*')" + }, + "ignore_unavailable": { + "label": "Ignorer les indices indisponibles" + }, + "include_global_state": { + "label": "Inclure l'état global" + }, + "retention": { + "heading": "Paramètres de Rétention", + "expire_after": { + "label": "Expire après", + "hint": "Période après laquelle les snapshots expirent (ex: '30d', '1w', '1m')" + }, + "max_count": { + "label": "Nombre maximum", + "hint": "Nombre maximum de snapshots à conserver" + }, + "min_count": { + "label": "Nombre minimum", + "hint": "Nombre minimum de snapshots à conserver" + } + } + } + }, + "policies_table": { + "table": { + "headers": { + "name": "Nom", + "schedule": "Planification", + "repository": "Dépôt", + "retention": "Rétention" + } + }, + "delete_policy": { + "confirm": "Supprimer la politique de snapshot '{name}' ?", + "growl": "La politique de snapshot '{name}' a été supprimée avec succès." + }, + "execute_policy": { + "confirm": "Exécuter la politique de snapshot '{name}' maintenant ?", + "growl": "La politique de snapshot '{name}' a été exécutée avec succès." + } + }, + "edit_policy": { + "heading": "Modifier la Politique de Snapshot '{name}'", + "update_policy": { + "growl": "La politique de snapshot '{name}' a été mise à jour avec succès." + } + } + }, "update_check": { "downloading": "Téléchargement... {progress}%", "heading": "Une nouvelle version d'elasticvue est disponible.", diff --git a/src/locales/it.json b/src/locales/it.json index b9363cb0..8cb69500 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -11,7 +11,8 @@ "shards": "Frammenti", "search": "Ricerca", "rest": "REST", - "snapshots": "Snapshots" + "snapshots": "Snapshots", + "snapshot_policies": "Snapshot Policies" } }, "language_switcher": { @@ -48,6 +49,7 @@ "cancel": "Annulla", "close": "Chiudi", "create": "Crea", + "update": "Aggiorna", "delete": "Elimina", "success": "Successo", "bulk": "Azione di massa", @@ -680,6 +682,80 @@ } } }, + "snapshot_policies": { + "heading": "Politiche di Snapshot", + "unsupported_version": "La gestione del ciclo di vita degli snapshot non è supportata in questa versione di Elasticsearch. SLM è disponibile dalla versione 7.4.0.", + "new_policy": { + "heading": "Nuova Politica di Snapshot", + "create_policy": { + "growl": "La politica di snapshot '{name}' è stata creata con successo." + }, + "form": { + "name": { + "label": "Nome della politica*", + "required": "Il nome della politica è richiesto" + }, + "schedule": { + "label": "Programmazione*", + "hint": "Espressione cron (es: '0 30 1 * * ?' per ogni giorno alle 1:30)", + "required": "La programmazione è richiesta" + }, + "repository": { + "label": "Repository*", + "required": "Il repository è richiesto" + }, + "indices": { + "label": "Indici", + "hint": "Lista di indici da includere separati da virgole (default: '*')" + }, + "ignore_unavailable": { + "label": "Ignora indici non disponibili" + }, + "include_global_state": { + "label": "Includi stato globale" + }, + "retention": { + "heading": "Impostazioni di Conservazione", + "expire_after": { + "label": "Scade dopo", + "hint": "Periodo di tempo dopo il quale gli snapshot scadono (es: '30d', '1w', '1m')" + }, + "max_count": { + "label": "Conteggio massimo", + "hint": "Numero massimo di snapshot da mantenere" + }, + "min_count": { + "label": "Conteggio minimo", + "hint": "Numero minimo di snapshot da mantenere" + } + } + } + }, + "policies_table": { + "table": { + "headers": { + "name": "Nome", + "schedule": "Programmazione", + "repository": "Repository", + "retention": "Conservazione" + } + }, + "delete_policy": { + "confirm": "Eliminare la politica di snapshot '{name}'?", + "growl": "La politica di snapshot '{name}' è stata eliminata con successo." + }, + "execute_policy": { + "confirm": "Eseguire la politica di snapshot '{name}' ora?", + "growl": "La politica di snapshot '{name}' è stata eseguita con successo." + } + }, + "edit_policy": { + "heading": "Modifica Politica di Snapshot '{name}'", + "update_policy": { + "growl": "La politica di snapshot '{name}' è stata aggiornata con successo." + } + } + }, "update_check": { "downloading": "Download in corso... {progress}%", "heading": "È disponibile una nuova versione di elasticvue.", diff --git a/src/locales/jp.json b/src/locales/jp.json index e06bef69..a13d99b0 100644 --- a/src/locales/jp.json +++ b/src/locales/jp.json @@ -11,7 +11,8 @@ "shards": "シャード", "search": "検索", "rest": "REST", - "snapshots": "スナップショット" + "snapshots": "スナップショット", + "snapshot_policies": "Snapshot Policies" } }, "language_switcher": { @@ -48,6 +49,7 @@ "cancel": "キャンセル", "close": "閉じる", "create": "作成", + "update": "更新", "delete": "削除", "success": "成功", "bulk": "一括操作", @@ -680,6 +682,80 @@ } } }, + "snapshot_policies": { + "heading": "スナップショットポリシー", + "unsupported_version": "この Elasticsearch バージョンではスナップショットライフサイクル管理はサポートされていません。SLM はバージョン 7.4.0 以降で利用可能です。", + "new_policy": { + "heading": "新しいスナップショットポリシー", + "create_policy": { + "growl": "スナップショットポリシー '{name}' が正常に作成されました。" + }, + "form": { + "name": { + "label": "ポリシー名*", + "required": "ポリシー名は必須です" + }, + "schedule": { + "label": "スケジュール*", + "hint": "Cron 式(例:'0 30 1 * * ?' は毎日午前 1:30)", + "required": "スケジュールは必須です" + }, + "repository": { + "label": "リポジトリ*", + "required": "リポジトリは必須です" + }, + "indices": { + "label": "インデックス", + "hint": "含めるインデックスのカンマ区切りリスト(デフォルト:'*')" + }, + "ignore_unavailable": { + "label": "利用できないインデックスを無視" + }, + "include_global_state": { + "label": "グローバル状態を含める" + }, + "retention": { + "heading": "保持設定", + "expire_after": { + "label": "有効期限", + "hint": "スナップショットが期限切れになる期間(例:'30d'、'1w'、'1m')" + }, + "max_count": { + "label": "最大数", + "hint": "保持するスナップショットの最大数" + }, + "min_count": { + "label": "最小数", + "hint": "保持するスナップショットの最小数" + } + } + } + }, + "policies_table": { + "table": { + "headers": { + "name": "名前", + "schedule": "スケジュール", + "repository": "リポジトリ", + "retention": "保持" + } + }, + "delete_policy": { + "confirm": "スナップショットポリシー '{name}' を削除しますか?", + "growl": "スナップショットポリシー '{name}' が正常に削除されました。" + }, + "execute_policy": { + "confirm": "スナップショットポリシー '{name}' を今すぐ実行しますか?", + "growl": "スナップショットポリシー '{name}' が正常に実行されました。" + } + }, + "edit_policy": { + "heading": "スナップショットポリシー '{name}' を編集", + "update_policy": { + "growl": "スナップショットポリシー '{name}' が正常に更新されました。" + } + } + }, "update_check": { "downloading": "ダウンロード中... {progress}%", "heading": "新しいバージョンの elasticvue が利用可能です。", diff --git a/src/locales/ru.json b/src/locales/ru.json index 604973cf..337e75f1 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -11,7 +11,8 @@ "shards": "Шарды", "search": "Поиск", "rest": "REST", - "snapshots": "Снимки" + "snapshots": "Снимки", + "snapshot_policies": "Snapshot Policies" } }, "language_switcher": { @@ -48,6 +49,7 @@ "cancel": "Отмена", "close": "Закрыть", "create": "Создать", + "update": "Обновить", "delete": "Удалить", "success": "Успех", "bulk": "Массовое действие", @@ -680,6 +682,80 @@ } } }, + "snapshot_policies": { + "heading": "Политики Снапшотов", + "unsupported_version": "Управление жизненным циклом снапшотов не поддерживается в этой версии Elasticsearch. SLM доступен начиная с версии 7.4.0.", + "new_policy": { + "heading": "Новая Политика Снапшота", + "create_policy": { + "growl": "Политика снапшота '{name}' успешно создана." + }, + "form": { + "name": { + "label": "Название политики*", + "required": "Название политики обязательно" + }, + "schedule": { + "label": "Расписание*", + "hint": "Cron выражение (например, '0 30 1 * * ?' для ежедневного выполнения в 1:30)", + "required": "Расписание обязательно" + }, + "repository": { + "label": "Репозиторий*", + "required": "Репозиторий обязателен" + }, + "indices": { + "label": "Индексы", + "hint": "Список индексов для включения через запятую (по умолчанию: '*')" + }, + "ignore_unavailable": { + "label": "Игнорировать недоступные индексы" + }, + "include_global_state": { + "label": "Включить глобальное состояние" + }, + "retention": { + "heading": "Настройки Хранения", + "expire_after": { + "label": "Истекает через", + "hint": "Период времени, после которого снапшоты истекают (например, '30d', '1w', '1m')" + }, + "max_count": { + "label": "Максимальное количество", + "hint": "Максимальное количество снапшотов для хранения" + }, + "min_count": { + "label": "Минимальное количество", + "hint": "Минимальное количество снапшотов для хранения" + } + } + } + }, + "policies_table": { + "table": { + "headers": { + "name": "Название", + "schedule": "Расписание", + "repository": "Репозиторий", + "retention": "Хранение" + } + }, + "delete_policy": { + "confirm": "Удалить политику снапшота '{name}'?", + "growl": "Политика снапшота '{name}' успешно удалена." + }, + "execute_policy": { + "confirm": "Выполнить политику снапшота '{name}' сейчас?", + "growl": "Политика снапшота '{name}' успешно выполнена." + } + }, + "edit_policy": { + "heading": "Редактировать Политику Снапшота '{name}'", + "update_policy": { + "growl": "Политика снапшота '{name}' успешно обновлена." + } + } + }, "update_check": { "downloading": "Загрузка... {progress}%", "heading": "Доступна новая версия elasticvue.", diff --git a/src/router.ts b/src/router.ts index d3555078..b83b9202 100644 --- a/src/router.ts +++ b/src/router.ts @@ -11,6 +11,7 @@ import { useConnectionStore } from './store/connection' import WelcomePage from './components/welcome/WelcomePage.vue' import SnapshotRepositories from './components/repositories/SnapshotRepositories.vue' import RepositorySnapshots from './components/snapshots/RepositorySnapshots.vue' +import SnapshotPolicies from './components/snapshotpolicies/SnapshotPolicies.vue' import SearchDocuments from './components/search/SearchDocuments.vue' import ShardRecovery from './components/shardrecovery/ShardRecovery.vue' import { buildConfig } from './buildConfig.ts' @@ -41,6 +42,7 @@ const routes = [ { path: 'rest', name: 'rest', component: RestQuery }, { path: 'snapshot_repositories', name: 'snapshot_repositories', component: SnapshotRepositories }, { path: 'snapshot_repositories/:repositoryName', name: 'snapshots', component: RepositorySnapshots }, + { path: 'snapshot_policies', name: 'snapshot_policies', component: SnapshotPolicies }, ], beforeEnter: (to: RouteLocation, _from: RouteLocation, next: any) => { const connectionStore = useConnectionStore() diff --git a/src/services/ElasticsearchAdapter.ts b/src/services/ElasticsearchAdapter.ts index 8feae5fe..806367c6 100644 --- a/src/services/ElasticsearchAdapter.ts +++ b/src/services/ElasticsearchAdapter.ts @@ -288,6 +288,31 @@ export default class ElasticsearchAdapter { return this.request(`_snapshot/${repository}/${snapshot}`, 'GET') } + // Snapshot Lifecycle Management (SLM) APIs - available from ES 7.4.0+ + slmGetPolicies () { + return this.request('_slm/policy', 'GET') + } + + slmGetPolicy ({ policy }: { policy: string }) { + return this.request(`_slm/policy/${policy}`, 'GET') + } + + slmPutPolicy ({ policy, body }: { policy: string, body: object }) { + return this.request(`_slm/policy/${policy}`, 'PUT', body) + } + + slmDeletePolicy ({ policy }: { policy: string }) { + return this.request(`_slm/policy/${policy}`, 'DELETE') + } + + slmExecutePolicy ({ policy }: { policy: string }) { + return this.request(`_slm/policy/${policy}/_execute`, 'POST') + } + + slmGetStatus () { + return this.request('_slm/status', 'GET') + } + async request (path: string, method: string, params?: any) { const url = new URL(this.uri + path) diff --git a/src/types/snapshotPolicies.ts b/src/types/snapshotPolicies.ts new file mode 100644 index 00000000..79996edb --- /dev/null +++ b/src/types/snapshotPolicies.ts @@ -0,0 +1,66 @@ +export interface SnapshotPolicyConfig { + indices: string[] + ignore_unavailable: boolean + include_global_state: boolean +} + +export interface SnapshotPolicyRetention { + expire_after?: string + max_count?: number + min_count?: number +} + +export interface SnapshotPolicy { + schedule: string + repository: string + config: SnapshotPolicyConfig + retention?: SnapshotPolicyRetention +} + +export interface SnapshotPolicyResponse { + [policyName: string]: { + policy: SnapshotPolicy + } +} + +export interface SnapshotPolicyForm { + name: string + schedule: string + repository: string + indices: string + ignoreUnavailable: boolean + includeGlobalState: boolean + retentionExpireAfter: string + retentionMaxCount: number | null + retentionMinCount: number | null +} + +export interface SnapshotPolicyRequestBody { + schedule: string + repository: string + config: SnapshotPolicyConfig + retention?: SnapshotPolicyRetention +} + +export type EmitFunction = (event: 'reload', ...args: unknown[]) => void + +export interface SnapshotRepository { + type: string + settings: { + location: string + maxRestoreBytesPerSec?: string + maxSnapshotBytesPerSec?: string + readonly?: string + compress?: string + chunkSize?: string + } +} + +export interface ElasticsearchResponse { + acknowledged?: boolean + error?: { + type: string + reason: string + } + [key: string]: unknown +} From f154a2c7f6339925b151f21c252fed48b997e6ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Wed, 8 Oct 2025 19:17:10 +0200 Subject: [PATCH 07/46] some cleanup for snapshot policies --- .../snapshotpolicies/NewSnapshotPolicy.vue | 10 ++-- .../snapshotpolicies/SnapshotPolicies.vue | 36 ++++-------- .../SnapshotPoliciesTable.vue | 57 +++++++------------ src/composables/CallElasticsearch.ts | 8 +-- .../snapshotpolicies/EditSnapshotPolicy.ts | 19 ++++--- .../snapshotpolicies/NewSnapshotPolicy.ts | 24 ++++---- .../snapshotpolicies/SnapshotPoliciesTable.ts | 37 ++++++------ src/locales/cn.json | 1 + src/locales/en.json | 1 + src/locales/fr.json | 1 + src/locales/it.json | 1 + src/locales/jp.json | 1 + src/locales/ru.json | 1 + src/services/ElasticsearchAdapter.ts | 3 +- src/types/snapshotPolicies.ts | 4 +- 15 files changed, 94 insertions(+), 110 deletions(-) diff --git a/src/components/snapshotpolicies/NewSnapshotPolicy.vue b/src/components/snapshotpolicies/NewSnapshotPolicy.vue index e4ad89a4..9a1fb5fa 100644 --- a/src/components/snapshotpolicies/NewSnapshotPolicy.vue +++ b/src/components/snapshotpolicies/NewSnapshotPolicy.vue @@ -14,11 +14,12 @@ + + -

- +
@@ -61,13 +63,13 @@ \ No newline at end of file +const t = useTranslation() +const { downloadFileName, backupJsonString } = useImportExport() +const helpCollapsed = ref(false) + diff --git a/src/components/setup/AddCluster.vue b/src/components/setup/AddCluster.vue index 68b58c32..0ea76d6a 100644 --- a/src/components/setup/AddCluster.vue +++ b/src/components/setup/AddCluster.vue @@ -3,29 +3,29 @@ \ No newline at end of file +} as ElasticsearchClusterConnection) +const router = useRouter() +const connectCallback = (idx: number) => { + showSuccessSnackbar({ title: t('setup.test_and_connect.connected') }) + reloadHomePage(router, idx) +} + diff --git a/src/components/setup/AuthorizationHeaderHint.vue b/src/components/setup/AuthorizationHeaderHint.vue index f99dd78b..363ebcef 100644 --- a/src/components/setup/AuthorizationHeaderHint.vue +++ b/src/components/setup/AuthorizationHeaderHint.vue @@ -5,7 +5,7 @@ \ No newline at end of file +const t = useTranslation() + diff --git a/src/components/setup/ClusterConnectionErrors.vue b/src/components/setup/ClusterConnectionErrors.vue index 5df17c95..564926b2 100644 --- a/src/components/setup/ClusterConnectionErrors.vue +++ b/src/components/setup/ClusterConnectionErrors.vue @@ -26,33 +26,33 @@ \ No newline at end of file +import { useTranslation } from '../../composables/i18n.ts' +import { buildConfig } from '../../buildConfig.ts' +import { computed, UnwrapRef } from 'vue' +import { uriWithCredentials } from '../../helpers/elasticsearchAdapter.ts' +import { AuthType, ElasticsearchClusterConnection } from '../../store/connection.ts' + +const props = defineProps<{ + cluster: ElasticsearchClusterConnection | UnwrapRef + errorMessage?: string +}>() +const t = useTranslation() + +type AuthData = { username: undefined | string; password: undefined | string } + +const credentialsUri = computed(() => { + const authData: AuthData = { + username: undefined, + password: undefined + } + + if (props.cluster.auth.authType === AuthType.basicAuth) { + authData.username = props.cluster.auth.authData.username + authData.password = props.cluster.auth.authData.password + } + + return uriWithCredentials({ uri: props.cluster.uri, ...authData }) +}) + +const ssl = computed(() => /^https/.test(props.cluster.uri)) + diff --git a/src/components/setup/ClusterForm.vue b/src/components/setup/ClusterForm.vue index 7758d645..0d17eb1a 100644 --- a/src/components/setup/ClusterForm.vue +++ b/src/components/setup/ClusterForm.vue @@ -4,53 +4,55 @@ - - - + + + - + \ No newline at end of file +import { ref, watch } from 'vue' +import { useClusterConnection } from '../../composables/ClusterConnection' +import ClusterFormFields from './ClusterFormFields.vue' +import ClusterConnectionErrors from './ClusterConnectionErrors.vue' +import { useTranslation } from '../../composables/i18n.ts' +import { ElasticsearchClusterConnection } from '../../store/connection.ts' + +const props = defineProps<{ modelValue: ElasticsearchClusterConnection; connectCallback: (idx: number) => void }>() +const cluster = ref(props.modelValue) +const t = useTranslation() + +const emit = defineEmits(['update:modelValue']) +watch(cluster, (value) => emit('update:modelValue', value)) + +const { testState, connectState, testConnection, connectAndRedirect, form, formValid } = useClusterConnection( + cluster, + props.connectCallback +) + diff --git a/src/components/setup/ClusterFormFields.vue b/src/components/setup/ClusterFormFields.vue index 18c1a4d9..64d84f5a 100644 --- a/src/components/setup/ClusterFormFields.vue +++ b/src/components/setup/ClusterFormFields.vue @@ -1,105 +1,125 @@ \ No newline at end of file +const emit = defineEmits(['update:modelValue', 'update:formValid']) +watch(cluster, (value) => emit('update:modelValue', value)) + diff --git a/src/components/setup/ConfigureHelp.vue b/src/components/setup/ConfigureHelp.vue index bf23fccb..fe0ba2ab 100644 --- a/src/components/setup/ConfigureHelp.vue +++ b/src/components/setup/ConfigureHelp.vue @@ -1,8 +1,6 @@ diff --git a/src/components/setup/SetupInstance.vue b/src/components/setup/SetupInstance.vue index 793ed900..8a67e6c7 100644 --- a/src/components/setup/SetupInstance.vue +++ b/src/components/setup/SetupInstance.vue @@ -1,9 +1,8 @@ \ No newline at end of file +const dialog = ref(false) +const t = useTranslation() + diff --git a/src/components/shardrecovery/ShardRecovery.vue b/src/components/shardrecovery/ShardRecovery.vue index 39fce341..913db7f3 100644 --- a/src/components/shardrecovery/ShardRecovery.vue +++ b/src/components/shardrecovery/ShardRecovery.vue @@ -16,16 +16,16 @@ \ No newline at end of file +const { requestState, data, load } = useElasticsearchRequest('recovery') +onMounted(() => load()) + diff --git a/src/components/shardrecovery/ShardRecoveryRow.vue b/src/components/shardrecovery/ShardRecoveryRow.vue index 36857f81..fa9f9c6c 100644 --- a/src/components/shardrecovery/ShardRecoveryRow.vue +++ b/src/components/shardrecovery/ShardRecoveryRow.vue @@ -1,8 +1,8 @@ \ No newline at end of file +type ShardRecoveryRowProps = { shardRecovery: ShardRecovery } +defineProps() + diff --git a/src/components/shardrecovery/ShardRecoveryTable.vue b/src/components/shardrecovery/ShardRecoveryTable.vue index afab0ec2..4ae7dcd0 100644 --- a/src/components/shardrecovery/ShardRecoveryTable.vue +++ b/src/components/shardrecovery/ShardRecoveryTable.vue @@ -1,26 +1,33 @@ diff --git a/src/components/shards/ShardsTable.vue b/src/components/shards/ShardsTable.vue index 18f70c01..96399bf5 100644 --- a/src/components/shards/ShardsTable.vue +++ b/src/components/shards/ShardsTable.vue @@ -1,20 +1,24 @@ diff --git a/src/components/shared/CopyButton.vue b/src/components/shared/CopyButton.vue index 1ffc2cd5..10d42a43 100644 --- a/src/components/shared/CopyButton.vue +++ b/src/components/shared/CopyButton.vue @@ -3,24 +3,24 @@ diff --git a/src/components/shared/CustomInput.vue b/src/components/shared/CustomInput.vue index 4dbed416..1afc9e95 100644 --- a/src/components/shared/CustomInput.vue +++ b/src/components/shared/CustomInput.vue @@ -10,9 +10,9 @@ diff --git a/src/components/shared/DownloadButton.vue b/src/components/shared/DownloadButton.vue index 5df78762..19788e91 100644 --- a/src/components/shared/DownloadButton.vue +++ b/src/components/shared/DownloadButton.vue @@ -1,10 +1,6 @@ diff --git a/src/components/shared/FilterInput.vue b/src/components/shared/FilterInput.vue index 4d1074f9..4fa6de4a 100644 --- a/src/components/shared/FilterInput.vue +++ b/src/components/shared/FilterInput.vue @@ -1,9 +1,13 @@ diff --git a/src/components/shared/FilterState.vue b/src/components/shared/FilterState.vue index 8d01eeb5..e08b1b98 100644 --- a/src/components/shared/FilterState.vue +++ b/src/components/shared/FilterState.vue @@ -1,12 +1,6 @@ diff --git a/src/components/shared/IndexFilter.vue b/src/components/shared/IndexFilter.vue index bd092058..2cc83689 100644 --- a/src/components/shared/IndexFilter.vue +++ b/src/components/shared/IndexFilter.vue @@ -2,19 +2,26 @@
- +
- +
- +
@@ -22,20 +29,20 @@ diff --git a/src/components/shared/IndexFilter/IndexPattern.vue b/src/components/shared/IndexFilter/IndexPattern.vue index f5ff77ea..24a2b6f3 100644 --- a/src/components/shared/IndexFilter/IndexPattern.vue +++ b/src/components/shared/IndexFilter/IndexPattern.vue @@ -1,15 +1,16 @@ diff --git a/src/components/shared/ModalLoader.vue b/src/components/shared/ModalLoader.vue index 25f613e8..fca82161 100644 --- a/src/components/shared/ModalLoader.vue +++ b/src/components/shared/ModalLoader.vue @@ -1,6 +1,6 @@ diff --git a/src/components/shared/NetworkError.vue b/src/components/shared/NetworkError.vue index 8258d9d8..b6f0470b 100644 --- a/src/components/shared/NetworkError.vue +++ b/src/components/shared/NetworkError.vue @@ -13,10 +13,10 @@ \ No newline at end of file +const connectionStore = useConnectionStore() +const reload = () => window.location.reload() +const t = useTranslation() + diff --git a/src/components/shared/ReloadButton.vue b/src/components/shared/ReloadButton.vue index 26f6fab5..85899e30 100644 --- a/src/components/shared/ReloadButton.vue +++ b/src/components/shared/ReloadButton.vue @@ -1,24 +1,17 @@ diff --git a/src/components/shared/ResizableContainer.vue b/src/components/shared/ResizableContainer.vue index 1ee37ea1..fdb8f810 100644 --- a/src/components/shared/ResizableContainer.vue +++ b/src/components/shared/ResizableContainer.vue @@ -1,10 +1,12 @@ diff --git a/src/components/shared/TableBottom.vue b/src/components/shared/TableBottom.vue index 414fee2e..7ade444e 100644 --- a/src/components/shared/TableBottom.vue +++ b/src/components/shared/TableBottom.vue @@ -3,19 +3,23 @@
Records per page - - diff --git a/src/components/shared/TimerSelect.vue b/src/components/shared/TimerSelect.vue index 8f0f9e34..c502aabc 100644 --- a/src/components/shared/TimerSelect.vue +++ b/src/components/shared/TimerSelect.vue @@ -9,41 +9,41 @@ diff --git a/src/components/snapshots/NewSnapshot.vue b/src/components/snapshots/NewSnapshot.vue index e7cf494d..b4e490b9 100644 --- a/src/components/snapshots/NewSnapshot.vue +++ b/src/components/snapshots/NewSnapshot.vue @@ -14,24 +14,28 @@ - + - + @@ -40,13 +44,13 @@ diff --git a/src/components/snapshots/RepositorySnapshots.vue b/src/components/snapshots/RepositorySnapshots.vue index 5daab4ef..e6a134b1 100644 --- a/src/components/snapshots/RepositorySnapshots.vue +++ b/src/components/snapshots/RepositorySnapshots.vue @@ -14,20 +14,20 @@ \ No newline at end of file +const { load, requestState, data } = useElasticsearchRequest('catSnapshots', { repository }) +onMounted(load) + diff --git a/src/components/snapshots/RestoreSnapshot.vue b/src/components/snapshots/RestoreSnapshot.vue index 428083de..687ee92e 100644 --- a/src/components/snapshots/RestoreSnapshot.vue +++ b/src/components/snapshots/RestoreSnapshot.vue @@ -16,36 +16,48 @@ - + - +
- +
- +
- + @@ -54,22 +66,14 @@ diff --git a/src/components/snapshots/SnapshotRow.vue b/src/components/snapshots/SnapshotRow.vue index 8424d63f..19a429a9 100644 --- a/src/components/snapshots/SnapshotRow.vue +++ b/src/components/snapshots/SnapshotRow.vue @@ -16,10 +16,7 @@ - +
@@ -42,13 +39,13 @@ \ No newline at end of file +const { deleteSnapshot } = useSnapshotRow(props, emit) + diff --git a/src/components/snapshots/SnapshotsTable.vue b/src/components/snapshots/SnapshotsTable.vue index 8d94135f..5d10c574 100644 --- a/src/components/snapshots/SnapshotsTable.vue +++ b/src/components/snapshots/SnapshotsTable.vue @@ -2,39 +2,43 @@
- +
- - \ No newline at end of file +const { filter, columns, filteredResults, filterStateProps } = useSnapshotsTable(props) + diff --git a/src/components/welcome/ImportBackup.vue b/src/components/welcome/ImportBackup.vue index a39d2867..1cae25ac 100644 --- a/src/components/welcome/ImportBackup.vue +++ b/src/components/welcome/ImportBackup.vue @@ -18,10 +18,10 @@ \ No newline at end of file +const dialog = ref(false) +const t = useTranslation() + diff --git a/src/components/welcome/WelcomePage.vue b/src/components/welcome/WelcomePage.vue index 3b611b74..db889f28 100644 --- a/src/components/welcome/WelcomePage.vue +++ b/src/components/welcome/WelcomePage.vue @@ -4,7 +4,7 @@

- logo + logo elasticvue

@@ -41,11 +41,11 @@ diff --git a/src/composables/CallElasticsearch.ts b/src/composables/CallElasticsearch.ts index 9f53ee82..6e329945 100644 --- a/src/composables/CallElasticsearch.ts +++ b/src/composables/CallElasticsearch.ts @@ -8,10 +8,10 @@ import { parseJson } from '../helpers/json/parse.ts' let elasticsearchAdapter: ElasticsearchAdapter export interface RequestState { - loading: boolean, - networkError: boolean, - apiError: boolean, - apiErrorMessage: string, + loading: boolean + networkError: boolean + apiError: boolean + apiErrorMessage: string status: number } @@ -133,7 +133,7 @@ export function useElasticsearchRequest(method: ElasticsearchMethod, params?: const load = () => { return callElasticsearch(method, params) - .then(body => (data.value = body)) + .then((body) => (data.value = body)) .catch(() => (data.value = null)) } @@ -159,16 +159,17 @@ export function useElasticsearchRequest(method: ElasticsearchMethod, params?: }) } */ -export const defineElasticsearchRequest = ({ emit, method }: { - emit?: (event: string) => void, - method: ElasticsearchMethod -}) => { +export const defineElasticsearchRequest = ({ emit, method }: { emit?: (event: string) => void; method: ElasticsearchMethod }) => { const { requestState, loading, callElasticsearch } = useElasticsearchAdapter() const { showSnackbar } = useSnackbar() - const run = async ({ confirmMsg, snackbarOptions, params = undefined }: { - confirmMsg?: string, - snackbarOptions?: SnackbarOptions | SnackbarOptionsFunction, + const run = async ({ + confirmMsg, + snackbarOptions, + params = undefined + }: { + confirmMsg?: string + snackbarOptions?: SnackbarOptions | SnackbarOptionsFunction params?: object }) => { if (confirmMsg) { @@ -200,4 +201,4 @@ export const defineElasticsearchRequest = ({ emit, method }: { } } -type SnackbarOptionsFunction = (body: any) => SnackbarOptions \ No newline at end of file +type SnackbarOptionsFunction = (body: any) => SnackbarOptions diff --git a/src/composables/ClusterConnection.ts b/src/composables/ClusterConnection.ts index 954ab678..bd558a16 100644 --- a/src/composables/ClusterConnection.ts +++ b/src/composables/ClusterConnection.ts @@ -2,11 +2,7 @@ import { Ref, ref, UnwrapRef, useTemplateRef } from 'vue' import ElasticsearchAdapter from '../services/ElasticsearchAdapter' import { useTranslation } from './i18n' import { useSnackbar } from './Snackbar' -import { - BuildFlavor, - ElasticsearchClusterConnection, - useConnectionStore -} from '../store/connection' +import { BuildFlavor, ElasticsearchClusterConnection, useConnectionStore } from '../store/connection' import { DISTRIBUTIONS } from '../consts.ts' import { QForm } from 'quasar' @@ -26,7 +22,10 @@ const resetState = (state: Ref) => { } } -export const useClusterConnection = (formCluster: Ref>, connectCallback?: (idx: number) => void) => { +export const useClusterConnection = ( + formCluster: Ref>, + connectCallback?: (idx: number) => void +) => { const t = useTranslation() const connectionStore = useConnectionStore() const { showSuccessSnackbar } = useSnackbar() @@ -42,7 +41,7 @@ export const useClusterConnection = (formCluster: Ref { - if (!await formValid()) return + if (!(await formValid())) return resetState(testState) resetState(connectState) @@ -125,15 +124,14 @@ export const useClusterConnection = (formCluster: Ref { - if (!await formValid()) return + if (!(await formValid())) return try { const idx = await connect() if (!idx) return connectCallback?.(idx) - } catch (_e) { - } + } catch (_e) {} } return { @@ -151,4 +149,4 @@ export const clusterUuid = (infoJson: any) => { // fallback for elasticsearch < 5 return `${infoJson.cluster_name}-${infoJson.name}`.replaceAll(/\s/g, '') -} \ No newline at end of file +} diff --git a/src/composables/CodeEditor.ts b/src/composables/CodeEditor.ts index c5278b1c..5d80853f 100644 --- a/src/composables/CodeEditor.ts +++ b/src/composables/CodeEditor.ts @@ -31,43 +31,40 @@ const completions = (context: any) => { if (nodeBefore.name === 'Property') { return { from: word?.from, - options: [ - ...queryValues.map(w => ({ label: w, type: 'text', apply: `"${w}"` })), - ] + options: [...queryValues.map((w) => ({ label: w, type: 'text', apply: `"${w}"` }))] } } else if (nodeBefore.name === 'String') { return { from: word?.from, - options: [ - ...queryValues.map(w => ({ label: w, type: 'text', apply: w })) - ] + options: [...queryValues.map((w) => ({ label: w, type: 'text', apply: w }))] } } else { return { from: word?.from, - options: [ - ...queryKeywords.map(w => ({ label: w, type: 'keyword', apply: `"${w}"` })), - ] + options: [...queryKeywords.map((w) => ({ label: w, type: 'keyword', apply: `"${w}"` }))] } } } -export const useCodeEditor = (editorRef: Ref, { - initialValue, - emit, - commands, - onPaste -}: { - initialValue: Ref, - emit?: any, - commands?: KeyBinding[], - onPaste?: (data: string) => void -}) => { +export const useCodeEditor = ( + editorRef: Ref, + { + initialValue, + emit, + commands, + onPaste + }: { + initialValue: Ref + emit?: any + commands?: KeyBinding[] + onPaste?: (data: string) => void + } +) => { const codeEditorStore = useCodeEditorStore() let codeMirrorEditorView: EditorView = {} - const wrapLines = new Compartment - const theme = new Compartment + const wrapLines = new Compartment() + const theme = new Compartment() onMounted(() => { initEditor() @@ -76,7 +73,7 @@ export const useCodeEditor = (editorRef: Ref, { const initEditor = () => { if (!editorRef.value) return - const onChange = EditorView.updateListener.of(update => { + const onChange = EditorView.updateListener.of((update) => { if (!update.docChanged || !emit) return emit('update:modelValue', editorValue()) }) @@ -84,7 +81,7 @@ export const useCodeEditor = (editorRef: Ref, { const eventHandlers = [] if (onPaste) { const handler = EditorView.domEventHandlers({ - paste (event) { + paste(event) { const newValue = event.clipboardData?.getData('text') if (newValue) onPaste(newValue) } @@ -109,11 +106,14 @@ export const useCodeEditor = (editorRef: Ref, { theme.of(baseTheme) ], parent: editorRef.value, - doc: beautify(initialValue.value), + doc: beautify(initialValue.value) }) } - watch(() => initialValue.value, newValue => setEditorValue(newValue)) + watch( + () => initialValue.value, + (newValue) => setEditorValue(newValue) + ) const beautifyEditorValue = () => { const value = editorValue() @@ -123,8 +123,8 @@ export const useCodeEditor = (editorRef: Ref, { return true } - const editorValue = () => (codeMirrorEditorView.state.doc.toString()) - const copyContent = () => (writeToClipboard(editorValue())) + const editorValue = () => codeMirrorEditorView.state.doc.toString() + const copyContent = () => writeToClipboard(editorValue()) const setEditorValue = (value: string) => { if (value === editorValue()) return @@ -144,9 +144,9 @@ export const useCodeEditor = (editorRef: Ref, { const foldRecursive = (effect: typeof foldEffect | typeof unfoldEffect) => { const state = codeMirrorEditorView.state - const foldRanges: { from: number, to: number }[] = [] + const foldRanges: { from: number; to: number }[] = [] syntaxTree(state).iterate({ - enter (node) { + enter(node) { if (node.from === 0) return const isFoldable = foldable(state, node.from, node.to) if (isFoldable) foldRanges.push({ from: isFoldable.from, to: isFoldable.to }) @@ -154,11 +154,11 @@ export const useCodeEditor = (editorRef: Ref, { }) codeMirrorEditorView.dispatch({ - effects: foldRanges.map(range => effect.of({ from: range.from, to: range.to })) + effects: foldRanges.map((range) => effect.of({ from: range.from, to: range.to })) }) } - const collapseAll = () => (foldRecursive(foldEffect)) - const expandAll = () => (foldRecursive(unfoldEffect)) + const collapseAll = () => foldRecursive(foldEffect) + const expandAll = () => foldRecursive(unfoldEffect) return { copyContent, diff --git a/src/composables/ImportExport.ts b/src/composables/ImportExport.ts index 931fa286..35ce3d7b 100644 --- a/src/composables/ImportExport.ts +++ b/src/composables/ImportExport.ts @@ -8,8 +8,8 @@ import { stringifyJson } from '../helpers/json/stringify.ts' import { migrateAuthType } from '../services/migrations.ts' type Backup = { - version: string, - store: StoreBackup, + version: string + store: StoreBackup idb: IdbBackup } @@ -23,7 +23,7 @@ export const useImportExport = ({ confirmImport } = { confirmImport: false }) => const storesToBackup = ['codeEditor', 'connection', 'i18n', 'indices', 'resize', 'restQuery', 'theme'] const backup: StoreBackup = {} - storesToBackup.forEach(store => { + storesToBackup.forEach((store) => { const rawValue = localStorage.getItem(store) if (rawValue) backup[store] = parseJson(rawValue) }) @@ -126,4 +126,4 @@ const loadFileDataContent = (file: File): Promise = reader.onerror = reject reader.readAsText(file) }) -} \ No newline at end of file +} diff --git a/src/composables/Modal.ts b/src/composables/Modal.ts index f8671c2c..bb1a14a2 100644 --- a/src/composables/Modal.ts +++ b/src/composables/Modal.ts @@ -13,4 +13,4 @@ export const useModal = () => { return { openModalWith } -} \ No newline at end of file +} diff --git a/src/composables/Snackbar.ts b/src/composables/Snackbar.ts index 12d00142..607b693d 100644 --- a/src/composables/Snackbar.ts +++ b/src/composables/Snackbar.ts @@ -9,12 +9,12 @@ const TIMEOUTS = { interface SnackbarSuccessOptions { title?: string - body?: string, + body?: string } export interface SnackbarOptions extends SnackbarSuccessOptions { - timeout?: number, - color?: string, + timeout?: number + color?: string copyableText?: string } @@ -112,6 +112,5 @@ const responseErrorMessage = (json: string) => { if (json && json.length > 0) { return JSON.parse(json) } - } catch (_e) { - } + } catch (_e) {} } diff --git a/src/composables/TableColumnHover.ts b/src/composables/TableColumnHover.ts index fab6cef7..50ffff40 100644 --- a/src/composables/TableColumnHover.ts +++ b/src/composables/TableColumnHover.ts @@ -12,4 +12,4 @@ export const useTableColumnHover = () => { markColumn, unmarkColumn } -} \ No newline at end of file +} diff --git a/src/composables/UpdateCheck.ts b/src/composables/UpdateCheck.ts index c1e5b8c3..18add054 100644 --- a/src/composables/UpdateCheck.ts +++ b/src/composables/UpdateCheck.ts @@ -63,4 +63,4 @@ export const useUpdateCheck = () => { installing, updateInfo } -} \ No newline at end of file +} diff --git a/src/composables/components/RowMenuAction.ts b/src/composables/components/RowMenuAction.ts index aadf21a1..0781b84f 100644 --- a/src/composables/components/RowMenuAction.ts +++ b/src/composables/components/RowMenuAction.ts @@ -3,11 +3,17 @@ import { useSnackbar } from '../Snackbar.ts' import { askConfirm } from '../../helpers/dialogs.ts' import { ElasticsearchMethod } from '../../services/ElasticsearchAdapter.ts' -export const useRowMenuAction = ({ method, methodParams = {}, growl, confirm, emit }: { - method: ElasticsearchMethod, - methodParams: any, - growl: string | undefined, - confirm: string | undefined, +export const useRowMenuAction = ({ + method, + methodParams = {}, + growl, + confirm, + emit +}: { + method: ElasticsearchMethod + methodParams: any + growl: string | undefined + confirm: string | undefined emit: any }) => { const { requestState, callElasticsearch } = useElasticsearchAdapter() @@ -15,11 +21,11 @@ export const useRowMenuAction = ({ method, methodParams = {}, growl, confirm, em const load = () => { callElasticsearch(method, methodParams) - .then(body => { - emit('done') - showSnackbar(requestState.value, { title: growl, body: JSON.stringify(body) }) - }) - .catch(() => showSnackbar(requestState.value)) + .then((body) => { + emit('done') + showSnackbar(requestState.value, { title: growl, body: JSON.stringify(body) }) + }) + .catch(() => showSnackbar(requestState.value)) } const run = async () => { @@ -35,4 +41,4 @@ export const useRowMenuAction = ({ method, methodParams = {}, growl, confirm, em run, requestState } -} \ No newline at end of file +} diff --git a/src/composables/components/clusterselection/ClusterTable.ts b/src/composables/components/clusterselection/ClusterTable.ts index 95312096..544bd80b 100644 --- a/src/composables/components/clusterselection/ClusterTable.ts +++ b/src/composables/components/clusterselection/ClusterTable.ts @@ -16,25 +16,28 @@ export const useClusterTable = () => { const search = filter.value.toLowerCase().trim() return [...connectionStore.clusters] - .map((cluster, i) => Object.assign({}, cluster, { index: i })) - .filter((cluster) => { - return cluster.name.toLowerCase().includes(search) || - cluster.uri.toLowerCase().includes(search) || - cluster.clusterName.toLowerCase().includes(search) - }) + .map((cluster, i) => Object.assign({}, cluster, { index: i })) + .filter((cluster) => { + return ( + cluster.name.toLowerCase().includes(search) || + cluster.uri.toLowerCase().includes(search) || + cluster.clusterName.toLowerCase().includes(search) + ) + }) }) const removeInstance = async (index: number) => { const cluster = connectionStore.clusters[index] - const confirmed = await askConfirm(t('cluster_selection.cluster_table.row.remove_cluster.confirm', - { name: cluster.name, uri: cluster.uri })) + const confirmed = await askConfirm( + t('cluster_selection.cluster_table.row.remove_cluster.confirm', { name: cluster.name, uri: cluster.uri }) + ) if (!confirmed) return connectionStore.removeCluster(index) router.go(0) } - const loadCluster = (index: number) => (reloadHomePage(router, index)) + const loadCluster = (index: number) => reloadHomePage(router, index) const columns = genColumns([ { label: t('cluster_selection.cluster_table.headers.cluster'), field: 'name' }, { label: t('cluster_selection.cluster_table.headers.uri') }, @@ -49,4 +52,4 @@ export const useClusterTable = () => { loadCluster, columns } -} \ No newline at end of file +} diff --git a/src/composables/components/clusterselection/EditCluster.ts b/src/composables/components/clusterselection/EditCluster.ts index 3e0da092..0468577c 100644 --- a/src/composables/components/clusterselection/EditCluster.ts +++ b/src/composables/components/clusterselection/EditCluster.ts @@ -21,8 +21,10 @@ export const useEditCluster = (props: EditClusterProps) => { } } const cluster: Ref = ref(getCluster(props.index)) - watch(() => props.index, (index) => (cluster.value = getCluster(index))) - + watch( + () => props.index, + (index) => (cluster.value = getCluster(index)) + ) const dialog = ref(false) const saveCluster = () => { @@ -43,4 +45,4 @@ export const useEditCluster = (props: EditClusterProps) => { testConnection, testState } -} \ No newline at end of file +} diff --git a/src/composables/components/home/ClusterHealth.ts b/src/composables/components/home/ClusterHealth.ts index 7c85263e..a6fb7993 100644 --- a/src/composables/components/home/ClusterHealth.ts +++ b/src/composables/components/home/ClusterHealth.ts @@ -1,6 +1,7 @@ import { BuildFlavor, - ElasticsearchCluster, ElasticsearchClusterConnection, + ElasticsearchCluster, + ElasticsearchClusterConnection, useConnectionStore } from '../../../store/connection.ts' import ElasticsearchAdapter from '../../../services/ElasticsearchAdapter.ts' @@ -19,7 +20,7 @@ export const useClusterHealth = () => { } setupHealthLoading() - const checkAllClusters = () => (connectionStore.clusters.forEach(checkHealth)) + const checkAllClusters = () => connectionStore.clusters.forEach(checkHealth) return { checkAllClusters @@ -54,7 +55,6 @@ export const checkHealth = async (cluster: ElasticsearchCluster) => { cluster.majorVersion = version[0] cluster.flavor = flavor if (!cluster.uuid || cluster.uuid.length === 0) cluster.uuid = clusterUuid(pingBody) - } catch (_e) { cluster.status = 'unknown' } @@ -71,4 +71,4 @@ export const checkClusterHealth = async (credentials: ElasticsearchClusterConnec } catch (_e) { return 'unknown' } -} \ No newline at end of file +} diff --git a/src/composables/components/indextemplates/IndexTemplates.ts b/src/composables/components/indextemplates/IndexTemplates.ts index d144c08e..41c3ec50 100644 --- a/src/composables/components/indextemplates/IndexTemplates.ts +++ b/src/composables/components/indextemplates/IndexTemplates.ts @@ -5,22 +5,24 @@ import ElasticsearchAdapter from '../../../services/ElasticsearchAdapter.ts' import { QSelectOption } from 'quasar' export type GenericIndexTemplate = { - name: string, - order?: string, - version?: string, - priority?: string, - template?: string, - index_patterns?: string[], - indexPatterns?: string, + name: string + order?: string + version?: string + priority?: string + template?: string + index_patterns?: string[] + indexPatterns?: string index_template?: { - index_patterns?: string[], + index_patterns?: string[] } } -type IndexTemplates = { - index_templates?: Record, - component_templates?: Record -} | Record +type IndexTemplates = + | { + index_templates?: Record + component_templates?: Record + } + | Record export const useIndexTemplates = () => { const connectionStore = useConnectionStore() @@ -42,11 +44,10 @@ export const useIndexTemplates = () => { try { const body = await callElasticsearch(method as unknown as keyof ElasticsearchAdapter) data.value = enrich(body) - } catch (_error) { - } + } catch (_error) {} } - watch(endpoint, () => (load())) + watch(endpoint, () => load()) return { data, @@ -61,11 +62,15 @@ const enrich = (data: IndexTemplates) => { const templates = data.index_templates || data.component_templates || data const results: GenericIndexTemplate[] = [] Object.entries(templates).map(([name, template]) => { - const indexPatterns = template.index_patterns?.join('') || template.index_template?.index_patterns?.join('') || template.component_template?.index_patterns?.join('') || template.template + const indexPatterns = + template.index_patterns?.join('') || + template.index_template?.index_patterns?.join('') || + template.component_template?.index_patterns?.join('') || + template.template results.push({ name, indexPatterns, - ...template, + ...template }) }) return results diff --git a/src/composables/components/indextemplates/IndexTemplatesTable.ts b/src/composables/components/indextemplates/IndexTemplatesTable.ts index dff84b1c..2d26337d 100644 --- a/src/composables/components/indextemplates/IndexTemplatesTable.ts +++ b/src/composables/components/indextemplates/IndexTemplatesTable.ts @@ -26,12 +26,12 @@ export const useIndexTemplatesTable = (props: IndexTemplatesTableProps) => { const columns = genColumns([ { label: '' }, - { label: t('index_templates.index_templates_table.table.headers.name'), field: 'name', }, - { label: t('index_templates.index_templates_table.table.headers.index_patterns') }, + { label: t('index_templates.index_templates_table.table.headers.name'), field: 'name' }, + { label: t('index_templates.index_templates_table.table.headers.index_patterns') } ]) return { filteredItems, columns } -} \ No newline at end of file +} diff --git a/src/composables/components/indices/IndexAliases.ts b/src/composables/components/indices/IndexAliases.ts index d9f8ba03..727bdc4e 100644 --- a/src/composables/components/indices/IndexAliases.ts +++ b/src/composables/components/indices/IndexAliases.ts @@ -22,7 +22,7 @@ export const useIndexAliases = (props: IndexAliasProps, emit: any) => { const newAlias = ref('') const aliases: Ref = ref([]) - watch(dialog, value => { + watch(dialog, (value) => { if (value) { loadAliases() } else { @@ -32,39 +32,35 @@ export const useIndexAliases = (props: IndexAliasProps, emit: any) => { const loadAliases = () => { callElasticsearch('indexGetAlias', { index: props.index }) - .then(body => { - aliases.value = Object.keys(body[props.index].aliases).map(alias => ({ alias })) - }) - .catch(() => (aliases.value = [])) + .then((body) => { + aliases.value = Object.keys(body[props.index].aliases).map((alias) => ({ alias })) + }) + .catch(() => (aliases.value = [])) } const addAlias = () => { callElasticsearch('indexAddAlias', { index: props.index, alias: newAlias.value }) - .then(() => { - loadAliases() - newAlias.value = '' - }) - .catch(() => { - console.log(requestState.value) - showSnackbar(requestState.value) - }) + .then(() => { + loadAliases() + newAlias.value = '' + }) + .catch(() => { + console.log(requestState.value) + showSnackbar(requestState.value) + }) } const deleteAlias = (alias: string) => { - askConfirm(t('indices.index_aliases.delete_alias.confirm', { alias, index: props.index })) - .then(confirmed => { - if (confirmed) { - callElasticsearch('indexDeleteAlias', { index: props.index, alias }) - .then(loadAliases) - .catch(() => showSnackbar(requestState.value)) - } - }) + askConfirm(t('indices.index_aliases.delete_alias.confirm', { alias, index: props.index })).then((confirmed) => { + if (confirmed) { + callElasticsearch('indexDeleteAlias', { index: props.index, alias }) + .then(loadAliases) + .catch(() => showSnackbar(requestState.value)) + } + }) } - const columns = genColumns([ - { label: t('indices.index_aliases.table.headers.alias'), field: 'alias' }, - { label: '' } - ]) + const columns = genColumns([{ label: t('indices.index_aliases.table.headers.alias'), field: 'alias' }, { label: '' }]) return { dialog, @@ -76,4 +72,4 @@ export const useIndexAliases = (props: IndexAliasProps, emit: any) => { deleteAlias, columns } -} \ No newline at end of file +} diff --git a/src/composables/components/indices/IndexReindex.ts b/src/composables/components/indices/IndexReindex.ts index 8d63f0e5..50f8889f 100644 --- a/src/composables/components/indices/IndexReindex.ts +++ b/src/composables/components/indices/IndexReindex.ts @@ -31,4 +31,4 @@ export const useIndexReindex = (props: IndexReindexProps, emit: any) => { dest, reindex } -} \ No newline at end of file +} diff --git a/src/composables/components/indices/IndexRow.ts b/src/composables/components/indices/IndexRow.ts index 6c198649..927177e5 100644 --- a/src/composables/components/indices/IndexRow.ts +++ b/src/composables/components/indices/IndexRow.ts @@ -52,8 +52,11 @@ export const useIndexRow = (props: IndexRowProps, emit: any) => { } } - onMounted(() => (loadAliases(props.index.index))) - watch(() => props.index, (newValue) => loadAliases(newValue.index)) + onMounted(() => loadAliases(props.index.index)) + watch( + () => props.index, + (newValue) => loadAliases(newValue.index) + ) const emitReloadAndCloseMenu = () => { emit('reload') @@ -85,4 +88,4 @@ export const useIndexRow = (props: IndexRowProps, emit: any) => { emitReloadAndCloseMenu, showDocuments } -} \ No newline at end of file +} diff --git a/src/composables/components/indices/IndicesTable.ts b/src/composables/components/indices/IndicesTable.ts index 322ce643..933a45cd 100644 --- a/src/composables/components/indices/IndicesTable.ts +++ b/src/composables/components/indices/IndicesTable.ts @@ -10,15 +10,15 @@ import { genColumns } from '../../../helpers/tableColumns' import { setupFilterState } from '../shared/FilterState.ts' export type EsIndex = { - index: string, - health: string, - status: string, - uuid: string, - pri: string, - rep: string, - sc: string, - 'docs.count': string, - 'store.size': string, + index: string + health: string + status: string + uuid: string + pri: string + rep: string + sc: string + 'docs.count': string + 'store.size': string cd: string } @@ -62,12 +62,18 @@ export const useIndicesTable = (props: EsTableProps, emit: any) => { watch(() => indicesStore.filter, debouncedFilterTable) watch(() => indicesStore.showHiddenIndices, filterTable) watch(() => props.indices, filterTable) - watch(() => indicesStore.stickyTableHeader, () => (tableKey.value += 1)) - watch(() => indicesStore.pagination.rowsPerPage, () => { - if (indicesStore.pagination.rowsPerPage === rowsPerPage[rowsPerPage.length - 1].value) { - indicesStore.stickyTableHeader = true + watch( + () => indicesStore.stickyTableHeader, + () => (tableKey.value += 1) + ) + watch( + () => indicesStore.pagination.rowsPerPage, + () => { + if (indicesStore.pagination.rowsPerPage === rowsPerPage[rowsPerPage.length - 1].value) { + indicesStore.stickyTableHeader = true + } } - }) + ) const { selectedItems, allItemsSelected, setIndeterminate } = useSelectableRows(items) @@ -81,14 +87,14 @@ export const useIndicesTable = (props: EsTableProps, emit: any) => { const checkAll = (val: boolean) => { if (val) { - selectedItems.value = items.value.map(i => i.index) + selectedItems.value = items.value.map((i) => i.index) } else { selectedItems.value = [] } } const reloadSelectedItems = (index: string) => { - selectedItems.value = selectedItems.value.filter(i => i != index) + selectedItems.value = selectedItems.value.filter((i) => i != index) } const filterStateProps = setupFilterState(results, items) @@ -124,4 +130,4 @@ export const useIndicesTable = (props: EsTableProps, emit: any) => { clearDeletedIndicesAndReload, columns } -} \ No newline at end of file +} diff --git a/src/composables/components/indices/NewIndex.ts b/src/composables/components/indices/NewIndex.ts index 1f76be5c..1d668361 100644 --- a/src/composables/components/indices/NewIndex.ts +++ b/src/composables/components/indices/NewIndex.ts @@ -12,7 +12,7 @@ export const useNewIndex = (emit: any) => { replicas: 1 }) - const formValid = computed(() => (index.value.name.length > 0 && index.value.shards > 0)) + const formValid = computed(() => index.value.name.length > 0 && index.value.shards > 0) const resetForm = () => { index.value = { @@ -52,4 +52,4 @@ export const useNewIndex = (emit: any) => { createIndex, resetForm } -} \ No newline at end of file +} diff --git a/src/composables/components/nodes/NodeAttributes.ts b/src/composables/components/nodes/NodeAttributes.ts index b7b01fb5..c28e7b8b 100644 --- a/src/composables/components/nodes/NodeAttributes.ts +++ b/src/composables/components/nodes/NodeAttributes.ts @@ -25,14 +25,14 @@ export const useNodeAttributes = (props: NodeAttributesProps) => { if (!regex) return props.attributes return Object.keys(props.attributes) - .filter(attribute => !attribute.match(regex)) - .reduce((obj: Record, key: string) => { - obj[key] = props.attributes[key] - return obj - }, {}) + .filter((attribute) => !attribute.match(regex)) + .reduce((obj: Record, key: string) => { + obj[key] = props.attributes[key] + return obj + }, {}) }) return { filtered } -} \ No newline at end of file +} diff --git a/src/composables/components/nodes/NodesTable.ts b/src/composables/components/nodes/NodesTable.ts index a2414267..153ae95f 100644 --- a/src/composables/components/nodes/NodesTable.ts +++ b/src/composables/components/nodes/NodesTable.ts @@ -17,7 +17,7 @@ export const useNodesTable = (props: NodesTableProps) => { const results = computed(() => props.nodes) const filteredResults = computed(() => { const nodes = filterItems(results.value, nodesStore.filter, ['name', 'ip', 'id', 'version']) - return nodes.map(r => new ElasticsearchNode(r)) + return nodes.map((r) => new ElasticsearchNode(r)) }) const filterStateProps = setupFilterState(results, filteredResults) @@ -47,4 +47,4 @@ export const useNodesTable = (props: NodesTableProps) => { columns, showNodeShards } -} \ No newline at end of file +} diff --git a/src/composables/components/predefinedclusters/PredefinedClusters.ts b/src/composables/components/predefinedclusters/PredefinedClusters.ts index 69baa329..e743e82f 100644 --- a/src/composables/components/predefinedclusters/PredefinedClusters.ts +++ b/src/composables/components/predefinedclusters/PredefinedClusters.ts @@ -1,7 +1,4 @@ -import { - BuildFlavor, ConnectionState, - ElasticsearchCluster, -} from '../../../store/connection.ts' +import { BuildFlavor, ConnectionState, ElasticsearchCluster } from '../../../store/connection.ts' import { buildAuth } from '../../../helpers/predefinedClusters/buildAuth.ts' export type PredefinedCluster = { @@ -34,7 +31,7 @@ export const loadPredefinedClusters = async () => { const predefinedClusters: PredefinedCluster[] = await response.json() - return predefinedClusters.filter((cluster) => (cluster.uri && cluster.uri.length > 0)) + return predefinedClusters.filter((cluster) => cluster.uri && cluster.uri.length > 0) } catch (_e) { return } diff --git a/src/composables/components/repositories/NewRepositorySnapshotPolicy.ts b/src/composables/components/repositories/NewRepositorySnapshotPolicy.ts index 45b767ef..25302523 100644 --- a/src/composables/components/repositories/NewRepositorySnapshotPolicy.ts +++ b/src/composables/components/repositories/NewRepositorySnapshotPolicy.ts @@ -4,102 +4,102 @@ import { defineElasticsearchRequest } from '../../CallElasticsearch' import type { SnapshotPolicyForm, SnapshotPolicyRequestBody, ElasticsearchResponse } from '../../../types/snapshotPolicies' export const useNewRepositorySnapshotPolicy = (emit: any, repository: string) => { - const t = useTranslation() + const t = useTranslation() - const dialog = ref(false) - const policy = ref({ - id: '', - name: '', - schedule: '', - repository: repository, // Pre-set the repository - indices: '*', - ignoreUnavailable: false, - includeGlobalState: true, - retentionExpireAfter: '', - retentionMaxCount: null, - retentionMinCount: null - }) + const dialog = ref(false) + const policy = ref({ + id: '', + name: '', + schedule: '', + repository: repository, // Pre-set the repository + indices: '*', + ignoreUnavailable: false, + includeGlobalState: true, + retentionExpireAfter: '', + retentionMaxCount: null, + retentionMinCount: null + }) - const formValid = computed(() => ( - policy.value.name.length > 0 && - policy.value.schedule.length > 0 - )) + const formValid = computed(() => policy.value.name.length > 0 && policy.value.schedule.length > 0) - const resetForm = () => { - policy.value = { - id: '', - name: '', - schedule: '', - repository: repository, - indices: '*', - ignoreUnavailable: false, - includeGlobalState: true, - retentionExpireAfter: '', - retentionMaxCount: null, - retentionMinCount: null - } + const resetForm = () => { + policy.value = { + id: '', + name: '', + schedule: '', + repository: repository, + indices: '*', + ignoreUnavailable: false, + includeGlobalState: true, + retentionExpireAfter: '', + retentionMaxCount: null, + retentionMinCount: null } + } - const closeDialog = () => { - resetForm() - dialog.value = false - } + const closeDialog = () => { + resetForm() + dialog.value = false + } - const { run, loading } = defineElasticsearchRequest({ - emit: (event: string) => emit(event as 'reload'), - method: 'slmPutPolicy' - }) + const { run, loading } = defineElasticsearchRequest({ + emit: (event: string) => emit(event as 'reload'), + method: 'slmPutPolicy' + }) - const createPolicy = async () => { - if (!formValid.value) return + const createPolicy = async () => { + if (!formValid.value) return - const policyBody: SnapshotPolicyRequestBody = { - name: policy.value.name, - schedule: policy.value.schedule, - repository: policy.value.repository, - config: { - indices: policy.value.indices.split(',').map((i: string) => i.trim()).filter((i: string) => i.length > 0), - ignore_unavailable: policy.value.ignoreUnavailable, - include_global_state: policy.value.includeGlobalState - } - } + const policyBody: SnapshotPolicyRequestBody = { + name: policy.value.name, + schedule: policy.value.schedule, + repository: policy.value.repository, + config: { + indices: policy.value.indices + .split(',') + .map((i: string) => i.trim()) + .filter((i: string) => i.length > 0), + ignore_unavailable: policy.value.ignoreUnavailable, + include_global_state: policy.value.includeGlobalState + } + } - if (policy.value.retentionExpireAfter || policy.value.retentionMaxCount || policy.value.retentionMinCount) { - policyBody.retention = {} - if (policy.value.retentionExpireAfter) { - policyBody.retention.expire_after = policy.value.retentionExpireAfter - } - if (policy.value.retentionMaxCount) { - policyBody.retention.max_count = policy.value.retentionMaxCount - } - if (policy.value.retentionMinCount) { - policyBody.retention.min_count = policy.value.retentionMinCount - } - } + if (policy.value.retentionExpireAfter || policy.value.retentionMaxCount || policy.value.retentionMinCount) { + policyBody.retention = {} + if (policy.value.retentionExpireAfter) { + policyBody.retention.expire_after = policy.value.retentionExpireAfter + } + if (policy.value.retentionMaxCount) { + policyBody.retention.max_count = policy.value.retentionMaxCount + } + if (policy.value.retentionMinCount) { + policyBody.retention.min_count = policy.value.retentionMinCount + } + } - const success = await run({ - params: { - policy: policy.value.id, - body: policyBody - }, - snackbarOptions: (body: ElasticsearchResponse) => { - return { - title: t('snapshot_policies.new_policy.create_policy.growl', { name: policy.value.name }), - body: JSON.stringify(body) - } - } - }) + const success = await run({ + params: { + policy: policy.value.id, + body: policyBody + }, + snackbarOptions: (body: ElasticsearchResponse) => { + return { + title: t('snapshot_policies.new_policy.create_policy.growl', { name: policy.value.name }), + body: JSON.stringify(body) + } + } + }) - if (success) closeDialog() - } + if (success) closeDialog() + } - return { - dialog, - policy, - formValid, - loading, - createPolicy, - resetForm, - closeDialog - } + return { + dialog, + policy, + formValid, + loading, + createPolicy, + resetForm, + closeDialog + } } diff --git a/src/composables/components/repositories/NewSnapshotRepository.ts b/src/composables/components/repositories/NewSnapshotRepository.ts index af6cff61..2ab68ed3 100644 --- a/src/composables/components/repositories/NewSnapshotRepository.ts +++ b/src/composables/components/repositories/NewSnapshotRepository.ts @@ -67,9 +67,11 @@ export const useNewSnapshotRepository = (emit: any) => { }) const formValid = computed(() => { - return repository.value.repository.trim().length > 0 && - ((repository.value.body.type === RepositoryType.fs && repository.value.body.settings.location?.trim()?.length > 0) || - (repository.value.body.type === RepositoryType.s3 && repository.value.body.settings.bucket?.trim()?.length > 0)) + return ( + repository.value.repository.trim().length > 0 && + ((repository.value.body.type === RepositoryType.fs && repository.value.body.settings.location?.trim()?.length > 0) || + (repository.value.body.type === RepositoryType.s3 && repository.value.body.settings.bucket?.trim()?.length > 0)) + ) }) const resetForm = (type: RepositoryType, name: string) => { @@ -112,8 +114,11 @@ export const useNewSnapshotRepository = (emit: any) => { } resetForm(RepositoryType.fs, '') - const hide = () => (resetForm(RepositoryType.fs, '')) - watch(() => repository.value.body.type, newValue => (resetForm(newValue, repository.value.repository))) + const hide = () => resetForm(RepositoryType.fs, '') + watch( + () => repository.value.body.type, + (newValue) => resetForm(newValue, repository.value.repository) + ) const { run, loading } = defineElasticsearchRequest({ emit, method: 'snapshotCreateRepository' }) const createRepository = async () => { @@ -123,7 +128,7 @@ export const useNewSnapshotRepository = (emit: any) => { const success = await run({ params, snackbarOptions: { - body: t('repositories.new_repository.create_repository.growl', { repositoryName: repository.value.repository }), + body: t('repositories.new_repository.create_repository.growl', { repositoryName: repository.value.repository }) } }) if (success) dialog.value = false @@ -138,4 +143,4 @@ export const useNewSnapshotRepository = (emit: any) => { hide, createRepository } -} \ No newline at end of file +} diff --git a/src/composables/components/repositories/RepositoryPolicies.ts b/src/composables/components/repositories/RepositoryPolicies.ts index a3540d81..7a6112e2 100644 --- a/src/composables/components/repositories/RepositoryPolicies.ts +++ b/src/composables/components/repositories/RepositoryPolicies.ts @@ -6,95 +6,95 @@ import { defineElasticsearchRequest } from '../../CallElasticsearch' import { SnapshotPolicy, SnapshotPolicyRetention } from '../../../types/snapshotPolicies' export type RepositoryPoliciesProps = { - repository: string + repository: string } export type EsSnapshotPolicy = { - version: number - modified_date: string - modified_date_millis: number - policy: SnapshotPolicy & { name: string } + version: number + modified_date: string + modified_date_millis: number + policy: SnapshotPolicy & { name: string } } export type MappedSnapshotPolicy = { - id: string - name: string - schedule: string - repository: string - retention: SnapshotPolicyRetention | undefined + id: string + name: string + schedule: string + repository: string + retention: SnapshotPolicyRetention | undefined } export const useRepositoryPolicies = (props: RepositoryPoliciesProps, emit: any) => { - const t = useTranslation() - const { callElasticsearch } = useElasticsearchAdapter() + const t = useTranslation() + const { callElasticsearch } = useElasticsearchAdapter() - const dialog = ref(false) - const policies = ref([]) + const dialog = ref(false) + const policies = ref([]) - watch(dialog, value => { - if (value) { - loadPolicies() - } else { - emit('reload') - } - }) + watch(dialog, (value) => { + if (value) { + loadPolicies() + } else { + emit('reload') + } + }) - const loadPolicies = () => { - callElasticsearch('catSlmPolicies') - .then((body: Record) => { - const repositoryPolicies = Object.entries(body) - .filter(([, policy]) => policy.policy.repository === props.repository) - .map(([id, policy]) => ({ - id, - name: policy.policy.name, - schedule: policy.policy.schedule, - repository: policy.policy.repository, - retention: policy.policy.retention - })) + const loadPolicies = () => { + callElasticsearch('catSlmPolicies') + .then((body: Record) => { + const repositoryPolicies = Object.entries(body) + .filter(([, policy]) => policy.policy.repository === props.repository) + .map(([id, policy]) => ({ + id, + name: policy.policy.name, + schedule: policy.policy.schedule, + repository: policy.policy.repository, + retention: policy.policy.retention + })) - policies.value = repositoryPolicies - }) - .catch(() => (policies.value = [])) - } + policies.value = repositoryPolicies + }) + .catch(() => (policies.value = [])) + } - const { run: executeRun } = defineElasticsearchRequest({ emit, method: 'slmExecutePolicy' }) - const { run: deleteRun } = defineElasticsearchRequest({ emit, method: 'slmDeletePolicy' }) + const { run: executeRun } = defineElasticsearchRequest({ emit, method: 'slmExecutePolicy' }) + const { run: deleteRun } = defineElasticsearchRequest({ emit, method: 'slmDeletePolicy' }) - const executePolicy = (name: string) => { - return executeRun({ - confirmMsg: t('snapshot_policies.policies_table.execute_policy.confirm', { name }), - params: { policy: name }, - snackbarOptions: { body: t('snapshot_policies.policies_table.execute_policy.growl', { name }) } - }).then(() => loadPolicies()) - } + const executePolicy = (name: string) => { + return executeRun({ + confirmMsg: t('snapshot_policies.policies_table.execute_policy.confirm', { name }), + params: { policy: name }, + snackbarOptions: { body: t('snapshot_policies.policies_table.execute_policy.growl', { name }) } + }).then(() => loadPolicies()) + } - const deletePolicy = (name: string) => { - return deleteRun({ - confirmMsg: t('snapshot_policies.policies_table.delete_policy.confirm', { name }), - params: { policy: name }, - snackbarOptions: { body: t('snapshot_policies.policies_table.delete_policy.growl', { name }) } - }).then(() => loadPolicies()) - } + const deletePolicy = (name: string) => { + return deleteRun({ + confirmMsg: t('snapshot_policies.policies_table.delete_policy.confirm', { name }), + params: { policy: name }, + snackbarOptions: { body: t('snapshot_policies.policies_table.delete_policy.growl', { name }) } + }).then(() => loadPolicies()) + } - const editPolicy = (_name: string) => { - // This would open the edit dialog - for now just show a message - } + const editPolicy = (_name: string) => { + // This would open the edit dialog - for now just show a message + } - const columns = genColumns([ - { label: t('snapshot_policies.policies_table.table.headers.id'), field: 'id' }, - { label: t('snapshot_policies.policies_table.table.headers.name'), field: 'name' }, - { label: t('snapshot_policies.policies_table.table.headers.schedule'), field: 'schedule' }, - { label: t('snapshot_policies.policies_table.table.headers.retention'), field: 'retention' }, - { label: '' } - ]) + const columns = genColumns([ + { label: t('snapshot_policies.policies_table.table.headers.id'), field: 'id' }, + { label: t('snapshot_policies.policies_table.table.headers.name'), field: 'name' }, + { label: t('snapshot_policies.policies_table.table.headers.schedule'), field: 'schedule' }, + { label: t('snapshot_policies.policies_table.table.headers.retention'), field: 'retention' }, + { label: '' } + ]) - return { - dialog, - policies, - loadPolicies, - executePolicy, - editPolicy, - deletePolicy, - columns - } + return { + dialog, + policies, + loadPolicies, + executePolicy, + editPolicy, + deletePolicy, + columns + } } diff --git a/src/composables/components/repositories/SnapshotRepositoriesTable.ts b/src/composables/components/repositories/SnapshotRepositoriesTable.ts index 5d8874df..4460bad4 100644 --- a/src/composables/components/repositories/SnapshotRepositoriesTable.ts +++ b/src/composables/components/repositories/SnapshotRepositoriesTable.ts @@ -7,16 +7,16 @@ import { useRouter } from 'vue-router' import { setupFilterState } from '../shared/FilterState.ts' export type EsSnapshotRepository = { - type: string, - uuid: string, + type: string + uuid: string settings: EsSnapshotRepositorySettings } type EsSnapshotRepositorySettings = { - location: string, - maxRestoreBytesPerSec: string, - chunkSize: string, - readonly: string, + location: string + maxRestoreBytesPerSec: string + chunkSize: string + readonly: string compress: string } @@ -46,7 +46,7 @@ export const useSnapshotRepositoriesTable = (props: SnapshotRepositoriesTablePro } const router = useRouter() - const openSnapshots = (repositoryName: string) => (router.push({ name: 'snapshots', params: { repositoryName } })) + const openSnapshots = (repositoryName: string) => router.push({ name: 'snapshots', params: { repositoryName } }) const filterStateProps = setupFilterState(results, filteredResults) @@ -67,4 +67,3 @@ export const useSnapshotRepositoriesTable = (props: SnapshotRepositoriesTablePro columns } } - diff --git a/src/composables/components/rest/RestQuery.ts b/src/composables/components/rest/RestQuery.ts index 7198de32..9e0e229c 100644 --- a/src/composables/components/rest/RestQuery.ts +++ b/src/composables/components/rest/RestQuery.ts @@ -6,7 +6,7 @@ import RestQueryFormTabs from '../../../components/rest/RestQueryFormTabs.vue' export const useRestQuery = (formTabs: Ref) => { const { activeCluster } = useConnectionStore() - const clusterMinor = computed(() => (activeCluster?.version?.split('.')?.slice(0, 2)?.join('.'))) + const clusterMinor = computed(() => activeCluster?.version?.split('.')?.slice(0, 2)?.join('.')) const { restQueryTabs, restQueryHistory, restQuerySavedQueries } = useIdbStore() const history = ref([] as IdbRestQueryHistory[]) @@ -56,4 +56,4 @@ export const useRestQuery = (formTabs: Ref) => useRequest, useRequestInNewTab } -} \ No newline at end of file +} diff --git a/src/composables/components/rest/RestQueryForm.ts b/src/composables/components/rest/RestQueryForm.ts index 29487b46..6e621433 100644 --- a/src/composables/components/rest/RestQueryForm.ts +++ b/src/composables/components/rest/RestQueryForm.ts @@ -109,10 +109,10 @@ export const useRestQueryForm = (props: RestQueryFormProps, emit: any) => { emit('reloadSavedQueries') } - watch(ownTab.value.request, value => { + watch(ownTab.value.request, (value) => { if (updateIdb) updateTab({ request: toRaw(value) }) }) - watch(ownTab.value.response, value => { + watch(ownTab.value.response, (value) => { if (updateIdb) updateTab({ response: toRaw(value) }) }) const updateTab = debounce((value: object) => { @@ -120,30 +120,35 @@ export const useRestQueryForm = (props: RestQueryFormProps, emit: any) => { restQueryTabs.update(obj) }, 100) - watch(() => props.tab, newValue => { - updateIdb = false - ownTab.value.request.method = newValue.request.method - ownTab.value.request.path = newValue.request.path - ownTab.value.request.body = newValue.request.body - updateIdb = true - }) + watch( + () => props.tab, + (newValue) => { + updateIdb = false + ownTab.value.request.method = newValue.request.method + ownTab.value.request.path = newValue.request.path + ownTab.value.request.body = newValue.request.body + updateIdb = true + } + ) const editorCommands = [ { - key: 'Ctrl-Enter', run: () => { + key: 'Ctrl-Enter', + run: () => { sendRequest() return true - }, + } }, { - key: 'Cmd-Enter', run: () => { + key: 'Cmd-Enter', + run: () => { sendRequest() return true - }, + } } ] - const generateDownloadData = () => (ownTab.value.response.bodyText) + const generateDownloadData = () => ownTab.value.response.bodyText const downloadFileName = computed(() => { return `${ownTab.value.request.method.toLowerCase()}_${ownTab.value.request.path.replace(/[\W_]+/g, '_')}.json` }) diff --git a/src/composables/components/rest/RestQueryHistoryList.ts b/src/composables/components/rest/RestQueryHistoryList.ts index c8a2be88..d1b98810 100644 --- a/src/composables/components/rest/RestQueryHistoryList.ts +++ b/src/composables/components/rest/RestQueryHistoryList.ts @@ -19,10 +19,14 @@ export const useRestQueryHistoryList = (emit: any) => { const columns = [ { label: t('query.rest_query_history.table.headers.query'), field: 'query', name: 'query', align: 'left' }, { - label: t('query.rest_query_history.table.headers.timestamp'), field: 'date', name: 'date', align: 'left', - sortOrder: 'da', sortable: true + label: t('query.rest_query_history.table.headers.timestamp'), + field: 'date', + name: 'date', + align: 'left', + sortOrder: 'da', + sortable: true }, - { label: '' }, + { label: '' } ] return { @@ -30,4 +34,4 @@ export const useRestQueryHistoryList = (emit: any) => { removeHistory, columns } -} \ No newline at end of file +} diff --git a/src/composables/components/rest/RestQuerySavedQueriesList.ts b/src/composables/components/rest/RestQuerySavedQueriesList.ts index 26095889..0d929a7f 100644 --- a/src/composables/components/rest/RestQuerySavedQueriesList.ts +++ b/src/composables/components/rest/RestQuerySavedQueriesList.ts @@ -21,7 +21,7 @@ export const useRestQuerySavedQueriesList = (emit: any) => { const columns = [ { label: t('query.rest_query_history.table.headers.query'), field: 'query', name: 'query', align: 'left' }, { label: 'Name', field: 'name', name: 'name', align: 'left', sortable: true }, - { label: '' }, + { label: '' } ] return { @@ -29,4 +29,4 @@ export const useRestQuerySavedQueriesList = (emit: any) => { renameSavedQuery, columns } -} \ No newline at end of file +} diff --git a/src/composables/components/rest/RestQueryTabs.ts b/src/composables/components/rest/RestQueryTabs.ts index 5c5e5ab7..d799fb25 100644 --- a/src/composables/components/rest/RestQueryTabs.ts +++ b/src/composables/components/rest/RestQueryTabs.ts @@ -45,9 +45,9 @@ export const useRestQueryTabs = () => { } loadTabs() - const activeTabIndex = () => (tabs.value.findIndex(t => t.name === activeTabName.value) || 0) + const activeTabIndex = () => tabs.value.findIndex((t) => t.name === activeTabName.value) || 0 - const setTabContent = ({ method, path, body }: { method: string, path: string, body: string }) => { + const setTabContent = ({ method, path, body }: { method: string; path: string; body: string }) => { const idx = activeTabIndex() tabs.value[idx].request.method = method tabs.value[idx].request.path = path diff --git a/src/composables/components/search/EditDocument.ts b/src/composables/components/search/EditDocument.ts index b9dc929d..b79307a9 100644 --- a/src/composables/components/search/EditDocument.ts +++ b/src/composables/components/search/EditDocument.ts @@ -1,9 +1,6 @@ import { ref, watch, Ref, computed } from 'vue' import { useTranslation } from '../../i18n.ts' -import { - defineElasticsearchRequest, - useElasticsearchAdapter, -} from '../../CallElasticsearch.ts' +import { defineElasticsearchRequest, useElasticsearchAdapter } from '../../CallElasticsearch.ts' import { stringifyJson } from '../../../helpers/json/stringify.ts' export type EditDocumentProps = { @@ -11,19 +8,19 @@ export type EditDocumentProps = { } & ElasticsearchDocumentInfo export type ElasticsearchDocumentInfo = { - _index: string, - _type: string, - _id: string, + _index: string + _type: string + _id: string _routing?: string } type ElasticsearchDocumentMeta = { - _index?: string, - _type?: string, - _id?: string, - _version?: number, - _primary_term?: number, - _seq_no?: number, + _index?: string + _type?: string + _id?: string + _version?: number + _primary_term?: number + _seq_no?: number _routing?: string } @@ -43,15 +40,18 @@ export const useEditDocument = (props: EditDocumentProps, emit: any) => { id: props._id, routing: props._routing }) - .then(body => (data.value = body)) - .catch(() => (data.value = null)) + .then((body) => (data.value = body)) + .catch(() => (data.value = null)) } - watch(ownValue, value => (emit('update:modelValue', value))) - watch(() => props.modelValue, value => { - if (value) loadDocument() - ownValue.value = value - }) + watch(ownValue, (value) => emit('update:modelValue', value)) + watch( + () => props.modelValue, + (value) => { + if (value) loadDocument() + ownValue.value = value + } + ) const loadDocument = async () => { await load() @@ -95,4 +95,4 @@ export const useEditDocument = (props: EditDocumentProps, emit: any) => { loading, updateDocument } -} \ No newline at end of file +} diff --git a/src/composables/components/search/SearchDocuments.ts b/src/composables/components/search/SearchDocuments.ts index 6d254758..23e7e070 100644 --- a/src/composables/components/search/SearchDocuments.ts +++ b/src/composables/components/search/SearchDocuments.ts @@ -12,7 +12,7 @@ export type EsSearchResult = { } type EsSearchResultHits = { - total: EsSearchResultsHitsValues | number, + total: EsSearchResultsHitsValues | number hits?: any } @@ -48,18 +48,24 @@ export const useSearchDocuments = () => { } } - watch(() => (searchStore.indices), () => { - searchStore.pagination.sortBy = '' - try { - mergeQuery(Object.assign({}, parseJson(searchStore.searchQuery), { sort: [] })) - } catch (e) { - console.error(e) + watch( + () => searchStore.indices, + () => { + searchStore.pagination.sortBy = '' + try { + mergeQuery(Object.assign({}, parseJson(searchStore.searchQuery), { sort: [] })) + } catch (e) { + console.error(e) + } } - }) + ) - watch(() => (searchStore.q), value => { - mergeQuery({ query: { query_string: { query: value } } }) - }) + watch( + () => searchStore.q, + (value) => { + mergeQuery({ query: { query_string: { query: value } } }) + } + ) // pagination = {sortBy: '', descending: false, page: 2, rowsPerPage: 10, rowsNumber: 2593} const onRequest = ({ pagination }: any) => { @@ -80,13 +86,15 @@ export const useSearchDocuments = () => { const editorCommands = [ { - key: 'Ctrl-Enter', run: () => { + key: 'Ctrl-Enter', + run: () => { search() return true } }, { - key: 'Cmd-Enter', run: () => { + key: 'Cmd-Enter', + run: () => { search() return true } diff --git a/src/composables/components/search/SearchResult.ts b/src/composables/components/search/SearchResult.ts index dafac6b2..d20d71c2 100644 --- a/src/composables/components/search/SearchResult.ts +++ b/src/composables/components/search/SearchResult.ts @@ -6,13 +6,13 @@ import { stringifyJson } from '../../../helpers/json/stringify.ts' import { truncateString } from '../../../helpers/truncate.ts' import { DEFAULT_DOCUMENT_FIELD_MAX_LENGTH } from '../../../consts.ts' -export type SearchResultProps = { columns: any[], doc: Record } +export type SearchResultProps = { columns: any[]; doc: Record } export const useSearchResult = (props: SearchResultProps, emit: any) => { const t = useTranslation() const searchStore = useSearchStore() - const resultColumns = computed(() => (props.columns.slice(0, -1))) + const resultColumns = computed(() => props.columns.slice(0, -1)) const edit = ref(false) const docInfo = () => ({ @@ -63,4 +63,4 @@ export const useSearchResult = (props: SearchResultProps, emit: any) => { buttonsVisible, onIntersection } -} \ No newline at end of file +} diff --git a/src/composables/components/search/SearchResultsTable.ts b/src/composables/components/search/SearchResultsTable.ts index 771784c4..0ffaddb8 100644 --- a/src/composables/components/search/SearchResultsTable.ts +++ b/src/composables/components/search/SearchResultsTable.ts @@ -38,70 +38,80 @@ export const useSearchResultsTable = (props: SearchResultsTableProps, emit: any) emit('reload') } - const genDocStr = (doc: ElasticsearchDocumentInfo) => ([doc._index, doc._type, doc._id].join('####')) + const genDocStr = (doc: ElasticsearchDocumentInfo) => [doc._index, doc._type, doc._id].join('####') - watch(() => searchStore.pagination.rowsPerPage, () => { - if (searchStore.pagination.rowsPerPage === rowsPerPage[rowsPerPage.length - 1].value) { - searchStore.stickyTableHeader = true - } - onRequest({ pagination: searchStore.pagination }) - }) - - watch(() => props.results, async (newValue: EsSearchResult) => { - if (newValue?.hits?.hits?.length === 0) { - hits.value = [] - return + watch( + () => searchStore.pagination.rowsPerPage, + () => { + if (searchStore.pagination.rowsPerPage === rowsPerPage[rowsPerPage.length - 1].value) { + searchStore.stickyTableHeader = true + } + onRequest({ pagination: searchStore.pagination }) } - - const results = new SearchResults(newValue?.hits?.hits) - const indices = await callElasticsearch('indexGet', { index: results.uniqueIndices }) - const allProperties: Record = {} - - Object.keys(indices).forEach(index => { - const mappings = indices[index].mappings - if (typeof mappings.properties === 'undefined') { - // ES < 7 - const indexProperties = {} - Object.keys(mappings).forEach(mapping => { - Object.assign(indexProperties, mappings[mapping].properties) - }) - Object.assign(allProperties, indexProperties) - } else { - // ES >= 7 - Object.assign(allProperties, mappings.properties) + ) + + watch( + () => props.results, + async (newValue: EsSearchResult) => { + if (newValue?.hits?.hits?.length === 0) { + hits.value = [] + return } - }) - - tableColumns.value = results.uniqueColumns.map(field => { - const filterableCol = sortableField(field, allProperties[field]) - return { label: field, field, name: filterableCol || field, sortable: !!filterableCol, align: 'left' } - }) - tableColumns.value.push({ label: '', name: 'actions' }) - - const oldColumns = searchStore.columns - const newColumnsList = tableColumns.value.map(c => c.name) - const addedColumns = newColumnsList.filter(c => !oldColumns.includes(c)) - const removedColumns = oldColumns.filter(c => !newColumnsList.includes(c)) - - searchStore.columns = newColumnsList - searchStore.visibleColumns = searchStore.visibleColumns.filter(c => !removedColumns.includes(c)).concat(addedColumns) - - hits.value = results.docs - }) + const results = new SearchResults(newValue?.hits?.hits) + const indices = await callElasticsearch('indexGet', { index: results.uniqueIndices }) + const allProperties: Record = {} + + Object.keys(indices).forEach((index) => { + const mappings = indices[index].mappings + if (typeof mappings.properties === 'undefined') { + // ES < 7 + const indexProperties = {} + Object.keys(mappings).forEach((mapping) => { + Object.assign(indexProperties, mappings[mapping].properties) + }) + Object.assign(allProperties, indexProperties) + } else { + // ES >= 7 + Object.assign(allProperties, mappings.properties) + } + }) + + tableColumns.value = results.uniqueColumns.map((field) => { + const filterableCol = sortableField(field, allProperties[field]) + + return { label: field, field, name: filterableCol || field, sortable: !!filterableCol, align: 'left' } + }) + tableColumns.value.push({ label: '', name: 'actions' }) + + const oldColumns = searchStore.columns + const newColumnsList = tableColumns.value.map((c) => c.name) + const addedColumns = newColumnsList.filter((c) => !oldColumns.includes(c)) + const removedColumns = oldColumns.filter((c) => !newColumnsList.includes(c)) + + searchStore.columns = newColumnsList + searchStore.visibleColumns = searchStore.visibleColumns.filter((c) => !removedColumns.includes(c)).concat(addedColumns) + + hits.value = results.docs + } + ) const filteredHits = computed(() => { if (searchStore.filter.trim().length === 0) return hits.value - return filterItems(hits.value, searchStore.filter, tableColumns.value.map(c => c.field)) + return filterItems( + hits.value, + searchStore.filter, + tableColumns.value.map((c) => c.field) + ) }) - const slicedTableColumns = computed((): any[] => (tableColumns.value.slice(0, -1))) + const slicedTableColumns = computed((): any[] => tableColumns.value.slice(0, -1)) - const onRequest = (pagination: any) => (emit('request', pagination)) + const onRequest = (pagination: any) => emit('request', pagination) const clearColumns = () => (searchStore.visibleColumns = ['actions']) - const resetColumns = () => (searchStore.visibleColumns = tableColumns.value.map(c => c.name)) - const generateDownloadData = () => (stringifyJson(props.results)) + const resetColumns = () => (searchStore.visibleColumns = tableColumns.value.map((c) => c.name)) + const generateDownloadData = () => stringifyJson(props.results) const rowsPerPage = [ { label: '10', value: 10, enabled: true }, @@ -135,4 +145,4 @@ export const useSearchResultsTable = (props: SearchResultsTableProps, emit: any) checkAll, generateDownloadData } -} \ No newline at end of file +} diff --git a/src/composables/components/shardrecovery/ShardRecoveryTable.ts b/src/composables/components/shardrecovery/ShardRecoveryTable.ts index 11365242..76cae154 100644 --- a/src/composables/components/shardrecovery/ShardRecoveryTable.ts +++ b/src/composables/components/shardrecovery/ShardRecoveryTable.ts @@ -29,60 +29,63 @@ export type ShardRecovery = { translog_ops_percent: string } -export type IndexRecovery = Record -}> + verify_index: { + check_index_time_in_millis: number + total_time_in_millis: number + } + }> + } +> export type ShardRecoveryTableProps = { shardRecoveries: IndexRecovery @@ -99,13 +102,13 @@ export const useShardRecoveryTable = (props: ShardRecoveryTableProps) => { let items = results.value if (stage.value) { - items = items.filter(r => r.stage === stage.value) + items = items.filter((r) => r.stage === stage.value) } return filterItems(items, shardRecoveryStore.filter, ['index']) }) - function transformRecoveryResponse (input: IndexRecovery): ShardRecovery[] { + function transformRecoveryResponse(input: IndexRecovery): ShardRecovery[] { const results: ShardRecovery[] = [] for (const [index, data] of Object.entries(input)) { @@ -150,7 +153,7 @@ export const useShardRecoveryTable = (props: ShardRecoveryTableProps) => { { label: t('shard_recovery_table.columns.duration'), field: 'time' }, { label: t('shard_recovery_table.columns.files') }, { label: t('shard_recovery_table.columns.bytes') }, - { label: t('shard_recovery_table.columns.translog_ops') }, + { label: t('shard_recovery_table.columns.translog_ops') } ]) return { @@ -159,4 +162,4 @@ export const useShardRecoveryTable = (props: ShardRecoveryTableProps) => { filteredResults, columns } -} \ No newline at end of file +} diff --git a/src/composables/components/shards/ShardsTable.ts b/src/composables/components/shards/ShardsTable.ts index 623010ef..b0a8013e 100644 --- a/src/composables/components/shards/ShardsTable.ts +++ b/src/composables/components/shards/ShardsTable.ts @@ -23,12 +23,14 @@ export const useShardsTable = (props: ShardsTableProps, emit: any) => { if (Object.keys(shards).length === 0) return shards if (!indicesStore.showHiddenIndices) { - Object.assign(shards, { indexNames: shards.indexNames.filter(item => !item.match(new RegExp(indicesStore.hideIndicesRegex))) }) + Object.assign(shards, { + indexNames: shards.indexNames.filter((item) => !item.match(new RegExp(indicesStore.hideIndicesRegex))) + }) } if (shardsStore.filter.length !== 0) { const query = shardsStore.filter.slice().toLowerCase().trim() - Object.assign(shards, { indexNames: shards.indexNames.filter(item => item.includes(query)) }) + Object.assign(shards, { indexNames: shards.indexNames.filter((item) => item.includes(query)) }) } return shards @@ -39,11 +41,11 @@ export const useShardsTable = (props: ShardsTableProps, emit: any) => { let end = start + pagination.value.rowsPerPage if (pagination.value.rowsPerPage === 0) end = filteredShards.value?.indexNames.length const slice = filteredShards.value?.indexNames?.slice(start, end) || [] - return slice.map(val => ({ label: val, name: val, field: val })) + return slice.map((val) => ({ label: val, name: val, field: val })) }) const rowsNumber = ref(0) - watch(filteredShards, newValue => { + watch(filteredShards, (newValue) => { pagination.value.rowsNumber = newValue?.indexNames?.length || 0 }) @@ -66,9 +68,11 @@ export const useShardsTable = (props: ShardsTableProps, emit: any) => { const currentReroutingShard: Ref = ref({} as EsShard) const initReroute = (shard: EsShard) => { - if (currentReroutingShard.value.node === shard.node && - currentReroutingShard.value.index === shard.index && - currentReroutingShard.value.shard === shard.shard) { + if ( + currentReroutingShard.value.node === shard.node && + currentReroutingShard.value.index === shard.index && + currentReroutingShard.value.shard === shard.shard + ) { currentReroutingShard.value = {} as EsShard } else { currentReroutingShard.value = shard @@ -79,11 +83,16 @@ export const useShardsTable = (props: ShardsTableProps, emit: any) => { const { showSnackbar } = useSnackbar() const { requestState, callElasticsearch } = useElasticsearchAdapter() const reroute = async (shardToReroute: EsShard, targetNode: string) => { - if (!confirm(t('shards.shards_table.reroute.confirm', { - shard: shardToReroute.shard, - fromNode: shardToReroute.node, - toNode: targetNode - }))) return + if ( + !confirm( + t('shards.shards_table.reroute.confirm', { + shard: shardToReroute.shard, + fromNode: shardToReroute.node, + toNode: targetNode + }) + ) + ) + return const commands = [ { @@ -93,7 +102,8 @@ export const useShardsTable = (props: ShardsTableProps, emit: any) => { from_node: shardToReroute.node, to_node: targetNode } - }] + } + ] try { await callElasticsearch('clusterReroute', commands) @@ -126,4 +136,4 @@ export const useShardsTable = (props: ShardsTableProps, emit: any) => { initReroute, reroute } -} \ No newline at end of file +} diff --git a/src/composables/components/shared/FilterState.ts b/src/composables/components/shared/FilterState.ts index aebfecc2..b47e02bc 100644 --- a/src/composables/components/shared/FilterState.ts +++ b/src/composables/components/shared/FilterState.ts @@ -12,4 +12,4 @@ export const setupFilterState = (results: RefLike, filteredResults: RefLike) => resultsCount, filteredResultsCount } -} \ No newline at end of file +} diff --git a/src/composables/components/snapshots/NewSnapshot.ts b/src/composables/components/snapshots/NewSnapshot.ts index 4244284b..ea850e0f 100644 --- a/src/composables/components/snapshots/NewSnapshot.ts +++ b/src/composables/components/snapshots/NewSnapshot.ts @@ -3,7 +3,7 @@ import { computed, ref } from 'vue' import { defineElasticsearchRequest } from '../../CallElasticsearch' type NewSnapshot = { - name: string, + name: string indices: string | string[] } @@ -37,7 +37,7 @@ export const useNewSnapshot = (props: NewSnapshotProps, emit: any) => { } }, snackbarOptions: { - body: t('snapshots.new_snapshot.create_snapshot.growl', { name: snapshot.value.name }), + body: t('snapshots.new_snapshot.create_snapshot.growl', { name: snapshot.value.name }) } }) if (success) dialog.value = false @@ -51,4 +51,4 @@ export const useNewSnapshot = (props: NewSnapshotProps, emit: any) => { createSnapshot, resetForm } -} \ No newline at end of file +} diff --git a/src/composables/components/snapshots/RestoreSnapshot.ts b/src/composables/components/snapshots/RestoreSnapshot.ts index 90fc202f..613c2003 100644 --- a/src/composables/components/snapshots/RestoreSnapshot.ts +++ b/src/composables/components/snapshots/RestoreSnapshot.ts @@ -19,18 +19,18 @@ export const useRestoreSnapshot = (props: RestoreSnapshotProps, emit: any) => { renamePattern: '', renameReplacement: '' }) - const formValid = computed(() => (restoreOptions.value.indices.length > 0)) + const formValid = computed(() => restoreOptions.value.indices.length > 0) const { callElasticsearch } = useElasticsearchAdapter() const data: Ref = ref(null) const load = () => { return callElasticsearch('getSnapshot', { repository: props.repository, snapshot: props.snapshot }) - .then(body => (data.value = body)) - .catch(() => (data.value = null)) + .then((body) => (data.value = body)) + .catch(() => (data.value = null)) } - watch(dialog, newValue => { + watch(dialog, (newValue) => { if (newValue) load().then(() => (indexNames.value = data.value.snapshots[0].indices.sort())) }) @@ -60,7 +60,7 @@ export const useRestoreSnapshot = (props: RestoreSnapshotProps, emit: any) => { } }, snackbarOptions: { - body: t('snapshots.restore_snapshot.restore_snapshot.growl', { snapshot: props.snapshot }), + body: t('snapshots.restore_snapshot.restore_snapshot.growl', { snapshot: props.snapshot }) } }) if (success) dialog.value = false @@ -75,4 +75,4 @@ export const useRestoreSnapshot = (props: RestoreSnapshotProps, emit: any) => { restoreSnapshot, resetForm } -} \ No newline at end of file +} diff --git a/src/composables/components/snapshots/SnapshotRow.ts b/src/composables/components/snapshots/SnapshotRow.ts index 7f731ac1..64fb68ed 100644 --- a/src/composables/components/snapshots/SnapshotRow.ts +++ b/src/composables/components/snapshots/SnapshotRow.ts @@ -6,24 +6,24 @@ export type EsSnapshotList = { } export type EsSnapshot = { - snapshot: string, - repository: string, - state: string, - start_time_in_millis: number, - start_time: string, - end_time: string, - end_time_in_millis: number, - duration_in_millis: number, - indices: string[], + snapshot: string + repository: string + state: string + start_time_in_millis: number + start_time: string + end_time: string + end_time_in_millis: number + duration_in_millis: number + indices: string[] shards: { - successful: number, - failed: number, + successful: number + failed: number total: number } } export type SnapshotRowProps = { - snapshot: EsSnapshot, + snapshot: EsSnapshot repository: string } @@ -42,4 +42,4 @@ export const useSnapshotRow = (props: SnapshotRowProps, emit: any) => { return { deleteSnapshot } -} \ No newline at end of file +} diff --git a/src/composables/components/snapshots/SnapshotsTable.ts b/src/composables/components/snapshots/SnapshotsTable.ts index cc7dd8e7..c3675e5c 100644 --- a/src/composables/components/snapshots/SnapshotsTable.ts +++ b/src/composables/components/snapshots/SnapshotsTable.ts @@ -6,7 +6,7 @@ import { filterItems } from '../../../helpers/filters.ts' import { setupFilterState } from '../shared/FilterState.ts' export type SnapshotsTableProps = { - repository: string, + repository: string snapshots: EsSnapshot[] } @@ -40,4 +40,4 @@ export const useSnapshotsTable = (props: SnapshotsTableProps) => { filterStateProps, columns } -} \ No newline at end of file +} diff --git a/src/composables/i18n.ts b/src/composables/i18n.ts index 5f0d477e..db1cee8f 100644 --- a/src/composables/i18n.ts +++ b/src/composables/i18n.ts @@ -3,4 +3,4 @@ import { useI18n } from 'vue-i18n' export const useTranslation = () => { const { t } = useI18n() return t -} \ No newline at end of file +} diff --git a/src/consts.ts b/src/consts.ts index 01a66c81..58bbb36c 100644 --- a/src/consts.ts +++ b/src/consts.ts @@ -70,14 +70,15 @@ export const REST_QUERY_EXAMPLES = [ description: 'Performs multiple indexing or delete operations in a single API call', method: 'POST', path: '_bulk', - body: '{ "index" : { "_index" : "test", "_id" : "1" } }\n' + - '{ "field1" : "value1" }\n' + - '{ "delete" : { "_index" : "test", "_id" : "2" } }\n' + - '{ "create" : { "_index" : "test", "_id" : "3" } }\n' + - '{ "field1" : "value3" }\n' + - '{ "update" : {"_id" : "1", "_index" : "test"} }\n' + - '{ "doc" : {"field2" : "value2"} }\n' + - '', + body: + '{ "index" : { "_index" : "test", "_id" : "1" } }\n' + + '{ "field1" : "value1" }\n' + + '{ "delete" : { "_index" : "test", "_id" : "2" } }\n' + + '{ "create" : { "_index" : "test", "_id" : "3" } }\n' + + '{ "field1" : "value3" }\n' + + '{ "update" : {"_id" : "1", "_index" : "test"} }\n' + + '{ "doc" : {"field2" : "value2"} }\n' + + '', doc: 'https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html' }, { @@ -122,4 +123,4 @@ export const REST_QUERY_EXAMPLES = [ body: '', doc: 'https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-index.html' } -] \ No newline at end of file +] diff --git a/src/db/Idb.ts b/src/db/Idb.ts index fb9b3fa8..d7771c21 100644 --- a/src/db/Idb.ts +++ b/src/db/Idb.ts @@ -7,11 +7,11 @@ const dbDefinition = { tables: [ { name: 'restQueryHistory', indexes: ['date'] }, { name: 'restQuerySavedQueries', indexes: [] }, - { name: 'restQueryTabs', indexes: [] }, + { name: 'restQueryTabs', indexes: [] } ] } -const databaseName = (clusterUuid: string) => (`elasticvue-${clusterUuid}`) +const databaseName = (clusterUuid: string) => `elasticvue-${clusterUuid}` let db: Db export const useIdb = () => { @@ -35,4 +35,4 @@ export const initDb = (clusterUuid: string) => { return db } -export const useIdbStore = () => (useIdb()?.models) +export const useIdbStore = () => useIdb()?.models diff --git a/src/db/indexeddb.ts b/src/db/indexeddb.ts index c4dab1d5..8338e339 100644 --- a/src/db/indexeddb.ts +++ b/src/db/indexeddb.ts @@ -11,7 +11,7 @@ export class Db { connectPromise: MaybePromise _idb: IDBPDatabase - constructor ({ dbName, dbVersion, tables }: { dbName: string, dbVersion: number, tables: TableDefinition[] }) { + constructor({ dbName, dbVersion, tables }: { dbName: string; dbVersion: number; tables: TableDefinition[] }) { this.dbName = dbName this.dbVersion = dbVersion this.tables = tables @@ -19,7 +19,7 @@ export class Db { this.connect() } - async connect () { + async connect() { if (this._idb) return if (!this.connectPromise) this.connectPromise = this._openIdb() @@ -27,16 +27,16 @@ export class Db { this.connectPromise = null } - async _openIdb () { + async _openIdb() { if (this._idb) return this._idb = await openDB(this.dbName, this.dbVersion, { upgrade: (db, _oldVersion, _newVersion, tx) => { - this.tables.forEach(table => { + this.tables.forEach((table) => { if (!db.objectStoreNames.contains(table.name)) { db.createObjectStore(table.name, { keyPath: 'id', - autoIncrement: true, + autoIncrement: true }) } @@ -47,7 +47,7 @@ export class Db { } }) }) - }, + } }) } } @@ -56,63 +56,63 @@ export class DbModel { tableName: string db: Db - constructor (tableName: string, db: Db) { + constructor(tableName: string, db: Db) { this.tableName = tableName this.db = db } - async count (): Promise { + async count(): Promise { await this.db.connect() return this.db._idb.count(this.tableName) } - async first (): Promise { + async first(): Promise { await this.db.connect() const cursor = await this.db._idb.transaction(this.tableName).store.openCursor(null, 'next') return cursor?.value } - async last (): Promise { + async last(): Promise { await this.db.connect() const cursor = await this.db._idb.transaction(this.tableName).store.openCursor(null, 'prev') return cursor?.value } - async insert (obj: T) { + async insert(obj: T) { await this.db.connect() return this.db._idb.add(this.tableName, obj) } - async get (key: IDBValidKey): Promise { + async get(key: IDBValidKey): Promise { await this.db.connect() return this.db._idb.get(this.tableName, key) } - async update (obj: T) { + async update(obj: T) { await this.db.connect() return this.db._idb.put(this.tableName, obj) } - async remove (id?: number) { + async remove(id?: number) { if (!id) return await this.db.connect() await this.db._idb.delete(this.tableName, id) } - async bulkInsert (data: T[]) { + async bulkInsert(data: T[]) { await this.db.connect() const tx = this.db._idb.transaction(this.tableName, 'readwrite') if (!tx) return - data.forEach(obj => (tx.store.put(obj))) + data.forEach((obj) => tx.store.put(obj)) return tx.done } - async getAll (): Promise { + async getAll(): Promise { await this.db.connect() return this.db._idb.getAll(this.tableName) } - async clear () { + async clear() { await this.db.connect() return this.db._idb?.clear(this.tableName) } diff --git a/src/db/types.ts b/src/db/types.ts index 954d9ad7..f9f29b30 100644 --- a/src/db/types.ts +++ b/src/db/types.ts @@ -41,7 +41,7 @@ export type IdbRestQueryTabResponse = { } export interface DbSchema { - restQueryHistory: DbModel, + restQueryHistory: DbModel restQuerySavedQueries: DbModel restQueryTabs: DbModel } diff --git a/src/helpers/cleanIndexName.ts b/src/helpers/cleanIndexName.ts index e2cdc036..bd4a2dd4 100644 --- a/src/helpers/cleanIndexName.ts +++ b/src/helpers/cleanIndexName.ts @@ -1,14 +1,14 @@ export const cleanIndexName = (index: string) => { return index.replace(/%/g, '%25').replace(/<.*?>/g, (match) => { return match - .replace(//g, '%3E') - .replace(/\//g, '%2F') - .replace(/\{/g, '%7B') - .replace(/\}/g, '%7D') - .replace(/\|/g, '%7C') - .replace(/\+/g, '%2B') - .replace(/:/g, '%3A') - .replace(/,/g, '%2C') + .replace(//g, '%3E') + .replace(/\//g, '%2F') + .replace(/\{/g, '%7B') + .replace(/\}/g, '%7D') + .replace(/\|/g, '%7C') + .replace(/\+/g, '%2B') + .replace(/:/g, '%3A') + .replace(/,/g, '%2C') }) } diff --git a/src/helpers/cleanRestPath.ts b/src/helpers/cleanRestPath.ts index edd23fd2..e129af3f 100644 --- a/src/helpers/cleanRestPath.ts +++ b/src/helpers/cleanRestPath.ts @@ -3,50 +3,50 @@ import { cleanIndexName } from './cleanIndexName' /** * Properly handles REST API paths by separating index names from document IDs * and applying appropriate encoding to each part. - * + * * @param path - The REST API path (e.g., "my-index/_doc/document-with-/-char") * @returns The properly encoded path */ export const cleanRestPath = (path: string): string => { if (!path) return path - + // Find the first slash to separate index from the rest const firstSlashIndex = path.indexOf('/') - + if (firstSlashIndex === -1) { // No slash found, just clean the index name return cleanIndexName(path) } - + // Split into index and the rest const indexName = path.substring(0, firstSlashIndex) const restOfPath = path.substring(firstSlashIndex + 1) - + // Clean the index name const cleanedIndexName = cleanIndexName(indexName) - + // For the rest of the path, we need to handle it more carefully // We need to preserve the structure but encode document IDs // The issue is that when we split by slash, we lose the slashes in the document ID // So we need to be more careful about how we handle this - + let encodedRestOfPath: string - + // If the path contains slashes, we need to handle it specially if (restOfPath.includes('/')) { // Split by slash to get the parts const restParts = restOfPath.split('/') - + if (restParts.length >= 2) { // We have at least type and document ID // The last part is the document ID, but it might be split by slashes // We need to reconstruct the document ID by joining the parts after the type const typePart = restParts[0] const documentIdParts = restParts.slice(1) - + // Reconstruct the document ID by joining the parts const documentId = documentIdParts.join('/') - + // Encode the document ID if it's not already encoded let encodedDocumentId: string if (documentId.includes('%')) { @@ -56,7 +56,7 @@ export const cleanRestPath = (path: string): string => { // Encode the document ID encodedDocumentId = encodeURIComponent(documentId) } - + // Reconstruct the path encodedRestOfPath = `${typePart}/${encodedDocumentId}` } else { @@ -76,7 +76,7 @@ export const cleanRestPath = (path: string): string => { encodedRestOfPath = encodeURIComponent(restOfPath) } } - + // Reconstruct the path return `${cleanedIndexName}/${encodedRestOfPath}` } diff --git a/src/helpers/elasticsearchAdapter.ts b/src/helpers/elasticsearchAdapter.ts index bc93de4c..986a5911 100644 --- a/src/helpers/elasticsearchAdapter.ts +++ b/src/helpers/elasticsearchAdapter.ts @@ -21,9 +21,13 @@ export const addTrailingSlash = (uri: string): string => { return uri.endsWith('/') ? uri : uri + '/' } -export const uriWithCredentials = ({ uri, username, password }: { - uri: string, - username?: string, +export const uriWithCredentials = ({ + uri, + username, + password +}: { + uri: string + username?: string password?: string }): string => { const url = new URL(uri) @@ -43,4 +47,4 @@ export const clusterAuthHeader = ({ authType, authData }: ElasticsearchClusterAu case AuthType.awsIAM: return undefined } -} \ No newline at end of file +} diff --git a/src/helpers/error.ts b/src/helpers/error.ts index 0df1a360..708341a0 100644 --- a/src/helpers/error.ts +++ b/src/helpers/error.ts @@ -7,4 +7,4 @@ export const handleError = (e: any, growl: boolean = false) => { } else { console.error(e) } -} \ No newline at end of file +} diff --git a/src/helpers/fetch.ts b/src/helpers/fetch.ts index 0fa0d8b9..65f45428 100644 --- a/src/helpers/fetch.ts +++ b/src/helpers/fetch.ts @@ -11,20 +11,20 @@ export const fetchMethod = buildConfig.tauri ? fetchReqwest : window.fetch class FetchReqwestResponseHeaders { headers: Record - constructor (headers: Record) { + constructor(headers: Record) { this.headers = headers } - get (header: string) { + get(header: string) { return this.headers[header].length === 1 ? this.headers[header][0] : this.headers[header] } } type Response = { - headers: Record, - ok: boolean, - status: number, - status_text: string, + headers: Record + ok: boolean + status: number + status_text: string text: string } @@ -35,7 +35,7 @@ class FetchReqwestResponse { statusText: string body: string - constructor (response: Response) { + constructor(response: Response) { this.headers = new FetchReqwestResponseHeaders(response.headers) this.ok = response.ok this.status = response.status @@ -43,11 +43,11 @@ class FetchReqwestResponse { this.body = response.text } - text () { + text() { return Promise.resolve(this.body) } - json () { + json() { try { return Promise.resolve(parseJson(this.body)) } catch (e) { diff --git a/src/helpers/filters.ts b/src/helpers/filters.ts index 528ad93f..8637efed 100644 --- a/src/helpers/filters.ts +++ b/src/helpers/filters.ts @@ -1,6 +1,6 @@ type Filterable = Record -export function filterItems (items: T[], searchQuery: string, headerNames: string[]): T[] { +export function filterItems(items: T[], searchQuery: string, headerNames: string[]): T[] { const search = searchQuery.toString().slice().toLowerCase().trim() if (search.length === 0) return items @@ -13,14 +13,14 @@ export function filterItems (items: T[], searchQuery: stri if (query.trim() === '') return items if (column.trim() === '') return items - return items.filter(item => { + return items.filter((item) => { if (columnFilterable(item, column)) { return filterColumn(item, column, query) } }) } else { - return items.filter(item => { - return headerNames.some(headerName => { + return items.filter((item) => { + return headerNames.some((headerName) => { if (columnFilterable(item, headerName)) { return filterColumn(item, headerName, search) } diff --git a/src/helpers/flatten.ts b/src/helpers/flatten.ts index c0f9bab1..2935df84 100644 --- a/src/helpers/flatten.ts +++ b/src/helpers/flatten.ts @@ -2,8 +2,7 @@ export const flattenObj = (object: any) => { const result: Record = {} for (const i in object) { - - if ((typeof object[i]) === 'object' && !Array.isArray(object[i])) { + if (typeof object[i] === 'object' && !Array.isArray(object[i])) { const temp = flattenObj(object[i]) for (const j in temp) { result[i + '.' + j] = temp[j] diff --git a/src/helpers/json/parse.ts b/src/helpers/json/parse.ts index 811cbecb..0d9412d7 100644 --- a/src/helpers/json/parse.ts +++ b/src/helpers/json/parse.ts @@ -1,7 +1,7 @@ import { bigint } from './jsonBigint.ts' export const removeComments = (str: string): string => { - return str.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => g ? '' : m) + return str.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => (g ? '' : m)) } export const parseJson = (jsonString: string): any => { diff --git a/src/helpers/parseKibana.ts b/src/helpers/parseKibana.ts index 4bb9418b..f6d51c87 100644 --- a/src/helpers/parseKibana.ts +++ b/src/helpers/parseKibana.ts @@ -1,8 +1,8 @@ const kibanaBodyRegex = /^(GET|POST|PUT|PATCH|HEAD|OPTIONS|DELETE)(?:\s(.*)?)?/ type KibanaRequest = { - method: string | null, - path: string | null, + method: string | null + path: string | null body: string | null } diff --git a/src/helpers/predefinedClusters/buildAuth.ts b/src/helpers/predefinedClusters/buildAuth.ts index b779d601..3af8c84b 100644 --- a/src/helpers/predefinedClusters/buildAuth.ts +++ b/src/helpers/predefinedClusters/buildAuth.ts @@ -41,4 +41,4 @@ export const buildAuth = (cluster: PredefinedCluster): ElasticsearchClusterAuth authType: AuthType.none, authData: {} } -} \ No newline at end of file +} diff --git a/src/helpers/router.ts b/src/helpers/router.ts index 10ff9b9b..b7ae04e5 100644 --- a/src/helpers/router.ts +++ b/src/helpers/router.ts @@ -4,7 +4,7 @@ import { buildConfig } from '../buildConfig.ts' export const reloadHomePage = (router: Router, clusterIndex: number) => { try { const currentRoute = router.currentRoute.value - if (currentRoute.name === 'home' && currentRoute.params.clusterIndex as unknown as number === clusterIndex) { + if (currentRoute.name === 'home' && (currentRoute.params.clusterIndex as unknown as number) === clusterIndex) { router.go(0) } else { const route = { name: currentRoute.name || 'home', params: { clusterIndex } } diff --git a/src/helpers/search.ts b/src/helpers/search.ts index 7d22bff8..373220d4 100644 --- a/src/helpers/search.ts +++ b/src/helpers/search.ts @@ -2,7 +2,7 @@ import { DEFAULT_SORTABLE_COLUMNS } from '../consts' const SORTABLE_TYPES = ['long', 'integer', 'double', 'float', 'date', 'boolean', 'keyword'] -export function sortableField (fieldName: string, property: any) { +export function sortableField(fieldName: string, property: any) { if (DEFAULT_SORTABLE_COLUMNS.includes(fieldName)) return fieldName if (property) { diff --git a/src/helpers/shards.ts b/src/helpers/shards.ts index 829f4fa7..76d5254c 100644 --- a/src/helpers/shards.ts +++ b/src/helpers/shards.ts @@ -4,40 +4,43 @@ type IndexName = string type NodeName = string export type EsShard = { - index: IndexName, - shard: string, - prirep: string, - state: string, + index: IndexName + shard: string + prirep: string + state: string node: NodeName } export type EsShardIndex = { - health: string, - index: IndexName, - pri: string, - rep: string, + health: string + index: IndexName + pri: string + rep: string status: string } export type UnassignedShards = Record export type TableShards = { - nodes: NodeName[], - indexNames: IndexName[], - indices: Record, - unassignedShards: UnassignedShards, + nodes: NodeName[] + indexNames: IndexName[] + indices: Record + unassignedShards: UnassignedShards shards: Record> } export const convertShards = (shards: EsShard[], indexHealth: EsShardIndex[], nodes: Partial[]): TableShards => { - const indices = Object.assign({}, ...(indexHealth.map(i => ({ - [i.index]: { - index: i.index, - health: i.health, - pri: i.pri, - rep: i.rep - } - })))) + const indices = Object.assign( + {}, + ...indexHealth.map((i) => ({ + [i.index]: { + index: i.index, + health: i.health, + pri: i.pri, + rep: i.rep + } + })) + ) const result: Record = {} const unassignedShards: UnassignedShards = {} @@ -66,7 +69,10 @@ export const convertShards = (shards: EsShard[], indexHealth: EsShardIndex[], no } return { - nodes: nodes.map(n => n.name).filter(name => typeof name === 'string').sort(), + nodes: nodes + .map((n) => n.name) + .filter((name) => typeof name === 'string') + .sort(), indices, indexNames: Object.keys(indices), shards: result, diff --git a/src/helpers/tableColumns.ts b/src/helpers/tableColumns.ts index caf47c4d..652e6e51 100644 --- a/src/helpers/tableColumns.ts +++ b/src/helpers/tableColumns.ts @@ -1,17 +1,19 @@ type ColumnOptions = { - label: string, - field?: string, + label: string + field?: string align?: string } | null export const genColumns = (options: ColumnOptions[]): any[] => { - return options.filter(c => !!c).map(({ label, field, align }) => { - return { - label, - field, - name: field, - sortable: !!field, - align: align || 'left', - } - }) -} \ No newline at end of file + return options + .filter((c) => !!c) + .map(({ label, field, align }) => { + return { + label, + field, + name: field, + sortable: !!field, + align: align || 'left' + } + }) +} diff --git a/src/helpers/theme.ts b/src/helpers/theme.ts index d1a8b4a6..f0f78086 100644 --- a/src/helpers/theme.ts +++ b/src/helpers/theme.ts @@ -22,4 +22,4 @@ export const setupThemeListener = () => { setAppThemeCss(appTheme) }) -} \ No newline at end of file +} diff --git a/src/helpers/time.ts b/src/helpers/time.ts index 523fb978..b3e3163c 100644 --- a/src/helpers/time.ts +++ b/src/helpers/time.ts @@ -9,4 +9,4 @@ export const formatTime = (ms: number): string => { if (seconds || parts.length === 0) parts.push(`${seconds}s`) return parts.join(' ') -} \ No newline at end of file +} diff --git a/src/helpers/uuidHeader.ts b/src/helpers/uuidHeader.ts index 338677ef..3d2c683d 100644 --- a/src/helpers/uuidHeader.ts +++ b/src/helpers/uuidHeader.ts @@ -5,4 +5,4 @@ export const uuidHeader = () => { return { [UUID_HEADER_NAME]: getUuid() || '' } -} \ No newline at end of file +} diff --git a/src/locales/cn.json b/src/locales/cn.json index ca5da64d..7e41935a 100644 --- a/src/locales/cn.json +++ b/src/locales/cn.json @@ -700,8 +700,7 @@ }, "schedule": { "label": "计划*", - "hint": "Cron 表达式(例如,'0 30 1 * * ?' 表示每天凌晨 1:30)", - "required": "计划是必需的" + "hint": "Cron 表达式(例如,'0 30 1 * * ?' 表示每天凌晨 1:30)" }, "repository": { }, @@ -738,7 +737,6 @@ "id": "ID", "name": "名称", "schedule": "计划", - "repository": "仓库", "retention": "保留" } }, @@ -753,7 +751,6 @@ }, "edit_policy": { "update_policy": { - "growl": "快照策略 '{name}' 更新成功。" } } }, diff --git a/src/locales/en.json b/src/locales/en.json index 042fbad1..39bd433f 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -700,8 +700,7 @@ }, "schedule": { "label": "Schedule*", - "hint": "Cron expression (e.g., '0 30 1 * * ?' for daily at 1:30 AM)", - "required": "Schedule is required" + "hint": "Cron expression (e.g., '0 30 1 * * ?' for daily at 1:30 AM)" }, "repository": { }, @@ -738,7 +737,6 @@ "id": "ID", "name": "Name", "schedule": "Schedule", - "repository": "Repository", "retention": "Retention" } }, @@ -753,7 +751,6 @@ }, "edit_policy": { "update_policy": { - "growl": "The snapshot policy '{name}' was successfully updated." } } }, diff --git a/src/locales/fr.json b/src/locales/fr.json index f698c790..9e40dbba 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -700,8 +700,7 @@ }, "schedule": { "label": "Planification*", - "hint": "Expression cron (ex: '0 30 1 * * ?' pour tous les jours à 1h30)", - "required": "La planification est requise" + "hint": "Expression cron (ex: '0 30 1 * * ?' pour tous les jours à 1h30)" }, "repository": { }, @@ -738,7 +737,6 @@ "id": "ID", "name": "Nom", "schedule": "Planification", - "repository": "Dépôt", "retention": "Rétention" } }, @@ -753,7 +751,6 @@ }, "edit_policy": { "update_policy": { - "growl": "La politique de snapshot '{name}' a été mise à jour avec succès." } } }, diff --git a/src/locales/it.json b/src/locales/it.json index c968ca21..a8a1ddb6 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -700,8 +700,7 @@ }, "schedule": { "label": "Programmazione*", - "hint": "Espressione cron (es: '0 30 1 * * ?' per ogni giorno alle 1:30)", - "required": "La programmazione è richiesta" + "hint": "Espressione cron (es: '0 30 1 * * ?' per ogni giorno alle 1:30)" }, "repository": { }, @@ -738,7 +737,6 @@ "id": "ID", "name": "Nome", "schedule": "Programmazione", - "repository": "Repository", "retention": "Conservazione" } }, @@ -753,7 +751,6 @@ }, "edit_policy": { "update_policy": { - "growl": "La politica di snapshot '{name}' è stata aggiornata con successo." } } }, diff --git a/src/locales/jp.json b/src/locales/jp.json index c9a492a6..6a9a01ff 100644 --- a/src/locales/jp.json +++ b/src/locales/jp.json @@ -700,8 +700,7 @@ }, "schedule": { "label": "スケジュール*", - "hint": "Cron 式(例:'0 30 1 * * ?' は毎日午前 1:30)", - "required": "スケジュールは必須です" + "hint": "Cron 式(例:'0 30 1 * * ?' は毎日午前 1:30)" }, "repository": { }, @@ -738,7 +737,6 @@ "id": "ID", "name": "名前", "schedule": "スケジュール", - "repository": "リポジトリ", "retention": "保持" } }, @@ -753,7 +751,6 @@ }, "edit_policy": { "update_policy": { - "growl": "スナップショットポリシー '{name}' が正常に更新されました。" } } }, diff --git a/src/locales/ru.json b/src/locales/ru.json index 702c1e76..6d498fb8 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -700,8 +700,7 @@ }, "schedule": { "label": "Расписание*", - "hint": "Cron выражение (например, '0 30 1 * * ?' для ежедневного выполнения в 1:30)", - "required": "Расписание обязательно" + "hint": "Cron выражение (например, '0 30 1 * * ?' для ежедневного выполнения в 1:30)" }, "repository": { }, @@ -738,7 +737,6 @@ "id": "ID", "name": "Название", "schedule": "Расписание", - "repository": "Репозиторий", "retention": "Хранение" } }, @@ -753,7 +751,6 @@ }, "edit_policy": { "update_policy": { - "growl": "Политика снапшота '{name}' успешно обновлена." } } }, diff --git a/src/models/ElasticsearchIndex.ts b/src/models/ElasticsearchIndex.ts index 1e56bff2..17af99b2 100644 --- a/src/models/ElasticsearchIndex.ts +++ b/src/models/ElasticsearchIndex.ts @@ -16,7 +16,7 @@ export default class ElasticsearchIndex { parsedSegmentsCount: number | string created: number | string - constructor (options: EsIndex) { + constructor(options: EsIndex) { this.index = options.index this.health = options.health this.status = options.status @@ -33,7 +33,7 @@ export default class ElasticsearchIndex { } } -function parseIntValue (value: string) { +function parseIntValue(value: string) { if (!value) return '' try { diff --git a/src/models/ElasticsearchNode.ts b/src/models/ElasticsearchNode.ts index 9fb0bcc9..3f0af03b 100644 --- a/src/models/ElasticsearchNode.ts +++ b/src/models/ElasticsearchNode.ts @@ -27,7 +27,7 @@ export default class ElasticsearchNode { attributes: Record shards?: number | null - constructor (options: EsNode) { + constructor(options: EsNode) { this.name = options.name this.version = options.version this.id = options.id @@ -58,7 +58,7 @@ export default class ElasticsearchNode { this.setRoles(options['node.role']) } - setRoles (roles: string) { + setRoles(roles: string) { this.masterEligible = roles.includes('m') this.dataNode = roles.includes('d') this.ingestNode = roles.includes('i') @@ -66,10 +66,10 @@ export default class ElasticsearchNode { } } -function parseFloatValue (value: string) { +function parseFloatValue(value: string) { try { return parseFloat(value) } catch (_e) { return -1 } -} \ No newline at end of file +} diff --git a/src/models/SearchResults.ts b/src/models/SearchResults.ts index 8f5cff20..7022d5e7 100644 --- a/src/models/SearchResults.ts +++ b/src/models/SearchResults.ts @@ -9,17 +9,17 @@ export default class SearchResults { uniqueIndices: string[] docs: any[] - constructor (results: any[]) { + constructor(results: any[]) { this.columns = DEFAULT_SEARCH_RESULT_COLUMNS.slice() this.indices = [] this.docs = [] - results.forEach(result => this.add(result)) + results.forEach((result) => this.add(result)) this.uniqueColumns = Array.from(new Set(this.columns)) this.uniqueIndices = Array.from(new Set(this.indices)) } - add (result: any) { + add(result: any) { let key = '_source' if (!result._source && result.fields) key = 'fields' if (result[key]) { diff --git a/src/plugins/pinia.ts b/src/plugins/pinia.ts index bc1b3121..2a709510 100644 --- a/src/plugins/pinia.ts +++ b/src/plugins/pinia.ts @@ -2,4 +2,4 @@ import { createPinia } from 'pinia' import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' export const pinia = createPinia() -pinia.use(piniaPluginPersistedstate) \ No newline at end of file +pinia.use(piniaPluginPersistedstate) diff --git a/src/plugins/quasar.ts b/src/plugins/quasar.ts index 2cf0b8e5..66a42a96 100644 --- a/src/plugins/quasar.ts +++ b/src/plugins/quasar.ts @@ -7,5 +7,5 @@ import quasarIconSet from 'quasar/icon-set/svg-material-icons' export const quasarOptions = { plugins: {}, // import Quasar plugins and add here - iconSet: quasarIconSet, -} \ No newline at end of file + iconSet: quasarIconSet +} diff --git a/src/router.ts b/src/router.ts index d3555078..81312083 100644 --- a/src/router.ts +++ b/src/router.ts @@ -22,7 +22,7 @@ const routes = [ const connectionStore = useConnectionStore() const cluster = connectionStore.checkAndSetActiveCluster() - if (cluster) return ({ name: 'home', params: { clusterIndex: connectionStore.activeClusterIndex } }) + if (cluster) return { name: 'home', params: { clusterIndex: connectionStore.activeClusterIndex } } return { name: 'welcome' } } }, @@ -40,7 +40,7 @@ const routes = [ { path: 'search', name: 'search', component: SearchDocuments }, { path: 'rest', name: 'rest', component: RestQuery }, { path: 'snapshot_repositories', name: 'snapshot_repositories', component: SnapshotRepositories }, - { path: 'snapshot_repositories/:repositoryName', name: 'snapshots', component: RepositorySnapshots }, + { path: 'snapshot_repositories/:repositoryName', name: 'snapshots', component: RepositorySnapshots } ], beforeEnter: (to: RouteLocation, _from: RouteLocation, next: any) => { const connectionStore = useConnectionStore() @@ -72,10 +72,13 @@ const routes = [ } ] -const history = buildConfig.router.mode === 'webHashHistory' ? createWebHashHistory(buildConfig.router.base) : createWebHistory(buildConfig.router.base) +const history = + buildConfig.router.mode === 'webHashHistory' + ? createWebHashHistory(buildConfig.router.base) + : createWebHistory(buildConfig.router.base) const router = createRouter({ history, - routes, + routes }) router.afterEach((to) => { diff --git a/src/server/defaultClusters.js b/src/server/defaultClusters.js index e67a4dcb..ee203ea3 100644 --- a/src/server/defaultClusters.js +++ b/src/server/defaultClusters.js @@ -7,7 +7,7 @@ const getDefaultClusters = () => { return process.env[ENV_NAME]?.trim() } -const parseDefaultClusters = rawDefaultClusters => { +const parseDefaultClusters = (rawDefaultClusters) => { if (rawDefaultClusters.length > 0) { try { return JSON.parse(rawDefaultClusters) @@ -17,19 +17,19 @@ const parseDefaultClusters = rawDefaultClusters => { } } -const validateDefaultClusters = parsedDefaultClusters => { +const validateDefaultClusters = (parsedDefaultClusters) => { if (!Array.isArray(parsedDefaultClusters)) { errorExit(`${ENV_NAME} is not an array`, parsedDefaultClusters) } const validKeys = ['name', 'username', 'password', 'uri'] - parsedDefaultClusters.forEach(cluster => { + parsedDefaultClusters.forEach((cluster) => { if (!cluster.uri || cluster.uri.trim().length === 0) { errorExit('Cluster uri missing', cluster) } const keys = Object.keys(cluster) - keys.forEach(key => { + keys.forEach((key) => { if (!validKeys.includes(key)) { errorExit(`'${key}' is not a valid option. Use only these: ${validKeys}`) } @@ -58,4 +58,4 @@ const prepareDefaultClusters = () => { return parsedDefaultClusters } -module.exports = prepareDefaultClusters \ No newline at end of file +module.exports = prepareDefaultClusters diff --git a/src/services/ElasticsearchAdapter.ts b/src/services/ElasticsearchAdapter.ts index 3ed96763..d9c544af 100644 --- a/src/services/ElasticsearchAdapter.ts +++ b/src/services/ElasticsearchAdapter.ts @@ -22,7 +22,7 @@ export default class ElasticsearchAdapter { awsClient: AwsClient | null authHeader?: string - constructor ({ uri, auth }: ElasticsearchClusterConnection) { + constructor({ uri, auth }: ElasticsearchClusterConnection) { this.uri = addTrailingSlash(uri) if (auth.authType === AuthType.awsIAM) { @@ -31,19 +31,19 @@ export default class ElasticsearchAdapter { secretAccessKey: auth.authData.secretAccessKey, sessionToken: auth.authData.sessionToken, region: auth.authData.region, - service: 'es', + service: 'es' }) } this.authHeader = clusterAuthHeader(auth) } - call (method: ElasticsearchMethod, ...args: any[]): Promise { + call(method: ElasticsearchMethod, ...args: any[]): Promise { // @ts-expect-error dynamic function call return this[method](...args) } - async callInChunks ({ method, indices }: { method: keyof ElasticsearchAdapter, indices: string[] }) { + async callInChunks({ method, indices }: { method: keyof ElasticsearchAdapter; indices: string[] }) { const chunks = chunk(indices, MAX_INDICES_PER_REQUEST) const responses = [] @@ -57,58 +57,58 @@ export default class ElasticsearchAdapter { /** routes always available **/ - ping () { + ping() { return this.request('', 'GET') } - clusterInfo () { + clusterInfo() { return this.ping() } - catIndices (params: object, filter?: string) { + catIndices(params: object, filter?: string) { const query = filter ? `${filter}*` : '' return this.request(`_cat/indices/${query}`, 'GET', params) } - template () { + template() { return this.request('_template', 'GET') } - indexTemplate () { + indexTemplate() { return this.request('_index_template', 'GET') } - indexGetAlias ({ index }: { index: string }) { + indexGetAlias({ index }: { index: string }) { return this.request(`${cleanIndexName(index)}/_alias`, 'GET') } - indexAddAlias ({ index, alias }: { index: string, alias: string }) { + indexAddAlias({ index, alias }: { index: string; alias: string }) { return this.request(`${cleanIndexName(index)}/_alias/${alias}`, 'PUT') } - indexDeleteAlias ({ index, alias }: { index: string, alias: string }) { + indexDeleteAlias({ index, alias }: { index: string; alias: string }) { return this.request(`${cleanIndexName(index)}/_alias/${alias}`, 'DELETE') } - indexCreate ({ index, body }: { index: string, body?: object }) { + indexCreate({ index, body }: { index: string; body?: object }) { return this.request(`${cleanIndexName(index)}`, 'PUT', body) } - deleteByQuery ({ index }: { index: string }) { + deleteByQuery({ index }: { index: string }) { const body = { query: { match_all: {} } } return this.request(`${cleanIndexName(index)}/_delete_by_query?refresh=true`, 'POST', body) } - indexGet (params: Record) { + indexGet(params: Record) { const index = Array.isArray(params.index) ? params.index.join(',') : params.index return this.request(`${cleanIndexName(index)}`, 'GET') } - indexStats ({ index }: { index: string }) { + indexStats({ index }: { index: string }) { return this.request(`${cleanIndexName(index)}/_stats`, 'GET') } - indexDelete ({ indices }: { indices: string[] }) { + indexDelete({ indices }: { indices: string[] }) { if (indices.length > MAX_INDICES_PER_REQUEST) { return this.callInChunks({ method: 'indexDelete', indices }) } else { @@ -116,7 +116,7 @@ export default class ElasticsearchAdapter { } } - indexRefresh ({ indices }: { indices: string[] }) { + indexRefresh({ indices }: { indices: string[] }) { if (indices.length > MAX_INDICES_PER_REQUEST) { return this.callInChunks({ method: 'indexRefresh', indices }) } else { @@ -124,7 +124,7 @@ export default class ElasticsearchAdapter { } } - indexClearCache ({ indices }: { indices: string[] }) { + indexClearCache({ indices }: { indices: string[] }) { if (indices.length > MAX_INDICES_PER_REQUEST) { return this.callInChunks({ method: 'indexClearCache', indices }) } else { @@ -132,7 +132,7 @@ export default class ElasticsearchAdapter { } } - indexFlush ({ indices }: { indices: string[] }) { + indexFlush({ indices }: { indices: string[] }) { if (indices.length > MAX_INDICES_PER_REQUEST) { return this.callInChunks({ method: 'indexFlush', indices }) } else { @@ -140,46 +140,40 @@ export default class ElasticsearchAdapter { } } - indexExists ({ index }: { index: string }) { + indexExists({ index }: { index: string }) { return this.request(`${cleanIndexName(index)}`, 'HEAD') } - indexPutSettings ({ index, body }: { index: string, body: object }) { + indexPutSettings({ index, body }: { index: string; body: object }) { return this.request(`${cleanIndexName(index)}/_settings`, 'PUT', body) } - reindex ({ source, dest }: { source: string, dest: string }) { + reindex({ source, dest }: { source: string; dest: string }) { return this.request('_reindex?wait_for_completion=false', 'POST', { source: { index: source }, dest: { index: dest } }) } - index ({ index, type, id, routing, params }: { - index: string, - type: string, - id: any, - routing: string, - params: any - }) { + index({ index, type, id, routing, params }: { index: string; type: string; id: any; routing: string; params: any }) { let path = `${cleanIndexName(index)}/${type}/${encodeURIComponent(id)}?refresh=true` if (routing) path += `&routing=${routing}` return this.request(path, 'PUT', params) } - get ({ index, type, id, routing }: { index: string, type: string, id: any, routing?: string }) { + get({ index, type, id, routing }: { index: string; type: string; id: any; routing?: string }) { const params: IndexGetArgs = {} if (routing) params.routing = routing return this.request(`${cleanIndexName(index)}/${type}/${encodeURIComponent(id)}`, 'GET', params) } - delete ({ index, type, id, routing }: { index: string, type: string, id: any, routing?: string }) { + delete({ index, type, id, routing }: { index: string; type: string; id: any; routing?: string }) { let path = `${cleanIndexName(index)}/${type}/${encodeURIComponent(id)}?refresh=true` if (routing) path += `&routing=${routing}` return this.request(path, 'DELETE') } - search (params: object, searchIndex?: string | string[]) { + search(params: object, searchIndex?: string | string[]) { const index = Array.isArray(searchIndex) ? searchIndex.join(',') : searchIndex if (index && index.length > 0) { @@ -189,42 +183,45 @@ export default class ElasticsearchAdapter { } } - docsBulkDelete (documents: any[]) { - const body = documents.map(str => { - const matches = str.split(/####(.*)####(.*)/) - return JSON.stringify({ delete: { _index: matches[0], _id: matches[2] } }) - }).join('\r\n') + '\r\n' + docsBulkDelete(documents: any[]) { + const body = + documents + .map((str) => { + const matches = str.split(/####(.*)####(.*)/) + return JSON.stringify({ delete: { _index: matches[0], _id: matches[2] } }) + }) + .join('\r\n') + '\r\n' return this.request('_bulk?refresh=true', 'POST', body) } /** routes only available in default elasticsearch, but not in serverless **/ - clusterHealth () { + clusterHealth() { return this.request('_cluster/health', 'GET') } - clusterStats () { + clusterStats() { return this.request('_cluster/stats', 'GET') } - clusterReroute (commands: object) { + clusterReroute(commands: object) { return this.request('_cluster/reroute', 'POST', { commands }) } - catShards (params: object, filter?: string) { + catShards(params: object, filter?: string) { const query = filter ? `${filter}*` : '' return this.request(`_cat/shards/${query}`, 'GET', params) } - catRecovery () { + catRecovery() { return this.request('_cat/recovery?s=start_time_millis:desc', 'GET') } - recovery () { + recovery() { return this.request('_recovery', 'GET') } - indexClose ({ indices }: { indices: string[] }) { + indexClose({ indices }: { indices: string[] }) { if (indices.length > MAX_INDICES_PER_REQUEST) { return this.callInChunks({ method: 'indexClose', indices }) } else { @@ -232,7 +229,7 @@ export default class ElasticsearchAdapter { } } - indexOpen ({ indices }: { indices: string[] }) { + indexOpen({ indices }: { indices: string[] }) { if (indices.length > MAX_INDICES_PER_REQUEST) { return this.callInChunks({ method: 'indexOpen', indices }) } else { @@ -240,7 +237,7 @@ export default class ElasticsearchAdapter { } } - indexForcemerge ({ indices }: { indices: string[] }) { + indexForcemerge({ indices }: { indices: string[] }) { if (indices.length > MAX_INDICES_PER_REQUEST) { return this.callInChunks({ method: 'indexForcemerge', indices }) } else { @@ -248,75 +245,75 @@ export default class ElasticsearchAdapter { } } - catNodes (params: object) { + catNodes(params: object) { return this.request('_cat/nodes', 'GET', params) } - nodes () { + nodes() { return this.request('_nodes', 'GET') } - catRepositories (params: object) { + catRepositories(params: object) { return this.request('_snapshot', 'GET', params) } - catSnapshots ({ repository }: { repository: string }) { + catSnapshots({ repository }: { repository: string }) { return this.request(`_snapshot/${repository}/_all`, 'GET') } - snapshotCreateRepository ({ repository, body }: { repository: string, body: object }) { + snapshotCreateRepository({ repository, body }: { repository: string; body: object }) { return this.request(`_snapshot/${repository}`, 'PUT', body) } - snapshotDeleteRepository ({ repository }: { repository: string }) { + snapshotDeleteRepository({ repository }: { repository: string }) { return this.request(`_snapshot/${repository}`, 'DELETE') } - snapshotCreate ({ repository, snapshot, body }: { repository: string, snapshot: string, body: object }) { + snapshotCreate({ repository, snapshot, body }: { repository: string; snapshot: string; body: object }) { return this.request(`_snapshot/${repository}/${snapshot}`, 'PUT', body) } - snapshotDelete ({ repository, snapshot }: { repository: string, snapshot: string }) { + snapshotDelete({ repository, snapshot }: { repository: string; snapshot: string }) { return this.request(`_snapshot/${repository}/${snapshot}`, 'DELETE') } - snapshotRestore ({ repository, snapshot, body }: { repository: string, snapshot: string, body: object }) { + snapshotRestore({ repository, snapshot, body }: { repository: string; snapshot: string; body: object }) { return this.request(`_snapshot/${repository}/${snapshot}/_restore`, 'POST', body) } - getSnapshot ({ repository, snapshot }: { repository: string, snapshot: string }) { + getSnapshot({ repository, snapshot }: { repository: string; snapshot: string }) { return this.request(`_snapshot/${repository}/${snapshot}`, 'GET') } - catSlmPolicies () { + catSlmPolicies() { return this.request('_slm/policy', 'GET') } - slmGetPolicy ({ policy }: { policy: string }) { + slmGetPolicy({ policy }: { policy: string }) { return this.request(`_slm/policy/${policy}`, 'GET') } - slmPutPolicy ({ policy, body }: { policy: string, body: object }) { + slmPutPolicy({ policy, body }: { policy: string; body: object }) { return this.request(`_slm/policy/${policy}`, 'PUT', body) } - slmDeletePolicy ({ policy }: { policy: string }) { + slmDeletePolicy({ policy }: { policy: string }) { return this.request(`_slm/policy/${policy}`, 'DELETE') } - slmExecutePolicy ({ policy }: { policy: string }) { + slmExecutePolicy({ policy }: { policy: string }) { return this.request(`_slm/policy/${policy}/_execute`, 'POST') } - slmGetStatus () { + slmGetStatus() { return this.request('_slm/status', 'GET') } - async request (path: string, method: string, params?: any) { + async request(path: string, method: string, params?: any) { const url = new URL(this.uri + path) if (method === 'GET' && typeof params === 'object') { - Object.keys(params).forEach(key => url.searchParams.append(key, params[key])) + Object.keys(params).forEach((key) => url.searchParams.append(key, params[key])) } let body = null @@ -342,21 +339,22 @@ export default class ElasticsearchAdapter { return new Promise((resolve, reject) => { return fetchMethod(url, options) - .then(response => { - if (options.method === 'HEAD') { - return resolve(response.ok) - } - - if (response.ok) { - resolve(response) - } else { - reject(response) - } - }).catch(reject) + .then((response) => { + if (options.method === 'HEAD') { + return resolve(response.ok) + } + + if (response.ok) { + resolve(response) + } else { + reject(response) + } + }) + .catch(reject) }) } - async test () { + async test() { try { const info = await this.ping() await this.search({ size: 0 }) diff --git a/src/services/Uuid.ts b/src/services/Uuid.ts index 20bac683..30768430 100644 --- a/src/services/Uuid.ts +++ b/src/services/Uuid.ts @@ -10,4 +10,4 @@ export const setUuid = () => { export const getUuid = () => { return localStorage.getItem(key) -} \ No newline at end of file +} diff --git a/src/services/migrations.ts b/src/services/migrations.ts index e723b295..5bf9aa36 100644 --- a/src/services/migrations.ts +++ b/src/services/migrations.ts @@ -35,7 +35,7 @@ export const migrate = () => { } export const migrateAuthType = (clusters: OldElasticsearchCluster[]): ElasticsearchCluster[] => { - return clusters.map(cluster => { + return clusters.map((cluster) => { let authType: AuthType let authData: unknown @@ -60,4 +60,4 @@ export const migrateAuthType = (clusters: OldElasticsearchCluster[]): Elasticsea } as ElasticsearchClusterAuth } }) -} \ No newline at end of file +} diff --git a/src/store/codeEditor.ts b/src/store/codeEditor.ts index 0788fde9..1b62a2b5 100644 --- a/src/store/codeEditor.ts +++ b/src/store/codeEditor.ts @@ -1,7 +1,7 @@ import { defineStore } from 'pinia' type CodeEditorState = { - wrapLines: boolean, + wrapLines: boolean vimMode: boolean } diff --git a/src/store/connection.ts b/src/store/connection.ts index 68babae0..15257087 100644 --- a/src/store/connection.ts +++ b/src/store/connection.ts @@ -9,7 +9,7 @@ export enum AuthType { none = 'none', basicAuth = 'basicAuth', apiKey = 'apiKey', - awsIAM = 'awsIAM', + awsIAM = 'awsIAM' } export type ElasticsearchCluster = { @@ -30,22 +30,26 @@ export type ElasticsearchClusterConnection = { auth: ElasticsearchClusterAuth } -export type ElasticsearchClusterAuth = { - authType: AuthType.none, - authData: object -} | { - authType: AuthType.basicAuth, - authData: { username: string, password: string } -} | { - authType: AuthType.apiKey, - authData: { apiKey: string } -} | { - authType: AuthType.awsIAM, - authData: { accessKeyId: string, secretAccessKey: string, sessionToken?: string, region: string } -} +export type ElasticsearchClusterAuth = + | { + authType: AuthType.none + authData: object + } + | { + authType: AuthType.basicAuth + authData: { username: string; password: string } + } + | { + authType: AuthType.apiKey + authData: { apiKey: string } + } + | { + authType: AuthType.awsIAM + authData: { accessKeyId: string; secretAccessKey: string; sessionToken?: string; region: string } + } export type ConnectionState = { - clusters: ElasticsearchCluster[], + clusters: ElasticsearchCluster[] activeClusterIndex: number | null } @@ -57,44 +61,43 @@ export const useConnectionStore = defineStore('connection', { } }, getters: { - activeCluster (): ElasticsearchCluster | null { + activeCluster(): ElasticsearchCluster | null { if (typeof this.activeClusterIndex !== 'number') return null return this.clusters[this.activeClusterIndex] }, - serverless (): boolean { + serverless(): boolean { if (typeof this.activeClusterIndex !== 'number') return false return this.clusters[this.activeClusterIndex].flavor === BuildFlavor.serverless } }, actions: { - addCluster (cluster: ElasticsearchCluster) { + addCluster(cluster: ElasticsearchCluster) { const len = this.clusters.push(Object.assign({}, cluster)) this.activeClusterIndex = len - 1 return this.activeClusterIndex }, - updateCluster ({ cluster, index }: { cluster: ElasticsearchClusterConnection, index: number }) { + updateCluster({ cluster, index }: { cluster: ElasticsearchClusterConnection; index: number }) { const old = this.clusters[index] this.clusters[index] = cleanupClusterAuth(Object.assign({}, old, cluster)) }, - removeCluster (index: number) { + removeCluster(index: number) { this.clusters.splice(index, 1) }, - checkAndSetActiveCluster () { + checkAndSetActiveCluster() { if (this.activeClusterIndex === null || this.clusters.length === 0) return if (!this.clusters[this.activeClusterIndex]) this.activeClusterIndex = 0 return this.clusters[this.activeClusterIndex] }, - validateAndSetClusterIndex (index: string) { + validateAndSetClusterIndex(index: string) { if (index === null || this.clusters.length === 0) return let clusterIndex: number = 0 try { clusterIndex = parseInt(index) - } catch (_e) { - } + } catch (_e) {} - if (isNaN(clusterIndex) || (clusterIndex + 1) > this.clusters.length || clusterIndex < 0) { + if (isNaN(clusterIndex) || clusterIndex + 1 > this.clusters.length || clusterIndex < 0) { this.activeClusterIndex = 0 return false } else { @@ -151,4 +154,4 @@ const cleanupClusterAuth = (cluster: ElasticsearchCluster): ElasticsearchCluster } } } -} \ No newline at end of file +} diff --git a/src/store/i18n.ts b/src/store/i18n.ts index dd2a0824..3e5c4cce 100644 --- a/src/store/i18n.ts +++ b/src/store/i18n.ts @@ -11,7 +11,7 @@ export const useI18nStore = defineStore('i18n', { language: defaultLocale() }), actions: { - setLanguage (language: ValidLocale) { + setLanguage(language: ValidLocale) { this.language = language } }, diff --git a/src/store/indexTemplates.ts b/src/store/indexTemplates.ts index 57a323b8..75a7fb97 100644 --- a/src/store/indexTemplates.ts +++ b/src/store/indexTemplates.ts @@ -1,10 +1,10 @@ import { defineStore } from 'pinia' type IndexTemplatesState = { - filter: string, - showHiddenIndices: boolean, - stickyTableHeader: boolean, - pagination: any, + filter: string + showHiddenIndices: boolean + stickyTableHeader: boolean + pagination: any } export const useIndexTemplatesStore = defineStore('indexTemplates', { @@ -16,7 +16,7 @@ export const useIndexTemplatesStore = defineStore('indexTemplates', { sortBy: 'name', descending: false, rowsPerPage: 10 - }, + } }), persist: { pick: [ @@ -25,7 +25,7 @@ export const useIndexTemplatesStore = defineStore('indexTemplates', { 'stickyTableHeader', 'pagination.sortBy', 'pagination.descending', - 'pagination.rowsPerPage', + 'pagination.rowsPerPage' ] } }) diff --git a/src/store/indices.ts b/src/store/indices.ts index 8ad60edf..58b2454e 100644 --- a/src/store/indices.ts +++ b/src/store/indices.ts @@ -2,11 +2,11 @@ import { defineStore } from 'pinia' import { DEFAULT_HIDE_INDICES_REGEX } from '../consts' type IndicesState = { - filter: string, - showHiddenIndices: boolean, - stickyTableHeader: boolean, - hideIndicesRegex: string, - pagination: any, + filter: string + showHiddenIndices: boolean + stickyTableHeader: boolean + hideIndicesRegex: string + pagination: any rowsPerPageAccepted: boolean } diff --git a/src/store/modal.ts b/src/store/modal.ts index bb47b4fe..c9a27474 100644 --- a/src/store/modal.ts +++ b/src/store/modal.ts @@ -2,8 +2,8 @@ import { defineStore } from 'pinia' import { ElasticsearchMethod } from '../services/ElasticsearchAdapter.ts' type ModalState = { - show: boolean, - method: ElasticsearchMethod, + show: boolean + method: ElasticsearchMethod methodParams: any } @@ -14,7 +14,7 @@ export const useModalStore = defineStore('modal', { methodParams: null }), actions: { - setShow (show: boolean) { + setShow(show: boolean) { this.show = show if (!show) { @@ -22,10 +22,10 @@ export const useModalStore = defineStore('modal', { this.methodParams = {} } }, - setMethod (method: ElasticsearchMethod) { + setMethod(method: ElasticsearchMethod) { this.method = method }, - setMethodParams (methodParams: any = null) { + setMethodParams(methodParams: any = null) { this.methodParams = methodParams } } diff --git a/src/store/resize.ts b/src/store/resize.ts index a98b588a..66ab6df5 100644 --- a/src/store/resize.ts +++ b/src/store/resize.ts @@ -1,13 +1,13 @@ import { defineStore } from 'pinia' type ResizeState = { - indicesTable: number, - indexTemplatesTable: number, - shardRecoveryTable: number, - modalLoaderCodeViewer: number, - restForm: number, - searchQuery: number, - searchTable: number, + indicesTable: number + indexTemplatesTable: number + shardRecoveryTable: number + modalLoaderCodeViewer: number + restForm: number + searchQuery: number + searchTable: number documentEdit: number } diff --git a/src/store/search.ts b/src/store/search.ts index 0b4afe20..74130b70 100644 --- a/src/store/search.ts +++ b/src/store/search.ts @@ -37,7 +37,7 @@ export const useSearchStore = () => { documentFieldMaxLength: DEFAULT_DOCUMENT_FIELD_MAX_LENGTH }), actions: { - resetSearchQuery () { + resetSearchQuery() { this.q = '*' this.searchQuery = DEFAULT_SEARCH_QUERY this.pagination = Object.assign({}, DEFAULT_PAGINATION) @@ -61,4 +61,4 @@ export const useSearchStore = () => { key: `search-${clusterUuid}` } })() -} \ No newline at end of file +} diff --git a/src/store/shardRecovery.ts b/src/store/shardRecovery.ts index b7040595..229f250c 100644 --- a/src/store/shardRecovery.ts +++ b/src/store/shardRecovery.ts @@ -1,9 +1,9 @@ import { defineStore } from 'pinia' type ShardRecoveryState = { - filter: string, - stickyTableHeader: boolean, - pagination: any, + filter: string + stickyTableHeader: boolean + pagination: any } export const useShardRecoveryStore = defineStore('shardRecovery', { @@ -14,15 +14,9 @@ export const useShardRecoveryStore = defineStore('shardRecovery', { sortBy: 'start_time_in_millis', descending: false, rowsPerPage: 10 - }, + } }), persist: { - pick: [ - 'filter', - 'stickyTableHeader', - 'pagination.sortBy', - 'pagination.descending', - 'pagination.rowsPerPage', - ] + pick: ['filter', 'stickyTableHeader', 'pagination.sortBy', 'pagination.descending', 'pagination.rowsPerPage'] } }) diff --git a/src/store/shards.ts b/src/store/shards.ts index 32cff5b2..e9073a23 100644 --- a/src/store/shards.ts +++ b/src/store/shards.ts @@ -9,8 +9,6 @@ export const useShardsStore = defineStore('shards', { filter: '' }), persist: { - pick: [ - 'filter' - ] + pick: ['filter'] } }) diff --git a/src/store/snackbar.ts b/src/store/snackbar.ts index 96f07e46..faf10d00 100644 --- a/src/store/snackbar.ts +++ b/src/store/snackbar.ts @@ -2,12 +2,12 @@ import { defineStore } from 'pinia' import { SnackbarOptions } from '../composables/Snackbar' interface SnackbarState { - visible: boolean, - timeout: number, - color: string | null, - title: string, - body: string, - copyableText: string, + visible: boolean + timeout: number + color: string | null + title: string + body: string + copyableText: string id: number | null } @@ -22,7 +22,7 @@ export const useSnackbarStore = defineStore('snackbar', { id: null }), actions: { - show (props: SnackbarOptions) { + show(props: SnackbarOptions) { this.visible = false this.timeout = -1 this.color = null diff --git a/src/store/theme.ts b/src/store/theme.ts index 74adf523..3f975c23 100644 --- a/src/store/theme.ts +++ b/src/store/theme.ts @@ -12,7 +12,7 @@ export enum AppThemes { } export type ThemeState = { - preference: ThemePreferences, + preference: ThemePreferences appTheme: AppThemes } @@ -22,7 +22,7 @@ export const useThemeStore = defineStore('theme', { appTheme: window.matchMedia('(prefers-color-scheme: light)').matches ? AppThemes.light : AppThemes.dark }), actions: { - setPreference (preference: ThemePreferences) { + setPreference(preference: ThemePreferences) { this.preference = preference if (preference === ThemePreferences.auto) { diff --git a/src/types/env.d.ts b/src/types/env.d.ts index b175d392..409139b4 100644 --- a/src/types/env.d.ts +++ b/src/types/env.d.ts @@ -6,4 +6,4 @@ interface ImportMetaEnv { interface ImportMeta { readonly env: ImportMetaEnv -} \ No newline at end of file +} diff --git a/src/types/shims.d.ts b/src/types/shims.d.ts index 344a4b7c..251f45ce 100644 --- a/src/types/shims.d.ts +++ b/src/types/shims.d.ts @@ -14,10 +14,9 @@ declare module '*.vue' { export default component } - declare interface RestQueryRequestLike { id?: number method: string body: string path: string -} \ No newline at end of file +} diff --git a/src/types/types.ts b/src/types/types.ts index 4995a0d7..94480db0 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -1,23 +1,23 @@ export type EsNode = { - name: string, - id: string, - ip: string, - version: string, - 'heap.percent': string, - 'heap.current': string, - 'heap.max': string, - 'ram.percent': string, - 'ram.current': string, - 'ram.max': string, - 'disk.used_percent': string, - 'disk.used': string, - 'disk.total': string, - cpu: string, - load_1m: string, - load_5m: string, - load_15m: string, - 'node.role': string, - master: string, + name: string + id: string + ip: string + version: string + 'heap.percent': string + 'heap.current': string + 'heap.max': string + 'ram.percent': string + 'ram.current': string + 'ram.max': string + 'disk.used_percent': string + 'disk.used': string + 'disk.total': string + cpu: string + load_1m: string + load_5m: string + load_15m: string + 'node.role': string + master: string attributes: Record shards?: string } @@ -32,4 +32,4 @@ type NodeAttribute = { attr: Record } } -} \ No newline at end of file +} From 23dd378e5444d32598566e35f55e129565b22c66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Wed, 8 Oct 2025 21:52:26 +0200 Subject: [PATCH 10/46] small ui fixes --- src/assets/stylesheets/quasar/q-btn.css | 2 +- src/components/repositories/RepositoryPolicies.vue | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/assets/stylesheets/quasar/q-btn.css b/src/assets/stylesheets/quasar/q-btn.css index cfa70f6c..817daa39 100644 --- a/src/assets/stylesheets/quasar/q-btn.css +++ b/src/assets/stylesheets/quasar/q-btn.css @@ -2,6 +2,6 @@ font-weight: initial !important; } -.q-btn-group .q-btn:first-child { +.q-btn-group .q-btn:not(:last-child) { border-right: 2px solid var(--theme-menu-separator-background); } diff --git a/src/components/repositories/RepositoryPolicies.vue b/src/components/repositories/RepositoryPolicies.vue index 497ccbf8..33183d27 100644 --- a/src/components/repositories/RepositoryPolicies.vue +++ b/src/components/repositories/RepositoryPolicies.vue @@ -15,10 +15,9 @@ -

{{ t('repositories.repository_policies.repository', { repository }) }}

- -
+
+ {{ t('repositories.repository_policies.repository', { repository }) }}
@@ -74,8 +73,8 @@ const retentionFormat = (retention: SnapshotPolicyRetention | undefined) => { if (!retention) return '' return [ retention?.expire_after, - retention?.max_count ? `max ${retention?.max_count}` : '', - retention?.min_count ? `min ${retention?.min_count}` : '' + retention?.max_count ? `max ${retention?.max_count}` : null, + retention?.min_count ? `min ${retention?.min_count}` : null ] .filter(Boolean) .join(', ') From 50b3a1e9eb5cc2e95b72c93ab56be99ec0e47851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Thu, 9 Oct 2025 21:50:13 +0200 Subject: [PATCH 11/46] fix #302 --- .../EditRepositorySnapshotPolicy.vue | 53 ++++++ .../NewRepositorySnapshotPolicy.vue | 108 +----------- .../repositories/RepositoryPolicies.vue | 11 +- .../RepositorySnapshotPolicyForm.vue | 138 ++++++++++++++++ .../EditRepositorySnapshotPolicy.ts | 155 ++++++++++++++++++ .../NewRepositorySnapshotPolicy.ts | 4 +- .../repositories/RepositoryPolicies.ts | 13 +- src/locales/cn.json | 7 +- src/locales/en.json | 7 +- src/locales/fr.json | 7 +- src/locales/it.json | 7 +- src/locales/jp.json | 7 +- src/locales/ru.json | 7 +- 13 files changed, 406 insertions(+), 118 deletions(-) create mode 100644 src/components/repositories/EditRepositorySnapshotPolicy.vue create mode 100644 src/components/repositories/RepositorySnapshotPolicyForm.vue create mode 100644 src/composables/components/repositories/EditRepositorySnapshotPolicy.ts diff --git a/src/components/repositories/EditRepositorySnapshotPolicy.vue b/src/components/repositories/EditRepositorySnapshotPolicy.vue new file mode 100644 index 00000000..77959cb9 --- /dev/null +++ b/src/components/repositories/EditRepositorySnapshotPolicy.vue @@ -0,0 +1,53 @@ + + + diff --git a/src/components/repositories/NewRepositorySnapshotPolicy.vue b/src/components/repositories/NewRepositorySnapshotPolicy.vue index 7b80cc7e..5bc01a06 100644 --- a/src/components/repositories/NewRepositorySnapshotPolicy.vue +++ b/src/components/repositories/NewRepositorySnapshotPolicy.vue @@ -12,104 +12,13 @@ - - - - - - - - - - - - - - - - -
{{ t('snapshot_policies.new_policy.form.retention.heading') }}
- - - - - - -
- - - - - -
+ @@ -117,10 +26,9 @@ diff --git a/src/components/repositories/RepositorySnapshotPolicyForm.vue b/src/components/repositories/RepositorySnapshotPolicyForm.vue new file mode 100644 index 00000000..978c2d83 --- /dev/null +++ b/src/components/repositories/RepositorySnapshotPolicyForm.vue @@ -0,0 +1,138 @@ + + + diff --git a/src/composables/components/repositories/EditRepositorySnapshotPolicy.ts b/src/composables/components/repositories/EditRepositorySnapshotPolicy.ts new file mode 100644 index 00000000..e9edb3a8 --- /dev/null +++ b/src/composables/components/repositories/EditRepositorySnapshotPolicy.ts @@ -0,0 +1,155 @@ +import { useTranslation } from '../../i18n' +import { computed, ref, watch, type Ref } from 'vue' +import { defineElasticsearchRequest } from '../../CallElasticsearch' +import { useElasticsearchAdapter } from '../../CallElasticsearch' +import type { SnapshotPolicyForm, SnapshotPolicyRequestBody, ElasticsearchResponse } from '../../../types/snapshotPolicies' + +export const useEditRepositorySnapshotPolicy = (emit: any, repository: string, policyId: Ref) => { + const t = useTranslation() + const { callElasticsearch } = useElasticsearchAdapter() + + const dialog = ref(false) + const policy = ref({ + id: '', + name: '', + schedule: '', + repository: repository, + indices: '*', + ignoreUnavailable: false, + includeGlobalState: true, + retentionExpireAfter: '', + retentionMaxCount: null, + retentionMinCount: null + }) + + const formValid = computed(() => policy.value.name.length > 0 && policy.value.schedule.length > 0) + + watch(policyId, async (newPolicyId) => { + if (newPolicyId && dialog.value) { + await loadPolicy() + } + }) + + const loadPolicy = async () => { + try { + const response = await callElasticsearch('slmGetPolicy', { policy: policyId.value }) + + let policyData = null + + if (response[policyId.value]?.policy) { + // Structure: { policyId: { policy: {...} } } + policyData = response[policyId.value].policy + } else if (response.policy) { + // Structure: { policy: {...} } + policyData = response.policy + } else if (response[policyId.value]) { + // Structure: { policyId: {...} } + policyData = response[policyId.value] + } + + if (policyData) { + policy.value = { + id: policyId.value, + name: policyData.name || '', + schedule: policyData.schedule || '', + repository: policyData.repository || repository, + indices: policyData.config?.indices?.join(', ') || '*', + ignoreUnavailable: policyData.config?.ignore_unavailable || false, + includeGlobalState: policyData.config?.include_global_state ?? true, + retentionExpireAfter: policyData.retention?.expire_after || '', + retentionMaxCount: policyData.retention?.max_count || null, + retentionMinCount: policyData.retention?.min_count || null + } + } + } catch (error) { + console.error('Failed to load policy:', error) + } + } + + const resetForm = () => { + policy.value = { + id: '', + name: '', + schedule: '', + repository: repository, + indices: '*', + ignoreUnavailable: false, + includeGlobalState: true, + retentionExpireAfter: '', + retentionMaxCount: null, + retentionMinCount: null + } + } + + const closeDialog = () => { + resetForm() + dialog.value = false + } + + const openDialog = async () => { + dialog.value = true + await loadPolicy() + } + + const { run, loading } = defineElasticsearchRequest({ + emit: (event: string) => emit(event as 'reload'), + method: 'slmPutPolicy' + }) + + const updatePolicy = async () => { + if (!formValid.value) return + + const policyBody: SnapshotPolicyRequestBody = { + name: policy.value.name, + schedule: policy.value.schedule, + repository: policy.value.repository, + config: { + indices: policy.value.indices + .split(',') + .map((i: string) => i.trim()) + .filter((i: string) => i.length > 0), + ignore_unavailable: policy.value.ignoreUnavailable, + include_global_state: policy.value.includeGlobalState + } + } + + if (policy.value.retentionExpireAfter || policy.value.retentionMaxCount || policy.value.retentionMinCount) { + policyBody.retention = {} + if (policy.value.retentionExpireAfter) { + policyBody.retention.expire_after = policy.value.retentionExpireAfter + } + if (policy.value.retentionMaxCount) { + policyBody.retention.max_count = policy.value.retentionMaxCount + } + if (policy.value.retentionMinCount) { + policyBody.retention.min_count = policy.value.retentionMinCount + } + } + + const success = await run({ + params: { + policy: policy.value.id, + body: policyBody + }, + snackbarOptions: (body: ElasticsearchResponse) => { + return { + title: t('snapshot_policies.edit_policy.update_policy.growl', { name: policy.value.name }), + body: JSON.stringify(body) + } + } + }) + + if (success) closeDialog() + } + + return { + dialog, + policy, + formValid, + loading, + updatePolicy, + resetForm, + closeDialog, + openDialog + } +} diff --git a/src/composables/components/repositories/NewRepositorySnapshotPolicy.ts b/src/composables/components/repositories/NewRepositorySnapshotPolicy.ts index 25302523..c423f91e 100644 --- a/src/composables/components/repositories/NewRepositorySnapshotPolicy.ts +++ b/src/composables/components/repositories/NewRepositorySnapshotPolicy.ts @@ -11,7 +11,7 @@ export const useNewRepositorySnapshotPolicy = (emit: any, repository: string) => id: '', name: '', schedule: '', - repository: repository, // Pre-set the repository + repository, indices: '*', ignoreUnavailable: false, includeGlobalState: true, @@ -27,7 +27,7 @@ export const useNewRepositorySnapshotPolicy = (emit: any, repository: string) => id: '', name: '', schedule: '', - repository: repository, + repository, indices: '*', ignoreUnavailable: false, includeGlobalState: true, diff --git a/src/composables/components/repositories/RepositoryPolicies.ts b/src/composables/components/repositories/RepositoryPolicies.ts index 7a6112e2..a4abda0e 100644 --- a/src/composables/components/repositories/RepositoryPolicies.ts +++ b/src/composables/components/repositories/RepositoryPolicies.ts @@ -30,6 +30,8 @@ export const useRepositoryPolicies = (props: RepositoryPoliciesProps, emit: any) const dialog = ref(false) const policies = ref([]) + const selectedPolicyId = ref('') + const editDialog = ref(null) watch(dialog, (value) => { if (value) { @@ -76,8 +78,11 @@ export const useRepositoryPolicies = (props: RepositoryPoliciesProps, emit: any) }).then(() => loadPolicies()) } - const editPolicy = (_name: string) => { - // This would open the edit dialog - for now just show a message + const editPolicy = (name: string) => { + selectedPolicyId.value = name + if (editDialog.value) { + editDialog.value.openDialog() + } } const columns = genColumns([ @@ -95,6 +100,8 @@ export const useRepositoryPolicies = (props: RepositoryPoliciesProps, emit: any) executePolicy, editPolicy, deletePolicy, - columns + columns, + selectedPolicyId, + editDialog } } diff --git a/src/locales/cn.json b/src/locales/cn.json index 7e41935a..8d29735c 100644 --- a/src/locales/cn.json +++ b/src/locales/cn.json @@ -48,6 +48,7 @@ "cancel": "取消", "close": "关闭", "create": "创建", + "update": "更新", "delete": "删除", "success": "成功", "bulk": "批量操作", @@ -393,7 +394,8 @@ "text": "策略", "heading": "管理快照策略", "repository": "存储库:{repository}", - "new_policy": "新策略" + "new_policy": "新策略", + "edit_policy": "编辑策略" } }, "search": { @@ -718,7 +720,7 @@ "heading": "保留设置", "expire_after": { "label": "过期时间", - "hint": "快照过期的时间段(例如,'30d'、'1w'、'1m')" + "hint": "快照过期的时间段(例如,'3d'、'12h')" }, "max_count": { "label": "最大数量", @@ -751,6 +753,7 @@ }, "edit_policy": { "update_policy": { + "growl": "快照策略 '{name}' 已成功更新。" } } }, diff --git a/src/locales/en.json b/src/locales/en.json index 39bd433f..922a6710 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -48,6 +48,7 @@ "cancel": "Cancel", "close": "Close", "create": "Create", + "update": "Update", "delete": "Delete", "success": "Success", "bulk": "Bulk Action", @@ -393,7 +394,8 @@ "text": "Policies", "heading": "Manage Snapshot Policies", "repository": "Repository: {repository}", - "new_policy": "New Policy" + "new_policy": "New Policy", + "edit_policy": "Edit Policy" } }, "search": { @@ -718,7 +720,7 @@ "heading": "Retention Settings", "expire_after": { "label": "Expire after", - "hint": "Time period after which snapshots expire (e.g., '30d', '1w', '1m')" + "hint": "Time period after which snapshots expire (e.g., '3d', '12h')" }, "max_count": { "label": "Maximum count", @@ -751,6 +753,7 @@ }, "edit_policy": { "update_policy": { + "growl": "The snapshot policy '{name}' was successfully updated." } } }, diff --git a/src/locales/fr.json b/src/locales/fr.json index 9e40dbba..59503083 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -48,6 +48,7 @@ "cancel": "Annuler", "close": "Fermer", "create": "Créer", + "update": "Mettre à jour", "delete": "Supprimer", "success": "Succès", "bulk": "Action groupée", @@ -393,7 +394,8 @@ "text": "Politiques", "heading": "Gérer les Politiques de Snapshot", "repository": "Dépôt : {repository}", - "new_policy": "Nouvelle Politique" + "new_policy": "Nouvelle Politique", + "edit_policy": "Modifier la Politique" } }, "search": { @@ -718,7 +720,7 @@ "heading": "Paramètres de Rétention", "expire_after": { "label": "Expire après", - "hint": "Période après laquelle les snapshots expirent (ex: '30d', '1w', '1m')" + "hint": "Période après laquelle les snapshots expirent (ex: '3d', '12h')" }, "max_count": { "label": "Nombre maximum", @@ -751,6 +753,7 @@ }, "edit_policy": { "update_policy": { + "growl": "La politique de snapshot '{name}' a été mise à jour avec succès." } } }, diff --git a/src/locales/it.json b/src/locales/it.json index a8a1ddb6..8d85be37 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -48,6 +48,7 @@ "cancel": "Annulla", "close": "Chiudi", "create": "Crea", + "update": "Aggiorna", "delete": "Elimina", "success": "Successo", "bulk": "Azione di massa", @@ -393,7 +394,8 @@ "text": "Politiche", "heading": "Gestisci Politiche Snapshot", "repository": "Repository: {repository}", - "new_policy": "Nuova Politica" + "new_policy": "Nuova Politica", + "edit_policy": "Modifica Politica" } }, "search": { @@ -718,7 +720,7 @@ "heading": "Impostazioni di Conservazione", "expire_after": { "label": "Scade dopo", - "hint": "Periodo di tempo dopo il quale gli snapshot scadono (es: '30d', '1w', '1m')" + "hint": "Periodo di tempo dopo il quale gli snapshot scadono (es: '3d', '12h')" }, "max_count": { "label": "Conteggio massimo", @@ -751,6 +753,7 @@ }, "edit_policy": { "update_policy": { + "growl": "La politica snapshot '{name}' è stata aggiornata con successo." } } }, diff --git a/src/locales/jp.json b/src/locales/jp.json index 6a9a01ff..73c1a0ae 100644 --- a/src/locales/jp.json +++ b/src/locales/jp.json @@ -48,6 +48,7 @@ "cancel": "キャンセル", "close": "閉じる", "create": "作成", + "update": "更新", "delete": "削除", "success": "成功", "bulk": "一括操作", @@ -393,7 +394,8 @@ "text": "ポリシー", "heading": "スナップショットポリシーの管理", "repository": "リポジトリ: {repository}", - "new_policy": "新しいポリシー" + "new_policy": "新しいポリシー", + "edit_policy": "ポリシーを編集" } }, "search": { @@ -718,7 +720,7 @@ "heading": "保持設定", "expire_after": { "label": "有効期限", - "hint": "スナップショットが期限切れになる期間(例:'30d'、'1w'、'1m')" + "hint": "スナップショットが期限切れになる期間(例:'3d'、'12h')" }, "max_count": { "label": "最大数", @@ -751,6 +753,7 @@ }, "edit_policy": { "update_policy": { + "growl": "スナップショットポリシー '{name}' が正常に更新されました。" } } }, diff --git a/src/locales/ru.json b/src/locales/ru.json index 6d498fb8..d3db9698 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -48,6 +48,7 @@ "cancel": "Отмена", "close": "Закрыть", "create": "Создать", + "update": "Обновить", "delete": "Удалить", "success": "Успех", "bulk": "Массовое действие", @@ -393,7 +394,8 @@ "text": "Политики", "heading": "Управление Политиками Снимков", "repository": "Репозиторий: {repository}", - "new_policy": "Новая Политика" + "new_policy": "Новая Политика", + "edit_policy": "Редактировать Политику" } }, "search": { @@ -718,7 +720,7 @@ "heading": "Настройки Хранения", "expire_after": { "label": "Истекает через", - "hint": "Период времени, после которого снапшоты истекают (например, '30d', '1w', '1m')" + "hint": "Период времени, после которого снапшоты истекают (например, '3d', '12h')" }, "max_count": { "label": "Максимальное количество", @@ -751,6 +753,7 @@ }, "edit_policy": { "update_policy": { + "growl": "Политика снимков '{name}' успешно обновлена." } } }, From 50dcae3a00122ea0b3018bd012dccab4281d2364 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Mon, 13 Oct 2025 12:03:28 +0200 Subject: [PATCH 12/46] dependency updates --- package-lock.json | 882 ++++++++++++++++++++-------------------------- package.json | 49 ++- 2 files changed, 407 insertions(+), 524 deletions(-) diff --git a/package-lock.json b/package-lock.json index 24333d13..d4ca79c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,8 @@ "name": "elasticvue", "version": "1.8.0", "dependencies": { - "@codemirror/lang-json": "^6.0.1", - "@intlify/unplugin-vue-i18n": "^6.0.8", + "@codemirror/lang-json": "^6.0.2", + "@intlify/unplugin-vue-i18n": "^11.0.1", "@lezer/common": "^1.2.3", "@quasar/extras": "^1.17.0", "@replit/codemirror-vim": "^6.3.0", @@ -24,40 +24,39 @@ "codemirror": "^6.0.2", "idb": "^8.0.3", "json-bigint": "^1.0.0", - "optional": "^0.1.4", "pinia": "^3.0.3", - "pinia-plugin-persistedstate": "^4.3.0", - "pretty-bytes": "^7.0.0", - "quasar": "^2.18.1", - "ua-parser-js": "^2.0.3", - "uuid": "^11.1.0", - "vue": "^3.5.17", - "vue-i18n": "^11.1.6", + "pinia-plugin-persistedstate": "^4.5.0", + "pretty-bytes": "^7.1.0", + "quasar": "^2.18.5", + "ua-parser-js": "^2.0.6", + "uuid": "^13.0.0", + "vue": "^3.5.22", + "vue-i18n": "^11.1.12", "vue-resizable": "^2.1.7", "vue-router": "^4.5.1" }, "devDependencies": { - "@intlify/eslint-plugin-vue-i18n": "^4.0.1", - "@playwright/test": "^1.53.1", - "@quasar/vite-plugin": "^1.9.0", + "@intlify/eslint-plugin-vue-i18n": "^4.1.0", + "@playwright/test": "^1.56.0", + "@quasar/vite-plugin": "^1.10.0", "@tauri-apps/cli": "2.8.4", "@types/json-bigint": "^1.0.4", - "@vitejs/plugin-vue": "^5.2.4", - "@vue/eslint-config-typescript": "^14.5.1", - "@vue/tsconfig": "^0.7.0", - "cross-env": "^7.0.3", - "eslint": "^9.29.0", + "@vitejs/plugin-vue": "^6.0.1", + "@vue/eslint-config-typescript": "^14.6.0", + "@vue/tsconfig": "^0.8.1", + "cross-env": "^10.1.0", + "eslint": "^9.37.0", "eslint-plugin-prettier": "^5.5.4", - "eslint-plugin-vue": "^10.2.0", - "sass": "^1.89.2", + "eslint-plugin-vue": "^10.5.0", + "sass": "^1.93.2", "stylelint": "^16.25.0", "stylelint-config-standard": "^39.0.1", "stylelint-prettier": "^5.0.3", - "typescript": "^5.8.3", - "vite": "^6.3.5", + "typescript": "^5.9.3", + "vite": "^7.1.9", "vite-bundle-visualizer": "^1.2.1", "vitest": "^3.2.4", - "vue-tsc": "^2.2.10" + "vue-tsc": "^3.1.1" } }, "node_modules/@babel/code-frame": { @@ -75,13 +74,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -276,9 +268,9 @@ } }, "node_modules/@codemirror/view": { - "version": "6.38.4", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.4.tgz", - "integrity": "sha512-hduz0suCcUSC/kM8Fq3A9iLwInJDl8fD1xLpTIk+5xkNm8z/FT7UsIa9sOXrkpChh+XXc18RzswE8QqELsVl+g==", + "version": "6.38.6", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.6.tgz", + "integrity": "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==", "license": "MIT", "peer": true, "dependencies": { @@ -368,6 +360,13 @@ "url": "https://github.com/sponsors/JounQin" } }, + "node_modules/@epic-web/invariant": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", + "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==", + "dev": true, + "license": "MIT" + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.10", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", @@ -375,7 +374,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -392,7 +390,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -409,7 +406,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -426,7 +422,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -443,7 +438,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -460,7 +454,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -477,7 +470,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -494,7 +486,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -511,7 +502,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -528,7 +518,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -545,7 +534,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -562,7 +550,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -579,7 +566,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -596,7 +582,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -613,7 +598,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -630,7 +614,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -647,7 +630,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -664,7 +646,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -681,7 +662,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -698,7 +678,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -715,7 +694,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -732,7 +710,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -749,7 +726,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -766,7 +742,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -783,7 +758,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -800,7 +774,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -852,18 +825,21 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", + "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", "license": "Apache-2.0", "dependencies": { "@types/json-schema": "^7.0.15" @@ -917,9 +893,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", - "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -938,12 +914,12 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.2", + "@eslint/core": "^0.16.0", "levn": "^0.4.1" }, "engines": { @@ -999,23 +975,23 @@ } }, "node_modules/@intlify/bundle-utils": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-10.0.1.tgz", - "integrity": "sha512-WkaXfSevtpgtUR4t8K2M6lbR7g03mtOxFeh+vXp5KExvPqS12ppaRj1QxzwRuRI5VUto54A22BjKoBMLyHILWQ==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-11.0.1.tgz", + "integrity": "sha512-5l10G5wE2cQRsZMS9y0oSFMOLW5IG/SgbkIUltqnwF1EMRrRbUAHFiPabXdGTHeexCsMTcxj/1w9i0rzjJU9IQ==", "license": "MIT", "dependencies": { - "@intlify/message-compiler": "^11.1.2", - "@intlify/shared": "^11.1.2", + "@intlify/message-compiler": "^11.1.10", + "@intlify/shared": "^11.1.10", "acorn": "^8.8.2", + "esbuild": "^0.25.4", "escodegen": "^2.1.0", "estree-walker": "^2.0.2", "jsonc-eslint-parser": "^2.3.0", - "mlly": "^1.2.0", - "source-map-js": "^1.0.1", + "source-map-js": "^1.0.2", "yaml-eslint-parser": "^1.2.2" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependenciesMeta": { "petite-vue-i18n": { @@ -1105,30 +1081,27 @@ } }, "node_modules/@intlify/unplugin-vue-i18n": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-6.0.8.tgz", - "integrity": "sha512-Vvm3KhjE6TIBVUQAk37rBiaYy2M5OcWH0ZcI1XKEsOTeN1o0bErk+zeuXmcrcMc/73YggfI8RoxOUz9EB/69JQ==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-11.0.1.tgz", + "integrity": "sha512-nH5NJdNjy/lO6Ne8LDtZzv4SbpVsMhPE+LbvBDmMeIeJDiino8sOJN2QB3MXzTliYTnqe3aB9Fw5+LJ/XVaXCg==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@intlify/bundle-utils": "^10.0.1", - "@intlify/shared": "^11.1.2", + "@intlify/bundle-utils": "11.0.1", + "@intlify/shared": "^11.1.10", "@intlify/vue-i18n-extensions": "^8.0.0", "@rollup/pluginutils": "^5.1.0", "@typescript-eslint/scope-manager": "^8.13.0", "@typescript-eslint/typescript-estree": "^8.13.0", "debug": "^4.3.3", "fast-glob": "^3.2.12", - "js-yaml": "^4.1.0", - "json5": "^2.2.3", - "pathe": "^1.0.0", + "pathe": "^2.0.3", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2", - "unplugin": "^1.1.0", - "vue": "^3.4" + "unplugin": "^2.3.4", + "vue": "^3.5.14" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { "petite-vue-i18n": "*", @@ -1267,16 +1240,55 @@ "node": ">=12" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@keyv/bigmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.0.2.tgz", - "integrity": "sha512-KR03xkEZlAZNF4IxXgVXb+uNIVNvwdh8UwI0cnc7WI6a+aQcDp8GL80qVfeB4E5NpsKJzou5jU0r6yLSSbMOtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.0.3.tgz", + "integrity": "sha512-jUEkNlnE9tYzX2AIBeoSe1gVUvSOfIOQ5EFPL5Un8cFHGvjD9L/fxpxlS1tEivRLHgapO2RZJ3D93HYAa049pg==", "dev": true, "license": "MIT", "dependencies": { @@ -1704,13 +1716,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.55.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.1.tgz", - "integrity": "sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.0.tgz", + "integrity": "sha512-Tzh95Twig7hUwwNe381/K3PggZBZblKUe2wv25oIpzWLr6Z0m4KgV1ZVIjnR6GM9ANEqjZD7XsZEa6JL/7YEgg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.55.1" + "playwright": "1.56.0" }, "bin": { "playwright": "cli.js" @@ -1762,6 +1774,13 @@ "@codemirror/view": "6.x.x" } }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.29", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz", + "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@rollup/pluginutils": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", @@ -1785,9 +1804,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz", - "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz", + "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==", "cpu": [ "arm" ], @@ -1799,9 +1818,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz", - "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz", + "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==", "cpu": [ "arm64" ], @@ -1813,9 +1832,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz", - "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz", + "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==", "cpu": [ "arm64" ], @@ -1827,9 +1846,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz", - "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz", + "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==", "cpu": [ "x64" ], @@ -1841,9 +1860,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz", - "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz", + "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==", "cpu": [ "arm64" ], @@ -1855,9 +1874,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz", - "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz", + "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==", "cpu": [ "x64" ], @@ -1869,9 +1888,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz", - "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz", + "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==", "cpu": [ "arm" ], @@ -1883,9 +1902,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz", - "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz", + "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==", "cpu": [ "arm" ], @@ -1897,9 +1916,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz", - "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz", + "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==", "cpu": [ "arm64" ], @@ -1911,9 +1930,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz", - "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz", + "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==", "cpu": [ "arm64" ], @@ -1925,9 +1944,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz", - "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz", + "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==", "cpu": [ "loong64" ], @@ -1939,9 +1958,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz", - "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz", + "integrity": "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==", "cpu": [ "ppc64" ], @@ -1953,9 +1972,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz", - "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz", + "integrity": "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==", "cpu": [ "riscv64" ], @@ -1967,9 +1986,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz", - "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz", + "integrity": "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==", "cpu": [ "riscv64" ], @@ -1981,9 +2000,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz", - "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz", + "integrity": "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==", "cpu": [ "s390x" ], @@ -1995,9 +2014,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", - "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", + "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", "cpu": [ "x64" ], @@ -2009,9 +2028,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz", - "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz", + "integrity": "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==", "cpu": [ "x64" ], @@ -2023,9 +2042,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz", - "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz", + "integrity": "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==", "cpu": [ "arm64" ], @@ -2037,9 +2056,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz", - "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz", + "integrity": "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==", "cpu": [ "arm64" ], @@ -2051,9 +2070,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz", - "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz", + "integrity": "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==", "cpu": [ "ia32" ], @@ -2065,9 +2084,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz", - "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz", + "integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==", "cpu": [ "x64" ], @@ -2079,9 +2098,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz", - "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz", + "integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==", "cpu": [ "x64" ], @@ -2410,17 +2429,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz", - "integrity": "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.0.tgz", + "integrity": "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.45.0", - "@typescript-eslint/type-utils": "8.45.0", - "@typescript-eslint/utils": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0", + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/type-utils": "8.46.0", + "@typescript-eslint/utils": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -2434,23 +2453,23 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.45.0", + "@typescript-eslint/parser": "^8.46.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.45.0.tgz", - "integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.0.tgz", + "integrity": "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.45.0", - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/typescript-estree": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0", + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", "debug": "^4.3.4" }, "engines": { @@ -2466,13 +2485,13 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.45.0.tgz", - "integrity": "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.0.tgz", + "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==", "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.45.0", - "@typescript-eslint/types": "^8.45.0", + "@typescript-eslint/tsconfig-utils": "^8.46.0", + "@typescript-eslint/types": "^8.46.0", "debug": "^4.3.4" }, "engines": { @@ -2487,13 +2506,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz", - "integrity": "sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz", + "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0" + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2504,9 +2523,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz", - "integrity": "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz", + "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2520,15 +2539,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz", - "integrity": "sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.0.tgz", + "integrity": "sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/typescript-estree": "8.45.0", - "@typescript-eslint/utils": "8.45.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/utils": "8.46.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -2545,9 +2564,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.45.0.tgz", - "integrity": "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.0.tgz", + "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2558,15 +2577,15 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz", - "integrity": "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", + "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.45.0", - "@typescript-eslint/tsconfig-utils": "8.45.0", - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0", + "@typescript-eslint/project-service": "8.46.0", + "@typescript-eslint/tsconfig-utils": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -2610,16 +2629,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.45.0.tgz", - "integrity": "sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.0.tgz", + "integrity": "sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.45.0", - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/typescript-estree": "8.45.0" + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2634,12 +2653,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz", - "integrity": "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz", + "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/types": "8.46.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -2663,17 +2682,20 @@ } }, "node_modules/@vitejs/plugin-vue": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", - "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz", + "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==", "dev": true, "license": "MIT", "peer": true, + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.29" + }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^20.19.0 || >=22.12.0" }, "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", "vue": "^3.2.25" } }, @@ -2759,13 +2781,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, "node_modules/@vitest/snapshot": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", @@ -2781,13 +2796,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/snapshot/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, "node_modules/@vitest/spy": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", @@ -2817,30 +2825,30 @@ } }, "node_modules/@volar/language-core": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", - "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "version": "2.4.23", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.23.tgz", + "integrity": "sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==", "dev": true, "license": "MIT", "dependencies": { - "@volar/source-map": "2.4.15" + "@volar/source-map": "2.4.23" } }, "node_modules/@volar/source-map": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", - "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "version": "2.4.23", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.23.tgz", + "integrity": "sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==", "dev": true, "license": "MIT" }, "node_modules/@volar/typescript": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", - "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "version": "2.4.23", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.23.tgz", + "integrity": "sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==", "dev": true, "license": "MIT", "dependencies": { - "@volar/language-core": "2.4.15", + "@volar/language-core": "2.4.23", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } @@ -2895,17 +2903,6 @@ "@vue/shared": "3.5.22" } }, - "node_modules/@vue/compiler-vue2": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", - "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", - "dev": true, - "license": "MIT", - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, "node_modules/@vue/devtools-api": { "version": "7.7.7", "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", @@ -2966,20 +2963,19 @@ } }, "node_modules/@vue/language-core": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", - "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.1.1.tgz", + "integrity": "sha512-qjMY3Q+hUCjdH+jLrQapqgpsJ0rd/2mAY02lZoHG3VFJZZZKLjAlV+Oo9QmWIT4jh8+Rx8RUGUi++d7T9Wb6Mw==", "dev": true, "license": "MIT", "dependencies": { - "@volar/language-core": "2.4.15", + "@volar/language-core": "2.4.23", "@vue/compiler-dom": "^3.5.0", - "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.5.0", - "alien-signals": "^1.0.3", - "minimatch": "^9.0.3", + "alien-signals": "^3.0.0", "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1" + "path-browserify": "^1.0.1", + "picomatch": "^4.0.2" }, "peerDependencies": { "typescript": "*" @@ -2990,32 +2986,6 @@ } } }, - "node_modules/@vue/language-core/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@vue/language-core/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@vue/reactivity": { "version": "3.5.22", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.22.tgz", @@ -3067,9 +3037,9 @@ "license": "MIT" }, "node_modules/@vue/tsconfig": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.7.0.tgz", - "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.8.1.tgz", + "integrity": "sha512-aK7feIWPXFSUhsCP9PFqPyFOcz4ENkb8hZ2pneL6m2UjCkccvaOhC/5KCKluuBufvp2KzkbdA2W2pk20vLzu3g==", "dev": true, "license": "MIT", "peerDependencies": { @@ -3124,9 +3094,9 @@ } }, "node_modules/alien-signals": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", - "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.0.0.tgz", + "integrity": "sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ==", "dev": true, "license": "MIT" }, @@ -3480,12 +3450,6 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, - "node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "license": "MIT" - }, "node_modules/copy-anything": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", @@ -3535,22 +3499,21 @@ "license": "MIT" }, "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz", + "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.1" + "@epic-web/invariant": "^1.0.0", + "cross-spawn": "^7.0.6" }, "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" + "cross-env": "dist/bin/cross-env.js", + "cross-env-shell": "dist/bin/cross-env-shell.js" }, "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" + "node": ">=20" } }, "node_modules/cross-spawn": { @@ -3610,13 +3573,6 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true, - "license": "MIT" - }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -3782,7 +3738,6 @@ "version": "0.25.10", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -3864,20 +3819,20 @@ } }, "node_modules/eslint": { - "version": "9.36.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", - "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", + "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", "license": "MIT", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", + "@eslint/config-helpers": "^0.4.0", + "@eslint/core": "^0.16.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.36.0", - "@eslint/plugin-kit": "^0.3.5", + "@eslint/js": "9.37.0", + "@eslint/plugin-kit": "^0.4.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -4544,16 +4499,6 @@ "node": ">=8" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, "node_modules/hookable": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", @@ -4597,9 +4542,9 @@ } }, "node_modules/immutable": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", - "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", "dev": true, "license": "MIT" }, @@ -4811,9 +4756,9 @@ } }, "node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, @@ -4867,6 +4812,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -5107,24 +5053,6 @@ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "license": "MIT" }, - "node_modules/mlly": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", - "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", - "license": "MIT", - "dependencies": { - "acorn": "^8.15.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.1" - } - }, - "node_modules/mlly/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "license": "MIT" - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -5211,12 +5139,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optional": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz", - "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==", - "license": "MIT" - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -5381,9 +5303,9 @@ } }, "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "license": "MIT" }, "node_modules/pathval": { @@ -5469,31 +5391,14 @@ } } }, - "node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "license": "MIT", - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "node_modules/pkg-types/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "license": "MIT" - }, "node_modules/playwright": { - "version": "1.55.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.1.tgz", - "integrity": "sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.0.tgz", + "integrity": "sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.55.1" + "playwright-core": "1.56.0" }, "bin": { "playwright": "cli.js" @@ -5506,9 +5411,9 @@ } }, "node_modules/playwright-core": { - "version": "1.55.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.1.tgz", - "integrity": "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.0.tgz", + "integrity": "sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5771,9 +5676,9 @@ "license": "MIT" }, "node_modules/rollup": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz", - "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz", + "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", "devOptional": true, "license": "MIT", "peer": true, @@ -5788,28 +5693,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.3", - "@rollup/rollup-android-arm64": "4.52.3", - "@rollup/rollup-darwin-arm64": "4.52.3", - "@rollup/rollup-darwin-x64": "4.52.3", - "@rollup/rollup-freebsd-arm64": "4.52.3", - "@rollup/rollup-freebsd-x64": "4.52.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", - "@rollup/rollup-linux-arm-musleabihf": "4.52.3", - "@rollup/rollup-linux-arm64-gnu": "4.52.3", - "@rollup/rollup-linux-arm64-musl": "4.52.3", - "@rollup/rollup-linux-loong64-gnu": "4.52.3", - "@rollup/rollup-linux-ppc64-gnu": "4.52.3", - "@rollup/rollup-linux-riscv64-gnu": "4.52.3", - "@rollup/rollup-linux-riscv64-musl": "4.52.3", - "@rollup/rollup-linux-s390x-gnu": "4.52.3", - "@rollup/rollup-linux-x64-gnu": "4.52.3", - "@rollup/rollup-linux-x64-musl": "4.52.3", - "@rollup/rollup-openharmony-arm64": "4.52.3", - "@rollup/rollup-win32-arm64-msvc": "4.52.3", - "@rollup/rollup-win32-ia32-msvc": "4.52.3", - "@rollup/rollup-win32-x64-gnu": "4.52.3", - "@rollup/rollup-win32-x64-msvc": "4.52.3", + "@rollup/rollup-android-arm-eabi": "4.52.4", + "@rollup/rollup-android-arm64": "4.52.4", + "@rollup/rollup-darwin-arm64": "4.52.4", + "@rollup/rollup-darwin-x64": "4.52.4", + "@rollup/rollup-freebsd-arm64": "4.52.4", + "@rollup/rollup-freebsd-x64": "4.52.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.4", + "@rollup/rollup-linux-arm-musleabihf": "4.52.4", + "@rollup/rollup-linux-arm64-gnu": "4.52.4", + "@rollup/rollup-linux-arm64-musl": "4.52.4", + "@rollup/rollup-linux-loong64-gnu": "4.52.4", + "@rollup/rollup-linux-ppc64-gnu": "4.52.4", + "@rollup/rollup-linux-riscv64-gnu": "4.52.4", + "@rollup/rollup-linux-riscv64-musl": "4.52.4", + "@rollup/rollup-linux-s390x-gnu": "4.52.4", + "@rollup/rollup-linux-x64-gnu": "4.52.4", + "@rollup/rollup-linux-x64-musl": "4.52.4", + "@rollup/rollup-openharmony-arm64": "4.52.4", + "@rollup/rollup-win32-arm64-msvc": "4.52.4", + "@rollup/rollup-win32-ia32-msvc": "4.52.4", + "@rollup/rollup-win32-x64-gnu": "4.52.4", + "@rollup/rollup-win32-x64-msvc": "4.52.4", "fsevents": "~2.3.2" } }, @@ -5900,9 +5805,9 @@ } }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6151,6 +6056,13 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, "node_modules/style-mod": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", @@ -6345,13 +6257,13 @@ } }, "node_modules/stylelint/node_modules/flat-cache": { - "version": "6.1.17", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.17.tgz", - "integrity": "sha512-Jzse4YoiUJBVYTwz5Bwl4h/2VQM7e2KK3MVAMlXzX9uamIHAH/TXUlRKU1AQGQOryQhN0EsmufiiF40G057YXA==", + "version": "6.1.18", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.18.tgz", + "integrity": "sha512-JUPnFgHMuAVmLmoH9/zoZ6RHOt5n9NlUw/sDXsTbROJ2SFoS2DS4s+swAV6UTeTbGH/CAsZIE6M8TaG/3jVxgQ==", "dev": true, "license": "MIT", "dependencies": { - "cacheable": "^2.0.3", + "cacheable": "^2.1.0", "flatted": "^3.3.3", "hookified": "^1.12.0" } @@ -6688,16 +6600,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.45.0.tgz", - "integrity": "sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.0.tgz", + "integrity": "sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.45.0", - "@typescript-eslint/parser": "8.45.0", - "@typescript-eslint/typescript-estree": "8.45.0", - "@typescript-eslint/utils": "8.45.0" + "@typescript-eslint/eslint-plugin": "8.46.0", + "@typescript-eslint/parser": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/utils": "8.46.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6732,9 +6644,9 @@ "license": "MIT" }, "node_modules/ua-parser-js": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-2.0.5.tgz", - "integrity": "sha512-sZErtx3rhpvZQanWW5umau4o/snfoLqRcQwQIZ54377WtRzIecnIKvjpkd5JwPcSUMglGnbIgcsQBGAbdi3S9Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-2.0.6.tgz", + "integrity": "sha512-EmaxXfltJaDW75SokrY4/lXMrVyXomE/0FpIIqP2Ctic93gK7rlme55Cwkz8l3YZ6gqf94fCU7AnIkidd/KXPg==", "funding": [ { "type": "opencollective", @@ -6753,8 +6665,7 @@ "dependencies": { "detect-europe-js": "^0.1.2", "is-standalone-pwa": "^0.1.1", - "ua-is-frozen": "^0.1.2", - "undici": "^7.12.0" + "ua-is-frozen": "^0.1.2" }, "bin": { "ua-parser-js": "script/cli.js" @@ -6763,32 +6674,19 @@ "node": "*" } }, - "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "license": "MIT" - }, - "node_modules/undici": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", - "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", - "license": "MIT", - "engines": { - "node": ">=20.18.1" - } - }, "node_modules/unplugin": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", - "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.10.tgz", + "integrity": "sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==", "license": "MIT", "dependencies": { - "acorn": "^8.14.0", + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.12.0" } }, "node_modules/uri-js": { @@ -6808,38 +6706,38 @@ "license": "MIT" }, "node_modules/uuid": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "license": "MIT", "bin": { - "uuid": "dist/esm/bin/uuid" + "uuid": "dist-node/bin/uuid" } }, "node_modules/vite": { - "version": "6.3.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz", - "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", + "version": "7.1.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.9.tgz", + "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -6848,14 +6746,14 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", - "less": "*", + "less": "^4.0.0", "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" @@ -6938,13 +6836,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vite-node/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, "node_modules/vite/node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -7033,13 +6924,6 @@ } } }, - "node_modules/vitest/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, "node_modules/vscode-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", @@ -7162,14 +7046,14 @@ "license": "MIT" }, "node_modules/vue-tsc": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz", - "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.1.1.tgz", + "integrity": "sha512-fyixKxFniOVgn+L/4+g8zCG6dflLLt01Agz9jl3TO45Bgk87NZJRmJVPsiK+ouq3LB91jJCbOV+pDkzYTxbI7A==", "dev": true, "license": "MIT", "dependencies": { - "@volar/typescript": "2.4.15", - "@vue/language-core": "2.2.12" + "@volar/typescript": "2.4.23", + "@vue/language-core": "3.1.1" }, "bin": { "vue-tsc": "bin/vue-tsc.js" diff --git a/package.json b/package.json index fdae71f9..16a2ba18 100644 --- a/package.json +++ b/package.json @@ -15,14 +15,14 @@ "test:e2e:all": "playwright test", "test:e2e:watch": "PWTEST_WATCH=1 playwright test --project=chromium", "test:e2e:report": "playwright show-report", - "ci": "npm run format && npm run lint && npm run lint:style && npm run tsc && npm run test:unit && npm run test:e2e:all", + "ci": "npm run format && npm run lint && npm run lint:style && npm run tsc && npm run build && npm run test:unit && npm run test:e2e:all", "tauri:dev": "tauri dev", "tauri:build": "NO_STRIP=true tauri build", "bundle:report": "vite-bundle-visualizer" }, "dependencies": { - "@codemirror/lang-json": "^6.0.1", - "@intlify/unplugin-vue-i18n": "^6.0.8", + "@codemirror/lang-json": "^6.0.2", + "@intlify/unplugin-vue-i18n": "^11.0.1", "@lezer/common": "^1.2.3", "@quasar/extras": "^1.17.0", "@replit/codemirror-vim": "^6.3.0", @@ -37,39 +37,38 @@ "codemirror": "^6.0.2", "idb": "^8.0.3", "json-bigint": "^1.0.0", - "optional": "^0.1.4", "pinia": "^3.0.3", - "pinia-plugin-persistedstate": "^4.3.0", - "pretty-bytes": "^7.0.0", - "quasar": "^2.18.1", - "ua-parser-js": "^2.0.3", - "uuid": "^11.1.0", - "vue": "^3.5.17", - "vue-i18n": "^11.1.6", + "pinia-plugin-persistedstate": "^4.5.0", + "pretty-bytes": "^7.1.0", + "quasar": "^2.18.5", + "ua-parser-js": "^2.0.6", + "uuid": "^13.0.0", + "vue": "^3.5.22", + "vue-i18n": "^11.1.12", "vue-resizable": "^2.1.7", "vue-router": "^4.5.1" }, "devDependencies": { - "@intlify/eslint-plugin-vue-i18n": "^4.0.1", - "@playwright/test": "^1.53.1", - "@quasar/vite-plugin": "^1.9.0", + "@intlify/eslint-plugin-vue-i18n": "^4.1.0", + "@playwright/test": "^1.56.0", + "@quasar/vite-plugin": "^1.10.0", "@tauri-apps/cli": "2.8.4", "@types/json-bigint": "^1.0.4", - "@vitejs/plugin-vue": "^5.2.4", - "@vue/eslint-config-typescript": "^14.5.1", - "@vue/tsconfig": "^0.7.0", - "cross-env": "^7.0.3", - "eslint": "^9.29.0", + "@vitejs/plugin-vue": "^6.0.1", + "@vue/eslint-config-typescript": "^14.6.0", + "@vue/tsconfig": "^0.8.1", + "cross-env": "^10.1.0", + "eslint": "^9.37.0", "eslint-plugin-prettier": "^5.5.4", - "eslint-plugin-vue": "^10.2.0", - "sass": "^1.89.2", + "eslint-plugin-vue": "^10.5.0", + "sass": "^1.93.2", "stylelint": "^16.25.0", "stylelint-config-standard": "^39.0.1", "stylelint-prettier": "^5.0.3", - "typescript": "^5.8.3", - "vite": "^6.3.5", + "typescript": "^5.9.3", + "vite": "^7.1.9", "vite-bundle-visualizer": "^1.2.1", "vitest": "^3.2.4", - "vue-tsc": "^2.2.10" + "vue-tsc": "^3.1.1" } -} +} \ No newline at end of file From 5891a43c8c5e6d594af25feb719ab26e460eb17c Mon Sep 17 00:00:00 2001 From: Vincent Fabioux Date: Thu, 16 Oct 2025 14:34:38 +0200 Subject: [PATCH 13/46] fix removeComments from parseJson --- package-lock.json | 46 +++++++------------ package.json | 3 +- .../components/rest/RestQueryForm.ts | 4 +- src/helpers/json/parse.ts | 7 +-- 4 files changed, 23 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index d4ca79c4..1bf01c47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "pinia-plugin-persistedstate": "^4.5.0", "pretty-bytes": "^7.1.0", "quasar": "^2.18.5", + "strip-json-comments": "^5.0.3", "ua-parser-js": "^2.0.6", "uuid": "^13.0.0", "vue": "^3.5.22", @@ -201,7 +202,6 @@ "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.9.0.tgz", "integrity": "sha512-454TVgjhO6cMufsyyGN70rGIfJxJEjcqjBG2x2Y03Y/+Fm99d3O/Kv1QDYWuG6hvxsgmjXmBuATikIIYvERX+w==", "license": "MIT", - "peer": true, "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.4.0", @@ -224,7 +224,6 @@ "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.3.tgz", "integrity": "sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==", "license": "MIT", - "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", @@ -250,7 +249,6 @@ "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.11.tgz", "integrity": "sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==", "license": "MIT", - "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -262,7 +260,6 @@ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", "license": "MIT", - "peer": true, "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } @@ -272,7 +269,6 @@ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.6.tgz", "integrity": "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==", "license": "MIT", - "peer": true, "dependencies": { "@codemirror/state": "^6.5.0", "crelt": "^1.0.6", @@ -296,7 +292,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -320,7 +315,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -892,6 +886,18 @@ "node": ">= 4" } }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { "version": "9.37.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", @@ -2464,7 +2470,6 @@ "integrity": "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.0", "@typescript-eslint/types": "8.46.0", @@ -2687,7 +2692,6 @@ "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.29" }, @@ -3060,7 +3064,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3823,7 +3826,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3948,7 +3950,6 @@ "integrity": "sha512-7BZHsG3kC2vei8F2W8hnfDi9RK+cv5eKPMvzBdrl8Vuc0hR5odGQRli8VVzUkrmUHkxFEm4Iio1r5HOKslO0Aw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "natural-compare": "^1.4.0", @@ -5347,7 +5348,6 @@ "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", "license": "MIT", - "peer": true, "dependencies": { "@vue/devtools-api": "^7.7.2" }, @@ -5442,7 +5442,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -5585,7 +5584,6 @@ "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.18.5.tgz", "integrity": "sha512-5ItDSsNjqBVRrC7SqcdvT1F5mghVyJ/KmaWNwnaT5mM91a7gWpT/d7wTCIFxxDbWLZdkHKI+cpdudEqnfcSw9A==", "license": "MIT", - "peer": true, "engines": { "node": ">= 10.18.1", "npm": ">= 6.13.4", @@ -5681,7 +5679,6 @@ "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -5788,7 +5785,6 @@ "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -6032,12 +6028,12 @@ } }, "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", + "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6085,7 +6081,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", @@ -6274,7 +6269,6 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -6590,7 +6584,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6724,7 +6717,6 @@ "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -6936,7 +6928,6 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz", "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.22", "@vue/compiler-sfc": "3.5.22", @@ -6959,7 +6950,6 @@ "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0", @@ -6996,7 +6986,6 @@ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.1.12.tgz", "integrity": "sha512-BnstPj3KLHLrsqbVU2UOrPmr0+Mv11bsUZG0PyCOzsawCivk8W00GMXHeVUWIDOgNaScCuZah47CZFE+Wnl8mw==", "license": "MIT", - "peer": true, "dependencies": { "@intlify/core-base": "11.1.12", "@intlify/shared": "11.1.12", @@ -7261,7 +7250,6 @@ "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.0.tgz", "integrity": "sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==", "license": "MIT", - "peer": true, "dependencies": { "eslint-visitor-keys": "^3.0.0", "yaml": "^2.0.0" diff --git a/package.json b/package.json index 16a2ba18..9aafc2aa 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "pinia-plugin-persistedstate": "^4.5.0", "pretty-bytes": "^7.1.0", "quasar": "^2.18.5", + "strip-json-comments": "^5.0.3", "ua-parser-js": "^2.0.6", "uuid": "^13.0.0", "vue": "^3.5.22", @@ -71,4 +72,4 @@ "vitest": "^3.2.4", "vue-tsc": "^3.1.1" } -} \ No newline at end of file +} diff --git a/src/composables/components/rest/RestQueryForm.ts b/src/composables/components/rest/RestQueryForm.ts index 6e621433..623c0071 100644 --- a/src/composables/components/rest/RestQueryForm.ts +++ b/src/composables/components/rest/RestQueryForm.ts @@ -1,10 +1,10 @@ +import stripJsonComments from 'strip-json-comments' import { computed, ref, toRaw, watch, nextTick } from 'vue' import { clusterAuthHeader } from '../../../helpers/elasticsearchAdapter.ts' import { REQUEST_DEFAULT_HEADERS } from '../../../consts' import { useConnectionStore } from '../../../store/connection' import { useSnackbar } from '../../Snackbar' import { useIdbStore } from '../../../db/Idb' -import { removeComments } from '../../../helpers/json/parse' import { fetchMethod } from '../../../helpers/fetch' import { IdbRestQueryTab, IdbRestQueryTabRequest } from '../../../db/types.ts' import { debounce } from '../../../helpers/debounce.ts' @@ -39,7 +39,7 @@ export const useRestQueryForm = (props: RestQueryFormProps, emit: any) => { const options: RestFetchOptions = { method: props.tab.request.method, - body: ['GET', 'HEAD'].includes(props.tab.request.method) ? null : removeComments(props.tab.request.body), + body: ['GET', 'HEAD'].includes(props.tab.request.method) ? null : stripJsonComments(props.tab.request.body), headers: Object.assign({}, REQUEST_DEFAULT_HEADERS) } diff --git a/src/helpers/json/parse.ts b/src/helpers/json/parse.ts index 0d9412d7..adba70ce 100644 --- a/src/helpers/json/parse.ts +++ b/src/helpers/json/parse.ts @@ -1,10 +1,7 @@ +import stripJsonComments from 'strip-json-comments' import { bigint } from './jsonBigint.ts' -export const removeComments = (str: string): string => { - return str.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => (g ? '' : m)) -} - export const parseJson = (jsonString: string): any => { - const clean = removeComments(jsonString) + const clean = stripJsonComments(jsonString) return bigint.parse(clean) } From a52b48fd781858721e242717e457d4bb5c69a9d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Thu, 9 Oct 2025 21:54:37 +0200 Subject: [PATCH 14/46] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39fa1177..ca5d98f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 1.9.0 - fix REST API requests with document IDs containing slashes, fixes [#309](https://github.com/cars10/elasticvue/issues/309) +- can manage snapshot repository policies, fixes [#302](https://github.com/cars10/elasticvue/issues/302) ## 1.8.0 From 8a402ae51f3d864f7fdb689bb4d3930914b7b098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Fri, 17 Oct 2025 17:06:27 +0200 Subject: [PATCH 15/46] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca5d98f0..c01a1200 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - fix REST API requests with document IDs containing slashes, fixes [#309](https://github.com/cars10/elasticvue/issues/309) - can manage snapshot repository policies, fixes [#302](https://github.com/cars10/elasticvue/issues/302) +- fix issues with json containing windows paths, fixes [324](https://github.com/cars10/elasticvue/pull/324), thanks @vfabioux ## 1.8.0 From 4a95e144560632b25fa40950a7bfef854380f28a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Fri, 17 Oct 2025 17:09:04 +0200 Subject: [PATCH 16/46] fix #312 --- CHANGELOG.md | 3 ++- src/components/shards/IndexShard.vue | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c01a1200..787ec07c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,8 @@ - fix REST API requests with document IDs containing slashes, fixes [#309](https://github.com/cars10/elasticvue/issues/309) - can manage snapshot repository policies, fixes [#302](https://github.com/cars10/elasticvue/issues/302) -- fix issues with json containing windows paths, fixes [324](https://github.com/cars10/elasticvue/pull/324), thanks @vfabioux +- fix issues with json containing windows paths, fixes [#324](https://github.com/cars10/elasticvue/pull/324), thanks @vfabioux +- fix issue with shard display showing wrong border, fixes [#312](https://github.com/cars10/elasticvue/issues/312) ## 1.8.0 diff --git a/src/components/shards/IndexShard.vue b/src/components/shards/IndexShard.vue index 916cdba1..da55b891 100644 --- a/src/components/shards/IndexShard.vue +++ b/src/components/shards/IndexShard.vue @@ -31,11 +31,11 @@ const props = withDefaults( } ) -const replica = props.shard.prirep === 'r' +const replica = computed(() => props.shard.prirep === 'r') const classes = computed(() => { const newClasses = [] - if (replica) newClasses.push('outline--dashed') + if (replica.value) newClasses.push('outline--dashed') if (props.shard.state === 'STARTED') { newClasses.push('border-positive') From 4ff3d712b3e3bb2caf5e020900f2e0e7c701ab80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Tue, 21 Oct 2025 18:38:59 +0200 Subject: [PATCH 17/46] fix #306 --- .github/workflows/release.yml | 26 +++++++++++++++++++++++--- CHANGELOG.md | 1 + 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d07cce0f..99d94b25 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -176,15 +176,35 @@ jobs: - uses: martinbeentjes/npm-get-version-action@v1.3.1 id: package-version - - name: Build and push + - name: Build and push to Docker Hub uses: docker/build-push-action@v5 with: context: . platforms: linux/amd64,linux/arm64,linux/arm/v7 file: docker/Dockerfile_multiarch push: true - tags: cars10/elasticvue:latest,cars10/elasticvue:${{ steps.package-version.outputs.current-version }} - #tags: cars10/elasticvue:${{ steps.package-version.outputs.current-version }} + tags: | + ghcr.io/cars10/elasticvue:latest + ghcr.io/cars10/elasticvue:${{ steps.package-version.outputs.current-version }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push to GitHub Container Registry + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64,linux/arm/v7 + file: docker/Dockerfile_multiarch + push: true + tags: | + ghcr.io/cars10/elasticvue:latest + ghcr.io/cars10/elasticvue:${{ steps.package-version.outputs.current-version }} + registry: ghcr.io publish: diff --git a/CHANGELOG.md b/CHANGELOG.md index 787ec07c..70b1ec73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - can manage snapshot repository policies, fixes [#302](https://github.com/cars10/elasticvue/issues/302) - fix issues with json containing windows paths, fixes [#324](https://github.com/cars10/elasticvue/pull/324), thanks @vfabioux - fix issue with shard display showing wrong border, fixes [#312](https://github.com/cars10/elasticvue/issues/312) +- also push images to ghcr.io, fixes [#306](https://github.com/cars10/elasticvue/issues/306) ## 1.8.0 From c043dce946659f9a6fd89e6bb48450ba398f42d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Tue, 21 Oct 2025 18:53:03 +0200 Subject: [PATCH 18/46] bumps version to 1.9.0 --- browser_extension/chrome/manifest.json | 2 +- browser_extension/edge/manifest.json | 2 +- browser_extension/firefox/manifest.json | 2 +- package.json | 2 +- src-tauri/tauri.conf.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/browser_extension/chrome/manifest.json b/browser_extension/chrome/manifest.json index ebdced45..efd7772d 100644 --- a/browser_extension/chrome/manifest.json +++ b/browser_extension/chrome/manifest.json @@ -1,6 +1,6 @@ { "name": "Elasticvue", - "version": "1.8.0", + "version": "1.9.0", "description": "Elasticsearch frontend", "manifest_version": 3, "icons": { diff --git a/browser_extension/edge/manifest.json b/browser_extension/edge/manifest.json index 1e6de3d8..dd5ba50b 100644 --- a/browser_extension/edge/manifest.json +++ b/browser_extension/edge/manifest.json @@ -1,6 +1,6 @@ { "name": "Elasticvue", - "version": "1.8.0", + "version": "1.9.0", "description": "Elasticsearch frontend", "manifest_version": 3, "icons": { diff --git a/browser_extension/firefox/manifest.json b/browser_extension/firefox/manifest.json index 1377fc3c..8ac3986c 100644 --- a/browser_extension/firefox/manifest.json +++ b/browser_extension/firefox/manifest.json @@ -1,6 +1,6 @@ { "name": "Elasticvue", - "version": "1.8.0", + "version": "1.9.0", "description": "Elasticsearch frontend", "manifest_version": 2, "icons": { diff --git a/package.json b/package.json index 9aafc2aa..11d710b8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "elasticvue", "private": true, - "version": "1.8.0", + "version": "1.9.0", "scripts": { "dev": "vite", "build": "vite build", diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index c43ef059..bbfac9d6 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -42,7 +42,7 @@ }, "productName": "elasticvue", "mainBinaryName": "elasticvue", - "version": "1.8.0", + "version": "1.9.0", "identifier": "com.elasticvue.app", "plugins": { "updater": { From ee9293b340f0d1565f9f457e92ab15788fdf45c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Tue, 21 Oct 2025 19:29:29 +0200 Subject: [PATCH 19/46] fix workflow --- .github/workflows/release.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 99d94b25..a5098e1d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -183,9 +183,7 @@ jobs: platforms: linux/amd64,linux/arm64,linux/arm/v7 file: docker/Dockerfile_multiarch push: true - tags: | - ghcr.io/cars10/elasticvue:latest - ghcr.io/cars10/elasticvue:${{ steps.package-version.outputs.current-version }} + tags: cars10/elasticvue:latest,cars10/elasticvue:${{ steps.package-version.outputs.current-version }} - name: Login to GitHub Container Registry uses: docker/login-action@v3 @@ -205,6 +203,7 @@ jobs: ghcr.io/cars10/elasticvue:latest ghcr.io/cars10/elasticvue:${{ steps.package-version.outputs.current-version }} registry: ghcr.io + login: true publish: From ee9c3ea3a4466c2548dd1fc452fd2c9cae392667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Tue, 21 Oct 2025 19:35:20 +0200 Subject: [PATCH 20/46] fix workflow #2 --- .github/workflows/release.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a5098e1d..6667ef38 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,6 +7,10 @@ on: tags: - 'v*' +permissions: + contents: read + packages: write + jobs: build_desktop: name: Build desktop app for ${{ matrix.platform }} From b90d898ee56fa71438c0812a725398014fc70f6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Tue, 21 Oct 2025 19:41:24 +0200 Subject: [PATCH 21/46] fix workflow #3 --- .github/workflows/release.yml | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6667ef38..237c36ac 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -99,7 +99,7 @@ jobs: #### build mac arm - name: mac aaarch64 > build - run: npm run tauri:build --target aarch64-apple-darwin + run: npm run tauri:build -- --target aarch64-apple-darwin if: matrix.platform == 'macos-latest' - name: mac aaarch64 > rename artifacts @@ -121,7 +121,7 @@ jobs: #### build mac x86_64 - name: mac x86_64 > build - run: npm run tauri:build --target x86_64-apple-darwin + run: npm run tauri:build -- --target x86_64-apple-darwin if: matrix.platform == 'macos-latest' - name: mac x86_64 > rename artifacts @@ -171,6 +171,13 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -181,22 +188,6 @@ jobs: id: package-version - name: Build and push to Docker Hub - uses: docker/build-push-action@v5 - with: - context: . - platforms: linux/amd64,linux/arm64,linux/arm/v7 - file: docker/Dockerfile_multiarch - push: true - tags: cars10/elasticvue:latest,cars10/elasticvue:${{ steps.package-version.outputs.current-version }} - - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push to GitHub Container Registry uses: docker/build-push-action@v5 with: context: . @@ -204,11 +195,10 @@ jobs: file: docker/Dockerfile_multiarch push: true tags: | + cars10/elasticvue:latest + cars10/elasticvue:${{ steps.package-version.outputs.current-version }} ghcr.io/cars10/elasticvue:latest ghcr.io/cars10/elasticvue:${{ steps.package-version.outputs.current-version }} - registry: ghcr.io - login: true - publish: name: Publish release From d0d09e0ea89f79c3eee5f3a084a850ad8fab7ef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Tue, 21 Oct 2025 19:48:17 +0200 Subject: [PATCH 22/46] fix workflow #4 --- .github/workflows/release.yml | 7 +++---- package.json | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 237c36ac..a0159445 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,10 +7,6 @@ on: tags: - 'v*' -permissions: - contents: read - packages: write - jobs: build_desktop: name: Build desktop app for ${{ matrix.platform }} @@ -162,6 +158,9 @@ jobs: build_docker: name: Build docker images runs-on: ubuntu-24.04 + permissions: + contents: read + packages: write steps: - uses: actions/checkout@v4 diff --git a/package.json b/package.json index 11d710b8..ac81728b 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "test:e2e:report": "playwright show-report", "ci": "npm run format && npm run lint && npm run lint:style && npm run tsc && npm run build && npm run test:unit && npm run test:e2e:all", "tauri:dev": "tauri dev", - "tauri:build": "NO_STRIP=true tauri build", + "tauri:build": "tauri build", "bundle:report": "vite-bundle-visualizer" }, "dependencies": { From b541d67d02b8ec42cfb835996a780c64775b0fe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Tue, 21 Oct 2025 20:06:12 +0200 Subject: [PATCH 23/46] fix workflow #5 --- Makefile | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 23d6303e..4599f364 100644 --- a/Makefile +++ b/Makefile @@ -20,11 +20,12 @@ build_tauri: NO_STRIP=true npm run tauri:build --verbose build_docker_tauri: - docker build --platform linux/amd64 -t elasticvue-linux-tauri -f docker/Dockerfile_tauri --build-arg USERID="$(UID)" . - docker run --platform linux/amd64 --rm -v ./src-tauri/target:/app/src-tauri/target \ - -e TAURI_SIGNING_PRIVATE_KEY="$(TAURI_SIGNING_PRIVATE_KEY)" \ - -e TAURI_SIGNING_PRIVATE_KEY_PASSWORD="$(TAURI_SIGNING_PRIVATE_KEY_PASSWORD)" \ - elasticvue-linux-tauri bash -c ". ~/.cargo/env && rm -rf src-tauri/target/* && NO_STRIP=true npm run tauri:build" + docker build -t elasticvue-linux-tauri -f docker/Dockerfile_tauri --build-arg USERID="$(UID)" . + docker run --rm \ + -e TAURI_SIGNING_PRIVATE_KEY="$(TAURI_SIGNING_PRIVATE_KEY)" \ + -e TAURI_SIGNING_PRIVATE_KEY_PASSWORD="$(TAURI_SIGNING_PRIVATE_KEY_PASSWORD)" \ + -v .:/app \ + elasticvue-linux-tauri bash -c ". ~/.cargo/env && rm -rf src-tauri/target/* && NO_STRIP=true npm run tauri:build" # Build docker image to run elasticvue served by nginx build_docker_nginx: From 5070c4df0fe3e118c9765651b911c791311093d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Tue, 21 Oct 2025 20:12:00 +0200 Subject: [PATCH 24/46] fix workflow #6 --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 4599f364..d8ca492f 100644 --- a/Makefile +++ b/Makefile @@ -22,10 +22,10 @@ build_tauri: build_docker_tauri: docker build -t elasticvue-linux-tauri -f docker/Dockerfile_tauri --build-arg USERID="$(UID)" . docker run --rm \ - -e TAURI_SIGNING_PRIVATE_KEY="$(TAURI_SIGNING_PRIVATE_KEY)" \ + -e TAURI_SIGNING_PRIVATE_KEY="$(TAURI_SIGNING_PRIVATE_KEY)" \ -e TAURI_SIGNING_PRIVATE_KEY_PASSWORD="$(TAURI_SIGNING_PRIVATE_KEY_PASSWORD)" \ -v .:/app \ - elasticvue-linux-tauri bash -c ". ~/.cargo/env && rm -rf src-tauri/target/* && NO_STRIP=true npm run tauri:build" + elasticvue-linux-tauri bash -c "npm install && . ~/.cargo/env && rm -rf src-tauri/target/* && npm run tauri:build" # Build docker image to run elasticvue served by nginx build_docker_nginx: From 3012fe517781b88776100dcfca1395d74899461b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Wed, 22 Oct 2025 20:39:11 +0200 Subject: [PATCH 25/46] fix #327 --- CHANGELOG.md | 4 + package-lock.json | 4 +- src/helpers/cleanRestPath.ts | 29 ++++++ tests/unit/helpers/cleanRestPath.spec.ts | 107 ++++++++++++++++++++++- 4 files changed, 140 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70b1ec73..2befb355 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.10.0 + +* fix encoding issue in rest query interface, fixes [#327](https://github.com/cars10/elasticvue/issues/327) + ## 1.9.0 - fix REST API requests with document IDs containing slashes, fixes [#309](https://github.com/cars10/elasticvue/issues/309) diff --git a/package-lock.json b/package-lock.json index 1bf01c47..1974c17f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "elasticvue", - "version": "1.8.0", + "version": "1.9.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "elasticvue", - "version": "1.8.0", + "version": "1.9.0", "dependencies": { "@codemirror/lang-json": "^6.0.2", "@intlify/unplugin-vue-i18n": "^11.0.1", diff --git a/src/helpers/cleanRestPath.ts b/src/helpers/cleanRestPath.ts index e129af3f..68188195 100644 --- a/src/helpers/cleanRestPath.ts +++ b/src/helpers/cleanRestPath.ts @@ -10,6 +10,12 @@ import { cleanIndexName } from './cleanIndexName' export const cleanRestPath = (path: string): string => { if (!path) return path + // Handle cluster-level API endpoints (starting with /_) + if (path.startsWith('/_')) { + // These are cluster-level endpoints that should not be modified + return path + } + // Find the first slash to separate index from the rest const firstSlashIndex = path.indexOf('/') @@ -25,6 +31,29 @@ export const cleanRestPath = (path: string): string => { // Clean the index name const cleanedIndexName = cleanIndexName(indexName) + // Check if this is an API endpoint (starts with _ but not _doc, _source, etc.) + // API endpoints like _search, _delete_by_query, _bulk should not be modified + // But document types like _doc should still be processed for document ID encoding + const apiEndpoints = [ + '_search', '_msearch', '_bulk', '_delete_by_query', '_update_by_query', + '_mget', '_explain', '_validate', '_analyze', '_termvectors', '_field_caps', + '_search_shards', '_search/template', '_render/template', '_scripts', + '_ingest', '_transform', '_ml', '_watcher', '_security', '_xpack', + '_cat', '_cluster', '_nodes', '_tasks', '_snapshot', '_repositories', + '_ilm', '_slm', '_enrich', '_data_frame', '_rollup', '_async_search', + '_eql', '_graph', '_license', '_monitoring', '_telemetry', '_usage', + '_features', '_info', '_health', '_refresh', '_flush', '_forcemerge', + '_shrink', '_split', '_clone', '_rollover', '_freeze', '_unfreeze', + '_close', '_open', '_reindex' + ] + + // Check if the path starts with any of these API endpoints + const isApiEndpoint = apiEndpoints.some(endpoint => restOfPath.startsWith(endpoint)) + + if (isApiEndpoint) { + return `${cleanedIndexName}/${restOfPath}` + } + // For the rest of the path, we need to handle it more carefully // We need to preserve the structure but encode document IDs // The issue is that when we split by slash, we lose the slashes in the document ID diff --git a/tests/unit/helpers/cleanRestPath.spec.ts b/tests/unit/helpers/cleanRestPath.spec.ts index 28cf44ee..e7aed6a0 100644 --- a/tests/unit/helpers/cleanRestPath.spec.ts +++ b/tests/unit/helpers/cleanRestPath.spec.ts @@ -180,6 +180,109 @@ describe.concurrent('helpers/cleanRestPath.ts', () => { expect(cleanRestPath(endpoint)).toBe(endpoint) }) }) + + it('should not modify cluster-level API endpoints with query parameters', () => { + const testCases = [ + { + input: '/_cluster/settings?include_defaults=true', + expected: '/_cluster/settings?include_defaults=true' + }, + { + input: '/_cluster/health', + expected: '/_cluster/health' + }, + { + input: '/_cluster/state', + expected: '/_cluster/state' + }, + { + input: '/_cluster/stats', + expected: '/_cluster/stats' + }, + { + input: '/_cluster/pending_tasks', + expected: '/_cluster/pending_tasks' + }, + { + input: '/_cluster/allocation/explain', + expected: '/_cluster/allocation/explain' + }, + { + input: '/_nodes/stats', + expected: '/_nodes/stats' + }, + { + input: '/_nodes/info', + expected: '/_nodes/info' + }, + { + input: '/_cat/indices', + expected: '/_cat/indices' + }, + { + input: '/_cat/health', + expected: '/_cat/health' + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) + + it('should handle the specific GitHub issue case: GET /_cluster/settings?include_defaults=true', () => { + // This is the exact case from GitHub issue #327 + const input = '/_cluster/settings?include_defaults=true' + const expected = '/_cluster/settings?include_defaults=true' + expect(cleanRestPath(input)).toBe(expected) + }) + + it('should not modify index-level API endpoints with query parameters', () => { + const testCases = [ + { + input: 'my_index/_delete_by_query?refresh=true', + expected: 'my_index/_delete_by_query?refresh=true' + }, + { + input: 'my_index/_search?q=test', + expected: 'my_index/_search?q=test' + }, + { + input: 'my_index/_update_by_query?conflicts=proceed', + expected: 'my_index/_update_by_query?conflicts=proceed' + }, + { + input: 'my_index/_bulk?refresh=true', + expected: 'my_index/_bulk?refresh=true' + }, + { + input: 'my_index/_msearch?timeout=30s', + expected: 'my_index/_msearch?timeout=30s' + }, + { + input: 'my_index/_mget?stored_fields=_source', + expected: 'my_index/_mget?stored_fields=_source' + }, + { + input: 'my_index/_explain?analyze_wildcard=true', + expected: 'my_index/_explain?analyze_wildcard=true' + }, + { + input: 'my_index/_validate/query?explain=true', + expected: 'my_index/_validate/query?explain=true' + }, + { + input: 'my_index/_analyze?explain=true', + expected: 'my_index/_analyze?explain=true' + }, + { + input: 'my_index/_termvectors?offsets=true', + expected: 'my_index/_termvectors?offsets=true' + } + ] + testCases.forEach(({ input, expected }) => { + expect(cleanRestPath(input)).toBe(expected) + }) + }) }) describe('complex scenarios', () => { @@ -207,7 +310,7 @@ describe.concurrent('helpers/cleanRestPath.ts', () => { const testCases = [ { input: 'my-index/_search?q=test', - expected: 'my-index/_search%3Fq%3Dtest' // Query parameters are part of the document ID and get encoded + expected: 'my-index/_search?q=test' // API endpoints should not be modified }, { input: 'my-index/type/doc-id?routing=test', @@ -223,7 +326,7 @@ describe.concurrent('helpers/cleanRestPath.ts', () => { const testCases = [ { input: 'my-index/_search#fragment', - expected: 'my-index/_search%23fragment' // Fragments are part of the document ID and get encoded + expected: 'my-index/_search#fragment' // API endpoints should not be modified }, { input: 'my-index/type/doc-id#fragment', From 96f921406084b6012f770aaa1a8e48054214dc80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Wed, 22 Oct 2025 20:42:51 +0200 Subject: [PATCH 26/46] lint --- src/helpers/cleanRestPath.ts | 70 +++++++++++++++++++++++++++++------- 1 file changed, 57 insertions(+), 13 deletions(-) diff --git a/src/helpers/cleanRestPath.ts b/src/helpers/cleanRestPath.ts index 68188195..a34dd4ff 100644 --- a/src/helpers/cleanRestPath.ts +++ b/src/helpers/cleanRestPath.ts @@ -35,21 +35,65 @@ export const cleanRestPath = (path: string): string => { // API endpoints like _search, _delete_by_query, _bulk should not be modified // But document types like _doc should still be processed for document ID encoding const apiEndpoints = [ - '_search', '_msearch', '_bulk', '_delete_by_query', '_update_by_query', - '_mget', '_explain', '_validate', '_analyze', '_termvectors', '_field_caps', - '_search_shards', '_search/template', '_render/template', '_scripts', - '_ingest', '_transform', '_ml', '_watcher', '_security', '_xpack', - '_cat', '_cluster', '_nodes', '_tasks', '_snapshot', '_repositories', - '_ilm', '_slm', '_enrich', '_data_frame', '_rollup', '_async_search', - '_eql', '_graph', '_license', '_monitoring', '_telemetry', '_usage', - '_features', '_info', '_health', '_refresh', '_flush', '_forcemerge', - '_shrink', '_split', '_clone', '_rollover', '_freeze', '_unfreeze', - '_close', '_open', '_reindex' + '_search', + '_msearch', + '_bulk', + '_delete_by_query', + '_update_by_query', + '_mget', + '_explain', + '_validate', + '_analyze', + '_termvectors', + '_field_caps', + '_search_shards', + '_search/template', + '_render/template', + '_scripts', + '_ingest', + '_transform', + '_ml', + '_watcher', + '_security', + '_xpack', + '_cat', + '_cluster', + '_nodes', + '_tasks', + '_snapshot', + '_repositories', + '_ilm', + '_slm', + '_enrich', + '_data_frame', + '_rollup', + '_async_search', + '_eql', + '_graph', + '_license', + '_monitoring', + '_telemetry', + '_usage', + '_features', + '_info', + '_health', + '_refresh', + '_flush', + '_forcemerge', + '_shrink', + '_split', + '_clone', + '_rollover', + '_freeze', + '_unfreeze', + '_close', + '_open', + '_reindex' ] - + // Check if the path starts with any of these API endpoints - const isApiEndpoint = apiEndpoints.some(endpoint => restOfPath.startsWith(endpoint)) - + const isApiEndpoint = apiEndpoints.some((endpoint) => restOfPath.startsWith(endpoint)) + if (isApiEndpoint) { return `${cleanedIndexName}/${restOfPath}` } From a930ecff6e015d2d5d4cd966797733585241e0bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Wed, 22 Oct 2025 20:56:30 +0200 Subject: [PATCH 27/46] bumps version to 1.10.0 --- browser_extension/chrome/manifest.json | 2 +- browser_extension/edge/manifest.json | 2 +- browser_extension/firefox/manifest.json | 2 +- package.json | 2 +- src-tauri/tauri.conf.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/browser_extension/chrome/manifest.json b/browser_extension/chrome/manifest.json index efd7772d..8e041db9 100644 --- a/browser_extension/chrome/manifest.json +++ b/browser_extension/chrome/manifest.json @@ -1,6 +1,6 @@ { "name": "Elasticvue", - "version": "1.9.0", + "version": "1.10.0", "description": "Elasticsearch frontend", "manifest_version": 3, "icons": { diff --git a/browser_extension/edge/manifest.json b/browser_extension/edge/manifest.json index dd5ba50b..210a00e2 100644 --- a/browser_extension/edge/manifest.json +++ b/browser_extension/edge/manifest.json @@ -1,6 +1,6 @@ { "name": "Elasticvue", - "version": "1.9.0", + "version": "1.10.0", "description": "Elasticsearch frontend", "manifest_version": 3, "icons": { diff --git a/browser_extension/firefox/manifest.json b/browser_extension/firefox/manifest.json index 8ac3986c..1d8c78a7 100644 --- a/browser_extension/firefox/manifest.json +++ b/browser_extension/firefox/manifest.json @@ -1,6 +1,6 @@ { "name": "Elasticvue", - "version": "1.9.0", + "version": "1.10.0", "description": "Elasticsearch frontend", "manifest_version": 2, "icons": { diff --git a/package.json b/package.json index ac81728b..1b169a6b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "elasticvue", "private": true, - "version": "1.9.0", + "version": "1.10.0", "scripts": { "dev": "vite", "build": "vite build", diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index bbfac9d6..d9b6a820 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -42,7 +42,7 @@ }, "productName": "elasticvue", "mainBinaryName": "elasticvue", - "version": "1.9.0", + "version": "1.10.0", "identifier": "com.elasticvue.app", "plugins": { "updater": { From 6fdf40ab59eb68a39d1823cf9f4698f435a4cd0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Fri, 24 Oct 2025 19:49:20 +0200 Subject: [PATCH 28/46] fix #327 again --- CHANGELOG.md | 4 + .../components/rest/RestQueryForm.ts | 4 +- src/helpers/cleanIndexName.ts | 12 +- src/helpers/cleanRestPath.ts | 155 ------ tests/unit/helpers/cleanIndexName.spec.ts | 21 + tests/unit/helpers/cleanRestPath.spec.ts | 513 ------------------ 6 files changed, 37 insertions(+), 672 deletions(-) delete mode 100644 src/helpers/cleanRestPath.ts delete mode 100644 tests/unit/helpers/cleanRestPath.spec.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 2befb355..91605b6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.10.1 + +* fix another encoding issue, fixes again [#327](https://github.com/cars10/elasticvue/issues/327) + ## 1.10.0 * fix encoding issue in rest query interface, fixes [#327](https://github.com/cars10/elasticvue/issues/327) diff --git a/src/composables/components/rest/RestQueryForm.ts b/src/composables/components/rest/RestQueryForm.ts index 623c0071..34e338a9 100644 --- a/src/composables/components/rest/RestQueryForm.ts +++ b/src/composables/components/rest/RestQueryForm.ts @@ -9,7 +9,7 @@ import { fetchMethod } from '../../../helpers/fetch' import { IdbRestQueryTab, IdbRestQueryTabRequest } from '../../../db/types.ts' import { debounce } from '../../../helpers/debounce.ts' import { parseKibana } from '../../../helpers/parseKibana.ts' -import { cleanRestPath } from '../../../helpers/cleanRestPath.ts' +import { cleanIndexName } from '../../../helpers/cleanIndexName.ts' type RestQueryFormProps = { tab: IdbRestQueryTab @@ -48,7 +48,7 @@ export const useRestQueryForm = (props: RestQueryFormProps, emit: any) => { let url = connectionStore.activeCluster.uri if (!url.endsWith('/') && !props.tab.request.path.startsWith('/')) url += '/' - url += cleanRestPath(props.tab.request.path) + url += cleanIndexName(props.tab.request.path) try { const fetchResponse = await fetchMethod(url, options) diff --git a/src/helpers/cleanIndexName.ts b/src/helpers/cleanIndexName.ts index bd4a2dd4..f0bbba22 100644 --- a/src/helpers/cleanIndexName.ts +++ b/src/helpers/cleanIndexName.ts @@ -1,6 +1,11 @@ export const cleanIndexName = (index: string) => { - return index.replace(/%/g, '%25').replace(/<.*?>/g, (match) => { - return match + // First encode % characters that are NOT part of URL-encoded sequences + // URL-encoded sequences are % followed by exactly 2 hex digits + let result = index.replace(/%(?![\dA-Fa-f]{2})/g, '%25') + + // Then encode characters only within datemath expressions (<...>) + result = result.replace(/<([^>]*)>/g, (_, content) => { + const encodedContent = content .replace(//g, '%3E') .replace(/\//g, '%2F') @@ -10,5 +15,8 @@ export const cleanIndexName = (index: string) => { .replace(/\+/g, '%2B') .replace(/:/g, '%3A') .replace(/,/g, '%2C') + return `%3C${encodedContent}%3E` }) + + return result } diff --git a/src/helpers/cleanRestPath.ts b/src/helpers/cleanRestPath.ts deleted file mode 100644 index a34dd4ff..00000000 --- a/src/helpers/cleanRestPath.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { cleanIndexName } from './cleanIndexName' - -/** - * Properly handles REST API paths by separating index names from document IDs - * and applying appropriate encoding to each part. - * - * @param path - The REST API path (e.g., "my-index/_doc/document-with-/-char") - * @returns The properly encoded path - */ -export const cleanRestPath = (path: string): string => { - if (!path) return path - - // Handle cluster-level API endpoints (starting with /_) - if (path.startsWith('/_')) { - // These are cluster-level endpoints that should not be modified - return path - } - - // Find the first slash to separate index from the rest - const firstSlashIndex = path.indexOf('/') - - if (firstSlashIndex === -1) { - // No slash found, just clean the index name - return cleanIndexName(path) - } - - // Split into index and the rest - const indexName = path.substring(0, firstSlashIndex) - const restOfPath = path.substring(firstSlashIndex + 1) - - // Clean the index name - const cleanedIndexName = cleanIndexName(indexName) - - // Check if this is an API endpoint (starts with _ but not _doc, _source, etc.) - // API endpoints like _search, _delete_by_query, _bulk should not be modified - // But document types like _doc should still be processed for document ID encoding - const apiEndpoints = [ - '_search', - '_msearch', - '_bulk', - '_delete_by_query', - '_update_by_query', - '_mget', - '_explain', - '_validate', - '_analyze', - '_termvectors', - '_field_caps', - '_search_shards', - '_search/template', - '_render/template', - '_scripts', - '_ingest', - '_transform', - '_ml', - '_watcher', - '_security', - '_xpack', - '_cat', - '_cluster', - '_nodes', - '_tasks', - '_snapshot', - '_repositories', - '_ilm', - '_slm', - '_enrich', - '_data_frame', - '_rollup', - '_async_search', - '_eql', - '_graph', - '_license', - '_monitoring', - '_telemetry', - '_usage', - '_features', - '_info', - '_health', - '_refresh', - '_flush', - '_forcemerge', - '_shrink', - '_split', - '_clone', - '_rollover', - '_freeze', - '_unfreeze', - '_close', - '_open', - '_reindex' - ] - - // Check if the path starts with any of these API endpoints - const isApiEndpoint = apiEndpoints.some((endpoint) => restOfPath.startsWith(endpoint)) - - if (isApiEndpoint) { - return `${cleanedIndexName}/${restOfPath}` - } - - // For the rest of the path, we need to handle it more carefully - // We need to preserve the structure but encode document IDs - // The issue is that when we split by slash, we lose the slashes in the document ID - // So we need to be more careful about how we handle this - - let encodedRestOfPath: string - - // If the path contains slashes, we need to handle it specially - if (restOfPath.includes('/')) { - // Split by slash to get the parts - const restParts = restOfPath.split('/') - - if (restParts.length >= 2) { - // We have at least type and document ID - // The last part is the document ID, but it might be split by slashes - // We need to reconstruct the document ID by joining the parts after the type - const typePart = restParts[0] - const documentIdParts = restParts.slice(1) - - // Reconstruct the document ID by joining the parts - const documentId = documentIdParts.join('/') - - // Encode the document ID if it's not already encoded - let encodedDocumentId: string - if (documentId.includes('%')) { - // Already encoded, don't encode again - encodedDocumentId = documentId - } else { - // Encode the document ID - encodedDocumentId = encodeURIComponent(documentId) - } - - // Reconstruct the path - encodedRestOfPath = `${typePart}/${encodedDocumentId}` - } else { - // Only one part, encode it - const part = restParts[0] - if (part.includes('%')) { - encodedRestOfPath = restOfPath - } else { - encodedRestOfPath = encodeURIComponent(part) - } - } - } else { - // No slashes, just encode the whole thing - if (restOfPath.includes('%')) { - encodedRestOfPath = restOfPath - } else { - encodedRestOfPath = encodeURIComponent(restOfPath) - } - } - - // Reconstruct the path - return `${cleanedIndexName}/${encodedRestOfPath}` -} diff --git a/tests/unit/helpers/cleanIndexName.spec.ts b/tests/unit/helpers/cleanIndexName.spec.ts index 546e29f3..cda74c68 100644 --- a/tests/unit/helpers/cleanIndexName.spec.ts +++ b/tests/unit/helpers/cleanIndexName.spec.ts @@ -36,4 +36,25 @@ describe.concurrent('helpers/cleanIndexName.ts', () => { const cleanedName = 'movies/kube+foo/bar' expect(cleanIndexName(indexName)).toBe(cleanedName) }) + + it('should not double-encode already URL-encoded characters', () => { + const testCases = [ + { + input: 'my-index/_doc/my%2Fdocument%2Fid', + expected: 'my-index/_doc/my%2Fdocument%2Fid' + }, + { + input: 'my-index-<{now/d}>/_doc/my%2Fdocument%2Fid', + expected: 'my-index-%3C%7Bnow%2Fd%7D%3E/_doc/my%2Fdocument%2Fid' + }, + { + input: '_cluster/health', + expected: '_cluster/health' + } + ] + + testCases.forEach(({ input, expected }) => { + expect(cleanIndexName(input)).toBe(expected) + }) + }) }) diff --git a/tests/unit/helpers/cleanRestPath.spec.ts b/tests/unit/helpers/cleanRestPath.spec.ts deleted file mode 100644 index e7aed6a0..00000000 --- a/tests/unit/helpers/cleanRestPath.spec.ts +++ /dev/null @@ -1,513 +0,0 @@ -import { describe, it, expect } from 'vitest' -import { cleanRestPath } from '../../../src/helpers/cleanRestPath' - -describe.concurrent('helpers/cleanRestPath.ts', () => { - describe('basic functionality', () => { - it('should return empty string for empty input', () => { - expect(cleanRestPath('')).toBe('') - }) - - it('should handle null/undefined input gracefully', () => { - expect(cleanRestPath(null as unknown as string)).toBe(null) - expect(cleanRestPath(undefined as unknown as string)).toBe(undefined) - }) - - it('should handle simple index names without slashes', () => { - const testCases = [ - 'movies', - 'kube-2024.12.21', - 'my-index', - 'test_index' - ] - testCases.forEach(indexName => { - expect(cleanRestPath(indexName)).toBe(indexName) - }) - }) - }) - - describe('index name cleaning', () => { - it('should clean index names with special characters', () => { - const testCases = [ - { - input: 'foo//_doc', - expected: 'foo//bar', - expected: 'movies/%//bar' // The function only cleans the index part, not the rest - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - }) - - describe('document ID encoding', () => { - it('should encode document IDs with slashes', () => { - const testCases = [ - { - input: 'my-index/my-cat/document-with-/-char', - expected: 'my-index/my-cat/document-with-%2F-char' - }, - { - input: 'my-index/_doc/document-with-/-char', - expected: 'my-index/_doc/document-with-%2F-char' - }, - { - input: 'test-index/type/doc/with/multiple/slashes', - expected: 'test-index/type/doc%2Fwith%2Fmultiple%2Fslashes' - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - - it('should encode document IDs with special characters', () => { - const testCases = [ - { - input: 'my-index/type/document with spaces', - expected: 'my-index/type/document%20with%20spaces' - }, - { - input: 'my-index/type/document+with+plus', - expected: 'my-index/type/document%2Bwith%2Bplus' - }, - { - input: 'my-index/type/document:with:colons', - expected: 'my-index/type/document%3Awith%3Acolons' - }, - { - input: 'my-index/type/document?with?question', - expected: 'my-index/type/document%3Fwith%3Fquestion' - }, - { - input: 'my-index/type/document#with#hash', - expected: 'my-index/type/document%23with%23hash' - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - - it('should not double-encode already encoded document IDs', () => { - const testCases = [ - { - input: 'my-index/my-cat/document-with-%2F-char', - expected: 'my-index/my-cat/document-with-%2F-char' - }, - { - input: 'my-index/type/document%20with%20spaces', - expected: 'my-index/type/document%20with%20spaces' - }, - { - input: 'my-index/type/document%2Bwith%2Bplus', - expected: 'my-index/type/document%2Bwith%2Bplus' - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - }) - - describe('API endpoints', () => { - it('should not modify API endpoints', () => { - const testCases = [ - 'my-index/_search', - 'my-index/_mapping', - 'my-index/_settings', - 'my-index/_stats', - 'my-index/_aliases', - 'my-index/_refresh', - 'my-index/_flush', - 'my-index/_forcemerge', - 'my-index/_shrink', - 'my-index/_split', - 'my-index/_clone', - 'my-index/_rollover', - 'my-index/_freeze', - 'my-index/_unfreeze', - 'my-index/_close', - 'my-index/_open', - 'my-index/_reindex', - 'my-index/_update_by_query', - 'my-index/_delete_by_query', - 'my-index/_bulk', - 'my-index/_msearch', - 'my-index/_mget', - 'my-index/_explain', - 'my-index/_validate/query', - 'my-index/_analyze', - 'my-index/_termvectors', - 'my-index/_field_caps', - 'my-index/_search_shards', - 'my-index/_search/template', - 'my-index/_render/template', - 'my-index/_scripts', - 'my-index/_ingest', - 'my-index/_transform', - 'my-index/_ml', - 'my-index/_watcher', - 'my-index/_security', - 'my-index/_xpack', - 'my-index/_cat', - 'my-index/_cluster', - 'my-index/_nodes', - 'my-index/_tasks', - 'my-index/_snapshot', - 'my-index/_repositories', - 'my-index/_ilm', - 'my-index/_slm', - 'my-index/_enrich', - 'my-index/_data_frame', - 'my-index/_rollup', - 'my-index/_transform', - 'my-index/_async_search', - 'my-index/_eql', - 'my-index/_graph', - 'my-index/_license', - 'my-index/_monitoring', - 'my-index/_telemetry', - 'my-index/_usage', - 'my-index/_features', - 'my-index/_info', - 'my-index/_health' - ] - testCases.forEach(endpoint => { - expect(cleanRestPath(endpoint)).toBe(endpoint) - }) - }) - - it('should not modify cluster-level API endpoints with query parameters', () => { - const testCases = [ - { - input: '/_cluster/settings?include_defaults=true', - expected: '/_cluster/settings?include_defaults=true' - }, - { - input: '/_cluster/health', - expected: '/_cluster/health' - }, - { - input: '/_cluster/state', - expected: '/_cluster/state' - }, - { - input: '/_cluster/stats', - expected: '/_cluster/stats' - }, - { - input: '/_cluster/pending_tasks', - expected: '/_cluster/pending_tasks' - }, - { - input: '/_cluster/allocation/explain', - expected: '/_cluster/allocation/explain' - }, - { - input: '/_nodes/stats', - expected: '/_nodes/stats' - }, - { - input: '/_nodes/info', - expected: '/_nodes/info' - }, - { - input: '/_cat/indices', - expected: '/_cat/indices' - }, - { - input: '/_cat/health', - expected: '/_cat/health' - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - - it('should handle the specific GitHub issue case: GET /_cluster/settings?include_defaults=true', () => { - // This is the exact case from GitHub issue #327 - const input = '/_cluster/settings?include_defaults=true' - const expected = '/_cluster/settings?include_defaults=true' - expect(cleanRestPath(input)).toBe(expected) - }) - - it('should not modify index-level API endpoints with query parameters', () => { - const testCases = [ - { - input: 'my_index/_delete_by_query?refresh=true', - expected: 'my_index/_delete_by_query?refresh=true' - }, - { - input: 'my_index/_search?q=test', - expected: 'my_index/_search?q=test' - }, - { - input: 'my_index/_update_by_query?conflicts=proceed', - expected: 'my_index/_update_by_query?conflicts=proceed' - }, - { - input: 'my_index/_bulk?refresh=true', - expected: 'my_index/_bulk?refresh=true' - }, - { - input: 'my_index/_msearch?timeout=30s', - expected: 'my_index/_msearch?timeout=30s' - }, - { - input: 'my_index/_mget?stored_fields=_source', - expected: 'my_index/_mget?stored_fields=_source' - }, - { - input: 'my_index/_explain?analyze_wildcard=true', - expected: 'my_index/_explain?analyze_wildcard=true' - }, - { - input: 'my_index/_validate/query?explain=true', - expected: 'my_index/_validate/query?explain=true' - }, - { - input: 'my_index/_analyze?explain=true', - expected: 'my_index/_analyze?explain=true' - }, - { - input: 'my_index/_termvectors?offsets=true', - expected: 'my_index/_termvectors?offsets=true' - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - }) - - describe('complex scenarios', () => { - it('should handle paths with multiple segments', () => { - const testCases = [ - { - input: 'my-index/type/doc-id', - expected: 'my-index/type/doc-id' - }, - { - input: 'my-index/type/doc-id/sub-path', - expected: 'my-index/type/doc-id%2Fsub-path' - }, - { - input: 'my-index/type/doc-id/sub-path/another', - expected: 'my-index/type/doc-id%2Fsub-path%2Fanother' - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - - it('should handle paths with query parameters', () => { - const testCases = [ - { - input: 'my-index/_search?q=test', - expected: 'my-index/_search?q=test' // API endpoints should not be modified - }, - { - input: 'my-index/type/doc-id?routing=test', - expected: 'my-index/type/doc-id%3Frouting%3Dtest' // Query parameters are part of the document ID and get encoded - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - - it('should handle paths with fragments', () => { - const testCases = [ - { - input: 'my-index/_search#fragment', - expected: 'my-index/_search#fragment' // API endpoints should not be modified - }, - { - input: 'my-index/type/doc-id#fragment', - expected: 'my-index/type/doc-id%23fragment' // Fragments are part of the document ID and get encoded - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - }) - - describe('edge cases', () => { - it('should handle paths with only slashes', () => { - expect(cleanRestPath('/')).toBe('/') - expect(cleanRestPath('//')).toBe('//') - expect(cleanRestPath('///')).toBe('//%2F') // The last slash gets encoded as part of the document ID - }) - - it('should handle paths starting with slash', () => { - const testCases = [ - { - input: '/my-index', - expected: '/my-index' - }, - { - input: '/my-index/type/doc-id', - expected: '/my-index/type%2Fdoc-id' // The document ID part gets encoded - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - - it('should handle paths ending with slash', () => { - const testCases = [ - { - input: 'my-index/', - expected: 'my-index/' - }, - { - input: 'my-index/type/', - expected: 'my-index/type/' - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - - it('should handle paths with empty segments', () => { - const testCases = [ - { - input: 'my-index//doc-id', - expected: 'my-index//doc-id' // The empty segment is preserved as-is - }, - { - input: 'my-index/type//doc-id', - expected: 'my-index/type/%2Fdoc-id' // The empty segment gets encoded as %2F - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - - it('should handle very long paths', () => { - const longPath = 'my-index/type/' + 'a'.repeat(1000) - const result = cleanRestPath(longPath) - expect(result).toBe(longPath) - }) - - it('should handle paths with unicode characters', () => { - const testCases = [ - { - input: 'my-index/type/文档-id', - expected: 'my-index/type/%E6%96%87%E6%A1%A3-id' - }, - { - input: 'my-index/type/документ-id', - expected: 'my-index/type/%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82-id' - }, - { - input: 'my-index/type/文档/with/slashes', - expected: 'my-index/type/%E6%96%87%E6%A1%A3%2Fwith%2Fslashes' - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - }) - - describe('real-world scenarios', () => { - it('should handle common Elasticsearch patterns', () => { - const testCases = [ - { - input: 'logs-2024.01.01/_doc/1', - expected: 'logs-2024.01.01/_doc/1' - }, - { - input: 'logs-2024.01.01/_doc/1/2/3', - expected: 'logs-2024.01.01/_doc/1%2F2%2F3' - }, - { - input: 'my-index/_doc/document-with-/-char', - expected: 'my-index/_doc/document-with-%2F-char' - }, - { - input: 'my-index/_doc/document-with-/-char/and/more', - expected: 'my-index/_doc/document-with-%2F-char%2Fand%2Fmore' - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - - it('should handle Kibana-style paths', () => { - const testCases = [ - { - input: '.kibana/_doc/config:7.0.0', - expected: '.kibana/_doc/config%3A7.0.0' - }, - { - input: '.kibana/_doc/index-pattern:logs-*', - expected: '.kibana/_doc/index-pattern%3Alogs-*' // The * is not encoded as it's not a special character for URL encoding - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - - it('should handle paths with special Elasticsearch characters', () => { - const testCases = [ - { - input: 'my-index/_doc/doc.with.dots', - expected: 'my-index/_doc/doc.with.dots' - }, - { - input: 'my-index/_doc/doc-with-dashes', - expected: 'my-index/_doc/doc-with-dashes' - }, - { - input: 'my-index/_doc/doc_with_underscores', - expected: 'my-index/_doc/doc_with_underscores' - }, - { - input: 'my-index/_doc/doc+with+plus', - expected: 'my-index/_doc/doc%2Bwith%2Bplus' - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - }) - - describe('performance and stress tests', () => { - it('should handle many consecutive slashes', () => { - const input = 'my-index/type/doc////////id' - const result = cleanRestPath(input) - expect(result).toBe('my-index/type/doc%2F%2F%2F%2F%2F%2F%2F%2Fid') // All slashes in the document ID get encoded - }) - - it('should handle mixed encoding scenarios', () => { - const testCases = [ - { - input: 'my-index/type/doc%2Fid/more', - expected: 'my-index/type/doc%2Fid/more' // Already encoded parts are not double-encoded - }, - { - input: 'my-index/type/doc%2Fid%2Fmore', - expected: 'my-index/type/doc%2Fid%2Fmore' // Already encoded parts are not double-encoded - } - ] - testCases.forEach(({ input, expected }) => { - expect(cleanRestPath(input)).toBe(expected) - }) - }) - }) -}) From 554d8ac4fe98540fd7c724622e4191a9ca1b8473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Mon, 27 Oct 2025 17:49:25 +0100 Subject: [PATCH 29/46] fix security vuln --- package-lock.json | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1974c17f..dc6a7ccd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "elasticvue", - "version": "1.9.0", + "version": "1.10.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "elasticvue", - "version": "1.9.0", + "version": "1.10.0", "dependencies": { "@codemirror/lang-json": "^6.0.2", "@intlify/unplugin-vue-i18n": "^11.0.1", @@ -202,6 +202,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.9.0.tgz", "integrity": "sha512-454TVgjhO6cMufsyyGN70rGIfJxJEjcqjBG2x2Y03Y/+Fm99d3O/Kv1QDYWuG6hvxsgmjXmBuATikIIYvERX+w==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.4.0", @@ -224,6 +225,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.3.tgz", "integrity": "sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", @@ -249,6 +251,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.11.tgz", "integrity": "sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -260,6 +263,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", "license": "MIT", + "peer": true, "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } @@ -269,6 +273,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.6.tgz", "integrity": "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.5.0", "crelt": "^1.0.6", @@ -292,6 +297,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -315,6 +321,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2470,6 +2477,7 @@ "integrity": "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.0", "@typescript-eslint/types": "8.46.0", @@ -2692,6 +2700,7 @@ "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.29" }, @@ -3064,6 +3073,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3826,6 +3836,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3950,6 +3961,7 @@ "integrity": "sha512-7BZHsG3kC2vei8F2W8hnfDi9RK+cv5eKPMvzBdrl8Vuc0hR5odGQRli8VVzUkrmUHkxFEm4Iio1r5HOKslO0Aw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "natural-compare": "^1.4.0", @@ -5348,6 +5360,7 @@ "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", "license": "MIT", + "peer": true, "dependencies": { "@vue/devtools-api": "^7.7.2" }, @@ -5442,6 +5455,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -5584,6 +5598,7 @@ "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.18.5.tgz", "integrity": "sha512-5ItDSsNjqBVRrC7SqcdvT1F5mghVyJ/KmaWNwnaT5mM91a7gWpT/d7wTCIFxxDbWLZdkHKI+cpdudEqnfcSw9A==", "license": "MIT", + "peer": true, "engines": { "node": ">= 10.18.1", "npm": ">= 6.13.4", @@ -5679,6 +5694,7 @@ "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -5785,6 +5801,7 @@ "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -6081,6 +6098,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", @@ -6269,6 +6287,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -6584,6 +6603,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6712,11 +6732,12 @@ } }, "node_modules/vite": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.9.tgz", - "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==", + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", + "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -6928,6 +6949,7 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz", "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", "license": "MIT", + "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.22", "@vue/compiler-sfc": "3.5.22", @@ -6950,6 +6972,7 @@ "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0", @@ -6986,6 +7009,7 @@ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.1.12.tgz", "integrity": "sha512-BnstPj3KLHLrsqbVU2UOrPmr0+Mv11bsUZG0PyCOzsawCivk8W00GMXHeVUWIDOgNaScCuZah47CZFE+Wnl8mw==", "license": "MIT", + "peer": true, "dependencies": { "@intlify/core-base": "11.1.12", "@intlify/shared": "11.1.12", @@ -7250,6 +7274,7 @@ "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.0.tgz", "integrity": "sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==", "license": "MIT", + "peer": true, "dependencies": { "eslint-visitor-keys": "^3.0.0", "yaml": "^2.0.0" From 159c25d8473e1df09c62366c484b4aaea421fea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Sun, 16 Nov 2025 15:28:56 +0100 Subject: [PATCH 30/46] fix: redirect after adding first cluster --- CHANGELOG.md | 1 + src/composables/ClusterConnection.ts | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91605b6a..70a47f03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 1.10.1 * fix another encoding issue, fixes again [#327](https://github.com/cars10/elasticvue/issues/327) +* fix: redirect after adding first cluster ## 1.10.0 diff --git a/src/composables/ClusterConnection.ts b/src/composables/ClusterConnection.ts index bd558a16..a9a91d32 100644 --- a/src/composables/ClusterConnection.ts +++ b/src/composables/ClusterConnection.ts @@ -128,10 +128,12 @@ export const useClusterConnection = ( try { const idx = await connect() - if (!idx) return + if (typeof idx !== 'number') return connectCallback?.(idx) - } catch (_e) {} + } catch (_e) { + console.error(_e) + } } return { From f894744d493f031ae3fa710e6b848efb6f8fe20b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carsten=20K=C3=B6nig?= Date: Sun, 16 Nov 2025 15:36:48 +0100 Subject: [PATCH 31/46] save rest tab --- src/components/rest/RestQueryFormTabs.vue | 14 ++++--- .../components/rest/RestQueryTabs.ts | 37 +++++++++++++------ src/store/rest.ts | 14 +++++++ 3 files changed, 47 insertions(+), 18 deletions(-) create mode 100644 src/store/rest.ts diff --git a/src/components/rest/RestQueryFormTabs.vue b/src/components/rest/RestQueryFormTabs.vue index 247cc20b..a528ce24 100644 --- a/src/components/rest/RestQueryFormTabs.vue +++ b/src/components/rest/RestQueryFormTabs.vue @@ -1,8 +1,8 @@