From 6f9c2e8667dc4cf4fa56c1bd809ce2120e33ae76 Mon Sep 17 00:00:00 2001 From: Pdzly Date: Sun, 11 Jan 2026 23:12:27 +0100 Subject: [PATCH 1/4] feat: add healthcheck log filter to suppress access logs for health and readiness endpoints - Introduce `HealthcheckLogFilter` to omit unnecessary healthcheck logs. - Apply filter to `uvicorn.access` logger during logging configuration. --- backend/app/utils/logging.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/backend/app/utils/logging.py b/backend/app/utils/logging.py index 4f9d288..c86afe1 100644 --- a/backend/app/utils/logging.py +++ b/backend/app/utils/logging.py @@ -1,10 +1,22 @@ """Logging configuration utilities.""" import logging +import re import sys from typing import Literal +class HealthcheckLogFilter(logging.Filter): + """Filter to suppress access logs for healthcheck endpoints.""" + + HEALTHCHECK_PATTERN = re.compile(r'"[A-Z]+\s+/(health|ready)(\?[^\s]*)?\s+HTTP/') + + def filter(self, record: logging.LogRecord) -> bool: + """Return False to drop healthcheck logs, True to keep others.""" + message = record.getMessage() + return not self.HEALTHCHECK_PATTERN.search(message) + + def configure_logging( level: str = "INFO", log_format: Literal["text", "json"] = "text", @@ -59,6 +71,9 @@ def configure_logging( else: _configure_text_logging(numeric_level) + # Apply healthcheck log filter to uvicorn access logger + _configure_access_log_filter() + def _configure_text_logging(level: int) -> None: """Configure standard text-based logging.""" @@ -76,3 +91,9 @@ def _configure_text_logging(level: int) -> None: logging.getLogger("httpx").setLevel(logging.WARNING) logging.getLogger("httpcore").setLevel(logging.WARNING) logging.getLogger("asyncio").setLevel(logging.WARNING) + + +def _configure_access_log_filter() -> None: + """Add filter to suppress healthcheck endpoint logs from uvicorn access logs.""" + uvicorn_access_logger = logging.getLogger("uvicorn.access") + uvicorn_access_logger.addFilter(HealthcheckLogFilter()) From fa2feeecc85708decff35e843873466410f9fe34 Mon Sep 17 00:00:00 2001 From: Pdzly Date: Mon, 12 Jan 2026 16:44:16 +0100 Subject: [PATCH 2/4] refactor: adjust logging levels and improve uvicorn logger configuration - Changed logging statements in `active_pastes_counter.py` from `info` to `debug` for better verbosity control. - Explicitly set root logger level during configuration to enforce uniform logging levels. - Unified uvicorn logger formatting and applied consistent configuration for text and JSON formats. - Integrated healthcheck log filter into uvicorn access logger setup. --- backend/app/utils/active_pastes_counter.py | 6 ++-- backend/app/utils/logging.py | 39 +++++++++++++++------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/backend/app/utils/active_pastes_counter.py b/backend/app/utils/active_pastes_counter.py index 197e87f..c8b85f8 100644 --- a/backend/app/utils/active_pastes_counter.py +++ b/backend/app/utils/active_pastes_counter.py @@ -40,13 +40,13 @@ async def initialize(self) -> None: """Initialize the counter from the database.""" count = await self._get_count_from_db() active_pastes.set(count) - logger.info("Initialized active_pastes gauge to %d", count) + logger.debug("Initialized active_pastes gauge to %d", count) def start_refresh_task(self) -> None: """Start the periodic refresh task.""" if self._refresh_task is None: self._refresh_task = asyncio.create_task(self._refresh_loop()) - logger.info("Started active_pastes refresh task (interval: %ds)", REFRESH_INTERVAL_SECONDS) + logger.debug("Started active_pastes refresh task (interval: %ds)", REFRESH_INTERVAL_SECONDS) async def stop_refresh_task(self) -> None: """Stop the periodic refresh task.""" @@ -55,7 +55,7 @@ async def stop_refresh_task(self) -> None: with contextlib.suppress(asyncio.CancelledError): await self._refresh_task self._refresh_task = None - logger.info("Stopped active_pastes refresh task") + logger.debug("Stopped active_pastes refresh task") async def _refresh_loop(self) -> None: """Periodically refresh the gauge from the database.""" diff --git a/backend/app/utils/logging.py b/backend/app/utils/logging.py index c86afe1..f9a8f33 100644 --- a/backend/app/utils/logging.py +++ b/backend/app/utils/logging.py @@ -31,6 +31,9 @@ def configure_logging( # Convert string level to logging level numeric_level = getattr(logging, level.upper(), logging.INFO) + # Set root logger level explicitly to ensure all child loggers respect it + logging.getLogger().setLevel(numeric_level) + if log_format == "json": try: import structlog @@ -59,11 +62,16 @@ def configure_logging( format="%(message)s", stream=sys.stdout, level=numeric_level, + force=True, ) # Wrap standard library loggers with structlog structlog.stdlib.recreate_defaults(log_level=numeric_level) + # Configure uvicorn loggers for JSON format + formatter = logging.Formatter("%(message)s") + _configure_uvicorn_loggers(numeric_level, formatter) + except ImportError: # Fallback to text format if structlog not installed logging.warning("structlog not installed, falling back to text format. Install with: pip install structlog") @@ -71,29 +79,36 @@ def configure_logging( else: _configure_text_logging(numeric_level) - # Apply healthcheck log filter to uvicorn access logger - _configure_access_log_filter() - def _configure_text_logging(level: int) -> None: """Configure standard text-based logging.""" # Custom format with timestamp, level, name, and message log_format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + date_format = "%Y-%m-%d %H:%M:%S" logging.basicConfig( format=log_format, - datefmt="%Y-%m-%d %H:%M:%S", + datefmt=date_format, stream=sys.stdout, level=level, + force=True, ) - # Reduce noise from some verbose libraries - logging.getLogger("httpx").setLevel(logging.WARNING) - logging.getLogger("httpcore").setLevel(logging.WARNING) - logging.getLogger("asyncio").setLevel(logging.WARNING) + # Configure uvicorn loggers to use the same format + formatter = logging.Formatter(log_format, datefmt=date_format) + _configure_uvicorn_loggers(level, formatter) + +def _configure_uvicorn_loggers(level: int, formatter: logging.Formatter) -> None: + """Configure uvicorn loggers to use consistent formatting.""" + for logger_name in ("uvicorn", "uvicorn.error", "uvicorn.access"): + logger = logging.getLogger(logger_name) + logger.handlers.clear() + handler = logging.StreamHandler(sys.stdout) + handler.setFormatter(formatter) + logger.addHandler(handler) + logger.setLevel(level) + logger.propagate = False -def _configure_access_log_filter() -> None: - """Add filter to suppress healthcheck endpoint logs from uvicorn access logs.""" - uvicorn_access_logger = logging.getLogger("uvicorn.access") - uvicorn_access_logger.addFilter(HealthcheckLogFilter()) + # Add healthcheck filter to access logger + logging.getLogger("uvicorn.access").addFilter(HealthcheckLogFilter()) From 32d5b89bc3ba2c5fe20f56a8cec0946a248fc819 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Tue, 13 Jan 2026 14:36:18 +0000 Subject: [PATCH 3/4] fix devbin logo font --- frontend/static/devbin-logo.png | Bin 6402 -> 6207 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/static/devbin-logo.png b/frontend/static/devbin-logo.png index 6d35c1a1035df733fda6d1fb0ffc27a144ac9b43..9a2df7b4fe69f234c88e0b094f5040352a8e4573 100644 GIT binary patch delta 6104 zcmX9?c|26_|GhH?Gug&SC^9l+jY5bRON@Qril~TEc1f5!BqcjZ_K|&^L{!2k*%DKP zY(rv@eP=A+`TTzOzvrHF&v~A6?|r}CuXn_SX8A-LkgwlBSIhb#WO2;um+iC` zffDZhCtgDhNa)zB+E;dNnL37Cwn^iF+#@y)w}_Z7jL~wa-91YS3kyrJjlJCpYSe_< zw?U2U4GNhH%gW8PUUeNgfulC-n8@eXbb)EjhvTDmAJ&WpTgt?e3 z5=p!xGTlug%{e!E9gNNU!~fxTd!Hm1%o*E`87dxhNz=vQmSQ#tblR!e?99x6vTieU z1u@Qf-o*W!|imC?T~)%5*A&7n~G*=f8$A zN5uChAqY%i_`{o3_A*;WNsVzhKcDULgv|UG$C7}3q-nCsA#x_V?J_#fu9YA zrAZX}2$bR{s|ttMjXiF@?|)8>IB?b!(96_W2^{M6xsU5gYt4KGo_M z`8RbWT~pVET~rEaXarXSL+Vb?x?q_nqVAHB)ph{<&{|u`<=K!l!S8oMkH&ZQa$wY) zqg7(yn2QPZr4IbCUq=ar~gmuvh)Z(3N?4jKDV{(YwUt!(dd~qp;D> zpMn+s8<5bFw;QY@K{LHe{9QD7?Q?ZVg+qNXE^*Wd_&zNkW8U1sLy&NbM`7g~%LG+E zhS_N(+{Gr~cz~e&yp5-n1^;8$snrV2X~fDiCcx~@W3h?&sZV7r@thpf)kxz^-Iu`5 zC%oXnjZTcvr-D5e3dSR$gW=xF1fzhb`On=;!HGkEPaU$kBW|W7Mq?*${74duE`dsL zA_<(+oS(DR)>YE)ai1{&k}+LJuiR>!`dj?2yx#tSft!W!5S0h1BTDrPM~It&i-Gl& zs5olD@rM=_#HSPtTrY(Ajh~l*p~ADDiAwH3J}lhB46wvyEwNeD=pp3e-h)a9VSweR z9^m_?nETdzFwZa@s9GL5gSeUYS_9CucPBzBc?p;4T<8a??7Vw@834xl9Uqx}z+7aH z`R<)1Ch{mKA3M)S4h@%TL;ykr7qsVBkpRxC8{&W>glwJ6=|xQkH5ZFdcp3rfOy&oo zQ=jh3JAlJxvI8%Hm%X4|FE?S=?@o?ti7W)}(8Z0tP;e39VGNwn2Rf6wK0r_M0K-S( zk|#*W+E#yN%T$={A0izh&bbFcKpH~%JnLWkSKrwn0Wc*Ps#fwb7rXP115yylNx|A zB0i_nAC?GMvIvE*CR(by{TYtH0idM+ob(1$YvkYwMXz`Oh3z7W%G;`|??f1Ud5i-j z71Zbmt%`?2kXw2zjAx@VfmwKLx>hk#6jDH0SSW_AzBLs&-OXju%|Jc2j1-xS(Xi>M zrQ^C#T%PkGwHF>sk)}xwh<#aRtKh|f~*xjKb z*c0>UI0Xz)^5pn*3&a6PI2ZRJ?I~D(2@Yx_WgYtM7+c3m~Fsn>YYK$ZLX00gS%~ zM|i@F0SNtj^X0w0Nh}OVGK#^0YkyN`g@LU|6<2vPb+mtfU=5pYO+QC3bz~O$eEYEAD-vRfItf5`mkw_=BsD_DXe{YIarRcYT}UVi)q3 z4<~aemWm@UgF*gXuq$~9uRc5WtP z!u>`vtBeo|Ys^ps$I_@R)5_G*LPb_N*4y@`uYC;<%;`HF`0{RVSG~ntWtR_kxC5>Q zm5V3Xsb#8BPNJ~v6&H_u4w90MmNJ`H)xg@#czVUDqr*z-!F90?z0;#QH+Gpd>q*;- z^rp?jFwgp{%Hy2%M~x~7MYdV1;x^Bvb^i~4;5WCImitF(Yr?$PT1F)DYc2;Cn;j|n z8$-9u1_Ft`Z~W-FOtKy>sw_e5{Wb!jk<;61rQ^MgvJA1t#zk+=+1obcp`mYJAYHIP zfSek=y&fBPprG}CVk#=;{<#UE`tgFEdl^iuoKNSS+#7J$ElPV?C#r8k7g`pT(gjxdG*I+U@Uz zAHoCT?C!dG=|W|fe5ZbbnjI9;T0RuE)oW~H^J6=Hug~SyxOXG3I>d*oLD|DB7cWQg z{9w7lG8M%Ur-oL2*cknUc2e>4bhEM+ab528e}-zwEZG}=hx^Bw-?j8@ZL`hKjAT@N zpx%Z3(a+&*r7wGra!uF?!Awjk*I&VpS8r;B3-lX5(;(QCH-Mf?B-`y^U9^NZ>sVRN zj7~_gX=C0cw(|VrrV3<|9d*Ru*_x&Xqatz_I5quu&uP*}ft(4LA7(O}0Pw&2?UmB0 zx7u^cKP(TjudryIjY~O8ML%PeA{=+xaxu>P z>AussXjRZW0@gB*>1i7yPG2;hTu zyR*Ij-um^yUQ@@LZ*C_0q`JCe_R>ENyzxPtFhg^{Y2|xc_t^gJUZo3G8qL)EM~9a= z%&>R)a!xMHXv~Lbo{iANGZIr<_IKq(y;2v}1n;e^?J|3f_D|$tvkl10>{?zdKI>oA zm`_fF`-~53Vo}!pJ2XYDXJ>!^jSBK0YVvx>=JNcBKOU~ut-HSLbQ#J=_y1xu1BCDT?C+b2Bd0Bn-3X1Lr3$>_&^` zZ}2@m`n2R7njE{WE6^7H@Ok^U+}GwifmxWfUiHb4R#I(mSY77;shE<*lQt^WtPGj# z)>I%OkSRZY(6ogh!PO?56<=f1)jW^M6oG$d$WF!zxdW~nLD^(OxD})K?V@ldj)5iZK{RDnAbmw2u7qH#h;dXP{`lZ8k$<>P`Gpk+8m@>M>uESwtD;TtO z#U7-0jvQfm=Gz|fC#Feerl(g1^xPk>jlt9FqokK<Fv@`+i`s7p>oM@_d&ev zR->z?^9yS6r2E=|!+35N-daN@)3rI~fbd0T3Uukw}@o!sI2;cJ)UhDEYfL zb-Ed+X7d6Z_~YAP7^NLtC-qmc5S<59HAo%5c;hV#EIt%Jy^#EP?}^k27% z@4Xk^57|VyPWO5=Htku`nrbvdomDcWz3sZ@o9wnng4M0Uf^HnqRl)j;Exk#HVSTA) z=B90_G@C60qudAjI>J~GIgmCQ51nf=peJ=XyDGiEYiJYn+2cdyTIIg&&rTVQGP*ej z4lnC%W;hpI6>y)du@;hoOpv!GIiSCtU$lw|+19ZQ8b{o-7|-jXN*Q$GE0SNUd>C-M z7(#zHlKAe3u$0jEh%XO=CRqdI=m-EzgEi|&|_Ze!hu(e_7(sN)!#t5KqdYiH``y z^TmOe2W`qa{A$_k-iel4cBXCHeuR!6IwjH@of^*Sy4j%x8HbdjT3KBFsh~Dq=DcuM zZNNs-e78g5vt3#0#S45u=`UU!J1ROeg?L0;bUpZj6ubnvW`DSTl&1vl zA!Th#L$ASi_G=R2&8^>mNg!EvyC1IVVl_(44^|f9Iq@hw7)^p*dl%6gJ++QRhG6y*@2rUn#Nf#C}diL<5t95 z+q(M=m;1$9R3yG&fbsgt$@#Au@14W9<5En){6J3CJ1cR{PYYWjEY2(GobCM?0>r+~G!ZW?yHc-W4=^_fN3w$}_$nm6_vSujk;864j zhd|W%62n7zqXd5xC9Dy;@>B!RQHk+e(-l0oIu_omZ*%=>W+vRr5wWtllOc=wJiQ6- zu^9Q>Z}9Xt*&RRk<;xcDvxm)kzi7MW@3wc>eSZE?WgQpmti0X2FGt5rP?Lu@0Yoa95V={=FYc{md62TKrZqAPdNf`Dw{8v%f z^D(95k2{sqX_0t{e9B8$qU`M?KymeYTW0&HZ!k&G-WJV4f#HxjGEXvqU*VY$(*Fa;#*>slf4KW~359*T_MONv^p8WKy{Nr5Pslgu;6PGz??aTBj z{i{9oxf$v@H?o82x?h@Ys+{3TC=6RcbWdM6+x&nT5=Z$(c-WCJxUS!;S^Kz70}y%g zQmOlA?8yGLy78wIX4#mF5XG0WcRsrv4z0^wYf0b@=rha_H34g7$3hr`AyykIk3>xvHh!Uxg!B^9|72Bl$Hjy8HiRQ$fprRUnqg1 z3#-lt4der0P?_hk=m)iD0g>ZLWYY4Ic^v)^qql~3uFDw#IePb zTg^QJgm{ma%zOb602;PBcsv}3B2QO60jE4zfXF1FVz_QHATJ0a2`HkE<(g!Fh(3dwdk3+p3(f+Fc_p_nYgg#z%zz?l z@kj0ze4vXp1UPgp+CW~BS%bM`k73|_k0FllX-Dg3)HwBXXUu>FzroKM-5?v_v+`Q_ zx4qPqJqqY$OVnNx1>R(QwTPpKxJiohHD~QR1oaL(TL~YTLUEF6JDZN1XD7C%0vYd2 zF0nuaiaYg-Z|nD8H4uCLc_CuLc8QDpJ0kI%wz1={UqT@YL(gKiH)r-j8qUduIN3lC zV3fIviRPJc?HlS_@hd~pAkdZ_QHFZY_vJBVwLfU|#e{pCQ&T<3`x_VLhX{05QCs8S z_umHAPIPq~RPllueeR*zHV3W0`Ghj-BLsR5X7bJWb}ubub#qJkrX$ov3Sqnv;H@Hp zE4!h+!G?`+5CgXxbF;v{j(D%B4B)!w!2Q#x!fuN*>7s;43DO*R^nQsgL?(3=LH;pV zA4nQgCg=h)hK3Vrs1!i3EX4=ASZBzx27$_lhh6`sLVA??f*gc72T}QNX3WjYYJFve z(7FdjD)DZFPMS*2M&6wgR(7+Ot7sJm>K(m^L0(>U&d1JU3O;clAORC=*TdR1%&FCU zc2x^GxVw}FFi;n|^2LNXHTxGlqQk);98BZ4jU4EowF)=;G3{cSY9%AI?o~XH>B_<+iOw3^{ytZ1kq;nyr5wc`q)aL z8dkIYSZ@qtK+WEe5H9;StKCrGcc!F)9dA-+uye6!lVhV)b%nTx8gGe$AbAs% uUP1p_@v7%U&A|H9CF<$_=H&duHWGkqee-nHG+hN?Tn1N6b*r>pBK`-rW>d`o delta 6300 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 qmVKe0yn^Q6woE Date: Thu, 19 Mar 2026 16:52:04 +0300 Subject: [PATCH 4/4] feat: add syntax highlighting to frontend and aritrary lang input to backend --- frontend/package.json | 14 +- frontend/pnpm-lock.yaml | 794 ++++++++++++------ .../src/lib/components/code-editor.svelte | 89 +- frontend/src/lib/editor-lang.ts | 275 +++++- frontend/src/lib/editor-theme.ts | 91 +- frontend/src/lib/types.ts | 2 +- frontend/src/routes/+page.server.ts | 1 - frontend/src/routes/+page.svelte | 18 +- .../src/routes/paste/[id]/+page.server.ts | 6 +- frontend/src/routes/paste/[id]/+page.svelte | 2 +- frontend/vite.config.ts | 4 +- 11 files changed, 904 insertions(+), 392 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index 12318e8..55869c3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -30,25 +30,37 @@ }, "dependencies": { "@babel/runtime": "^7.28.4", + "@cmshiki/shiki": "^0.2.0", + "@codemirror/lang-angular": "^0.1.4", "@codemirror/lang-cpp": "^6.0.3", "@codemirror/lang-css": "^6.3.1", + "@codemirror/lang-go": "^6.0.1", "@codemirror/lang-html": "^6.4.11", "@codemirror/lang-java": "^6.0.2", "@codemirror/lang-javascript": "^6.2.4", "@codemirror/lang-json": "^6.0.2", + "@codemirror/lang-less": "^6.0.2", "@codemirror/lang-markdown": "^6.5.0", + "@codemirror/lang-php": "^6.0.2", "@codemirror/lang-python": "^6.2.1", + "@codemirror/lang-rust": "^6.0.2", + "@codemirror/lang-sass": "^6.0.2", "@codemirror/lang-sql": "^6.10.0", + "@codemirror/lang-xml": "^6.1.0", "@codemirror/lang-yaml": "^6.1.2", "@codemirror/language": "^6.12.1", "@codemirror/state": "^6.5.3", "@codemirror/view": "^6.39.8", "@ethercorps/sveltekit-og": "^4.2.1", + "@fsegurai/codemirror-theme-abyss": "^6.2.3", + "@fsegurai/codemirror-theme-monokai": "^6.2.3", + "@fsegurai/codemirror-theme-tokyo-night-storm": "^6.2.3", "@hey-api/openapi-ts": "^0.89.1", "@lezer/highlight": "^1.2.3", - "@uiw/codemirror-theme-basic": "^4.25.4", + "@replit/codemirror-lang-csharp": "^6.2.0", "axios": "^1.13.2", "codemirror": "^6.0.2", + "codemirror-shiki": "^0.3.0", "date-fns": "^4.1.0", "dotenv": "^17.2.3", "sharp": "^0.34.5", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 3670c7b..a7611cd 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -10,13 +10,22 @@ importers: dependencies: '@babel/runtime': specifier: ^7.28.4 - version: 7.28.4 + version: 7.28.6 + '@cmshiki/shiki': + specifier: ^0.2.0 + version: 0.2.0(@codemirror/state@6.5.3)(@codemirror/view@6.39.10)(shiki@3.21.0) + '@codemirror/lang-angular': + specifier: ^0.1.4 + version: 0.1.4 '@codemirror/lang-cpp': specifier: ^6.0.3 version: 6.0.3 '@codemirror/lang-css': specifier: ^6.3.1 version: 6.3.1 + '@codemirror/lang-go': + specifier: ^6.0.1 + version: 6.0.1 '@codemirror/lang-html': specifier: ^6.4.11 version: 6.4.11 @@ -29,15 +38,30 @@ importers: '@codemirror/lang-json': specifier: ^6.0.2 version: 6.0.2 + '@codemirror/lang-less': + specifier: ^6.0.2 + version: 6.0.2 '@codemirror/lang-markdown': specifier: ^6.5.0 version: 6.5.0 + '@codemirror/lang-php': + specifier: ^6.0.2 + version: 6.0.2 '@codemirror/lang-python': specifier: ^6.2.1 version: 6.2.1 + '@codemirror/lang-rust': + specifier: ^6.0.2 + version: 6.0.2 + '@codemirror/lang-sass': + specifier: ^6.0.2 + version: 6.0.2 '@codemirror/lang-sql': specifier: ^6.10.0 version: 6.10.0 + '@codemirror/lang-xml': + specifier: ^6.1.0 + version: 6.1.0 '@codemirror/lang-yaml': specifier: ^6.1.2 version: 6.1.2 @@ -49,25 +73,37 @@ importers: version: 6.5.3 '@codemirror/view': specifier: ^6.39.8 - version: 6.39.8 + version: 6.39.10 '@ethercorps/sveltekit-og': specifier: ^4.2.1 - version: 4.2.1(@sveltejs/kit@2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))) + version: 4.2.1(@sveltejs/kit@2.49.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2))) + '@fsegurai/codemirror-theme-abyss': + specifier: ^6.2.3 + version: 6.2.3(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.3) + '@fsegurai/codemirror-theme-monokai': + specifier: ^6.2.3 + version: 6.2.3(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.3) + '@fsegurai/codemirror-theme-tokyo-night-storm': + specifier: ^6.2.3 + version: 6.2.3(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.3) '@hey-api/openapi-ts': specifier: ^0.89.1 version: 0.89.2(typescript@5.9.3) '@lezer/highlight': specifier: ^1.2.3 version: 1.2.3 - '@uiw/codemirror-theme-basic': - specifier: ^4.25.4 - version: 4.25.4(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.8) + '@replit/codemirror-lang-csharp': + specifier: ^6.2.0 + version: 6.2.0(@codemirror/autocomplete@6.20.0)(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.10)(@lezer/common@1.5.0)(@lezer/highlight@1.2.3)(@lezer/lr@1.4.7) axios: specifier: ^1.13.2 version: 1.13.2 codemirror: specifier: ^6.0.2 version: 6.0.2 + codemirror-shiki: + specifier: ^0.3.0 + version: 0.3.0(@codemirror/state@6.5.3)(@codemirror/view@6.39.10)(shiki@3.21.0) date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -79,35 +115,35 @@ importers: version: 0.34.5 thememirror: specifier: ^2.0.1 - version: 2.0.1(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.8) + version: 2.0.1(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.10) devDependencies: '@sveltejs/adapter-auto': specifier: ^7.0.0 - version: 7.0.0(@sveltejs/kit@2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))) + version: 7.0.0(@sveltejs/kit@2.49.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2))) '@sveltejs/adapter-node': specifier: ^5.4.0 - version: 5.4.0(@sveltejs/kit@2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))) + version: 5.5.0(@sveltejs/kit@2.49.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2))) '@sveltejs/kit': specifier: ^2.48.5 - version: 2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)) + version: 2.49.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)) '@sveltejs/vite-plugin-svelte': specifier: ^6.2.1 - version: 6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)) + version: 6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)) '@tailwindcss/vite': specifier: ^4.1.17 - version: 4.1.18(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)) + version: 4.1.18(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)) '@types/node': specifier: ^25.0.3 - version: 25.0.3 + version: 25.0.8 shiki: specifier: ^3.21.0 version: 3.21.0 svelte: specifier: ^5.43.8 - version: 5.46.1 + version: 5.46.3 svelte-check: specifier: ^4.3.4 - version: 4.3.5(picomatch@4.0.3)(svelte@5.46.1)(typescript@5.9.3) + version: 4.3.5(picomatch@4.0.3)(svelte@5.46.3)(typescript@5.9.3) tailwindcss: specifier: ^4.1.17 version: 4.1.18 @@ -116,26 +152,42 @@ importers: version: 5.9.3 vite: specifier: ^7.2.2 - version: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2) + version: 7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2) packages: - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + '@babel/runtime@7.28.6': + resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} + '@cmshiki/shiki@0.2.0': + resolution: {integrity: sha512-6EMM02PSGh0anj4OKVRBqqzMX3EY6xMVgniuH9Y8qp1IgnkVybjwOJ3oz0jptfmBm87fAdM6w37IQ4k/UueQgg==} + peerDependencies: + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + shiki: ^3.0.0 + + '@cmshiki/utils@0.2.0': + resolution: {integrity: sha512-gsaITcN1j5UnD8sBCz4hrfEqgbwgUyjxRPOO8UyBqWyWQ/abo/GVu9dNJqZKjYWAZW6jnk7VIGSamFpGgY31jg==} + '@codemirror/autocomplete@6.20.0': resolution: {integrity: sha512-bOwvTOIJcG5FVo5gUUupiwYh8MioPLQ4UcqbcRf7UQ98X90tCa9E1kZ3Z7tqwpZxYyOvh1YTYbmZE9RTfTp5hg==} '@codemirror/commands@6.10.1': resolution: {integrity: sha512-uWDWFypNdQmz2y1LaNJzK7fL7TYKLeUAU0npEC685OKTF3KcQ2Vu3klIM78D7I6wGhktme0lh3CuQLv0ZCrD9Q==} + '@codemirror/lang-angular@0.1.4': + resolution: {integrity: sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==} + '@codemirror/lang-cpp@6.0.3': resolution: {integrity: sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==} '@codemirror/lang-css@6.3.1': resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==} + '@codemirror/lang-go@6.0.1': + resolution: {integrity: sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==} + '@codemirror/lang-html@6.4.11': resolution: {integrity: sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==} @@ -148,15 +200,30 @@ packages: '@codemirror/lang-json@6.0.2': resolution: {integrity: sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==} + '@codemirror/lang-less@6.0.2': + resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==} + '@codemirror/lang-markdown@6.5.0': resolution: {integrity: sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==} + '@codemirror/lang-php@6.0.2': + resolution: {integrity: sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==} + '@codemirror/lang-python@6.2.1': resolution: {integrity: sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==} + '@codemirror/lang-rust@6.0.2': + resolution: {integrity: sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==} + + '@codemirror/lang-sass@6.0.2': + resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==} + '@codemirror/lang-sql@6.10.0': resolution: {integrity: sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==} + '@codemirror/lang-xml@6.1.0': + resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==} + '@codemirror/lang-yaml@6.1.2': resolution: {integrity: sha512-dxrfG8w5Ce/QbT7YID7mWZFKhdhsaTNOYjOkSIMt1qmC4VQnXSDSYVHHHn8k6kJUfIhtLo8t1JJgltlxWdsITw==} @@ -166,14 +233,17 @@ packages: '@codemirror/lint@6.9.2': resolution: {integrity: sha512-sv3DylBiIyi+xKwRCJAAsBZZZWo82shJ/RTMymLabAdtbkV5cSKwWDeCgtUq3v8flTaXS2y1kKkICuRYtUswyQ==} - '@codemirror/search@6.5.11': - resolution: {integrity: sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==} + '@codemirror/search@6.6.0': + resolution: {integrity: sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw==} '@codemirror/state@6.5.3': resolution: {integrity: sha512-MerMzJzlXogk2fxWFU1nKp36bY5orBG59HnPiz0G9nLRebWa0zXuv2siH6PLIHBvv5TH8CkQRqjBs0MlxCZu+A==} - '@codemirror/view@6.39.8': - resolution: {integrity: sha512-1rASYd9Z/mE3tkbC9wInRlCNyCkSn+nLsiQKZhEDUUJiUfs/5FHDpCUDaQpoTIaNGeDc6/bhaEAyLmeEucEFPw==} + '@codemirror/view@6.39.10': + resolution: {integrity: sha512-QfT/PXhiiP76PxMnX0RQVPDQrqfRt9wr9QhInNHnEUu4PWoNS8QwwcIDEneXFChJv22y+Yu/Cz5lFMTPz+h16w==} + + '@codemirror/view@6.39.9': + resolution: {integrity: sha512-miGSIfBOKC1s2oHoa80dp+BjtsL8sXsrgGlQnQuOcfvaedcQUtqddTmKbJSDkLl4mkgPvZyXuKic2HDNYcJLYA==} '@emnapi/runtime@1.8.1': resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} @@ -339,6 +409,30 @@ packages: peerDependencies: '@sveltejs/kit': '>=2.0.0' + '@fsegurai/codemirror-theme-abyss@6.2.3': + resolution: {integrity: sha512-yU6lXHNM9mHGexMT9cNi45ma/vaXtPAwI8pP9yQt7M6Bh8WOeycDzd3WDpOcQaBleS26fCSfeNBdixhevP3Lbg==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/highlight': ^1.0.0 + + '@fsegurai/codemirror-theme-monokai@6.2.3': + resolution: {integrity: sha512-kHiansKaONRuTU76zavJ9KRJnITbg6y6PXBVX0ZEUSf6WSdTAAgubYay+M6tVNMAirwAdkHnIjjZbh8GXeg01g==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/highlight': ^1.0.0 + + '@fsegurai/codemirror-theme-tokyo-night-storm@6.2.3': + resolution: {integrity: sha512-1Nhke42cQ2HHH50ia5Ya8LswVlRSnYjXfl5wfXcTLMSGmA4RxiiyN6OsDPHFVYjCdGJEzTXkX20N6h5HQVgO6Q==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/highlight': ^1.0.0 + '@hey-api/codegen-core@0.4.0': resolution: {integrity: sha512-o8rBbEXEUhEPzrHbqImYjwIHm4Oj0r1RPS+5cp8Z66kPO7SEN7PYUgK7XpmSxoy9LPMNK1M5qmCO4cGGwT+ELQ==} engines: {node: '>=20.19.0'} @@ -515,12 +609,15 @@ packages: '@lezer/common@1.5.0': resolution: {integrity: sha512-PNGcolp9hr4PJdXR4ix7XtixDrClScvtSCYW3rQG106oVMOOI+jFb+0+J3mbeL/53g1Zd6s0kJzaw6Ri68GmAA==} - '@lezer/cpp@1.1.4': - resolution: {integrity: sha512-aYSdZyUueeTgnfXQntiGUqKNW5WujlAsIbbHzkfJDneSZoyjPg8ObmWG3bzDPVYMC/Kf4l43WJLCunPnYFfQ0g==} + '@lezer/cpp@1.1.5': + resolution: {integrity: sha512-DIhSXmYtJKLehrjzDFN+2cPt547ySQ41nA8yqcDf/GxMc+YM736xqltFkvADL2M0VebU5I+3+4ks2Vv+Kyq3Aw==} '@lezer/css@1.3.0': resolution: {integrity: sha512-pBL7hup88KbI7hXnZV3PQsn43DHy6TWyzuyk2AO9UyoXcDltvIdqWKE1dLL/45JVZ+YZkHe1WVHqO6wugZZWcw==} + '@lezer/go@1.0.1': + resolution: {integrity: sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==} + '@lezer/highlight@1.2.3': resolution: {integrity: sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==} @@ -536,15 +633,27 @@ packages: '@lezer/json@1.0.3': resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} - '@lezer/lr@1.4.5': - resolution: {integrity: sha512-/YTRKP5yPPSo1xImYQk7AZZMAgap0kegzqCSYHjAL9x1AZ0ZQW+IpcEzMKagCsbTsLnVeWkxYrCNeXG8xEPrjg==} + '@lezer/lr@1.4.7': + resolution: {integrity: sha512-wNIFWdSUfX9Jc6ePMzxSPVgTVB4EOfDIwLQLWASyiUdHKaMsiilj9bYiGkGQCKVodd0x6bgQCV207PILGFCF9Q==} + + '@lezer/markdown@1.6.3': + resolution: {integrity: sha512-jpGm5Ps+XErS+xA4urw7ogEGkeZOahVQF21Z6oECF0sj+2liwZopd2+I8uH5I/vZsRuuze3OxBREIANLf6KKUw==} - '@lezer/markdown@1.6.2': - resolution: {integrity: sha512-iNSdKrIK0FfOjVPVpV0fu7OykdncYpEzf4vkG9szFf60ql/ObZShoVbM9u1tgkogDOmubms1CyoNS2/unOXWNw==} + '@lezer/php@1.0.5': + resolution: {integrity: sha512-W7asp9DhM6q0W6DYNwIkLSKOvxlXRrif+UXBMxzsJUuqmhE7oVU+gS3THO4S/Puh7Xzgm858UNaFi6dxTP8dJA==} '@lezer/python@1.1.18': resolution: {integrity: sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==} + '@lezer/rust@1.0.2': + resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==} + + '@lezer/sass@1.1.0': + resolution: {integrity: sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==} + + '@lezer/xml@1.0.6': + resolution: {integrity: sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==} + '@lezer/yaml@1.0.3': resolution: {integrity: sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==} @@ -554,6 +663,17 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@replit/codemirror-lang-csharp@6.2.0': + resolution: {integrity: sha512-6utbaWkoymhoAXj051mkRp+VIJlpwUgCX9Toevz3YatiZsz512fw3OVCedXQx+WcR0wb6zVHjChnuxqfCLtFVQ==} + peerDependencies: + '@codemirror/autocomplete': ^6.0.0 + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/common': ^1.0.0 + '@lezer/highlight': ^1.0.0 + '@lezer/lr': ^1.0.0 + '@resvg/resvg-wasm@2.6.2': resolution: {integrity: sha512-FqALmHI8D4o6lk/LRWDnhw95z5eO+eAa6ORjVg09YRR7BkcM6oPHU9uyC0gtQG5vpFLvgpeU4+zEAz2H8APHNw==} engines: {node: '>= 10'} @@ -594,113 +714,128 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.54.0': - resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} + '@rollup/rollup-android-arm-eabi@4.55.1': + resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.54.0': - resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} + '@rollup/rollup-android-arm64@4.55.1': + resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.54.0': - resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} + '@rollup/rollup-darwin-arm64@4.55.1': + resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.54.0': - resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} + '@rollup/rollup-darwin-x64@4.55.1': + resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.54.0': - resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} + '@rollup/rollup-freebsd-arm64@4.55.1': + resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.54.0': - resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} + '@rollup/rollup-freebsd-x64@4.55.1': + resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.54.0': - resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.54.0': - resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} + '@rollup/rollup-linux-arm-musleabihf@4.55.1': + resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.54.0': - resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} + '@rollup/rollup-linux-arm64-gnu@4.55.1': + resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.54.0': - resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} + '@rollup/rollup-linux-arm64-musl@4.55.1': + resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.54.0': - resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} + '@rollup/rollup-linux-loong64-gnu@4.55.1': + resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-loong64-musl@4.55.1': + resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.54.0': - resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} + '@rollup/rollup-linux-ppc64-gnu@4.55.1': + resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-ppc64-musl@4.55.1': + resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.54.0': - resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} + '@rollup/rollup-linux-riscv64-gnu@4.55.1': + resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.54.0': - resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} + '@rollup/rollup-linux-riscv64-musl@4.55.1': + resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.54.0': - resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} + '@rollup/rollup-linux-s390x-gnu@4.55.1': + resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.54.0': - resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} + '@rollup/rollup-linux-x64-gnu@4.55.1': + resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.54.0': - resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} + '@rollup/rollup-linux-x64-musl@4.55.1': + resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.54.0': - resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} + '@rollup/rollup-openbsd-x64@4.55.1': + resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.55.1': + resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.54.0': - resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} + '@rollup/rollup-win32-arm64-msvc@4.55.1': + resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.54.0': - resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} + '@rollup/rollup-win32-ia32-msvc@4.55.1': + resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.54.0': - resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} + '@rollup/rollup-win32-x64-gnu@4.55.1': + resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.54.0': - resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} + '@rollup/rollup-win32-x64-msvc@4.55.1': + resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} cpu: [x64] os: [win32] @@ -743,34 +878,37 @@ packages: peerDependencies: '@sveltejs/kit': ^2.0.0 - '@sveltejs/adapter-node@5.4.0': - resolution: {integrity: sha512-NMsrwGVPEn+J73zH83Uhss/hYYZN6zT3u31R3IHAn3MiKC3h8fjmIAhLfTSOeNHr5wPYfjjMg8E+1gyFgyrEcQ==} + '@sveltejs/adapter-node@5.5.0': + resolution: {integrity: sha512-xHzWyo2vRYqR/DyyFboIOVplz411RAyZvt0/UVPebRIhg3PGXty09mjiRt0nPj7zL0oPxqeCTu4RmHdsFkP/7w==} peerDependencies: '@sveltejs/kit': ^2.4.0 - '@sveltejs/kit@2.49.2': - resolution: {integrity: sha512-Vp3zX/qlwerQmHMP6x0Ry1oY7eKKRcOWGc2P59srOp4zcqyn+etJyQpELgOi4+ZSUgteX8Y387NuwruLgGXLUQ==} + '@sveltejs/kit@2.49.4': + resolution: {integrity: sha512-JFtOqDoU0DI/+QSG8qnq5bKcehVb3tCHhOG4amsSYth5/KgO4EkJvi42xSAiyKmXAAULW1/Zdb6lkgGEgSxdZg==} engines: {node: '>=18.13'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.0.0 '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: ^5.3.3 vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 peerDependenciesMeta: '@opentelemetry/api': optional: true + typescript: + optional: true - '@sveltejs/vite-plugin-svelte-inspector@5.0.1': - resolution: {integrity: sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==} + '@sveltejs/vite-plugin-svelte-inspector@5.0.2': + resolution: {integrity: sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==} engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 svelte: ^5.0.0 vite: ^6.3.0 || ^7.0.0 - '@sveltejs/vite-plugin-svelte@6.2.1': - resolution: {integrity: sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==} + '@sveltejs/vite-plugin-svelte@6.2.4': + resolution: {integrity: sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==} engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: svelte: ^5.0.0 @@ -942,8 +1080,8 @@ packages: '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - '@types/node@25.0.3': - resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==} + '@types/node@25.0.8': + resolution: {integrity: sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -951,16 +1089,6 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@uiw/codemirror-theme-basic@4.25.4': - resolution: {integrity: sha512-iynG7rW3IYWthvevHU5AvdEFKEhytYi5j4a9xgSOZ2lk5/4UvBClZQeyIm+/EZr0D1YZKULIku4lNfxqVbo4Pg==} - - '@uiw/codemirror-themes@4.25.4': - resolution: {integrity: sha512-2SLktItgcZC4p0+PfFusEbAHwbuAWe3bOOntCevVgHtrWGtGZX3IPv2k8IKZMgOXtAHyGKpJvT9/nspPn/uCQg==} - peerDependencies: - '@codemirror/language': '>=6.0.0' - '@codemirror/state': '>=6.0.0' - '@codemirror/view': '>=6.0.0' - '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -1033,6 +1161,13 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + codemirror-shiki@0.3.0: + resolution: {integrity: sha512-KSrfcm8RNSgTl3+Vgq+HuGA/bQGbxBMGosoFXL77yWc6r8JjLygIBndqL9evCv2ED9EOoeZozROcXNanN7Mabg==} + peerDependencies: + '@codemirror/state': ^6 + '@codemirror/view': ^6 + shiki: '>=2.0.0' + codemirror@6.0.2: resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==} @@ -1090,15 +1225,6 @@ packages: date-fns@4.1.0: resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -1436,9 +1562,6 @@ packages: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1452,6 +1575,9 @@ packages: engines: {node: ^14.16.0 || >=16.10.0} hasBin: true + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} @@ -1531,8 +1657,8 @@ packages: engines: {node: '>= 0.4'} hasBin: true - rollup@4.54.0: - resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} + rollup@4.55.1: + resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -1601,8 +1727,8 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 typescript: '>=5.0.0' - svelte@5.46.1: - resolution: {integrity: sha512-ynjfCHD3nP2el70kN5Pmg37sSi0EjOm9FgHYQdC4giWG/hzO3AatzXXJJgP305uIhGQxSufJLuYWtkY8uK/8RA==} + svelte@5.46.3: + resolution: {integrity: sha512-Y5juST3x+/ySty5tYJCVWa6Corkxpt25bUZQHqOceg9xfMUtDsFx6rCsG6cYf1cA6vzDi66HIvaki0byZZX95A==} engines: {node: '>=18'} tailwindcss@4.1.18: @@ -1645,8 +1771,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + ufo@1.6.2: + resolution: {integrity: sha512-heMioaxBcG9+Znsda5Q8sQbWnLJSl98AFDXTO80wELWEzX3hordXsTdxrIfMQoO9IY1MEnoGoPjpoKpMj+Yx0Q==} ultrahtml@1.6.0: resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} @@ -1672,8 +1798,8 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - unwasm@0.5.2: - resolution: {integrity: sha512-uWhB7IXQjMC4530uVAeu0lzvYK6P3qHVnmmdQniBi48YybOLN/DqEzcP9BRGk1YTDG3rRWRD8me55nIYoTHyMg==} + unwasm@0.5.3: + resolution: {integrity: sha512-keBgTSfp3r6+s9ZcSma+0chwxQdmLbB5+dAD9vjtB21UTMYuKAxHXCU1K2CbCtnP09EaWeRvACnXk0EJtUx+hw==} vfile-message@4.0.3: resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} @@ -1681,8 +1807,8 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@7.3.0: - resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -1747,26 +1873,52 @@ packages: snapshots: - '@babel/runtime@7.28.4': {} + '@babel/runtime@7.28.6': {} + + '@cmshiki/shiki@0.2.0(@codemirror/state@6.5.3)(@codemirror/view@6.39.10)(shiki@3.21.0)': + dependencies: + '@cmshiki/utils': 0.2.0 + '@codemirror/state': 6.5.3 + '@codemirror/view': 6.39.10 + '@shikijs/core': 3.21.0 + '@shikijs/vscode-textmate': 10.0.2 + shiki: 3.21.0 + + '@cmshiki/utils@0.2.0': + dependencies: + '@codemirror/language': 6.12.1 + '@codemirror/state': 6.5.3 + '@codemirror/view': 6.39.9 + '@shikijs/core': 3.21.0 + style-mod: 4.1.3 '@codemirror/autocomplete@6.20.0': dependencies: '@codemirror/language': 6.12.1 '@codemirror/state': 6.5.3 - '@codemirror/view': 6.39.8 + '@codemirror/view': 6.39.10 '@lezer/common': 1.5.0 '@codemirror/commands@6.10.1': dependencies: '@codemirror/language': 6.12.1 '@codemirror/state': 6.5.3 - '@codemirror/view': 6.39.8 + '@codemirror/view': 6.39.10 + '@lezer/common': 1.5.0 + + '@codemirror/lang-angular@0.1.4': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/lang-javascript': 6.2.4 + '@codemirror/language': 6.12.1 '@lezer/common': 1.5.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.7 '@codemirror/lang-cpp@6.0.3': dependencies: '@codemirror/language': 6.12.1 - '@lezer/cpp': 1.1.4 + '@lezer/cpp': 1.1.5 '@codemirror/lang-css@6.3.1': dependencies: @@ -1776,6 +1928,14 @@ snapshots: '@lezer/common': 1.5.0 '@lezer/css': 1.3.0 + '@codemirror/lang-go@6.0.1': + dependencies: + '@codemirror/autocomplete': 6.20.0 + '@codemirror/language': 6.12.1 + '@codemirror/state': 6.5.3 + '@lezer/common': 1.5.0 + '@lezer/go': 1.0.1 + '@codemirror/lang-html@6.4.11': dependencies: '@codemirror/autocomplete': 6.20.0 @@ -1783,7 +1943,7 @@ snapshots: '@codemirror/lang-javascript': 6.2.4 '@codemirror/language': 6.12.1 '@codemirror/state': 6.5.3 - '@codemirror/view': 6.39.8 + '@codemirror/view': 6.39.10 '@lezer/common': 1.5.0 '@lezer/css': 1.3.0 '@lezer/html': 1.3.13 @@ -1799,7 +1959,7 @@ snapshots: '@codemirror/language': 6.12.1 '@codemirror/lint': 6.9.2 '@codemirror/state': 6.5.3 - '@codemirror/view': 6.39.8 + '@codemirror/view': 6.39.10 '@lezer/common': 1.5.0 '@lezer/javascript': 1.5.4 @@ -1808,15 +1968,31 @@ snapshots: '@codemirror/language': 6.12.1 '@lezer/json': 1.0.3 + '@codemirror/lang-less@6.0.2': + dependencies: + '@codemirror/lang-css': 6.3.1 + '@codemirror/language': 6.12.1 + '@lezer/common': 1.5.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.7 + '@codemirror/lang-markdown@6.5.0': dependencies: '@codemirror/autocomplete': 6.20.0 '@codemirror/lang-html': 6.4.11 '@codemirror/language': 6.12.1 '@codemirror/state': 6.5.3 - '@codemirror/view': 6.39.8 + '@codemirror/view': 6.39.10 + '@lezer/common': 1.5.0 + '@lezer/markdown': 1.6.3 + + '@codemirror/lang-php@6.0.2': + dependencies: + '@codemirror/lang-html': 6.4.11 + '@codemirror/language': 6.12.1 + '@codemirror/state': 6.5.3 '@lezer/common': 1.5.0 - '@lezer/markdown': 1.6.2 + '@lezer/php': 1.0.5 '@codemirror/lang-python@6.2.1': dependencies: @@ -1826,6 +2002,19 @@ snapshots: '@lezer/common': 1.5.0 '@lezer/python': 1.1.18 + '@codemirror/lang-rust@6.0.2': + dependencies: + '@codemirror/language': 6.12.1 + '@lezer/rust': 1.0.2 + + '@codemirror/lang-sass@6.0.2': + dependencies: + '@codemirror/lang-css': 6.3.1 + '@codemirror/language': 6.12.1 + '@codemirror/state': 6.5.3 + '@lezer/common': 1.5.0 + '@lezer/sass': 1.1.0 + '@codemirror/lang-sql@6.10.0': dependencies: '@codemirror/autocomplete': 6.20.0 @@ -1833,7 +2022,16 @@ snapshots: '@codemirror/state': 6.5.3 '@lezer/common': 1.5.0 '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.5 + '@lezer/lr': 1.4.7 + + '@codemirror/lang-xml@6.1.0': + dependencies: + '@codemirror/autocomplete': 6.20.0 + '@codemirror/language': 6.12.1 + '@codemirror/state': 6.5.3 + '@codemirror/view': 6.39.10 + '@lezer/common': 1.5.0 + '@lezer/xml': 1.0.6 '@codemirror/lang-yaml@6.1.2': dependencies: @@ -1842,35 +2040,42 @@ snapshots: '@codemirror/state': 6.5.3 '@lezer/common': 1.5.0 '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.5 + '@lezer/lr': 1.4.7 '@lezer/yaml': 1.0.3 '@codemirror/language@6.12.1': dependencies: '@codemirror/state': 6.5.3 - '@codemirror/view': 6.39.8 + '@codemirror/view': 6.39.10 '@lezer/common': 1.5.0 '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.5 + '@lezer/lr': 1.4.7 style-mod: 4.1.3 '@codemirror/lint@6.9.2': dependencies: '@codemirror/state': 6.5.3 - '@codemirror/view': 6.39.8 + '@codemirror/view': 6.39.10 crelt: 1.0.6 - '@codemirror/search@6.5.11': + '@codemirror/search@6.6.0': dependencies: '@codemirror/state': 6.5.3 - '@codemirror/view': 6.39.8 + '@codemirror/view': 6.39.10 crelt: 1.0.6 '@codemirror/state@6.5.3': dependencies: '@marijn/find-cluster-break': 1.0.2 - '@codemirror/view@6.39.8': + '@codemirror/view@6.39.10': + dependencies: + '@codemirror/state': 6.5.3 + crelt: 1.0.6 + style-mod: 4.1.3 + w3c-keyname: 2.2.8 + + '@codemirror/view@6.39.9': dependencies: '@codemirror/state': 6.5.3 crelt: 1.0.6 @@ -1960,17 +2165,38 @@ snapshots: '@esbuild/win32-x64@0.27.2': optional: true - '@ethercorps/sveltekit-og@4.2.1(@sveltejs/kit@2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))': + '@ethercorps/sveltekit-og@4.2.1(@sveltejs/kit@2.49.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))': dependencies: '@resvg/resvg-wasm': 2.6.2 - '@sveltejs/kit': 2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)) + '@sveltejs/kit': 2.49.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)) '@takumi-rs/helpers': 0.55.4 '@takumi-rs/image-response': 0.55.4 '@takumi-rs/wasm': 0.55.4 satori: 0.10.14 satori-html: 0.3.2 std-env: 3.10.0 - unwasm: 0.5.2 + unwasm: 0.5.3 + + '@fsegurai/codemirror-theme-abyss@6.2.3(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.3)': + dependencies: + '@codemirror/language': 6.12.1 + '@codemirror/state': 6.5.3 + '@codemirror/view': 6.39.10 + '@lezer/highlight': 1.2.3 + + '@fsegurai/codemirror-theme-monokai@6.2.3(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.3)': + dependencies: + '@codemirror/language': 6.12.1 + '@codemirror/state': 6.5.3 + '@codemirror/view': 6.39.10 + '@lezer/highlight': 1.2.3 + + '@fsegurai/codemirror-theme-tokyo-night-storm@6.2.3(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.3)': + dependencies: + '@codemirror/language': 6.12.1 + '@codemirror/state': 6.5.3 + '@codemirror/view': 6.39.10 + '@lezer/highlight': 1.2.3 '@hey-api/codegen-core@0.4.0(typescript@5.9.3)': dependencies: @@ -2118,17 +2344,23 @@ snapshots: '@lezer/common@1.5.0': {} - '@lezer/cpp@1.1.4': + '@lezer/cpp@1.1.5': dependencies: '@lezer/common': 1.5.0 '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.5 + '@lezer/lr': 1.4.7 '@lezer/css@1.3.0': dependencies: '@lezer/common': 1.5.0 '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.5 + '@lezer/lr': 1.4.7 + + '@lezer/go@1.0.1': + dependencies: + '@lezer/common': 1.5.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.7 '@lezer/highlight@1.2.3': dependencies: @@ -2138,56 +2370,90 @@ snapshots: dependencies: '@lezer/common': 1.5.0 '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.5 + '@lezer/lr': 1.4.7 '@lezer/java@1.1.3': dependencies: '@lezer/common': 1.5.0 '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.5 + '@lezer/lr': 1.4.7 '@lezer/javascript@1.5.4': dependencies: '@lezer/common': 1.5.0 '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.5 + '@lezer/lr': 1.4.7 '@lezer/json@1.0.3': dependencies: '@lezer/common': 1.5.0 '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.5 + '@lezer/lr': 1.4.7 - '@lezer/lr@1.4.5': + '@lezer/lr@1.4.7': dependencies: '@lezer/common': 1.5.0 - '@lezer/markdown@1.6.2': + '@lezer/markdown@1.6.3': dependencies: '@lezer/common': 1.5.0 '@lezer/highlight': 1.2.3 + '@lezer/php@1.0.5': + dependencies: + '@lezer/common': 1.5.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.7 + '@lezer/python@1.1.18': dependencies: '@lezer/common': 1.5.0 '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.5 + '@lezer/lr': 1.4.7 + + '@lezer/rust@1.0.2': + dependencies: + '@lezer/common': 1.5.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.7 + + '@lezer/sass@1.1.0': + dependencies: + '@lezer/common': 1.5.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.7 + + '@lezer/xml@1.0.6': + dependencies: + '@lezer/common': 1.5.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.7 '@lezer/yaml@1.0.3': dependencies: '@lezer/common': 1.5.0 '@lezer/highlight': 1.2.3 - '@lezer/lr': 1.4.5 + '@lezer/lr': 1.4.7 '@marijn/find-cluster-break@1.0.2': {} '@polka/url@1.0.0-next.29': {} + '@replit/codemirror-lang-csharp@6.2.0(@codemirror/autocomplete@6.20.0)(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.10)(@lezer/common@1.5.0)(@lezer/highlight@1.2.3)(@lezer/lr@1.4.7)': + dependencies: + '@codemirror/autocomplete': 6.20.0 + '@codemirror/language': 6.12.1 + '@codemirror/state': 6.5.3 + '@codemirror/view': 6.39.10 + '@lezer/common': 1.5.0 + '@lezer/highlight': 1.2.3 + '@lezer/lr': 1.4.7 + '@resvg/resvg-wasm@2.6.2': {} - '@rollup/plugin-commonjs@28.0.9(rollup@4.54.0)': + '@rollup/plugin-commonjs@28.0.9(rollup@4.55.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.54.0) + '@rollup/pluginutils': 5.3.0(rollup@4.55.1) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.3) @@ -2195,96 +2461,105 @@ snapshots: magic-string: 0.30.21 picomatch: 4.0.3 optionalDependencies: - rollup: 4.54.0 + rollup: 4.55.1 - '@rollup/plugin-json@6.1.0(rollup@4.54.0)': + '@rollup/plugin-json@6.1.0(rollup@4.55.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.54.0) + '@rollup/pluginutils': 5.3.0(rollup@4.55.1) optionalDependencies: - rollup: 4.54.0 + rollup: 4.55.1 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.54.0)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.55.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.54.0) + '@rollup/pluginutils': 5.3.0(rollup@4.55.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.11 optionalDependencies: - rollup: 4.54.0 + rollup: 4.55.1 - '@rollup/pluginutils@5.3.0(rollup@4.54.0)': + '@rollup/pluginutils@5.3.0(rollup@4.55.1)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.54.0 + rollup: 4.55.1 - '@rollup/rollup-android-arm-eabi@4.54.0': + '@rollup/rollup-android-arm-eabi@4.55.1': optional: true - '@rollup/rollup-android-arm64@4.54.0': + '@rollup/rollup-android-arm64@4.55.1': optional: true - '@rollup/rollup-darwin-arm64@4.54.0': + '@rollup/rollup-darwin-arm64@4.55.1': optional: true - '@rollup/rollup-darwin-x64@4.54.0': + '@rollup/rollup-darwin-x64@4.55.1': optional: true - '@rollup/rollup-freebsd-arm64@4.54.0': + '@rollup/rollup-freebsd-arm64@4.55.1': optional: true - '@rollup/rollup-freebsd-x64@4.54.0': + '@rollup/rollup-freebsd-x64@4.55.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.54.0': + '@rollup/rollup-linux-arm-gnueabihf@4.55.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.54.0': + '@rollup/rollup-linux-arm-musleabihf@4.55.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.54.0': + '@rollup/rollup-linux-arm64-gnu@4.55.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.54.0': + '@rollup/rollup-linux-arm64-musl@4.55.1': optional: true - '@rollup/rollup-linux-loong64-gnu@4.54.0': + '@rollup/rollup-linux-loong64-gnu@4.55.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.54.0': + '@rollup/rollup-linux-loong64-musl@4.55.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.54.0': + '@rollup/rollup-linux-ppc64-gnu@4.55.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.54.0': + '@rollup/rollup-linux-ppc64-musl@4.55.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.54.0': + '@rollup/rollup-linux-riscv64-gnu@4.55.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.54.0': + '@rollup/rollup-linux-riscv64-musl@4.55.1': optional: true - '@rollup/rollup-linux-x64-musl@4.54.0': + '@rollup/rollup-linux-s390x-gnu@4.55.1': optional: true - '@rollup/rollup-openharmony-arm64@4.54.0': + '@rollup/rollup-linux-x64-gnu@4.55.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.54.0': + '@rollup/rollup-linux-x64-musl@4.55.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.54.0': + '@rollup/rollup-openbsd-x64@4.55.1': optional: true - '@rollup/rollup-win32-x64-gnu@4.54.0': + '@rollup/rollup-openharmony-arm64@4.55.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.54.0': + '@rollup/rollup-win32-arm64-msvc@4.55.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.55.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.55.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.55.1': optional: true '@shikijs/core@3.21.0': @@ -2331,23 +2606,23 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/adapter-auto@7.0.0(@sveltejs/kit@2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))': + '@sveltejs/adapter-auto@7.0.0(@sveltejs/kit@2.49.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))': dependencies: - '@sveltejs/kit': 2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)) + '@sveltejs/kit': 2.49.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)) - '@sveltejs/adapter-node@5.4.0(@sveltejs/kit@2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))': + '@sveltejs/adapter-node@5.5.0(@sveltejs/kit@2.49.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))': dependencies: - '@rollup/plugin-commonjs': 28.0.9(rollup@4.54.0) - '@rollup/plugin-json': 6.1.0(rollup@4.54.0) - '@rollup/plugin-node-resolve': 16.0.3(rollup@4.54.0) - '@sveltejs/kit': 2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)) - rollup: 4.54.0 + '@rollup/plugin-commonjs': 28.0.9(rollup@4.55.1) + '@rollup/plugin-json': 6.1.0(rollup@4.55.1) + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.55.1) + '@sveltejs/kit': 2.49.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)) + rollup: 4.55.1 - '@sveltejs/kit@2.49.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))': + '@sveltejs/kit@2.49.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.8(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)) + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)) '@types/cookie': 0.6.0 acorn: 8.15.0 cookie: 0.6.0 @@ -2359,29 +2634,27 @@ snapshots: sade: 1.8.1 set-cookie-parser: 2.7.2 sirv: 3.0.2 - svelte: 5.46.1 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2) + svelte: 5.46.3 + vite: 7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2) + optionalDependencies: + typescript: 5.9.3 - '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)) - debug: 4.4.3 - svelte: 5.46.1 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2) - transitivePeerDependencies: - - supports-color + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)) + obug: 2.1.1 + svelte: 5.46.3 + vite: 7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2) - '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))': + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.1)(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)) - debug: 4.4.3 + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.46.3)(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)) deepmerge: 4.3.1 magic-string: 0.30.21 - svelte: 5.46.1 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2) - vitefu: 1.1.1(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)) - transitivePeerDependencies: - - supports-color + obug: 2.1.1 + svelte: 5.46.3 + vite: 7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2) + vitefu: 1.1.1(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)) '@tailwindcss/node@4.1.18': dependencies: @@ -2444,12 +2717,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 - '@tailwindcss/vite@4.1.18(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))': + '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2))': dependencies: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2) '@takumi-rs/core-darwin-arm64@0.55.4': optional: true @@ -2510,7 +2783,7 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/node@25.0.3': + '@types/node@25.0.8': dependencies: undici-types: 7.16.0 @@ -2518,20 +2791,6 @@ snapshots: '@types/unist@3.0.3': {} - '@uiw/codemirror-theme-basic@4.25.4(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.8)': - dependencies: - '@uiw/codemirror-themes': 4.25.4(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.8) - transitivePeerDependencies: - - '@codemirror/language' - - '@codemirror/state' - - '@codemirror/view' - - '@uiw/codemirror-themes@4.25.4(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.8)': - dependencies: - '@codemirror/language': 6.12.1 - '@codemirror/state': 6.5.3 - '@codemirror/view': 6.39.8 - '@ungap/structured-clone@1.3.0': {} acorn@8.15.0: {} @@ -2598,15 +2857,21 @@ snapshots: clsx@2.1.1: {} + codemirror-shiki@0.3.0(@codemirror/state@6.5.3)(@codemirror/view@6.39.10)(shiki@3.21.0): + dependencies: + '@codemirror/state': 6.5.3 + '@codemirror/view': 6.39.10 + shiki: 3.21.0 + codemirror@6.0.2: dependencies: '@codemirror/autocomplete': 6.20.0 '@codemirror/commands': 6.10.1 '@codemirror/language': 6.12.1 '@codemirror/lint': 6.9.2 - '@codemirror/search': 6.5.11 + '@codemirror/search': 6.6.0 '@codemirror/state': 6.5.3 - '@codemirror/view': 6.39.8 + '@codemirror/view': 6.39.10 color-name@1.1.4: {} @@ -2646,10 +2911,6 @@ snapshots: date-fns@4.1.0: {} - debug@4.4.3: - dependencies: - ms: 2.1.3 - deepmerge@4.3.1: {} default-browser-id@5.0.1: {} @@ -2972,14 +3233,12 @@ snapshots: acorn: 8.15.0 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.6.1 + ufo: 1.6.2 mri@1.2.0: {} mrmime@2.0.1: {} - ms@2.1.3: {} - nanoid@3.3.11: {} node-fetch-native@1.6.7: {} @@ -2992,6 +3251,8 @@ snapshots: pkg-types: 2.3.0 tinyexec: 1.0.2 + obug@2.1.1: {} + ohash@2.0.11: {} oniguruma-parser@0.12.1: {} @@ -3077,32 +3338,35 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - rollup@4.54.0: + rollup@4.55.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.54.0 - '@rollup/rollup-android-arm64': 4.54.0 - '@rollup/rollup-darwin-arm64': 4.54.0 - '@rollup/rollup-darwin-x64': 4.54.0 - '@rollup/rollup-freebsd-arm64': 4.54.0 - '@rollup/rollup-freebsd-x64': 4.54.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 - '@rollup/rollup-linux-arm-musleabihf': 4.54.0 - '@rollup/rollup-linux-arm64-gnu': 4.54.0 - '@rollup/rollup-linux-arm64-musl': 4.54.0 - '@rollup/rollup-linux-loong64-gnu': 4.54.0 - '@rollup/rollup-linux-ppc64-gnu': 4.54.0 - '@rollup/rollup-linux-riscv64-gnu': 4.54.0 - '@rollup/rollup-linux-riscv64-musl': 4.54.0 - '@rollup/rollup-linux-s390x-gnu': 4.54.0 - '@rollup/rollup-linux-x64-gnu': 4.54.0 - '@rollup/rollup-linux-x64-musl': 4.54.0 - '@rollup/rollup-openharmony-arm64': 4.54.0 - '@rollup/rollup-win32-arm64-msvc': 4.54.0 - '@rollup/rollup-win32-ia32-msvc': 4.54.0 - '@rollup/rollup-win32-x64-gnu': 4.54.0 - '@rollup/rollup-win32-x64-msvc': 4.54.0 + '@rollup/rollup-android-arm-eabi': 4.55.1 + '@rollup/rollup-android-arm64': 4.55.1 + '@rollup/rollup-darwin-arm64': 4.55.1 + '@rollup/rollup-darwin-x64': 4.55.1 + '@rollup/rollup-freebsd-arm64': 4.55.1 + '@rollup/rollup-freebsd-x64': 4.55.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 + '@rollup/rollup-linux-arm-musleabihf': 4.55.1 + '@rollup/rollup-linux-arm64-gnu': 4.55.1 + '@rollup/rollup-linux-arm64-musl': 4.55.1 + '@rollup/rollup-linux-loong64-gnu': 4.55.1 + '@rollup/rollup-linux-loong64-musl': 4.55.1 + '@rollup/rollup-linux-ppc64-gnu': 4.55.1 + '@rollup/rollup-linux-ppc64-musl': 4.55.1 + '@rollup/rollup-linux-riscv64-gnu': 4.55.1 + '@rollup/rollup-linux-riscv64-musl': 4.55.1 + '@rollup/rollup-linux-s390x-gnu': 4.55.1 + '@rollup/rollup-linux-x64-gnu': 4.55.1 + '@rollup/rollup-linux-x64-musl': 4.55.1 + '@rollup/rollup-openbsd-x64': 4.55.1 + '@rollup/rollup-openharmony-arm64': 4.55.1 + '@rollup/rollup-win32-arm64-msvc': 4.55.1 + '@rollup/rollup-win32-ia32-msvc': 4.55.1 + '@rollup/rollup-win32-x64-gnu': 4.55.1 + '@rollup/rollup-win32-x64-msvc': 4.55.1 fsevents: 2.3.3 run-applescript@7.1.0: {} @@ -3197,19 +3461,19 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.3.5(picomatch@4.0.3)(svelte@5.46.1)(typescript@5.9.3): + svelte-check@4.3.5(picomatch@4.0.3)(svelte@5.46.3)(typescript@5.9.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 chokidar: 4.0.3 fdir: 6.5.0(picomatch@4.0.3) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.46.1 + svelte: 5.46.3 typescript: 5.9.3 transitivePeerDependencies: - picomatch - svelte@5.46.1: + svelte@5.46.3: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 @@ -3231,11 +3495,11 @@ snapshots: tapable@2.3.0: {} - thememirror@2.0.1(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.8): + thememirror@2.0.1(@codemirror/language@6.12.1)(@codemirror/state@6.5.3)(@codemirror/view@6.39.10): dependencies: '@codemirror/language': 6.12.1 '@codemirror/state': 6.5.3 - '@codemirror/view': 6.39.8 + '@codemirror/view': 6.39.10 tiny-inflate@1.0.3: {} @@ -3255,7 +3519,7 @@ snapshots: typescript@5.9.3: {} - ufo@1.6.1: {} + ufo@1.6.2: {} ultrahtml@1.6.0: {} @@ -3289,7 +3553,7 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - unwasm@0.5.2: + unwasm@0.5.3: dependencies: exsolve: 1.0.8 knitwork: 1.3.0 @@ -3308,23 +3572,23 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2): + vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.54.0 + rollup: 4.55.1 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.0.3 + '@types/node': 25.0.8 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 - vitefu@1.1.1(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)): + vitefu@1.1.1(vite@7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2)): optionalDependencies: - vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2) + vite: 7.3.1(@types/node@25.0.8)(jiti@2.6.1)(lightningcss@1.30.2) w3c-keyname@2.2.8: {} diff --git a/frontend/src/lib/components/code-editor.svelte b/frontend/src/lib/components/code-editor.svelte index 9ecfbe9..3fbeb13 100644 --- a/frontend/src/lib/components/code-editor.svelte +++ b/frontend/src/lib/components/code-editor.svelte @@ -2,34 +2,65 @@ import { onMount } from "svelte"; import { EditorView } from "@codemirror/view"; import { basicSetup } from "codemirror"; - import { EditorState, StateEffect } from "@codemirror/state"; - import { syntaxHighlighting } from "@codemirror/language"; - import { customTheme, customHighlight } from "$lib/editor-theme"; + import { EditorState } from "@codemirror/state"; + import { customTheme } from "$lib/editor-theme"; import { getLanguageExtension, type LanguageType } from "$lib/editor-lang"; + import { shikiToCodeMirror, updateEffect } from "@cmshiki/shiki"; + import { getSingletonHighlighter } from "shiki"; let { value = $bindable(""), language = "yaml" as LanguageType, editable = false, + theme = "ayu-dark", } = $props(); let editorRef: HTMLDivElement; let view: EditorView | null = null; - let extensionsConfig = $derived([ - basicSetup, - ...getLanguageExtension(language), - customTheme, - syntaxHighlighting(customHighlight), - EditorState.readOnly.of(!editable), - EditorView.editable.of(editable), - ]); + async function getThemeBg(themeName: string): Promise { + const highlighter = await getSingletonHighlighter({ + themes: [themeName], + langs: [], + }); + return highlighter.getTheme(themeName).bg ?? "#1e1e1e"; + } + + function toShikiLang(lang: LanguageType): string | null { + return lang === "plain_text" ? null : lang; + } + + async function buildEditor(doc: string) { + const shikiLang = toShikiLang(language); + const [bg, shikiResult] = await Promise.all([ + getThemeBg(theme), + shikiLang + ? shikiToCodeMirror({ + lang: shikiLang, + theme, + engine: "javascript", + }) + : Promise.resolve(null), + ]); + + const themeExtension = EditorView.theme({ + "&": { backgroundColor: bg }, + ".cm-gutters": { backgroundColor: bg, borderRight: "none" }, + ".cm-activeLineGutter": { backgroundColor: `${bg}cc` }, + }); - onMount(() => { - view = new EditorView({ + return new EditorView({ state: EditorState.create({ - doc: value, - extensions: extensionsConfig, + doc, + extensions: [ + basicSetup, + ...getLanguageExtension(language), + customTheme(bg), + themeExtension, + ...(shikiResult ? [shikiResult.shiki] : []), + EditorState.readOnly.of(!editable), + EditorView.editable.of(editable), + ], }), parent: editorRef, dispatchTransactions(trs, view) { @@ -40,25 +71,39 @@ } }, }); + } + + onMount(async () => { + view = await buildEditor(value); }); $effect(() => { - if (view) { - view.dispatch({ - effects: StateEffect.reconfigure.of(extensionsConfig), - }); - } + // reactive deps + const _lang = language; + const _theme = theme; + const _editable = editable; + + if (!view) return; + + (async () => { + const currentDoc = view!.state.doc.toString(); + view!.destroy(); + view = await buildEditor(currentDoc); + })(); }); -
+