From 18f490c7f13774a32486e1c5cf5a477da4973e18 Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 10:16:57 -0400 Subject: [PATCH 01/20] Add PDF generation test to CI --- README.md | 2 + rfd-processor/src/content/asciidoc.rs | 87 +++++++++ rfd-processor/tests/content/.gitignore | 1 + rfd-processor/tests/content/example-repo.pdf | Bin 0 -> 178950 bytes rfd-processor/tests/content/example.adoc | 177 +++++++++++++++++++ rfd-processor/tests/content/example.csv | 4 + rfd-processor/tests/content/oxide-logo.svg | 4 + rfd-processor/tests/ref/asciidoc_to_pdf.pdf | Bin 28829 -> 0 bytes 8 files changed, 275 insertions(+) create mode 100644 rfd-processor/tests/content/.gitignore create mode 100644 rfd-processor/tests/content/example-repo.pdf create mode 100644 rfd-processor/tests/content/example.adoc create mode 100644 rfd-processor/tests/content/example.csv create mode 100644 rfd-processor/tests/content/oxide-logo.svg delete mode 100644 rfd-processor/tests/ref/asciidoc_to_pdf.pdf diff --git a/README.md b/README.md index 012ef5a8..524b3bdd 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,8 @@ Dependencies * asciidoctor-pdf * asciidoctor-mermaid +Mac: `brew install asciidoctor && npm install -g @mermaid-js/mermaid-cli` + ## Background Objects reference: diff --git a/rfd-processor/src/content/asciidoc.rs b/rfd-processor/src/content/asciidoc.rs index 60d01862..c7a7026e 100644 --- a/rfd-processor/src/content/asciidoc.rs +++ b/rfd-processor/src/content/asciidoc.rs @@ -24,8 +24,12 @@ impl<'a> RfdRenderedFormat> for RenderedPdf { "-o", "-", "-r", + "base64", + "-r", "asciidoctor-mermaid/pdf", "-a", + "reproducible", + "-a", "source-highlighter=rouge", file_path.to_str().unwrap(), ]); @@ -58,3 +62,86 @@ impl<'a> RfdRenderedFormat> for RenderedPdf { } } } + +#[cfg(test)] +mod tests { + use super::*; + use std::{fs, path::Path}; + use uuid::Uuid; + + const EXAMPLE_RFD: &str = include_str!("../../tests/content/example.adoc"); + const EXAMPLE_CSV: &str = include_str!("../../tests/content/example.csv"); + const OXIDE_LOGO: &str = include_str!("../../tests/content/oxide-logo.svg"); + + struct RenderDir { + path: PathBuf, + } + + impl RenderDir { + fn new() -> Self { + let path = std::env::temp_dir().join(format!( + "rfd-processor-asciidoc-to-pdf-test-{}", + Uuid::new_v4() + )); + fs::create_dir_all(&path).expect("failed to create render test directory"); + Self { path } + } + + fn path(&self) -> &Path { + &self.path + } + } + + impl Drop for RenderDir { + fn drop(&mut self) { + let _ = fs::remove_dir_all(&self.path); + } + } + + #[tokio::test] + async fn render_pdf_example() { + let render_dir = RenderDir::new(); + fs::write(render_dir.path().join("example.csv"), EXAMPLE_CSV) + .expect("failed to write CSV include"); + fs::write(render_dir.path().join("oxide-logo.svg"), OXIDE_LOGO) + .expect("failed to write supporting image"); + + let content = RfdAsciidoc::new(EXAMPLE_RFD).expect("example RFD should parse"); + let pdf = RenderedPdf::render(&content, render_dir.path().to_path_buf()) + .await + .expect("example RFD should render to PDF"); + let pdf = pdf.into_inner(); + + fs::write( + Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/content/example-local.pdf"), + &pdf, + ) + .expect("failed to write local example PDF"); + + assert!(pdf.starts_with(b"%PDF-"), "rendered bytes should be a PDF"); + let repo_pdf_path = + Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/content/example-repo.pdf"); + let expected_pdf = match fs::read(&repo_pdf_path) { + Ok(pdf) => pdf, + Err(err) if err.kind() == std::io::ErrorKind::NotFound => { + fs::write(&repo_pdf_path, &pdf).expect("failed to write repo example PDF"); + pdf.clone() + } + Err(err) => panic!("failed to read repo example PDF: {err}"), + }; + + if pdf != expected_pdf { + let first_diff = pdf + .iter() + .zip(expected_pdf.iter()) + .position(|(actual, expected)| actual != expected); + + panic!( + "rendered PDF should match tests/content/example-repo.pdf; actual len {}, expected len {}, first differing byte {:?}", + pdf.len(), + expected_pdf.len(), + first_diff + ); + } + } +} diff --git a/rfd-processor/tests/content/.gitignore b/rfd-processor/tests/content/.gitignore new file mode 100644 index 00000000..67c778cf --- /dev/null +++ b/rfd-processor/tests/content/.gitignore @@ -0,0 +1 @@ +example-local.pdf diff --git a/rfd-processor/tests/content/example-repo.pdf b/rfd-processor/tests/content/example-repo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..717f27bf0ba48afd6160550b03556cddcefd6a3c GIT binary patch literal 178950 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%0D|`^|oQDD4&2(sYLL>Z^FBU={>T}Pka=+ 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, Other Author +:discussion: https://github.com/org/repo/pull/123 +:icons: font +:labels: security, manufacturing, platform-identity +:numbered: +:revremark: State: {state} | {discussion} +:showtitle: +:state: published +:toc: left +:toclevels: 3 + += RFD 4242 Representative Asciidoc PDF Fixture +Test Author + +toc::[] + +[abstract] +This fixture exercises the Asciidoc PDF rendering pipeline. + +== Overview + +=== TOC Level Two + +Text styles: +. bold: *bold* +. italic: _italic_ +. monospace: `monospace` +. attribute references: {authors} +. inline link: https://example.com[example.com] +. cross references: <>. +. footnotes: details.footnote:[The footnote exists to exercise Asciidoc footnote rendering.] +. bibliography: <> + +==== TOC Level Three + +This deeper subsection exercises the third TOC level. + +[[pipeline-diagram]] +.Mermaid diagram +```mermaid +sequenceDiagram + actor operator + participant nexus + participant crdb + participant sled-agent + + operator->>nexus: add physical disk + nexus->>crdb: add physical disk adoption request + nexus->>crdb: bg task adds physical disk in init state and soft delete disk adoption request + loop + nexus->>sled-agent: send OmicronPhysicalDiskRequest in init state + end + sled-agent->>sled-agent: delete zpool and create gpt/zpool if necessary + loop + nexus->>sled-agent: poll inventory for initialized zpool + end + nexus->>crdb: change physical disk state to active + loop + nexus->>sled-agent: send OmicronPhysicalDiskRequest in active state + end + sled-agent->>sled-agent: persist new active config to ledger +``` + +Before pagebreak + +<<< + +After pagebreak + +[[supporting-image]] +.Oxide logo +image::oxide-logo.svg[Oxide logo,width=220] + +[[representative-lists]] +== Representative Lists + +. Ordered item one +. Ordered item two +.. Nested ordered item +.. Another nested ordered item + +* Unordered item one +* Unordered item two +** Nested unordered item +** Another nested unordered item + +== Source Code + +```rust +fn render_pipeline() -> &'static str { + "asciidoctor-pdf" // <1> +} +``` + +<1> The renderer shells out to `asciidoctor-pdf` for PDF generation. + +== Tables And Blocks + +[cols="1,2a",options="header"] +|=== +| Feature | Why it is in this fixture +| Mermaid | Exercises the asciidoctor-mermaid/pdf extension +| Image | Exercises supporting image resolution from the render directory +| Lists | Exercises ordered and unordered list rendering +| Source +| +Exercises Rouge-backed source highlighting, including source blocks nested in table cells. + +[source,rust] +---- +fn nested_source_block() -> bool { + true +} +---- +|=== + +[[csv-include-table]] +.NOR flash table from CSV include +[format="csv", options="header"] +|=== +include::example.csv[] +|=== + +[[breaks-inside-block]] +.Breaks inside a block +**** +[discrete] +==== Notes + +This delimited block exercises a page break inside block content. + +<<< + +This paragraph should remain inside the same block after the page break. + +''' + +This paragraph follows an Asciidoc thematic break inside the block. +**** + +== Admonitions + +NOTE: Notes should render cleanly. + +TIP: Tips should render cleanly. + +IMPORTANT: Important callouts should render cleanly. + +CAUTION: Cautions should render cleanly. + +WARNING: Warnings should render cleanly. + +[quote, Test Fixture] +____ +Block quotes should survive the PDF pipeline. +____ + +[%collapsible] +.Collapsible Details +==== +This block exercises collapsible Asciidoc content. PDF output should still render +the contents even though the interactive disclosure behavior is HTML-specific. +==== + +[bibliography] +== External References + +* [[[omicron-5112]]] https://github.com/oxidecomputer/omicron/issues/5112 + +* [[[rfd44]]] Oxide Computer Company. RFD 44. + https://rfd.shared.oxide.computer/rfd/44 + +* [[[rfd595]]] Oxide Computer Company. Oxide CSI Plugin. + https://rfd.shared.oxide.computer/rfd/595 + +* [[[rfd605]]] Oxide Computer Company. Virtual Machine Identity and Attestation. + https://rfd.shared.oxide.computer/rfd/605 diff --git a/rfd-processor/tests/content/example.csv b/rfd-processor/tests/content/example.csv new file mode 100644 index 00000000..2cc8e2d1 --- /dev/null +++ b/rfd-processor/tests/content/example.csv @@ -0,0 +1,4 @@ +Device,Capacity,Interface,Use +Boot flash,64 MiB,SPI,Stores boot loader and early platform state +Recovery flash,128 MiB,SPI,Stores recovery image and fallback metadata +Manufacturing flash,32 MiB,SPI,Stores manufacturing diagnostics diff --git a/rfd-processor/tests/content/oxide-logo.svg b/rfd-processor/tests/content/oxide-logo.svg new file mode 100644 index 00000000..e8f9d088 --- /dev/null +++ b/rfd-processor/tests/content/oxide-logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/rfd-processor/tests/ref/asciidoc_to_pdf.pdf b/rfd-processor/tests/ref/asciidoc_to_pdf.pdf deleted file mode 100644 index b5e7b6e30edd2e2d73a246d88a9bfbfa79a05373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28829 zcmeFZ1z1&G*Dg#+hm_K6DGA99o0M)P1Ox#A5jNe8GzbXNCEeXfHwZ{dmvkv0DUAr6 zwLzc9r{4E_zwexLUFZ7$t&6?Znldychf6~!f)*;zQzX)l2fIy;CBWcl0# zT|fZDs$y(s1_jY8Ns5EmIlv%AGhIC>13IgSy`7Pz4TxUS*v8gQUe_E7dZ>GS0wjvr zKy~e4sUo&|#>V=Vdaw(iiF=^uy0%b#kfjAk(MH$N0?4XpW2tYi2mObd1O?Hd7Wyzz zIDQq$*$N6`71OoTHM2AXs?arr+JeA91|@V>1$#R)V+-J#9aaLk0ZVAe|;REGLLn(%4QK#KXzX!o#bD&Z=q*b%fd|+CUAU zHc$&apb;2A;>NaCX1dPemU`Dv+1c1b(E-6(VWhoelA`v77m`@do5;TY4wkZqGnL2{y(Ow*chAtW1@(S z-9M&@Sz6cu0@{LpjF=MC*3#bQC*pw4=qW?(K$@(8P5~MUb+QAo%9sNKE&AhI?8mpv z6@I@%2pfw(K?vsM<@p1Otm04yV?C&nlqg8g7M+a+(4!xRt)2z?FR5b6e@ImplSfAv zRYB)q1G8{)b8~^Xxw%=`xHv&7`sl2Z94u@g4sMW&0lEMe2PcG+6UfF6<^Y2^*tpmr zdJuL97{Vn8QZYf7P(cUk1xDh>0ju}tIqVxI#ZQS~-+#Wol7o$fhliUJ3{r8tl8KXt zg@Y5s%?V-QWP@A_#12%&&c?!ZB@(9|#DJRv!UfUiV1w{-vvGsDug^Il27qut8V7I> zNCCtKMAe6I0cU!^IT%QX0x4V&Fi<;imzxWg7s$g2s|Ps1KptKQ6v7SMs zdU10If;a$7*m=3YAOQ&bkCD&^&R{44(g?~ZIynoR|c1{)^&cB5a z5ErHdL`=8b5 z2e^={_O4Z14}cX=J5_w7{qH?fHc_j_ysOl4sI^kMEEDE{|^8PW?^UJ<@}RQ zLU?&u0D%5hCt(7^=F~L+*ZKnM*3XV!X(()#UUdWp2M+)Z%mM&<19TClC$Jg)Q-7~# z-}PMlCy-#U09p#usq6X61q=c=1g87fg9V(!t^vLK^Kb#>fY}cN6c}!pRRG%iKL8_O zsjsafga-`xyT5@>05;Sx1-P>kWu!Q2UKrojw6;7DPqSI!2Q>9D)M z%u(2EymmUUlq+X+r80k>zPV^hduNsB1m{Z(1x)HZB&R)BoEn79cb`n3Lm=7VDQr{v(U^?<)J# za00`_4$J`941vO&C@@ICfB`e&=RCUh{l6{hU;}k+qkwWS3j!N>z=Z-f?|Qag+p#}5 z-|HnakmG7G_?P;x7mBbYBh1xayW+oF2mPiZzs=77+**Noc!9@;|Aw{trQn|s1bTI~ zB)zidS4)pyY|4M2%s+kS|422#5FTLd^tY<{KeHsiRQ#V=l3xn`2{_JQo_DT{@Sm5V ze|Cevt>OOzn`nIn=T8H1{UG^A*TxP4o}xgqz+r-}sRcYe1JAO`cDm+PS2p9<6~W&= zhQd}d0DHp5#tV=yfZYKeNMR4duw?rXLY-+%Y8_6TO8{=#s;h?<{I z^#4yX9M|*^>;Hh^V3h>ek}E3eie=yd5CM3vA0Wfd0se#aiNbResNQupz~HmPm>wY4 zkFjLGE(Bz}{{MqMg5CWixUi6QxW^; zc2{(h3P6Uzh6RuZC@BuL)w40Sg0X=dFpd!>CX7E6Gt#vIfjQ7wVI1Ps1qT-wI;)zo zzMYXR2w)wrvZ`1??#sEwGVxs{~_jKJf8 zv4&=rHp*52D+^GOKbb3_Mmb$uQxN+Plz-5Lob2pC2}xr!JAiQ2WR*12wS$U7VUPms z=Jg4{44MPvBaGMth)#XuE9#aV7>uiS0Gjn5rLZ@*fU&N;fC^o)ZaX zTb+ini;67?_5>nQND}zvHbi&C+1gWubK85eJ)b;66fFuLgR{o3QhCVue%R=(YC8N( z>}IisNrVP51UKRnUV!J&n3JcIC|Ww{r>KOFcN=vXkjM<`&fMlRJtW)?$5PKJ_B~2; z96h9%4qr5idIsL8LPSXOLb^$^K+V}AW#kz;2uGO)FDQ!W`V#pB6>AswIw5$g<+8^5 z>qXbnMP;gYXpipcj56&JGz zH4F3LU~BKqIud{Q@L^K^k+3{TW)7w6(Z`#lq@+9^-_{KmW0TIAtCR`C2JI_aPuFus z)JkH+u)6vLL|DsW**29YvmD+d}3F1d3lPEhi=M%n3xVDeV2ua ziTKyRTe1NH_)Z7=njzq|d9`qlQj@tQcKiy6T|(AtfxVW7A0zNLkiA6aOWNN1)O$~3 zdvo)}<@vFxsi``rJccV)PfriTe9G?Z$oy7tb!DY@owc>KoSfXfsT_p8ItEmr-xzmC zvgPVs^Q*p~f3nOkdc@`S?Ld!q9V8|z8<>?vJA0JpS!*DLWMpO*6dH;XTb+4f!H>bT zob#kG@HGo7>+$~nbdy`XEN!jf$RMYYk&)BI>8gn5;NalOihg$0moHz^)6b7_?EwaBZ#e4#1qDT3 zUfxWQs;X+!w=V@C4<)7H2wJ>4^x!a*nMQw?i)WJCnc!{c&zSSi`z zYtyBoo_TP@mozjqEtvtK zLn59G)9-vSEaw_(EoS-dA8BC;aC$zOt}woZH&k%8*5U5HqMP zEiH-YwCWwOdQqyJ!x9n_Vqy#o4N*E;=H`;~n3tWtf9+geUe?sqoG4UBY@`ju!Q{%# z&!@5{3Q@{!LxkrgAs|3HbZ+y*qQ_<%P0hh>lTJ(`WNfM4SzC)uNx=aVU5u+6hebr} zEr$x#)z!)7W8=K6tUQci){K(Ia}B9kq;m18Dvly`ANk9f}`VcY;0^yOiX5G zCNQUxv*V258gG&itnd3oe&7DW$9W_ET&*|W-YHgWXl zs7WhPF|pa1nN*(J1O!%WQgVnyq3>P_XADUjLPrUfmX;Q3EawHWt8$HnWy=a((&kQ1 zPJ{)bqoP#Q)XJ+Qq7vTSX%h+sg}Q zZbbR%)4oyk8(7aY;G`536h;yvNNiX8ef1ta!c}G>;Pkwc_wFGV5wFck6oc}!cbNC_ z_<_4!y}in@dB|{fr7s$jSNN#ujjYy(Y3Y&oG_oONj*gBz+BH^QNodMkAkzl6@|?vW zf;a(Z4l*W2#>u$U3@=wT8Onh2^78bvCT9n_hhuPjR6O#rY+im~CH=lw_NuBXZi|^` zhVN9cNJvN)jEXxv;btGXxVXs4VPzcoe<#C!7|{J`$!oI4I)k{7q@%qZljHul5hpP* zafKNcFV4c*4IJceMIQ^be2{&<$82Nqzdw-haRR-r55R=az5z_<^NYY2iNqPL!guz{{Q4ZVl|^G@t{S8IM7hT(DiE(40?l>3NIa3qhdJiDulkx>1|D(TEq+6 z*c9&$F>NwN51)7AirI(bs`Uepqa=1|lOFxU=~Yy~u9Mh>q_DX$dz%aD#MoKN-JJ9F ze1|F#9aS~8oTb*;x5$lQpL^EpCYf3M_&cKzrx~S!tE(y?xp&vrjMNIS+>VD1%MXWk zI_>{@ za+15hIuK?HcqJ4RIbmT%ef=n3U-f_&$J+z`*lyY?cANc4B&MdMhK5^99jt=KWS
{!wu4SogOQ2JJqCuL5bY6axYmIk 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 g=L!Y}3gkfS+V~4?LN!RR910 From 2d6db348298234f9b401f65bf06810df6a3ef580 Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 12:36:12 -0400 Subject: [PATCH 02/20] test troubleshooting --- rfd-processor/src/content/asciidoc.rs | 238 ++++++++++++++++++++------ 1 file changed, 187 insertions(+), 51 deletions(-) diff --git a/rfd-processor/src/content/asciidoc.rs b/rfd-processor/src/content/asciidoc.rs index c7a7026e..b77c0203 100644 --- a/rfd-processor/src/content/asciidoc.rs +++ b/rfd-processor/src/content/asciidoc.rs @@ -4,62 +4,83 @@ use async_trait::async_trait; use rfd_data::content::{RfdAsciidoc, RfdDocument}; -use std::{path::PathBuf, process::Command}; +use std::{ + env, + path::{Path, PathBuf}, + process::Command, +}; use crate::util::write_file; use super::{RenderableRfdError, RenderedPdf, RfdOutputError, RfdRenderedFormat}; +async fn render_pdf( + content: &RfdAsciidoc<'_>, + content_dir: PathBuf, + path_prefix: Option<&Path>, +) -> Result { + let file_path = content_dir.join("contents.adoc"); + + // Write the contents to a temporary file. + write_file(&file_path, content.raw().as_bytes()).await?; + tracing::info!("Wrote file to temp dir"); + + let mut command = Command::new("asciidoctor-pdf"); + command.current_dir(content_dir.clone()).args([ + "-o", + "-", + "-r", + "base64", + "-r", + "asciidoctor-mermaid/pdf", + "-a", + "reproducible", + "-a", + "source-highlighter=rouge", + file_path.to_str().unwrap(), + ]); + + if let Some(path_prefix) = path_prefix { + let path = env::join_paths( + std::iter::once(path_prefix.to_path_buf()) + .chain(env::split_paths(&env::var_os("PATH").unwrap_or_default())), + ) + .expect("failed to construct PATH"); + command.env("PATH", path); + } + + let cmd_output = tokio::task::spawn_blocking(move || { + tracing::info!(?file_path, "Shelling out to asciidoctor"); + + // Verify the expected resources exist + tracing::info!(?file_path, exists = file_path.exists(), "Check document"); + + let out = command.output(); + + match &out { + Ok(_) => tracing::info!(?file_path, "Command succeeded"), + Err(err) => tracing::info!(?file_path, ?err, "Command failed"), + }; + + out + }) + .await??; + + tracing::info!("Completed asciidoc rendering"); + + if cmd_output.status.success() { + Ok(cmd_output.stdout.into()) + } else { + Err(RenderableRfdError::ParserFailed(String::from_utf8( + cmd_output.stderr, + )))? + } +} + #[async_trait] impl<'a> RfdRenderedFormat> for RenderedPdf { async fn render(content: &RfdAsciidoc, content_dir: PathBuf) -> Result { - let file_path = content_dir.join("contents.adoc"); - - // Write the contents to a temporary file. - write_file(&file_path, content.raw().as_bytes()).await?; - tracing::info!("Wrote file to temp dir"); - - let mut command = Command::new("asciidoctor-pdf"); - command.current_dir(content_dir.clone()).args([ - "-o", - "-", - "-r", - "base64", - "-r", - "asciidoctor-mermaid/pdf", - "-a", - "reproducible", - "-a", - "source-highlighter=rouge", - file_path.to_str().unwrap(), - ]); - - let cmd_output = tokio::task::spawn_blocking(move || { - tracing::info!(?file_path, "Shelling out to asciidoctor"); - - // Verify the expected resources exist - tracing::info!(?file_path, exists = file_path.exists(), "Check document"); - - let out = command.output(); - - match &out { - Ok(_) => tracing::info!(?file_path, "Command succeeded"), - Err(err) => tracing::info!(?file_path, ?err, "Command failed"), - }; - - out - }) - .await??; - - tracing::info!("Completed asciidoc rendering"); - - if cmd_output.status.success() { - Ok(cmd_output.stdout.into()) - } else { - Err(RenderableRfdError::ParserFailed(String::from_utf8( - cmd_output.stderr, - )))? - } + render_pdf(content, content_dir, None).await } } @@ -90,6 +111,98 @@ mod tests { fn path(&self) -> &Path { &self.path } + + fn write_mmdc_debug_wrapper(&self) -> PathBuf { + let wrapper_dir = self.path.join("mmdc-bin"); + let debug_dir = self.path.join("mmdc-debug"); + fs::create_dir_all(&wrapper_dir).expect("failed to create mmdc wrapper directory"); + fs::create_dir_all(&debug_dir).expect("failed to create mmdc debug directory"); + + let real_mmdc = find_executable("mmdc"); + let wrapper = wrapper_dir.join("mmdc"); + fs::write( + &wrapper, + format!( + r#"#!/usr/bin/env bash +set +e + +debug_dir={debug_dir} +real_mmdc={real_mmdc} +mkdir -p "$debug_dir" + +input="$debug_dir/stdin.mmd" +stdout="$debug_dir/stdout.log" +stderr="$debug_dir/stderr.log" +status="$debug_dir/status.txt" +invocation="$debug_dir/invocation.txt" + +{{ + printf 'real_mmdc=%s\n' "$real_mmdc" + printf 'args:' + printf ' <%s>' "$@" + printf '\n' +}} > "$invocation" + +cat > "$input" +"$real_mmdc" "$@" < "$input" > "$stdout" 2> "$stderr" +code=$? +printf '%s\n' "$code" > "$status" +cat "$stdout" +cat "$stderr" >&2 +exit "$code" +"#, + debug_dir = shell_quote(debug_dir.as_path()), + real_mmdc = shell_quote(real_mmdc.as_path()), + ), + ) + .expect("failed to write mmdc debug wrapper"); + + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + + let mut permissions = fs::metadata(&wrapper) + .expect("failed to stat mmdc debug wrapper") + .permissions(); + permissions.set_mode(0o755); + fs::set_permissions(&wrapper, permissions) + .expect("failed to make mmdc debug wrapper executable"); + } + + wrapper_dir + } + + fn mmdc_debug_output(&self) -> String { + let debug_dir = self.path.join("mmdc-debug"); + let mut output = String::new(); + + for file in [ + "invocation.txt", + "status.txt", + "stdin.mmd", + "stdout.log", + "stderr.log", + ] { + let path = debug_dir.join(file); + match fs::read_to_string(&path) { + Ok(contents) => { + output.push_str("\n--- "); + output.push_str(file); + output.push_str(" ---\n"); + output.push_str(&contents); + } + Err(err) => { + output.push_str("\n--- "); + output.push_str(file); + output.push_str(" unavailable: "); + output.push_str(&err.to_string()); + output.push_str(" ---\n"); + } + } + } + + output + } } impl Drop for RenderDir { @@ -105,11 +218,22 @@ mod tests { .expect("failed to write CSV include"); fs::write(render_dir.path().join("oxide-logo.svg"), OXIDE_LOGO) .expect("failed to write supporting image"); + let mmdc_path_prefix = render_dir.write_mmdc_debug_wrapper(); let content = RfdAsciidoc::new(EXAMPLE_RFD).expect("example RFD should parse"); - let pdf = RenderedPdf::render(&content, render_dir.path().to_path_buf()) - .await - .expect("example RFD should render to PDF"); + let pdf = match render_pdf( + &content, + render_dir.path().to_path_buf(), + Some(mmdc_path_prefix.as_path()), + ) + .await + { + Ok(pdf) => pdf, + Err(err) => panic!( + "example RFD should render to PDF: {err:?}\n{}", + render_dir.mmdc_debug_output() + ), + }; let pdf = pdf.into_inner(); fs::write( @@ -144,4 +268,16 @@ mod tests { ); } } + + fn find_executable(name: &str) -> PathBuf { + std::env::split_paths(&std::env::var_os("PATH").unwrap_or_default()) + .map(|path| path.join(name)) + .find(|path| path.is_file()) + .unwrap_or_else(|| panic!("failed to find {name} in PATH")) + } + + fn shell_quote(path: &Path) -> String { + let path = path.to_string_lossy(); + format!("'{}'", path.replace('\'', r#"'\''"#)) + } } From c5d0962834f9d7219d667f0a203cb433f7128e7f Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 12:42:43 -0400 Subject: [PATCH 03/20] Add chrome-headless --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a162d644..aaed6bab 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,6 +42,7 @@ jobs: sudo gem install asciidoctor-pdf -v 2.3.2 sudo gem install asciidoctor-mermaid -v 0.4.1 sudo npm install -g @mermaid-js/mermaid-cli@11.4.0 + "$(npm root -g)/@mermaid-js/mermaid-cli/node_modules/.bin/puppeteer" browsers install chrome-headless-shell - name: Report versions run: | asciidoctor --version From 7c8ff787ffe009e48df1f887c83e2cd6a89ac662 Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 12:52:03 -0400 Subject: [PATCH 04/20] puppeteer --- rfd-processor/src/content/asciidoc.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/rfd-processor/src/content/asciidoc.rs b/rfd-processor/src/content/asciidoc.rs index b77c0203..4f4eeb9f 100644 --- a/rfd-processor/src/content/asciidoc.rs +++ b/rfd-processor/src/content/asciidoc.rs @@ -119,6 +119,13 @@ mod tests { fs::create_dir_all(&debug_dir).expect("failed to create mmdc debug directory"); let real_mmdc = find_executable("mmdc"); + let puppeteer_config = debug_dir.join("puppeteer.json"); + fs::write( + &puppeteer_config, + r#"{"args":["--no-sandbox","--disable-setuid-sandbox"]}"#, + ) + .expect("failed to write puppeteer config"); + let wrapper = wrapper_dir.join("mmdc"); fs::write( &wrapper, @@ -128,6 +135,7 @@ set +e debug_dir={debug_dir} real_mmdc={real_mmdc} +puppeteer_config={puppeteer_config} mkdir -p "$debug_dir" input="$debug_dir/stdin.mmd" @@ -138,13 +146,14 @@ invocation="$debug_dir/invocation.txt" {{ printf 'real_mmdc=%s\n' "$real_mmdc" + printf 'puppeteer_config=%s\n' "$puppeteer_config" printf 'args:' printf ' <%s>' "$@" printf '\n' }} > "$invocation" cat > "$input" -"$real_mmdc" "$@" < "$input" > "$stdout" 2> "$stderr" +"$real_mmdc" --puppeteerConfigFile "$puppeteer_config" "$@" < "$input" > "$stdout" 2> "$stderr" code=$? printf '%s\n' "$code" > "$status" cat "$stdout" @@ -153,6 +162,7 @@ exit "$code" "#, debug_dir = shell_quote(debug_dir.as_path()), real_mmdc = shell_quote(real_mmdc.as_path()), + puppeteer_config = shell_quote(puppeteer_config.as_path()), ), ) .expect("failed to write mmdc debug wrapper"); @@ -179,6 +189,7 @@ exit "$code" for file in [ "invocation.txt", "status.txt", + "puppeteer.json", "stdin.mmd", "stdout.log", "stderr.log", From 7b2622e83873712106ce90965f666a454328bc69 Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 13:15:02 -0400 Subject: [PATCH 05/20] Bump versions to match current; remove debugging bits --- .github/workflows/test.yml | 4 +- rfd-processor/src/content/asciidoc.rs | 85 +++------------------------ 2 files changed, 11 insertions(+), 78 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index aaed6bab..5bd6aba8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -39,9 +39,9 @@ jobs: shell: bash run: | sudo gem install rouge - sudo gem install asciidoctor-pdf -v 2.3.2 + sudo gem install asciidoctor-pdf -v 2.3.15 sudo gem install asciidoctor-mermaid -v 0.4.1 - sudo npm install -g @mermaid-js/mermaid-cli@11.4.0 + sudo npm install -g @mermaid-js/mermaid-cli@11.16.0 "$(npm root -g)/@mermaid-js/mermaid-cli/node_modules/.bin/puppeteer" browsers install chrome-headless-shell - name: Report versions run: | diff --git a/rfd-processor/src/content/asciidoc.rs b/rfd-processor/src/content/asciidoc.rs index 4f4eeb9f..c5e72ca0 100644 --- a/rfd-processor/src/content/asciidoc.rs +++ b/rfd-processor/src/content/asciidoc.rs @@ -112,14 +112,12 @@ mod tests { &self.path } - fn write_mmdc_debug_wrapper(&self) -> PathBuf { + fn write_mmdc_wrapper(&self) -> PathBuf { let wrapper_dir = self.path.join("mmdc-bin"); - let debug_dir = self.path.join("mmdc-debug"); fs::create_dir_all(&wrapper_dir).expect("failed to create mmdc wrapper directory"); - fs::create_dir_all(&debug_dir).expect("failed to create mmdc debug directory"); let real_mmdc = find_executable("mmdc"); - let puppeteer_config = debug_dir.join("puppeteer.json"); + let puppeteer_config = wrapper_dir.join("puppeteer.json"); fs::write( &puppeteer_config, r#"{"args":["--no-sandbox","--disable-setuid-sandbox"]}"#, @@ -131,89 +129,30 @@ mod tests { &wrapper, format!( r#"#!/usr/bin/env bash -set +e - -debug_dir={debug_dir} real_mmdc={real_mmdc} puppeteer_config={puppeteer_config} -mkdir -p "$debug_dir" - -input="$debug_dir/stdin.mmd" -stdout="$debug_dir/stdout.log" -stderr="$debug_dir/stderr.log" -status="$debug_dir/status.txt" -invocation="$debug_dir/invocation.txt" - -{{ - printf 'real_mmdc=%s\n' "$real_mmdc" - printf 'puppeteer_config=%s\n' "$puppeteer_config" - printf 'args:' - printf ' <%s>' "$@" - printf '\n' -}} > "$invocation" - -cat > "$input" -"$real_mmdc" --puppeteerConfigFile "$puppeteer_config" "$@" < "$input" > "$stdout" 2> "$stderr" -code=$? -printf '%s\n' "$code" > "$status" -cat "$stdout" -cat "$stderr" >&2 -exit "$code" +exec "$real_mmdc" --puppeteerConfigFile "$puppeteer_config" "$@" "#, - debug_dir = shell_quote(debug_dir.as_path()), real_mmdc = shell_quote(real_mmdc.as_path()), puppeteer_config = shell_quote(puppeteer_config.as_path()), ), ) - .expect("failed to write mmdc debug wrapper"); + .expect("failed to write mmdc wrapper"); #[cfg(unix)] { use std::os::unix::fs::PermissionsExt; let mut permissions = fs::metadata(&wrapper) - .expect("failed to stat mmdc debug wrapper") + .expect("failed to stat mmdc wrapper") .permissions(); permissions.set_mode(0o755); fs::set_permissions(&wrapper, permissions) - .expect("failed to make mmdc debug wrapper executable"); + .expect("failed to make mmdc wrapper executable"); } wrapper_dir } - - fn mmdc_debug_output(&self) -> String { - let debug_dir = self.path.join("mmdc-debug"); - let mut output = String::new(); - - for file in [ - "invocation.txt", - "status.txt", - "puppeteer.json", - "stdin.mmd", - "stdout.log", - "stderr.log", - ] { - let path = debug_dir.join(file); - match fs::read_to_string(&path) { - Ok(contents) => { - output.push_str("\n--- "); - output.push_str(file); - output.push_str(" ---\n"); - output.push_str(&contents); - } - Err(err) => { - output.push_str("\n--- "); - output.push_str(file); - output.push_str(" unavailable: "); - output.push_str(&err.to_string()); - output.push_str(" ---\n"); - } - } - } - - output - } } impl Drop for RenderDir { @@ -229,22 +168,16 @@ exit "$code" .expect("failed to write CSV include"); fs::write(render_dir.path().join("oxide-logo.svg"), OXIDE_LOGO) .expect("failed to write supporting image"); - let mmdc_path_prefix = render_dir.write_mmdc_debug_wrapper(); + let mmdc_path_prefix = render_dir.write_mmdc_wrapper(); let content = RfdAsciidoc::new(EXAMPLE_RFD).expect("example RFD should parse"); - let pdf = match render_pdf( + let pdf = render_pdf( &content, render_dir.path().to_path_buf(), Some(mmdc_path_prefix.as_path()), ) .await - { - Ok(pdf) => pdf, - Err(err) => panic!( - "example RFD should render to PDF: {err:?}\n{}", - render_dir.mmdc_debug_output() - ), - }; + .expect("example RFD should render to PDF"); let pdf = pdf.into_inner(); fs::write( From b3d6df3f9354ed343069409a5317e749145148f6 Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 14:16:17 -0400 Subject: [PATCH 06/20] Switch to explicit package.json and Gemfile dependencies --- .github/workflows/test.yml | 20 +- .gitignore | 2 + README.md | 41 +- rfd-processor/Gemfile | 8 + rfd-processor/Gemfile.lock | 103 ++ rfd-processor/package-lock.json | 2304 +++++++++++++++++++++++++++++++ rfd-processor/package.json | 11 + 7 files changed, 2472 insertions(+), 17 deletions(-) create mode 100644 rfd-processor/Gemfile create mode 100644 rfd-processor/Gemfile.lock create mode 100644 rfd-processor/package-lock.json create mode 100644 rfd-processor/package.json diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5bd6aba8..0e1c0ef6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,20 +29,24 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Install asciidoctor + - name: Install PDF toolchain system dependencies shell: bash run: | sudo apt update -y && sudo apt install -y \ - asciidoctor \ ruby \ - - name: Install asciidoctor-pdf, asciidoctor-mermaid + sudo gem install bundler -v 4.0.11 + - name: Install PDF toolchain shell: bash + working-directory: rfd-processor run: | - sudo gem install rouge - sudo gem install asciidoctor-pdf -v 2.3.15 - sudo gem install asciidoctor-mermaid -v 0.4.1 - sudo npm install -g @mermaid-js/mermaid-cli@11.16.0 - "$(npm root -g)/@mermaid-js/mermaid-cli/node_modules/.bin/puppeteer" browsers install chrome-headless-shell + bundle config set path vendor/bundle + bundle config set bin .bundle/bin + bundle install + bundle binstubs asciidoctor asciidoctor-pdf + npm ci + npm run install:chrome + echo "$PWD/.bundle/bin" >> "$GITHUB_PATH" + echo "$PWD/node_modules/.bin" >> "$GITHUB_PATH" - name: Report versions run: | asciidoctor --version diff --git a/.gitignore b/.gitignore index 636c69d3..acb10103 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ node_modules dist +**/.bundle +**/vendor/bundle config.toml mappers.toml diff --git a/README.md b/README.md index 524b3bdd..83885112 100644 --- a/README.md +++ b/README.md @@ -43,15 +43,38 @@ Running the API requires setting up a configuration file as outlined in `config. Dependencies -* asciidoctor -* Node - * @mermaid-js/mermaid-cli -* Ruby - * rouge - * asciidoctor-pdf - * asciidoctor-mermaid - -Mac: `brew install asciidoctor && npm install -g @mermaid-js/mermaid-cli` +The PDF renderer shells out to `asciidoctor-pdf` and `mmdc`. The toolchain +versions are pinned in: + +* `rfd-processor/Gemfile` +* `rfd-processor/Gemfile.lock` +* `rfd-processor/package.json` +* `rfd-processor/package-lock.json` + +Install the Ruby dependencies: + +```sh +cd rfd-processor +gem install bundler -v 4.0.11 +bundle config set path vendor/bundle +bundle config set bin .bundle/bin +bundle install +bundle binstubs asciidoctor asciidoctor-pdf +export PATH="$PWD/.bundle/bin:$PATH" +``` + +Install the Node dependencies and Chromium runtime used by Mermaid: + +```sh +cd rfd-processor +npm ci +npm run install:chrome +export PATH="$PWD/node_modules/.bin:$PATH" +``` + +On macOS, use Homebrew `ruby` and `node`, then install the PDF toolchain through +Bundler and npm as shown above. If you have previous installed `asciidoctor` +via homebrew, uninstall with `brew uninstall asciidoctor`. ## Background diff --git a/rfd-processor/Gemfile b/rfd-processor/Gemfile new file mode 100644 index 00000000..2fafdb93 --- /dev/null +++ b/rfd-processor/Gemfile @@ -0,0 +1,8 @@ +source "https://rubygems.org" + +gem "asciidoctor", "2.0.26" +gem "asciidoctor-mermaid", "0.4.1" +gem "asciidoctor-pdf", "2.3.24" +gem "base64", "0.3.0" +gem "logger", "1.7.0" +gem "rouge", "5.0.0" diff --git a/rfd-processor/Gemfile.lock b/rfd-processor/Gemfile.lock new file mode 100644 index 00000000..70f7b4f4 --- /dev/null +++ b/rfd-processor/Gemfile.lock @@ -0,0 +1,103 @@ +GEM + remote: https://rubygems.org/ + specs: + Ascii85 (2.0.1) + addressable (2.9.0) + public_suffix (>= 2.0.2, < 8.0) + afm (1.0.0) + asciidoctor (2.0.26) + asciidoctor-mermaid (0.4.1) + asciidoctor-pdf (2.3.24) + asciidoctor (~> 2.0) + concurrent-ruby (~> 1.3) + matrix (~> 0.4) + prawn (~> 2.4.0) + prawn-icon (~> 3.0.0) + prawn-svg (~> 0.34.0) + prawn-table (~> 0.2.0) + prawn-templates (~> 0.1.0) + treetop (~> 1.6.0) + ttfunk (~> 1.7.0) + base64 (0.3.0) + concurrent-ruby (1.3.7) + css_parser (1.22.0) + addressable + hashery (2.1.2) + logger (1.7.0) + matrix (0.4.3) + pdf-core (0.9.0) + pdf-reader (2.15.1) + Ascii85 (>= 1.0, < 3.0, != 2.0.0) + afm (>= 0.2.1, < 2) + hashery (~> 2.0) + ruby-rc4 + ttfunk + polyglot (0.3.5) + prawn (2.4.0) + pdf-core (~> 0.9.0) + ttfunk (~> 1.7) + prawn-icon (3.0.0) + prawn (>= 1.1.0, < 3.0.0) + prawn-svg (0.34.2) + css_parser (~> 1.6) + matrix (~> 0.4.2) + prawn (>= 0.11.1, < 3) + rexml (~> 3.2) + prawn-table (0.2.2) + prawn (>= 1.3.0, < 3.0.0) + prawn-templates (0.1.2) + pdf-reader (~> 2.0) + prawn (~> 2.2) + public_suffix (7.0.5) + rexml (3.4.4) + rouge (5.0.0) + strscan (~> 3.1) + ruby-rc4 (0.1.5) + strscan (3.1.8) + treetop (1.6.18) + polyglot (~> 0.3) + ttfunk (1.7.0) + +PLATFORMS + arm64-darwin-25 + ruby + +DEPENDENCIES + asciidoctor (= 2.0.26) + asciidoctor-mermaid (= 0.4.1) + asciidoctor-pdf (= 2.3.24) + base64 (= 0.3.0) + logger (= 1.7.0) + rouge (= 5.0.0) + +CHECKSUMS + Ascii85 (2.0.1) sha256=15cb5d941808543cbb9e7e6aea3c8ec3877f154c3461e8b3673e97f7ecedbe5a + addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af + afm (1.0.0) sha256=5bd4d6f6241e7014ef090985ec6f4c3e9745f6de0828ddd58bc1efdd138f4545 + asciidoctor (2.0.26) sha256=16e3accf1fc206bbd6335848649d7fd65f31d2daa60d85af13d47a8ee4b071c1 + asciidoctor-mermaid (0.4.1) sha256=51146b0df171d112c118df9236c062f38a5da49afd2086baf21a3ab95343a46c + asciidoctor-pdf (2.3.24) sha256=3076e55132d43b21de93cd7c8149a8c1b2e4afc07e79855fb6b795a0ef20b051 + base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b + concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0 + css_parser (1.22.0) sha256=f274988a40c6178305530d60e7deb5162f7b5538b701b61b5488fc703e5b40c1 + hashery (2.1.2) sha256=d239cc2310401903f6b79d458c2bbef5bf74c46f3f974ae9c1061fb74a404862 + logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 + matrix (0.4.3) sha256=a0d5ab7ddcc1973ff690ab361b67f359acbb16958d1dc072b8b956a286564c5b + pdf-core (0.9.0) sha256=4f368b2f12b57ec979872d4bf4bd1a67e8648e0c81ab89801431d2fc89f4e0bb + pdf-reader (2.15.1) sha256=18c6a986a84a3117fa49f4279fc2de51f5d2399b71833df5d2bccd595c7068ce + polyglot (0.3.5) sha256=59d66ef5e3c166431c39cb8b7c1d02af419051352f27912f6a43981b3def16af + prawn (2.4.0) sha256=82062744f7126c2d77501da253a154271790254dfa8c309b8e52e79bc5de2abd + prawn-icon (3.0.0) sha256=dac8d481dee0f60a769c0cab0fd1baec7351b4806bf9ba959cd6c65f6694b6f5 + prawn-svg (0.34.2) sha256=afff79d332940f6d59604d0b2810f54d46e9335533a2aa4e892fb7d514777a90 + prawn-table (0.2.2) sha256=336d46e39e003f77bf973337a958af6a68300b941c85cb22288872dc2b36addb + prawn-templates (0.1.2) sha256=117aa03db570147cb86fcd7de4fd896994f702eada1d699848a9529a87cd31f1 + public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623 + rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142 + rouge (5.0.0) sha256=e2de9bba2f9cb88f8a73bca3643b560b2b398f32f91bf716f584477bc0175ebc + ruby-rc4 (0.1.5) sha256=00cc40a39d20b53f5459e7ea006a92cf584e9bc275e2a6f7aa1515510e896c03 + strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e + treetop (1.6.18) sha256=a3043f32f1c652aa2abdf3a3848edb2d2f69897257af2675516ac61355c183da + ttfunk (1.7.0) sha256=2370ba484b1891c70bdcafd3448cfd82a32dd794802d81d720a64c15d3ef2a96 + +BUNDLED WITH + 4.0.11 diff --git a/rfd-processor/package-lock.json b/rfd-processor/package-lock.json new file mode 100644 index 00000000..ea2594ed --- /dev/null +++ b/rfd-processor/package-lock.json @@ -0,0 +1,2304 @@ +{ + "name": "@oxide/rfd-processor-pdf-toolchain", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@oxide/rfd-processor-pdf-toolchain", + "dependencies": { + "@mermaid-js/mermaid-cli": "11.16.0" + } + }, + "node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", + "license": "MIT", + "dependencies": { + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@braintree/sanitize-url": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz", + "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==", + "license": "MIT" + }, + "node_modules/@chevrotain/types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz", + "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==", + "license": "Apache-2.0" + }, + "node_modules/@floating-ui/core": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz", + "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.12" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz", + "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.8.0", + "@floating-ui/utils": "^0.2.12" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.27.20", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.20.tgz", + "integrity": "sha512-CMqMy7OaXl9W0eq1Uy7L7i2Y/anPvHmFmESd2CEw0t5YvZhcVCeo4MBevAmswRllX7Y2dEidA4ozGPunLSTQpw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.1.9", + "@floating-ui/utils": "^0.2.12", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.9.tgz", + "integrity": "sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.8.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz", + "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==", + "license": "MIT" + }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-7.3.0.tgz", + "integrity": "sha512-Yw4Qa43P6e4Xwh0TwEUkHQNRJInWaqIBo73VJmns3j2AIlZPAvUcR4yGIxCPqPRCgyJ5KIVIalF/I1GxhZ/Kgw==", + "license": "(CC-BY-4.0 AND OFL-1.1 AND MIT)", + "engines": { + "node": ">=6" + } + }, + "node_modules/@headlessui/react": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.10.tgz", + "integrity": "sha512-5pVLNK9wlpxTUTy9GpgbX/SdcRh+HBnPktjM2wbiLTH4p+2EPHBO1aoSryUCuKUIItdDWO9ITlhUL8UnUN/oIA==", + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.26.16", + "@react-aria/focus": "^3.20.2", + "@react-aria/interactions": "^3.25.0", + "@tanstack/react-virtual": "^3.13.9", + "use-sync-external-store": "^1.5.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/@headlessui/react/node_modules/@floating-ui/react": { + "version": "0.26.28", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", + "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@headlessui/tailwindcss": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@headlessui/tailwindcss/-/tailwindcss-0.2.2.tgz", + "integrity": "sha512-xNe42KjdyA4kfUKLLPGzME9zkH7Q3rOZ5huFihWNWOQFxnItxPB3/67yBI8/qBfY8nwBRx5GHn4VprsoluVMGw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "tailwindcss": "^3.0 || ^4.0" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, + "node_modules/@iconify/utils": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.4.tgz", + "integrity": "sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==", + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.1.0", + "@iconify/types": "^2.0.0", + "import-meta-resolve": "^4.2.0" + } + }, + "node_modules/@internationalized/date": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.2.tgz", + "integrity": "sha512-FY1Y+H64NDs+HAF6omlnWxm3mEpfgaCSWtL5l551ZZfImA+kGjPFgrnJrGjH6lfmLL0g8Z/mBu1R3kufeCp6Jw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.7", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.7.tgz", + "integrity": "sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/string": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.9.tgz", + "integrity": "sha512-kzP/M/mbQxODlmOt4bIQZ2SBVUWUSqMLXooXixnX7noche8WHaQcA+nwFN1K2KCF/cp+LDUhcJsCicwkvhD1pg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@mermaid-js/layout-elk": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@mermaid-js/layout-elk/-/layout-elk-0.2.2.tgz", + "integrity": "sha512-vnH3gtqfhyBiRVKNpT8iDENTw18q/OF0GF/SfYfHN43KZpu+6eZDEOMHTfNYAkpmUWJNgtRQFIS6BTc7vH/DYQ==", + "license": "MIT", + "dependencies": { + "d3": "^7.9.0", + "elkjs": "^0.9.3" + }, + "peerDependencies": { + "mermaid": "^11.0.2" + } + }, + "node_modules/@mermaid-js/layout-tidy-tree": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@mermaid-js/layout-tidy-tree/-/layout-tidy-tree-0.2.2.tgz", + "integrity": "sha512-8RmjDXjKJBxqTS1mICStm8zWRM45fSzs0SOrkp28+KsOGS2YEMFMVTwwRU8CsC6M1L+pDYZVjf1m9AC1c9Wndg==", + "license": "MIT", + "optional": true, + "dependencies": { + "d3": "^7.9.0" + }, + "peerDependencies": { + "mermaid": "^11.0.2" + } + }, + "node_modules/@mermaid-js/mermaid-cli": { + "version": "11.16.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-11.16.0.tgz", + "integrity": "sha512-0InK2nbVIMtzVzCugmdvPkAuvS6wRUqU6Utntff1n8c7lgfRZAdhKY6PSKvcIK9nFmuOUzAgB5+x/XWcroZ7Zg==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-free": "^6.0.0 || ^7.0.1", + "@mermaid-js/layout-elk": "^0.1.5 || ^0.2.0", + "@mermaid-js/mermaid-zenuml": "^0.2.0", + "chalk": "^5.0.1", + "commander": "^13.1.0", + "import-meta-resolve": "^4.1.0", + "katex": "^0.16.25", + "mermaid": "^11.14.0", + "p-limit": "^6.2.0" + }, + "bin": { + "mmdc": "src/cli.js" + }, + "engines": { + "node": "^18.19 || >=20.0" + }, + "optionalDependencies": { + "@mermaid-js/layout-tidy-tree": "^0.2.1" + }, + "peerDependencies": { + "puppeteer": "^23 || ^24 || ^25" + } + }, + "node_modules/@mermaid-js/mermaid-zenuml": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-zenuml/-/mermaid-zenuml-0.2.3.tgz", + "integrity": "sha512-RGBtgL6fc+5Y2Jm9odOH9HRJ80BP4l6atBYnAK5bBzEowF0PU3UtvZRRcbFxImPGPuLIzqZq31ur8lVO0AoF3Q==", + "license": "MIT", + "dependencies": { + "@zenuml/core": "^3.47.0" + }, + "peerDependencies": { + "mermaid": "^10 || ^11" + } + }, + "node_modules/@mermaid-js/parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.2.0.tgz", + "integrity": "sha512-oYPyv8A4As1yH5Bx+04iQEQxXuIQDe0GKCNSRgao6z8AM9jixXIfP0vsppRLvGf+nKIOb9/LdpWA4YuJiVvESA==", + "license": "MIT", + "dependencies": { + "@chevrotain/types": "~11.1.2" + } + }, + "node_modules/@napi-rs/canvas": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.100.tgz", + "integrity": "sha512-xglYA6q3XO5P3BNJYxVZ1IV7DLVjp1Py6nwag88YntrS+3vKHyYcMqXVS4ZztJmwz2uGvz1FWhI/4LgbR5uQDA==", + "license": "MIT", + "optional": true, + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "0.1.100", + "@napi-rs/canvas-darwin-arm64": "0.1.100", + "@napi-rs/canvas-darwin-x64": "0.1.100", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.100", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.100", + "@napi-rs/canvas-linux-arm64-musl": "0.1.100", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.100", + "@napi-rs/canvas-linux-x64-gnu": "0.1.100", + "@napi-rs/canvas-linux-x64-musl": "0.1.100", + "@napi-rs/canvas-win32-arm64-msvc": "0.1.100", + "@napi-rs/canvas-win32-x64-msvc": "0.1.100" + } + }, + "node_modules/@napi-rs/canvas-android-arm64": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.100.tgz", + "integrity": "sha512-hjhCKhntPv9+t4ckHymdx0phYNcVW+GKQR6Lzw2zE+pOVjOplSmtx9nNNknTjbEDLcuLZqA1y8ufKg1XfgftzQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-arm64": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.100.tgz", + "integrity": "sha512-2PcswRaC7Ly645DGt88///zuFDhJxJYdKAs1uU3mfk1atYkXufgcgLfBpk6Tm12nCQBaNt1wpybuPZ4qOhTo8A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-x64": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.100.tgz", + "integrity": "sha512-ePNZtj7pNIva/siZMg+HmbeozkIjqUIYdoymH8HaA3qK7LfzFN4WMBM8G6HQ9ZC+H3+Dnn5pqtiXpgLykaPOhw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.100.tgz", + "integrity": "sha512-d5cDB48oWFGU8/XPhUOFAlySgb/VAu7D+s8fi55K1Pcfg8aPplHWqMgibhVLU8ky7Pyg/fuiVLz4Nf3JrSTuUA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-gnu": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.100.tgz", + "integrity": "sha512-rDxgxRu69RvDlX/bh9o22DxLsGr8EqsNgotL9+RwQE1S0b0cqeatqsw6aW45mukm0B42DIAaAacKaYQ8cqS1nw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-musl": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.100.tgz", + "integrity": "sha512-K3mDW66N+xT2/V439u1alFANiBUjdEx2gLiNYnCmUsva5jZMxWTjafBYwTzYK+EMFMHrUoabuU+T1BIP5CgbYQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.100.tgz", + "integrity": "sha512-mooqUBTIsccZpnoQC4NgrC1v6C1vof39etLNMnBwCY+p0gajWJvAHLGQ6g/gGyS5YrpDW+GefSN4+Cvcr08UWw==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-gnu": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.100.tgz", + "integrity": "sha512-1eCvkDCazm7FFhsT7DfGOdSaHgZVK3bt/dSBl5EWHOWmnz+I7j8tPseJqqD81NF+MH21jKUK4wQSDjN0mdhnTg==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-musl": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.100.tgz", + "integrity": "sha512-20arT6lnI19S68qNlii73TSEDbECNgzMz2EpldC1V3mZFuRkeujXkcebRk0LRJe9SEUAooYiLokfMViY8IX7yA==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-arm64-msvc": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.100.tgz", + "integrity": "sha512-DZFFT1wIAg37LJw37yhMRFfjATd3vTQzjZ1Yki8u2vhO6Hi5VE6BVaGQ1aaDu7xb4iMErz+9EOwjpS7xcxFeBw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.100.tgz", + "integrity": "sha512-MyT1j3mHC2+Lu4pBi9mKyMJhtP6U7k7EldY7sj/uS5gJA65gTXt8MefJQXLJo5d/vZbuWmfxzkEUNc/urV3pHA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.0.6.tgz", + "integrity": "sha512-B/gKoqlFkzhvzsI6jo9K1cZz9o5ypviVv/xu8CwA4grZzyVwN+XfkT+tu8T1zrauuEXv6VhS2oGX+6NL95WcKA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "modern-tar": "^0.7.6", + "yargs": "^18.0.0" + }, + "bin": { + "browsers": "lib/main-cli.js" + }, + "engines": { + "node": ">=22.12.0" + }, + "peerDependencies": { + "proxy-agent": ">=8.0.1", + "yauzl": "^2.10.0 || ^3.4.0" + }, + "peerDependenciesMeta": { + "proxy-agent": { + "optional": true + }, + "yauzl": { + "optional": true + } + } + }, + "node_modules/@react-aria/focus": { + "version": "3.22.1", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.22.1.tgz", + "integrity": "sha512-CPxtkyrBi/HYY5P3lE/57sQ6qfa0lN8E55TOm89H0kNGv0lKt+/0zP7lWERzBjRr5IxBVrQX4gFEowBN52LPaA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0", + "react-aria": "^3.48.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/interactions": { + "version": "3.28.1", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.28.1.tgz", + "integrity": "sha512-Bqb+HrD5I5MHS2SKBhISYqo2SW8Y2dfzgF/Y1lIJq7xqLxheo9vzxPGEHhz+XzkgGfoqEJx8A6a3C7uiqS3HWA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.34.0", + "@swc/helpers": "^0.5.0", + "react-aria": "^3.48.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.0.tgz", + "integrity": "sha512-DkP/H0C2YjjS7gZWKNqOmU8a16qHPjQNdzMwmTq9SzplM6Iw0kVMTZ0OIoe6FOgGqa+FwMsE2QbPjh/n3g/jXQ==", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tanstack/react-virtual": { + "version": "3.14.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.14.6.tgz", + "integrity": "sha512-4+Uq8m0/gzO4kMCHUEpTtGX1RnONK0C+g88b2ltwPMWUBiaVarBuWKoPJaz7gj1cKCVRAdyu+U8GcKhwCc2beA==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.17.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.17.4.tgz", + "integrity": "sha512-nGm5KteqxasUdThLc2izl6dHUqLv0LQj7Nuyo5gYalTPf/U8a9ermvsl7reT+6ioBW1l8WfpP/mcU338nLXpqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "license": "MIT" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz", + "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "license": "MIT", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "license": "MIT" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", + "license": "MIT" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.4.tgz", + "integrity": "sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "license": "MIT" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@upsetjs/venn.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz", + "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==", + "license": "MIT", + "optionalDependencies": { + "d3-selection": "^3.0.0", + "d3-transition": "^3.0.1" + } + }, + "node_modules/@zenuml/core": { + "version": "3.50.1", + "resolved": "https://registry.npmjs.org/@zenuml/core/-/core-3.50.1.tgz", + "integrity": "sha512-Q18BXvIfhRuGw0JfO4e+pltG04Phhv2E7n35EWTNSZKKH/HEkyE4Sh7KERb9dqaOfjOdRdKvLG0YekjK3fcDXw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.27.16", + "@headlessui/react": "^2.2.9", + "@headlessui/tailwindcss": "^0.2.2", + "antlr4": "~4.11.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "color-string": "^2.1.4", + "dompurify": "^3.3.1", + "highlight.js": "^11.10.0", + "html-to-image": "^1.11.13", + "jotai": "^2.16.1", + "marked": "^4.3.0", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "tailwind-merge": "^3.4.0" + }, + "bin": { + "zenuml": "dist/cli/zenuml.mjs" + }, + "engines": { + "node": ">=20" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^0.1.97" + }, + "peerDependencies": { + "playwright-core": "1.57.0" + }, + "peerDependenciesMeta": { + "playwright-core": { + "optional": true + } + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antlr4": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.11.0.tgz", + "integrity": "sha512-GUGlpE2JUjAN+G8G5vY+nOoeyNhHsXoIJwP1XF1oRw89vifA1K46T6SEkwLwr7drihN7I/lf0DIjKc4OZvBX8w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=14" + } + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chromium-bidi": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-16.0.1.tgz", + "integrity": "sha512-J63PGu/9PpeCwLIcKYyzWP6yaVL5pxuBc0shlYCYM8BaAkmlwiQboXO1iNbOgSDbVklEyYFfNEcHD8oOAWacUA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "engines": { + "node": ">=20.19.0 <22.0.0 || >=22.12.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/color-string": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", + "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", + "license": "MIT", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "license": "MIT", + "dependencies": { + "layout-base": "^1.0.0" + } + }, + "node_modules/cytoscape": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.34.0.tgz", + "integrity": "sha512-62rNSrioXw93uliKFBwjukeQyeWwH2PqDrTac31r2P6464u3AUvTk0xS4LVvT251g7IgkFunrI48ZEZGjywSOg==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "license": "MIT", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "license": "MIT" + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "license": "ISC", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "license": "ISC", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "license": "ISC", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "license": "ISC" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz", + "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==", + "license": "MIT", + "dependencies": { + "d3": "^7.9.0", + "lodash-es": "^4.17.21" + } + }, + "node_modules/dayjs": { + "version": "1.11.21", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", + "license": "MIT" + }, + "node_modules/delaunator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz", + "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==", + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1638949", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1638949.tgz", + "integrity": "sha512-mXwg4Fqnv0WR4iuAT/gYUmctNkjILwXFHyZ+m7Ty1dfr0ezZt2U3gnrrJTfRobJTHoXf+IbuFvFITzLrLFjwJA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/dompurify": { + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.12.tgz", + "integrity": "sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/elkjs": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.3.tgz", + "integrity": "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==", + "license": "EPL-2.0" + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT", + "peer": true + }, + "node_modules/es-toolkit": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.49.0.tgz", + "integrity": "sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "ISC", + "peer": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hachure-fill": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", + "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", + "license": "MIT" + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/html-to-image": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.13.tgz", + "integrity": "sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==", + "license": "MIT" + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/jotai": { + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.20.2.tgz", + "integrity": "sha512-aHB4CNb9qRcyf0mwSB6EO5bCGAjx8cTwFgOFCE2leOnTzqACbnSWG8XoWB3LxCT1Qoj03I1OWAHszDmN4uHb/w==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0", + "@babel/template": ">=7.0.0", + "@types/react": ">=17.0.0", + "react": ">=17.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@babel/template": { + "optional": true + }, + "@types/react": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/katex": { + "version": "0.16.47", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz", + "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" + }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "license": "MIT" + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/mermaid": { + "version": "11.16.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.16.0.tgz", + "integrity": "sha512-Zvm3kbstgdpvIJPPItlL7fppIZ3kibvc1oZIGxdvk9t6UFz6flv+Jw7FtRGKwfcI8OckmH04LqG6LlS6X4B1pA==", + "license": "MIT", + "dependencies": { + "@braintree/sanitize-url": "^7.1.2", + "@iconify/utils": "^3.0.2", + "@mermaid-js/parser": "^1.2.0", + "@types/d3": "^7.4.3", + "@upsetjs/venn.js": "^2.0.0", + "cytoscape": "^3.33.3", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.2.0", + "d3": "^7.9.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.14", + "dayjs": "^1.11.20", + "dompurify": "^3.3.3", + "es-toolkit": "^1.45.1", + "katex": "^0.16.45", + "khroma": "^2.1.0", + "marked": "^16.3.0", + "roughjs": "^4.6.6", + "stylis": "^4.3.6", + "ts-dedent": "^2.2.0", + "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" + } + }, + "node_modules/mermaid/node_modules/marked": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "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", + "peer": true + }, + "node_modules/modern-tar": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/modern-tar/-/modern-tar-0.7.6.tgz", + "integrity": "sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.7.0.tgz", + "integrity": "sha512-xg1eHpwYL/D/HEdWw2goFZP6vV0FH7W+PZ5rFkGjdIDLtxq7EkzBUeT3m+lndYCt8wKbmofUu1MUdMCXkCk9ZQ==", + "license": "MIT" + }, + "node_modules/path-data-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", + "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", + "license": "MIT" + }, + "node_modules/points-on-curve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", + "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==", + "license": "MIT" + }, + "node_modules/points-on-path": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz", + "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==", + "license": "MIT", + "dependencies": { + "path-data-parser": "0.1.0", + "points-on-curve": "0.2.0" + } + }, + "node_modules/puppeteer": { + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-25.3.0.tgz", + "integrity": "sha512-O1tx8S315aw8eI99HZ5ZNcVEzJ9+jKF//eO5UvfZ3cXJ6okZ5sX3Y50u7DJaM+ewEK4LqXP068tBhfRaWikj+g==", + "hasInstallScript": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@puppeteer/browsers": "3.0.6", + "chromium-bidi": "16.0.1", + "devtools-protocol": "0.0.1638949", + "lilconfig": "^3.1.3", + "puppeteer-core": "25.3.0", + "typed-query-selector": "^2.12.2" + }, + "bin": { + "puppeteer": "lib/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/puppeteer-core": { + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.3.0.tgz", + "integrity": "sha512-fm+wpUr2oigH1PXZvwgATrM2tYWHMDG8ASzTEe9uukCye4X5Ldx1K5BTHPFKITrIWvQQAQ256d1NpbEveBcKjA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@puppeteer/browsers": "3.0.6", + "chromium-bidi": "16.0.1", + "devtools-protocol": "0.0.1638949", + "typed-query-selector": "^2.12.2", + "webdriver-bidi-protocol": "0.4.2", + "ws": "^8.21.0" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", + "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-aria": { + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.50.0.tgz", + "integrity": "sha512-S0Os6QZk33fzUAKu1QLT9afoUaCBt1ZNdoiq0n2YMVgKIdNIQS8zxiZ8O9hYE6QyDkHKjD6q39LQZ+qaSAIgjw==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.12.2", + "@internationalized/number": "^3.6.7", + "@internationalized/string": "^3.2.9", + "@react-types/shared": "^3.36.0", + "@swc/helpers": "^0.5.0", + "aria-hidden": "^1.2.3", + "clsx": "^2.0.0", + "react-stately": "3.48.0", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-dom": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", + "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.7" + } + }, + "node_modules/react-stately": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.48.0.tgz", + "integrity": "sha512-ImicSAG+lTotAe5izcs1fz49Zk48w7pDusqYg04WaPhCoej8BJ24soMu3iLXIrsi273s4P1gZrYGrqReMfgEEA==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.12.2", + "@internationalized/number": "^3.6.7", + "@internationalized/string": "^3.2.9", + "@react-types/shared": "^3.36.0", + "@swc/helpers": "^0.5.0", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", + "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==", + "license": "Unlicense" + }, + "node_modules/roughjs": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz", + "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==", + "license": "MIT", + "dependencies": { + "hachure-fill": "^0.5.2", + "path-data-parser": "^0.1.0", + "points-on-curve": "^0.2.0", + "points-on-path": "^0.2.1" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stylis": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.4.0.tgz", + "integrity": "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==", + "license": "MIT" + }, + "node_modules/tabbable": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz", + "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==", + "license": "MIT" + }, + "node_modules/tailwind-merge": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz", + "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.2.tgz", + "integrity": "sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==", + "license": "MIT", + "peer": true + }, + "node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/ts-dedent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.3.0.tgz", + "integrity": "sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==", + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "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==", + "license": "0BSD" + }, + "node_modules/typed-query-selector": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.2.tgz", + "integrity": "sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==", + "license": "MIT", + "peer": true + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/uuid": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz", + "integrity": "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/webdriver-bidi-protocol": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.2.tgz", + "integrity": "sha512-VSV+fzfChirL3e7jay2yUC7B4HQCGtEWEg/MSSQbK+qWbqeGlRLlXTzPpYr3XGUvbpDHumWZBJxgesg4N7dbtA==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "license": "MIT", + "peer": true, + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "peer": true, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/rfd-processor/package.json b/rfd-processor/package.json new file mode 100644 index 00000000..64456a1a --- /dev/null +++ b/rfd-processor/package.json @@ -0,0 +1,11 @@ +{ + "name": "@oxide/rfd-processor-pdf-toolchain", + "private": true, + "description": "Node dependencies for rendering RFD PDFs", + "scripts": { + "install:chrome": "puppeteer browsers install chrome-headless-shell" + }, + "dependencies": { + "@mermaid-js/mermaid-cli": "11.16.0" + } +} From a69bbf583906f53eb5c1a881a84d30c071f25de9 Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 14:25:33 -0400 Subject: [PATCH 07/20] ci: Use ruby in CI --- .github/workflows/test.yml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0e1c0ef6..7a5132b2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,19 +29,15 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Install PDF toolchain system dependencies - shell: bash - run: | - sudo apt update -y && sudo apt install -y \ - ruby \ - sudo gem install bundler -v 4.0.11 + - uses: ruby/setup-ruby@v1 + with: + working-directory: rfd-processor + bundler-cache: true - name: Install PDF toolchain shell: bash working-directory: rfd-processor run: | - bundle config set path vendor/bundle bundle config set bin .bundle/bin - bundle install bundle binstubs asciidoctor asciidoctor-pdf npm ci npm run install:chrome From ad7ad3ee8dd168b621bbae781bfd4c5c79499a5f Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 14:27:08 -0400 Subject: [PATCH 08/20] .ruby-version --- rfd-processor/.ruby-version | 1 + 1 file changed, 1 insertion(+) create mode 100644 rfd-processor/.ruby-version diff --git a/rfd-processor/.ruby-version b/rfd-processor/.ruby-version new file mode 100644 index 00000000..b347b11e --- /dev/null +++ b/rfd-processor/.ruby-version @@ -0,0 +1 @@ +3.2.3 From d0f6d32cfe8bcc9ea35acf4951d0c913e0fdea32 Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 14:46:33 -0400 Subject: [PATCH 09/20] Fix macos local. (still likely byte-for-byte broken) --- README.md | 7 +- rfd-processor/Gemfile.lock | 1 + rfd-processor/src/content/asciidoc.rs | 73 +++++++++++++------ rfd-processor/tests/content/example-repo.pdf | Bin 178950 -> 178950 bytes 4 files changed, 57 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 83885112..5f89fa80 100644 --- a/README.md +++ b/README.md @@ -72,9 +72,10 @@ npm run install:chrome export PATH="$PWD/node_modules/.bin:$PATH" ``` -On macOS, use Homebrew `ruby` and `node`, then install the PDF toolchain through -Bundler and npm as shown above. If you have previous installed `asciidoctor` -via homebrew, uninstall with `brew uninstall asciidoctor`. +On macOS, use `brew install ruby@3.2` and then install the PDF toolchain +through Bundler and npm as shown above. +If you previously installed `asciidoctor` via Homebrew, uninstall +with `brew uninstall asciidoctor`. ## Background diff --git a/rfd-processor/Gemfile.lock b/rfd-processor/Gemfile.lock index 70f7b4f4..fe8cfd14 100644 --- a/rfd-processor/Gemfile.lock +++ b/rfd-processor/Gemfile.lock @@ -78,6 +78,7 @@ CHECKSUMS asciidoctor-mermaid (0.4.1) sha256=51146b0df171d112c118df9236c062f38a5da49afd2086baf21a3ab95343a46c asciidoctor-pdf (2.3.24) sha256=3076e55132d43b21de93cd7c8149a8c1b2e4afc07e79855fb6b795a0ef20b051 base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b + bundler (4.0.11) sha256=5bcec0fb78302e48d02ee46f10ee6e6942be647ba5b44a6d1ddfda9a240ce785 concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0 css_parser (1.22.0) sha256=f274988a40c6178305530d60e7deb5162f7b5538b701b61b5488fc703e5b40c1 hashery (2.1.2) sha256=d239cc2310401903f6b79d458c2bbef5bf74c46f3f974ae9c1061fb74a404862 diff --git a/rfd-processor/src/content/asciidoc.rs b/rfd-processor/src/content/asciidoc.rs index c5e72ca0..b90cdfe9 100644 --- a/rfd-processor/src/content/asciidoc.rs +++ b/rfd-processor/src/content/asciidoc.rs @@ -4,11 +4,7 @@ use async_trait::async_trait; use rfd_data::content::{RfdAsciidoc, RfdDocument}; -use std::{ - env, - path::{Path, PathBuf}, - process::Command, -}; +use std::{env, path::PathBuf, process::Command}; use crate::util::write_file; @@ -17,7 +13,7 @@ use super::{RenderableRfdError, RenderedPdf, RfdOutputError, RfdRenderedFormat}; async fn render_pdf( content: &RfdAsciidoc<'_>, content_dir: PathBuf, - path_prefix: Option<&Path>, + path_prefixes: &[PathBuf], ) -> Result { let file_path = content_dir.join("contents.adoc"); @@ -40,9 +36,11 @@ async fn render_pdf( file_path.to_str().unwrap(), ]); - if let Some(path_prefix) = path_prefix { + if !path_prefixes.is_empty() { let path = env::join_paths( - std::iter::once(path_prefix.to_path_buf()) + path_prefixes + .iter() + .cloned() .chain(env::split_paths(&env::var_os("PATH").unwrap_or_default())), ) .expect("failed to construct PATH"); @@ -80,7 +78,7 @@ async fn render_pdf( #[async_trait] impl<'a> RfdRenderedFormat> for RenderedPdf { async fn render(content: &RfdAsciidoc, content_dir: PathBuf) -> Result { - render_pdf(content, content_dir, None).await + render_pdf(content, content_dir, &[]).await } } @@ -112,11 +110,11 @@ mod tests { &self.path } - fn write_mmdc_wrapper(&self) -> PathBuf { + fn write_mmdc_wrapper(&self, path_prefixes: &[PathBuf]) -> PathBuf { let wrapper_dir = self.path.join("mmdc-bin"); fs::create_dir_all(&wrapper_dir).expect("failed to create mmdc wrapper directory"); - let real_mmdc = find_executable("mmdc"); + let real_mmdc = find_executable("mmdc", path_prefixes); let puppeteer_config = wrapper_dir.join("puppeteer.json"); fs::write( &puppeteer_config, @@ -168,16 +166,14 @@ exec "$real_mmdc" --puppeteerConfigFile "$puppeteer_config" "$@" .expect("failed to write CSV include"); fs::write(render_dir.path().join("oxide-logo.svg"), OXIDE_LOGO) .expect("failed to write supporting image"); - let mmdc_path_prefix = render_dir.write_mmdc_wrapper(); + let mut path_prefixes = test_toolchain_path_prefixes(); + let mmdc_path_prefix = render_dir.write_mmdc_wrapper(&path_prefixes); + path_prefixes.insert(0, mmdc_path_prefix); let content = RfdAsciidoc::new(EXAMPLE_RFD).expect("example RFD should parse"); - let pdf = render_pdf( - &content, - render_dir.path().to_path_buf(), - Some(mmdc_path_prefix.as_path()), - ) - .await - .expect("example RFD should render to PDF"); + let pdf = render_pdf(&content, render_dir.path().to_path_buf(), &path_prefixes) + .await + .expect("example RFD should render to PDF"); let pdf = pdf.into_inner(); fs::write( @@ -213,13 +209,48 @@ exec "$real_mmdc" --puppeteerConfigFile "$puppeteer_config" "$@" } } - fn find_executable(name: &str) -> PathBuf { - std::env::split_paths(&std::env::var_os("PATH").unwrap_or_default()) + fn find_executable(name: &str, path_prefixes: &[PathBuf]) -> PathBuf { + path_prefixes + .iter() + .cloned() + .chain(std::env::split_paths( + &std::env::var_os("PATH").unwrap_or_default(), + )) .map(|path| path.join(name)) .find(|path| path.is_file()) .unwrap_or_else(|| panic!("failed to find {name} in PATH")) } + fn test_toolchain_path_prefixes() -> Vec { + let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR")); + let mut paths = Vec::new(); + + // Bundler binstubs use `#!/usr/bin/env ruby`; put Homebrew Ruby ahead of + // macOS system Ruby when it is available. + if cfg!(target_os = "macos") { + for homebrew_ruby in [ + PathBuf::from("/opt/homebrew/opt/ruby@3.2/bin"), + PathBuf::from("/opt/homebrew/opt/ruby/bin"), + ] { + if homebrew_ruby.is_dir() { + paths.push(homebrew_ruby); + break; + } + } + } + + paths.extend( + [ + manifest_dir.join(".bundle/bin"), + manifest_dir.join("node_modules/.bin"), + ] + .into_iter() + .filter(|path| path.is_dir()), + ); + + paths + } + fn shell_quote(path: &Path) -> String { let path = path.to_string_lossy(); format!("'{}'", path.replace('\'', r#"'\''"#)) diff --git a/rfd-processor/tests/content/example-repo.pdf b/rfd-processor/tests/content/example-repo.pdf index 717f27bf0ba48afd6160550b03556cddcefd6a3c..c58a46b8afe190563519798a542543bcbc1f827b 100644 GIT binary patch delta 36 scmZqs#?|(XYr?XLmmE3t1B&ufN|RG3E>dY0W^5N`WZW*y$n<$903K!y^8f$< delta 36 scmZqs#?|(XYr?XLpA|Ut1B&ufN|RG3hPgHiGqwveGHw@UWcs`l02|>A$N&HU From f4b3cacc0fab4f315059806a4fffe83101284fe9 Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 14:54:27 -0400 Subject: [PATCH 10/20] Preserve the mismatched pdf --- .github/workflows/test.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7a5132b2..628c4ba1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,7 +29,7 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: ruby/setup-ruby@v1 + - uses: ruby/setup-ruby@6e5d382445ae5590b7449d8b3bc8cb1c2c27f617 # v1.3.7 with: working-directory: rfd-processor bundler-cache: true @@ -56,6 +56,13 @@ jobs: env: TEST_DATABASE: postgres://test:test@localhost RUST_LOG: v=trace,rfd=trace + - name: Upload rendered PDF + if: failure() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a v7.0.1 + with: + name: rfd-processor-example-local-pdf + path: rfd-processor/tests/content/example-local.pdf + if-no-files-found: ignore generate: runs-on: ubuntu-24.04 From a70225a0901504f1ecd4bb013955972dfc05c9ee Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 14:59:05 -0400 Subject: [PATCH 11/20] typo --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 628c4ba1..9d406986 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -58,7 +58,7 @@ jobs: RUST_LOG: v=trace,rfd=trace - name: Upload rendered PDF if: failure() - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a v7.0.1 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: rfd-processor-example-local-pdf path: rfd-processor/tests/content/example-local.pdf From 469133e454d6bb039c7936f9c2d9bbc0de473bdb Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 15:55:17 -0400 Subject: [PATCH 12/20] Add diff-pdf --- .github/workflows/test.yml | 10 ++++-- README.md | 7 +++-- rfd-processor/src/content/asciidoc.rs | 43 ++++++++++++++------------ rfd-processor/tests/content/.gitignore | 3 +- 4 files changed, 38 insertions(+), 25 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9d406986..0082a546 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,6 +29,10 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Install PDF comparison tool + run: | + sudo apt-get update + sudo apt-get install -y diff-pdf-wx - uses: ruby/setup-ruby@6e5d382445ae5590b7449d8b3bc8cb1c2c27f617 # v1.3.7 with: working-directory: rfd-processor @@ -60,8 +64,10 @@ jobs: if: failure() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: - name: rfd-processor-example-local-pdf - path: rfd-processor/tests/content/example-local.pdf + name: rfd-processor-example-pdf-artifacts + path: | + rfd-processor/tests/content/example-rendered.pdf + rfd-processor/tests/content/example-diff.pdf if-no-files-found: ignore generate: diff --git a/README.md b/README.md index 5f89fa80..9f2c11c9 100644 --- a/README.md +++ b/README.md @@ -43,8 +43,9 @@ Running the API requires setting up a configuration file as outlined in `config. Dependencies -The PDF renderer shells out to `asciidoctor-pdf` and `mmdc`. The toolchain -versions are pinned in: +The PDF renderer shells out to `asciidoctor-pdf` and `mmdc`. The PDF rendering +test also shells out to `diff-pdf` to visually compare the generated PDF with +the checked-in example. The toolchain versions are pinned in: * `rfd-processor/Gemfile` * `rfd-processor/Gemfile.lock` @@ -76,6 +77,8 @@ On macOS, use `brew install ruby@3.2` and then install the PDF toolchain through Bundler and npm as shown above. If you previously installed `asciidoctor` via Homebrew, uninstall with `brew uninstall asciidoctor`. +Install the visual PDF comparison tool with `brew install diff-pdf` on macOS or +`apt-get install diff-pdf-wx` on Ubuntu. ## Background diff --git a/rfd-processor/src/content/asciidoc.rs b/rfd-processor/src/content/asciidoc.rs index b90cdfe9..321983e0 100644 --- a/rfd-processor/src/content/asciidoc.rs +++ b/rfd-processor/src/content/asciidoc.rs @@ -176,37 +176,40 @@ exec "$real_mmdc" --puppeteerConfigFile "$puppeteer_config" "$@" .expect("example RFD should render to PDF"); let pdf = pdf.into_inner(); - fs::write( - Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/content/example-local.pdf"), - &pdf, - ) - .expect("failed to write local example PDF"); + let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR")); + let rendered_pdf_path = manifest_dir.join("tests/content/example-rendered.pdf"); + let diff_pdf_path = manifest_dir.join("tests/content/example-diff.pdf"); + fs::write(&rendered_pdf_path, &pdf).expect("failed to write rendered example PDF"); + let _ = fs::remove_file(&diff_pdf_path); assert!(pdf.starts_with(b"%PDF-"), "rendered bytes should be a PDF"); - let repo_pdf_path = - Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/content/example-repo.pdf"); - let expected_pdf = match fs::read(&repo_pdf_path) { - Ok(pdf) => pdf, + let repo_pdf_path = manifest_dir.join("tests/content/example-repo.pdf"); + match fs::read(&repo_pdf_path) { + Ok(_) => {} Err(err) if err.kind() == std::io::ErrorKind::NotFound => { fs::write(&repo_pdf_path, &pdf).expect("failed to write repo example PDF"); - pdf.clone() + return; } Err(err) => panic!("failed to read repo example PDF: {err}"), - }; + } - if pdf != expected_pdf { - let first_diff = pdf - .iter() - .zip(expected_pdf.iter()) - .position(|(actual, expected)| actual != expected); + let diff_output = Command::new("diff-pdf") + .arg("--output-diff") + .arg(&diff_pdf_path) + .arg(&repo_pdf_path) + .arg(&rendered_pdf_path) + .output() + .expect("failed to run diff-pdf; install it with `brew install diff-pdf` or `apt-get install diff-pdf-wx`"); + if !diff_output.status.success() { panic!( - "rendered PDF should match tests/content/example-repo.pdf; actual len {}, expected len {}, first differing byte {:?}", - pdf.len(), - expected_pdf.len(), - first_diff + "rendered PDF should visually match tests/content/example-repo.pdf; wrote actual PDF to tests/content/example-rendered.pdf and visual diff to tests/content/example-diff.pdf\nstdout:\n{}\nstderr:\n{}", + String::from_utf8_lossy(&diff_output.stdout), + String::from_utf8_lossy(&diff_output.stderr), ); } + + let _ = fs::remove_file(&diff_pdf_path); } fn find_executable(name: &str, path_prefixes: &[PathBuf]) -> PathBuf { diff --git a/rfd-processor/tests/content/.gitignore b/rfd-processor/tests/content/.gitignore index 67c778cf..9a204d56 100644 --- a/rfd-processor/tests/content/.gitignore +++ b/rfd-processor/tests/content/.gitignore @@ -1 +1,2 @@ -example-local.pdf +example-rendered.pdf +example-diff.pdf From f2c80a910640ff232eae3125a41697e6660629ba Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 16:06:45 -0400 Subject: [PATCH 13/20] debugging --- .github/workflows/test.yml | 12 +++++- rfd-processor/src/content/asciidoc.rs | 60 +++++++++++++++++++++++--- rfd-processor/tests/content/.gitignore | 2 + 3 files changed, 66 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0082a546..f55cb540 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -32,7 +32,7 @@ jobs: - name: Install PDF comparison tool run: | sudo apt-get update - sudo apt-get install -y diff-pdf-wx + sudo apt-get install -y diff-pdf-wx fontconfig - uses: ruby/setup-ruby@6e5d382445ae5590b7449d8b3bc8cb1c2c27f617 # v1.3.7 with: working-directory: rfd-processor @@ -48,10 +48,19 @@ jobs: echo "$PWD/.bundle/bin" >> "$GITHUB_PATH" echo "$PWD/node_modules/.bin" >> "$GITHUB_PATH" - name: Report versions + working-directory: rfd-processor run: | asciidoctor --version asciidoctor-pdf --version mmdc --version + node --version + npm --version + node -e 'const puppeteer = require("puppeteer"); puppeteer.executablePath().then(console.log)' + "$(node -e 'const puppeteer = require("puppeteer"); puppeteer.executablePath().then((path) => process.stdout.write(path))')" --version + fc-match sans-serif + fc-match Arial + fc-match Verdana + fc-match "Trebuchet MS" - run: | rustup toolchain install - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 @@ -68,6 +77,7 @@ jobs: path: | rfd-processor/tests/content/example-rendered.pdf rfd-processor/tests/content/example-diff.pdf + rfd-processor/tests/content/example-mermaid-rendered.png if-no-files-found: ignore generate: diff --git a/rfd-processor/src/content/asciidoc.rs b/rfd-processor/src/content/asciidoc.rs index 321983e0..d4b516fe 100644 --- a/rfd-processor/src/content/asciidoc.rs +++ b/rfd-processor/src/content/asciidoc.rs @@ -110,7 +110,11 @@ mod tests { &self.path } - fn write_mmdc_wrapper(&self, path_prefixes: &[PathBuf]) -> PathBuf { + fn write_mmdc_wrapper( + &self, + path_prefixes: &[PathBuf], + mermaid_image_path: &Path, + ) -> PathBuf { let wrapper_dir = self.path.join("mmdc-bin"); fs::create_dir_all(&wrapper_dir).expect("failed to create mmdc wrapper directory"); @@ -129,10 +133,45 @@ mod tests { r#"#!/usr/bin/env bash real_mmdc={real_mmdc} puppeteer_config={puppeteer_config} -exec "$real_mmdc" --puppeteerConfigFile "$puppeteer_config" "$@" +mermaid_image={mermaid_image} + +output_file="" +previous_arg="" +for arg in "$@"; do + if [[ "$previous_arg" == "-o" || "$previous_arg" == "--output" ]]; then + output_file="$arg" + break + fi + + if [[ "$arg" == "-o" || "$arg" == "--output" ]]; then + previous_arg="$arg" + continue + fi + + case "$arg" in + -o*) + output_file="${{arg#-o}}" + break + ;; + --output=*) + output_file="${{arg#--output=}}" + break + ;; + esac + + previous_arg="$arg" +done + +"$real_mmdc" --puppeteerConfigFile "$puppeteer_config" "$@" +status="$?" +if [[ "$status" == "0" && -n "$output_file" && -f "$output_file" ]]; then + cp "$output_file" "$mermaid_image" +fi +exit "$status" "#, real_mmdc = shell_quote(real_mmdc.as_path()), puppeteer_config = shell_quote(puppeteer_config.as_path()), + mermaid_image = shell_quote(mermaid_image_path), ), ) .expect("failed to write mmdc wrapper"); @@ -162,12 +201,19 @@ exec "$real_mmdc" --puppeteerConfigFile "$puppeteer_config" "$@" #[tokio::test] async fn render_pdf_example() { let render_dir = RenderDir::new(); + let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR")); + let rendered_pdf_path = manifest_dir.join("tests/content/example-rendered.pdf"); + let diff_pdf_path = manifest_dir.join("tests/content/example-diff.pdf"); + let mermaid_image_path = manifest_dir.join("tests/content/example-mermaid-rendered.png"); + let _ = fs::remove_file(&diff_pdf_path); + let _ = fs::remove_file(&mermaid_image_path); + fs::write(render_dir.path().join("example.csv"), EXAMPLE_CSV) .expect("failed to write CSV include"); fs::write(render_dir.path().join("oxide-logo.svg"), OXIDE_LOGO) .expect("failed to write supporting image"); let mut path_prefixes = test_toolchain_path_prefixes(); - let mmdc_path_prefix = render_dir.write_mmdc_wrapper(&path_prefixes); + let mmdc_path_prefix = render_dir.write_mmdc_wrapper(&path_prefixes, &mermaid_image_path); path_prefixes.insert(0, mmdc_path_prefix); let content = RfdAsciidoc::new(EXAMPLE_RFD).expect("example RFD should parse"); @@ -176,13 +222,13 @@ exec "$real_mmdc" --puppeteerConfigFile "$puppeteer_config" "$@" .expect("example RFD should render to PDF"); let pdf = pdf.into_inner(); - let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR")); - let rendered_pdf_path = manifest_dir.join("tests/content/example-rendered.pdf"); - let diff_pdf_path = manifest_dir.join("tests/content/example-diff.pdf"); fs::write(&rendered_pdf_path, &pdf).expect("failed to write rendered example PDF"); - let _ = fs::remove_file(&diff_pdf_path); assert!(pdf.starts_with(b"%PDF-"), "rendered bytes should be a PDF"); + assert!( + mermaid_image_path.is_file(), + "rendering should write tests/content/example-mermaid-rendered.png" + ); let repo_pdf_path = manifest_dir.join("tests/content/example-repo.pdf"); match fs::read(&repo_pdf_path) { Ok(_) => {} diff --git a/rfd-processor/tests/content/.gitignore b/rfd-processor/tests/content/.gitignore index 9a204d56..43403443 100644 --- a/rfd-processor/tests/content/.gitignore +++ b/rfd-processor/tests/content/.gitignore @@ -1,2 +1,4 @@ +example-local.pdf example-rendered.pdf example-diff.pdf +example-mermaid-rendered.png From 1457cb50c4197d69f99070102d1a9f525595f200 Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 17:31:07 -0400 Subject: [PATCH 14/20] Different test strategy --- .github/workflows/test.yml | 48 ++-- README.md | 30 +- rfd-processor/src/content/asciidoc.rs | 262 ++---------------- rfd-processor/src/content/mod.rs | 9 + rfd-processor/src/main.rs | 47 +++- rfd-processor/tests/.gitignore | 3 + rfd-processor/tests/content/.gitignore | 4 - .../example-repo.pdf => rfd_9999.pdf} | Bin .../example.adoc => rfd_9999/contents.adoc} | 2 +- .../tests/{content => rfd_9999}/example.csv | 0 .../{content => rfd_9999}/oxide-logo.svg | 0 11 files changed, 129 insertions(+), 276 deletions(-) create mode 100644 rfd-processor/tests/.gitignore delete mode 100644 rfd-processor/tests/content/.gitignore rename rfd-processor/tests/{content/example-repo.pdf => rfd_9999.pdf} (100%) rename rfd-processor/tests/{content/example.adoc => rfd_9999/contents.adoc} (98%) rename rfd-processor/tests/{content => rfd_9999}/example.csv (100%) rename rfd-processor/tests/{content => rfd_9999}/oxide-logo.svg (100%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0fd5a88e..26612486 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,10 +29,6 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Install PDF comparison tool - run: | - sudo apt-get update - sudo apt-get install -y diff-pdf-wx fontconfig - uses: ruby/setup-ruby@6e5d382445ae5590b7449d8b3bc8cb1c2c27f617 # v1.3.7 with: working-directory: rfd-processor @@ -45,22 +41,20 @@ jobs: bundle binstubs asciidoctor asciidoctor-pdf npm ci npm run install:chrome + mkdir -p .ci-bin + printf '%s\n' '{"args":["--no-sandbox","--disable-setuid-sandbox"]}' > .ci-bin/puppeteer.json + printf '%s\n' '#!/usr/bin/env bash' \ + "exec '$PWD/node_modules/.bin/mmdc' --puppeteerConfigFile '$PWD/.ci-bin/puppeteer.json' \"\$@\"" \ + > .ci-bin/mmdc + chmod +x .ci-bin/mmdc echo "$PWD/.bundle/bin" >> "$GITHUB_PATH" + echo "$PWD/.ci-bin" >> "$GITHUB_PATH" echo "$PWD/node_modules/.bin" >> "$GITHUB_PATH" - name: Report versions - working-directory: rfd-processor run: | asciidoctor --version asciidoctor-pdf --version mmdc --version - node --version - npm --version - node -e 'const puppeteer = require("puppeteer"); puppeteer.executablePath().then(console.log)' - "$(node -e 'const puppeteer = require("puppeteer"); puppeteer.executablePath().then((path) => process.stdout.write(path))')" --version - fc-match sans-serif - fc-match Arial - fc-match Verdana - fc-match "Trebuchet MS" - run: | rustup toolchain install - uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 @@ -69,15 +63,35 @@ jobs: env: TEST_DATABASE: postgres://test:test@localhost RUST_LOG: v=trace,rfd=trace + - name: Verify RFD 9999 PDF fixture + shell: bash + run: | + expected_pdf="rfd-processor/tests/rfd_9999.pdf" + generated_pdf="rfd-processor/tests/rfd_9999-generated.pdf" + diff_pdf="rfd-processor/tests/rfd_9999-diff.pdf" + + cargo run -p rfd-processor -- pdf rfd-processor/tests/rfd_9999 -o "$generated_pdf" + + expected_checksum="$(sha256sum "$expected_pdf" | cut -d ' ' -f 1)" + generated_checksum="$(sha256sum "$generated_pdf" | cut -d ' ' -f 1)" + + if [[ "$expected_checksum" != "$generated_checksum" ]]; then + echo "Rendered PDF does not match checked-in RFD 9999 PDF" + echo "expected: $expected_checksum $expected_pdf" + echo "generated: $generated_checksum $generated_pdf" + sudo apt-get update + sudo apt-get install -y diff-pdf-wx xvfb + xvfb-run -a diff-pdf --output-diff "$diff_pdf" "$expected_pdf" "$generated_pdf" || true + exit 1 + fi - name: Upload rendered PDF if: failure() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: - name: rfd-processor-example-pdf-artifacts + name: rfd-processor-rfd-9999-pdf-artifacts path: | - rfd-processor/tests/content/example-rendered.pdf - rfd-processor/tests/content/example-diff.pdf - rfd-processor/tests/content/example-mermaid-rendered.png + rfd-processor/tests/rfd_9999-generated.pdf + rfd-processor/tests/rfd_9999-diff.pdf if-no-files-found: ignore generate: diff --git a/README.md b/README.md index 9f2c11c9..b060b0ad 100644 --- a/README.md +++ b/README.md @@ -43,14 +43,8 @@ Running the API requires setting up a configuration file as outlined in `config. Dependencies -The PDF renderer shells out to `asciidoctor-pdf` and `mmdc`. The PDF rendering -test also shells out to `diff-pdf` to visually compare the generated PDF with -the checked-in example. The toolchain versions are pinned in: - -* `rfd-processor/Gemfile` -* `rfd-processor/Gemfile.lock` -* `rfd-processor/package.json` -* `rfd-processor/package-lock.json` +The PDF renderer shells out to `asciidoctor-pdf` and `mmdc`. The toolchain +versions are pinned in: `rfd-processor/Gemfile` and `rfd-processor/package.json`. Install the Ruby dependencies: @@ -77,8 +71,24 @@ On macOS, use `brew install ruby@3.2` and then install the PDF toolchain through Bundler and npm as shown above. If you previously installed `asciidoctor` via Homebrew, uninstall with `brew uninstall asciidoctor`. -Install the visual PDF comparison tool with `brew install diff-pdf` on macOS or -`apt-get install diff-pdf-wx` on Ubuntu. + +Render an RFD directory with: + +```sh +PATH="$PWD/rfd-processor/.bundle/bin:$PWD/rfd-processor/node_modules/.bin:$PATH" \ + cargo run -p rfd-processor -- pdf rfd-processor/tests/rfd_9999 -o /tmp/rfd_9999.pdf +``` + +On macOS with Homebrew Ruby: + +```sh +PATH="/opt/homebrew/opt/ruby@3.2/bin:$PWD/rfd-processor/.bundle/bin:$PWD/rfd-processor/node_modules/.bin:$PATH" \ + cargo run -p rfd-processor -- pdf rfd-processor/tests/rfd_9999 -o /tmp/rfd_9999.pdf +``` + +CI renders `rfd-processor/tests/rfd_9999` on Linux and compares the checksum +against `rfd-processor/tests/rfd_9999.pdf`. If the checksum changes, CI uploads +the generated PDF and a `diff-pdf` visual diff artifact. ## Background diff --git a/rfd-processor/src/content/asciidoc.rs b/rfd-processor/src/content/asciidoc.rs index d4b516fe..722e7da8 100644 --- a/rfd-processor/src/content/asciidoc.rs +++ b/rfd-processor/src/content/asciidoc.rs @@ -3,17 +3,28 @@ // file, You can obtain one at https://mozilla.org/MPL/2.0/. use async_trait::async_trait; -use rfd_data::content::{RfdAsciidoc, RfdDocument}; -use std::{env, path::PathBuf, process::Command}; +use rfd_data::content::{RfdAsciidoc, RfdContentError, RfdDocument}; +use std::{path::PathBuf, process::Command}; use crate::util::write_file; use super::{RenderableRfdError, RenderedPdf, RfdOutputError, RfdRenderedFormat}; +pub(crate) async fn render_pdf_from_dir( + content_dir: PathBuf, +) -> Result { + let content_dir = content_dir.canonicalize()?; + let contents = std::fs::read_to_string(content_dir.join("contents.adoc"))?; + let content = RfdAsciidoc::new(contents) + .map_err(RfdContentError::Asciidoc) + .map_err(RenderableRfdError::InvalidRfdContent)?; + + render_pdf(&content, content_dir).await +} + async fn render_pdf( content: &RfdAsciidoc<'_>, content_dir: PathBuf, - path_prefixes: &[PathBuf], ) -> Result { let file_path = content_dir.join("contents.adoc"); @@ -36,17 +47,6 @@ async fn render_pdf( file_path.to_str().unwrap(), ]); - if !path_prefixes.is_empty() { - let path = env::join_paths( - path_prefixes - .iter() - .cloned() - .chain(env::split_paths(&env::var_os("PATH").unwrap_or_default())), - ) - .expect("failed to construct PATH"); - command.env("PATH", path); - } - let cmd_output = tokio::task::spawn_blocking(move || { tracing::info!(?file_path, "Shelling out to asciidoctor"); @@ -62,10 +62,16 @@ async fn render_pdf( out }) - .await??; + .await?; tracing::info!("Completed asciidoc rendering"); + let cmd_output = cmd_output.map_err(|error| RenderableRfdError::ProcessStart { + command: "asciidoctor-pdf", + path: std::env::var("PATH").ok(), + error, + })?; + if cmd_output.status.success() { Ok(cmd_output.stdout.into()) } else { @@ -78,230 +84,6 @@ async fn render_pdf( #[async_trait] impl<'a> RfdRenderedFormat> for RenderedPdf { async fn render(content: &RfdAsciidoc, content_dir: PathBuf) -> Result { - render_pdf(content, content_dir, &[]).await - } -} - -#[cfg(test)] -mod tests { - use super::*; - use std::{fs, path::Path}; - use uuid::Uuid; - - const EXAMPLE_RFD: &str = include_str!("../../tests/content/example.adoc"); - const EXAMPLE_CSV: &str = include_str!("../../tests/content/example.csv"); - const OXIDE_LOGO: &str = include_str!("../../tests/content/oxide-logo.svg"); - - struct RenderDir { - path: PathBuf, - } - - impl RenderDir { - fn new() -> Self { - let path = std::env::temp_dir().join(format!( - "rfd-processor-asciidoc-to-pdf-test-{}", - Uuid::new_v4() - )); - fs::create_dir_all(&path).expect("failed to create render test directory"); - Self { path } - } - - fn path(&self) -> &Path { - &self.path - } - - fn write_mmdc_wrapper( - &self, - path_prefixes: &[PathBuf], - mermaid_image_path: &Path, - ) -> PathBuf { - let wrapper_dir = self.path.join("mmdc-bin"); - fs::create_dir_all(&wrapper_dir).expect("failed to create mmdc wrapper directory"); - - let real_mmdc = find_executable("mmdc", path_prefixes); - let puppeteer_config = wrapper_dir.join("puppeteer.json"); - fs::write( - &puppeteer_config, - r#"{"args":["--no-sandbox","--disable-setuid-sandbox"]}"#, - ) - .expect("failed to write puppeteer config"); - - let wrapper = wrapper_dir.join("mmdc"); - fs::write( - &wrapper, - format!( - r#"#!/usr/bin/env bash -real_mmdc={real_mmdc} -puppeteer_config={puppeteer_config} -mermaid_image={mermaid_image} - -output_file="" -previous_arg="" -for arg in "$@"; do - if [[ "$previous_arg" == "-o" || "$previous_arg" == "--output" ]]; then - output_file="$arg" - break - fi - - if [[ "$arg" == "-o" || "$arg" == "--output" ]]; then - previous_arg="$arg" - continue - fi - - case "$arg" in - -o*) - output_file="${{arg#-o}}" - break - ;; - --output=*) - output_file="${{arg#--output=}}" - break - ;; - esac - - previous_arg="$arg" -done - -"$real_mmdc" --puppeteerConfigFile "$puppeteer_config" "$@" -status="$?" -if [[ "$status" == "0" && -n "$output_file" && -f "$output_file" ]]; then - cp "$output_file" "$mermaid_image" -fi -exit "$status" -"#, - real_mmdc = shell_quote(real_mmdc.as_path()), - puppeteer_config = shell_quote(puppeteer_config.as_path()), - mermaid_image = shell_quote(mermaid_image_path), - ), - ) - .expect("failed to write mmdc wrapper"); - - #[cfg(unix)] - { - use std::os::unix::fs::PermissionsExt; - - let mut permissions = fs::metadata(&wrapper) - .expect("failed to stat mmdc wrapper") - .permissions(); - permissions.set_mode(0o755); - fs::set_permissions(&wrapper, permissions) - .expect("failed to make mmdc wrapper executable"); - } - - wrapper_dir - } - } - - impl Drop for RenderDir { - fn drop(&mut self) { - let _ = fs::remove_dir_all(&self.path); - } - } - - #[tokio::test] - async fn render_pdf_example() { - let render_dir = RenderDir::new(); - let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR")); - let rendered_pdf_path = manifest_dir.join("tests/content/example-rendered.pdf"); - let diff_pdf_path = manifest_dir.join("tests/content/example-diff.pdf"); - let mermaid_image_path = manifest_dir.join("tests/content/example-mermaid-rendered.png"); - let _ = fs::remove_file(&diff_pdf_path); - let _ = fs::remove_file(&mermaid_image_path); - - fs::write(render_dir.path().join("example.csv"), EXAMPLE_CSV) - .expect("failed to write CSV include"); - fs::write(render_dir.path().join("oxide-logo.svg"), OXIDE_LOGO) - .expect("failed to write supporting image"); - let mut path_prefixes = test_toolchain_path_prefixes(); - let mmdc_path_prefix = render_dir.write_mmdc_wrapper(&path_prefixes, &mermaid_image_path); - path_prefixes.insert(0, mmdc_path_prefix); - - let content = RfdAsciidoc::new(EXAMPLE_RFD).expect("example RFD should parse"); - let pdf = render_pdf(&content, render_dir.path().to_path_buf(), &path_prefixes) - .await - .expect("example RFD should render to PDF"); - let pdf = pdf.into_inner(); - - fs::write(&rendered_pdf_path, &pdf).expect("failed to write rendered example PDF"); - - assert!(pdf.starts_with(b"%PDF-"), "rendered bytes should be a PDF"); - assert!( - mermaid_image_path.is_file(), - "rendering should write tests/content/example-mermaid-rendered.png" - ); - let repo_pdf_path = manifest_dir.join("tests/content/example-repo.pdf"); - match fs::read(&repo_pdf_path) { - Ok(_) => {} - Err(err) if err.kind() == std::io::ErrorKind::NotFound => { - fs::write(&repo_pdf_path, &pdf).expect("failed to write repo example PDF"); - return; - } - Err(err) => panic!("failed to read repo example PDF: {err}"), - } - - let diff_output = Command::new("diff-pdf") - .arg("--output-diff") - .arg(&diff_pdf_path) - .arg(&repo_pdf_path) - .arg(&rendered_pdf_path) - .output() - .expect("failed to run diff-pdf; install it with `brew install diff-pdf` or `apt-get install diff-pdf-wx`"); - - if !diff_output.status.success() { - panic!( - "rendered PDF should visually match tests/content/example-repo.pdf; wrote actual PDF to tests/content/example-rendered.pdf and visual diff to tests/content/example-diff.pdf\nstdout:\n{}\nstderr:\n{}", - String::from_utf8_lossy(&diff_output.stdout), - String::from_utf8_lossy(&diff_output.stderr), - ); - } - - let _ = fs::remove_file(&diff_pdf_path); - } - - fn find_executable(name: &str, path_prefixes: &[PathBuf]) -> PathBuf { - path_prefixes - .iter() - .cloned() - .chain(std::env::split_paths( - &std::env::var_os("PATH").unwrap_or_default(), - )) - .map(|path| path.join(name)) - .find(|path| path.is_file()) - .unwrap_or_else(|| panic!("failed to find {name} in PATH")) - } - - fn test_toolchain_path_prefixes() -> Vec { - let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR")); - let mut paths = Vec::new(); - - // Bundler binstubs use `#!/usr/bin/env ruby`; put Homebrew Ruby ahead of - // macOS system Ruby when it is available. - if cfg!(target_os = "macos") { - for homebrew_ruby in [ - PathBuf::from("/opt/homebrew/opt/ruby@3.2/bin"), - PathBuf::from("/opt/homebrew/opt/ruby/bin"), - ] { - if homebrew_ruby.is_dir() { - paths.push(homebrew_ruby); - break; - } - } - } - - paths.extend( - [ - manifest_dir.join(".bundle/bin"), - manifest_dir.join("node_modules/.bin"), - ] - .into_iter() - .filter(|path| path.is_dir()), - ); - - paths - } - - fn shell_quote(path: &Path) -> String { - let path = path.to_string_lossy(); - format!("'{}'", path.replace('\'', r#"'\''"#)) + render_pdf(content, content_dir).await } } diff --git a/rfd-processor/src/content/mod.rs b/rfd-processor/src/content/mod.rs index a66b0752..b4b7448e 100644 --- a/rfd-processor/src/content/mod.rs +++ b/rfd-processor/src/content/mod.rs @@ -26,6 +26,8 @@ use crate::{ mod asciidoc; +pub(crate) use asciidoc::render_pdf_from_dir; + #[derive(Debug, Error)] pub enum RenderableRfdError { #[error("Failed to decode content file {0}")] @@ -42,6 +44,13 @@ pub enum RenderableRfdError { File(#[from] FileIoError), #[error("Failed to parse content")] ParserFailed(Result), + #[error("Failed to run `{command}`. Is it installed and on PATH? PATH={path:?}")] + ProcessStart { + command: &'static str, + path: Option, + #[source] + error: io::Error, + }, #[error("Failed to run output generator to completion {0}")] TaskFailure(#[from] JoinError), } diff --git a/rfd-processor/src/main.rs b/rfd-processor/src/main.rs index 3119ee9f..97991470 100644 --- a/rfd-processor/src/main.rs +++ b/rfd-processor/src/main.rs @@ -5,7 +5,7 @@ use config::{Config, ConfigError, Environment, File}; use processor::{processor, JobError}; use serde::{Deserialize, Serialize}; -use std::sync::Arc; +use std::{io, path::PathBuf, sync::Arc}; use thiserror::Error; use tokio::select; use tracing_appender::non_blocking::NonBlocking; @@ -136,10 +136,14 @@ async fn main() -> Result<(), Box> { .install_default() .expect("Failed to install rustls crypto provider"); - let mut args = std::env::args(); - let _ = args.next(); - let config_path = args.next(); + let mut args = std::env::args().skip(1); + let first_arg = args.next(); + if first_arg.as_deref() == Some("pdf") { + return render_pdf_command(args).await; + } + + let config_path = first_arg; let config = AppConfig::new(config_path.map(|path| vec![path]))?; let (writer, _guard) = if let Some(log_directory) = &config.log_directory { @@ -189,3 +193,38 @@ async fn main() -> Result<(), Box> { Ok(error?) } + +async fn render_pdf_command( + mut args: impl Iterator, +) -> Result<(), Box> { + let directory = args + .next() + .ok_or_else(|| invalid_pdf_command("missing directory"))?; + + if args.next().as_deref() != Some("-o") { + return Err(invalid_pdf_command("missing -o filename.pdf").into()); + } + + let output = args + .next() + .ok_or_else(|| invalid_pdf_command("missing output filename"))?; + + if args.next().is_some() { + return Err(invalid_pdf_command("unexpected extra argument").into()); + } + + let pdf = content::render_pdf_from_dir(PathBuf::from(directory)).await?; + std::fs::write(output, pdf.into_inner())?; + + Ok(()) +} + +fn invalid_pdf_command(message: &str) -> io::Error { + io::Error::new( + io::ErrorKind::InvalidInput, + format!( + "{}; usage: rfd-processor pdf -o filename.pdf", + message + ), + ) +} diff --git a/rfd-processor/tests/.gitignore b/rfd-processor/tests/.gitignore new file mode 100644 index 00000000..bf60c38d --- /dev/null +++ b/rfd-processor/tests/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +rfd_9999-generated.pdf +rfd_9999-diff.pdf diff --git a/rfd-processor/tests/content/.gitignore b/rfd-processor/tests/content/.gitignore deleted file mode 100644 index 43403443..00000000 --- a/rfd-processor/tests/content/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -example-local.pdf -example-rendered.pdf -example-diff.pdf -example-mermaid-rendered.png diff --git a/rfd-processor/tests/content/example-repo.pdf b/rfd-processor/tests/rfd_9999.pdf similarity index 100% rename from rfd-processor/tests/content/example-repo.pdf rename to rfd-processor/tests/rfd_9999.pdf diff --git a/rfd-processor/tests/content/example.adoc b/rfd-processor/tests/rfd_9999/contents.adoc similarity index 98% rename from rfd-processor/tests/content/example.adoc rename to rfd-processor/tests/rfd_9999/contents.adoc index 6101ca7a..9652541b 100644 --- a/rfd-processor/tests/content/example.adoc +++ b/rfd-processor/tests/rfd_9999/contents.adoc @@ -9,7 +9,7 @@ :toc: left :toclevels: 3 -= RFD 4242 Representative Asciidoc PDF Fixture += RFD 9999 Representative Asciidoc PDF Fixture Test Author toc::[] diff --git a/rfd-processor/tests/content/example.csv b/rfd-processor/tests/rfd_9999/example.csv similarity index 100% rename from rfd-processor/tests/content/example.csv rename to rfd-processor/tests/rfd_9999/example.csv diff --git a/rfd-processor/tests/content/oxide-logo.svg b/rfd-processor/tests/rfd_9999/oxide-logo.svg similarity index 100% rename from rfd-processor/tests/content/oxide-logo.svg rename to rfd-processor/tests/rfd_9999/oxide-logo.svg From 569d5e5d03d26042dff26f17b6a5bd53d63d5dbf Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 17:39:01 -0400 Subject: [PATCH 15/20] more debug --- .github/workflows/test.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 26612486..957da298 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -41,15 +41,13 @@ jobs: bundle binstubs asciidoctor asciidoctor-pdf npm ci npm run install:chrome - mkdir -p .ci-bin - printf '%s\n' '{"args":["--no-sandbox","--disable-setuid-sandbox"]}' > .ci-bin/puppeteer.json + mkdir -p .bundle/bin + printf '%s\n' '{"args":["--no-sandbox","--disable-setuid-sandbox"]}' > .bundle/bin/puppeteer.json printf '%s\n' '#!/usr/bin/env bash' \ - "exec '$PWD/node_modules/.bin/mmdc' --puppeteerConfigFile '$PWD/.ci-bin/puppeteer.json' \"\$@\"" \ - > .ci-bin/mmdc - chmod +x .ci-bin/mmdc + "exec '$PWD/node_modules/.bin/mmdc' --puppeteerConfigFile '$PWD/.bundle/bin/puppeteer.json' \"\$@\"" \ + > .bundle/bin/mmdc + chmod +x .bundle/bin/mmdc echo "$PWD/.bundle/bin" >> "$GITHUB_PATH" - echo "$PWD/.ci-bin" >> "$GITHUB_PATH" - echo "$PWD/node_modules/.bin" >> "$GITHUB_PATH" - name: Report versions run: | asciidoctor --version From 7485d4ec4bd1ea35fd749a5d77e5c47143e609c4 Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 17:45:11 -0400 Subject: [PATCH 16/20] Update golden document --- rfd-processor/tests/rfd_9999.pdf | Bin 178950 -> 178456 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rfd-processor/tests/rfd_9999.pdf b/rfd-processor/tests/rfd_9999.pdf index c58a46b8afe190563519798a542543bcbc1f827b..d4581b3e3e59004f4e0878fca467a60b7176843b 100644 GIT binary patch delta 52557 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 delta 53070 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 T3Xn7m0YRZ~>FGt}L~;KM-oAy4 From a711cff3c85a17da931d74b14038929b88ca7f3b Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 18:16:13 -0400 Subject: [PATCH 17/20] refinements --- .gitattributes | 1 + .github/workflows/test.yml | 7 ++++--- README.md | 1 - rfd-processor/package.json | 3 --- rfd-processor/src/content/asciidoc.rs | 19 +------------------ rfd-processor/tests/.gitignore | 1 - 6 files changed, 6 insertions(+), 26 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..d72fd520 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.pdf binary diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 957da298..d25453d0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,6 +10,9 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.ref_name == 'main' && github.sha || 'anysha' }} cancel-in-progress: true +permissions: + contents: read + jobs: test: runs-on: ubuntu-24.04 @@ -40,8 +43,6 @@ jobs: bundle config set bin .bundle/bin bundle binstubs asciidoctor asciidoctor-pdf npm ci - npm run install:chrome - mkdir -p .bundle/bin printf '%s\n' '{"args":["--no-sandbox","--disable-setuid-sandbox"]}' > .bundle/bin/puppeteer.json printf '%s\n' '#!/usr/bin/env bash' \ "exec '$PWD/node_modules/.bin/mmdc' --puppeteerConfigFile '$PWD/.bundle/bin/puppeteer.json' \"\$@\"" \ @@ -68,7 +69,7 @@ jobs: generated_pdf="rfd-processor/tests/rfd_9999-generated.pdf" diff_pdf="rfd-processor/tests/rfd_9999-diff.pdf" - cargo run -p rfd-processor -- pdf rfd-processor/tests/rfd_9999 -o "$generated_pdf" + cargo run --profile test -p rfd-processor -- pdf rfd-processor/tests/rfd_9999 -o "$generated_pdf" expected_checksum="$(sha256sum "$expected_pdf" | cut -d ' ' -f 1)" generated_checksum="$(sha256sum "$generated_pdf" | cut -d ' ' -f 1)" diff --git a/README.md b/README.md index b060b0ad..7bebcd99 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,6 @@ Install the Node dependencies and Chromium runtime used by Mermaid: ```sh cd rfd-processor npm ci -npm run install:chrome export PATH="$PWD/node_modules/.bin:$PATH" ``` diff --git a/rfd-processor/package.json b/rfd-processor/package.json index 64456a1a..c2e856cc 100644 --- a/rfd-processor/package.json +++ b/rfd-processor/package.json @@ -2,9 +2,6 @@ "name": "@oxide/rfd-processor-pdf-toolchain", "private": true, "description": "Node dependencies for rendering RFD PDFs", - "scripts": { - "install:chrome": "puppeteer browsers install chrome-headless-shell" - }, "dependencies": { "@mermaid-js/mermaid-cli": "11.16.0" } diff --git a/rfd-processor/src/content/asciidoc.rs b/rfd-processor/src/content/asciidoc.rs index 722e7da8..d2225c67 100644 --- a/rfd-processor/src/content/asciidoc.rs +++ b/rfd-processor/src/content/asciidoc.rs @@ -47,24 +47,7 @@ async fn render_pdf( file_path.to_str().unwrap(), ]); - let cmd_output = tokio::task::spawn_blocking(move || { - tracing::info!(?file_path, "Shelling out to asciidoctor"); - - // Verify the expected resources exist - tracing::info!(?file_path, exists = file_path.exists(), "Check document"); - - let out = command.output(); - - match &out { - Ok(_) => tracing::info!(?file_path, "Command succeeded"), - Err(err) => tracing::info!(?file_path, ?err, "Command failed"), - }; - - out - }) - .await?; - - tracing::info!("Completed asciidoc rendering"); + let cmd_output = tokio::task::spawn_blocking(move || command.output()).await?; let cmd_output = cmd_output.map_err(|error| RenderableRfdError::ProcessStart { command: "asciidoctor-pdf", diff --git a/rfd-processor/tests/.gitignore b/rfd-processor/tests/.gitignore index bf60c38d..655aa25d 100644 --- a/rfd-processor/tests/.gitignore +++ b/rfd-processor/tests/.gitignore @@ -1,3 +1,2 @@ -.DS_Store rfd_9999-generated.pdf rfd_9999-diff.pdf From 55b6f4aa4cf2a84ff27ce8afa3d15e39ab5a75a7 Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Tue, 14 Jul 2026 18:43:23 -0400 Subject: [PATCH 18/20] Less deprecated stuff --- .github/workflows/test.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d25453d0..d5a3bdbe 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,7 +43,7 @@ jobs: bundle config set bin .bundle/bin bundle binstubs asciidoctor asciidoctor-pdf npm ci - printf '%s\n' '{"args":["--no-sandbox","--disable-setuid-sandbox"]}' > .bundle/bin/puppeteer.json + printf '%s\n' '{"args":["--no-sandbox"]}' > .bundle/bin/puppeteer.json printf '%s\n' '#!/usr/bin/env bash' \ "exec '$PWD/node_modules/.bin/mmdc' --puppeteerConfigFile '$PWD/.bundle/bin/puppeteer.json' \"\$@\"" \ > .bundle/bin/mmdc @@ -76,8 +76,6 @@ jobs: if [[ "$expected_checksum" != "$generated_checksum" ]]; then echo "Rendered PDF does not match checked-in RFD 9999 PDF" - echo "expected: $expected_checksum $expected_pdf" - echo "generated: $generated_checksum $generated_pdf" sudo apt-get update sudo apt-get install -y diff-pdf-wx xvfb xvfb-run -a diff-pdf --output-diff "$diff_pdf" "$expected_pdf" "$generated_pdf" || true From 9ae9f7bd977d1e753f80162df9107385cf4511d7 Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Wed, 15 Jul 2026 09:26:30 -0400 Subject: [PATCH 19/20] Back out the dependency upgrades --- rfd-processor/Gemfile | 6 +- rfd-processor/Gemfile.lock | 31 +- rfd-processor/package-lock.json | 1948 +++++++++++++++++-------------- rfd-processor/package.json | 2 +- 4 files changed, 1061 insertions(+), 926 deletions(-) diff --git a/rfd-processor/Gemfile b/rfd-processor/Gemfile index 2fafdb93..a2a033c9 100644 --- a/rfd-processor/Gemfile +++ b/rfd-processor/Gemfile @@ -1,8 +1,8 @@ source "https://rubygems.org" -gem "asciidoctor", "2.0.26" +gem "asciidoctor", "2.0.20" gem "asciidoctor-mermaid", "0.4.1" -gem "asciidoctor-pdf", "2.3.24" +gem "asciidoctor-pdf", "2.3.2" gem "base64", "0.3.0" gem "logger", "1.7.0" -gem "rouge", "5.0.0" +gem "rouge", "4.5.1" diff --git a/rfd-processor/Gemfile.lock b/rfd-processor/Gemfile.lock index fe8cfd14..702bdc0b 100644 --- a/rfd-processor/Gemfile.lock +++ b/rfd-processor/Gemfile.lock @@ -5,19 +5,18 @@ GEM addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) afm (1.0.0) - asciidoctor (2.0.26) + asciidoctor (2.0.20) asciidoctor-mermaid (0.4.1) - asciidoctor-pdf (2.3.24) + asciidoctor-pdf (2.3.2) asciidoctor (~> 2.0) - concurrent-ruby (~> 1.3) + concurrent-ruby (~> 1.1) matrix (~> 0.4) prawn (~> 2.4.0) prawn-icon (~> 3.0.0) - prawn-svg (~> 0.34.0) + prawn-svg (~> 0.32.0) prawn-table (~> 0.2.0) prawn-templates (~> 0.1.0) treetop (~> 1.6.0) - ttfunk (~> 1.7.0) base64 (0.3.0) concurrent-ruby (1.3.7) css_parser (1.22.0) @@ -38,9 +37,8 @@ GEM ttfunk (~> 1.7) prawn-icon (3.0.0) prawn (>= 1.1.0, < 3.0.0) - prawn-svg (0.34.2) + prawn-svg (0.32.0) css_parser (~> 1.6) - matrix (~> 0.4.2) prawn (>= 0.11.1, < 3) rexml (~> 3.2) prawn-table (0.2.2) @@ -50,10 +48,8 @@ GEM prawn (~> 2.2) public_suffix (7.0.5) rexml (3.4.4) - rouge (5.0.0) - strscan (~> 3.1) + rouge (4.5.1) ruby-rc4 (0.1.5) - strscan (3.1.8) treetop (1.6.18) polyglot (~> 0.3) ttfunk (1.7.0) @@ -63,20 +59,20 @@ PLATFORMS ruby DEPENDENCIES - asciidoctor (= 2.0.26) + asciidoctor (= 2.0.20) asciidoctor-mermaid (= 0.4.1) - asciidoctor-pdf (= 2.3.24) + asciidoctor-pdf (= 2.3.2) base64 (= 0.3.0) logger (= 1.7.0) - rouge (= 5.0.0) + rouge (= 4.5.1) CHECKSUMS Ascii85 (2.0.1) sha256=15cb5d941808543cbb9e7e6aea3c8ec3877f154c3461e8b3673e97f7ecedbe5a addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af afm (1.0.0) sha256=5bd4d6f6241e7014ef090985ec6f4c3e9745f6de0828ddd58bc1efdd138f4545 - asciidoctor (2.0.26) sha256=16e3accf1fc206bbd6335848649d7fd65f31d2daa60d85af13d47a8ee4b071c1 + asciidoctor (2.0.20) sha256=835eabd445e4ae88f56a5f4e07593c3612b2be72eb661c612c3a8e1e17c57479 asciidoctor-mermaid (0.4.1) sha256=51146b0df171d112c118df9236c062f38a5da49afd2086baf21a3ab95343a46c - asciidoctor-pdf (2.3.24) sha256=3076e55132d43b21de93cd7c8149a8c1b2e4afc07e79855fb6b795a0ef20b051 + asciidoctor-pdf (2.3.2) sha256=bb83308a68ede1c00a12b9110f9255f09e75361bd74e218be584f49c6905bc9a base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b bundler (4.0.11) sha256=5bcec0fb78302e48d02ee46f10ee6e6942be647ba5b44a6d1ddfda9a240ce785 concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0 @@ -89,14 +85,13 @@ CHECKSUMS polyglot (0.3.5) sha256=59d66ef5e3c166431c39cb8b7c1d02af419051352f27912f6a43981b3def16af prawn (2.4.0) sha256=82062744f7126c2d77501da253a154271790254dfa8c309b8e52e79bc5de2abd prawn-icon (3.0.0) sha256=dac8d481dee0f60a769c0cab0fd1baec7351b4806bf9ba959cd6c65f6694b6f5 - prawn-svg (0.34.2) sha256=afff79d332940f6d59604d0b2810f54d46e9335533a2aa4e892fb7d514777a90 + prawn-svg (0.32.0) sha256=66d1a20a93282528a25d5ad9e0db422dad4804a34e0892561b64c3930fff7d55 prawn-table (0.2.2) sha256=336d46e39e003f77bf973337a958af6a68300b941c85cb22288872dc2b36addb prawn-templates (0.1.2) sha256=117aa03db570147cb86fcd7de4fd896994f702eada1d699848a9529a87cd31f1 public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623 rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142 - rouge (5.0.0) sha256=e2de9bba2f9cb88f8a73bca3643b560b2b398f32f91bf716f584477bc0175ebc + rouge (4.5.1) sha256=2ac81c6dee7019bbc6600d4c2d641d730d65c165941400ebd924259067e690dd ruby-rc4 (0.1.5) sha256=00cc40a39d20b53f5459e7ea006a92cf584e9bc275e2a6f7aa1515510e896c03 - strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e treetop (1.6.18) sha256=a3043f32f1c652aa2abdf3a3848edb2d2f69897257af2675516ac61355c183da ttfunk (1.7.0) sha256=2370ba484b1891c70bdcafd3448cfd82a32dd794802d81d720a64c15d3ef2a96 diff --git a/rfd-processor/package-lock.json b/rfd-processor/package-lock.json index ea2594ed..cec57a12 100644 --- a/rfd-processor/package-lock.json +++ b/rfd-processor/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "@oxide/rfd-processor-pdf-toolchain", "dependencies": { - "@mermaid-js/mermaid-cli": "11.16.0" + "@mermaid-js/mermaid-cli": "11.4.0" } }, "node_modules/@antfu/install-pkg": { @@ -22,126 +22,42 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@braintree/sanitize-url": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz", - "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==", - "license": "MIT" - }, - "node_modules/@chevrotain/types": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz", - "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==", - "license": "Apache-2.0" - }, - "node_modules/@floating-ui/core": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz", - "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.12" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz", - "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==", - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.8.0", - "@floating-ui/utils": "^0.2.12" - } - }, - "node_modules/@floating-ui/react": { - "version": "0.27.20", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.20.tgz", - "integrity": "sha512-CMqMy7OaXl9W0eq1Uy7L7i2Y/anPvHmFmESd2CEw0t5YvZhcVCeo4MBevAmswRllX7Y2dEidA4ozGPunLSTQpw==", - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.1.9", - "@floating-ui/utils": "^0.2.12", - "tabbable": "^6.0.0" - }, - "peerDependencies": { - "react": ">=17.0.0", - "react-dom": ">=17.0.0" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.9.tgz", - "integrity": "sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==", + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "license": "MIT", + "peer": true, "dependencies": { - "@floating-ui/dom": "^1.8.0" + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz", - "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==", - "license": "MIT" - }, - "node_modules/@fortawesome/fontawesome-free": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-7.3.0.tgz", - "integrity": "sha512-Yw4Qa43P6e4Xwh0TwEUkHQNRJInWaqIBo73VJmns3j2AIlZPAvUcR4yGIxCPqPRCgyJ5KIVIalF/I1GxhZ/Kgw==", - "license": "(CC-BY-4.0 AND OFL-1.1 AND MIT)", "engines": { - "node": ">=6" + "node": ">=6.9.0" } }, - "node_modules/@headlessui/react": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.10.tgz", - "integrity": "sha512-5pVLNK9wlpxTUTy9GpgbX/SdcRh+HBnPktjM2wbiLTH4p+2EPHBO1aoSryUCuKUIItdDWO9ITlhUL8UnUN/oIA==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "license": "MIT", - "dependencies": { - "@floating-ui/react": "^0.26.16", - "@react-aria/focus": "^3.20.2", - "@react-aria/interactions": "^3.25.0", - "@tanstack/react-virtual": "^3.13.9", - "use-sync-external-store": "^1.5.0" - }, + "peer": true, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^18 || ^19 || ^19.0.0-rc", - "react-dom": "^18 || ^19 || ^19.0.0-rc" + "node": ">=6.9.0" } }, - "node_modules/@headlessui/react/node_modules/@floating-ui/react": { - "version": "0.26.28", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", - "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.1.2", - "@floating-ui/utils": "^0.2.8", - "tabbable": "^6.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } + "node_modules/@braintree/sanitize-url": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz", + "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==", + "license": "MIT" }, - "node_modules/@headlessui/tailwindcss": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@headlessui/tailwindcss/-/tailwindcss-0.2.2.tgz", - "integrity": "sha512-xNe42KjdyA4kfUKLLPGzME9zkH7Q3rOZ5huFihWNWOQFxnItxPB3/67yBI8/qBfY8nwBRx5GHn4VprsoluVMGw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "tailwindcss": "^3.0 || ^4.0" - } + "node_modules/@chevrotain/types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz", + "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==", + "license": "Apache-2.0" }, "node_modules/@iconify/types": { "version": "2.0.0", @@ -160,74 +76,15 @@ "import-meta-resolve": "^4.2.0" } }, - "node_modules/@internationalized/date": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.2.tgz", - "integrity": "sha512-FY1Y+H64NDs+HAF6omlnWxm3mEpfgaCSWtL5l551ZZfImA+kGjPFgrnJrGjH6lfmLL0g8Z/mBu1R3kufeCp6Jw==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@internationalized/number": { - "version": "3.6.7", - "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.7.tgz", - "integrity": "sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@internationalized/string": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.9.tgz", - "integrity": "sha512-kzP/M/mbQxODlmOt4bIQZ2SBVUWUSqMLXooXixnX7noche8WHaQcA+nwFN1K2KCF/cp+LDUhcJsCicwkvhD1pg==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@mermaid-js/layout-elk": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@mermaid-js/layout-elk/-/layout-elk-0.2.2.tgz", - "integrity": "sha512-vnH3gtqfhyBiRVKNpT8iDENTw18q/OF0GF/SfYfHN43KZpu+6eZDEOMHTfNYAkpmUWJNgtRQFIS6BTc7vH/DYQ==", - "license": "MIT", - "dependencies": { - "d3": "^7.9.0", - "elkjs": "^0.9.3" - }, - "peerDependencies": { - "mermaid": "^11.0.2" - } - }, - "node_modules/@mermaid-js/layout-tidy-tree": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@mermaid-js/layout-tidy-tree/-/layout-tidy-tree-0.2.2.tgz", - "integrity": "sha512-8RmjDXjKJBxqTS1mICStm8zWRM45fSzs0SOrkp28+KsOGS2YEMFMVTwwRU8CsC6M1L+pDYZVjf1m9AC1c9Wndg==", - "license": "MIT", - "optional": true, - "dependencies": { - "d3": "^7.9.0" - }, - "peerDependencies": { - "mermaid": "^11.0.2" - } - }, "node_modules/@mermaid-js/mermaid-cli": { - "version": "11.16.0", - "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-11.16.0.tgz", - "integrity": "sha512-0InK2nbVIMtzVzCugmdvPkAuvS6wRUqU6Utntff1n8c7lgfRZAdhKY6PSKvcIK9nFmuOUzAgB5+x/XWcroZ7Zg==", + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-11.4.0.tgz", + "integrity": "sha512-NNLhoW4o9y3bYCd44f4Uk/APXRuq/qrtAet3oHXtVAqYiO6NlvYF/RdLW/pIQPljX+BQ/oXXotXHckmjgriWWQ==", "license": "MIT", "dependencies": { - "@fortawesome/fontawesome-free": "^6.0.0 || ^7.0.1", - "@mermaid-js/layout-elk": "^0.1.5 || ^0.2.0", - "@mermaid-js/mermaid-zenuml": "^0.2.0", "chalk": "^5.0.1", - "commander": "^13.1.0", - "import-meta-resolve": "^4.1.0", - "katex": "^0.16.25", - "mermaid": "^11.14.0", - "p-limit": "^6.2.0" + "commander": "^12.1.0", + "mermaid": "^11.0.2" }, "bin": { "mmdc": "src/cli.js" @@ -235,23 +92,8 @@ "engines": { "node": "^18.19 || >=20.0" }, - "optionalDependencies": { - "@mermaid-js/layout-tidy-tree": "^0.2.1" - }, "peerDependencies": { - "puppeteer": "^23 || ^24 || ^25" - } - }, - "node_modules/@mermaid-js/mermaid-zenuml": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-zenuml/-/mermaid-zenuml-0.2.3.tgz", - "integrity": "sha512-RGBtgL6fc+5Y2Jm9odOH9HRJ80BP4l6atBYnAK5bBzEowF0PU3UtvZRRcbFxImPGPuLIzqZq31ur8lVO0AoF3Q==", - "license": "MIT", - "dependencies": { - "@zenuml/core": "^3.47.0" - }, - "peerDependencies": { - "mermaid": "^10 || ^11" + "puppeteer": "^23" } }, "node_modules/@mermaid-js/parser": { @@ -263,373 +105,35 @@ "@chevrotain/types": "~11.1.2" } }, - "node_modules/@napi-rs/canvas": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.100.tgz", - "integrity": "sha512-xglYA6q3XO5P3BNJYxVZ1IV7DLVjp1Py6nwag88YntrS+3vKHyYcMqXVS4ZztJmwz2uGvz1FWhI/4LgbR5uQDA==", - "license": "MIT", - "optional": true, - "workspaces": [ - "e2e/*" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "optionalDependencies": { - "@napi-rs/canvas-android-arm64": "0.1.100", - "@napi-rs/canvas-darwin-arm64": "0.1.100", - "@napi-rs/canvas-darwin-x64": "0.1.100", - "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.100", - "@napi-rs/canvas-linux-arm64-gnu": "0.1.100", - "@napi-rs/canvas-linux-arm64-musl": "0.1.100", - "@napi-rs/canvas-linux-riscv64-gnu": "0.1.100", - "@napi-rs/canvas-linux-x64-gnu": "0.1.100", - "@napi-rs/canvas-linux-x64-musl": "0.1.100", - "@napi-rs/canvas-win32-arm64-msvc": "0.1.100", - "@napi-rs/canvas-win32-x64-msvc": "0.1.100" - } - }, - "node_modules/@napi-rs/canvas-android-arm64": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.100.tgz", - "integrity": "sha512-hjhCKhntPv9+t4ckHymdx0phYNcVW+GKQR6Lzw2zE+pOVjOplSmtx9nNNknTjbEDLcuLZqA1y8ufKg1XfgftzQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-darwin-arm64": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.100.tgz", - "integrity": "sha512-2PcswRaC7Ly645DGt88///zuFDhJxJYdKAs1uU3mfk1atYkXufgcgLfBpk6Tm12nCQBaNt1wpybuPZ4qOhTo8A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-darwin-x64": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.100.tgz", - "integrity": "sha512-ePNZtj7pNIva/siZMg+HmbeozkIjqUIYdoymH8HaA3qK7LfzFN4WMBM8G6HQ9ZC+H3+Dnn5pqtiXpgLykaPOhw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.100.tgz", - "integrity": "sha512-d5cDB48oWFGU8/XPhUOFAlySgb/VAu7D+s8fi55K1Pcfg8aPplHWqMgibhVLU8ky7Pyg/fuiVLz4Nf3JrSTuUA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-linux-arm64-gnu": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.100.tgz", - "integrity": "sha512-rDxgxRu69RvDlX/bh9o22DxLsGr8EqsNgotL9+RwQE1S0b0cqeatqsw6aW45mukm0B42DIAaAacKaYQ8cqS1nw==", - "cpu": [ - "arm64" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-linux-arm64-musl": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.100.tgz", - "integrity": "sha512-K3mDW66N+xT2/V439u1alFANiBUjdEx2gLiNYnCmUsva5jZMxWTjafBYwTzYK+EMFMHrUoabuU+T1BIP5CgbYQ==", - "cpu": [ - "arm64" - ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.100.tgz", - "integrity": "sha512-mooqUBTIsccZpnoQC4NgrC1v6C1vof39etLNMnBwCY+p0gajWJvAHLGQ6g/gGyS5YrpDW+GefSN4+Cvcr08UWw==", - "cpu": [ - "riscv64" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-linux-x64-gnu": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.100.tgz", - "integrity": "sha512-1eCvkDCazm7FFhsT7DfGOdSaHgZVK3bt/dSBl5EWHOWmnz+I7j8tPseJqqD81NF+MH21jKUK4wQSDjN0mdhnTg==", - "cpu": [ - "x64" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-linux-x64-musl": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.100.tgz", - "integrity": "sha512-20arT6lnI19S68qNlii73TSEDbECNgzMz2EpldC1V3mZFuRkeujXkcebRk0LRJe9SEUAooYiLokfMViY8IX7yA==", - "cpu": [ - "x64" - ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-win32-arm64-msvc": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.100.tgz", - "integrity": "sha512-DZFFT1wIAg37LJw37yhMRFfjATd3vTQzjZ1Yki8u2vhO6Hi5VE6BVaGQ1aaDu7xb4iMErz+9EOwjpS7xcxFeBw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-win32-x64-msvc": { - "version": "0.1.100", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.100.tgz", - "integrity": "sha512-MyT1j3mHC2+Lu4pBi9mKyMJhtP6U7k7EldY7sj/uS5gJA65gTXt8MefJQXLJo5d/vZbuWmfxzkEUNc/urV3pHA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, "node_modules/@puppeteer/browsers": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.0.6.tgz", - "integrity": "sha512-B/gKoqlFkzhvzsI6jo9K1cZz9o5ypviVv/xu8CwA4grZzyVwN+XfkT+tu8T1zrauuEXv6VhS2oGX+6NL95WcKA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.6.1.tgz", + "integrity": "sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==", "license": "Apache-2.0", "peer": true, "dependencies": { - "modern-tar": "^0.7.6", - "yargs": "^18.0.0" + "debug": "^4.4.0", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" }, "bin": { - "browsers": "lib/main-cli.js" + "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=22.12.0" - }, - "peerDependencies": { - "proxy-agent": ">=8.0.1", - "yauzl": "^2.10.0 || ^3.4.0" - }, - "peerDependenciesMeta": { - "proxy-agent": { - "optional": true - }, - "yauzl": { - "optional": true - } - } - }, - "node_modules/@react-aria/focus": { - "version": "3.22.1", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.22.1.tgz", - "integrity": "sha512-CPxtkyrBi/HYY5P3lE/57sQ6qfa0lN8E55TOm89H0kNGv0lKt+/0zP7lWERzBjRr5IxBVrQX4gFEowBN52LPaA==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/interactions": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.28.1.tgz", - "integrity": "sha512-Bqb+HrD5I5MHS2SKBhISYqo2SW8Y2dfzgF/Y1lIJq7xqLxheo9vzxPGEHhz+XzkgGfoqEJx8A6a3C7uiqS3HWA==", - "license": "Apache-2.0", - "dependencies": { - "@react-types/shared": "^3.34.0", - "@swc/helpers": "^0.5.0", - "react-aria": "^3.48.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/shared": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.36.0.tgz", - "integrity": "sha512-DkP/H0C2YjjS7gZWKNqOmU8a16qHPjQNdzMwmTq9SzplM6Iw0kVMTZ0OIoe6FOgGqa+FwMsE2QbPjh/n3g/jXQ==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@swc/helpers": { - "version": "0.5.23", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", - "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tanstack/react-virtual": { - "version": "3.14.6", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.14.6.tgz", - "integrity": "sha512-4+Uq8m0/gzO4kMCHUEpTtGX1RnONK0C+g88b2ltwPMWUBiaVarBuWKoPJaz7gj1cKCVRAdyu+U8GcKhwCc2beA==", - "license": "MIT", - "dependencies": { - "@tanstack/virtual-core": "3.17.4" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "node": ">=18" } }, - "node_modules/@tanstack/virtual-core": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.17.4.tgz", - "integrity": "sha512-nGm5KteqxasUdThLc2izl6dHUqLv0LQj7Nuyo5gYalTPf/U8a9ermvsl7reT+6ioBW1l8WfpP/mcU338nLXpqw==", + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } + "peer": true }, "node_modules/@types/d3": { "version": "7.4.3", @@ -890,6 +394,17 @@ "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", "license": "MIT" }, + "node_modules/@types/node": { + "version": "26.1.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz", + "integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "undici-types": "~8.3.0" + } + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -897,6 +412,17 @@ "license": "MIT", "optional": true }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@upsetjs/venn.js": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz", @@ -907,91 +433,236 @@ "d3-transition": "^3.0.1" } }, - "node_modules/@zenuml/core": { - "version": "3.50.1", - "resolved": "https://registry.npmjs.org/@zenuml/core/-/core-3.50.1.tgz", - "integrity": "sha512-Q18BXvIfhRuGw0JfO4e+pltG04Phhv2E7n35EWTNSZKKH/HEkyE4Sh7KERb9dqaOfjOdRdKvLG0YekjK3fcDXw==", - "license": "MIT", - "dependencies": { - "@floating-ui/react": "^0.27.16", - "@headlessui/react": "^2.2.9", - "@headlessui/tailwindcss": "^0.2.2", - "antlr4": "~4.11.0", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "color-string": "^2.1.4", - "dompurify": "^3.3.1", - "highlight.js": "^11.10.0", - "html-to-image": "^1.11.13", - "jotai": "^2.16.1", - "marked": "^4.3.0", - "react": "^19.2.3", - "react-dom": "^19.2.3", - "tailwind-merge": "^3.4.0" + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14" + } + }, + "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==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "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", + "peer": true, + "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", + "peer": true + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/b4a": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", + "license": "Apache-2.0", + "peer": true, + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/bare-events": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.9.1.tgz", + "integrity": "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==", + "license": "Apache-2.0", + "peer": true, + "peerDependencies": { + "bare-abort-controller": "*" }, - "bin": { - "zenuml": "dist/cli/zenuml.mjs" + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.4.tgz", + "integrity": "sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" }, "engines": { - "node": ">=20" + "bare": ">=1.16.0" }, - "optionalDependencies": { - "@napi-rs/canvas": "^0.1.97" + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.1.1.tgz", + "integrity": "sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/bare-stream": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.3.tgz", + "integrity": "sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "b4a": "^1.8.1", + "streamx": "^2.25.0", + "teex": "^1.0.1" }, "peerDependencies": { - "playwright-core": "1.57.0" + "bare-abort-controller": "*", + "bare-buffer": "*", + "bare-events": "*" }, "peerDependenciesMeta": { - "playwright-core": { + "bare-abort-controller": { + "optional": true + }, + "bare-buffer": { + "optional": true + }, + "bare-events": { "optional": true } } }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/bare-url": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.5.tgz", + "integrity": "sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "bare-path": "^3.0.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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", + "peer": true + }, + "node_modules/basic-ftp": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", "license": "MIT", "peer": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=10.0.0" } }, - "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==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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", "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/antlr4": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.11.0.tgz", - "integrity": "sha512-GUGlpE2JUjAN+G8G5vY+nOoeyNhHsXoIJwP1XF1oRw89vifA1K46T6SEkwLwr7drihN7I/lf0DIjKc4OZvBX8w==", - "license": "BSD-3-Clause", + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "peer": true, "engines": { - "node": ">=14" + "node": "*" } }, - "node_modules/aria-hidden": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "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", - "dependencies": { - "tslib": "^2.0.0" - }, + "peer": true, "engines": { - "node": ">=10" + "node": ">=6" } }, "node_modules/chalk": { @@ -1007,83 +678,58 @@ } }, "node_modules/chromium-bidi": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-16.0.1.tgz", - "integrity": "sha512-J63PGu/9PpeCwLIcKYyzWP6yaVL5pxuBc0shlYCYM8BaAkmlwiQboXO1iNbOgSDbVklEyYFfNEcHD8oOAWacUA==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.11.0.tgz", + "integrity": "sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==", "license": "Apache-2.0", "peer": true, "dependencies": { - "mitt": "^3.0.1", - "zod": "^3.24.1" - }, - "engines": { - "node": ">=20.19.0 <22.0.0 || >=22.12.0" + "mitt": "3.0.1", + "zod": "3.23.8" }, "peerDependencies": { "devtools-protocol": "*" } }, - "node_modules/class-variance-authority": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", - "license": "Apache-2.0", - "dependencies": { - "clsx": "^2.1.1" - }, - "funding": { - "url": "https://polar.sh/cva" - } - }, "node_modules/cliui": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", - "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "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==", "license": "ISC", "peer": true, "dependencies": { - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=20" + "node": ">=12" } }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "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", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=6" + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/color-string": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", - "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", + "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", - "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=18" - } + "peer": true }, "node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "license": "MIT", "engines": { "node": ">=18" @@ -1098,6 +744,33 @@ "layout-base": "^1.0.0" } }, + "node_modules/cosmiconfig": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz", + "integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==", + "license": "MIT", + "peer": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/cytoscape": { "version": "3.34.0", "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.34.0.tgz", @@ -1606,12 +1279,55 @@ "lodash-es": "^4.17.21" } }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/dayjs": { "version": "1.11.21", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", "license": "MIT" }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/delaunator": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz", @@ -1622,9 +1338,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1638949", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1638949.tgz", - "integrity": "sha512-mXwg4Fqnv0WR4iuAT/gYUmctNkjILwXFHyZ+m7Ty1dfr0ezZt2U3gnrrJTfRobJTHoXf+IbuFvFITzLrLFjwJA==", + "version": "0.0.1367902", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz", + "integrity": "sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==", "license": "BSD-3-Clause", "peer": true }, @@ -1637,19 +1353,43 @@ "@types/trusted-types": "^2.0.7" } }, - "node_modules/elkjs": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.9.3.tgz", - "integrity": "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==", - "license": "EPL-2.0" - }, "node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT", "peer": true }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "peer": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-toolkit": { "version": "1.49.0", "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.49.0.tgz", @@ -1670,6 +1410,110 @@ "node": ">=6" } }, + "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", + "peer": true, + "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/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", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "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", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "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", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT", + "peer": true + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "peer": true, + "dependencies": { + "pend": "~1.2.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", @@ -1680,39 +1524,70 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-east-asian-width": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", - "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "license": "MIT", "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "license": "MIT", + "peer": true, + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/hachure-fill": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", "license": "MIT" }, - "node_modules/highlight.js": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", - "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", - "license": "BSD-3-Clause", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, "engines": { - "node": ">=12.0.0" + "node": ">= 14" } }, - "node_modules/html-to-image": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.13.tgz", - "integrity": "sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==", - "license": "MIT" + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } }, "node_modules/iconv-lite": { "version": "0.6.3", @@ -1726,6 +1601,44 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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": "BSD-3-Clause", + "peer": true + }, + "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", + "peer": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/import-meta-resolve": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", @@ -1745,35 +1658,70 @@ "node": ">=12" } }, - "node_modules/jotai": { - "version": "2.20.2", - "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.20.2.tgz", - "integrity": "sha512-aHB4CNb9qRcyf0mwSB6EO5bCGAjx8cTwFgOFCE2leOnTzqACbnSWG8XoWB3LxCT1Qoj03I1OWAHszDmN4uHb/w==", + "node_modules/ip-address": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT", + "peer": true + }, + "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==", "license": "MIT", + "peer": true, "engines": { - "node": ">=12.20.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0", - "@babel/template": ">=7.0.0", - "@types/react": ">=17.0.0", - "react": ">=17.0.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@babel/template": { - "optional": true - }, - "@types/react": { - "optional": true + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "peer": true + }, + "node_modules/js-yaml": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" }, - "react": { - "optional": true + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT", + "peer": true + }, "node_modules/katex": { "version": "0.16.47", "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz", @@ -1810,18 +1758,12 @@ "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", "license": "MIT" }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "license": "MIT", - "peer": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } + "peer": true }, "node_modules/lodash-es": { "version": "4.18.1", @@ -1829,16 +1771,26 @@ "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", "license": "MIT" }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", "license": "MIT", "bin": { "marked": "bin/marked.js" }, "engines": { - "node": ">= 12" + "node": ">= 20" } }, "node_modules/mermaid": { @@ -1870,18 +1822,6 @@ "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" } }, - "node_modules/mermaid/node_modules/marked": { - "version": "16.4.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", - "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 20" - } - }, "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", @@ -1889,29 +1829,65 @@ "license": "MIT", "peer": true }, - "node_modules/modern-tar": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/modern-tar/-/modern-tar-0.7.6.tgz", - "integrity": "sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg==", + "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", + "peer": true + }, + "node_modules/netmask": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", "license": "MIT", "peer": true, "engines": { - "node": ">=18.0.0" + "node": ">= 0.4.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" } }, - "node_modules/p-limit": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", - "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "license": "MIT", + "peer": true, "dependencies": { - "yocto-queue": "^1.1.1" + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" }, "engines": { - "node": ">=18" + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", + "peer": true, + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 14" } }, "node_modules/package-manager-detector": { @@ -1920,12 +1896,58 @@ "integrity": "sha512-xg1eHpwYL/D/HEdWw2goFZP6vV0FH7W+PZ5rFkGjdIDLtxq7EkzBUeT3m+lndYCt8wKbmofUu1MUdMCXkCk9ZQ==", "license": "MIT" }, + "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", + "peer": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-data-parser": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", "license": "MIT" }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT", + "peer": true + }, + "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", + "peer": true + }, "node_modules/points-on-curve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", @@ -1942,103 +1964,113 @@ "points-on-curve": "0.2.0" } }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT", + "peer": true + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "peer": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/puppeteer": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-25.3.0.tgz", - "integrity": "sha512-O1tx8S315aw8eI99HZ5ZNcVEzJ9+jKF//eO5UvfZ3cXJ6okZ5sX3Y50u7DJaM+ewEK4LqXP068tBhfRaWikj+g==", + "version": "23.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-23.11.1.tgz", + "integrity": "sha512-53uIX3KR5en8l7Vd8n5DUv90Ae9QDQsyIthaUFVzwV6yU750RjqRznEtNMBT20VthqAdemnJN+hxVdmMHKt7Zw==", + "deprecated": "< 24.15.0 is no longer supported", "hasInstallScript": true, "license": "Apache-2.0", "peer": true, "dependencies": { - "@puppeteer/browsers": "3.0.6", - "chromium-bidi": "16.0.1", - "devtools-protocol": "0.0.1638949", - "lilconfig": "^3.1.3", - "puppeteer-core": "25.3.0", - "typed-query-selector": "^2.12.2" + "@puppeteer/browsers": "2.6.1", + "chromium-bidi": "0.11.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1367902", + "puppeteer-core": "23.11.1", + "typed-query-selector": "^2.12.0" }, "bin": { - "puppeteer": "lib/puppeteer/node/cli.js" + "puppeteer": "lib/cjs/puppeteer/node/cli.js" }, "engines": { - "node": ">=22.12.0" + "node": ">=18" } }, "node_modules/puppeteer-core": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.3.0.tgz", - "integrity": "sha512-fm+wpUr2oigH1PXZvwgATrM2tYWHMDG8ASzTEe9uukCye4X5Ldx1K5BTHPFKITrIWvQQAQ256d1NpbEveBcKjA==", + "version": "23.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.11.1.tgz", + "integrity": "sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@puppeteer/browsers": "3.0.6", - "chromium-bidi": "16.0.1", - "devtools-protocol": "0.0.1638949", - "typed-query-selector": "^2.12.2", - "webdriver-bidi-protocol": "0.4.2", - "ws": "^8.21.0" + "@puppeteer/browsers": "2.6.1", + "chromium-bidi": "0.11.0", + "debug": "^4.4.0", + "devtools-protocol": "0.0.1367902", + "typed-query-selector": "^2.12.0", + "ws": "^8.18.0" }, "engines": { - "node": ">=22.12.0" + "node": ">=18" } }, - "node_modules/react": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", - "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", + "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==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/react-aria": { - "version": "3.50.0", - "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.50.0.tgz", - "integrity": "sha512-S0Os6QZk33fzUAKu1QLT9afoUaCBt1ZNdoiq0n2YMVgKIdNIQS8zxiZ8O9hYE6QyDkHKjD6q39LQZ+qaSAIgjw==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.2", - "@internationalized/number": "^3.6.7", - "@internationalized/string": "^3.2.9", - "@react-types/shared": "^3.36.0", - "@swc/helpers": "^0.5.0", - "aria-hidden": "^1.2.3", - "clsx": "^2.0.0", - "react-stately": "3.48.0", - "use-sync-external-store": "^1.6.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/react-dom": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", - "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", + "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", - "dependencies": { - "scheduler": "^0.27.0" - }, - "peerDependencies": { - "react": "^19.2.7" - } - }, - "node_modules/react-stately": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.48.0.tgz", - "integrity": "sha512-ImicSAG+lTotAe5izcs1fz49Zk48w7pDusqYg04WaPhCoej8BJ24soMu3iLXIrsi273s4P1gZrYGrqReMfgEEA==", - "license": "Apache-2.0", - "dependencies": { - "@internationalized/date": "^3.12.2", - "@internationalized/number": "^3.6.7", - "@internationalized/string": "^3.2.9", - "@react-types/shared": "^3.36.0", - "@swc/helpers": "^0.5.0", - "use-sync-external-store": "^1.6.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + "peer": true, + "engines": { + "node": ">=4" } }, "node_modules/robust-predicates": { @@ -2071,44 +2103,109 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, - "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT" + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", + "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", "license": "MIT", "peer": true, "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "ip-address": "^10.1.1", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">=18" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 14" } }, - "node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "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, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/streamx": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.28.0.tgz", + "integrity": "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==", + "license": "MIT", + "peer": true, + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, + "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==", "license": "MIT", "peer": true, "dependencies": { - "ansi-regex": "^6.2.2" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "engines": { + "node": ">=8" } }, "node_modules/stylis": { @@ -2117,26 +2214,58 @@ "integrity": "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==", "license": "MIT" }, - "node_modules/tabbable": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz", - "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==", - "license": "MIT" + "node_modules/tar-fs": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.3.tgz", + "integrity": "sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } }, - "node_modules/tailwind-merge": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz", - "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==", + "node_modules/tar-stream": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.2.0.tgz", + "integrity": "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==", "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" + "peer": true, + "dependencies": { + "b4a": "^1.6.4", + "bare-fs": "^4.5.5", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "license": "MIT", + "peer": true, + "dependencies": { + "streamx": "^2.12.5" } }, - "node_modules/tailwindcss": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.2.tgz", - "integrity": "sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==", + "node_modules/text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "license": "MIT", "peer": true }, @@ -2162,7 +2291,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/typed-query-selector": { "version": "2.12.2", @@ -2171,15 +2301,25 @@ "license": "MIT", "peer": true }, - "node_modules/use-sync-external-store": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", - "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "peer": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" } }, + "node_modules/undici-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/uuid": { "version": "14.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz", @@ -2193,31 +2333,31 @@ "uuid": "dist-node/bin/uuid" } }, - "node_modules/webdriver-bidi-protocol": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.2.tgz", - "integrity": "sha512-VSV+fzfChirL3e7jay2yUC7B4HQCGtEWEg/MSSQbK+qWbqeGlRLlXTzPpYr3XGUvbpDHumWZBJxgesg4N7dbtA==", - "license": "Apache-2.0", - "peer": true - }, "node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "peer": true, "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC", + "peer": true + }, "node_modules/ws": { "version": "8.21.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", @@ -2251,49 +2391,49 @@ } }, "node_modules/yargs": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", - "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "license": "MIT", "peer": true, "dependencies": { - "cliui": "^9.0.1", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "string-width": "^7.2.0", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^22.0.0" + "yargs-parser": "^21.1.1" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", - "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "license": "ISC", "peer": true, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" + "node": ">=12" } }, - "node_modules/yocto-queue": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", - "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peer": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "license": "MIT", "peer": true, "funding": { diff --git a/rfd-processor/package.json b/rfd-processor/package.json index c2e856cc..873100d1 100644 --- a/rfd-processor/package.json +++ b/rfd-processor/package.json @@ -3,6 +3,6 @@ "private": true, "description": "Node dependencies for rendering RFD PDFs", "dependencies": { - "@mermaid-js/mermaid-cli": "11.16.0" + "@mermaid-js/mermaid-cli": "11.4.0" } } From ece036f4d22a4034f00aed26c0daae1e5668b3bb Mon Sep 17 00:00:00 2001 From: Peter Tripp Date: Wed, 15 Jul 2026 09:39:01 -0400 Subject: [PATCH 20/20] Update golden; tweak diff-pdf args --- .github/workflows/test.yml | 2 +- rfd-processor/tests/rfd_9999.pdf | Bin 178456 -> 177526 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d5a3bdbe..db448162 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -78,7 +78,7 @@ jobs: echo "Rendered PDF does not match checked-in RFD 9999 PDF" sudo apt-get update sudo apt-get install -y diff-pdf-wx xvfb - xvfb-run -a diff-pdf --output-diff "$diff_pdf" "$expected_pdf" "$generated_pdf" || true + xvfb-run -a diff-pdf --skip-identical --mark-differences "$diff_pdf" "$expected_pdf" --output-diff "$generated_pdf" || true exit 1 fi - name: Upload rendered PDF diff --git a/rfd-processor/tests/rfd_9999.pdf b/rfd-processor/tests/rfd_9999.pdf index d4581b3e3e59004f4e0878fca467a60b7176843b..148da03a5a3c1f82ac508e8a3d962eab3f1b02be 100644 GIT binary patch delta 43030 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 delta 44008 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%0AeYGO#>S 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 G{r>@)lyRv5