diff --git a/.github/workflows/security-audit.yml b/.github/workflows/security-audit.yml index c453676b4f..e7179f09ad 100644 --- a/.github/workflows/security-audit.yml +++ b/.github/workflows/security-audit.yml @@ -50,6 +50,15 @@ jobs: # not a parser of untrusted PDFs, so the deeply-nested-input # surface is not reached. Tracking for a printpdf release that # moves to lopdf >=0.42. + # - RUSTSEC-2025-0144 (ml-dsa) — timing side-channel in ML-DSA + # decomposition. Transitive via `servo-script`, part of the + # EXPERIMENTAL, feature-gated Servo web-engine switch (opt-in, + # not in the default build graph — `cargo tree -i ml-dsa` does + # not resolve it without the Servo feature). Patched only in a + # pre-release (>=0.1.0-rc.3), and servo-script pins 0.0.4, so + # there is no actionable stable bump yet. Perry does not exercise + # ML-DSA signing in this context. Tracking for servo-script to + # move to a released ml-dsa >=0.1.0. # # Previously the job ran `--deny warnings` which also # escalated every "unmaintained crate" notice into a hard @@ -62,4 +71,5 @@ jobs: --ignore RUSTSEC-2023-0071 \ --ignore RUSTSEC-2026-0118 \ --ignore RUSTSEC-2026-0119 \ - --ignore RUSTSEC-2026-0187 + --ignore RUSTSEC-2026-0187 \ + --ignore RUSTSEC-2025-0144 diff --git a/Cargo.lock b/Cargo.lock index 14101b28ac..ef1c463bb5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,35 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "accesskit" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b7f7f85a7e5f68090000ed7622545829afd484d210358702ae4cb97dd0c320" +dependencies = [ + "enumn", + "serde", + "uuid", +] + +[[package]] +name = "accountable-refcell" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6afea9052e0b2d90e38572691d87194b2e5d8d6899b9b850b22aaab17e486252" +dependencies = [ + "backtrace", +] + +[[package]] +name = "addr2line" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" +dependencies = [ + "gimli", +] + [[package]] name = "adler2" version = "2.0.1" @@ -54,6 +83,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "aes-kw" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69fa2b352dcefb5f7f3a5fb840e02665d311d878955380515e4fd50095dd3d8c" +dependencies = [ + "aes 0.8.4", +] + [[package]] name = "aes-kw" version = "0.3.1" @@ -141,6 +179,9 @@ name = "allocator-api2" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +dependencies = [ + "serde", +] [[package]] name = "allsorts" @@ -236,6 +277,16 @@ version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" +[[package]] +name = "app_units" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "467b60e4ee6761cd6fd4e03ea58acefc8eec0d1b1def995c1b3b783fa7be8a60" +dependencies = [ + "num-traits", + "serde", +] + [[package]] name = "ar_archive_writer" version = "0.5.1" @@ -251,6 +302,26 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +[[package]] +name = "arboard" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" +dependencies = [ + "clipboard-win", + "image", + "log", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "parking_lot", + "percent-encoding", + "windows-sys 0.60.2", + "x11rb", +] + [[package]] name = "arc-swap" version = "1.9.1" @@ -289,11 +360,20 @@ dependencies = [ "password-hash", ] +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +dependencies = [ + "serde", +] [[package]] name = "as-slice" @@ -310,6 +390,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + [[package]] name = "ast_node" version = "5.0.0" @@ -345,6 +434,18 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-compression" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79b3f8a79cccc2898f31920fc69f304859b3bd567490f75ebf51ae1c792a9ac" +dependencies = [ + "compression-codecs", + "compression-core", + "pin-project-lite", + "tokio", +] + [[package]] name = "async-executor" version = "1.14.0" @@ -452,6 +553,26 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "async-tungstenite" +version = "0.34.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8447f02eaa65412035e2d3eeaa3fc82bbb8d7137c84c5976b4af685136012ee9" +dependencies = [ + "atomic-waker", + "futures-core", + "futures-io", + "futures-task", + "futures-util", + "log", + "pin-project-lite", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tungstenite 0.29.0", + "webpki-roots 1.0.7", +] + [[package]] name = "atoi" version = "2.0.0" @@ -573,6 +694,21 @@ dependencies = [ "fastrand", ] +[[package]] +name = "backtrace" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-link 0.2.1", +] + [[package]] name = "base16ct" version = "0.2.0" @@ -585,6 +721,18 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.1" @@ -603,7 +751,7 @@ version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abaf6da45c74385272ddf00e1ac074c7d8a6c1a1dda376902bd6a427522a8b2c" dependencies = [ - "base64", + "base64 0.22.1", "blowfish", "getrandom 0.3.4", "subtle", @@ -619,6 +767,15 @@ dependencies = [ "scoped-tls", ] +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "bindgen" version = "0.72.1" @@ -712,6 +869,12 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.10.4" @@ -727,7 +890,7 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" dependencies = [ - "hybrid-array", + "hybrid-array 0.4.12", "zeroize", ] @@ -824,7 +987,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3f109694c4f45353972af96bf97d8a057f82e2d6e496457f4d135b9867a518c" dependencies = [ "ahash 0.8.12", - "base64", + "base64 0.22.1", "bitvec", "getrandom 0.3.4", "hex", @@ -839,6 +1002,23 @@ dependencies = [ "uuid", ] +[[package]] +name = "buf-read-ext" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e2c71c44e5bbc64de4ecfac946e05f9bba5cc296ea7bab4d3eda242a3ffa73c" + +[[package]] +name = "build-parallel" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e3ff9db740167616e528c509b3618046fc05d337f8f3182d300f4aa977d2bb" +dependencies = [ + "crossbeam-utils", + "jobserver", + "num_cpus", +] + [[package]] name = "built" version = "0.8.1" @@ -851,6 +1031,12 @@ version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + [[package]] name = "bytecheck" version = "0.6.12" @@ -884,6 +1070,20 @@ name = "bytemuck" version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f65693059b6b9c588b9f62fed1cedbf0a8b805631457ea162d68f0de186f3de5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] [[package]] name = "byteorder" @@ -968,6 +1168,16 @@ dependencies = [ "system-deps", ] +[[package]] +name = "calendrical_calculations" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e97f73e95d668625c9b28a3072e6326773785a0cf807de9f3d632778438f3d38" +dependencies = [ + "core_maths", + "displaydoc", +] + [[package]] name = "calendrical_calculations" version = "0.2.4" @@ -1036,6 +1246,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + [[package]] name = "chacha20" version = "0.9.1" @@ -1071,6 +1290,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "chardetng" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14b8f0b65b7b08ae3c8187e8d77174de20cb6777864c6b832d8ad365999cf1ea" +dependencies = [ + "cfg-if", + "encoding_rs", + "memchr", +] + [[package]] name = "chrono" version = "0.4.45" @@ -1082,7 +1312,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -1173,6 +1403,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +[[package]] +name = "clipboard-win" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" +dependencies = [ + "error-code", +] + [[package]] name = "cmake" version = "0.1.58" @@ -1188,6 +1427,33 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" +[[package]] +name = "cobs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror 2.0.18", +] + +[[package]] +name = "codespan-reporting" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "color" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ec7c5eb7a16992b1904d76c517d170ab353b0e0b3d5a0c81a8a0cd1037893cf" +dependencies = [ + "bytemuck", +] + [[package]] name = "color_quant" version = "1.1.0" @@ -1214,6 +1480,26 @@ dependencies = [ "tokio-util", ] +[[package]] +name = "compression-codecs" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce2548391e9c1929c21bf6aa2680af86fe4c1b33e6cea9ac1cfeec0bd11218cf" +dependencies = [ + "brotli", + "compression-core", + "flate2", + "memchr", + "zstd", + "zstd-safe", +] + +[[package]] +name = "compression-core" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc14f565cf027a105f7a44ccf9e5b424348421a1d8952a8fc9d499d313107789" + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -1286,6 +1572,22 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" +[[package]] +name = "content-security-policy" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6813ceff986382cd86f67722f308177253e8fab1954a2d51c5e386ffdb3e2d03" +dependencies = [ + "base64 0.22.1", + "bitflags 2.12.1", + "once_cell", + "percent-encoding", + "regex", + "serde", + "sha2 0.10.9", + "url", +] + [[package]] name = "convert_case" version = "0.10.0" @@ -1295,6 +1597,26 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time", + "version_check", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -1322,23 +1644,70 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "core_maths" -version = "0.1.1" +name = "core-graphics" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ - "libm", + "bitflags 1.3.2", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "foreign-types", + "libc", ] [[package]] -name = "cpubits" -version = "0.1.1" +name = "core-graphics-types" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "libc", +] [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.12.1", + "core-foundation 0.10.1", + "libc", +] + +[[package]] +name = "core-text" +version = "20.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5" +dependencies = [ + "core-foundation 0.9.4", + "core-graphics", + "foreign-types", + "libc", +] + +[[package]] +name = "core_maths" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30" +dependencies = [ + "libm", +] + +[[package]] +name = "cpubits" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" + +[[package]] +name = "cpufeatures" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ @@ -1404,7 +1773,7 @@ checksum = "4aa42bcd3d846ebf66e15bd528d1087f75d1c6c1c66ebff626178a106353c576" dependencies = [ "chrono", "derive_builder", - "strum", + "strum 0.27.2", ] [[package]] @@ -1477,7 +1846,7 @@ dependencies = [ "cpubits", "ctutils", "getrandom 0.4.2", - "hybrid-array", + "hybrid-array 0.4.12", "num-traits", "rand_core 0.10.1", "subtle", @@ -1502,23 +1871,47 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ "getrandom 0.4.2", - "hybrid-array", + "hybrid-array 0.4.12", "rand_core 0.10.1", ] +[[package]] +name = "cssparser" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +dependencies = [ + "cssparser-macros 0.6.1", + "dtoa-short", + "itoa", + "phf 0.13.1", + "serde", + "smallvec", +] + [[package]] name = "cssparser" version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c9cdaae01d5ed7882b04d795e7f752f46ff52d2fa3b50a20d28c464510bba98" dependencies = [ - "cssparser-macros", + "cssparser-macros 0.7.0", "dtoa-short", "itoa", "phf 0.13.1", "smallvec", ] +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.117", +] + [[package]] name = "cssparser-macros" version = "0.7.0" @@ -1664,12 +2057,49 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" +[[package]] +name = "data-url" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" + [[package]] name = "deflate64" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac6b926516df9c60bfa16e107b21086399f8285a44ca9711344b9e553c5146e2" +[[package]] +name = "defmt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" +dependencies = [ + "defmt-parser", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.18", +] + [[package]] name = "der" version = "0.7.10" @@ -1840,6 +2270,39 @@ dependencies = [ "zeroize", ] +[[package]] +name = "diplomat" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3137c640d2bac491dbfca7f9945c948f888dd8c95bdf7ee6b164fbdfa5d3efc2" +dependencies = [ + "diplomat_core", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "diplomat-runtime" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53bfcc833b58615b593a6e5c46771cb36b1cfce94899c60823810939fe8ca9d9" + +[[package]] +name = "diplomat_core" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7aca1d8f9e7b73ad61785beedc9556ad79f84b15c15abaa7041377e42284c1" +dependencies = [ + "lazy_static", + "proc-macro2", + "quote", + "serde", + "smallvec", + "strck_ident", + "syn 2.0.117", +] + [[package]] name = "dirs" version = "6.0.0" @@ -1882,6 +2345,15 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "dlib" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a" +dependencies = [ + "libloading", +] + [[package]] name = "document-features" version = "0.2.12" @@ -1897,6 +2369,12 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" + [[package]] name = "dssim-core" version = "3.4.0" @@ -1930,6 +2408,20 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "dwrote" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b35532432acc8b19ceed096e35dfa088d3ea037fe4f3c085f1f97f33b4d02" +dependencies = [ + "lazy_static", + "libc", + "serde", + "serde_derive", + "winapi", + "wio", +] + [[package]] name = "ecb" version = "0.1.2" @@ -2051,7 +2543,7 @@ dependencies = [ "crypto-common 0.2.2", "ff 0.14.0", "group 0.14.0", - "hybrid-array", + "hybrid-array 0.4.12", "pkcs8 0.11.0", "rand_core 0.10.1", "sec1 0.8.1", @@ -2065,7 +2557,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9298e6504d9b9e780ed3f7dfd43a61be8cd0e09eb07f7706a945b0072b6670b6" dependencies = [ - "base64", + "base64 0.22.1", "memchr", ] @@ -2075,12 +2567,42 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449" +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + [[package]] name = "encode_unicode" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" +[[package]] +name = "encoding_c" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9af727805f3b0d79956bde5b35732669fb5c5d45a94893798e7b7e70cfbf9cc1" +dependencies = [ + "encoding_rs", +] + +[[package]] +name = "encoding_c_mem" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a80a16821fe8c7cab96e0c67b57cd7090e021e9615e6ce6ab0cf866c44ed1f0" +dependencies = [ + "encoding_rs", +] + [[package]] name = "encoding_rs" version = "0.8.35" @@ -2088,6 +2610,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", + "serde", ] [[package]] @@ -2117,6 +2640,27 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "enumn" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "env_filter" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900d271a03799a1ee8d1ca9b19893b48ca674a9284fefcfb85f05e74ed314217" +dependencies = [ + "log", + "regex", +] + [[package]] name = "env_logger" version = "0.10.2" @@ -2130,6 +2674,19 @@ dependencies = [ "termcolor", ] +[[package]] +name = "env_logger" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de671bd27a75a797dc9ae289ba1e77276e75e2026408aab65185384e2d5cd3f6" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + [[package]] name = "equator" version = "0.4.2" @@ -2166,6 +2723,23 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "error-code" +version = "3.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" + +[[package]] +name = "etagere" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc89bf99e5dc15954a60f707c1e09d7540e5cd9af85fa75caa0b510bc08c5342" +dependencies = [ + "euclid", + "serde", + "svg_fmt", +] + [[package]] name = "etcetera" version = "0.11.0" @@ -2176,6 +2750,16 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "euclid" +version = "0.22.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06" +dependencies = [ + "num-traits", + "serde", +] + [[package]] name = "event-listener" version = "5.4.1" @@ -2231,7 +2815,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1e1dacd0d2082dfcf1351c4bdd566bbe89a2b263235a2b50058f1e130a47277" dependencies = [ "bit-set", - "regex-automata", + "regex-automata 0.4.14", "regex-syntax", ] @@ -2268,6 +2852,15 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "fearless_simd" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb2907d1f08b2b316b9223ced5b0e89d87028ba8deae9764741dba8ff7f3903" +dependencies = [ + "bytemuck", +] + [[package]] name = "ff" version = "0.13.1" @@ -2320,6 +2913,23 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +[[package]] +name = "fixed_decimal" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0febbeb1118a9ecdee6e4520ead6b54882e843dd0592ad233247dbee84c53db8" +dependencies = [ + "displaydoc", + "smallvec", + "writeable 0.5.5", +] + +[[package]] +name = "fixedbitset" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" + [[package]] name = "flagset" version = "0.4.7" @@ -2337,6 +2947,12 @@ dependencies = [ "zlib-rs", ] +[[package]] +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" + [[package]] name = "flume" version = "0.12.0" @@ -2367,55 +2983,178 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] -name = "form_urlencoded" -version = "1.2.2" +name = "font-types" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +checksum = "39a654f404bbcbd48ea58c617c2993ee91d1cb63727a37bf2323a4edeed1b8c5" dependencies = [ - "percent-encoding", + "bytemuck", ] [[package]] -name = "from_variant" -version = "3.0.0" +name = "fontconfig-parser" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ff35a391aef949120a0340d690269b3d9f63460a6106e99bd07b961f345ea9" +checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646" dependencies = [ - "swc_macros_common", - "syn 2.0.117", + "roxmltree", ] [[package]] -name = "fs_extra" -version = "1.3.0" +name = "fontdb" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" +checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2", + "slotmap", + "tinyvec", + "ttf-parser", +] [[package]] -name = "fsevent-sys" -version = "4.1.0" +name = "fontsan" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +checksum = "52fd401b496627c46f35318272508fcdcb77927868507ed2ad796408aa903923" dependencies = [ + "cc", + "fontsan-woff2", + "glob", "libc", + "libz-sys", ] [[package]] -name = "fslock" -version = "0.2.1" +name = "fontsan-woff2" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" +checksum = "106ebe29445505f3860765d2597ddad20a3e90174d6e8539a10d58253b3e5c0f" dependencies = [ - "libc", - "winapi", + "brotli-decompressor", + "cc", ] [[package]] -name = "funty" -version = "2.0.0" +name = "foreign-types" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "freetype" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a440748e063798e4893ceb877151e84acef9bea9a8c6800645cf3f1b3a7806e" +dependencies = [ + "freetype-sys", + "libc", +] + +[[package]] +name = "freetype-sys" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7edc5b9669349acfda99533e9e0bcf26a51862ab43b08ee7745c55d28eb134" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "from_variant" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ff35a391aef949120a0340d690269b3d9f63460a6106e99bd07b961f345ea9" +dependencies = [ + "swc_macros_common", + "syn 2.0.117", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[package]] +name = "fslock" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "fst" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + [[package]] name = "futures-channel" version = "0.3.32" @@ -2518,6 +3257,16 @@ dependencies = [ "slab", ] +[[package]] +name = "gaol" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061957ca7a966a39a79ebca393a9a6c7babda10bf9dd6f11d00041558d929c22" +dependencies = [ + "libc", + "log", +] + [[package]] name = "gdk-pixbuf" version = "0.20.10" @@ -2586,6 +3335,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "gethostname" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" +dependencies = [ + "rustix", + "windows-link 0.2.1", +] + [[package]] name = "getopts" version = "0.2.24" @@ -2595,6 +3354,17 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + [[package]] name = "getrandom" version = "0.2.17" @@ -2604,7 +3374,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -2648,6 +3418,16 @@ dependencies = [ "polyval", ] +[[package]] +name = "gif" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" +dependencies = [ + "color_quant", + "weezl", +] + [[package]] name = "gif" version = "0.14.2" @@ -2658,6 +3438,12 @@ dependencies = [ "weezl", ] +[[package]] +name = "gimli" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" + [[package]] name = "gio" version = "0.20.12" @@ -2685,7 +3471,7 @@ dependencies = [ "gobject-sys 0.20.10", "libc", "system-deps", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2701,6 +3487,26 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "gleam" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8647cc2e2ffde598ce5ca2809452e722dd8dc127885ab8aba2fa8b469cd3ed94" +dependencies = [ + "gl_generator", +] + [[package]] name = "glib" version = "0.20.12" @@ -2794,6 +3600,36 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +[[package]] +name = "glow" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glslopt" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c406272113953698f579ad93ec5e909eae0b5f84f6839238b185081d0df04d" +dependencies = [ + "cc", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" +dependencies = [ + "gl_generator", +] + [[package]] name = "glyph-names" version = "0.2.0" @@ -2845,6 +3681,57 @@ dependencies = [ "web-time", ] +[[package]] +name = "gpu-alloc" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45cf04b2726f02df5508c6de726acdc90cdf97ac771a9a0ffd8ba10a6e696bf9" +dependencies = [ + "bitflags 2.12.1", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bbed164dd10ed526c2e4fe3e721ca4a71c61730e5aafac6844b417b3227058" +dependencies = [ + "bitflags 2.12.1", +] + +[[package]] +name = "gpu-allocator" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" +dependencies = [ + "log", + "presser", + "thiserror 1.0.69", + "windows 0.58.0", +] + +[[package]] +name = "gpu-descriptor" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" +dependencies = [ + "bitflags 2.12.1", + "gpu-descriptor-types", + "hashbrown 0.15.5", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.12.1", +] + [[package]] name = "graphene-rs" version = "0.20.10" @@ -2874,6 +3761,12 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36119f3a540b086b4e436bb2b588cf98a68863470e0e880f4d0842f112a3183a" +[[package]] +name = "grid" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b40ca9252762c466af32d0b1002e91e4e1bc5398f77455e55474deb466355ff5" + [[package]] name = "group" version = "0.13.0" @@ -3072,6 +3965,25 @@ dependencies = [ "system-deps", ] +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "h2" version = "0.4.14" @@ -3083,7 +3995,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http", + "http 1.4.1", "indexmap", "slab", "tokio", @@ -3099,9 +4011,25 @@ checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", + "num-traits", "zerocopy", ] +[[package]] +name = "harfbuzz-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb86e2fef3ba40cebffb8fa2cba811f06aa5c5fd296a4e469473e5398d166594" +dependencies = [ + "cc", + "core-graphics", + "core-text", + "foreign-types", + "freetype-sys", + "pkg-config", + "winapi", +] + [[package]] name = "hash2curve" version = "0.14.0" @@ -3137,7 +4065,10 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ + "allocator-api2", + "equivalent", "foldhash 0.1.5", + "serde", ] [[package]] @@ -3181,17 +4112,65 @@ dependencies = [ ] [[package]] -name = "heck" -version = "0.4.1" +name = "headers" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +dependencies = [ + "base64 0.21.7", + "bytes", + "headers-core 0.2.0", + "http 0.2.12", + "httpdate", + "mime", + "sha1 0.10.6", +] [[package]] -name = "heck" -version = "0.5.0" +name = "headers" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" +dependencies = [ + "base64 0.22.1", + "bytes", + "headers-core 0.3.0", + "http 1.4.1", + "httpdate", + "mime", + "sha1 0.10.6", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http 0.2.12", +] + +[[package]] +name = "headers-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" +dependencies = [ + "http 1.4.1", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -3213,6 +4192,12 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + [[package]] name = "hickory-net" version = "0.26.1" @@ -3327,7 +4312,7 @@ checksum = "617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd" dependencies = [ "cfg-if", "libc", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -3354,6 +4339,17 @@ dependencies = [ "markup5ever", ] +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http" version = "1.4.1" @@ -3364,6 +4360,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + [[package]] name = "http-body" version = "1.0.1" @@ -3371,7 +4378,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http", + "http 1.4.1", ] [[package]] @@ -3382,8 +4389,8 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http", - "http-body", + "http 1.4.1", + "http-body 1.0.1", "pin-project-lite", ] @@ -3405,6 +4412,24 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" +[[package]] +name = "hybrid-array" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d35805454dc9f8662a98d6d61886ffe26bd465f5960e0e55345c70d5c0d2a9" +dependencies = [ + "typenum", +] + +[[package]] +name = "hybrid-array" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d15931895091dea5c47afa5b3c9a01ba634b311919fd4d41388fa0e3d76af" +dependencies = [ + "typenum", +] + [[package]] name = "hybrid-array" version = "0.4.12" @@ -3417,6 +4442,30 @@ dependencies = [ "zeroize", ] +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.27", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "want", +] + [[package]] name = "hyper" version = "1.10.1" @@ -3427,9 +4476,9 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2", - "http", - "http-body", + "h2 0.4.14", + "http 1.4.1", + "http-body 1.0.1", "httparse", "httpdate", "itoa", @@ -3445,9 +4494,10 @@ version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ - "http", - "hyper", + "http 1.4.1", + "hyper 1.10.1", "hyper-util", + "log", "rustls", "tokio", "tokio-rustls", @@ -3461,18 +4511,18 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", "futures-util", - "http", - "http-body", - "hyper", + "http 1.4.1", + "http-body 1.0.1", + "hyper 1.10.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.6.4", "tokio", "tower-service", "tracing", @@ -3490,7 +4540,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core", + "windows-core 0.62.2", ] [[package]] @@ -3502,4155 +4552,6763 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_calendar" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7265b2137f9a36f7634a308d91f984574bbdba8cfd95ceffe1c345552275a8ff" +dependencies = [ + "calendrical_calculations 0.1.3", + "displaydoc", + "icu_calendar_data 1.5.1", + "icu_locid", + "icu_locid_transform", + "icu_provider 1.5.0", + "tinystr 0.7.6", + "writeable 0.5.5", + "zerovec 0.10.4", +] + [[package]] name = "icu_calendar" version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2b2acc6263f494f1df50685b53ff8e57869e47d5c6fe39c23d518ae9a4f3e45" dependencies = [ - "calendrical_calculations", + "calendrical_calculations 0.2.4", "displaydoc", - "icu_calendar_data", + "icu_calendar_data 2.2.0", "icu_locale", "icu_locale_core", - "icu_provider", - "tinystr", - "zerovec", + "icu_provider 2.2.0", + "tinystr 0.8.3", + "zerovec 0.11.6", ] [[package]] name = "icu_calendar_data" -version = "2.2.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "118577bcf3a0fa7c6ac0a7d6e951814da84ee56b9b1f68fb4d8d10b08cefaf4d" +checksum = "820499e77e852162190608b4f444e7b4552619150eafc39a9e39333d9efae9e1" [[package]] -name = "icu_collections" +name = "icu_calendar_data" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" -dependencies = [ - "displaydoc", - "potential_utf", - "utf8_iter", - "yoke", - "zerofrom", - "zerovec", -] +checksum = "118577bcf3a0fa7c6ac0a7d6e951814da84ee56b9b1f68fb4d8d10b08cefaf4d" [[package]] -name = "icu_locale" -version = "2.2.0" +name = "icu_capi" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5a396343c7208121dc86e35623d3dfe19814a7613cfd14964994cdc9c9a2e26" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_locale_data", - "icu_provider", - "potential_utf", - "tinystr", - "zerovec", +checksum = "acc33c4f501b515cdb6b583b31ec009479a4c0cb4cf28dcdfcd54b29069d725e" +dependencies = [ + "diplomat", + "diplomat-runtime", + "icu_calendar 1.5.2", + "icu_casemap", + "icu_collator", + "icu_collections 1.5.0", + "icu_datetime", + "icu_decimal", + "icu_experimental", + "icu_list", + "icu_locid", + "icu_locid_transform", + "icu_normalizer 1.5.0", + "icu_plurals", + "icu_properties 1.5.1", + "icu_provider 1.5.0", + "icu_provider_adapters", + "icu_segmenter 1.5.0", + "icu_timezone", + "tinystr 0.7.6", + "unicode-bidi", + "writeable 0.5.5", ] [[package]] -name = "icu_locale_core" -version = "2.2.0" +name = "icu_casemap" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "9ff0c8ae9f8d31b12e27fc385ff9ab1f3cd9b17417c665c49e4ec958c37da75f" dependencies = [ "displaydoc", - "litemap", - "serde", - "tinystr", - "writeable", - "zerovec", + "icu_casemap_data", + "icu_collections 1.5.0", + "icu_locid", + "icu_properties 1.5.1", + "icu_provider 1.5.0", + "writeable 0.5.5", + "zerovec 0.10.4", ] [[package]] -name = "icu_locale_data" -version = "2.2.0" +name = "icu_casemap_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fdcc9ac77c6d74ff5cf6e65ef3181d6af32003b16fce3a77fb451d2f695993" +checksum = "02bd9f6276270c85a5cd54611adbbf94e993ec464a2a86a452a6c565b7ded5d9" [[package]] -name = "icu_normalizer" -version = "2.2.0" +name = "icu_collator" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "d370371887d31d56f361c3eaa15743e54f13bc677059c9191c77e099ed6966b2" dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", + "displaydoc", + "icu_collator_data", + "icu_collections 1.5.0", + "icu_locid_transform", + "icu_normalizer 1.5.0", + "icu_properties 1.5.1", + "icu_provider 1.5.0", "smallvec", - "zerovec", + "utf16_iter", + "utf8_iter", + "zerovec 0.10.4", ] [[package]] -name = "icu_normalizer_data" -version = "2.2.0" +name = "icu_collator_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +checksum = "7b353986d77d28991eca4dea5ef2b8982f639342ae19ca81edc44f048bc38ebb" [[package]] -name = "icu_properties" -version = "2.2.0" +name = "icu_collections" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", + "displaydoc", + "yoke 0.7.5", + "zerofrom", + "zerovec 0.10.4", ] [[package]] -name = "icu_properties_data" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" - -[[package]] -name = "icu_provider" +name = "icu_collections" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", - "icu_locale_core", - "serde", - "stable_deref_trait", - "writeable", - "yoke", + "potential_utf", + "utf8_iter", + "yoke 0.8.2", "zerofrom", - "zerotrie", - "zerovec", + "zerovec 0.11.6", ] [[package]] -name = "id-arena" -version = "2.3.0" +name = "icu_datetime" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" +checksum = "d115efb85e08df3fd77e77f52e7e087545a783fffba8be80bfa2102f306b1780" +dependencies = [ + "displaydoc", + "either", + "fixed_decimal", + "icu_calendar 1.5.2", + "icu_datetime_data", + "icu_decimal", + "icu_locid", + "icu_locid_transform", + "icu_plurals", + "icu_provider 1.5.0", + "icu_timezone", + "smallvec", + "tinystr 0.7.6", + "writeable 0.5.5", + "zerovec 0.10.4", +] [[package]] -name = "ident_case" -version = "1.0.1" +name = "icu_datetime_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "bef5f04076123cab1b7a926a7083db27fe0d7a0e575adb984854aae3f3a6507d" [[package]] -name = "idna" -version = "1.1.0" +name = "icu_decimal" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +checksum = "fb8fd98f86ec0448d85e1edf8884e4e318bb2e121bd733ec929a05c0a5e8b0eb" dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", + "displaydoc", + "fixed_decimal", + "icu_decimal_data", + "icu_locid_transform", + "icu_provider 1.5.0", + "writeable 0.5.5", ] [[package]] -name = "idna_adapter" -version = "1.2.2" +name = "icu_decimal_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" -dependencies = [ - "icu_normalizer", - "icu_properties", -] +checksum = "67c95dd97f5ccf6d837a9c115496ec7d36646fa86ca18e7f1412115b4c820ae2" [[package]] -name = "image" -version = "0.25.10" +name = "icu_experimental" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" +checksum = "844ad7b682a165c758065d694bc4d74ac67f176da1c499a04d85d492c0f193b7" dependencies = [ - "bytemuck", - "byteorder-lite", - "color_quant", - "exr", - "gif", - "image-webp", - "moxcms", + "displaydoc", + "fixed_decimal", + "icu_collections 1.5.0", + "icu_decimal", + "icu_experimental_data", + "icu_locid", + "icu_locid_transform", + "icu_normalizer 1.5.0", + "icu_pattern", + "icu_plurals", + "icu_properties 1.5.1", + "icu_provider 1.5.0", + "litemap 0.7.5", + "num-bigint", + "num-rational", "num-traits", - "png 0.18.1", - "qoi", - "ravif", - "rayon", - "rgb", - "tiff", - "zune-core", - "zune-jpeg", + "smallvec", + "tinystr 0.7.6", + "writeable 0.5.5", + "zerofrom", + "zerotrie 0.1.3", + "zerovec 0.10.4", ] [[package]] -name = "image-webp" -version = "0.2.4" +name = "icu_experimental_data" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" +checksum = "121df92eafb8f5286d4e8ff401c1e7db8384377f806db3f8db77b91e5b7bd4dd" + +[[package]] +name = "icu_list" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfeda1d7775b6548edd4e8b7562304a559a91ed56ab56e18961a053f367c365" dependencies = [ - "byteorder-lite", - "quick-error 2.0.1", + "displaydoc", + "icu_list_data", + "icu_locid_transform", + "icu_provider 1.5.0", + "regex-automata 0.2.0", + "writeable 0.5.5", ] [[package]] -name = "imgref" -version = "1.12.1" +name = "icu_list_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2" +checksum = "52b1a7fbdbf3958f1be8354cb59ac73f165b7b7082d447ff2090355c9a069120" [[package]] -name = "indexmap" -version = "2.14.0" +name = "icu_locale" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "d5a396343c7208121dc86e35623d3dfe19814a7613cfd14964994cdc9c9a2e26" dependencies = [ - "equivalent", - "hashbrown 0.17.1", - "serde", - "serde_core", + "icu_collections 2.2.0", + "icu_locale_core", + "icu_locale_data", + "icu_provider 2.2.0", + "potential_utf", + "tinystr 0.8.3", + "zerovec 0.11.6", ] [[package]] -name = "indicatif" -version = "0.18.5" +name = "icu_locale_core" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "993f007684f2e9727160da8b960ec161264703bfd1af084fd2e34d040c9a0dd4" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ - "console 0.16.3", - "portable-atomic", - "unicode-width", - "unit-prefix", - "web-time", + "displaydoc", + "litemap 0.8.2", + "serde", + "tinystr 0.8.3", + "writeable 0.6.3", + "zerovec 0.11.6", ] [[package]] -name = "inotify" -version = "0.9.6" +name = "icu_locale_data" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" -dependencies = [ - "bitflags 1.3.2", - "inotify-sys", - "libc", -] +checksum = "d5fdcc9ac77c6d74ff5cf6e65ef3181d6af32003b16fce3a77fb451d2f695993" [[package]] -name = "inotify-sys" -version = "0.1.5" +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ - "libc", + "displaydoc", + "litemap 0.7.5", + "tinystr 0.7.6", + "writeable 0.5.5", + "zerovec 0.10.4", ] [[package]] -name = "inout" -version = "0.1.4" +name = "icu_locid_transform" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" dependencies = [ - "block-padding", - "generic-array", + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider 1.5.0", + "tinystr 0.7.6", + "zerovec 0.10.4", ] [[package]] -name = "inout" -version = "0.2.2" +name = "icu_locid_transform_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" -dependencies = [ - "hybrid-array", -] +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" [[package]] -name = "interpolate_name" -version = "0.2.4" +name = "icu_normalizer" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", + "displaydoc", + "icu_collections 1.5.0", + "icu_normalizer_data 1.5.1", + "icu_properties 1.5.1", + "icu_provider 1.5.0", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec 0.10.4", ] [[package]] -name = "ipconfig" -version = "0.3.4" +name = "icu_normalizer" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ - "socket2", - "widestring", - "windows-registry", - "windows-result", - "windows-sys 0.61.2", + "icu_collections 2.2.0", + "icu_normalizer_data 2.2.0", + "icu_properties 2.2.0", + "icu_provider 2.2.0", + "smallvec", + "zerovec 0.11.6", ] [[package]] -name = "ipnet" -version = "2.12.0" +name = "icu_normalizer_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" -dependencies = [ - "serde", -] +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" [[package]] -name = "is-macro" -version = "0.3.7" +name = "icu_normalizer_data" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d57a3e447e24c22647738e4607f1df1e0ec6f72e16182c4cd199f647cdfb0e4" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.117", -] +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] -name = "is-terminal" -version = "0.4.17" +name = "icu_pattern" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" +checksum = "cb7f36aafd098d6717de34e668a8120822275c1fba22b936e757b7de8a2fd7e4" dependencies = [ - "hermit-abi 0.5.2", - "libc", - "windows-sys 0.61.2", + "displaydoc", + "either", + "writeable 0.5.5", + "yoke 0.7.5", + "zerofrom", ] [[package]] -name = "is_terminal_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - -[[package]] -name = "itertools" -version = "0.10.5" +name = "icu_plurals" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "ba5a70e7c025dbd5c501b0a5c188cd11666a424f0dadcd4f0a95b7dafde3b114" dependencies = [ - "either", + "displaydoc", + "fixed_decimal", + "icu_locid_transform", + "icu_plurals_data", + "icu_provider 1.5.0", + "zerovec 0.10.4", ] [[package]] -name = "itertools" -version = "0.12.1" +name = "icu_plurals_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] +checksum = "a483403238cb7d6a876a77a5f8191780336d80fe7b8b00bfdeb20be6abbfd112" [[package]] -name = "itertools" -version = "0.14.0" +name = "icu_properties" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" dependencies = [ - "either", + "displaydoc", + "icu_collections 1.5.0", + "icu_locid_transform", + "icu_properties_data 1.5.1", + "icu_provider 1.5.0", + "tinystr 0.7.6", + "unicode-bidi", + "zerovec 0.10.4", ] [[package]] -name = "itertools" -version = "0.15.0" +name = "icu_properties" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ - "either", + "icu_collections 2.2.0", + "icu_locale_core", + "icu_properties_data 2.2.0", + "icu_provider 2.2.0", + "zerotrie 0.2.4", + "zerovec 0.11.6", ] [[package]] -name = "itoa" -version = "1.0.18" +name = "icu_properties_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" [[package]] -name = "ixdtf" -version = "0.6.5" +name = "icu_properties_data" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ceaf4c6c48465bead8cb6a0b7c4ee0c86ecbb31239032b9c66ab9a08d2f3ee1" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] -name = "javascriptcore6" -version = "0.4.0" +name = "icu_provider" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b28ed9c7c08f906b2a51bc2365eae2ba5e7db1249b89892f7ae4cbd602d1f4" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" dependencies = [ - "glib 0.20.12", - "javascriptcore6-sys", - "libc", + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr 0.7.6", + "writeable 0.5.5", + "yoke 0.7.5", + "zerofrom", + "zerovec 0.10.4", ] [[package]] -name = "javascriptcore6-sys" -version = "0.4.0" +name = "icu_provider" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4741e2a31c2145050dd4971f8dd51e92c840d5839a7124cc68a33c7325523a12" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ - "glib-sys 0.20.10", - "gobject-sys 0.20.10", - "libc", - "system-deps", + "displaydoc", + "icu_locale_core", + "serde", + "stable_deref_trait", + "writeable 0.6.3", + "yoke 0.8.2", + "zerofrom", + "zerotrie 0.2.4", + "zerovec 0.11.6", ] [[package]] -name = "jiff-tzdb" -version = "0.1.6" +name = "icu_provider_adapters" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c900ef84826f1338a557697dc8fc601df9ca9af4ac137c7fb61d4c6f2dfd3076" +checksum = "d6324dfd08348a8e0374a447ebd334044d766b1839bb8d5ccf2482a99a77c0bc" +dependencies = [ + "icu_locid", + "icu_locid_transform", + "icu_provider 1.5.0", + "tinystr 0.7.6", + "zerovec 0.10.4", +] [[package]] -name = "jni" -version = "0.21.1" +name = "icu_provider_macros" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ - "cesu8", - "cfg-if", - "combine", - "jni-sys 0.3.1", - "log", - "thiserror 1.0.69", - "walkdir", - "windows-sys 0.45.0", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "jni" -version = "0.22.4" +name = "icu_segmenter" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +checksum = "a717725612346ffc2d7b42c94b820db6908048f39434504cb130e8b46256b0de" dependencies = [ - "cfg-if", - "combine", - "jni-macros", - "jni-sys 0.4.1", - "log", - "simd_cesu8", - "thiserror 2.0.18", - "walkdir", - "windows-link", + "core_maths", + "displaydoc", + "icu_collections 1.5.0", + "icu_locid", + "icu_provider 1.5.0", + "icu_segmenter_data 1.5.1", + "utf8_iter", + "zerovec 0.10.4", ] [[package]] -name = "jni-macros" -version = "0.22.4" +name = "icu_segmenter" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +checksum = "5c0794db0b1a86193ac9c48768d0e6c52c54448e0870ad87907d456ee0dac964" dependencies = [ - "proc-macro2", - "quote", - "rustc_version", - "simd_cesu8", - "syn 2.0.117", + "core_maths", + "icu_collections 2.2.0", + "icu_locale", + "icu_provider 2.2.0", + "icu_segmenter_data 2.2.0", + "potential_utf", + "utf8_iter", + "zerovec 0.11.6", ] [[package]] -name = "jni-sys" -version = "0.3.1" +name = "icu_segmenter_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" -dependencies = [ - "jni-sys 0.4.1", -] +checksum = "a1e52775179941363cc594e49ce99284d13d6948928d8e72c755f55e98caa1eb" [[package]] -name = "jni-sys" -version = "0.4.1" +name = "icu_segmenter_data" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" -dependencies = [ - "jni-sys-macros", -] +checksum = "e4a2c462a4d927d512f5f882a033ddd62f33a05bb9f230d98f736ac3dc85938f" [[package]] -name = "jni-sys-macros" -version = "0.4.1" +name = "icu_timezone" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +checksum = "aa91ba6a585939a020c787235daa8aee856d9bceebd6355e283c0c310bc6de96" dependencies = [ - "quote", - "syn 2.0.117", + "displaydoc", + "icu_calendar 1.5.2", + "icu_provider 1.5.0", + "icu_timezone_data", + "tinystr 0.7.6", + "zerotrie 0.1.3", + "zerovec 0.10.4", ] [[package]] -name = "jobserver" -version = "0.1.34" +name = "icu_timezone_data" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom 0.3.4", - "libc", -] +checksum = "1adcf7b613a268af025bc2a2532b4b9ee294e6051c5c0832d8bff20ac0232e68" [[package]] -name = "js-sys" -version = "0.3.99" +name = "id-arena" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ - "cfg-if", - "futures-util", - "once_cell", - "wasm-bindgen", + "idna_adapter", + "smallvec", + "utf8_iter", ] [[package]] -name = "jsonwebtoken" -version = "10.4.0" +name = "idna_adapter" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba32bfb4ffdeaca3e34431072faf01745c9b26d25504aa7a6cf5684334fc4fc" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ - "base64", - "ed25519-dalek", - "getrandom 0.2.17", - "hmac 0.12.1", - "js-sys", - "p256", - "p384", - "pem", - "rand 0.8.6", - "rsa", - "serde", - "serde_json", - "sha2 0.10.9", - "signature 2.2.0", - "simple_asn1", - "zeroize", + "icu_normalizer 2.2.0", + "icu_properties 2.2.0", ] [[package]] -name = "kamadak-exif" -version = "0.6.1" +name = "image" +version = "0.25.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1130d80c7374efad55a117d715a3af9368f0fa7a2c54573afc15a188cd984837" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" dependencies = [ - "mutate_once", + "bytemuck", + "byteorder-lite", + "color_quant", + "exr", + "gif 0.14.2", + "image-webp", + "moxcms", + "num-traits", + "png 0.18.1", + "qoi", + "ravif", + "rayon", + "rgb", + "tiff", + "zune-core 0.5.1", + "zune-jpeg 0.5.15", ] [[package]] -name = "keccak" -version = "0.1.6" +name = "image-webp" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" +checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" dependencies = [ - "cpufeatures 0.2.17", + "byteorder-lite", + "quick-error 2.0.1", ] [[package]] -name = "keccak" -version = "0.2.0" +name = "imagesize" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" +checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" + +[[package]] +name = "imgref" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2" + +[[package]] +name = "imsz" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396dda16a82727ec2d14aabc1167832bb823d849c54a246ca0cff6cfb7bc697c" + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ - "cfg-if", - "cpufeatures 0.3.0", + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", ] [[package]] -name = "kem" -version = "0.3.0" +name = "indicatif" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd" +checksum = "993f007684f2e9727160da8b960ec161264703bfd1af084fd2e34d040c9a0dd4" dependencies = [ - "crypto-common 0.2.2", - "rand_core 0.10.1", + "console 0.16.3", + "portable-atomic", + "unicode-width", + "unit-prefix", + "web-time", ] [[package]] -name = "kqueue" -version = "1.2.0" +name = "inherent" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "273c0752728918e0ac4976f2b275b6fefb9ecd400585dec929419f3844cd87b5" +checksum = "c727f80bfa4a6c6e2508d2f05b6f4bfce242030bd88ed15ae5331c5b5d30fba7" dependencies = [ - "kqueue-sys", - "libc", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "kqueue-sys" -version = "1.1.2" +name = "inotify" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" dependencies = [ - "bitflags 2.12.1", + "bitflags 1.3.2", + "inotify-sys", "libc", ] [[package]] -name = "ksni" -version = "0.3.5" +name = "inotify-sys" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9eeb3f510b6148ae68f963af2c1fbb0de4d9e4e05f82813cfb319837c3ad2b" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" dependencies = [ - "futures-util", - "pastey 0.2.3", - "serde", - "tokio", - "zbus", + "libc", ] [[package]] -name = "kstring" -version = "2.0.2" +name = "inout" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558bf9508a558512042d3095138b1f7b8fe90c5467d94f9f1da28b3731c5dbd1" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ - "static_assertions", + "block-padding", + "generic-array", ] [[package]] -name = "lazy_static" -version = "1.5.0" +name = "inout" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ - "spin", + "hybrid-array 0.4.12", ] [[package]] -name = "leb128fmt" -version = "0.1.0" +name = "interpolate_name" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] [[package]] -name = "lebe" -version = "0.5.3" +name = "inventory" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" +checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b" +dependencies = [ + "rustversion", +] [[package]] -name = "lettre" -version = "0.11.22" +name = "ipc-channel" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da65617f6cb926332d039cb578aad56178da86e128db6a1b09f4c94fa5b3349" +checksum = "a441490012d80e9aea75fb27503df8e87e9557dcfc6fe4244dde86bfc12e94e3" dependencies = [ - "async-trait", - "base64", - "email-encoding", - "email_address", - "fastrand", - "futures-io", - "futures-util", - "hostname", - "httpdate", - "idna", - "mime", - "nom 8.0.0", - "percent-encoding", - "quoted_printable", - "rustls", - "socket2", - "tokio", - "tokio-rustls", - "url", - "webpki-roots 1.0.7", + "crossbeam-channel", + "libc", + "mio 1.2.1", + "postcard", + "rand 0.9.4", + "rustc-hash 2.1.2", + "serde_core", + "tempfile", + "thiserror 2.0.18", + "uuid", + "windows 0.61.3", ] [[package]] -name = "libbz2-rs-sys" -version = "0.2.5" +name = "ipconfig" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b357333733e8260735ba5894eb928c02ecc69c78715f01a8019e7fa7f2db4c" +checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" +dependencies = [ + "socket2 0.6.4", + "widestring", + "windows-registry", + "windows-result 0.4.1", + "windows-sys 0.61.2", +] [[package]] -name = "libc" -version = "0.2.186" +name = "ipnet" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +dependencies = [ + "serde", +] [[package]] -name = "libfuzzer-sys" -version = "0.4.12" +name = "is-macro" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" +checksum = "1d57a3e447e24c22647738e4607f1df1e0ec6f72e16182c4cd199f647cdfb0e4" dependencies = [ - "arbitrary", - "cc", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "libloading" -version = "0.8.9" +name = "is-terminal" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ - "cfg-if", - "windows-link", + "hermit-abi 0.5.2", + "libc", + "windows-sys 0.61.2", ] [[package]] -name = "libm" -version = "0.2.16" +name = "is_terminal_polyfill" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] -name = "libmimalloc-sys" -version = "0.1.49" +name = "itertools" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a45a52f43e1c16f667ccfe4dd8c85b7f7c204fd5e3bf46c5b0db9a5c3c0b8e9" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ - "cc", + "either", ] [[package]] -name = "libredox" -version = "0.1.17" +name = "itertools" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ - "libc", + "either", ] [[package]] -name = "libshumate" -version = "0.6.0" +name = "itertools" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc9921cc829fb2d546bd6a3a158a4134002098887e0bb01ceb4535521af610ec" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" dependencies = [ - "gdk-pixbuf", - "gdk4", - "gio", - "glib 0.20.12", - "gtk4", - "libc", - "libshumate-sys", + "either", ] [[package]] -name = "libshumate-sys" -version = "0.6.0" +name = "itertools" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b238767323bdd28dc72471fa8a512ad0ae99a18d9668deb626c55f373f7aff81" -dependencies = [ - "gdk-pixbuf-sys", - "gdk4-sys", - "gio-sys 0.20.10", - "glib-sys 0.20.10", - "gobject-sys 0.20.10", - "gtk4-sys", - "libc", - "system-deps", -] - -[[package]] -name = "libsqlite3-sys" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "133c182a6a2c87864fe97778797e46c7e999672690dc9fa3ee8e241aa4a9c13f" +checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" dependencies = [ - "bindgen", - "cc", - "pkg-config", - "vcpkg", + "either", ] [[package]] -name = "linux-raw-sys" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" - -[[package]] -name = "litemap" -version = "0.8.2" +name = "itoa" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] -name = "litrs" -version = "1.0.0" +name = "ixdtf" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" +checksum = "2ceaf4c6c48465bead8cb6a0b7c4ee0c86ecbb31239032b9c66ab9a08d2f3ee1" [[package]] -name = "lock_api" -version = "0.4.14" +name = "javascriptcore6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +checksum = "03b28ed9c7c08f906b2a51bc2365eae2ba5e7db1249b89892f7ae4cbd602d1f4" dependencies = [ - "scopeguard", + "glib 0.20.12", + "javascriptcore6-sys", + "libc", ] [[package]] -name = "log" -version = "0.4.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" - -[[package]] -name = "loop9" -version = "0.1.5" +name = "javascriptcore6-sys" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +checksum = "4741e2a31c2145050dd4971f8dd51e92c840d5839a7124cc68a33c7325523a12" dependencies = [ - "imgref", + "glib-sys 0.20.10", + "gobject-sys 0.20.10", + "libc", + "system-deps", ] [[package]] -name = "lopdf" -version = "0.39.0" +name = "jiff" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f560f57dfb9142a02d673e137622fd515d4231e51feb8b4af28d92647d83f35b" +checksum = "961d16382652bfdd8c6f68b223b26a8c93e0d475c672f414411db31c6c5c900e" dependencies = [ - "aes 0.8.4", - "bitflags 2.12.1", - "cbc", - "ecb", - "encoding_rs", - "flate2", - "getrandom 0.3.4", - "indexmap", - "itoa", + "defmt", + "jiff-static", "log", - "md-5 0.10.6", - "nom 8.0.0", - "nom_locate", - "rand 0.9.4", - "rangemap", - "sha2 0.10.9", - "stringprep", - "thiserror 2.0.18", - "time", - "ttf-parser", - "weezl", + "portable-atomic", + "portable-atomic-util", + "serde_core", ] [[package]] -name = "lru" -version = "0.18.0" +name = "jiff-static" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9" +checksum = "d0879bd39df99c4c5e2c6615ccc026391a423dde10532c573e6086eb94a802cc" dependencies = [ - "hashbrown 0.17.1", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "lru-slab" -version = "0.1.2" +name = "jiff-tzdb" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +checksum = "c900ef84826f1338a557697dc8fc601df9ca9af4ac137c7fb61d4c6f2dfd3076" [[package]] -name = "lzma-rust2" -version = "0.16.4" +name = "jni" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce716bf1a316f47a280fc76295f6495b5bea4752bca01c3b3885e101b1c23c02" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" dependencies = [ - "sha2 0.11.0", + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", ] [[package]] -name = "mach2" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dae608c151f68243f2b000364e1f7b186d9c29845f7d2d85bd31b9ad77ad552b" - -[[package]] -name = "macro_magic" -version = "0.5.1" +name = "jni" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc33f9f0351468d26fbc53d9ce00a096c8522ecb42f19b50f34f2c422f76d21d" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" dependencies = [ - "macro_magic_core", - "macro_magic_macros", - "quote", - "syn 2.0.117", + "cfg-if", + "combine", + "jni-macros", + "jni-sys 0.4.1", + "log", + "simd_cesu8", + "thiserror 2.0.18", + "walkdir", + "windows-link 0.2.1", ] [[package]] -name = "macro_magic_core" -version = "0.5.1" +name = "jni-macros" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1687dc887e42f352865a393acae7cf79d98fab6351cde1f58e9e057da89bf150" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" dependencies = [ - "const-random", - "derive-syn-parse", - "macro_magic_core_macros", "proc-macro2", "quote", + "rustc_version", + "simd_cesu8", "syn 2.0.117", ] [[package]] -name = "macro_magic_core_macros" -version = "0.5.1" +name = "jni-sys" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", + "jni-sys 0.4.1", ] [[package]] -name = "macro_magic_macros" -version = "0.5.1" +name = "jni-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" dependencies = [ - "macro_magic_core", - "quote", - "syn 2.0.117", + "jni-sys-macros", ] [[package]] -name = "markup5ever" -version = "0.39.0" +name = "jni-sys-macros" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ - "log", - "tendril", - "web_atoms", + "quote", + "syn 2.0.117", ] [[package]] -name = "matchers" -version = "0.2.0" +name = "jobserver" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "regex-automata", + "getrandom 0.3.4", + "libc", ] [[package]] -name = "maybe-rayon" -version = "0.1.1" +name = "js-sys" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" dependencies = [ "cfg-if", - "rayon", + "futures-util", + "once_cell", + "wasm-bindgen", ] [[package]] -name = "md-5" -version = "0.10.6" +name = "jsonwebtoken" +version = "10.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +checksum = "eba32bfb4ffdeaca3e34431072faf01745c9b26d25504aa7a6cf5684334fc4fc" dependencies = [ - "cfg-if", - "digest 0.10.7", + "base64 0.22.1", + "ed25519-dalek", + "getrandom 0.2.17", + "hmac 0.12.1", + "js-sys", + "p256", + "p384", + "pem", + "rand 0.8.6", + "rsa", + "serde", + "serde_json", + "sha2 0.10.9", + "signature 2.2.0", + "simple_asn1", + "zeroize", ] [[package]] -name = "md-5" -version = "0.11.0" +name = "kamadak-exif" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" +checksum = "1130d80c7374efad55a117d715a3af9368f0fa7a2c54573afc15a188cd984837" dependencies = [ - "cfg-if", - "digest 0.11.3", + "mutate_once", ] [[package]] -name = "memchr" -version = "2.8.1" +name = "keccak" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" +dependencies = [ + "cpufeatures 0.2.17", +] [[package]] -name = "memoffset" -version = "0.9.1" +name = "keccak" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" dependencies = [ - "autocfg", + "cfg-if", + "cpufeatures 0.3.0", ] [[package]] -name = "mimalloc" -version = "0.1.52" +name = "kem" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d4139bb28d14ad1facf21d5eb8825051b326e172d216b39f6d31df53cc97862" +checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd" dependencies = [ - "libmimalloc-sys", + "crypto-common 0.2.2", + "rand_core 0.10.1", ] [[package]] -name = "mime" -version = "0.3.17" +name = "keyboard-types" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +checksum = "0fbe853b403ae61a04233030ae8a79d94975281ed9770a1f9e246732b534b28d" +dependencies = [ + "bitflags 2.12.1", + "serde", + "unicode-segmentation", +] [[package]] -name = "mime_guess" -version = "2.0.5" +name = "khronos-egl" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" dependencies = [ - "mime", - "unicase", + "libc", + "libloading", + "pkg-config", ] [[package]] -name = "minimal-lexical" -version = "0.2.1" +name = "khronos_api" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] -name = "miniz_oxide" -version = "0.8.9" +name = "kqueue" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +checksum = "273c0752728918e0ac4976f2b275b6fefb9ecd400585dec929419f3844cd87b5" dependencies = [ - "adler2", - "simd-adler32", + "kqueue-sys", + "libc", ] [[package]] -name = "mio" -version = "0.8.11" +name = "kqueue-sys" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" dependencies = [ + "bitflags 2.12.1", "libc", - "log", - "wasi", - "windows-sys 0.48.0", ] [[package]] -name = "mio" -version = "1.2.1" +name = "ksni" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "da9eeb3f510b6148ae68f963af2c1fbb0de4d9e4e05f82813cfb319837c3ad2b" dependencies = [ - "libc", - "wasi", - "windows-sys 0.61.2", + "futures-util", + "pastey 0.2.3", + "serde", + "tokio", + "zbus", ] [[package]] -name = "ml-kem" -version = "0.3.2" +name = "kstring" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e15f3e5b957493873e396a66914e83e616b6afe335cdef7efe5c6e1216aba66" +checksum = "558bf9508a558512042d3095138b1f7b8fe90c5467d94f9f1da28b3731c5dbd1" dependencies = [ - "const-oid 0.10.2", - "hybrid-array", - "kem", - "module-lattice", - "pkcs8 0.11.0", - "rand_core 0.10.1", - "sha3 0.11.0", + "static_assertions", ] [[package]] -name = "module-lattice" -version = "0.2.3" +name = "kurbo" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c61b87c9683ab7cb1c6871d261ad5479b6b10ceb52c4352aaca3b5d35a8febe" +checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62" dependencies = [ - "ctutils", - "hybrid-array", - "num-traits", + "arrayvec", + "euclid", + "smallvec", ] [[package]] -name = "moka" -version = "0.12.15" +name = "kurbo" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" +checksum = "ce9729cc38c18d86123ab736fd2e7151763ba226ac2490ec092d1dd148825e32" dependencies = [ - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "equivalent", - "parking_lot", - "portable-atomic", + "arrayvec", + "euclid", + "serde", "smallvec", - "tagptr", - "uuid", ] [[package]] -name = "mongocrypt" -version = "0.3.2" +name = "lazy_static" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da0cd419a51a5fb44819e290fbdb0665a54f21dead8923446a799c7f4d26ad9" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "bson", - "mongocrypt-sys", - "once_cell", - "serde", + "spin", ] [[package]] -name = "mongocrypt-sys" -version = "0.1.5+1.15.1" +name = "leb128fmt" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224484c5d09285a7b8cb0a0c117e847ebd14cb6e4470ecf68cdb89c503b0edb9" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] -name = "mongodb" -version = "3.7.0" +name = "lebe" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ba0cd571553d1f6936c6f180964776ece6ab7507dc8765f8a9c9c49d8cd00" +checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" + +[[package]] +name = "lettre" +version = "0.11.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0da65617f6cb926332d039cb578aad56178da86e128db6a1b09f4c94fa5b3349" dependencies = [ - "base64", - "bitflags 2.12.1", - "bson", - "derive-where", - "derive_more", - "futures-core", + "async-trait", + "base64 0.22.1", + "email-encoding", + "email_address", + "fastrand", "futures-io", "futures-util", - "hex", - "hickory-net", - "hickory-proto", - "hickory-resolver", - "hmac 0.12.1", - "macro_magic", - "md-5 0.10.6", - "mongocrypt", - "mongodb-internal-macros", - "pbkdf2 0.12.2", + "hostname", + "httpdate", + "idna", + "mime", + "nom 8.0.0", "percent-encoding", - "rand 0.9.4", - "rustc_version_runtime", + "quoted_printable", "rustls", - "serde", - "serde_bytes", - "serde_with", - "sha1 0.10.6", - "sha2 0.10.9", - "socket2", - "stringprep", - "strsim", - "take_mut", - "thiserror 2.0.18", + "socket2 0.6.4", "tokio", "tokio-rustls", - "tokio-util", - "typed-builder", - "uuid", + "url", "webpki-roots 1.0.7", ] [[package]] -name = "mongodb-internal-macros" -version = "3.7.0" +name = "libbz2-rs-sys" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ceb1a9a1018e470077ec94cf3a8c2d0e6da542b2c05ea95a59a0a627147375" -dependencies = [ - "macro_magic", - "proc-macro2", - "quote", - "syn 2.0.117", -] +checksum = "34b357333733e8260735ba5894eb928c02ecc69c78715f01a8019e7fa7f2db4c" [[package]] -name = "moxcms" -version = "0.8.1" +name = "libc" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" -dependencies = [ - "num-traits", - "pxfm", -] +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] -name = "mpris-server" -version = "0.10.0" +name = "libfuzzer-sys" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70cf358e9a9516cc35ed40eebd56cbe80f5190a7a2b3cd0c2d358c86b879132b" +checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" dependencies = [ - "async-channel", - "futures-channel", - "serde", - "trait-variant", - "zbus", + "arbitrary", + "cc", ] [[package]] -name = "muldiv" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0" - -[[package]] -name = "mutate_once" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af" - -[[package]] -name = "nanoid" -version = "0.5.0" +name = "libloading" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8628de41fe064cc3f0cf07f3d299ee3e73521adaff72278731d5c8cae3797873" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ - "rand 0.9.4", + "cfg-if", + "windows-link 0.2.1", ] [[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" +name = "libm" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] -name = "no_std_io2" -version = "0.9.4" +name = "libmimalloc-sys" +version = "0.1.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418abd1b6d34fbf6cae440dc874771b0525a604428704c76e48b29a5e67b8003" +checksum = "6a45a52f43e1c16f667ccfe4dd8c85b7f7c204fd5e3bf46c5b0db9a5c3c0b8e9" dependencies = [ - "memchr", + "cc", ] [[package]] -name = "nom" -version = "7.1.3" +name = "libredox" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ - "memchr", - "minimal-lexical", + "libc", ] [[package]] -name = "nom" -version = "8.0.0" +name = "libshumate" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" +checksum = "fc9921cc829fb2d546bd6a3a158a4134002098887e0bb01ceb4535521af610ec" dependencies = [ - "memchr", + "gdk-pixbuf", + "gdk4", + "gio", + "glib 0.20.12", + "gtk4", + "libc", + "libshumate-sys", ] [[package]] -name = "nom_locate" -version = "5.0.0" +name = "libshumate-sys" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b577e2d69827c4740cba2b52efaad1c4cc7c73042860b199710b3575c68438d" +checksum = "b238767323bdd28dc72471fa8a512ad0ae99a18d9668deb626c55f373f7aff81" dependencies = [ - "bytecount", - "memchr", - "nom 8.0.0", + "gdk-pixbuf-sys", + "gdk4-sys", + "gio-sys 0.20.10", + "glib-sys 0.20.10", + "gobject-sys 0.20.10", + "gtk4-sys", + "libc", + "system-deps", ] [[package]] -name = "nonzero_ext" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" - -[[package]] -name = "noop_proc_macro" -version = "0.3.0" +name = "libsqlite3-sys" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" +checksum = "133c182a6a2c87864fe97778797e46c7e999672690dc9fa3ee8e241aa4a9c13f" +dependencies = [ + "bindgen", + "cc", + "pkg-config", + "vcpkg", +] [[package]] -name = "notify" -version = "6.1.1" +name = "libz-sys" +version = "1.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" +checksum = "85bc9657773828b90eeb625adff10eeac83cc21bbfd8e23a03eaa8a33c9e28d9" dependencies = [ - "bitflags 2.12.1", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", + "cc", "libc", - "log", - "mio 0.8.11", - "walkdir", - "windows-sys 0.48.0", + "pkg-config", + "vcpkg", ] [[package]] -name = "nu-ansi-term" -version = "0.50.3" +name = "linebender_resource_handle" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys 0.61.2", -] +checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" [[package]] -name = "num-bigint" -version = "0.4.6" +name = "linux-raw-sys" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", - "serde", -] +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] -name = "num-bigint-dig" -version = "0.8.6" +name = "litemap" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" -dependencies = [ - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand 0.8.6", - "smallvec", - "zeroize", -] +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] -name = "num-conv" -version = "0.2.2" +name = "litemap" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] -name = "num-derive" -version = "0.4.2" +name = "litrs" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] -name = "num-integer" -version = "0.1.46" +name = "lock_api" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "num-traits", + "scopeguard", + "serde", ] [[package]] -name = "num-iter" -version = "0.1.45" +name = "log" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] -name = "num-rational" -version = "0.4.2" +name = "loop9" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" dependencies = [ - "num-bigint", - "num-integer", - "num-traits", + "imgref", ] [[package]] -name = "num-traits" -version = "0.2.19" +name = "lopdf" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "f560f57dfb9142a02d673e137622fd515d4231e51feb8b4af28d92647d83f35b" dependencies = [ - "autocfg", - "libm", + "aes 0.8.4", + "bitflags 2.12.1", + "cbc", + "ecb", + "encoding_rs", + "flate2", + "getrandom 0.3.4", + "indexmap", + "itoa", + "log", + "md-5 0.10.6", + "nom 8.0.0", + "nom_locate", + "rand 0.9.4", + "rangemap", + "sha2 0.10.9", + "stringprep", + "thiserror 2.0.18", + "time", + "ttf-parser", + "weezl", ] [[package]] -name = "objc2" -version = "0.6.4" +name = "lru" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +checksum = "8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9" dependencies = [ - "objc2-encode", + "hashbrown 0.17.1", ] [[package]] -name = "objc2-app-kit" -version = "0.3.2" +name = "lru-slab" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" -dependencies = [ - "bitflags 2.12.1", - "block2", - "libc", - "objc2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-core-image", - "objc2-core-text", - "objc2-core-video", - "objc2-foundation", - "objc2-quartz-core", -] +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] -name = "objc2-cloud-kit" -version = "0.3.2" +name = "lzma-rust2" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +checksum = "ce716bf1a316f47a280fc76295f6495b5bea4752bca01c3b3885e101b1c23c02" dependencies = [ - "bitflags 2.12.1", - "objc2", - "objc2-foundation", + "sha2 0.11.0", ] [[package]] -name = "objc2-core-data" -version = "0.3.2" +name = "mach2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" -dependencies = [ - "bitflags 2.12.1", - "objc2", - "objc2-foundation", -] +checksum = "dae608c151f68243f2b000364e1f7b186d9c29845f7d2d85bd31b9ad77ad552b" [[package]] -name = "objc2-core-foundation" -version = "0.3.2" +name = "macro_magic" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +checksum = "cc33f9f0351468d26fbc53d9ce00a096c8522ecb42f19b50f34f2c422f76d21d" dependencies = [ - "bitflags 2.12.1", - "block2", - "dispatch2", - "libc", - "objc2", + "macro_magic_core", + "macro_magic_macros", + "quote", + "syn 2.0.117", ] [[package]] -name = "objc2-core-graphics" -version = "0.3.2" +name = "macro_magic_core" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +checksum = "1687dc887e42f352865a393acae7cf79d98fab6351cde1f58e9e057da89bf150" dependencies = [ - "bitflags 2.12.1", - "dispatch2", - "objc2", - "objc2-core-foundation", - "objc2-io-surface", + "const-random", + "derive-syn-parse", + "macro_magic_core_macros", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "objc2-core-image" -version = "0.3.2" +name = "macro_magic_core_macros" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" dependencies = [ - "objc2", - "objc2-foundation", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "objc2-core-location" -version = "0.3.2" +name = "macro_magic_macros" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" +checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" dependencies = [ - "objc2", - "objc2-foundation", + "macro_magic_core", + "quote", + "syn 2.0.117", ] [[package]] -name = "objc2-core-text" -version = "0.3.2" +name = "malloc_buf" +version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" dependencies = [ - "bitflags 2.12.1", - "objc2", - "objc2-core-foundation", - "objc2-core-graphics", + "libc", ] [[package]] -name = "objc2-core-video" -version = "0.3.2" +name = "malloc_size_of_derive" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" +checksum = "f44db74bde26fdf427af23f1d146c211aed857c59e3be750cf2617f6b0b05c94" dependencies = [ - "bitflags 2.12.1", - "objc2", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-io-surface", + "proc-macro2", + "syn 2.0.117", + "synstructure", ] [[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-foundation" -version = "0.3.2" +name = "markup5ever" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +checksum = "7122d987ec5f704ee56f6e5b41a7d93722e9aae27ae07cafa4036c4d3f9757de" dependencies = [ - "bitflags 2.12.1", - "block2", - "libc", - "objc2", - "objc2-core-foundation", + "log", + "tendril", + "web_atoms", ] [[package]] -name = "objc2-io-surface" -version = "0.3.2" +name = "matchers" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "bitflags 2.12.1", - "objc2", - "objc2-core-foundation", + "regex-automata 0.4.14", ] [[package]] -name = "objc2-quartz-core" -version = "0.3.2" +name = "maybe-rayon" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" dependencies = [ - "bitflags 2.12.1", - "objc2", - "objc2-core-foundation", - "objc2-foundation", + "cfg-if", + "rayon", ] [[package]] -name = "objc2-ui-kit" -version = "0.3.2" +name = "md-5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ - "bitflags 2.12.1", - "block2", - "objc2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-core-image", - "objc2-core-location", - "objc2-core-text", - "objc2-foundation", - "objc2-quartz-core", - "objc2-user-notifications", + "cfg-if", + "digest 0.10.7", ] [[package]] -name = "objc2-user-notifications" -version = "0.3.2" +name = "md-5" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" +checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" dependencies = [ - "objc2", - "objc2-foundation", + "cfg-if", + "digest 0.11.3", ] [[package]] -name = "object" -version = "0.37.3" +name = "memchr" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" -dependencies = [ - "memchr", -] +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] -name = "once_cell" -version = "1.21.4" +name = "memmap2" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" dependencies = [ - "critical-section", - "portable-atomic", + "libc", ] [[package]] -name = "once_cell_polyfill" -version = "1.70.2" +name = "memoffset" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] [[package]] -name = "opaque-debug" -version = "0.3.1" +name = "metal" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" +dependencies = [ + "bitflags 2.12.1", + "block", + "core-graphics-types 0.2.0", + "foreign-types", + "log", + "objc", + "paste", +] [[package]] -name = "openssl-probe" -version = "0.2.1" +name = "mimalloc" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" +checksum = "2d4139bb28d14ad1facf21d5eb8825051b326e172d216b39f6d31df53cc97862" +dependencies = [ + "libmimalloc-sys", +] [[package]] -name = "option-ext" -version = "0.2.0" +name = "mime" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] -name = "option-operations" -version = "0.6.1" +name = "mime-multipart-hyper1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aca39cf52b03268400c16eeb9b56382ea3c3353409309b63f5c8f0b1faf42754" +checksum = "bc819448803ee517eb413276ca59613c2850a95c4fdcd87ec82c5a6ce6cdab1a" dependencies = [ - "pastey 0.2.3", + "buf-read-ext", + "http 1.4.1", + "httparse", + "log", + "mime", + "tempfile", + "textnonce", ] [[package]] -name = "ordered-stream" -version = "0.2.0" +name = "mime_guess" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ - "futures-core", - "pin-project-lite", + "mime", + "unicase", ] [[package]] -name = "ouroboros" -version = "0.17.2" +name = "minimal-lexical" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2ba07320d39dfea882faa70554b4bd342a5f273ed59ba7c1c6b4c840492c954" -dependencies = [ - "aliasable", - "ouroboros_macro", - "static_assertions", -] +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] -name = "ouroboros_macro" -version = "0.17.2" +name = "miniz_oxide" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ - "heck 0.4.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.117", + "adler2", + "simd-adler32", ] [[package]] -name = "p256" -version = "0.13.2" +name = "mio" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ - "ecdsa", - "elliptic-curve 0.13.8", - "primeorder", - "sha2 0.10.9", + "libc", + "log", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.48.0", ] [[package]] -name = "p384" -version = "0.13.1" +name = "mio" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ - "ecdsa", - "elliptic-curve 0.13.8", - "primeorder", - "sha2 0.10.9", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.61.2", ] [[package]] -name = "p521" -version = "0.13.3" +name = "ml-dsa" +version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc9e2161f1f215afdfce23677034ae137bbd45016a880c2eb3ba8eb95f085b2" +checksum = "ac4a46643af2001eafebcc37031fc459eb72d45057aac5d7a15b00046a2ad6db" dependencies = [ - "base16ct 0.2.0", - "ecdsa", - "elliptic-curve 0.13.8", - "primeorder", - "sha2 0.10.9", + "const-oid 0.9.6", + "hybrid-array 0.3.1", + "num-traits", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "sha3 0.10.9", + "signature 2.2.0", ] [[package]] -name = "pango" -version = "0.20.12" +name = "ml-kem" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6576b311f6df659397043a5fa8a021da8f72e34af180b44f7d57348de691ab5c" +checksum = "97befee0c869cb56f3118f49d0f9bb68c9e3f380dec23c1100aedc4ec3ba239a" dependencies = [ - "gio", - "glib 0.20.12", - "libc", - "pango-sys", + "hybrid-array 0.2.3", + "kem", + "rand_core 0.6.4", + "sha3 0.10.9", ] [[package]] -name = "pango-sys" -version = "0.20.10" +name = "ml-kem" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186909673fc09be354555c302c0b3dcf753cd9fa08dcb8077fa663c80fb243fa" +checksum = "5e15f3e5b957493873e396a66914e83e616b6afe335cdef7efe5c6e1216aba66" dependencies = [ - "glib-sys 0.20.10", - "gobject-sys 0.20.10", - "libc", - "system-deps", + "const-oid 0.10.2", + "hybrid-array 0.4.12", + "kem", + "module-lattice", + "pkcs8 0.11.0", + "rand_core 0.10.1", + "sha3 0.11.0", ] [[package]] -name = "parking" -version = "2.2.1" +name = "module-lattice" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" +checksum = "0c61b87c9683ab7cb1c6871d261ad5479b6b10ceb52c4352aaca3b5d35a8febe" +dependencies = [ + "ctutils", + "hybrid-array 0.4.12", + "num-traits", +] [[package]] -name = "parking_lot" -version = "0.12.5" +name = "moka" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" dependencies = [ - "lock_api", - "parking_lot_core", + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "equivalent", + "parking_lot", + "portable-atomic", + "smallvec", + "tagptr", + "uuid", ] [[package]] -name = "parking_lot_core" -version = "0.9.12" +name = "mongocrypt" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +checksum = "8da0cd419a51a5fb44819e290fbdb0665a54f21dead8923446a799c7f4d26ad9" dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", + "bson", + "mongocrypt-sys", + "once_cell", + "serde", ] [[package]] -name = "password-hash" -version = "0.5.0" +name = "mongocrypt-sys" +version = "0.1.5+1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +checksum = "224484c5d09285a7b8cb0a0c117e847ebd14cb6e4470ecf68cdb89c503b0edb9" + +[[package]] +name = "mongodb" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ba0cd571553d1f6936c6f180964776ece6ab7507dc8765f8a9c9c49d8cd00" dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", + "base64 0.22.1", + "bitflags 2.12.1", + "bson", + "derive-where", + "derive_more", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hickory-net", + "hickory-proto", + "hickory-resolver", + "hmac 0.12.1", + "macro_magic", + "md-5 0.10.6", + "mongocrypt", + "mongodb-internal-macros", + "pbkdf2 0.12.2", + "percent-encoding", + "rand 0.9.4", + "rustc_version_runtime", + "rustls", + "serde", + "serde_bytes", + "serde_with", + "sha1 0.10.6", + "sha2 0.10.9", + "socket2 0.6.4", + "stringprep", + "strsim", + "take_mut", + "thiserror 2.0.18", + "tokio", + "tokio-rustls", + "tokio-util", + "typed-builder", + "uuid", + "webpki-roots 1.0.7", ] [[package]] -name = "paste" -version = "1.0.15" +name = "mongodb-internal-macros" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "99ceb1a9a1018e470077ec94cf3a8c2d0e6da542b2c05ea95a59a0a627147375" +dependencies = [ + "macro_magic", + "proc-macro2", + "quote", + "syn 2.0.117", +] [[package]] -name = "pastey" -version = "0.1.1" +name = "moxcms" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" +dependencies = [ + "num-traits", + "pxfm", +] [[package]] -name = "pastey" -version = "0.2.3" +name = "mozangle" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" +checksum = "298bc7f83d5cca3789e47779e92cda492b75f11e03995bf558475bd9df2f639b" +dependencies = [ + "bindgen", + "cc", + "walkdir", +] [[package]] -name = "pathfinder_geometry" -version = "0.5.1" +name = "mozjs" +version = "0.15.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3" +checksum = "99f453559a827f30c1a60db68d95e0149d141031f2483334682a4ffd47ebf2f1" dependencies = [ + "bindgen", + "cc", + "encoding_rs", + "libc", "log", - "pathfinder_simd", + "mozjs_sys", + "num-traits", ] [[package]] -name = "pathfinder_simd" -version = "0.5.6" +name = "mozjs_sys" +version = "140.12.0-1-lts" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4500030c302e4af1d423f36f3b958d1aecb6c04184356ed5a833bf6b60435777" +checksum = "3ad338ebb43b9faa0d8268d88d662eeda8774812c5401c1a26a50b56ab5f5a9c" dependencies = [ - "rustc_version", + "bindgen", + "cc", + "encoding_c", + "encoding_c_mem", + "flate2", + "icu_capi", + "libc", + "libz-sys", + "tar", + "walkdir", ] [[package]] -name = "pbkdf2" -version = "0.12.2" +name = "mpris-server" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +checksum = "70cf358e9a9516cc35ed40eebd56cbe80f5190a7a2b3cd0c2d358c86b879132b" dependencies = [ - "digest 0.10.7", - "hmac 0.12.1", + "async-channel", + "futures-channel", + "serde", + "trait-variant", + "zbus", ] [[package]] -name = "pbkdf2" -version = "0.13.0" +name = "muldiv" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629" +checksum = "956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0" + +[[package]] +name = "mutate_once" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af" + +[[package]] +name = "naga" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c" dependencies = [ - "digest 0.11.3", - "hmac 0.13.0", + "arrayvec", + "bit-set", + "bitflags 2.12.1", + "cfg-if", + "cfg_aliases", + "codespan-reporting", + "half", + "hashbrown 0.15.5", + "hexf-parse", + "indexmap", + "libm", + "log", + "num-traits", + "once_cell", + "rustc-hash 1.1.0", + "spirv", + "thiserror 2.0.18", + "unicode-ident", ] [[package]] -name = "pem" -version = "3.0.6" +name = "nanoid" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +checksum = "8628de41fe064cc3f0cf07f3d299ee3e73521adaff72278731d5c8cae3797873" dependencies = [ - "base64", - "serde_core", + "rand 0.9.4", ] [[package]] -name = "pem-rfc7468" -version = "0.7.0" +name = "ndk-context" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ - "base64ct", + "jni-sys 0.3.1", ] [[package]] -name = "percent-encoding" -version = "2.3.2" +name = "new_debug_unreachable" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] -name = "perry" -version = "0.5.1258" +name = "no_std_io2" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418abd1b6d34fbf6cae440dc874771b0525a604428704c76e48b29a5e67b8003" dependencies = [ - "anyhow", - "base64", - "chrono", - "clap", - "console 0.16.3", - "dialoguer 0.12.0", - "dirs", - "dotenvy", - "ed25519-dalek", - "env_logger", - "flate2", - "fslock", - "futures-util", - "hex", - "indicatif", - "jsonwebtoken", - "libc", - "log", - "notify", - "perry-api-manifest", - "perry-codegen", - "perry-codegen-arkts", - "perry-codegen-glance", - "perry-codegen-js", - "perry-codegen-swiftui", - "perry-codegen-wasm", - "perry-codegen-wear-tiles", - "perry-diagnostics", - "perry-hir", - "perry-parser", - "perry-runtime", - "perry-transform", - "perry-types", - "perry-updater", - "rand 0.9.4", - "rayon", - "regex", - "reqwest", - "semver", - "serde", - "serde_json", - "sha2 0.11.0", - "swc_common", - "swc_ecma_ast", - "tar", - "tempfile", - "tokio", - "tokio-tungstenite", - "toml", - "url", - "walkdir", - "windows-sys 0.61.2", - "zip", - "zstd", + "memchr", ] [[package]] -name = "perry-api-manifest" -version = "0.5.1258" +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "serde", + "memchr", + "minimal-lexical", ] [[package]] -name = "perry-audio-miniaudio" -version = "0.5.1258" +name = "nom" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" dependencies = [ - "cc", - "libc", + "memchr", ] [[package]] -name = "perry-codegen" -version = "0.5.1258" +name = "nom-language" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2de2bc5b451bfedaef92c90b8939a8fff5770bdcc1fafd6239d086aab8fa6b29" dependencies = [ - "anyhow", - "log", - "perry-api-manifest", - "perry-dispatch", - "perry-hir", - "perry-types", - "serde", - "serde_json", - "thiserror 1.0.69", + "nom 8.0.0", ] [[package]] -name = "perry-codegen-arkts" -version = "0.5.1258" +name = "nom-rfc8288" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaf26c6675a34266d3d71137fc5d876adb5e3d74963181397fd39742a8341576" dependencies = [ - "anyhow", - "perry-hir", - "perry-types", + "itertools 0.14.0", + "nom 8.0.0", + "nom-language", + "thiserror 2.0.18", ] [[package]] -name = "perry-codegen-glance" -version = "0.5.1258" +name = "nom_locate" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b577e2d69827c4740cba2b52efaad1c4cc7c73042860b199710b3575c68438d" dependencies = [ - "anyhow", - "perry-hir", + "bytecount", + "memchr", + "nom 8.0.0", ] [[package]] -name = "perry-codegen-js" -version = "0.5.1258" -dependencies = [ - "anyhow", - "perry-dispatch", - "perry-hir", - "perry-types", -] +name = "nonzero_ext" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" [[package]] -name = "perry-codegen-swiftui" -version = "0.5.1258" -dependencies = [ - "anyhow", - "perry-hir", - "perry-types", -] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" [[package]] -name = "perry-codegen-wasm" -version = "0.5.1258" +name = "notify" +version = "6.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ - "anyhow", - "base64", - "perry-codegen-js", - "perry-dispatch", - "perry-hir", - "perry-types", - "wasm-encoder 0.252.0", + "bitflags 2.12.1", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "log", + "mio 0.8.11", + "walkdir", + "windows-sys 0.48.0", ] [[package]] -name = "perry-codegen-wear-tiles" -version = "0.5.1258" +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "anyhow", - "perry-hir", + "windows-sys 0.61.2", ] [[package]] -name = "perry-container-compose" -version = "0.5.1258" +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "anyhow", - "async-trait", - "atty", - "clap", - "console 0.16.3", - "dashmap", - "dialoguer 0.11.0", - "dotenvy", - "hex", - "indexmap", - "md-5 0.11.0", - "once_cell", - "proptest", - "rand 0.8.6", - "regex", + "num-integer", + "num-traits", "serde", - "serde_json", - "serde_yaml", - "thiserror 1.0.69", - "tokio", - "tracing", - "tracing-subscriber", - "which", ] [[package]] -name = "perry-container-e2e" -version = "0.5.1258" +name = "num-bigint-dig" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" dependencies = [ - "anyhow", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.6", + "serde", + "smallvec", + "zeroize", ] [[package]] -name = "perry-diagnostics" -version = "0.5.1258" +name = "num-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" dependencies = [ - "serde", - "serde_json", + "autocfg", + "num-traits", ] [[package]] -name = "perry-dispatch" -version = "0.5.1258" +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] -name = "perry-doc-fixture-my-bindings" -version = "0.1.0" +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ - "perry-ffi", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "perry-doc-tests" -version = "0.5.1258" +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "anyhow", - "clap", - "dssim-core", - "image", - "rgb", - "serde", - "serde_json", - "tempfile", - "walkdir", + "num-traits", ] [[package]] -name = "perry-ext-ads" -version = "0.5.1258" +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ - "block2", - "objc2", - "objc2-foundation", - "perry-ffi", + "autocfg", + "num-integer", + "num-traits", ] [[package]] -name = "perry-ext-argon2" -version = "0.5.1258" +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "argon2", - "perry-ffi", + "num-bigint", + "num-integer", + "num-traits", ] [[package]] -name = "perry-ext-axios" -version = "0.5.1258" +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "perry-ffi", - "reqwest", - "tokio", + "autocfg", + "libm", ] [[package]] -name = "perry-ext-bcrypt" -version = "0.5.1258" -dependencies = [ - "bcrypt", - "perry-ffi", -] - -[[package]] -name = "perry-ext-better-sqlite3" -version = "0.5.1258" +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "perry-ffi", - "rusqlite", + "hermit-abi 0.5.2", + "libc", ] [[package]] -name = "perry-ext-cheerio" -version = "0.5.1258" +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" dependencies = [ - "perry-ffi", - "scraper", + "libc", ] [[package]] -name = "perry-ext-commander" -version = "0.5.1258" +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ - "perry-ffi", - "perry-runtime", + "malloc_buf", ] [[package]] -name = "perry-ext-cron" -version = "0.5.1258" +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" dependencies = [ - "chrono", - "cron", - "perry-ffi", - "perry-runtime", + "objc2-encode", ] [[package]] -name = "perry-ext-dayjs" -version = "0.5.1258" +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "chrono", - "perry-ffi", + "bitflags 2.12.1", + "block2", + "libc", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-text", + "objc2-core-video", + "objc2-foundation", + "objc2-quartz-core", ] [[package]] -name = "perry-ext-decimal" -version = "0.5.1258" +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "perry-ffi", - "rust_decimal", + "bitflags 2.12.1", + "objc2", + "objc2-foundation", ] [[package]] -name = "perry-ext-dotenv" -version = "0.5.1258" +name = "objc2-core-data" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "perry-ffi", - "serde_json", + "bitflags 2.12.1", + "objc2", + "objc2-foundation", ] [[package]] -name = "perry-ext-ethers" -version = "0.5.1258" +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "perry-ffi", - "rand 0.8.6", + "bitflags 2.12.1", + "block2", + "dispatch2", + "libc", + "objc2", ] [[package]] -name = "perry-ext-events" -version = "0.5.1258" +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "perry-ffi", - "perry-runtime", + "bitflags 2.12.1", + "block2", + "dispatch2", + "libc", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", + "objc2-metal", ] [[package]] -name = "perry-ext-exponential-backoff" -version = "0.5.1258" +name = "objc2-core-image" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" dependencies = [ - "perry-ffi", + "objc2", + "objc2-foundation", ] [[package]] -name = "perry-ext-fastify" -version = "0.5.1258" +name = "objc2-core-location" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" dependencies = [ - "bytes", - "http-body-util", - "hyper", - "hyper-util", - "lazy_static", - "perry-ext-ws", - "perry-ffi", - "perry-runtime", - "serde_json", - "socket2", - "tokio", - "tokio-tungstenite", + "objc2", + "objc2-foundation", ] [[package]] -name = "perry-ext-fetch" -version = "0.5.1258" +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bytes", - "lazy_static", - "perry-ffi", - "perry-runtime", - "reqwest", - "serde_json", - "tokio", + "bitflags 2.12.1", + "block2", + "libc", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", ] [[package]] -name = "perry-ext-http" -version = "0.5.1258" +name = "objc2-core-video" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bytes", - "lazy_static", - "perry-ext-http-server", - "perry-ffi", - "perry-runtime", - "reqwest", - "serde_json", - "tokio", + "bitflags 2.12.1", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-io-surface", ] [[package]] -name = "perry-ext-http-server" -version = "0.5.1258" -dependencies = [ - "bytes", - "h2", - "http-body-util", - "hyper", - "hyper-util", - "lazy_static", - "perry-ext-net", - "perry-ext-ws", - "perry-ffi", - "perry-runtime", - "rustls", - "rustls-pemfile", - "serde_json", - "socket2", - "tokio", - "tokio-rustls", - "tokio-tungstenite", -] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" [[package]] -name = "perry-ext-ioredis" -version = "0.5.1258" +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "lazy_static", - "perry-ffi", - "redis", - "tokio", + "bitflags 2.12.1", + "block2", + "libc", + "objc2", + "objc2-core-foundation", ] [[package]] -name = "perry-ext-jsonwebtoken" -version = "0.5.1258" +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "base64", - "jsonwebtoken", - "perry-ffi", - "serde", - "serde_json", + "bitflags 2.12.1", + "libc", + "objc2", + "objc2-core-foundation", ] [[package]] -name = "perry-ext-lru-cache" -version = "0.5.1258" +name = "objc2-metal" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ - "lru", - "perry-ffi", + "bitflags 2.12.1", + "objc2", + "objc2-foundation", ] [[package]] -name = "perry-ext-moment" -version = "0.5.1258" +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "chrono", - "perry-ffi", + "bitflags 2.12.1", + "objc2", + "objc2-core-foundation", + "objc2-foundation", ] [[package]] -name = "perry-ext-mongodb" -version = "0.5.1258" +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bson", - "futures-util", - "mongodb", - "perry-ffi", - "serde_json", - "tokio", + "bitflags 2.12.1", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-location", + "objc2-core-text", + "objc2-foundation", + "objc2-quartz-core", + "objc2-user-notifications", ] [[package]] -name = "perry-ext-mysql2" -version = "0.5.1258" +name = "objc2-user-notifications" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" dependencies = [ - "chrono", - "perry-ffi", - "sqlx", - "tokio", + "objc2", + "objc2-foundation", ] [[package]] -name = "perry-ext-nanoid" -version = "0.5.1258" +name = "object" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ - "nanoid", - "perry-ffi", - "rand 0.9.4", + "memchr", ] [[package]] -name = "perry-ext-net" -version = "0.5.1258" +name = "ocb3" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c196e0276c471c843dd5777e7543a36a298a4be942a2a688d8111cd43390dedb" dependencies = [ - "bytes", - "perry-ffi", - "perry-runtime", - "rustls", - "rustls-native-certs", - "tokio", - "tokio-rustls", + "aead", + "cipher 0.4.4", + "ctr", + "subtle", ] [[package]] -name = "perry-ext-nodemailer" -version = "0.5.1258" +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" dependencies = [ - "lettre", - "perry-ffi", - "tokio", - "uuid", + "critical-section", + "portable-atomic", ] [[package]] -name = "perry-ext-pdf" -version = "0.5.1258" -dependencies = [ - "perry-ffi", - "printpdf", -] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] -name = "perry-ext-pg" -version = "0.5.1258" +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + +[[package]] +name = "openxr" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40adeaa3219baa4412a522742eeee152656763008a39c68a50fd3027fe37625e" dependencies = [ - "perry-ffi", - "sqlx", - "tokio", + "libc", + "libloading", + "ndk-context", + "openxr-sys", ] [[package]] -name = "perry-ext-ratelimit" -version = "0.5.1258" +name = "openxr-sys" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8b94052f57756896c60b504769568fc538808210e77190b69c69b467ee7eaaf" dependencies = [ - "governor", - "perry-ffi", + "libc", ] [[package]] -name = "perry-ext-sharp" -version = "0.5.1258" +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "option-operations" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aca39cf52b03268400c16eeb9b56382ea3c3353409309b63f5c8f0b1faf42754" dependencies = [ - "fast_image_resize", - "image", - "kamadak-exif", - "perry-ffi", + "pastey 0.2.3", ] [[package]] -name = "perry-ext-slugify" -version = "0.5.1258" +name = "ordered-float" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" dependencies = [ - "perry-ffi", + "num-traits", ] [[package]] -name = "perry-ext-streams" -version = "0.5.1258" +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" dependencies = [ - "lazy_static", - "perry-ffi", - "perry-runtime", + "futures-core", + "pin-project-lite", ] [[package]] -name = "perry-ext-uuid" -version = "0.5.1258" +name = "ordermap" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063" + +[[package]] +name = "ouroboros" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2ba07320d39dfea882faa70554b4bd342a5f273ed59ba7c1c6b4c840492c954" dependencies = [ - "perry-ffi", - "uuid", + "aliasable", + "ouroboros_macro", + "static_assertions", ] [[package]] -name = "perry-ext-validator" -version = "0.5.1258" +name = "ouroboros_macro" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8" dependencies = [ - "perry-ffi", - "regex", - "serde_json", - "validator", + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "perry-ext-ws" -version = "0.5.1258" +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ - "futures-util", - "lazy_static", - "perry-ffi", - "perry-runtime", - "rustls", - "tokio", - "tokio-tungstenite", + "ecdsa", + "elliptic-curve 0.13.8", + "primeorder", + "sha2 0.10.9", ] [[package]] -name = "perry-ext-zlib" -version = "0.5.1258" +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" dependencies = [ - "brotli", - "flate2", - "perry-ffi", + "ecdsa", + "elliptic-curve 0.13.8", + "primeorder", + "sha2 0.10.9", ] [[package]] -name = "perry-ffi" -version = "0.5.1258" +name = "p521" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc9e2161f1f215afdfce23677034ae137bbd45016a880c2eb3ba8eb95f085b2" dependencies = [ - "dashmap", - "once_cell", - "perry-runtime", + "base16ct 0.2.0", + "ecdsa", + "elliptic-curve 0.13.8", + "primeorder", + "rand_core 0.6.4", + "sha2 0.10.9", ] [[package]] -name = "perry-hir" -version = "0.5.1258" +name = "pango" +version = "0.20.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6576b311f6df659397043a5fa8a021da8f72e34af180b44f7d57348de691ab5c" dependencies = [ - "anyhow", - "perry-api-manifest", - "perry-diagnostics", - "perry-parser", - "perry-types", - "perry-ui-model", - "serde", - "serde_json", - "stacker", - "swc_common", - "swc_ecma_ast", - "thiserror 1.0.69", + "gio", + "glib 0.20.12", + "libc", + "pango-sys", ] [[package]] -name = "perry-parser" -version = "0.5.1258" +name = "pango-sys" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186909673fc09be354555c302c0b3dcf753cd9fa08dcb8077fa663c80fb243fa" dependencies = [ - "anyhow", - "perry-diagnostics", - "swc_common", - "swc_ecma_ast", - "swc_ecma_parser", - "thiserror 1.0.69", + "glib-sys 0.20.10", + "gobject-sys 0.20.10", + "libc", + "system-deps", ] [[package]] -name = "perry-runtime" -version = "0.5.1258" -dependencies = [ - "anyhow", - "base64", - "dirs", - "encoding_rs", - "fancy-regex", - "hickory-proto", - "hostname", - "icu_locale_core", - "idna", - "itoa", - "lazy_static", +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", "libc", - "mach2", - "mimalloc", - "perry-dispatch", - "rand 0.8.6", - "regex", - "resolv-conf", - "ryu", - "serde_json", - "socket2", - "taffy", - "temporal_rs", - "thiserror 1.0.69", - "unicode-normalization", - "unicode-segmentation", - "url", - "windows-sys 0.61.2", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", ] [[package]] -name = "perry-runtime-static" -version = "0.5.1258" +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ - "perry-runtime", + "base64ct", + "rand_core 0.6.4", + "subtle", ] [[package]] -name = "perry-stdlib" +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pastey" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" + +[[package]] +name = "pastey" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" + +[[package]] +name = "pathfinder_geometry" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3" +dependencies = [ + "log", + "pathfinder_simd", +] + +[[package]] +name = "pathfinder_simd" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4500030c302e4af1d423f36f3b958d1aecb6c04184356ed5a833bf6b60435777" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "hmac 0.12.1", +] + +[[package]] +name = "pbkdf2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629" +dependencies = [ + "digest 0.11.3", + "hmac 0.13.0", +] + +[[package]] +name = "peek-poke" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef60922033e31835f6cf98b9b81b58368037b71d2a81928985cd9d0b3b3171fb" +dependencies = [ + "euclid", + "peek-poke-derive", +] + +[[package]] +name = "peek-poke-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271f78bae1e699b58c180a384a2e8d78ccbb60b853e15db92339725f3a2764d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "pem" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +dependencies = [ + "base64 0.22.1", + "serde_core", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "peniko" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3c76095c9a636173600478e0373218c7b955335048c2bcd12dc6a79657649d8" +dependencies = [ + "bytemuck", + "color", + "kurbo 0.12.0", + "linebender_resource_handle", + "smallvec", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "perry" version = "0.5.1258" dependencies = [ - "aes 0.8.4", - "aes-gcm", - "aes-kw", "anyhow", - "argon2", - "base64", - "bcrypt", - "brotli", - "bson", - "bytes", - "cbc", - "chacha20poly1305", + "base64 0.22.1", "chrono", "clap", - "cron", - "ctr", - "dashmap", - "ecb", + "console 0.16.3", + "dialoguer 0.12.0", + "dirs", + "dotenvy", "ed25519-dalek", - "ed448-goldilocks", + "env_logger 0.10.2", "flate2", + "fslock", "futures-util", - "ghash", - "governor", "hex", - "hkdf 0.13.0", - "hmac 0.13.0", - "http-body-util", - "hyper", - "hyper-util", - "image", - "itoa", + "indicatif", "jsonwebtoken", - "lazy_static", - "lettre", "libc", - "lru", - "md-5 0.11.0", - "ml-kem", - "mongodb", - "nanoid", - "once_cell", - "p256", - "p384", - "p521", - "pbkdf2 0.13.0", - "perry-container-compose", + "log", + "notify", + "perry-api-manifest", + "perry-codegen", + "perry-codegen-arkts", + "perry-codegen-glance", + "perry-codegen-js", + "perry-codegen-swiftui", + "perry-codegen-wasm", + "perry-codegen-wear-tiles", + "perry-diagnostics", + "perry-hir", + "perry-parser", "perry-runtime", + "perry-transform", + "perry-types", "perry-updater", - "proptest", - "rand 0.8.6", - "redis", + "rand 0.9.4", + "rayon", "regex", "reqwest", - "rsa", - "rusqlite", - "rust_decimal", - "rustls", - "rustls-native-certs", - "rustls-pemfile", - "ryu", - "scraper", - "scrypt", + "semver", "serde", "serde_json", - "serde_yaml", - "sha1 0.10.6", - "sha1 0.11.0", "sha2 0.11.0", - "sha3 0.10.9", - "sha3 0.12.0", - "sha3-utils", - "shake", - "spki 0.7.3", - "sqlx", - "thiserror 1.0.69", + "swc_common", + "swc_ecma_ast", + "tar", + "tempfile", "tokio", - "tokio-cron-scheduler", - "tokio-rustls", "tokio-tungstenite", - "uuid", - "validator", + "toml", + "url", + "walkdir", "windows-sys 0.61.2", - "x25519-dalek", - "x448", - "x509-cert", + "zip", "zstd", ] [[package]] -name = "perry-stdlib-static" -version = "0.5.1258" +name = "perry-api-manifest" +version = "0.5.1258" +dependencies = [ + "serde", +] + +[[package]] +name = "perry-audio-miniaudio" +version = "0.5.1258" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "perry-codegen" +version = "0.5.1258" +dependencies = [ + "anyhow", + "log", + "perry-api-manifest", + "perry-dispatch", + "perry-hir", + "perry-types", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "perry-codegen-arkts" +version = "0.5.1258" +dependencies = [ + "anyhow", + "perry-hir", + "perry-types", +] + +[[package]] +name = "perry-codegen-glance" +version = "0.5.1258" +dependencies = [ + "anyhow", + "perry-hir", +] + +[[package]] +name = "perry-codegen-js" +version = "0.5.1258" +dependencies = [ + "anyhow", + "perry-dispatch", + "perry-hir", + "perry-types", +] + +[[package]] +name = "perry-codegen-swiftui" +version = "0.5.1258" +dependencies = [ + "anyhow", + "perry-hir", + "perry-types", +] + +[[package]] +name = "perry-codegen-wasm" +version = "0.5.1258" +dependencies = [ + "anyhow", + "base64 0.22.1", + "perry-codegen-js", + "perry-dispatch", + "perry-hir", + "perry-types", + "wasm-encoder 0.252.0", +] + +[[package]] +name = "perry-codegen-wear-tiles" +version = "0.5.1258" +dependencies = [ + "anyhow", + "perry-hir", +] + +[[package]] +name = "perry-container-compose" +version = "0.5.1258" +dependencies = [ + "anyhow", + "async-trait", + "atty", + "clap", + "console 0.16.3", + "dashmap", + "dialoguer 0.11.0", + "dotenvy", + "hex", + "indexmap", + "md-5 0.11.0", + "once_cell", + "proptest", + "rand 0.8.6", + "regex", + "serde", + "serde_json", + "serde_yaml", + "thiserror 1.0.69", + "tokio", + "tracing", + "tracing-subscriber", + "which", +] + +[[package]] +name = "perry-container-e2e" +version = "0.5.1258" +dependencies = [ + "anyhow", +] + +[[package]] +name = "perry-diagnostics" +version = "0.5.1258" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "perry-dispatch" +version = "0.5.1258" + +[[package]] +name = "perry-doc-fixture-my-bindings" +version = "0.1.0" +dependencies = [ + "perry-ffi", +] + +[[package]] +name = "perry-doc-tests" +version = "0.5.1258" +dependencies = [ + "anyhow", + "clap", + "dssim-core", + "image", + "rgb", + "serde", + "serde_json", + "tempfile", + "walkdir", +] + +[[package]] +name = "perry-ext-ads" +version = "0.5.1258" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", + "perry-ffi", +] + +[[package]] +name = "perry-ext-argon2" +version = "0.5.1258" +dependencies = [ + "argon2", + "perry-ffi", +] + +[[package]] +name = "perry-ext-axios" +version = "0.5.1258" +dependencies = [ + "perry-ffi", + "reqwest", + "tokio", +] + +[[package]] +name = "perry-ext-bcrypt" +version = "0.5.1258" +dependencies = [ + "bcrypt", + "perry-ffi", +] + +[[package]] +name = "perry-ext-better-sqlite3" +version = "0.5.1258" +dependencies = [ + "perry-ffi", + "rusqlite", +] + +[[package]] +name = "perry-ext-cheerio" +version = "0.5.1258" +dependencies = [ + "perry-ffi", + "scraper", +] + +[[package]] +name = "perry-ext-commander" +version = "0.5.1258" +dependencies = [ + "perry-ffi", + "perry-runtime", +] + +[[package]] +name = "perry-ext-cron" +version = "0.5.1258" +dependencies = [ + "chrono", + "cron", + "perry-ffi", + "perry-runtime", +] + +[[package]] +name = "perry-ext-dayjs" +version = "0.5.1258" +dependencies = [ + "chrono", + "perry-ffi", +] + +[[package]] +name = "perry-ext-decimal" +version = "0.5.1258" +dependencies = [ + "perry-ffi", + "rust_decimal", +] + +[[package]] +name = "perry-ext-dotenv" +version = "0.5.1258" +dependencies = [ + "perry-ffi", + "serde_json", +] + +[[package]] +name = "perry-ext-ethers" +version = "0.5.1258" +dependencies = [ + "perry-ffi", + "rand 0.8.6", +] + +[[package]] +name = "perry-ext-events" +version = "0.5.1258" +dependencies = [ + "perry-ffi", + "perry-runtime", +] + +[[package]] +name = "perry-ext-exponential-backoff" +version = "0.5.1258" +dependencies = [ + "perry-ffi", +] + +[[package]] +name = "perry-ext-fastify" +version = "0.5.1258" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.10.1", + "hyper-util", + "lazy_static", + "perry-ext-ws", + "perry-ffi", + "perry-runtime", + "serde_json", + "socket2 0.6.4", + "tokio", + "tokio-tungstenite", +] + +[[package]] +name = "perry-ext-fetch" +version = "0.5.1258" +dependencies = [ + "bytes", + "lazy_static", + "perry-ffi", + "perry-runtime", + "reqwest", + "serde_json", + "tokio", +] + +[[package]] +name = "perry-ext-http" +version = "0.5.1258" +dependencies = [ + "bytes", + "lazy_static", + "perry-ext-http-server", + "perry-ffi", + "perry-runtime", + "reqwest", + "serde_json", + "tokio", +] + +[[package]] +name = "perry-ext-http-server" +version = "0.5.1258" +dependencies = [ + "bytes", + "h2 0.4.14", + "http-body-util", + "hyper 1.10.1", + "hyper-util", + "lazy_static", + "perry-ext-net", + "perry-ext-ws", + "perry-ffi", + "perry-runtime", + "rustls", + "rustls-pemfile", + "serde_json", + "socket2 0.6.4", + "tokio", + "tokio-rustls", + "tokio-tungstenite", +] + +[[package]] +name = "perry-ext-ioredis" +version = "0.5.1258" +dependencies = [ + "lazy_static", + "perry-ffi", + "redis", + "tokio", +] + +[[package]] +name = "perry-ext-jsonwebtoken" +version = "0.5.1258" +dependencies = [ + "base64 0.22.1", + "jsonwebtoken", + "perry-ffi", + "serde", + "serde_json", +] + +[[package]] +name = "perry-ext-lru-cache" +version = "0.5.1258" +dependencies = [ + "lru", + "perry-ffi", +] + +[[package]] +name = "perry-ext-moment" +version = "0.5.1258" +dependencies = [ + "chrono", + "perry-ffi", +] + +[[package]] +name = "perry-ext-mongodb" +version = "0.5.1258" +dependencies = [ + "bson", + "futures-util", + "mongodb", + "perry-ffi", + "serde_json", + "tokio", +] + +[[package]] +name = "perry-ext-mysql2" +version = "0.5.1258" +dependencies = [ + "chrono", + "perry-ffi", + "sqlx", + "tokio", +] + +[[package]] +name = "perry-ext-nanoid" +version = "0.5.1258" +dependencies = [ + "nanoid", + "perry-ffi", + "rand 0.9.4", +] + +[[package]] +name = "perry-ext-net" +version = "0.5.1258" +dependencies = [ + "bytes", + "perry-ffi", + "perry-runtime", + "rustls", + "rustls-native-certs", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "perry-ext-nodemailer" +version = "0.5.1258" +dependencies = [ + "lettre", + "perry-ffi", + "tokio", + "uuid", +] + +[[package]] +name = "perry-ext-pdf" +version = "0.5.1258" +dependencies = [ + "perry-ffi", + "printpdf", +] + +[[package]] +name = "perry-ext-pg" +version = "0.5.1258" +dependencies = [ + "perry-ffi", + "sqlx", + "tokio", +] + +[[package]] +name = "perry-ext-ratelimit" +version = "0.5.1258" +dependencies = [ + "governor", + "perry-ffi", +] + +[[package]] +name = "perry-ext-sharp" +version = "0.5.1258" +dependencies = [ + "fast_image_resize", + "image", + "kamadak-exif", + "perry-ffi", +] + +[[package]] +name = "perry-ext-slugify" +version = "0.5.1258" +dependencies = [ + "perry-ffi", +] + +[[package]] +name = "perry-ext-streams" +version = "0.5.1258" +dependencies = [ + "lazy_static", + "perry-ffi", + "perry-runtime", +] + +[[package]] +name = "perry-ext-uuid" +version = "0.5.1258" +dependencies = [ + "perry-ffi", + "uuid", +] + +[[package]] +name = "perry-ext-validator" +version = "0.5.1258" +dependencies = [ + "perry-ffi", + "regex", + "serde_json", + "validator", +] + +[[package]] +name = "perry-ext-ws" +version = "0.5.1258" +dependencies = [ + "futures-util", + "lazy_static", + "perry-ffi", + "perry-runtime", + "rustls", + "tokio", + "tokio-tungstenite", +] + +[[package]] +name = "perry-ext-zlib" +version = "0.5.1258" +dependencies = [ + "brotli", + "flate2", + "perry-ffi", +] + +[[package]] +name = "perry-ffi" +version = "0.5.1258" +dependencies = [ + "dashmap", + "once_cell", + "perry-runtime", +] + +[[package]] +name = "perry-hir" +version = "0.5.1258" +dependencies = [ + "anyhow", + "perry-api-manifest", + "perry-diagnostics", + "perry-parser", + "perry-types", + "perry-ui-model", + "serde", + "serde_json", + "stacker", + "swc_common", + "swc_ecma_ast", + "thiserror 1.0.69", +] + +[[package]] +name = "perry-parser" +version = "0.5.1258" +dependencies = [ + "anyhow", + "perry-diagnostics", + "swc_common", + "swc_ecma_ast", + "swc_ecma_parser", + "thiserror 1.0.69", +] + +[[package]] +name = "perry-runtime" +version = "0.5.1258" +dependencies = [ + "anyhow", + "base64 0.22.1", + "dirs", + "encoding_rs", + "fancy-regex", + "hickory-proto", + "hostname", + "icu_locale_core", + "idna", + "itoa", + "lazy_static", + "libc", + "mach2", + "mimalloc", + "perry-dispatch", + "rand 0.8.6", + "regex", + "resolv-conf", + "ryu", + "serde_json", + "socket2 0.6.4", + "taffy 0.7.7", + "temporal_rs", + "thiserror 1.0.69", + "unicode-normalization", + "unicode-segmentation", + "url", + "windows-sys 0.61.2", +] + +[[package]] +name = "perry-runtime-static" +version = "0.5.1258" +dependencies = [ + "perry-runtime", +] + +[[package]] +name = "perry-stdlib" +version = "0.5.1258" +dependencies = [ + "aes 0.8.4", + "aes-gcm", + "aes-kw 0.3.1", + "anyhow", + "argon2", + "base64 0.22.1", + "bcrypt", + "brotli", + "bson", + "bytes", + "cbc", + "chacha20poly1305", + "chrono", + "clap", + "cron", + "ctr", + "dashmap", + "ecb", + "ed25519-dalek", + "ed448-goldilocks", + "flate2", + "futures-util", + "ghash", + "governor", + "hex", + "hkdf 0.13.0", + "hmac 0.13.0", + "http-body-util", + "hyper 1.10.1", + "hyper-util", + "image", + "itoa", + "jsonwebtoken", + "lazy_static", + "lettre", + "libc", + "lru", + "md-5 0.11.0", + "ml-kem 0.3.2", + "mongodb", + "nanoid", + "once_cell", + "p256", + "p384", + "p521", + "pbkdf2 0.13.0", + "perry-container-compose", + "perry-runtime", + "perry-updater", + "proptest", + "rand 0.8.6", + "redis", + "regex", + "reqwest", + "rsa", + "rusqlite", + "rust_decimal", + "rustls", + "rustls-native-certs", + "rustls-pemfile", + "ryu", + "scraper", + "scrypt", + "serde", + "serde_json", + "serde_yaml", + "sha1 0.10.6", + "sha1 0.11.0", + "sha2 0.11.0", + "sha3 0.10.9", + "sha3 0.12.0", + "sha3-utils", + "shake", + "spki 0.7.3", + "sqlx", + "thiserror 1.0.69", + "tokio", + "tokio-cron-scheduler", + "tokio-rustls", + "tokio-tungstenite", + "uuid", + "validator", + "windows-sys 0.61.2", + "x25519-dalek", + "x448", + "x509-cert", + "zstd", +] + +[[package]] +name = "perry-stdlib-static" +version = "0.5.1258" +dependencies = [ + "perry-stdlib", +] + +[[package]] +name = "perry-transform" +version = "0.5.1258" +dependencies = [ + "anyhow", + "perry-hir", + "perry-types", + "thiserror 1.0.69", +] + +[[package]] +name = "perry-types" +version = "0.5.1258" +dependencies = [ + "anyhow", + "thiserror 1.0.69", +] + +[[package]] +name = "perry-ui" +version = "0.5.1258" +dependencies = [ + "perry-ui-model", +] + +[[package]] +name = "perry-ui-android" +version = "0.5.1258" +dependencies = [ + "base64 0.22.1", + "itoa", + "jni 0.21.1", + "libc", + "perry-audio-miniaudio", + "perry-ext-sharp", + "perry-runtime", + "perry-ui", + "ryu", + "serde_json", + "tungstenite 0.24.0", +] + +[[package]] +name = "perry-ui-geisterhand" +version = "0.5.1258" +dependencies = [ + "rand 0.8.6", + "serde", + "serde_json", + "tiny_http", +] + +[[package]] +name = "perry-ui-gtk4" +version = "0.5.1258" +dependencies = [ + "base64 0.22.1", + "cairo-rs 0.22.0", + "dirs", + "gstreamer", + "gstreamer-app", + "gtk4", + "ksni", + "libc", + "libshumate", + "mpris-server", + "perry-audio-miniaudio", + "perry-ffi", + "perry-runtime", + "perry-ui", + "perry-ui-testkit", + "tokio", + "webkit6", +] + +[[package]] +name = "perry-ui-ios" +version = "0.5.1258" +dependencies = [ + "base64 0.22.1", + "block2", + "libc", + "objc2", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "perry-runtime", + "perry-ui", + "perry-ui-testkit", +] + +[[package]] +name = "perry-ui-macos" +version = "0.5.1258" +dependencies = [ + "base64 0.22.1", + "block2", + "dpi", + "libc", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "perry-ui", + "perry-ui-testkit", + "servo", + "url", +] + +[[package]] +name = "perry-ui-model" +version = "0.5.1258" + +[[package]] +name = "perry-ui-test" +version = "0.1.0" + +[[package]] +name = "perry-ui-testkit" +version = "0.5.1258" + +[[package]] +name = "perry-ui-tvos" +version = "0.5.1258" +dependencies = [ + "base64 0.22.1", + "block2", + "libc", + "objc2", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "perry-runtime", + "perry-ui", + "perry-ui-testkit", +] + +[[package]] +name = "perry-ui-visionos" +version = "0.5.1258" +dependencies = [ + "base64 0.22.1", + "block2", + "libc", + "objc2", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "perry-runtime", + "perry-ui", + "perry-ui-testkit", +] + +[[package]] +name = "perry-ui-watchos" +version = "0.5.1258" +dependencies = [ + "block2", + "libc", + "objc2", + "objc2-foundation", + "perry-runtime", + "perry-ui", + "perry-ui-testkit", +] + +[[package]] +name = "perry-ui-windows" +version = "0.5.1258" +dependencies = [ + "base64 0.22.1", + "libc", + "perry-audio-miniaudio", + "perry-runtime", + "perry-ui", + "perry-ui-testkit", + "png 0.17.16", + "qrcodegen", + "webview2-com", + "windows 0.62.2", + "windows-core 0.62.2", +] + +[[package]] +name = "perry-ui-windows-winui" +version = "0.5.1258" +dependencies = [ + "perry-ui-windows", +] + +[[package]] +name = "perry-updater" +version = "0.5.1258" +dependencies = [ + "anyhow", + "base64 0.22.1", + "ed25519-dalek", + "hex", + "perry-runtime", + "semver", + "serde", + "serde_json", + "sha2 0.11.0", + "tempfile", +] + +[[package]] +name = "perry-wasm-host" +version = "0.5.1258" +dependencies = [ + "wasmi", +] + +[[package]] +name = "petgraph" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f" +dependencies = [ + "fixedbitset", + "ordermap", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros 0.11.3", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7" +dependencies = [ + "phf_shared 0.12.1", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros 0.13.1", + "phf_shared 0.13.1", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.6", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared 0.13.1", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.3", +] + +[[package]] +name = "phf_shared" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981" +dependencies = [ + "siphasher 1.0.3", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher 1.0.3", +] + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + +[[package]] +name = "pin-project" +version = "1.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "piper" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der 0.7.10", + "pkcs8 0.10.2", + "spki 0.7.3", +] + +[[package]] +name = "pkcs5" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" +dependencies = [ + "aes 0.8.4", + "cbc", + "der 0.7.10", + "pbkdf2 0.12.2", + "scrypt", + "sha2 0.10.9", + "spki 0.7.3", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.10", + "pkcs5", + "rand_core 0.6.4", + "spki 0.7.3", +] + +[[package]] +name = "pkcs8" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" +dependencies = [ + "der 0.8.0", + "spki 0.8.0", +] + +[[package]] +name = "pkg-config" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "plane-split" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f7d82649829ecdef8e258790b0587acf0a8403f0ce963473d8e918acc1643" +dependencies = [ + "euclid", + "log", + "smallvec", +] + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "png" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +dependencies = [ + "bitflags 2.12.1", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.5.2", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures 0.2.17", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" + +[[package]] +name = "portable-atomic-util" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "postcard" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "serde", +] + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "serde_core", + "writeable 0.6.3", + "zerovec 0.11.6", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppmd-rust" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efca4c95a19a79d1c98f791f10aebd5c1363b473244630bb7dbde1dc98455a24" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "prefix-trie" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cf6e3177f0684016a5c209b00882e15f8bdd3f3bb48f0491df10cd102d0c6e7" +dependencies = [ + "either", + "ipnet", + "num-traits", +] + +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.117", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve 0.13.8", +] + +[[package]] +name = "printpdf" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91dac59ed5eed56d899517c12cb9f00756738731926b54e513732a36f49a83d" +dependencies = [ + "allsorts", + "base64 0.22.1", + "flate2", + "getrandom 0.3.4", + "lopdf", + "serde", + "serde_derive", + "serde_json", + "time", + "wasm-bindgen", + "wasm-bindgen-futures", + "weezl", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "profiling" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4488a4a36b9a4ba6b9334a32a39971f77c1436ec82c38707bce707699cc3bbcb" +dependencies = [ + "quote", + "syn 2.0.117", +] + +[[package]] +name = "proptest" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.12.1", + "num-traits", + "rand 0.9.4", + "rand_chacha 0.9.0", + "rand_xorshift", + "regex-syntax", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "psm" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645dbe486e346d9b5de3ef16ede18c26e6c70ad97418f4874b8b1889d6e761ea" dependencies = [ - "perry-stdlib", + "ar_archive_writer", + "cc", ] [[package]] -name = "perry-transform" -version = "0.5.1258" +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" dependencies = [ - "anyhow", - "perry-hir", - "perry-types", - "thiserror 1.0.69", + "ptr_meta_derive", ] [[package]] -name = "perry-types" -version = "0.5.1258" +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" dependencies = [ - "anyhow", - "thiserror 1.0.69", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "perry-ui" -version = "0.5.1258" +name = "pxfm" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" dependencies = [ - "perry-ui-model", + "bytemuck", ] [[package]] -name = "perry-ui-android" -version = "0.5.1258" +name = "qrcodegen" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4339fc7a1021c9c1621d87f5e3505f2805c8c105420ba2f2a4df86814590c142" + +[[package]] +name = "quanta" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" dependencies = [ - "base64", - "itoa", - "jni 0.21.1", + "crossbeam-utils", "libc", - "perry-audio-miniaudio", - "perry-ext-sharp", - "perry-runtime", - "perry-ui", - "ryu", - "serde_json", - "tungstenite 0.24.0", + "once_cell", + "raw-cpuid", + "wasi 0.11.1+wasi-snapshot-preview1", + "web-sys", + "winapi", ] [[package]] -name = "perry-ui-geisterhand" -version = "0.5.1258" +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quick_cache" +version = "0.6.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9c6658afe513a3b484e3abfdaa0d03ef3c0bbf017542c178dd55f94eb3051f9" dependencies = [ - "rand 0.8.6", - "serde", - "serde_json", - "tiny_http", + "ahash 0.8.12", + "equivalent", + "hashbrown 0.16.1", ] [[package]] -name = "perry-ui-gtk4" -version = "0.5.1258" +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ - "base64", - "cairo-rs 0.22.0", - "dirs", - "gstreamer", - "gstreamer-app", - "gtk4", - "ksni", - "libc", - "libshumate", - "mpris-server", - "perry-audio-miniaudio", - "perry-ffi", - "perry-runtime", - "perry-ui", - "perry-ui-testkit", + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.2", + "rustls", + "socket2 0.6.4", + "thiserror 2.0.18", "tokio", - "webkit6", + "tracing", + "web-time", ] [[package]] -name = "perry-ui-ios" -version = "0.5.1258" +name = "quinn-proto" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e" dependencies = [ - "base64", - "block2", - "libc", - "objc2", - "objc2-core-foundation", - "objc2-foundation", - "objc2-ui-kit", - "perry-runtime", - "perry-ui", - "perry-ui-testkit", + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.4", + "ring", + "rustc-hash 2.1.2", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "web-time", ] [[package]] -name = "perry-ui-macos" -version = "0.5.1258" +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ - "base64", - "block2", + "cfg_aliases", "libc", - "objc2", - "objc2-app-kit", - "objc2-core-foundation", - "objc2-foundation", - "perry-ui", - "perry-ui-testkit", + "once_cell", + "socket2 0.6.4", + "tracing", + "windows-sys 0.60.2", ] [[package]] -name = "perry-ui-model" -version = "0.5.1258" +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] [[package]] -name = "perry-ui-test" -version = "0.1.0" +name = "quoted_printable" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478e0585659a122aa407eb7e3c0e1fa51b1d8a870038bd29f0cf4a8551eea972" [[package]] -name = "perry-ui-testkit" -version = "0.5.1258" +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] -name = "perry-ui-tvos" -version = "0.5.1258" -dependencies = [ - "base64", - "block2", - "libc", - "objc2", - "objc2-core-foundation", - "objc2-foundation", - "objc2-ui-kit", - "perry-runtime", - "perry-ui", - "perry-ui-testkit", -] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] -name = "perry-ui-visionos" -version = "0.5.1258" +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "base64", - "block2", + "getrandom 0.1.16", "libc", - "objc2", - "objc2-core-foundation", - "objc2-foundation", - "objc2-ui-kit", - "perry-runtime", - "perry-ui", - "perry-ui-testkit", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", ] [[package]] -name = "perry-ui-watchos" -version = "0.5.1258" +name = "rand" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ - "block2", "libc", - "objc2", - "objc2-foundation", - "perry-runtime", - "perry-ui", - "perry-ui-testkit", + "rand_chacha 0.3.1", + "rand_core 0.6.4", ] [[package]] -name = "perry-ui-windows" -version = "0.5.1258" -dependencies = [ - "base64", - "libc", - "perry-audio-miniaudio", - "perry-runtime", - "perry-ui", - "perry-ui-testkit", - "png 0.17.16", - "qrcodegen", - "webview2-com", - "windows", - "windows-core", +name = "rand" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", ] [[package]] -name = "perry-ui-windows-winui" -version = "0.5.1258" +name = "rand" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ - "perry-ui-windows", + "chacha20 0.10.0", + "getrandom 0.4.2", + "rand_core 0.10.1", ] [[package]] -name = "perry-updater" -version = "0.5.1258" +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ - "anyhow", - "base64", - "ed25519-dalek", - "hex", - "perry-runtime", - "semver", - "serde", - "serde_json", - "sha2 0.11.0", - "tempfile", + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] -name = "perry-wasm-host" -version = "0.5.1258" +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "wasmi", + "ppv-lite86", + "rand_core 0.6.4", ] [[package]] -name = "phf" -version = "0.11.3" +name = "rand_chacha" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ - "phf_macros 0.11.3", - "phf_shared 0.11.3", + "ppv-lite86", + "rand_core 0.9.5", ] [[package]] -name = "phf" -version = "0.12.1" +name = "rand_core" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "phf_shared 0.12.1", + "getrandom 0.1.16", ] [[package]] -name = "phf" -version = "0.13.1" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "phf_macros 0.13.1", - "phf_shared 0.13.1", - "serde", + "getrandom 0.2.17", ] [[package]] -name = "phf_codegen" -version = "0.13.1" +name = "rand_core" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", + "getrandom 0.3.4", ] [[package]] -name = "phf_generator" -version = "0.11.3" +name = "rand_core" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "phf_shared 0.11.3", - "rand 0.8.6", + "rand_core 0.5.1", ] [[package]] -name = "phf_generator" -version = "0.13.1" +name = "rand_xorshift" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "fastrand", - "phf_shared 0.13.1", + "rand_core 0.9.5", ] [[package]] -name = "phf_macros" -version = "0.11.3" +name = "range-alloc" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08" + +[[package]] +name = "rangemap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "973443cf09a9c8656b574a866ab68dfa19f0867d0340648c7d2f6a71b8a8ea68" + +[[package]] +name = "rav1e" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b" dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", - "proc-macro2", - "quote", - "syn 2.0.117", + "aligned-vec", + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av-scenechange", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools 0.14.0", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "paste", + "profiling", + "rand 0.9.4", + "rand_chacha 0.9.0", + "simd_helpers", + "thiserror 2.0.18", + "v_frame", + "wasm-bindgen", ] [[package]] -name = "phf_macros" -version = "0.13.1" +name = "ravif" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +checksum = "e52310197d971b0f5be7fe6b57530dcd27beb35c1b013f29d66c1ad73fbbcc45" dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", - "proc-macro2", - "quote", - "syn 2.0.117", + "avif-serialize", + "imgref", + "loop9", + "quick-error 2.0.1", + "rav1e", + "rayon", + "rgb", ] [[package]] -name = "phf_shared" -version = "0.11.3" +name = "raw-cpuid" +version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "siphasher 1.0.3", + "bitflags 2.12.1", ] [[package]] -name = "phf_shared" -version = "0.12.1" +name = "raw-window-handle" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "rayon" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" dependencies = [ - "siphasher 1.0.3", + "either", + "rayon-core", ] [[package]] -name = "phf_shared" -version = "0.13.1" +name = "rayon-core" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ - "siphasher 1.0.3", + "crossbeam-deque", + "crossbeam-utils", ] [[package]] -name = "pin-project-lite" -version = "0.2.17" +name = "read-fonts" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" +checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358" +dependencies = [ + "bytemuck", + "font-types", +] [[package]] -name = "piper" -version = "0.2.5" +name = "redis" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +checksum = "2fa6f8e4b491d7a8ef3a9550a4d71969bd0064f46e32b8dbbcc7fc60dad94fed" dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", + "arc-swap", + "arcstr", + "async-lock", + "backon", + "bytes", + "cfg-if", + "combine", + "futures-channel", + "futures-util", + "itoa", + "num-bigint", + "percent-encoding", + "pin-project-lite", + "ryu", + "sha1_smol", + "socket2 0.6.4", + "tokio", + "tokio-util", + "url", + "xxhash-rust", ] [[package]] -name = "pkcs1" -version = "0.7.5" +name = "redox_syscall" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "der 0.7.10", - "pkcs8 0.10.2", - "spki 0.7.3", + "bitflags 2.12.1", ] [[package]] -name = "pkcs5" -version = "0.7.1" +name = "redox_users" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ - "aes 0.8.4", - "cbc", - "der 0.7.10", - "pbkdf2 0.12.2", - "scrypt", - "sha2 0.10.9", - "spki 0.7.3", + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.18", +] + +[[package]] +name = "regex" +version = "1.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.14", + "regex-syntax", ] [[package]] -name = "pkcs8" -version = "0.10.2" +name = "regex-automata" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "e9368763f5a9b804326f3af749e16f9abf378d227bcdee7634b13d8f17793782" dependencies = [ - "der 0.7.10", - "pkcs5", - "rand_core 0.6.4", - "spki 0.7.3", + "memchr", ] [[package]] -name = "pkcs8" -version = "0.11.0" +name = "regex-automata" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ - "der 0.8.0", - "spki 0.8.0", + "aho-corasick", + "memchr", + "regex-syntax", ] [[package]] -name = "pkg-config" -version = "0.3.33" +name = "regex-syntax" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] -name = "png" -version = "0.17.16" +name = "rend" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", + "bytecheck", ] [[package]] -name = "png" -version = "0.18.1" +name = "reqwest" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ - "bitflags 2.12.1", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.4.14", + "http 1.4.1", + "http-body 1.0.1", + "http-body-util", + "hyper 1.10.1", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 1.0.7", ] [[package]] -name = "polling" -version = "3.11.0" +name = "resolv-conf" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi 0.5.2", - "pin-project-lite", - "rustix", - "windows-sys 0.61.2", -] +checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] -name = "poly1305" -version = "0.8.0" +name = "resvg" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43" dependencies = [ - "cpufeatures 0.2.17", - "opaque-debug", - "universal-hash", + "gif 0.13.3", + "image-webp", + "log", + "pico-args", + "rgb", + "svgtypes", + "tiny-skia", + "usvg", + "zune-jpeg 0.4.21", ] [[package]] -name = "polyval" -version = "0.6.2" +name = "rfc6979" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "opaque-debug", - "universal-hash", + "hmac 0.12.1", + "subtle", ] [[package]] -name = "portable-atomic" -version = "1.13.1" +name = "rgb" +version = "0.8.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4" +dependencies = [ + "bytemuck", +] [[package]] -name = "potential_utf" -version = "0.1.5" +name = "ring" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ - "serde_core", - "writeable", - "zerovec", + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", ] [[package]] -name = "powerfmt" -version = "0.2.0" +name = "rkyv" +version = "0.7.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] [[package]] -name = "ppmd-rust" -version = "1.4.0" +name = "rkyv_derive" +version = "0.7.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efca4c95a19a79d1c98f791f10aebd5c1363b473244630bb7dbde1dc98455a24" +checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] -name = "ppv-lite86" -version = "0.2.21" +name = "ron" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +checksum = "beceb6f7bf81c73e73aeef6dd1356d9a1b2b4909e1f0fc3e59b034f9572d7b7f" dependencies = [ - "zerocopy", + "base64 0.22.1", + "bitflags 2.12.1", + "serde", + "serde_derive", + "unicode-ident", ] [[package]] -name = "precomputed-hash" -version = "0.1.1" +name = "roxmltree" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" [[package]] -name = "prefix-trie" -version = "0.8.4" +name = "rsa" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cf6e3177f0684016a5c209b00882e15f8bdd3f3bb48f0491df10cd102d0c6e7" +checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" dependencies = [ - "either", - "ipnet", + "const-oid 0.9.6", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", "num-traits", + "pkcs1", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "sha1 0.10.6", + "sha2 0.10.9", + "signature 2.2.0", + "spki 0.7.3", + "subtle", + "zeroize", ] [[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn 2.0.117", -] - -[[package]] -name = "primeorder" -version = "0.13.6" +name = "rusqlite" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +checksum = "165ca6e57b20e1351573e3729b958bc62f0e48025386970b6e4d29e7a7e71f3f" dependencies = [ - "elliptic-curve 0.13.8", + "bitflags 2.12.1", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink 0.10.0", + "libsqlite3-sys", + "smallvec", ] [[package]] -name = "printpdf" -version = "0.9.1" +name = "rust_decimal" +version = "1.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91dac59ed5eed56d899517c12cb9f00756738731926b54e513732a36f49a83d" +checksum = "be2a24f50780bc85f09cc6ac299bdf1424302742d77221106859c9d8b102126a" dependencies = [ - "allsorts", - "base64", - "flate2", - "getrandom 0.3.4", - "lopdf", + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand 0.8.6", + "rkyv", "serde", - "serde_derive", "serde_json", - "time", "wasm-bindgen", - "wasm-bindgen-futures", - "weezl", ] [[package]] -name = "proc-macro-crate" -version = "3.5.0" +name = "rustc-demangle" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b74b56ffa8bb2830709a538c2cbcae9aa062db0d2a42563bfb09bdaae44020eb" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" -dependencies = [ - "toml_edit", -] +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "rustc_version" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", + "semver", ] [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "rustc_version_runtime" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "2dd18cd2bae1820af0b6ad5e54f4a51d0f3fcc53b05f845675074efcc7af071d" dependencies = [ - "proc-macro2", - "quote", - "version_check", + "rustc_version", + "semver", ] [[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" +name = "rustix" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "proc-macro2", - "quote", + "bitflags 2.12.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", ] [[package]] -name = "proc-macro-error2" -version = "2.0.1" +name = "rustls" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.117", + "aws-lc-rs", + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", ] [[package]] -name = "proc-macro2" -version = "1.0.106" +name = "rustls-native-certs" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" dependencies = [ - "unicode-ident", + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", ] [[package]] -name = "profiling" -version = "1.0.18" +name = "rustls-pemfile" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "profiling-procmacros", + "rustls-pki-types", ] [[package]] -name = "profiling-procmacros" -version = "1.0.18" +name = "rustls-pki-types" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4488a4a36b9a4ba6b9334a32a39971f77c1436ec82c38707bce707699cc3bbcb" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" dependencies = [ - "quote", - "syn 2.0.117", + "web-time", + "zeroize", ] [[package]] -name = "proptest" -version = "1.11.0" +name = "rustls-platform-verifier" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" dependencies = [ - "bit-set", - "bit-vec", - "bitflags 2.12.1", - "num-traits", - "rand 0.9.4", - "rand_chacha 0.9.0", - "rand_xorshift", - "regex-syntax", - "rusty-fork", - "tempfile", - "unarray", + "core-foundation 0.10.1", + "core-foundation-sys", + "jni 0.21.1", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", ] [[package]] -name = "psm" -version = "0.1.31" +name = "rustls-platform-verifier-android" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645dbe486e346d9b5de3ef16ede18c26e6c70ad97418f4874b8b1889d6e761ea" -dependencies = [ - "ar_archive_writer", - "cc", -] +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] -name = "ptr_meta" -version = "0.1.4" +name = "rustls-webpki" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ - "ptr_meta_derive", + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] -name = "ptr_meta_derive" -version = "0.1.4" +name = "rustversion" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] -name = "pxfm" -version = "0.1.29" +name = "rusty-fork" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" +dependencies = [ + "fnv", + "quick-error 1.2.3", + "tempfile", + "wait-timeout", +] [[package]] -name = "qoi" -version = "0.4.1" +name = "rustybuzz" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ + "bitflags 2.12.1", "bytemuck", + "core_maths", + "log", + "smallvec", + "ttf-parser", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-properties", + "unicode-script", ] [[package]] -name = "qrcodegen" -version = "1.8.0" +name = "ryu" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4339fc7a1021c9c1621d87f5e3505f2805c8c105420ba2f2a4df86814590c142" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] -name = "quanta" -version = "0.12.6" +name = "salsa20" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "crossbeam-utils", - "libc", - "once_cell", - "raw-cpuid", - "wasi", - "web-sys", - "winapi", + "cipher 0.4.4", ] [[package]] -name = "quick-error" -version = "1.2.3" +name = "same-file" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] [[package]] -name = "quick-error" -version = "2.0.1" +name = "schannel" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] [[package]] -name = "quinn" -version = "0.11.9" +name = "scoped-tls" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" -dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash 2.1.2", - "rustls", - "socket2", - "thiserror 2.0.18", - "tokio", - "tracing", - "web-time", -] +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] -name = "quinn-proto" -version = "0.11.15" +name = "scopeguard" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scraper" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdd0be4d296f048bfb06dd01bbc80ef789ddd2e55583e8d2e6b804942abfabc2" dependencies = [ - "bytes", - "getrandom 0.3.4", - "lru-slab", - "rand 0.9.4", - "ring", - "rustc-hash 2.1.2", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.18", - "tinyvec", - "tracing", - "web-time", + "cssparser 0.37.0", + "ego-tree", + "getopts", + "html5ever", + "precomputed-hash", + "selectors 0.38.0", + "tendril", ] [[package]] -name = "quinn-udp" -version = "0.5.14" +name = "scrypt" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.60.2", + "password-hash", + "pbkdf2 0.12.2", + "salsa20", + "sha2 0.10.9", ] [[package]] -name = "quote" -version = "1.0.45" +name = "sea-query" +version = "1.0.0-rc.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "58decdaaaf2a698170af2fa1b2e8f7b43a970e7768bf18aebaab113bada46354" +dependencies = [ + "inherent", + "sea-query-derive", +] + +[[package]] +name = "sea-query-derive" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0b0f466921cdd3cf4b89d5c3ac2173dba89a873ab395b123a645de181ec7537" dependencies = [ + "darling 0.20.11", + "heck 0.4.1", "proc-macro2", + "quote", + "syn 2.0.117", + "thiserror 2.0.18", ] [[package]] -name = "quoted_printable" -version = "0.5.2" +name = "sea-query-rusqlite" +version = "0.8.0-rc.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478e0585659a122aa407eb7e3c0e1fa51b1d8a870038bd29f0cf4a8551eea972" +checksum = "9d42855d86ace6f5d9e425b65a8035d45c64e001db87a254ecfd87f226b4b0f7" +dependencies = [ + "rusqlite", + "sea-query", +] [[package]] -name = "r-efi" -version = "5.3.0" +name = "seahash" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] -name = "r-efi" -version = "6.0.0" +name = "sec1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct 0.2.0", + "der 0.7.10", + "generic-array", + "pkcs8 0.10.2", + "subtle", + "zeroize", +] [[package]] -name = "radium" -version = "0.7.0" +name = "sec1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" +dependencies = [ + "base16ct 1.0.0", + "ctutils", + "der 0.8.0", + "hybrid-array 0.4.12", + "subtle", + "zeroize", +] [[package]] -name = "rand" -version = "0.8.6" +name = "security-framework" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ + "bitflags 2.12.1", + "core-foundation 0.10.1", + "core-foundation-sys", "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", + "security-framework-sys", ] [[package]] -name = "rand" -version = "0.9.4" +name = "security-framework-sys" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.5", + "core-foundation-sys", + "libc", ] [[package]] -name = "rand" -version = "0.10.1" +name = "selectors" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" dependencies = [ - "chacha20 0.10.0", - "getrandom 0.4.2", - "rand_core 0.10.1", + "bitflags 2.12.1", + "cssparser 0.36.0", + "derive_more", + "log", + "new_debug_unreachable", + "phf 0.13.1", + "phf_codegen", + "precomputed-hash", + "rustc-hash 2.1.2", + "servo_arc", + "smallvec", + "to_shmem", + "to_shmem_derive", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "selectors" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "8adfa1c298912827b8a28b223b3b874357397ae706e6190acd9bf28cee99114d" dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", + "bitflags 2.12.1", + "cssparser 0.37.0", + "derive_more", + "log", + "new_debug_unreachable", + "phf 0.13.1", + "phf_codegen", + "precomputed-hash", + "rustc-hash 2.1.2", + "servo_arc", + "smallvec", ] [[package]] -name = "rand_chacha" -version = "0.9.0" +name = "semver" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "seq-macro" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ - "ppv-lite86", - "rand_core 0.9.5", + "serde_core", + "serde_derive", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "serde_bytes" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" dependencies = [ - "getrandom 0.2.17", + "serde", + "serde_core", ] [[package]] -name = "rand_core" -version = "0.9.5" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ - "getrandom 0.3.4", + "serde_derive", ] [[package]] -name = "rand_core" -version = "0.10.1" +name = "serde_derive" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] [[package]] -name = "rand_xorshift" -version = "0.4.0" +name = "serde_json" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ - "rand_core 0.9.5", + "indexmap", + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", ] [[package]] -name = "rangemap" -version = "1.7.1" +name = "serde_repr" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "973443cf09a9c8656b574a866ab68dfa19f0867d0340648c7d2f6a71b8a8ea68" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] [[package]] -name = "rav1e" -version = "0.8.1" +name = "serde_spanned" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ - "aligned-vec", - "arbitrary", - "arg_enum_proc_macro", - "arrayvec", - "av-scenechange", - "av1-grain", - "bitstream-io", - "built", - "cfg-if", - "interpolate_name", - "itertools 0.14.0", - "libc", - "libfuzzer-sys", - "log", - "maybe-rayon", - "new_debug_unreachable", - "noop_proc_macro", - "num-derive", - "num-traits", - "paste", - "profiling", - "rand 0.9.4", - "rand_chacha 0.9.0", - "simd_helpers", - "thiserror 2.0.18", - "v_frame", - "wasm-bindgen", + "serde_core", ] [[package]] -name = "ravif" -version = "0.13.0" +name = "serde_urlencoded" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e52310197d971b0f5be7fe6b57530dcd27beb35c1b013f29d66c1ad73fbbcc45" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ - "avif-serialize", - "imgref", - "loop9", - "quick-error 2.0.1", - "rav1e", - "rayon", - "rgb", + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" +dependencies = [ + "serde_core", + "serde_with_macros", ] [[package]] -name = "raw-cpuid" -version = "11.6.0" +name = "serde_with_macros" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" +checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" dependencies = [ - "bitflags 2.12.1", + "darling 0.23.0", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "rayon" -version = "1.12.0" +name = "serde_yaml" +version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "either", - "rayon-core", + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", ] [[package]] -name = "rayon-core" -version = "1.13.0" +name = "serdect" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" dependencies = [ - "crossbeam-deque", - "crossbeam-utils", + "base16ct 1.0.0", + "serde", ] [[package]] -name = "redis" -version = "1.3.0" +name = "servo" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fa6f8e4b491d7a8ef3a9550a4d71969bd0064f46e32b8dbbcc7fc60dad94fed" +checksum = "18a0e54898e139dcaa629c9762eaee479f0b52381168241e86a1731828ec3e80" dependencies = [ - "arc-swap", - "arcstr", - "async-lock", - "backon", - "bytes", - "cfg-if", - "combine", - "futures-channel", - "futures-util", - "itoa", - "num-bigint", - "percent-encoding", - "pin-project-lite", - "ryu", - "sha1_smol", - "socket2", + "accesskit", + "arboard", + "bitflags 2.12.1", + "cookie 0.18.1", + "crossbeam-channel", + "dpi", + "env_logger 0.11.11", + "euclid", + "gaol", + "image", + "ipc-channel", + "keyboard-types", + "log", + "mozangle", + "parking_lot", + "rustc-hash 2.1.2", + "serde", + "servo-background-hang-monitor", + "servo-base", + "servo-canvas-traits", + "servo-config", + "servo-constellation", + "servo-constellation-traits", + "servo-default-resources", + "servo-devtools", + "servo-devtools-traits", + "servo-embedder-traits", + "servo-fonts", + "servo-geometry", + "servo-layout", + "servo-layout-api", + "servo-media", + "servo-media-dummy", + "servo-media-thread", + "servo-net", + "servo-net-traits", + "servo-paint", + "servo-paint-api", + "servo-profile", + "servo-profile-traits", + "servo-script", + "servo-script-traits", + "servo-storage", + "servo-storage-traits", + "servo-tracing", + "servo-url", + "servo-webgl", + "servo-webgpu", + "servo-webxr", + "stylo", + "stylo_traits", + "surfman", "tokio", - "tokio-util", "url", - "xxhash-rust", + "webrender", + "webrender_api", ] [[package]] -name = "redox_syscall" -version = "0.5.18" +name = "servo-allocator" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +checksum = "922fbef1915996234a41c88b3bb10c73119fde6fdcbd178ef36c2a504e3d8217" dependencies = [ - "bitflags 2.12.1", + "libc", + "tikv-jemalloc-sys", + "tikv-jemallocator", + "windows-sys 0.61.2", ] [[package]] -name = "redox_users" -version = "0.5.2" +name = "servo-background-hang-monitor" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +checksum = "c5fdab34d5d941d9f06cf79dcb464de998920d6732938035b7638a196fcb6be0" dependencies = [ - "getrandom 0.2.17", - "libredox", - "thiserror 2.0.18", + "backtrace", + "crossbeam-channel", + "libc", + "log", + "rustc-hash 2.1.2", + "serde_json", + "servo-background-hang-monitor-api", + "servo-base", ] [[package]] -name = "regex" -version = "1.12.4" +name = "servo-background-hang-monitor-api" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +checksum = "149bebe222137046f2479bf77f6d9ab9037178aef09954b025cb6714f2b53ef3" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", + "serde", + "servo-base", ] [[package]] -name = "regex-automata" -version = "0.4.14" +name = "servo-base" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "903236d16125bd60d460ce29520c28d148a5ae1b35ebff539fddd3cb6e84449c" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", + "accesskit", + "crossbeam-channel", + "ipc-channel", + "libc", + "log", + "mach2", + "malloc_size_of_derive", + "parking_lot", + "rayon", + "regex", + "serde", + "serde_json", + "servo-config", + "servo-malloc-size-of", + "time", + "unicode-segmentation", + "webrender_api", + "windows-sys 0.61.2", ] [[package]] -name = "regex-syntax" -version = "0.8.11" +name = "servo-canvas" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" +checksum = "61da216bfee9ce7aef8b50e424ea6abde2e117e60fc11436b9b593b616bf19ee" +dependencies = [ + "bytemuck", + "crossbeam-channel", + "euclid", + "kurbo 0.12.0", + "log", + "peniko", + "rustc-hash 2.1.2", + "servo-base", + "servo-canvas-traits", + "servo-config", + "servo-fonts", + "servo-paint-api", + "servo-pixels", + "servo-profile-traits", + "servo-tracing", + "stylo", + "vello_cpu", + "webrender_api", +] [[package]] -name = "rend" -version = "0.4.2" +name = "servo-canvas-traits" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +checksum = "17979f4e69f82892850714dbd6a8b15a0fda1d4609c82ba596ccfb9dd22d13bb" dependencies = [ - "bytecheck", + "crossbeam-channel", + "euclid", + "glow", + "kurbo 0.12.0", + "malloc_size_of_derive", + "serde", + "servo-base", + "servo-fonts-traits", + "servo-malloc-size-of", + "servo-pixels", + "servo-webxr-api", + "strum 0.28.0", + "stylo", + "webrender_api", ] [[package]] -name = "reqwest" -version = "0.12.28" +name = "servo-config" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +checksum = "6d7b9a3f0fa240062dc5fe201e8a0b9e81b9d5953173ae98dd46078e14a0e420" dependencies = [ - "base64", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-util", - "js-sys", - "log", - "mime_guess", - "percent-encoding", - "pin-project-lite", - "quinn", - "rustls", - "rustls-pki-types", "serde", "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tokio-rustls", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots 1.0.7", + "servo-config-macro", + "stylo_static_prefs", ] [[package]] -name = "resolv-conf" -version = "0.7.6" +name = "servo-config-macro" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" +checksum = "7737832f66452bbc2310c99e4fc4ff12efcf80f92ef7999342645abd9c0f8734" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] [[package]] -name = "rfc6979" -version = "0.4.0" +name = "servo-constellation" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +checksum = "06edcddc52dd42150549a5490e2f251703f4f14d70d5c5299b6e178520f7ba84" dependencies = [ - "hmac 0.12.1", - "subtle", + "accesskit", + "backtrace", + "content-security-policy", + "crossbeam-channel", + "euclid", + "gaol", + "ipc-channel", + "keyboard-types", + "log", + "parking_lot", + "rand 0.9.4", + "rustc-hash 2.1.2", + "serde", + "servo-background-hang-monitor", + "servo-background-hang-monitor-api", + "servo-base", + "servo-canvas", + "servo-canvas-traits", + "servo-config", + "servo-constellation-traits", + "servo-devtools-traits", + "servo-embedder-traits", + "servo-fonts", + "servo-layout-api", + "servo-media-thread", + "servo-net", + "servo-net-traits", + "servo-paint-api", + "servo-profile-traits", + "servo-script-traits", + "servo-storage-traits", + "servo-tracing", + "servo-url", + "servo-webgpu", + "servo-webgpu-traits", + "servo-webxr-api", + "stylo", + "stylo_traits", +] + +[[package]] +name = "servo-constellation-traits" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80fcfba4c3e15c8771312136a933378281513d95f783c234fbfa8c2e0947433c" +dependencies = [ + "content-security-policy", + "encoding_rs", + "euclid", + "http 1.4.1", + "ipc-channel", + "log", + "malloc_size_of_derive", + "rustc-hash 2.1.2", + "serde", + "servo-base", + "servo-canvas-traits", + "servo-config", + "servo-devtools-traits", + "servo-embedder-traits", + "servo-fonts-traits", + "servo-hyper-serde", + "servo-malloc-size-of", + "servo-net-traits", + "servo-paint-api", + "servo-pixels", + "servo-profile-traits", + "servo-storage-traits", + "servo-url", + "servo-webgpu-traits", + "strum 0.28.0", + "uuid", + "webrender_api", ] [[package]] -name = "rgb" -version = "0.8.53" +name = "servo-default-resources" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4" +checksum = "3991a5abf44bc1eca4dffd892b422a5fcde324f9c11249e1a25d3d88f67baaca" dependencies = [ - "bytemuck", + "servo-embedder-traits", ] [[package]] -name = "ring" -version = "0.17.14" +name = "servo-deny-public-fields" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +checksum = "2189729feccedd2b2271bd37329da88ac5edecb58526a56065d2896835048f5d" dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.17", - "libc", - "untrusted", - "windows-sys 0.52.0", + "syn 2.0.117", + "synstructure", ] [[package]] -name = "rkyv" -version = "0.7.46" +name = "servo-devtools" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1" +checksum = "2abe12cba4bf8c74b34ab1245f34d5b2f1d5b7c3e491f50981423f8c60d29a6c" dependencies = [ - "bitvec", - "bytecheck", - "bytes", - "hashbrown 0.12.3", - "ptr_meta", - "rend", - "rkyv_derive", - "seahash", - "tinyvec", + "atomic_refcell", + "base64 0.22.1", + "chrono", + "crossbeam-channel", + "headers 0.4.1", + "http 1.4.1", + "log", + "malloc_size_of_derive", + "rand 0.9.4", + "rustc-hash 2.1.2", + "serde", + "serde_json", + "servo-base", + "servo-config", + "servo-devtools-traits", + "servo-embedder-traits", + "servo-malloc-size-of", + "servo-net", + "servo-net-traits", + "servo-profile-traits", + "servo-url", "uuid", ] [[package]] -name = "rkyv_derive" -version = "0.7.46" +name = "servo-devtools-traits" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5" +checksum = "2d8adcc4976e973caa8ee14a9ef53b161d0361ca361d12bd5db6bf2a8b59715c" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "http 1.4.1", + "malloc_size_of_derive", + "serde", + "servo-base", + "servo-embedder-traits", + "servo-malloc-size-of", + "servo-net-traits", + "servo-profile-traits", + "servo-url", + "uuid", ] [[package]] -name = "rsa" -version = "0.9.10" +name = "servo-dom-struct" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" -dependencies = [ - "const-oid 0.9.6", - "digest 0.10.7", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8 0.10.2", - "rand_core 0.6.4", - "sha2 0.10.9", - "signature 2.2.0", - "spki 0.7.3", - "subtle", - "zeroize", +checksum = "b12691dd74db1b5fc8545aa129470983b4f264dc39244fef81a3876809e3db70" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "rusqlite" -version = "0.37.0" +name = "servo-embedder-traits" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "165ca6e57b20e1351573e3729b958bc62f0e48025386970b6e4d29e7a7e71f3f" +checksum = "a2b372b3fc2b94cb035fd07772a29faa90b4b767ce8f7d2ba6915337f77a8015" dependencies = [ + "accesskit", "bitflags 2.12.1", - "fallible-iterator", - "fallible-streaming-iterator", - "hashlink 0.10.0", - "libsqlite3-sys", + "cookie 0.18.1", + "crossbeam-channel", + "euclid", + "http 1.4.1", + "image", + "inventory", + "keyboard-types", + "log", + "malloc_size_of_derive", + "rustc-hash 2.1.2", + "serde", + "servo-base", + "servo-geometry", + "servo-hyper-serde", + "servo-malloc-size-of", + "servo-pixels", + "servo-url", + "strum 0.28.0", + "stylo", + "stylo_traits", + "url", + "uuid", + "webdriver", + "webrender_api", +] + +[[package]] +name = "servo-fonts" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1938887cdd7a9893820fdc18b306da71c18227a35482eb8b812a5cc6ccbaf5e5" +dependencies = [ + "app_units", + "bitflags 2.12.1", + "byteorder", + "content-security-policy", + "dwrote", + "euclid", + "fontsan", + "freetype-sys", + "harfbuzz-sys", + "icu_locid", + "icu_properties 1.5.1", + "itertools 0.14.0", + "libc", + "log", + "malloc_size_of_derive", + "memmap2", + "num-traits", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-text", + "parking_lot", + "read-fonts", + "rustc-hash 2.1.2", + "serde", + "servo-allocator", + "servo-base", + "servo-config", + "servo-fonts-traits", + "servo-malloc-size-of", + "servo-net-traits", + "servo-paint-api", + "servo-profile-traits", + "servo-tracing", + "servo-url", + "servo_arc", + "skrifa", "smallvec", + "stylo", + "stylo_atoms", + "unicode-properties", + "unicode-script", + "url", + "uuid", + "webrender_api", + "winapi", + "xml", + "yeslogic-fontconfig-sys", ] [[package]] -name = "rust_decimal" -version = "1.42.1" +name = "servo-fonts-traits" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be2a24f50780bc85f09cc6ac299bdf1424302742d77221106859c9d8b102126a" +checksum = "0319c8f08cba912a9e1102f788b1c433de3c92f195541fe2bb9b95bd068b1adc" dependencies = [ - "arrayvec", - "borsh", - "bytes", + "atomic_refcell", + "dwrote", + "log", + "malloc_size_of_derive", + "memmap2", + "num-derive", "num-traits", - "rand 0.8.6", - "rkyv", + "parking_lot", + "read-fonts", "serde", - "serde_json", - "wasm-bindgen", + "servo-base", + "servo-malloc-size-of", + "servo-profile-traits", + "servo-url", + "stylo", + "uuid", + "webrender_api", ] [[package]] -name = "rustc-hash" -version = "1.1.0" +name = "servo-geometry" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +checksum = "78dc8f12a92c0ebac3f315cf89694d84bcdebfa237dad761d1c1a8d31e13deb3" +dependencies = [ + "app_units", + "euclid", + "malloc_size_of_derive", + "servo-malloc-size-of", + "webrender", + "webrender_api", +] [[package]] -name = "rustc-hash" -version = "2.1.2" +name = "servo-hyper-serde" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "5554f80d770080d8618c34179010e8fae0b84d373ce66b591f5273fe56202ba5" +dependencies = [ + "cookie 0.18.1", + "headers 0.4.1", + "http 1.4.1", + "hyper 1.10.1", + "mime", + "serde_bytes", + "serde_core", +] [[package]] -name = "rustc_version" -version = "0.4.1" +name = "servo-jstraceable-derive" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +checksum = "6cff8defcd25240e39fcaf66f643c27985bd52b0db7eac9d06a6a5e9c229425d" dependencies = [ - "semver", + "proc-macro2", + "syn 2.0.117", + "synstructure", ] [[package]] -name = "rustc_version_runtime" -version = "0.3.0" +name = "servo-layout" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dd18cd2bae1820af0b6ad5e54f4a51d0f3fcc53b05f845675074efcc7af071d" +checksum = "20b7159bd1cf6439610bb8cdfe04bcf95e9e16981fe0d611d17166a88dc83726" dependencies = [ - "rustc_version", - "semver", + "app_units", + "atomic_refcell", + "bitflags 2.12.1", + "data-url", + "euclid", + "html5ever", + "icu_locid", + "icu_segmenter 1.5.0", + "itertools 0.14.0", + "kurbo 0.12.0", + "log", + "malloc_size_of_derive", + "parking_lot", + "rayon", + "rustc-hash 2.1.2", + "selectors 0.36.1", + "servo-base", + "servo-config", + "servo-embedder-traits", + "servo-fonts", + "servo-fonts-traits", + "servo-geometry", + "servo-layout-api", + "servo-malloc-size-of", + "servo-net-traits", + "servo-paint-api", + "servo-pixels", + "servo-profile-traits", + "servo-script", + "servo-script-traits", + "servo-tracing", + "servo-url", + "servo_arc", + "smallvec", + "strum 0.28.0", + "stylo", + "stylo_atoms", + "stylo_traits", + "taffy 0.10.1", + "unicode-bidi", + "unicode-script", + "unicode_categories", + "url", + "webrender_api", + "xi-unicode", ] [[package]] -name = "rustix" -version = "1.1.4" +name = "servo-layout-api" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "eb995d82ec78c84428e9ec1e10169405d0ea88ebd4c5a42bc9754d04ba00886e" dependencies = [ + "app_units", + "atomic_refcell", "bitflags 2.12.1", - "errno", + "euclid", + "html5ever", "libc", - "linux-raw-sys", - "windows-sys 0.61.2", + "malloc_size_of_derive", + "parking_lot", + "rustc-hash 2.1.2", + "selectors 0.36.1", + "serde", + "servo-background-hang-monitor-api", + "servo-base", + "servo-embedder-traits", + "servo-fonts", + "servo-malloc-size-of", + "servo-net-traits", + "servo-paint-api", + "servo-pixels", + "servo-profile-traits", + "servo-script-traits", + "servo-url", + "servo_arc", + "stylo", + "stylo_traits", + "webrender_api", ] [[package]] -name = "rustls" -version = "0.23.41" +name = "servo-malloc-size-of" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "a44cb6cd74602e71ac984df565b8b8a0ead351c05a35de5b1c452c79b81db751" +dependencies = [ + "accountable-refcell", + "app_units", + "atomic_refcell", + "content-security-policy", + "crossbeam-channel", + "encoding_rs", + "euclid", + "http 1.4.1", + "indexmap", + "ipc-channel", + "keyboard-types", + "markup5ever", + "mime", + "parking_lot", + "resvg", + "servo-allocator", + "servo_arc", + "smallvec", + "string_cache", + "stylo", + "stylo_dom", + "stylo_malloc_size_of", + "taffy 0.10.1", + "tendril", + "time", + "tokio", + "unicode-bidi", + "unicode-script", + "url", + "urlpattern", + "uuid", + "webrender", + "webrender_api", + "wr_malloc_size_of", +] + +[[package]] +name = "servo-media" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d6ff2e0360dcb2b1c7e26362fdd8b717a652e476f8c083e538fab008a908a1" dependencies = [ - "aws-lc-rs", - "log", "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", + "servo-media-audio", + "servo-media-player", + "servo-media-streams", + "servo-media-traits", + "servo-media-webrtc", ] [[package]] -name = "rustls-native-certs" -version = "0.8.4" +name = "servo-media-audio" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +checksum = "f4177bf980cc28fa99b12372d99784aaae45b0a18c0575b56529a5212a9c4fb9" dependencies = [ - "openssl-probe", - "rustls-pki-types", - "schannel", - "security-framework", + "byte-slice-cast", + "euclid", + "log", + "malloc_size_of_derive", + "num-complex", + "num-traits", + "petgraph", + "serde", + "serde_derive", + "servo-malloc-size-of", + "servo-media-derive", + "servo-media-player", + "servo-media-streams", + "servo-media-traits", + "smallvec", + "speexdsp-resampler", ] [[package]] -name = "rustls-pemfile" -version = "2.2.0" +name = "servo-media-derive" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +checksum = "25a8fb8ddc677cad71676a2daad5433804a1f02f4ada6255690c2b61140433cc" dependencies = [ - "rustls-pki-types", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] -name = "rustls-pki-types" -version = "1.14.1" +name = "servo-media-dummy" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +checksum = "c10006795fda72202c01bcd625e2cfc876db468cc0a765f0d41f60665437272c" dependencies = [ - "web-time", - "zeroize", + "ipc-channel", + "servo-media", + "servo-media-audio", + "servo-media-player", + "servo-media-streams", + "servo-media-traits", + "servo-media-webrtc", ] [[package]] -name = "rustls-webpki" -version = "0.103.13" +name = "servo-media-player" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "00c3093f3fb186ee94d07ceedde5cc090174e9cada9a707cfba42e05cf410f13" dependencies = [ - "aws-lc-rs", - "ring", - "rustls-pki-types", - "untrusted", + "ipc-channel", + "malloc_size_of_derive", + "serde", + "serde_derive", + "servo-malloc-size-of", + "servo-media-streams", + "servo-media-traits", ] [[package]] -name = "rustversion" -version = "1.0.22" +name = "servo-media-streams" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "756079897b38dd1692d8e0ad233ec025c559a33b710a660938ac100b195ea82d" +dependencies = [ + "malloc_size_of_derive", + "servo-malloc-size-of", + "uuid", +] [[package]] -name = "rusty-fork" -version = "0.3.1" +name = "servo-media-thread" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" +checksum = "2344b121d0db81c341edd18dc1c84901dcde02461b0176936f5adc5464b6b49d" dependencies = [ - "fnv", - "quick-error 1.2.3", - "tempfile", - "wait-timeout", + "euclid", + "ipc-channel", + "log", + "malloc_size_of_derive", + "rustc-hash 2.1.2", + "serde", + "servo-config", + "servo-malloc-size-of", + "servo-media", + "servo-paint-api", + "webrender_api", ] [[package]] -name = "ryu" -version = "1.0.23" +name = "servo-media-traits" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" +checksum = "b33ea65d329e3ad7dff536ae5b4375bacbe83299972fa1e74253d8d027db2186" +dependencies = [ + "malloc_size_of_derive", + "servo-malloc-size-of", +] [[package]] -name = "salsa20" -version = "0.10.2" +name = "servo-media-webrtc" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +checksum = "f9f7644e538e183768b837a141b969bcf364338c79abd6c6a9d0d63c2a570634" dependencies = [ - "cipher 0.4.4", + "log", + "servo-media-streams", + "uuid", ] [[package]] -name = "same-file" -version = "1.0.6" +name = "servo-metrics" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +checksum = "19a2bb90ae96520abd1b6d9f861e9a1e80c25249c958a47cbb44b5f30be21d16" dependencies = [ - "winapi-util", + "malloc_size_of_derive", + "servo-base", + "servo-config", + "servo-malloc-size-of", + "servo-paint-api", + "servo-profile-traits", + "servo-script-traits", + "servo-url", ] [[package]] -name = "schannel" -version = "0.1.29" +name = "servo-net" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +checksum = "2d0fa390a1761b36ecd0eb273ad1056ffcd48e41a395c2829d382a43fe765f19" dependencies = [ - "windows-sys 0.61.2", + "async-compression", + "async-recursion", + "async-tungstenite", + "base64 0.22.1", + "bytes", + "chrono", + "content-security-policy", + "cookie 0.18.1", + "crossbeam-channel", + "data-url", + "fst", + "futures", + "futures-core", + "futures-util", + "generic-array", + "headers 0.4.1", + "http 1.4.1", + "http-body-util", + "hyper 1.10.1", + "hyper-rustls", + "hyper-util", + "imsz", + "ipc-channel", + "itertools 0.14.0", + "log", + "malloc_size_of_derive", + "mime", + "mime_guess", + "nom 8.0.0", + "parking_lot", + "quick_cache", + "regex", + "resvg", + "rustc-hash 2.1.2", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", + "serde", + "servo-base", + "servo-config", + "servo-devtools-traits", + "servo-embedder-traits", + "servo-hyper-serde", + "servo-malloc-size-of", + "servo-net-traits", + "servo-paint-api", + "servo-pixels", + "servo-profile-traits", + "servo-url", + "servo_arc", + "sha2 0.10.9", + "time", + "tokio", + "tokio-rustls", + "tokio-stream", + "tokio-util", + "tower", + "tungstenite 0.29.0", + "url", + "uuid", + "webpki-roots 1.0.7", + "webrender_api", ] [[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scraper" -version = "0.27.0" +name = "servo-net-traits" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdd0be4d296f048bfb06dd01bbc80ef789ddd2e55583e8d2e6b804942abfabc2" +checksum = "68034c1beb21714a55f9f6dc27f68a5c1356aeabf1f94b72976970f01240b959" dependencies = [ - "cssparser", - "ego-tree", - "getopts", - "html5ever", - "precomputed-hash", - "selectors", - "tendril", + "content-security-policy", + "cookie 0.18.1", + "crossbeam-channel", + "data-url", + "headers 0.4.1", + "http 1.4.1", + "hyper-util", + "ipc-channel", + "log", + "malloc_size_of_derive", + "mime", + "num-traits", + "parking_lot", + "percent-encoding", + "rand 0.9.4", + "rustc-hash 2.1.2", + "rustls-pki-types", + "serde", + "servo-base", + "servo-config", + "servo-embedder-traits", + "servo-hyper-serde", + "servo-malloc-size-of", + "servo-paint-api", + "servo-pixels", + "servo-profile-traits", + "servo-url", + "servo_arc", + "sys-locale", + "tokio", + "url", + "uuid", + "webrender_api", ] [[package]] -name = "scrypt" -version = "0.11.0" +name = "servo-paint" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" +checksum = "007674e97e65c4fb2a4a981d20ec3ca8ed01b8a10fa419cb7aa73720fec882e4" dependencies = [ - "password-hash", - "pbkdf2 0.12.2", - "salsa20", - "sha2 0.10.9", + "bitflags 2.12.1", + "crossbeam-channel", + "dpi", + "euclid", + "gleam", + "image", + "ipc-channel", + "log", + "rayon", + "rustc-hash 2.1.2", + "servo-allocator", + "servo-base", + "servo-canvas-traits", + "servo-config", + "servo-constellation-traits", + "servo-embedder-traits", + "servo-geometry", + "servo-malloc-size-of", + "servo-media-thread", + "servo-paint-api", + "servo-profile-traits", + "servo-timers", + "servo-tracing", + "servo-webgl", + "smallvec", + "stylo_traits", + "surfman", + "webrender", + "webrender_api", + "wr_malloc_size_of", ] [[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - -[[package]] -name = "sec1" -version = "0.7.3" +name = "servo-paint-api" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +checksum = "e18a80a54113e97d25afec1b63153ad4a7099cb5067a734dc319d1594d51864f" dependencies = [ - "base16ct 0.2.0", - "der 0.7.10", - "generic-array", - "pkcs8 0.10.2", - "subtle", - "zeroize", + "bitflags 2.12.1", + "crossbeam-channel", + "dpi", + "euclid", + "gleam", + "glow", + "image", + "ipc-channel", + "log", + "malloc_size_of_derive", + "parking_lot", + "raw-window-handle", + "rustc-hash 2.1.2", + "serde", + "serde_bytes", + "servo-base", + "servo-embedder-traits", + "servo-geometry", + "servo-malloc-size-of", + "servo-profile-traits", + "servo-tracing", + "servo-url", + "smallvec", + "strum 0.28.0", + "stylo", + "stylo_traits", + "surfman", + "webrender_api", ] [[package]] -name = "sec1" -version = "0.8.1" +name = "servo-pixels" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" +checksum = "1ae9a8930376b7ae97ae55081029e675fec42bd76ad86b5ccdd027a60196baca" dependencies = [ - "base16ct 1.0.0", - "ctutils", - "der 0.8.0", - "hybrid-array", - "subtle", - "zeroize", + "euclid", + "image", + "log", + "malloc_size_of_derive", + "serde", + "servo-base", + "servo-malloc-size-of", + "webrender_api", ] [[package]] -name = "security-framework" -version = "3.7.0" +name = "servo-profile" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +checksum = "e96f151f9c0f34c5cf9153a16089a4cad7419b09015919b2cbe7252bf8b338ef" dependencies = [ - "bitflags 2.12.1", - "core-foundation 0.10.1", - "core-foundation-sys", "libc", - "security-framework-sys", + "log", + "mach2", + "regex", + "serde", + "serde_json", + "servo-allocator", + "servo-base", + "servo-config", + "servo-profile-traits", + "tikv-jemalloc-sys", + "time", ] [[package]] -name = "security-framework-sys" -version = "2.17.0" +name = "servo-profile-traits" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +checksum = "256c39202ad12b9325f08c29ed6cba90adafefad81a80c5ccf8b62982a49f954" dependencies = [ - "core-foundation-sys", - "libc", + "crossbeam-channel", + "ipc-channel", + "log", + "malloc_size_of_derive", + "serde", + "servo-allocator", + "servo-base", + "servo-malloc-size-of", + "time", ] [[package]] -name = "selectors" -version = "0.38.0" +name = "servo-script" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8adfa1c298912827b8a28b223b3b874357397ae706e6190acd9bf28cee99114d" +checksum = "d50488dc30ec50f21a53e8d810df2b05a5237c1f6b7bf30c2acc6dac9000cbb6" dependencies = [ + "aes 0.8.4", + "aes-gcm", + "aes-kw 0.2.1", + "app_units", + "argon2", + "arrayvec", + "atomic_refcell", + "aws-lc-rs", + "backtrace", + "base64 0.22.1", + "base64ct", "bitflags 2.12.1", - "cssparser", - "derive_more", + "brotli", + "cbc", + "chacha20poly1305", + "chardetng", + "chrono", + "cipher 0.4.4", + "content-security-policy", + "cookie 0.18.1", + "crossbeam-channel", + "cssparser 0.36.0", + "ctr", + "data-url", + "der 0.7.10", + "digest 0.10.7", + "ecdsa", + "elliptic-curve 0.13.8", + "encoding_rs", + "euclid", + "flate2", + "glow", + "headers 0.4.1", + "hkdf 0.12.4", + "html5ever", + "http 1.4.1", + "icu_locid", + "indexmap", + "ipc-channel", + "itertools 0.14.0", + "keyboard-types", + "libc", "log", - "new_debug_unreachable", + "malloc_size_of_derive", + "markup5ever", + "mime", + "mime-multipart-hyper1", + "mime_guess", + "ml-dsa", + "ml-kem 0.2.1", + "mozangle", + "mozjs", + "nom-rfc8288", + "num-bigint-dig", + "num-traits", + "num_cpus", + "ocb3", + "p256", + "p384", + "p521", + "parking_lot", + "percent-encoding", "phf 0.13.1", - "phf_codegen", - "precomputed-hash", + "pkcs8 0.10.2", + "postcard", + "rand 0.9.4", + "regex", + "rsa", "rustc-hash 2.1.2", + "sec1 0.7.3", + "selectors 0.36.1", + "serde", + "serde_json", + "servo-background-hang-monitor-api", + "servo-base", + "servo-canvas-traits", + "servo-config", + "servo-constellation-traits", + "servo-deny-public-fields", + "servo-devtools-traits", + "servo-dom-struct", + "servo-embedder-traits", + "servo-fonts", + "servo-fonts-traits", + "servo-geometry", + "servo-hyper-serde", + "servo-jstraceable-derive", + "servo-layout-api", + "servo-malloc-size-of", + "servo-media", + "servo-media-thread", + "servo-metrics", + "servo-net-traits", + "servo-paint-api", + "servo-pixels", + "servo-profile-traits", + "servo-script-bindings", + "servo-script-traits", + "servo-storage-traits", + "servo-timers", + "servo-url", + "servo-webgpu-traits", + "servo-xpath", "servo_arc", + "sha1 0.10.6", + "sha2 0.10.9", + "sha3 0.10.9", "smallvec", + "strum 0.28.0", + "stylo", + "stylo_atoms", + "stylo_dom", + "stylo_malloc_size_of", + "stylo_traits", + "swapper", + "tempfile", + "tendril", + "time", + "unicode-bidi", + "unicode-script", + "url", + "urlpattern", + "uuid", + "webdriver", + "webrender_api", + "wgpu-core", + "wgpu-types", + "x25519-dalek", + "xml5ever", ] [[package]] -name = "semver" -version = "1.0.28" +name = "servo-script-bindings" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +checksum = "ce2496104e87f3df3e170b49740236bc0c2f197d46f8dd5eee8c3770f206db36" +dependencies = [ + "bitflags 2.12.1", + "crossbeam-channel", + "encoding_rs", + "html5ever", + "indexmap", + "keyboard-types", + "libc", + "log", + "malloc_size_of_derive", + "mozjs", + "num-traits", + "parking_lot", + "phf 0.13.1", + "phf_codegen", + "phf_shared 0.13.1", + "regex", + "serde_json", + "servo-base", + "servo-config", + "servo-deny-public-fields", + "servo-dom-struct", + "servo-jstraceable-derive", + "servo-malloc-size-of", + "servo-profile-traits", + "servo-url", + "servo_arc", + "smallvec", + "stylo", + "stylo_atoms", + "tendril", + "xml5ever", +] [[package]] -name = "seq-macro" -version = "0.3.6" +name = "servo-script-traits" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" - -[[package]] -name = "serde" -version = "1.0.228" +checksum = "49aed2ab31e293fb46cf9f4e1f9c661df212d95cd1838860fe916c19b3f9df24" +dependencies = [ + "accesskit", + "crossbeam-channel", + "euclid", + "keyboard-types", + "malloc_size_of_derive", + "rustc-hash 2.1.2", + "serde", + "servo-base", + "servo-canvas-traits", + "servo-config", + "servo-constellation-traits", + "servo-devtools-traits", + "servo-embedder-traits", + "servo-fonts-traits", + "servo-malloc-size-of", + "servo-media-thread", + "servo-net-traits", + "servo-paint-api", + "servo-pixels", + "servo-profile-traits", + "servo-storage-traits", + "servo-url", + "servo-webxr-api", + "strum 0.28.0", + "stylo_atoms", + "stylo_traits", + "webrender_api", +] + +[[package]] +name = "servo-storage" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "98db3c294e4f822d8ec28a5159a41122b39959dec72ea2b3ada0079d07c5a5f6" dependencies = [ - "serde_core", - "serde_derive", + "libc", + "log", + "malloc_size_of_derive", + "postcard", + "rusqlite", + "rustc-hash 2.1.2", + "sea-query", + "sea-query-rusqlite", + "serde", + "servo-base", + "servo-config", + "servo-malloc-size-of", + "servo-net-traits", + "servo-profile-traits", + "servo-storage-traits", + "servo-url", + "tempfile", + "uuid", ] [[package]] -name = "serde_bytes" -version = "0.11.19" +name = "servo-storage-traits" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" +checksum = "651b7690b4919b91e47f2949ce3f7c1f38cd9c3eed1dbe50336edfbb7057b9ed" dependencies = [ + "malloc_size_of_derive", "serde", - "serde_core", + "servo-base", + "servo-malloc-size-of", + "servo-profile-traits", + "servo-url", + "uuid", ] [[package]] -name = "serde_core" -version = "1.0.228" +name = "servo-timers" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "f18e4c2283862a586c6aa5fb3fc8eb7c97a82322a6a9aeab05ce8f67f1a493b6" dependencies = [ - "serde_derive", + "crossbeam-channel", + "malloc_size_of_derive", + "servo-malloc-size-of", ] [[package]] -name = "serde_derive" -version = "1.0.228" +name = "servo-tracing" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "91230404bbe3ff749259b0718854dabdc5348aa730baa6029c837bd315ecbc85" dependencies = [ "proc-macro2", "quote", @@ -7658,93 +11316,128 @@ dependencies = [ ] [[package]] -name = "serde_json" -version = "1.0.150" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "serde_repr" -version = "0.1.20" +name = "servo-url" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "1c00723fd5564b25733dd072beba7d75770ba24ea97c9a2bb8df594b268c67cd" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", + "encoding_rs", + "malloc_size_of_derive", + "serde", + "servo-malloc-size-of", + "servo_arc", + "url", + "uuid", ] [[package]] -name = "serde_spanned" -version = "1.1.1" +name = "servo-webgl" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +checksum = "7e27ba2f7128ffa32fa6000c2bb92186d726e7d07e476243e9cb138822883ad7" dependencies = [ - "serde_core", + "bitflags 2.12.1", + "byteorder", + "crossbeam-channel", + "euclid", + "glow", + "half", + "itertools 0.14.0", + "log", + "parking_lot", + "rustc-hash 2.1.2", + "servo-base", + "servo-canvas-traits", + "servo-paint-api", + "servo-pixels", + "surfman", + "webrender_api", ] [[package]] -name = "serde_urlencoded" -version = "0.7.1" +name = "servo-webgpu" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +checksum = "98f30dc687a622f668e5b2e7f46cd9194b2df17f0b0b3dd0b1bb589e2ce8664c" dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", + "arrayvec", + "euclid", + "log", + "rustc-hash 2.1.2", + "servo-base", + "servo-config", + "servo-paint-api", + "servo-pixels", + "servo-webgpu-traits", + "webrender_api", + "wgpu-core", + "wgpu-types", ] [[package]] -name = "serde_with" -version = "3.20.0" +name = "servo-webgpu-traits" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" +checksum = "b1122ef7d6c705ad8fa3d7081ead0542199c1a2ddb12faf4e610974a8718e23c" dependencies = [ - "serde_core", - "serde_with_macros", + "arrayvec", + "malloc_size_of_derive", + "serde", + "servo-base", + "servo-malloc-size-of", + "servo-pixels", + "webrender_api", + "wgpu-core", + "wgpu-types", ] [[package]] -name = "serde_with_macros" -version = "3.20.0" +name = "servo-webxr" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" +checksum = "9b7a4d5bb2e03c017bf71688456bea557802f8c1a3f655abc0ed1f1c5ef877bf" dependencies = [ - "darling 0.23.0", - "proc-macro2", - "quote", - "syn 2.0.117", + "crossbeam-channel", + "euclid", + "glow", + "log", + "openxr", + "raw-window-handle", + "servo-base", + "servo-profile-traits", + "servo-webxr-api", + "surfman", + "winapi", + "wio", ] [[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" +name = "servo-webxr-api" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +checksum = "39740f879322f006c8fc7b8c52db6f1d96d034faca638817e692d2d5f57c07d9" dependencies = [ - "indexmap", - "itoa", - "ryu", + "euclid", + "ipc-channel", + "log", + "malloc_size_of_derive", "serde", - "unsafe-libyaml", + "servo-base", + "servo-embedder-traits", + "servo-malloc-size-of", + "servo-profile-traits", ] [[package]] -name = "serdect" -version = "0.4.3" +name = "servo-xpath" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" +checksum = "3d311cbec5b4757329ca8b8266d1cde49e4196bdaab66630e31695b1f7d4b68c" dependencies = [ - "base16ct 1.0.0", - "serde", + "log", + "malloc_size_of_derive", + "markup5ever", + "servo-malloc-size-of", ] [[package]] @@ -7753,6 +11446,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" dependencies = [ + "serde", "stable_deref_trait", ] @@ -7957,6 +11651,15 @@ dependencies = [ "time", ] +[[package]] +name = "simplecss" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a9c6883ca9c3c7c90e888de77b7a5c849c779d25d74a1269b0218b14e8b136c" +dependencies = [ + "log", +] + [[package]] name = "siphasher" version = "0.3.11" @@ -7969,6 +11672,16 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" +[[package]] +name = "skrifa" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841" +dependencies = [ + "bytemuck", + "read-fonts", +] + [[package]] name = "slab" version = "0.4.12" @@ -7984,6 +11697,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "smallbitvec" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b0e903ee191d8f7a8fbf0d712c3a1699d19e04ceba5ad1eb673053c7d938a09" + [[package]] name = "smallvec" version = "1.15.1" @@ -8004,6 +11723,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "socket2" version = "0.6.4" @@ -8040,6 +11769,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "speexdsp-resampler" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b72d540d5c565dbe1f891d7e21ceb21d2649508306782f1066989fccb0b363d3" + [[package]] name = "spin" version = "0.9.8" @@ -8058,6 +11793,15 @@ dependencies = [ "lock_api", ] +[[package]] +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +dependencies = [ + "bitflags 2.12.1", +] + [[package]] name = "spki" version = "0.7.3" @@ -8103,7 +11847,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b44e85bf579a8eeb4ceaa77a3a523baf2bf0e9bac7e40f405d537b5d2d5ccb" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "cfg-if", "chrono", @@ -8204,7 +11948,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87a2bdd6e83f6b3ea525ca9fee568030508b58355a43d0b2c1674d5f79dcd65e" dependencies = [ "atoi", - "base64", + "base64 0.22.1", "bitflags 2.12.1", "byteorder", "chrono", @@ -8252,115 +11996,350 @@ dependencies = [ "log", "percent-encoding", "serde", - "sqlx-core", - "thiserror 2.0.18", - "tracing", + "sqlx-core", + "thiserror 2.0.18", + "tracing", + "url", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "stacker" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "640c8cdd92b6b12f5bcb1803ca3bbf5ab96e5e6b6b96b9ab77dabe9e880b3190" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "windows-sys 0.61.2", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strck" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be91090ded9d8f979d9fe921777342d37e769e0b6b7296843a7a38247240e917" + +[[package]] +name = "strck_ident" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1c3802b169b3858a44667f221c9a0b3136e6019936ea926fc97fbad8af77202" +dependencies = [ + "strck", + "unicode-ident", +] + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +dependencies = [ + "float-cmp", +] + +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.13.1", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator 0.13.1", + "phf_shared 0.13.1", + "proc-macro2", + "quote", +] + +[[package]] +name = "string_enum" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae36a4951ca7bd1cfd991c241584a9824a70f6aff1e7d4f693fb3f2465e4030e" +dependencies = [ + "quote", + "swc_macros_common", + "syn 2.0.117", +] + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros 0.27.2", +] + +[[package]] +name = "strum" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" +dependencies = [ + "strum_macros 0.28.0", +] + +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "strum_macros" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "stylo" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c032879feb9c437f8eb370b1ddc56c13531267766bd6f3ada99c406d36d60a6" +dependencies = [ + "app_units", + "arrayvec", + "atomic_refcell", + "bitflags 2.12.1", + "byteorder", + "cssparser 0.36.0", + "derive_more", + "encoding_rs", + "euclid", + "icu_segmenter 2.2.0", + "indexmap", + "itertools 0.14.0", + "itoa", + "log", + "malloc_size_of_derive", + "mime", + "new_debug_unreachable", + "num-derive", + "num-integer", + "num-traits", + "num_cpus", + "parking_lot", + "precomputed-hash", + "rayon", + "rayon-core", + "rustc-hash 2.1.2", + "selectors 0.36.1", + "serde", + "servo_arc", + "smallbitvec", + "smallvec", + "static_assertions", + "string_cache", + "strum 0.28.0", + "strum_macros 0.28.0", + "stylo_atoms", + "stylo_derive", + "stylo_dom", + "stylo_malloc_size_of", + "stylo_static_prefs", + "stylo_traits", + "thin-vec", + "to_shmem", + "to_shmem_derive", + "uluru", "url", + "void", + "walkdir", + "web_atoms", ] [[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - -[[package]] -name = "stacker" -version = "0.1.24" +name = "stylo_atoms" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "640c8cdd92b6b12f5bcb1803ca3bbf5ab96e5e6b6b96b9ab77dabe9e880b3190" +checksum = "dbb92d87ad2ba792800cc2bf508eb17286044303ebe55b15cd7e541190486c86" dependencies = [ - "cc", - "cfg-if", - "libc", - "psm", - "windows-sys 0.61.2", + "string_cache", + "string_cache_codegen", ] [[package]] -name = "static_assertions" -version = "1.1.0" +name = "stylo_derive" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +checksum = "338d14b4375657058b395afcf11bee2fc22a77e9d80f66ee863b617b38d4319a" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] [[package]] -name = "string_cache" -version = "0.9.0" +name = "stylo_dom" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +checksum = "1aa592a930bd67daa5c9c07bc7b422f23f67b5bd30532e85a6fcfef348cf0fb9" dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared 0.13.1", - "precomputed-hash", + "bitflags 2.12.1", + "stylo_malloc_size_of", ] [[package]] -name = "string_cache_codegen" -version = "0.6.1" +name = "stylo_malloc_size_of" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +checksum = "a8cd4ec615ff7bbc849d1d7d95891c39db20dfd1cb79eb8ba29c54107a4101a3" dependencies = [ - "phf_generator 0.13.1", - "phf_shared 0.13.1", - "proc-macro2", - "quote", + "app_units", + "cssparser 0.36.0", + "euclid", + "selectors 0.36.1", + "servo_arc", + "smallbitvec", + "smallvec", + "string_cache", + "thin-vec", + "void", ] [[package]] -name = "string_enum" -version = "1.0.2" +name = "stylo_static_prefs" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae36a4951ca7bd1cfd991c241584a9824a70f6aff1e7d4f693fb3f2465e4030e" -dependencies = [ - "quote", - "swc_macros_common", - "syn 2.0.117", -] +checksum = "dc94d0d425d29db1da9535b12793a0db91e85ca2fde13adc73df33f49ee75af7" [[package]] -name = "stringprep" -version = "0.1.5" +name = "stylo_traits" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +checksum = "30cc7f5c9b43201f0d5c81ca190ccbf29382cff3af4cc926c9cd5e53beb6c9e5" dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", + "app_units", + "bitflags 2.12.1", + "cssparser 0.36.0", + "euclid", + "malloc_size_of_derive", + "selectors 0.36.1", + "serde", + "servo_arc", + "stylo_atoms", + "stylo_malloc_size_of", + "thin-vec", + "to_shmem", + "to_shmem_derive", + "url", ] [[package]] -name = "strsim" -version = "0.11.1" +name = "subtle" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] -name = "strum" -version = "0.27.2" +name = "surfman" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +checksum = "04d3973284ef0dc7362cdaee41c2356c4c39a5a5ebd8490c5163ebf21a7adc02" dependencies = [ - "strum_macros", + "bitflags 2.12.1", + "cfg_aliases", + "cgl", + "euclid", + "fnv", + "gl_generator", + "glow", + "libc", + "log", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-video", + "objc2-foundation", + "objc2-io-surface", + "objc2-metal", + "objc2-quartz-core", + "raw-window-handle", + "wayland-sys", + "winapi", + "wio", + "x11-dl", ] [[package]] -name = "strum_macros" -version = "0.27.2" +name = "svg_fmt" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" + +[[package]] +name = "svgtypes" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.117", + "kurbo 0.11.3", + "siphasher 1.0.3", ] [[package]] -name = "subtle" -version = "2.6.1" +name = "swapper" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "e454d048db5527d000bfddb77bd072bbf3a1e2ae785f16d9bd116e07c2ab45eb" [[package]] name = "swc_atoms" @@ -8512,6 +12491,15 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "sys-locale" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +dependencies = [ + "libc", +] + [[package]] name = "system-configuration" version = "0.7.0" @@ -8553,7 +12541,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab4f4d046dd956a47a7e1a2947083d7ac3e6aa3cfaaead36173ceaa5ab11878c" dependencies = [ "arrayvec", - "grid", + "grid 0.15.0", + "serde", + "slotmap", +] + +[[package]] +name = "taffy" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aea22054047c16c3f34d3ac473a2170be1424b1115b2a3adcf28cfb067c88859" +dependencies = [ + "arrayvec", + "grid 1.0.1", "serde", "slotmap", ] @@ -8612,17 +12612,17 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1afc06e45b0d63943c777d0233523fa2e23a12431a73c37b1c0366777b31717" dependencies = [ - "calendrical_calculations", + "calendrical_calculations 0.2.4", "core_maths", "iana-time-zone", - "icu_calendar", + "icu_calendar 2.2.1", "icu_locale_core", "ixdtf", "num-traits", "timezone_provider", - "tinystr", + "tinystr 0.8.3", "web-time", - "writeable", + "writeable 0.6.3", ] [[package]] @@ -8631,6 +12631,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24" dependencies = [ + "encoding_rs", "new_debug_unreachable", "utf-8", ] @@ -8644,6 +12645,22 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "textnonce" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7743f8d70cd784ed1dc33106a18998d77758d281dc40dc3e6d050cf0f5286683" +dependencies = [ + "base64 0.12.3", + "rand 0.7.3", +] + +[[package]] +name = "thin-vec" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0f7e269b48f0a7dd0146680fa24b50cc67fc0373f086a5b2f99bd084639b482" + [[package]] name = "thiserror" version = "1.0.69" @@ -8704,7 +12721,27 @@ dependencies = [ "half", "quick-error 2.0.1", "weezl", - "zune-jpeg", + "zune-jpeg 0.5.15", +] + +[[package]] +name = "tikv-jemalloc-sys" +version = "0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8aa5b2ab86a2cefa406d889139c162cbb230092f7d1d7cbc1716405d852a3b" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "tikv-jemallocator" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0359b4327f954e0567e69fb191cf1436617748813819c94b8cd4a431422d053a" +dependencies = [ + "libc", + "tikv-jemalloc-sys", ] [[package]] @@ -8716,7 +12753,9 @@ dependencies = [ "deranged", "itoa", "js-sys", + "libc", "num-conv", + "num_threads", "powerfmt", "serde_core", "time-core", @@ -8747,10 +12786,10 @@ checksum = "c48f9b04628a2b813051e4dfe97c65281e49625eabd09ec343190e31e399a8c2" dependencies = [ "combine", "jiff-tzdb", - "tinystr", + "tinystr 0.8.3", "tzif", - "zerotrie", - "zerovec", + "zerotrie 0.2.4", + "zerovec 0.11.6", ] [[package]] @@ -8762,6 +12801,32 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "png 0.17.16", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + [[package]] name = "tiny_http" version = "0.12.0" @@ -8774,6 +12839,16 @@ dependencies = [ "log", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec 0.10.4", +] + [[package]] name = "tinystr" version = "0.8.3" @@ -8782,7 +12857,7 @@ checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "serde_core", - "zerovec", + "zerovec 0.11.6", ] [[package]] @@ -8800,6 +12875,33 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "to_shmem" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab187810ca1e6aaa4c97a06492aac9ade2ffae6a301fd2aac103656f5a69edb" +dependencies = [ + "cssparser 0.36.0", + "servo_arc", + "smallbitvec", + "smallvec", + "string_cache", + "thin-vec", +] + +[[package]] +name = "to_shmem_derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ba1f5563024b63bb6acb4558452d9ba737518c1d11fcc1861febe98d1e31cf4" +dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + [[package]] name = "tokio" version = "1.52.3" @@ -8812,7 +12914,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.6.4", "tokio-macros", "tracing", "windows-sys 0.61.2", @@ -8948,6 +13050,12 @@ version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +[[package]] +name = "topological-sort" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa7c7f42dea4b1b99439786f5633aeb9c14c1b53f75e282803c2ec2ad545873c" + [[package]] name = "tower" version = "0.5.3" @@ -8972,8 +13080,8 @@ dependencies = [ "bitflags 2.12.1", "bytes", "futures-util", - "http", - "http-body", + "http 1.4.1", + "http-body 1.0.1", "pin-project-lite", "tower", "tower-layer", @@ -9046,7 +13154,7 @@ dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex-automata", + "regex-automata 0.4.14", "sharded-slab", "smallvec", "thread_local", @@ -9055,6 +13163,12 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "tracy-rs" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce607aae8ab0ab3abf3a2723a9ab6f09bb8639ed83fdd888d857b8e556c868d8" + [[package]] name = "trait-variant" version = "0.1.2" @@ -9087,6 +13201,9 @@ name = "ttf-parser" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" +dependencies = [ + "core_maths", +] [[package]] name = "tungstenite" @@ -9097,7 +13214,7 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http", + "http 1.4.1", "httparse", "log", "rand 0.8.6", @@ -9117,7 +13234,7 @@ checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8" dependencies = [ "bytes", "data-encoding", - "http", + "http 1.4.1", "httparse", "log", "rand 0.9.4", @@ -9185,12 +13302,62 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "uluru" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c8a2469e56e6e5095c82ccd3afb98dad95f7af7929aab6d8ba8d6e0f73657da" +dependencies = [ + "arrayvec", +] + [[package]] name = "unarray" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + [[package]] name = "unicase" version = "2.9.0" @@ -9201,7 +13368,13 @@ checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" name = "unicode-bidi" version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-bidi-mirroring" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe" [[package]] name = "unicode-canonical-combining-class" @@ -9209,6 +13382,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41c99d5174052d02ce765418e826597a1be18f32c114e35d9e22f92390239561" +[[package]] +name = "unicode-ccc" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" + [[package]] name = "unicode-general-category" version = "1.1.0" @@ -9248,12 +13427,24 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" +[[package]] +name = "unicode-script" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" + [[package]] name = "unicode-segmentation" version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" +[[package]] +name = "unicode-vo" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" + [[package]] name = "unicode-width" version = "0.2.2" @@ -9266,6 +13457,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + [[package]] name = "unit-prefix" version = "0.5.2" @@ -9304,6 +13501,46 @@ dependencies = [ "idna", "percent-encoding", "serde", + "serde_derive", +] + +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "usvg" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef" +dependencies = [ + "base64 0.22.1", + "data-url", + "flate2", + "fontdb", + "imagesize", + "kurbo 0.11.3", + "log", + "pico-args", + "roxmltree", + "rustybuzz", + "simplecss", + "siphasher 1.0.3", + "strict-num", + "svgtypes", + "tiny-skia-path", + "unicode-bidi", + "unicode-script", + "unicode-vo", + "xmlwriter", ] [[package]] @@ -9312,6 +13549,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -9392,6 +13635,32 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vello_common" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a235ba928b3109ad9e7696270edb09445a52ae1c7c08e6d31a19b1cdd6cbc24a" +dependencies = [ + "bytemuck", + "fearless_simd", + "hashbrown 0.15.5", + "log", + "peniko", + "png 0.17.16", + "skrifa", + "smallvec", +] + +[[package]] +name = "vello_cpu" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0bd1fcf9c1814f17a491e07113623d44e3ec1125a9f3401f5e047d6d326da21" +dependencies = [ + "bytemuck", + "vello_common", +] + [[package]] name = "version-compare" version = "0.2.1" @@ -9404,6 +13673,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + [[package]] name = "wait-timeout" version = "0.2.1" @@ -9432,6 +13707,39 @@ dependencies = [ "try-lock", ] +[[package]] +name = "warp" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "headers 0.3.9", + "http 0.2.12", + "hyper 0.14.32", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-util", + "tower-service", + "tracing", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -9613,6 +13921,18 @@ dependencies = [ "semver", ] +[[package]] +name = "wayland-sys" +version = "0.31.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be" +dependencies = [ + "dlib", + "log", + "once_cell", + "pkg-config", +] + [[package]] name = "web-sys" version = "0.3.99" @@ -9645,6 +13965,29 @@ dependencies = [ "string_cache_codegen", ] +[[package]] +name = "webdriver" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91d53921e1bef27512fa358179c9a22428d55778d2c2ae3c5c37a52b82ce6e92" +dependencies = [ + "base64 0.22.1", + "bytes", + "cookie 0.16.2", + "http 0.2.12", + "icu_segmenter 1.5.0", + "log", + "serde", + "serde_derive", + "serde_json", + "thiserror 1.0.69", + "time", + "tokio", + "tokio-stream", + "url", + "warp", +] + [[package]] name = "webkit6" version = "0.4.0" @@ -9678,6 +14021,15 @@ dependencies = [ "system-deps", ] +[[package]] +name = "webpki-root-certs" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d46a5a140e6f7afeccd8eae97eff335163939eac8b929834875168b29b3d267" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webpki-roots" version = "0.26.11" @@ -9696,6 +14048,73 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "webrender" +version = "0.68.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a591c25221a9f8ac2ad7754659b283d912cee6c8424f0fa3777aabed3be91c16" +dependencies = [ + "allocator-api2", + "bincode", + "bitflags 2.12.1", + "build-parallel", + "byteorder", + "derive_more", + "etagere", + "euclid", + "gleam", + "glslopt", + "lazy_static", + "log", + "malloc_size_of_derive", + "num-traits", + "peek-poke", + "plane-split", + "rayon", + "ron", + "rustc-hash 2.1.2", + "serde", + "smallvec", + "svg_fmt", + "topological-sort", + "tracy-rs", + "webrender_api", + "webrender_build", + "wr_glyph_rasterizer", + "wr_malloc_size_of", + "zeitstempel", +] + +[[package]] +name = "webrender_api" +version = "0.68.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb206f613b4635881065a2ff4670e656edc904af0b8729c51ce1196679fd1b6d" +dependencies = [ + "app_units", + "bitflags 2.12.1", + "byteorder", + "crossbeam-channel", + "euclid", + "malloc_size_of_derive", + "peek-poke", + "serde", + "serde_bytes", + "serde_derive", + "wr_malloc_size_of", + "zeitstempel", +] + +[[package]] +name = "webrender_build" +version = "0.68.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e6165a81201892371061250bd6f08ede9ed7279842fedc4033f48582a789068" +dependencies = [ + "bitflags 2.12.1", + "lazy_static", +] + [[package]] name = "webview2-com" version = "0.39.1" @@ -9704,8 +14123,8 @@ checksum = "3f89fca7a704cee10dcb3654c1dbb8941d1783132f1917358af75bec37a7d7e6" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows", - "windows-core", + "windows 0.62.2", + "windows-core 0.62.2", ] [[package]] @@ -9726,8 +14145,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3a07132775117d6065853d9d1178157b8c90e228de47129d6bce2c7edebedfb" dependencies = [ "thiserror 2.0.18", - "windows", - "windows-core", + "windows 0.62.2", + "windows-core 0.62.2", ] [[package]] @@ -9736,6 +14155,123 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" +[[package]] +name = "wgpu-core" +version = "26.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f62f1053bd28c2268f42916f31588f81f64796e2ff91b81293515017ca8bd9" +dependencies = [ + "arrayvec", + "bit-set", + "bit-vec", + "bitflags 2.12.1", + "cfg_aliases", + "document-features", + "hashbrown 0.15.5", + "indexmap", + "log", + "naga", + "once_cell", + "parking_lot", + "profiling", + "rustc-hash 1.1.0", + "serde", + "smallvec", + "thiserror 2.0.18", + "wgpu-core-deps-apple", + "wgpu-core-deps-emscripten", + "wgpu-core-deps-windows-linux-android", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core-deps-apple" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18ae5fbde6a4cbebae38358aa73fcd6e0f15c6144b67ef5dc91ded0db125dbdf" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-emscripten" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7670e390f416006f746b4600fdd9136455e3627f5bd763abf9a65daa216dd2d" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-windows-linux-android" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "720a5cb9d12b3d337c15ff0e24d3e97ed11490ff3f7506e7f3d98c68fa5d6f14" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-hal" +version = "26.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d0e67224cc7305b3b4eb2cc57ca4c4c3afc665c1d1bee162ea806e19c47bdd" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.12.1", + "block", + "bytemuck", + "cfg-if", + "cfg_aliases", + "core-graphics-types 0.2.0", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hashbrown 0.15.5", + "js-sys", + "khronos-egl", + "libc", + "libloading", + "log", + "metal", + "naga", + "ndk-sys", + "objc", + "ordered-float", + "parking_lot", + "profiling", + "range-alloc", + "raw-window-handle", + "smallvec", + "thiserror 2.0.18", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "windows 0.58.0", + "windows-core 0.58.0", +] + +[[package]] +name = "wgpu-types" +version = "26.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca7a8d8af57c18f57d393601a1fb159ace8b2328f1b6b5f80893f7d672c9ae2" +dependencies = [ + "bitflags 2.12.1", + "bytemuck", + "js-sys", + "log", + "serde", + "thiserror 2.0.18", + "web-sys", +] + [[package]] name = "which" version = "8.0.4" @@ -9774,39 +14310,97 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] -name = "winapi-util" -version = "0.1.11" +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections 0.2.0", + "windows-core 0.61.2", + "windows-future 0.2.1", + "windows-link 0.1.3", + "windows-numerics 0.2.0", +] + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections 0.3.2", + "windows-core 0.62.2", + "windows-future 0.3.2", + "windows-numerics 0.3.1", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "windows-sys 0.61.2", + "windows-core 0.61.2", ] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "windows-collections" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core 0.62.2", +] [[package]] -name = "windows" -version = "0.62.2" +name = "windows-core" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ - "windows-collections", - "windows-core", - "windows-future", - "windows-numerics", + "windows-implement 0.58.0", + "windows-interface 0.58.0", + "windows-result 0.2.0", + "windows-strings 0.1.0", + "windows-targets 0.52.6", ] [[package]] -name = "windows-collections" -version = "0.3.2" +name = "windows-core" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-core", + "windows-implement 0.60.2", + "windows-interface 0.59.3", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] @@ -9815,11 +14409,22 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result", - "windows-strings", + "windows-implement 0.60.2", + "windows-interface 0.59.3", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading 0.1.0", ] [[package]] @@ -9828,9 +14433,20 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ - "windows-core", - "windows-link", - "windows-threading", + "windows-core 0.62.2", + "windows-link 0.2.1", + "windows-threading 0.2.1", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -9844,6 +14460,17 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "windows-interface" version = "0.59.3" @@ -9855,20 +14482,36 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + [[package]] name = "windows-numerics" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ - "windows-core", - "windows-link", + "windows-core 0.62.2", + "windows-link 0.2.1", ] [[package]] @@ -9877,9 +14520,27 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", ] [[package]] @@ -9888,7 +14549,26 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link", + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", ] [[package]] @@ -9897,7 +14577,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -9951,7 +14631,7 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -10006,7 +14686,7 @@ version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link", + "windows-link 0.2.1", "windows_aarch64_gnullvm 0.53.1", "windows_aarch64_msvc 0.53.1", "windows_i686_gnu 0.53.1", @@ -10017,13 +14697,22 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + [[package]] name = "windows-threading" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -10224,6 +14913,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "wio" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" +dependencies = [ + "winapi", +] + [[package]] name = "wit-bindgen" version = "0.51.0" @@ -10318,6 +15016,57 @@ dependencies = [ "wasmparser 0.244.0", ] +[[package]] +name = "wr_glyph_rasterizer" +version = "0.68.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4fcffa889d25131fc7c6ec8a558aa7c78d6030eaa17e31695c172adcc4eb0b" +dependencies = [ + "core-foundation 0.9.4", + "core-graphics", + "core-text", + "dwrote", + "euclid", + "freetype", + "lazy_static", + "libc", + "log", + "malloc_size_of_derive", + "objc", + "rayon", + "rustc-hash 2.1.2", + "serde", + "smallvec", + "tracy-rs", + "webrender_api", + "wr_malloc_size_of", +] + +[[package]] +name = "wr_malloc_size_of" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "482308b684f11723b200a32808094bb460b5ac4840903ccbcb78ad92a6354a1f" +dependencies = [ + "app_units", + "euclid", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +dependencies = [ + "either", +] + [[package]] name = "writeable" version = "0.6.3" @@ -10333,6 +15082,34 @@ dependencies = [ "tap", ] +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +dependencies = [ + "gethostname", + "rustix", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" + [[package]] name = "x25519-dalek" version = "2.0.1" @@ -10376,6 +15153,40 @@ dependencies = [ "rustix", ] +[[package]] +name = "xi-unicode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" + +[[package]] +name = "xml" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "636f85e5ca6488e96401b61eb7de54f4e44755c988af0f52cf90230c312a1a89" + +[[package]] +name = "xml-rs" +version = "0.8.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" + +[[package]] +name = "xml5ever" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab627f34ff61b80d756180d556f9c68801d836d271b3b8c094504ceca69d221" +dependencies = [ + "log", + "markup5ever", +] + +[[package]] +name = "xmlwriter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" + [[package]] name = "xxhash-rust" version = "0.8.15" @@ -10388,6 +15199,29 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" +[[package]] +name = "yeslogic-fontconfig-sys" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8b8abf912b9a29ff112e1671c97c33636903d13a69712037190e6805af4f76" +dependencies = [ + "dlib", + "once_cell", + "pkg-config", +] + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive 0.7.5", + "zerofrom", +] + [[package]] name = "yoke" version = "0.8.2" @@ -10395,10 +15229,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" dependencies = [ "stable_deref_trait", - "yoke-derive", + "yoke-derive 0.8.2", "zerofrom", ] +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + [[package]] name = "yoke-derive" version = "0.8.2" @@ -10473,6 +15319,18 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zeitstempel" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94652f036694517fa67509942c3b60a51a19e1cd9cfd0f456eeb830ae8798d3d" +dependencies = [ + "cfg-if", + "libc", + "once_cell", + "winapi", +] + [[package]] name = "zerocopy" version = "0.8.50" @@ -10534,6 +15392,17 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "zerotrie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb594dd55d87335c5f60177cee24f19457a5ec10a065e0a3014722ad252d0a1f" +dependencies = [ + "displaydoc", + "yoke 0.7.5", + "zerofrom", +] + [[package]] name = "zerotrie" version = "0.2.4" @@ -10541,9 +15410,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", - "yoke", + "yoke 0.8.2", + "zerofrom", + "zerovec 0.11.6", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke 0.7.5", "zerofrom", - "zerovec", + "zerovec-derive 0.10.3", ] [[package]] @@ -10553,9 +15433,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "serde", - "yoke", + "yoke 0.8.2", "zerofrom", - "zerovec-derive", + "zerovec-derive 0.11.3", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -10648,6 +15539,12 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + [[package]] name = "zune-core" version = "0.5.1" @@ -10663,13 +15560,22 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "zune-jpeg" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" +dependencies = [ + "zune-core 0.4.12", +] + [[package]] name = "zune-jpeg" version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" dependencies = [ - "zune-core", + "zune-core 0.5.1", ] [[package]] @@ -10711,3 +15617,8 @@ dependencies = [ "syn 2.0.117", "winnow 1.0.3", ] + +[[patch.unused]] +name = "servo-script" +version = "0.1.0" +source = "git+https://github.com/PerryTS/servo-script-mlkem?rev=e4dc40a54366ac327845c8dd5013a3fb068d19b5#e4dc40a54366ac327845c8dd5013a3fb068d19b5" diff --git a/Cargo.toml b/Cargo.toml index 70233c7109..225d71e371 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -487,3 +487,10 @@ perry-codegen-wasm = { path = "crates/perry-codegen-wasm" } perry-ui-testkit = { path = "crates/perry-ui-testkit" } perry-audio-miniaudio = { path = "crates/perry-audio-miniaudio" } perry-updater = { path = "crates/perry-updater" } + +# Experimental: fork of servo-script migrated from ml-kem 0.2 -> 0.3.2 so its +# WebCrypto ML-KEM coexists with perry's ml-kem 0.3.2 (pkcs8). Enables the +# in-process Servo webview (servo-webview feature). Source + migration diff: +# https://github.com/PerryTS/servo-script-mlkem (see docs/servo/README.md). +[patch.crates-io] +servo-script = { git = "https://github.com/PerryTS/servo-script-mlkem", rev = "e4dc40a54366ac327845c8dd5013a3fb068d19b5" } diff --git a/crates/perry-codegen/src/codegen/entry.rs b/crates/perry-codegen/src/codegen/entry.rs index 9bad47b3e5..7d7b85abf6 100644 --- a/crates/perry-codegen/src/codegen/entry.rs +++ b/crates/perry-codegen/src/codegen/entry.rs @@ -870,6 +870,16 @@ pub(super) fn compile_module_entry( let _ = ctx.block().call(I32, "js_interval_timer_tick", &[]); } ctx.block().call_void("js_run_stdlib_pump", &[]); + + // Top-level UI loop takeover. If a windowed app requested a + // native UI event loop (e.g. the Electron-compat `app` shell), + // hand control to it HERE — at the true top level of `main`, + // before the async event loop. This is what lets a window + // created from `app.whenReady().then(...)` actually composite; + // entering `[NSApp run]` from a microtask leaves windows + // off-screen. No-op when no UI loop is registered. + ctx.block().call_void("js_ui_loop_take_over", &[]); + ctx.block().br(&header_label); // loop_header: host-driven shells (watchOS SwiftUI tree diff --git a/crates/perry-codegen/src/runtime_decls/strings_part2.rs b/crates/perry-codegen/src/runtime_decls/strings_part2.rs index eddde6d030..bd8de39f6d 100644 --- a/crates/perry-codegen/src/runtime_decls/strings_part2.rs +++ b/crates/perry-codegen/src/runtime_decls/strings_part2.rs @@ -697,6 +697,10 @@ pub(crate) fn declare_phase_b_strings_part2(module: &mut LlModule) { // perry-runtime as a thin function-pointer trampoline so it's // safe to call even when perry-stdlib is not linked (no-op). module.declare_function("js_run_stdlib_pump", VOID, &[]); + // Top-level UI event-loop takeover (Electron-compat / windowed apps). If a + // native UI backend registered a blocking loop, this blocks here at the true + // top level; otherwise it's a no-op and the async event loop proceeds. + module.declare_function("js_ui_loop_take_over", VOID, &[]); module.declare_function("js_sleep_ms", VOID, &[DOUBLE]); // Issue #84: condvar-backed wait for the event loop / await busy-wait. // Replaces fixed-quantum `js_sleep_ms(10.0)` / `js_sleep_ms(1.0)`. diff --git a/crates/perry-dispatch/src/ui_table/part_b.rs b/crates/perry-dispatch/src/ui_table/part_b.rs index 313a8f4195..24f4a28d09 100644 --- a/crates/perry-dispatch/src/ui_table/part_b.rs +++ b/crates/perry-dispatch/src/ui_table/part_b.rs @@ -999,4 +999,35 @@ pub(crate) const PERRY_UI_TABLE_PART_B: &[MethodRow] = &[ args: &[ArgKind::Widget, ArgKind::Closure], ret: ReturnKind::Void, }, + // ---- Electron-compat shim (#5797): renderer→main IPC + body-less loop ---- + MethodRow { + method: "webviewSetOnMessage", + runtime: "perry_ui_webview_set_on_message", + args: &[ArgKind::Widget, ArgKind::Closure], + ret: ReturnKind::Void, + }, + MethodRow { + method: "webviewAddUserScript", + runtime: "perry_ui_webview_add_user_script", + args: &[ArgKind::Widget, ArgKind::Str], + ret: ReturnKind::Void, + }, + MethodRow { + method: "appRunLoop", + runtime: "perry_ui_app_run_loop", + args: &[ArgKind::Closure], + ret: ReturnKind::Void, + }, + MethodRow { + method: "appRequestLoop", + runtime: "perry_ui_app_request_loop", + args: &[ArgKind::Closure], + ret: ReturnKind::Void, + }, + MethodRow { + method: "appQuit", + runtime: "perry_ui_app_quit", + args: &[], + ret: ReturnKind::Void, + }, ]; diff --git a/crates/perry-runtime/src/lib.rs b/crates/perry-runtime/src/lib.rs index edfde97e39..d4bb53a88d 100644 --- a/crates/perry-runtime/src/lib.rs +++ b/crates/perry-runtime/src/lib.rs @@ -124,6 +124,7 @@ pub mod typedarray; pub mod typedarray_half; pub(crate) mod typedarray_props; pub mod typedarray_view; +pub mod ui_loop; pub mod url; pub mod v8; pub mod validators; diff --git a/crates/perry-runtime/src/ui_loop.rs b/crates/perry-runtime/src/ui_loop.rs new file mode 100644 index 0000000000..39aa3b13d6 --- /dev/null +++ b/crates/perry-runtime/src/ui_loop.rs @@ -0,0 +1,42 @@ +//! Top-level UI event-loop takeover. +//! +//! A native UI backend (perry-ui-macos, …) can register a blocking event-loop +//! function. Perry's generated `main` calls [`js_ui_loop_take_over`] once, at +//! the true top level (right before the normal async event loop), so the UI +//! backend's `[NSApp run]` becomes the outermost loop on the main thread. +//! +//! Why this matters: if the UI loop is entered from a microtask / the post-main +//! drain instead (e.g. `Promise.resolve().then(() => appRunLoop())`), the macOS +//! window server never composites the app's windows (they exist but report +//! `onscreen=None`). Entering it at the top level — the same context as the +//! classic blocking `App({...})` call — fixes that. Used by the Electron-compat +//! `app.whenReady()` shell, which can't itself block at the top level because it +//! must first let the user's `main` register `ipcMain`/`whenReady` handlers. + +use std::sync::atomic::{AtomicPtr, Ordering}; + +static UI_LOOP_FN: AtomicPtr<()> = AtomicPtr::new(std::ptr::null_mut()); + +/// Register a blocking UI event-loop entry point. The UI backend calls this +/// (indirectly, when the program requests a windowed loop) so that +/// [`js_ui_loop_take_over`] can hand control to it. Passing a null-equivalent +/// is not expected; registration is one-shot for the process lifetime. +#[no_mangle] +pub extern "C" fn perry_runtime_register_ui_loop(f: extern "C" fn()) { + UI_LOOP_FN.store(f as *mut (), Ordering::SeqCst); +} + +/// Called once by generated `main` at the top level, just before the normal +/// async event loop. If a UI loop was registered (a windowed app requested it), +/// this blocks in that loop for the lifetime of the app (it returns only if the +/// UI loop itself returns, which a real app's `[NSApp run]` does not — it exits +/// via `terminate:`). If nothing registered a UI loop, this is a no-op and the +/// normal event loop proceeds. +#[no_mangle] +pub extern "C" fn js_ui_loop_take_over() { + let p = UI_LOOP_FN.load(Ordering::SeqCst); + if !p.is_null() { + let f: extern "C" fn() = unsafe { std::mem::transmute(p) }; + f(); + } +} diff --git a/crates/perry-ui-macos/Cargo.toml b/crates/perry-ui-macos/Cargo.toml index 3fc0c99fd3..f41ca57f35 100644 --- a/crates/perry-ui-macos/Cargo.toml +++ b/crates/perry-ui-macos/Cargo.toml @@ -10,9 +10,13 @@ crate-type = ["rlib", "staticlib"] default = [] plugins = [] geisterhand = [] +servo-webview = ["dep:servo", "dep:url", "dep:dpi"] [dependencies] perry-ui = { path = "../perry-ui" } +servo = { version = "0.1", optional = true } +url = { version = "2", optional = true } +dpi = { version = "0.1", optional = true } perry-ui-testkit = { workspace = true } base64 = "0.22" block2 = "0.6" diff --git a/crates/perry-ui-macos/src/app.rs b/crates/perry-ui-macos/src/app.rs index 3811c2cde5..63d3f27b45 100644 --- a/crates/perry-ui-macos/src/app.rs +++ b/crates/perry-ui-macos/src/app.rs @@ -621,6 +621,131 @@ pub fn app_run(_app_handle: i64) { app.run(); } +/// Body-less event loop for the Electron-compat shell (`app.whenReady()`). +/// +/// Unlike `app_run`, this does not expect any pre-built `App({...})` window. +/// It sets up `NSApplication`, the menu bar, the app delegate and the ~8ms +/// timer pump, then — once everything is in place — invokes the `on_ready` TS +/// closure (which resolves the shim's `app.whenReady()` promise) and blocks in +/// `NSApplication.run()`. The `.then(createWindow)` chain runs on the first pump +/// tick, so `new BrowserWindow()` / `Window()` create real windows while the +/// loop is live. Windows are created dynamically via the multi-window FFI +/// (`window_create` / `window_set_body` / `window_show`). +pub fn app_run_loop(on_ready: f64) { + crate::crash_log::install_crash_hooks(); + register_cross_platform_text_handlers(); + + let mtm = MainThreadMarker::new().expect("perry/ui must run on the main thread"); + let app = NSApplication::sharedApplication(mtm); + + let policy = PENDING_ACTIVATION_POLICY.with(|p| p.borrow().clone()); + let activation_policy = match policy.as_deref() { + Some("accessory") => NSApplicationActivationPolicy::Accessory, + Some("background") => NSApplicationActivationPolicy::Prohibited, + _ => NSApplicationActivationPolicy::Regular, + }; + app.setActivationPolicy(activation_policy); + + PENDING_ICON_PATH.with(|p| { + if let Some(path) = p.borrow().as_ref() { + unsafe { + let ns_path = NSString::from_str(path); + let image: Option> = + msg_send![NSImage::alloc(), initWithContentsOfFile: &*ns_path]; + if let Some(img) = image { + let _: () = msg_send![&*app, setApplicationIconImage: &*img]; + } + } + } + }); + + setup_menu_bar(&app, mtm); + flush_pending_shortcuts(mtm); + + unsafe { + let delegate = PerryAppDelegate::new(); + let _: () = msg_send![&*app, setDelegate: &*delegate]; + crate::deeplinks::install_apple_event_handler(&*delegate as *const _ as *const AnyObject); + std::mem::forget(delegate); + } + + #[allow(deprecated)] + app.activateIgnoringOtherApps(true); + + // ~8ms (120Hz) timer pump drives setTimeout/setInterval/microtasks/stdlib. + unsafe { + let target = PerryPumpTarget::new(); + let sel = Sel::register(c"pump:"); + let _: Retained = msg_send![ + objc2::class!(NSTimer), + scheduledTimerWithTimeInterval: 0.008f64, + target: &*target, + selector: sel, + userInfo: std::ptr::null::(), + repeats: true + ]; + std::mem::forget(target); + } + + install_test_mode_exit_timer(); + + // Resolve `app.whenReady()`. This only enqueues the `.then` microtask; it + // runs on the first pump tick once `app.run()` is spinning below. + if on_ready != 0.0 { + extern "C" { + fn js_nanbox_get_pointer(value: f64) -> i64; + fn js_closure_call0(closure: *const u8) -> f64; + } + crate::catch_callback_panic( + "app whenReady", + std::panic::AssertUnwindSafe(|| unsafe { + let ptr = js_nanbox_get_pointer(on_ready) as *const u8; + if !ptr.is_null() { + js_closure_call0(ptr); + } + }), + ); + } + + app.run(); +} + +thread_local! { + /// `on_ready` closure for the deferred top-level UI loop (Electron-compat). + static PENDING_APP_LOOP_ON_READY: std::cell::Cell = std::cell::Cell::new(0.0); +} + +/// Request the Electron-compat UI event loop be entered at the TOP LEVEL after +/// `main` (not from a microtask). The shim calls this during module init; it +/// stores `on_ready` and registers `ui_loop_entry` with the runtime so the +/// generated `main`'s `js_ui_loop_take_over()` hands control to `app_run_loop` +/// at the top level. Entering `[NSApp run]` from a microtask leaves windows +/// off-screen, so this top-level entry is required for windows to composite. +pub fn request_app_loop(on_ready: f64) { + extern "C" { + fn perry_runtime_register_ui_loop(f: extern "C" fn()); + } + PENDING_APP_LOOP_ON_READY.with(|c| c.set(on_ready)); + unsafe { + perry_runtime_register_ui_loop(ui_loop_entry); + } +} + +extern "C" fn ui_loop_entry() { + let on_ready = PENDING_APP_LOOP_ON_READY.with(|c| c.get()); + app_run_loop(on_ready); +} + +/// `app.quit()` — terminate the application (Electron-compat). +pub fn app_quit() { + if let Some(mtm) = MainThreadMarker::new() { + let app = NSApplication::sharedApplication(mtm); + unsafe { + let _: () = msg_send![&*app, terminate: std::ptr::null::()]; + } + } +} + /// If `PERRY_UI_TEST_MODE=1`, schedule an NSTimer that captures a screenshot /// (when `PERRY_UI_SCREENSHOT_PATH` is set) and exits the process cleanly. /// This lets doc-example programs be verified in CI without a human. @@ -791,224 +916,8 @@ impl PerryShortcutTarget { } } -/// Set the application dock icon from a file path. -/// Stores the path; the icon is applied in app_run after activation policy is set. -pub fn app_set_icon(path_ptr: *const u8) { - let path = str_from_header(path_ptr); - if !path.is_empty() { - PENDING_ICON_PATH.with(|p| { - *p.borrow_mut() = Some(path.to_string()); - }); - } -} - -/// Set frameless window mode (no titlebar). -/// `value` is a NaN-boxed boolean — TAG_TRUE = 0x7FFC_0000_0000_0004. -pub fn app_set_frameless(app_handle: i64, value: f64) { - const TAG_TRUE: u64 = 0x7FFC_0000_0000_0004; - if value.to_bits() != TAG_TRUE { - return; - } - APPS.with(|a| { - let apps = a.borrow(); - let idx = (app_handle - 1) as usize; - if idx < apps.len() { - let window = &apps[idx].window; - unsafe { - // Remove all style masks for a borderless window - let _: () = msg_send![window, setStyleMask: NSWindowStyleMask::Borderless.0]; - // Allow dragging by the window background - let _: () = msg_send![window, setMovableByWindowBackground: true]; - // Borderless NSWindows don't become key by default. - // Force the window to accept key status so text fields work. - // Use raw ObjC runtime C calls to create a subclass. - extern "C" { - fn objc_allocateClassPair( - superclass: *const std::ffi::c_void, - name: *const i8, - extra: usize, - ) -> *mut std::ffi::c_void; - fn objc_registerClassPair(cls: *mut std::ffi::c_void); - fn class_addMethod( - cls: *mut std::ffi::c_void, - sel: *const std::ffi::c_void, - imp: extern "C" fn(*mut std::ffi::c_void, *mut std::ffi::c_void) -> i8, - types: *const i8, - ) -> i8; - fn object_setClass( - obj: *mut std::ffi::c_void, - cls: *mut std::ffi::c_void, - ) -> *mut std::ffi::c_void; - fn sel_registerName(name: *const i8) -> *mut std::ffi::c_void; - fn object_getClass(obj: *const std::ffi::c_void) -> *mut std::ffi::c_void; - } - extern "C" fn can_become_key( - _this: *mut std::ffi::c_void, - _sel: *mut std::ffi::c_void, - ) -> i8 { - 1 - } - let window_ptr = &**window as *const NSWindow as *mut std::ffi::c_void; - let parent_class = object_getClass(window_ptr); - let subclass_name = - std::ffi::CString::new(format!("PerryKeyableWindow_{}", app_handle)).unwrap(); - let existing = objc2::runtime::AnyClass::get(&subclass_name); - let new_class = if existing.is_some() { - existing.unwrap() as *const _ as *mut std::ffi::c_void - } else { - let cls = objc_allocateClassPair(parent_class, subclass_name.as_ptr(), 0); - if !cls.is_null() { - let sel = sel_registerName(c"canBecomeKeyWindow".as_ptr()); - class_addMethod(cls, sel, can_become_key, c"B@:".as_ptr()); - objc_registerClassPair(cls); - } - cls - }; - if !new_class.is_null() { - object_setClass(window_ptr, new_class); - let _: () = - msg_send![window, makeKeyAndOrderFront: std::ptr::null::()]; - } - // Make window transparent so rounded corners show through - let _: () = msg_send![window, setOpaque: false]; - let clear_color: *const AnyObject = msg_send![objc2::class!(NSColor), clearColor]; - let _: () = msg_send![window, setBackgroundColor: clear_color]; - let _: () = msg_send![window, setHasShadow: true]; - // Defer rounded corners to app_run, after vibrancy/body are set up - PENDING_ROUNDED_CORNERS.with(|c| c.set(true)); - } - } - }); -} - -/// Set window level: "floating", "statusBar", "modal", or "normal". -pub fn app_set_level(app_handle: i64, value_ptr: *const u8) { - let level_str = str_from_header(value_ptr); - if level_str.is_empty() { - return; - } - APPS.with(|a| { - let apps = a.borrow(); - let idx = (app_handle - 1) as usize; - if idx < apps.len() { - let window = &apps[idx].window; - unsafe { - // NSWindowLevel values: - // normal = 0, floating = 3, statusBar = 25, modalPanel = 8 - let level: isize = match level_str { - "floating" => 3, // NSFloatingWindowLevel - "statusBar" => 25, // NSStatusWindowLevel - "modal" => 8, // NSModalPanelWindowLevel - _ => 0, // NSNormalWindowLevel - }; - let _: () = msg_send![window, setLevel: level]; - } - } - }); -} - -/// Set window transparency (clear background). -/// `value` is a NaN-boxed boolean. -pub fn app_set_transparent(app_handle: i64, value: f64) { - const TAG_TRUE: u64 = 0x7FFC_0000_0000_0004; - if value.to_bits() != TAG_TRUE { - return; - } - APPS.with(|a| { - let apps = a.borrow(); - let idx = (app_handle - 1) as usize; - if idx < apps.len() { - let window = &apps[idx].window; - unsafe { - let _: () = msg_send![window, setOpaque: false]; - // NSColor.clearColor - let clear_color: *const objc2::runtime::AnyObject = - msg_send![objc2::class!(NSColor), clearColor]; - let _: () = msg_send![window, setBackgroundColor: clear_color]; - } - } - }); -} - -/// Set vibrancy material: "sidebar", "headerView", "sheet", "titlebar", -/// "tooltip", "underWindowBackground", "contentBackground", "behindWindow", -/// "menu", "popover", "selection". -/// -/// Called BEFORE app_set_body: sets an NSVisualEffectView as the window's -/// content view. app_set_body then adds the body widget as a subview of it. -pub fn app_set_vibrancy(app_handle: i64, value_ptr: *const u8) { - let material_str = str_from_header(value_ptr); - if material_str.is_empty() { - return; - } - APPS.with(|a| { - let apps = a.borrow(); - let idx = (app_handle - 1) as usize; - if idx < apps.len() { - let window = &apps[idx].window; - unsafe { - // NSVisualEffectMaterial values - let material: isize = match material_str { - "titlebar" => 3, - "selection" => 4, - "menu" => 5, - "popover" => 6, - "sidebar" => 7, - "headerView" => 10, - "sheet" => 11, - "windowBackground" => 12, - "hudWindow" => 13, - "fullScreenUI" => 15, - "tooltip" => 17, - "contentBackground" => 18, - "underWindowBackground" => 21, - "underPageBackground" => 22, - _ => 7, // default to sidebar - }; - - // Make window transparent so vibrancy shows through - let _: () = msg_send![window, setOpaque: false]; - let clear_color: *const objc2::runtime::AnyObject = - msg_send![objc2::class!(NSColor), clearColor]; - let _: () = msg_send![window, setBackgroundColor: clear_color]; - - // Create NSVisualEffectView sized to the window - let effect_cls = objc2::runtime::AnyClass::get(c"NSVisualEffectView").unwrap(); - let effect_view: *mut objc2::runtime::AnyObject = msg_send![effect_cls, alloc]; - let frame = CGRect::new( - CGPoint::new(0.0, 0.0), - CGSize::new(window.frame().size.width, window.frame().size.height), - ); - let effect_view: *mut objc2::runtime::AnyObject = msg_send![ - effect_view, initWithFrame: frame - ]; - let _: () = msg_send![effect_view, setMaterial: material]; - // NSVisualEffectBlendingMode.behindWindow = 0 - let _: () = msg_send![effect_view, setBlendingMode: 0isize]; - // NSVisualEffectState.active = 1 (always show vibrancy) - let _: () = msg_send![effect_view, setState: 1isize]; - // Auto-resize with window - // NSViewWidthSizable | NSViewHeightSizable = 0x12 = 18 - let _: () = msg_send![effect_view, setAutoresizingMask: 18u64]; - - // Set the effect view as the window's content view. - // app_set_body (called next) will add the body widget as a subview of this. - let _: () = msg_send![window, setContentView: effect_view]; - } - } - }); -} - -/// Set the activation policy: "regular", "accessory", or "background". -/// Stored and applied in app_run() since NSApp policy must be set before the event loop starts. -pub fn app_set_activation_policy(_app_handle: i64, value_ptr: *const u8) { - let policy_str = str_from_header(value_ptr); - if !policy_str.is_empty() { - PENDING_ACTIVATION_POLICY.with(|p| { - *p.borrow_mut() = Some(policy_str.to_string()); - }); - } -} +mod chrome; +pub use chrome::*; /// Register a system-wide global hotkey that fires even when the app is in the background. /// Also registers a local event monitor for when the app is focused. @@ -1620,14 +1529,43 @@ pub fn window_create(title_ptr: *const u8, width: f64, height: f64) -> i64 { } } -/// Set the root widget of a window. +/// Set the root widget of a window, pinned to fill it. +/// +/// Unlike the bare `setContentView`, this pins the body to the window's +/// `contentLayoutGuide` with Auto Layout so a full-window webview (an Electron +/// `BrowserWindow` whose entire content is the page) fills and resizes with the +/// window. Mirrors the pinning `app_set_body` does for the main window. pub fn window_set_body(window_handle: i64, widget_handle: i64) { WINDOWS.with(|w| { let windows = w.borrow(); let idx = (window_handle - 1) as usize; if idx < windows.len() { if let Some(view) = crate::widgets::get_widget(widget_handle) { - windows[idx].window.setContentView(Some(&view)); + let window = &windows[idx].window; + window.setContentView(Some(&view)); + unsafe { + let _: () = objc2::msg_send![&*view, setTranslatesAutoresizingMaskIntoConstraints: false]; + let guide: Retained = msg_send![&**window, contentLayoutGuide]; + let guide_top: Retained = msg_send![&*guide, topAnchor]; + let guide_bottom: Retained = msg_send![&*guide, bottomAnchor]; + let guide_leading: Retained = msg_send![&*guide, leadingAnchor]; + let guide_trailing: Retained = msg_send![&*guide, trailingAnchor]; + + let top_anchor = view.topAnchor(); + let bottom_anchor = view.bottomAnchor(); + let leading_anchor = view.leadingAnchor(); + let trailing_anchor = view.trailingAnchor(); + + let c_top: Retained = msg_send![&*top_anchor, constraintEqualToAnchor: &*guide_top]; + let c_bottom: Retained = msg_send![&*bottom_anchor, constraintEqualToAnchor: &*guide_bottom]; + let c_leading: Retained = msg_send![&*leading_anchor, constraintEqualToAnchor: &*guide_leading]; + let c_trailing: Retained = msg_send![&*trailing_anchor, constraintEqualToAnchor: &*guide_trailing]; + + let _: () = msg_send![&*c_top, setActive: true]; + let _: () = msg_send![&*c_bottom, setActive: true]; + let _: () = msg_send![&*c_leading, setActive: true]; + let _: () = msg_send![&*c_trailing, setActive: true]; + } } } }); @@ -1639,8 +1577,27 @@ pub fn window_show(window_handle: i64) { let windows = w.borrow(); let idx = (window_handle - 1) as usize; if idx < windows.len() { - windows[idx].window.center(); - windows[idx].window.makeKeyAndOrderFront(None); + let window = &windows[idx].window; + // Activate the app first. In the Electron-compat loop, windows are + // created dynamically from a microtask *during* app_run_loop's + // `[NSApp run]` (via whenReady().then(createWindow)), after the + // initial activate(). Without re-activating + orderFrontRegardless + // the window is created but never composited on-screen + // (CGWindow `onscreen=None`) and `makeKeyAndOrderFront` alone is a + // no-op for a non-active app. + if let Some(mtm) = MainThreadMarker::new() { + let app = NSApplication::sharedApplication(mtm); + #[allow(deprecated)] + app.activateIgnoringOtherApps(true); + } + window.center(); + window.makeKeyAndOrderFront(None); + unsafe { + // Force the window on-screen regardless of app-active state — + // this is the piece that actually composites a window created + // mid-run-loop. + let _: () = msg_send![&**window, orderFrontRegardless]; + } } }); } diff --git a/crates/perry-ui-macos/src/app/chrome.rs b/crates/perry-ui-macos/src/app/chrome.rs new file mode 100644 index 0000000000..92b03ee2ee --- /dev/null +++ b/crates/perry-ui-macos/src/app/chrome.rs @@ -0,0 +1,229 @@ +//! Window chrome and appearance: dock icon, frameless mode, window level, +//! transparency, vibrancy and activation policy. +//! +//! Split out of `app.rs` to keep it under the 2000-line cap once the Servo +//! webview code landed. These are all plain setters over `APPS` and the +//! pending-state thread-locals, so they live as a child module and reach +//! app.rs's private helpers (`str_from_header`, the `PENDING_*` cells) +//! through `use super::*`. + +use super::*; + +/// Set the application dock icon from a file path. +/// Stores the path; the icon is applied in app_run after activation policy is set. +pub fn app_set_icon(path_ptr: *const u8) { + let path = str_from_header(path_ptr); + if !path.is_empty() { + PENDING_ICON_PATH.with(|p| { + *p.borrow_mut() = Some(path.to_string()); + }); + } +} + +/// Set frameless window mode (no titlebar). +/// `value` is a NaN-boxed boolean — TAG_TRUE = 0x7FFC_0000_0000_0004. +pub fn app_set_frameless(app_handle: i64, value: f64) { + const TAG_TRUE: u64 = 0x7FFC_0000_0000_0004; + if value.to_bits() != TAG_TRUE { + return; + } + APPS.with(|a| { + let apps = a.borrow(); + let idx = (app_handle - 1) as usize; + if idx < apps.len() { + let window = &apps[idx].window; + unsafe { + // Remove all style masks for a borderless window + let _: () = msg_send![window, setStyleMask: NSWindowStyleMask::Borderless.0]; + // Allow dragging by the window background + let _: () = msg_send![window, setMovableByWindowBackground: true]; + // Borderless NSWindows don't become key by default. + // Force the window to accept key status so text fields work. + // Use raw ObjC runtime C calls to create a subclass. + extern "C" { + fn objc_allocateClassPair( + superclass: *const std::ffi::c_void, + name: *const i8, + extra: usize, + ) -> *mut std::ffi::c_void; + fn objc_registerClassPair(cls: *mut std::ffi::c_void); + fn class_addMethod( + cls: *mut std::ffi::c_void, + sel: *const std::ffi::c_void, + imp: extern "C" fn(*mut std::ffi::c_void, *mut std::ffi::c_void) -> i8, + types: *const i8, + ) -> i8; + fn object_setClass( + obj: *mut std::ffi::c_void, + cls: *mut std::ffi::c_void, + ) -> *mut std::ffi::c_void; + fn sel_registerName(name: *const i8) -> *mut std::ffi::c_void; + fn object_getClass(obj: *const std::ffi::c_void) -> *mut std::ffi::c_void; + } + extern "C" fn can_become_key( + _this: *mut std::ffi::c_void, + _sel: *mut std::ffi::c_void, + ) -> i8 { + 1 + } + let window_ptr = &**window as *const NSWindow as *mut std::ffi::c_void; + let parent_class = object_getClass(window_ptr); + let subclass_name = + std::ffi::CString::new(format!("PerryKeyableWindow_{}", app_handle)).unwrap(); + let existing = objc2::runtime::AnyClass::get(&subclass_name); + let new_class = if existing.is_some() { + existing.unwrap() as *const _ as *mut std::ffi::c_void + } else { + let cls = objc_allocateClassPair(parent_class, subclass_name.as_ptr(), 0); + if !cls.is_null() { + let sel = sel_registerName(c"canBecomeKeyWindow".as_ptr()); + class_addMethod(cls, sel, can_become_key, c"B@:".as_ptr()); + objc_registerClassPair(cls); + } + cls + }; + if !new_class.is_null() { + object_setClass(window_ptr, new_class); + let _: () = + msg_send![window, makeKeyAndOrderFront: std::ptr::null::()]; + } + // Make window transparent so rounded corners show through + let _: () = msg_send![window, setOpaque: false]; + let clear_color: *const AnyObject = msg_send![objc2::class!(NSColor), clearColor]; + let _: () = msg_send![window, setBackgroundColor: clear_color]; + let _: () = msg_send![window, setHasShadow: true]; + // Defer rounded corners to app_run, after vibrancy/body are set up + PENDING_ROUNDED_CORNERS.with(|c| c.set(true)); + } + } + }); +} + +/// Set window level: "floating", "statusBar", "modal", or "normal". +pub fn app_set_level(app_handle: i64, value_ptr: *const u8) { + let level_str = str_from_header(value_ptr); + if level_str.is_empty() { + return; + } + APPS.with(|a| { + let apps = a.borrow(); + let idx = (app_handle - 1) as usize; + if idx < apps.len() { + let window = &apps[idx].window; + unsafe { + // NSWindowLevel values: + // normal = 0, floating = 3, statusBar = 25, modalPanel = 8 + let level: isize = match level_str { + "floating" => 3, // NSFloatingWindowLevel + "statusBar" => 25, // NSStatusWindowLevel + "modal" => 8, // NSModalPanelWindowLevel + _ => 0, // NSNormalWindowLevel + }; + let _: () = msg_send![window, setLevel: level]; + } + } + }); +} + +/// Set window transparency (clear background). +/// `value` is a NaN-boxed boolean. +pub fn app_set_transparent(app_handle: i64, value: f64) { + const TAG_TRUE: u64 = 0x7FFC_0000_0000_0004; + if value.to_bits() != TAG_TRUE { + return; + } + APPS.with(|a| { + let apps = a.borrow(); + let idx = (app_handle - 1) as usize; + if idx < apps.len() { + let window = &apps[idx].window; + unsafe { + let _: () = msg_send![window, setOpaque: false]; + // NSColor.clearColor + let clear_color: *const objc2::runtime::AnyObject = + msg_send![objc2::class!(NSColor), clearColor]; + let _: () = msg_send![window, setBackgroundColor: clear_color]; + } + } + }); +} + +/// Set vibrancy material: "sidebar", "headerView", "sheet", "titlebar", +/// "tooltip", "underWindowBackground", "contentBackground", "behindWindow", +/// "menu", "popover", "selection". +/// +/// Called BEFORE app_set_body: sets an NSVisualEffectView as the window's +/// content view. app_set_body then adds the body widget as a subview of it. +pub fn app_set_vibrancy(app_handle: i64, value_ptr: *const u8) { + let material_str = str_from_header(value_ptr); + if material_str.is_empty() { + return; + } + APPS.with(|a| { + let apps = a.borrow(); + let idx = (app_handle - 1) as usize; + if idx < apps.len() { + let window = &apps[idx].window; + unsafe { + // NSVisualEffectMaterial values + let material: isize = match material_str { + "titlebar" => 3, + "selection" => 4, + "menu" => 5, + "popover" => 6, + "sidebar" => 7, + "headerView" => 10, + "sheet" => 11, + "windowBackground" => 12, + "hudWindow" => 13, + "fullScreenUI" => 15, + "tooltip" => 17, + "contentBackground" => 18, + "underWindowBackground" => 21, + "underPageBackground" => 22, + _ => 7, // default to sidebar + }; + + // Make window transparent so vibrancy shows through + let _: () = msg_send![window, setOpaque: false]; + let clear_color: *const objc2::runtime::AnyObject = + msg_send![objc2::class!(NSColor), clearColor]; + let _: () = msg_send![window, setBackgroundColor: clear_color]; + + // Create NSVisualEffectView sized to the window + let effect_cls = objc2::runtime::AnyClass::get(c"NSVisualEffectView").unwrap(); + let effect_view: *mut objc2::runtime::AnyObject = msg_send![effect_cls, alloc]; + let frame = CGRect::new( + CGPoint::new(0.0, 0.0), + CGSize::new(window.frame().size.width, window.frame().size.height), + ); + let effect_view: *mut objc2::runtime::AnyObject = msg_send![ + effect_view, initWithFrame: frame + ]; + let _: () = msg_send![effect_view, setMaterial: material]; + // NSVisualEffectBlendingMode.behindWindow = 0 + let _: () = msg_send![effect_view, setBlendingMode: 0isize]; + // NSVisualEffectState.active = 1 (always show vibrancy) + let _: () = msg_send![effect_view, setState: 1isize]; + // Auto-resize with window + // NSViewWidthSizable | NSViewHeightSizable = 0x12 = 18 + let _: () = msg_send![effect_view, setAutoresizingMask: 18u64]; + + // Set the effect view as the window's content view. + // app_set_body (called next) will add the body widget as a subview of this. + let _: () = msg_send![window, setContentView: effect_view]; + } + } + }); +} + +/// Set the activation policy: "regular", "accessory", or "background". +/// Stored and applied in app_run() since NSApp policy must be set before the event loop starts. +pub fn app_set_activation_policy(_app_handle: i64, value_ptr: *const u8) { + let policy_str = str_from_header(value_ptr); + if !policy_str.is_empty() { + PENDING_ACTIVATION_POLICY.with(|p| { + *p.borrow_mut() = Some(policy_str.to_string()); + }); + } +} diff --git a/crates/perry-ui-macos/src/lib_ffi/core_widgets.rs b/crates/perry-ui-macos/src/lib_ffi/core_widgets.rs index 55667c6057..87bc34951f 100644 --- a/crates/perry-ui-macos/src/lib_ffi/core_widgets.rs +++ b/crates/perry-ui-macos/src/lib_ffi/core_widgets.rs @@ -23,6 +23,26 @@ pub extern "C" fn perry_ui_app_run(app_handle: i64) { app::app_run(app_handle); } +/// Electron-compat body-less event loop. Fires `on_ready` (resolves +/// `app.whenReady()`) then blocks. Windows are created dynamically afterward. +#[no_mangle] +pub extern "C" fn perry_ui_app_run_loop(on_ready: f64) { + app::app_run_loop(on_ready); +} + +/// `app.quit()` — terminate the application. +#[no_mangle] +pub extern "C" fn perry_ui_app_quit() { + app::app_quit(); +} + +/// Request the top-level Electron-compat UI loop (non-blocking; the generated +/// `main` enters it via `js_ui_loop_take_over` after the user's top-level code). +#[no_mangle] +pub extern "C" fn perry_ui_app_request_loop(on_ready: f64) { + app::request_app_loop(on_ready); +} + /// Set the application dock icon from a file path. #[no_mangle] pub extern "C" fn perry_ui_app_set_icon(path_ptr: i64) { diff --git a/crates/perry-ui-macos/src/lib_ffi/interactivity.rs b/crates/perry-ui-macos/src/lib_ffi/interactivity.rs index d1c09bb7f2..fb6899ba00 100644 --- a/crates/perry-ui-macos/src/lib_ffi/interactivity.rs +++ b/crates/perry-ui-macos/src/lib_ffi/interactivity.rs @@ -371,6 +371,14 @@ pub extern "C" fn perry_ui_webview_set_on_error(handle: i64, closure: f64) { widgets::webview::set_on_error(handle, closure) } #[no_mangle] +pub extern "C" fn perry_ui_webview_set_on_message(handle: i64, closure: f64) { + widgets::webview::set_on_message(handle, closure) +} +#[no_mangle] +pub extern "C" fn perry_ui_webview_add_user_script(handle: i64, src_ptr: i64) { + widgets::webview::add_user_script(handle, src_ptr as *const u8) +} +#[no_mangle] pub extern "C" fn perry_ui_webview_load_url(handle: i64, url_ptr: i64) { widgets::webview::load_url(handle, url_ptr as *const u8) } diff --git a/crates/perry-ui-macos/src/widgets/mod.rs b/crates/perry-ui-macos/src/widgets/mod.rs index 4da3a9a75d..b284beaa6a 100644 --- a/crates/perry-ui-macos/src/widgets/mod.rs +++ b/crates/perry-ui-macos/src/widgets/mod.rs @@ -28,6 +28,9 @@ pub mod rich_text; pub mod rich_tooltip; pub mod scrollview; pub mod securefield; +/// Experimental Servo web-engine backend (off by default; `PERRY_WEBVIEW=servo`). +#[cfg(feature = "servo-webview")] +pub mod servo_webview; pub mod sheet; pub mod slider; pub mod spacer; diff --git a/crates/perry-ui-macos/src/widgets/servo_webview.rs b/crates/perry-ui-macos/src/widgets/servo_webview.rs new file mode 100644 index 0000000000..7a007012b3 --- /dev/null +++ b/crates/perry-ui-macos/src/widgets/servo_webview.rs @@ -0,0 +1,479 @@ +//! Experimental **Servo** web-engine backend for the WebView widget +//! (feature `servo-webview`, selected at runtime via `PERRY_WEBVIEW=servo`). +//! +//! Design: Servo renders **offscreen** into a [`SoftwareRenderingContext`] — the +//! exact path proven by the headless probe — and each frame is blitted into a +//! layer-backed `NSImageView` (the widget's view) via `NSBitmapImageRep`. An +//! `NSTimer` on the main run loop drives `spin_event_loop` + `paint` + `present` +//! + readback at ~60 Hz. +//! +//! Why software + blit instead of `WindowRenderingContext` (GPU into the view): +//! perry adds widget `NSView`s to the window **lazily** (deferred layout), so a +//! GPU rendering context — which needs a realized window handle at creation — +//! would race the layout. The software context has no window dependency, so the +//! engine is constructable the moment `create()` is called. Performance is +//! secondary for an experimental engine. +//! +//! This file is only compiled with `--features servo-webview`; the default build +//! (system WKWebView) never links Servo. + +use std::cell::{Cell, RefCell}; +use std::collections::HashMap; +use std::rc::Rc; + +use dpi::PhysicalSize; +use objc2::rc::Retained; +use objc2::runtime::{AnyClass, AnyObject}; +use objc2::{define_class, msg_send, DefinedClass, MainThreadOnly}; +use objc2_app_kit::{NSEvent, NSImageView, NSView}; +use objc2_core_foundation::{CGPoint, CGSize}; +use objc2_foundation::{MainThreadMarker, NSString}; +use servo::{ + DeviceIntRect, DeviceIntSize, DevicePoint, InputEvent, LoadStatus, MouseButton, + MouseButtonAction, MouseButtonEvent, MouseMoveEvent, RenderingContext, Servo, ServoBuilder, + SoftwareRenderingContext, WebView, WebViewBuilder, WebViewDelegate, WebViewPoint, WheelDelta, + WheelEvent, WheelMode, +}; +use url::Url; + +extern "C" { + fn js_closure_call0(closure: *const u8) -> f64; + fn js_closure_call1(closure: *const u8, arg: f64) -> f64; + fn js_nanbox_get_pointer(value: f64) -> i64; +} + +thread_local! { + /// Live Servo engines keyed by Perry widget handle. Lives on the main + /// thread only (Servo is `!Send`); the driver timer reads it on the main + /// run loop. + static ENGINES: RefCell>> = RefCell::new(HashMap::new()); + /// True once the shared driver `NSTimer` has been installed. + static TIMER_INSTALLED: Cell = const { Cell::new(false) }; +} + +/// `true` when the embedder asked for the Servo backend (`PERRY_WEBVIEW=servo`). +pub fn is_servo_requested() -> bool { + matches!(std::env::var("PERRY_WEBVIEW").as_deref(), Ok("servo")) +} + +/// `true` when `handle` is backed by a Servo engine (vs the system WKWebView). +pub fn has(handle: i64) -> bool { + ENGINES.with(|e| e.borrow().contains_key(&handle)) +} + +/// Servo's wake signal. We drive painting from a periodic timer, so this only +/// needs to ensure the main run loop wakes; the timer does the spinning. +#[derive(Clone)] +struct TimerWaker; +impl servo::EventLoopWaker for TimerWaker { + fn clone_box(&self) -> Box { + Box::new(self.clone()) + } + fn wake(&self) {} +} + +/// Per-webview delegate state: load status + the user's `onLoaded` closure. +struct ServoState { + loaded: Cell, + /// NaN-boxed `onLoaded` TS closure, or `0.0` if unset. + on_loaded: Cell, + /// Set by `notify_new_frame_ready`; cleared after a blit. + dirty: Cell, +} + +impl WebViewDelegate for ServoState { + fn notify_load_status_changed(&self, _webview: WebView, status: LoadStatus) { + if matches!(status, LoadStatus::Complete) && !self.loaded.replace(true) { + let cb = self.on_loaded.get(); + if cb != 0.0 { + crate::catch_callback_panic("servo webview onLoaded", || unsafe { + js_closure_call0(js_nanbox_get_pointer(cb) as *const u8); + }); + } + } + } + + fn notify_new_frame_ready(&self, _webview: WebView) { + self.dirty.set(true); + } +} + +/// A live Servo engine bound to one Perry widget view. +struct ServoEngine { + servo: Servo, + webview: WebView, + rc: Rc, + state: Rc, + /// Layer-backed `NSImageView` that displays the rendered frames. + view: Retained, + size: Cell<(u32, u32)>, +} + +impl ServoEngine { + /// One driver step: advance Servo, paint, present, and blit the frame. + fn tick(&self) { + self.servo.spin_event_loop(); + self.webview.paint(); + self.rc.present(); + let (w, h) = self.size.get(); + let rect = DeviceIntRect::from_size(DeviceIntSize::new(w as i32, h as i32)); + if let Some(img) = self.rc.read_to_image(rect) { + blit_rgba_to_image_view(&self.view, img.as_raw(), img.width(), img.height()); + } + self.state.dirty.set(false); + } +} + +struct ServoViewIvars { + /// Perry widget handle this view belongs to (looked up in `ENGINES` to + /// route input/resize to the right Servo engine). `0` until registered. + handle: Cell, +} + +define_class!( + /// Flipped, first-responder `NSView` that captures mouse/scroll/resize and + /// forwards them to its Servo engine. Holds an `NSImageView` subview that + /// displays the rendered frames. + #[unsafe(super(NSView))] + #[name = "PerryServoView"] + #[ivars = ServoViewIvars] + struct PerryServoView; + + impl PerryServoView { + // Flipped → the view's coords share Servo's top-left device origin. + #[unsafe(method(isFlipped))] + fn is_flipped(&self) -> bool { + true + } + + #[unsafe(method(acceptsFirstResponder))] + fn accepts_first_responder(&self) -> bool { + true + } + + #[unsafe(method(mouseDown:))] + fn mouse_down(&self, event: &NSEvent) { + self.send_button(event, MouseButtonAction::Down, MouseButton::Left); + } + + #[unsafe(method(mouseUp:))] + fn mouse_up(&self, event: &NSEvent) { + self.send_button(event, MouseButtonAction::Up, MouseButton::Left); + } + + #[unsafe(method(rightMouseDown:))] + fn right_mouse_down(&self, event: &NSEvent) { + self.send_button(event, MouseButtonAction::Down, MouseButton::Right); + } + + #[unsafe(method(rightMouseUp:))] + fn right_mouse_up(&self, event: &NSEvent) { + self.send_button(event, MouseButtonAction::Up, MouseButton::Right); + } + + #[unsafe(method(mouseDragged:))] + fn mouse_dragged(&self, event: &NSEvent) { + self.send_move(event); + } + + #[unsafe(method(mouseMoved:))] + fn mouse_moved(&self, event: &NSEvent) { + self.send_move(event); + } + + #[unsafe(method(scrollWheel:))] + fn scroll_wheel(&self, event: &NSEvent) { + let pt = self.point_of(event); + let (dx, dy) = (event.scrollingDeltaX(), event.scrollingDeltaY()); + let delta = WheelDelta { + x: dx, + y: dy, + z: 0.0, + mode: WheelMode::DeltaPixel, + }; + engine_notify( + self.ivars().handle.get(), + InputEvent::Wheel(WheelEvent::new(delta, pt)), + ); + } + + #[unsafe(method(setFrameSize:))] + fn set_frame_size(&self, size: CGSize) { + let _: () = unsafe { msg_send![super(self), setFrameSize: size] }; + engine_resize( + self.ivars().handle.get(), + size.width as u32, + size.height as u32, + ); + } + } +); + +impl PerryServoView { + /// Window-relative event point → Servo device-pixel point. + fn point_of(&self, event: &NSEvent) -> WebViewPoint { + let win = event.locationInWindow(); + let local: CGPoint = + unsafe { msg_send![self, convertPoint: win, fromView: std::ptr::null::()] }; + WebViewPoint::Device(DevicePoint::new(local.x as f32, local.y as f32)) + } + + fn send_button(&self, event: &NSEvent, action: MouseButtonAction, button: MouseButton) { + let pt = self.point_of(event); + engine_notify( + self.ivars().handle.get(), + InputEvent::MouseButton(MouseButtonEvent::new(action, button, pt)), + ); + } + + fn send_move(&self, event: &NSEvent) { + let pt = self.point_of(event); + engine_notify( + self.ivars().handle.get(), + InputEvent::MouseMove(MouseMoveEvent::new(pt)), + ); + } +} + +/// Forward an input event to the Servo engine backing `handle`, if any. +fn engine_notify(handle: i64, event: InputEvent) { + ENGINES.with(|e| { + if let Some(engine) = e.borrow().get(&handle) { + engine.webview.notify_input_event(event); + } + }); +} + +/// Resize the Servo engine backing `handle` to (w, h) logical pixels — the +/// rendering context, the WebView, and the cached readback size all move +/// together so the next frame fills the new bounds. +fn engine_resize(handle: i64, w: u32, h: u32) { + if w == 0 || h == 0 { + return; + } + ENGINES.with(|e| { + if let Some(engine) = e.borrow().get(&handle) { + let size = PhysicalSize::new(w, h); + engine.rc.resize(size); + engine.webview.resize(size); + engine.size.set((w, h)); + } + }); +} + +/// Create a Servo-backed WebView widget. Returns the Perry widget handle (the +/// same contract as the WKWebView `create`). Falls back to handle `0` on +/// engine-construction failure so the caller can degrade gracefully. +pub fn create(url: &str, width: f64, height: f64) -> i64 { + let mtm = MainThreadMarker::new().expect("perry/ui must run on the main thread"); + let w = if width > 0.0 { width as u32 } else { 600 }; + let h = if height > 0.0 { height as u32 } else { 400 }; + + let rc = match SoftwareRenderingContext::new(PhysicalSize::new(w, h)) { + Ok(rc) => Rc::new(rc), + Err(_) => return 0, + }; + let _ = rc.make_current(); + + let servo = ServoBuilder::default() + .event_loop_waker(Box::new(TimerWaker)) + .build(); + + let state = Rc::new(ServoState { + loaded: Cell::new(false), + on_loaded: Cell::new(0.0), + dirty: Cell::new(true), + }); + + let mut builder = WebViewBuilder::new(&servo, rc.clone()).delegate(state.clone()); + if !url.is_empty() { + if let Ok(parsed) = Url::parse(url) { + builder = builder.url(parsed); + } + } + let webview = builder.build(); + webview.focus(); + webview.resize(PhysicalSize::new(w, h)); + + // The widget view: a PerryServoView (captures input + resize) holding an + // NSImageView subview that displays the rendered frames (autoresized to fill). + let frame = objc2_core_foundation::CGRect::new( + objc2_core_foundation::CGPoint::new(0.0, 0.0), + CGSize::new(w as f64, h as f64), + ); + let container: Retained = { + let this = PerryServoView::alloc(mtm).set_ivars(ServoViewIvars { + handle: Cell::new(0), + }); + unsafe { msg_send![super(this), initWithFrame: frame] } + }; + let image_view: Retained = + unsafe { msg_send![NSImageView::alloc(mtm), initWithFrame: frame] }; + unsafe { + let _: () = msg_send![&*image_view, setWantsLayer: true]; + // NSImageScaleAxesIndependently = 3 — stretch to fill the widget box. + let _: () = msg_send![&*image_view, setImageScaling: 3usize]; + // NSViewWidthSizable (2) | NSViewHeightSizable (16) — track the container. + let _: () = msg_send![&*image_view, setAutoresizingMask: 18usize]; + let _: () = msg_send![&*container, addSubview: &*image_view]; + } + + let view_ns: Retained = unsafe { Retained::cast_unchecked(container.clone()) }; + let handle = super::register_widget(view_ns); + container.ivars().handle.set(handle); + + let engine = Rc::new(ServoEngine { + servo, + webview, + rc, + state, + view: image_view, + size: Cell::new((w, h)), + }); + // Paint the first frame immediately so the view isn't blank pre-load. + engine.tick(); + + ENGINES.with(|e| e.borrow_mut().insert(handle, engine)); + install_driver_timer(mtm); + handle +} + +/// Imperative `loadUrl` for a Servo-backed handle. +pub fn load_url(handle: i64, url: &str) { + if url.is_empty() { + return; + } + if let Ok(parsed) = Url::parse(url) { + ENGINES.with(|e| { + if let Some(engine) = e.borrow().get(&handle) { + engine.state.loaded.set(false); + engine.webview.load(parsed); + } + }); + } +} + +pub fn reload(handle: i64) { + ENGINES.with(|e| { + if let Some(engine) = e.borrow().get(&handle) { + engine.webview.reload(); + } + }); +} + +/// Async JS evaluation. Fires `callback(result_string)` — errors and +/// null/undefined collapse to the empty string, matching the WKWebView path. +pub fn evaluate_js(handle: i64, js: &str, callback: f64) { + ENGINES.with(|e| { + let borrow = e.borrow(); + let Some(engine) = borrow.get(&handle) else { + return; + }; + engine + .webview + .evaluate_javascript(js.to_string(), move |result| { + let s = match result { + Ok(v) => servo_jsvalue_to_string(&v), + Err(_) => String::new(), + }; + if callback != 0.0 { + let boxed = super::webview::nanbox_str(&s); + crate::catch_callback_panic("servo webview evaluateJs callback", || unsafe { + js_closure_call1(js_nanbox_get_pointer(callback) as *const u8, boxed); + }); + } + }); + }); +} + +/// Register the user's `onLoaded` closure for a Servo-backed handle. +pub fn set_on_loaded(handle: i64, closure: f64) { + ENGINES.with(|e| { + if let Some(engine) = e.borrow().get(&handle) { + engine.state.on_loaded.set(closure); + } + }); +} + +/// Best-effort stringify of a Servo `JSValue` for `evaluateJavaScript`. +fn servo_jsvalue_to_string(value: &servo::JSValue) -> String { + use servo::JSValue; + match value { + JSValue::String(s) => s.clone(), + JSValue::Number(n) => n.to_string(), + JSValue::Boolean(b) => b.to_string(), + _ => String::new(), + } +} + +/// Install the shared ~60 Hz driver timer once. It ticks every live engine on +/// the main run loop (where Servo lives). +fn install_driver_timer(_mtm: MainThreadMarker) { + if TIMER_INSTALLED.with(|t| t.replace(true)) { + return; + } + let block = block2::RcBlock::new(move |_timer: *mut AnyObject| { + ENGINES.with(|e| { + let engines: Vec> = e.borrow().values().cloned().collect(); + for engine in engines { + engine.tick(); + } + }); + }); + unsafe { + let timer_cls = AnyClass::get(c"NSTimer").expect("NSTimer"); + let _timer: *mut AnyObject = msg_send![ + timer_cls, + scheduledTimerWithTimeInterval: 0.016f64, + repeats: true, + block: &*block, + ]; + } + // The scheduled timer is retained by the run loop; the block by the timer. + std::mem::forget(block); +} + +/// Blit a tightly-packed RGBA8 buffer into `view` by wrapping it in an +/// `NSBitmapImageRep` (which allocates its own backing store and we memcpy into) +/// and setting it as the image-view's image. +fn blit_rgba_to_image_view(view: &NSImageView, rgba: &[u8], width: u32, height: u32) { + if width == 0 || height == 0 || rgba.len() < (width * height * 4) as usize { + return; + } + unsafe { + let rep_cls = AnyClass::get(c"NSBitmapImageRep").expect("NSBitmapImageRep"); + let alloc: *mut AnyObject = msg_send![rep_cls, alloc]; + // planes = NULL → the rep allocates its own buffer we then fill. + let null_planes: *mut *mut u8 = std::ptr::null_mut(); + let color_space = NSString::from_str("NSDeviceRGBColorSpace"); + let rep: *mut AnyObject = msg_send![ + alloc, + initWithBitmapDataPlanes: null_planes, + pixelsWide: width as isize, + pixelsHigh: height as isize, + bitsPerSample: 8isize, + samplesPerPixel: 4isize, + hasAlpha: true, + isPlanar: false, + colorSpaceName: &*color_space, + bytesPerRow: (width * 4) as isize, + bitsPerPixel: 32isize, + ]; + if rep.is_null() { + return; + } + let rep = Retained::from_raw(rep).expect("rep"); + let dst: *mut u8 = msg_send![&*rep, bitmapData]; + if !dst.is_null() { + std::ptr::copy_nonoverlapping(rgba.as_ptr(), dst, (width * height * 4) as usize); + } + + let img_cls = AnyClass::get(c"NSImage").expect("NSImage"); + let size = objc2_core_foundation::CGSize::new(width as f64, height as f64); + let image: *mut AnyObject = msg_send![img_cls, alloc]; + let image: *mut AnyObject = msg_send![image, initWithSize: size]; + let _: () = msg_send![image, addRepresentation: &*rep]; + let image = Retained::from_raw(image).expect("image"); + let _: () = msg_send![view, setImage: &*image]; + } +} diff --git a/crates/perry-ui-macos/src/widgets/webview.rs b/crates/perry-ui-macos/src/widgets/webview.rs index d9b31b8720..9edb1f9f32 100644 --- a/crates/perry-ui-macos/src/widgets/webview.rs +++ b/crates/perry-ui-macos/src/widgets/webview.rs @@ -52,6 +52,10 @@ struct WebViewState { on_should_navigate: f64, on_loaded: f64, on_error: f64, + /// Electron-compat IPC: TS closure invoked with the JSON string the page + /// posts via `window.webkit.messageHandlers.perry.postMessage(...)`. + /// 0.0 means "not registered". (renderer → main half of the bridge). + on_message: f64, /// Hard navigation allowlist. Empty = no restriction. URLs whose host /// matches any entry pass; others are rejected without invoking the user /// closure (security: prevents hijacked OAuth pages from redirecting to @@ -80,7 +84,7 @@ fn str_from_header(ptr: *const u8) -> &'static str { } } -fn nanbox_str(s: &str) -> f64 { +pub(super) fn nanbox_str(s: &str) -> f64 { let bytes = s.as_bytes(); unsafe { let p = js_string_from_bytes(bytes.as_ptr(), bytes.len() as i64); @@ -452,6 +456,51 @@ define_class!( ) { self.dispatch_error(error); } + + /// `userContentController:didReceiveScriptMessage:` — the inbound half + /// of the Electron-compat IPC bridge (WKScriptMessageHandler). The page + /// calls `window.webkit.messageHandlers.perry.postMessage(jsonString)`; + /// we hand the JSON string to the registered `on_message` TS closure. + /// The main process (compiled TS) parses it and replies via + /// `webviewEvaluateJs(...)` (the main → renderer half). + #[unsafe(method(userContentController:didReceiveScriptMessage:))] + fn did_receive_script_message( + &self, + _ucc: *mut AnyObject, + message: *mut AnyObject, + ) { + let key = self.ivars().callback_key.get(); + let on_message = WEBVIEW_STATES.with(|s| { + s.borrow().get(&key).map(|st| st.on_message).unwrap_or(0.0) + }); + if on_message == 0.0 { + return; + } + crate::catch_callback_panic( + "webview onMessage", + std::panic::AssertUnwindSafe(|| unsafe { + // The bridge always posts a JSON string, so `body` is an + // NSString. `description` is a safe fallback for anything else. + let body: *mut AnyObject = msg_send![message, body]; + let s = if !body.is_null() { + let descr: *mut AnyObject = msg_send![body, description]; + if !descr.is_null() { + let ns: &NSString = &*(descr as *const NSString); + ns.to_string() + } else { + String::new() + } + } else { + String::new() + }; + let nb = nanbox_str(&s); + let closure_ptr = js_nanbox_get_pointer(on_message) as *const u8; + if !closure_ptr.is_null() { + js_closure_call1(closure_ptr, nb); + } + }), + ); + } } ); @@ -508,6 +557,16 @@ pub fn create(url_ptr: *const u8, width: f64, height: f64, ephemeral_hint: f64) let url = str_from_header(url_ptr).to_string(); let mtm = MainThreadMarker::new().expect("perry/ui must run on the main thread"); + // Experimental Servo backend (PERRY_WEBVIEW=servo). On engine-construction + // failure we fall through to the system WKWebView below. + #[cfg(feature = "servo-webview")] + if super::servo_webview::is_servo_requested() { + let handle = super::servo_webview::create(&url, width, height); + if handle != 0 { + return handle; + } + } + // Preflight macOS TCC for camera + microphone. WKUIDelegate grants the // web-origin permission later, but the process still needs OS-level access. request_av_capture_access_once(); @@ -521,7 +580,14 @@ pub fn create(url_ptr: *const u8, width: f64, height: f64, ephemeral_hint: f64) ), ); - // 1. WKWebViewConfiguration. v2-B: pass the ephemeral hint up + // 1. Delegate first — it doubles as the WKScriptMessageHandler, so it + // must exist before we build the configuration's content controller. + // The ivar key is the delegate's own address (stable for life). + let delegate = PerryWebViewDelegate::new(); + let key = Retained::as_ptr(&delegate) as usize; + delegate.ivars().callback_key.set(key); + + // 2. WKWebViewConfiguration. v2-B: pass the ephemeral hint up // front so the websiteDataStore is correct from the first // navigation onward. Default (1.0 = ephemeral) maps to // nonPersistentDataStore; 0.0 → defaultDataStore. @@ -536,24 +602,48 @@ pub fn create(url_ptr: *const u8, width: f64, height: f64, ephemeral_hint: f64) }; let _: () = msg_send![cfg, setWebsiteDataStore: store]; - // 2. WKWebView. + // 2b. WKUserContentController — the Electron-compat IPC bridge. + // Register the delegate as the "perry" script message handler so + // `window.webkit.messageHandlers.perry.postMessage(json)` in the + // page lands in `did_receive_script_message`. User scripts (the + // bridge runtime + the app's preload) are injected later via + // `add_user_script`. The content controller retains its handler + // strongly, so the delegate stays alive for IPC even though + // WKWebView only holds the nav/UI delegate weakly. + let ucc_cls = AnyClass::get(c"WKUserContentController") + .expect("WKUserContentController not found — link WebKit.framework"); + let ucc: *mut AnyObject = msg_send![ucc_cls, new]; + let handler_name = NSString::from_str("perry"); + let _: () = msg_send![ucc, addScriptMessageHandler: &*delegate, name: &*handler_name]; + let _: () = msg_send![cfg, setUserContentController: ucc]; + + // 2c. Allow a file:// document to load file:// subresources (its own + // + + diff --git a/packages/electron/examples/system-explorer/renderer/renderer.js b/packages/electron/examples/system-explorer/renderer/renderer.js new file mode 100644 index 0000000000..b1ed374a37 --- /dev/null +++ b/packages/electron/examples/system-explorer/renderer/renderer.js @@ -0,0 +1,105 @@ +// Renderer — plain web JS calling the contextBridge-exposed `window.api`, +// which routes over the Perry IPC bridge to the native main process. +const api = window.api; + +function fmtBytes(n) { + if (n < 1024) return n + " B"; + if (n < 1024 * 1024) return (n / 1024).toFixed(1) + " KB"; + return (n / (1024 * 1024)).toFixed(1) + " MB"; +} + +// ---- System info (invoke/handle round trip) ---- +async function loadSystem() { + const info = await api.getSystemInfo(); + const rows = [ + ["Platform", info.platform + " / " + info.arch], + ["Hostname", info.hostname], + ["CPU", info.cpuModel], + ["Cores", String(info.cpus)], + ["Memory", info.freeMemMB + " / " + info.totalMemMB + " MB free"], + ["Uptime", Math.round(info.uptimeSec / 60) + " min"], + ["Release", info.release], + ]; + document.getElementById("sysinfo").innerHTML = rows + .map((r) => '
' + r[0] + "" + r[1] + "
") + .join(""); + api.log("system info rendered: " + info.hostname); +} + +// ---- File listing + preview ---- +let lastDir = ""; +async function loadFiles() { + const res = await api.listDir(""); + lastDir = res.dir; + document.getElementById("crumbs").textContent = res.dir; + const html = res.entries + .map(function (e) { + const ic = e.isDir ? "📁" : "📄"; + const sz = e.isDir ? "" : '' + fmtBytes(e.sizeBytes) + ""; + return ( + '
' + + ic + + '' + + e.name + + "" + + sz + + "
" + ); + }) + .join(""); + const filesEl = document.getElementById("files"); + filesEl.innerHTML = html; + filesEl.querySelectorAll(".file").forEach(function (el) { + el.addEventListener("click", async function () { + if (el.getAttribute("data-dir") === "1") return; + const name = el.getAttribute("data-name"); + const fileRes = await api.readFile(lastDir + "/" + name); + const pre = document.getElementById("preview"); + pre.textContent = fileRes.ok ? fileRes.text : "⚠️ " + fileRes.error; + }); + }); +} + +// ---- Notes (persisted) ---- +let notes = []; +async function loadNotes() { + notes = await api.loadNotes(); + renderNotes(); +} +function renderNotes() { + document.getElementById("noteList").innerHTML = notes + .map(function (n) { + return '
' + escapeHtml(n) + "
"; + }) + .join(""); +} +function escapeHtml(s) { + return String(s).replace(/[&<>]/g, function (c) { + return c === "&" ? "&" : c === "<" ? "<" : ">"; + }); +} + +document.getElementById("addNote").addEventListener("click", async function () { + const input = document.getElementById("noteInput"); + const v = input.value.trim(); + if (!v) return; + notes.unshift(v); + input.value = ""; + renderNotes(); + const r = await api.saveNotes(notes); + api.log("saved " + r.count + " notes"); +}); + +// ---- Live clock push (main → renderer) ---- +api.onClockTick(function (iso) { + const d = new Date(iso); + document.getElementById("clock").textContent = d.toLocaleTimeString(); +}); + +loadSystem(); +loadFiles(); +loadNotes(); diff --git a/packages/electron/package.json b/packages/electron/package.json new file mode 100644 index 0000000000..d5615bea82 --- /dev/null +++ b/packages/electron/package.json @@ -0,0 +1,28 @@ +{ + "name": "electron", + "version": "0.1.0", + "description": "Electron-compatible app shell for Perry — run existing Electron apps natively (Tauri-model internals, Electron API surface)", + "main": "src/index.ts", + "types": "src/index.ts", + "perry": { + "nativeModule": true + }, + "files": [ + "src", + "bridge", + "README.md", + "DESIGN.md" + ], + "keywords": ["perry", "electron", "desktop", "webview", "ipc"], + "repository": { + "type": "git", + "url": "https://github.com/PerryTS/perry.git", + "directory": "packages/electron" + }, + "homepage": "https://github.com/PerryTS/perry/tree/main/packages/electron#readme", + "bugs": "https://github.com/PerryTS/perry/issues", + "license": "MIT", + "publishConfig": { + "access": "public" + } +} diff --git a/packages/electron/src/index.ts b/packages/electron/src/index.ts new file mode 100644 index 0000000000..de5cc4f633 --- /dev/null +++ b/packages/electron/src/index.ts @@ -0,0 +1,937 @@ +// electron — Electron-compatible app shell for Perry. +// +// Existing Electron app code (`import { app, BrowserWindow, ipcMain } from +// 'electron'`) runs unmodified. App logic compiles natively; the view runs in +// the OS-native webview. Internals are the Tauri model (system webview, single +// native process); the public surface is Electron's. +// +// Main process (this file, compiled native): app, BrowserWindow, ipcMain, Menu, +// dialog, webContents. Renderer/preload (ipcRenderer, contextBridge) is the JS +// in ./preload-runtime.ts injected into each webview. + +import { EventEmitter } from "events"; +import { + Window, + WebView, + webviewLoadUrl, + webviewEvaluateJs, + webviewSetOnMessage, + webviewSetOnLoaded, + webviewAddUserScript, + appRequestLoop, + appQuit, + clipboardRead, + clipboardWrite, + trayCreate, + traySetIcon, + traySetTooltip, + trayAttachMenu, + trayOnClick, + trayDestroy, + menuCreate, + menuAddItem, + menuAddSeparator, + menuAddSubmenu, + menuAddItemWithShortcut, + menuAddStandardAction, + menuBarCreate, + menuBarAddMenu, + menuBarAttach, + openFileDialog, + openFolderDialog, + saveFileDialog, + onActivate, +} from "perry/ui"; +import * as os from "os"; +import * as path from "path"; +import * as fs from "fs"; +import * as childProcess from "child_process"; +import { PRELOAD_RUNTIME } from "./preload-runtime"; + +// --------------------------------------------------------------------------- +// Small helpers for marshalling values across the webview boundary. +// --------------------------------------------------------------------------- + +function jsStringLiteral(s: string): string { + // Produce a JS source string literal for embedding in an evaluateJs payload. + return JSON.stringify(s); +} + +// Build `window.__perryResolve(id, ok, payload)` source. `payload` is the +// result re-encoded as a JS string literal of its JSON (double-encoded), which +// the renderer JSON.parses. undefined results pass the bare `undefined` token. +function resolveJs(id: number, ok: boolean, value: unknown): string { + let arg3: string; + if (value === undefined) { + arg3 = "undefined"; + } else { + arg3 = jsStringLiteral(JSON.stringify(value)); + } + return "window.__perryResolve(" + id + "," + (ok ? "true" : "false") + "," + arg3 + ")"; +} + +function deliverJs(channel: string, args: unknown[]): string { + const argsJson = JSON.stringify(args); + return "window.__perryDeliver(" + jsStringLiteral(channel) + "," + jsStringLiteral(argsJson) + ")"; +} + +// --------------------------------------------------------------------------- +// ipcMain +// --------------------------------------------------------------------------- + +type IpcInvokeHandler = (event: IpcMainInvokeEvent, ...args: any[]) => any; + +interface IpcMainInvokeEvent { + sender: WebContents; + frameId: number; + processId: number; +} + +interface IpcMainEvent { + sender: WebContents; + reply: (channel: string, ...args: any[]) => void; + frameId: number; + processId: number; + returnValue?: any; +} + +class IpcMain extends EventEmitter { + // channel -> invoke handler (for ipcRenderer.invoke / ipcMain.handle). + // Initialized in the constructor (not as a field initializer): Perry does not + // reliably run field initializers on EventEmitter subclasses. + private handlers: { [channel: string]: IpcInvokeHandler }; + + constructor() { + super(); + this.handlers = {}; + } + + handle(channel: string, listener: IpcInvokeHandler): void { + this.handlers[channel] = listener; + } + handleOnce(channel: string, listener: IpcInvokeHandler): void { + const self = this; + this.handlers[channel] = function (event: IpcMainInvokeEvent, ...args: any[]) { + delete self.handlers[channel]; + return listener(event, ...args); + }; + } + removeHandler(channel: string): void { + delete this.handlers[channel]; + } + + // Internal: dispatch a parsed message coming from a webview. + _dispatch(win: BrowserWindow, msg: { kind: string; id: number; channel: string; args: any[] }): void { + const wc = win.webContents; + if (msg.kind === "console") { + // Renderer console / errors forwarded over the bridge. + const text = msg.args && msg.args.length > 0 ? String(msg.args[0]) : ""; + if (msg.channel === "error") console.error("[renderer-console] " + text); + else console.log("[renderer-console] " + text); + return; + } + if (msg.kind === "invoke") { + const handler = this.handlers[msg.channel]; + const invokeEvent: IpcMainInvokeEvent = { sender: wc, frameId: 0, processId: 0 }; + if (!handler) { + wc._eval(resolveJs(msg.id, false, { message: "No handler registered for '" + msg.channel + "'" })); + return; + } + try { + const result = handler(invokeEvent, ...msg.args); + Promise.resolve(result).then( + (value) => wc._eval(resolveJs(msg.id, true, value)), + (err) => wc._eval(resolveJs(msg.id, false, { message: errMessage(err) })) + ); + } catch (err) { + wc._eval(resolveJs(msg.id, false, { message: errMessage(err) })); + } + } else if (msg.kind === "send") { + const event: IpcMainEvent = { + sender: wc, + reply: (channel: string, ...args: any[]) => wc.send(channel, ...args), + frameId: 0, + processId: 0, + }; + this.emit(msg.channel, event, ...msg.args); + } + } +} + +function errMessage(err: unknown): string { + if (err && typeof err === "object" && "message" in (err as any)) return String((err as any).message); + return String(err); +} + +export const ipcMain = new IpcMain(); + +// --------------------------------------------------------------------------- +// WebContents — the per-window bridge to its webview. +// --------------------------------------------------------------------------- + +class WebContents extends EventEmitter { + // The perry/ui WebView widget handle for this window. + _wv: any; + id: number; + + constructor(id: number) { + super(); + this._wv = 0; + this.id = id; + } + + _eval(js: string): void { + if (this._wv) { + webviewEvaluateJs(this._wv, js, (_result: string) => {}); + } + } + + // main -> renderer push (ipcRenderer.on receives it) + send(channel: string, ...args: any[]): void { + this._eval(deliverJs(channel, args)); + } + + executeJavaScript(code: string): Promise { + return new Promise((resolve) => { + if (!this._wv) { + resolve(undefined); + return; + } + webviewEvaluateJs(this._wv, code, (result: string) => resolve(result)); + }); + } + + openDevTools(): void { + /* no-op: system webview devtools are opened via the OS inspector */ + } + closeDevTools(): void {} + setWindowOpenHandler(_handler: (details: any) => any): void {} + get session(): any { + return { clearStorageData: () => Promise.resolve() }; + } +} + +// --------------------------------------------------------------------------- +// BrowserWindow +// --------------------------------------------------------------------------- + +interface BrowserWindowOptions { + width?: number; + height?: number; + title?: string; + show?: boolean; + webPreferences?: { preload?: string; [k: string]: any }; + [k: string]: any; +} + +let nextWebContentsId = 1; +const openWindows: BrowserWindow[] = []; + +// True if any open window is currently visible (for the 'activate' event's +// hasVisibleWindows arg — a hidden window must not count). +function anyWindowVisible(): boolean { + for (let i = 0; i < openWindows.length; i++) { + if (openWindows[i].isVisible()) return true; + } + return false; +} + +// Drop a one-shot native callback from the GC-root array once it has fired +// (dialog completion handlers only need to live until the native side replies). +function unrootNativeUi(cb: any): void { + const i = rootedNativeUi.indexOf(cb); + if (i >= 0) rootedNativeUi.splice(i, 1); +} + +// Keeps the app-ready closure passed to appRequestLoop alive from module init +// until the native loop fires it after main top-level (GC root). +let rootedOnReady: (() => void) | null = null; +// Same GC-root rationale for the dock-activate closure handed to the native +// onActivate hook — held until the user clicks the dock icon. +let rootedOnActivate: (() => void) | null = null; +// Native-held menubar/tray handles + their click closures. The native side +// stores these; rooting them here keeps the menubar/tray and every menu-item +// callback alive for the app's lifetime (otherwise GC could reclaim them). +const rootedNativeUi: any[] = []; + +class BrowserWindow extends EventEmitter { + // perry/ui window operations, captured as closures over the LOCAL `win` in + // the constructor. This is required: perry/ui instance-method dispatch + // (setBody/show/…) only fires on a local flow-tracked from the `Window()` + // call — calling on a property receiver (`this.win.show()`) compiles to a + // generic no-op, so the window would never composite or respond. A closure + // capturing the local preserves the dispatch. + private _show: () => void; + private _hide: () => void; + private _close: () => void; + private _setSize: (w: number, h: number) => void; + webContents: WebContents; + private destroyed: boolean; + private _visible: boolean; + private preloadPath: string | undefined; + + constructor(options?: BrowserWindowOptions) { + super(); + this.destroyed = false; + this._visible = false; + const opts = options || {}; + const width = opts.width || 800; + const height = opts.height || 600; + const title = opts.title || ""; + this.preloadPath = opts.webPreferences && opts.webPreferences.preload; + + const win = Window(title, width, height); + this._show = () => win.show(); + this._hide = () => win.hide(); + this._close = () => win.close(); + this._setSize = (w: number, h: number) => win.setSize(w, h); + this.webContents = new WebContents(nextWebContentsId++); + + // Create the webview that fills the window. Start blank; load via + // loadFile/loadURL. Persistent data store (ephemeral=0) so apps keep state. + const wv = WebView({ url: "about:blank", width, height }); + this.webContents._wv = wv; + + // Inject the IPC bridge runtime + the app's preload (document-start), + // before any page loads. Order matters: bridge first so `require('electron')` + // and `contextBridge` exist when the app's preload runs. + webviewAddUserScript(wv, PRELOAD_RUNTIME); + if (this.preloadPath) { + const preloadSrc = tryReadFile(this.preloadPath); + if (preloadSrc) webviewAddUserScript(wv, preloadSrc); + } + + // Fire webContents 'did-finish-load' / 'dom-ready' when the page loads, so + // apps that push to the renderer after load (a very common pattern) work. + const self = this; + // NOTE: wires webContents 'did-finish-load'/'dom-ready' from the webview's + // onLoaded delegate. The native onLoaded currently doesn't fire for file:// + // loads (tracked gap) so apps that push to the renderer on load don't yet + // get the event; renderer→main and main→renderer IPC otherwise work. + webviewSetOnLoaded(wv, (_url: string) => { + self.webContents.emit("did-finish-load"); + self.webContents.emit("dom-ready"); + }); + + // Route inbound IPC from this window's renderer to ipcMain. + webviewSetOnMessage(wv, (json: string) => { + let msg: any; + try { + msg = JSON.parse(json); + } catch (e) { + return; + } + ipcMain._dispatch(self, msg); + }); + + win.setBody(wv); + if (opts.show !== false) { + win.show(); + this._visible = true; + } + openWindows.push(this); + } + + loadURL(url: string): Promise { + webviewLoadUrl(this.webContents._wv, url); + return Promise.resolve(); + } + + loadFile(filePath: string, _options?: any): Promise { + // Resolve relative to cwd; Electron resolves relative to the app dir. + const abs = path.isAbsolute(filePath) ? filePath : path.join(process.cwd(), filePath); + webviewLoadUrl(this.webContents._wv, "file://" + abs); + return Promise.resolve(); + } + + show(): void { + this._show(); + this._visible = true; + } + hide(): void { + this._hide(); + this._visible = false; + } + isVisible(): boolean { + return this._visible && !this.destroyed; + } + close(): void { + if (this.destroyed) return; + this.emit("close"); + this._close(); + this.destroyed = true; + this._visible = false; + const idx = openWindows.indexOf(this); + if (idx >= 0) openWindows.splice(idx, 1); + this.emit("closed"); + if (openWindows.length === 0) { + app.emit("window-all-closed"); + } + } + destroy(): void { + this.close(); + } + isDestroyed(): boolean { + return this.destroyed; + } + setSize(width: number, height: number): void { + this._setSize(width, height); + } + setTitle(_title: string): void { + /* perry/ui window title is set at create; runtime retitle is a follow-up */ + } + focus(): void { + this._show(); + } + + static getAllWindows(): BrowserWindow[] { + return openWindows.slice(); + } + static getFocusedWindow(): BrowserWindow | null { + return openWindows.length > 0 ? openWindows[openWindows.length - 1] : null; + } +} + +function tryReadFile(p: string): string | null { + try { + const abs = path.isAbsolute(p) ? p : path.join(process.cwd(), p); + return fs.readFileSync(abs, "utf8"); + } catch (e) { + console.error("[electron] failed to read preload '" + p + "': " + errMessage(e)); + return null; + } +} + +// --------------------------------------------------------------------------- +// app +// --------------------------------------------------------------------------- + +class App extends EventEmitter { + private ready: boolean; + private readyResolvers: Array<() => void>; + private loopScheduled: boolean; + private appName: string; + dock: { hide: () => void; show: () => void; setIcon: (icon: any) => void }; + + constructor() { + super(); + this.ready = false; + this.readyResolvers = []; + this.loopScheduled = false; + this.appName = "Perry App"; + this.dock = { hide: () => {}, show: () => {}, setIcon: (_icon: any) => {} }; + // Register the native UI event loop. This does NOT block — the generated + // `main` enters the loop at the top level AFTER the user's `main` top-level + // code runs (registering ipcMain/whenReady handlers). Entering the loop at + // the top level (rather than from a microtask) is what lets windows created + // in `whenReady().then(...)` actually composite on screen. + this.startLoop(); + } + + private startLoop(): void { + if (this.loopScheduled) return; + this.loopScheduled = true; + const self = this; + // onReady fires when the loop takes over (top level), resolving whenReady(); + // the `.then(createWindow)` chain then runs on the first pump tick. Held in + // a module-level slot (rootedOnReady) so GC can't collect it before then. + rootedOnReady = () => { + self.ready = true; + self.emit("ready"); + const resolvers = self.readyResolvers; + self.readyResolvers = []; + for (let i = 0; i < resolvers.length; i++) resolvers[i](); + }; + appRequestLoop(rootedOnReady); + // macOS 'activate' — fired when the dock icon is clicked (incl. after all + // windows are closed). Electron apps reopen their window from here. + // hasVisibleWindows must reflect *visible* windows, not merely open ones + // (a hidden window must not suppress the reopen pattern). + rootedOnActivate = () => { + self.emit("activate", {}, anyWindowVisible()); + }; + onActivate(rootedOnActivate); + } + + whenReady(): Promise { + if (this.ready) return Promise.resolve(); + const self = this; + return new Promise((resolve) => { + self.readyResolvers.push(resolve); + }); + } + + isReady(): boolean { + return this.ready; + } + + quit(): void { + this.emit("before-quit"); + this.emit("will-quit"); + appQuit(); + } + exit(_code?: number): void { + appQuit(); + } + + getName(): string { + return this.appName; + } + setName(name: string): void { + this.appName = name; + } + getVersion(): string { + return "0.0.0"; + } + getAppPath(): string { + return process.cwd(); + } + getPath(name: string): string { + const home = os.homedir(); + switch (name) { + case "home": + return home; + case "appData": + return path.join(home, "Library", "Application Support"); + case "userData": + return path.join(home, "Library", "Application Support", this.appName); + case "temp": + return os.tmpdir(); + case "desktop": + return path.join(home, "Desktop"); + case "documents": + return path.join(home, "Documents"); + case "downloads": + return path.join(home, "Downloads"); + case "exe": + return process.execPath || process.cwd(); + default: + return home; + } + } + requestSingleInstanceLock(): boolean { + return true; + } + setActivationPolicy(_policy: string): void {} +} + +export const app = new App(); + +// --------------------------------------------------------------------------- +// Menu / MenuItem +// +// Menu.buildFromTemplate accepts the Electron template; setApplicationMenu wires +// it into the native macOS menubar (perry/ui menuBar*). Items with a `click` +// callback fire it; `role` items map to the standard AppKit selector +// (copy/paste/undo/quit/…) sent to the first responder; `type: "separator"` +// and nested `submenu` are supported. Accelerators ("CmdOrCtrl+S") are +// normalized to perry/ui's "Cmd+Shift+S" syntax. +// --------------------------------------------------------------------------- + +// Electron accelerator → perry/ui shortcut. CmdOrCtrl collapses to Cmd on +// macOS; Super/Meta → Cmd; everything else passes through to parse_shortcut. +function normalizeAccelerator(accel: string): string { + return accel + .replace(/CommandOrControl/gi, "Cmd") + .replace(/CmdOrCtrl/gi, "Cmd") + .replace(/Command/gi, "Cmd") + .replace(/Control/gi, "Ctrl") + .replace(/Option/gi, "Alt") + .replace(/Super/gi, "Cmd") + .replace(/Meta/gi, "Cmd"); +} + +// Electron menu role → AppKit first-responder selector (so copy/paste/etc. +// act on the focused webview). Roles without a standard selector fall through +// to a plain labeled item. +const ROLE_SELECTORS: { [role: string]: string } = { + undo: "undo:", + redo: "redo:", + cut: "cut:", + copy: "copy:", + paste: "paste:", + pasteandmatchstyle: "pasteAsPlainText:", + delete: "delete:", + selectall: "selectAll:", + quit: "terminate:", + minimize: "performMiniaturize:", + close: "performClose:", + togglefullscreen: "toggleFullScreen:", + hide: "hide:", + hideothers: "hideOtherApplications:", + unhide: "unhideAllApplications:", +}; + +const ROLE_LABELS: { [role: string]: string } = { + undo: "Undo", redo: "Redo", cut: "Cut", copy: "Copy", paste: "Paste", + pasteandmatchstyle: "Paste and Match Style", delete: "Delete", + selectall: "Select All", quit: "Quit", minimize: "Minimize", close: "Close", + togglefullscreen: "Toggle Full Screen", hide: "Hide", hideothers: "Hide Others", + unhide: "Show All", +}; + +// A Menu instance carries `.items`; a raw template submenu is an array. (The +// shim's buildFromTemplate only wraps the top level, so nested submenus arrive +// as raw template objects — read fields generically.) +function menuItemList(submenu: any): any[] { + if (!submenu) return []; + if (Array.isArray(submenu)) return submenu; + if (submenu.items && Array.isArray(submenu.items)) return submenu.items; + return []; +} + +// Build a native perry/ui menu handle from a list of Electron menu items. +function buildNativeMenu(items: any[]): any { + const native = menuCreate(); + rootedNativeUi.push(native); + for (let i = 0; i < items.length; i++) { + const item = items[i]; + if (item.type === "separator") { + menuAddSeparator(native); + continue; + } + if (item.submenu) { + const child = buildNativeMenu(menuItemList(item.submenu)); + menuAddSubmenu(native, item.label || "", child); + continue; + } + const role = item.role ? String(item.role).toLowerCase() : ""; + if (role && ROLE_SELECTORS[role]) { + const label = item.label || ROLE_LABELS[role] || ""; + const accel = item.accelerator ? normalizeAccelerator(item.accelerator) : ""; + menuAddStandardAction(native, label, ROLE_SELECTORS[role], accel); + continue; + } + const label = item.label || ROLE_LABELS[role] || ""; + const click = item.click; + const cb = () => { + if (typeof click === "function") click(); + }; + rootedNativeUi.push(cb); + if (item.accelerator) { + menuAddItemWithShortcut(native, label, normalizeAccelerator(item.accelerator), cb); + } else { + menuAddItem(native, label, cb); + } + } + return native; +} + +class MenuItem { + label: string; + click?: () => void; + submenu?: any; + role?: string; + type?: string; + accelerator?: string; + constructor(opts: any) { + this.label = opts.label || ""; + this.click = opts.click; + this.submenu = opts.submenu; + this.role = opts.role; + this.type = opts.type; + this.accelerator = opts.accelerator; + } +} + +let appMenu: Menu | null = null; + +class Menu { + items: MenuItem[]; + constructor() { + this.items = []; + } + append(item: MenuItem): void { + this.items.push(item); + } + popup(_options?: any): void {} + + // Build the native menubar this Menu represents: each top-level item becomes + // a bar menu whose contents are that item's submenu. + _buildNativeMenuBar(): any { + const bar = menuBarCreate(); + rootedNativeUi.push(bar); + for (let i = 0; i < this.items.length; i++) { + const top = this.items[i]; + const sub = buildNativeMenu(menuItemList(top.submenu)); + menuBarAddMenu(bar, top.label || "", sub); + } + return bar; + } + + static buildFromTemplate(template: any[]): Menu { + const menu = new Menu(); + for (let i = 0; i < template.length; i++) { + menu.append(new MenuItem(template[i])); + } + return menu; + } + static setApplicationMenu(menu: Menu | null): void { + appMenu = menu; + if (menu) { + menuBarAttach(menu._buildNativeMenuBar()); + } else { + // No native "remove menubar" API; attach a fresh empty bar so the app's + // custom menus are cleared rather than left live (keeps the native state + // consistent with getApplicationMenu() === null). + const empty = menuBarCreate(); + rootedNativeUi.push(empty); + menuBarAttach(empty); + } + } + static getApplicationMenu(): Menu | null { + return appMenu; + } +} + +export { Menu, MenuItem, BrowserWindow, WebContents }; + +// --------------------------------------------------------------------------- +// dialog — native NSOpenPanel/NSSavePanel via perry/ui. The native dialogs are +// single-selection; `properties: ["openDirectory"]` picks the folder panel. +// Both options-only and (window, options) call signatures are accepted. +// --------------------------------------------------------------------------- + +// dialog calls come as showXxx(options) or showXxx(browserWindow, options). +function dialogOptions(a?: any, b?: any): any { + if (b !== undefined) return b || {}; + // Single arg: a BrowserWindow has no dialog option keys, so treat an object + // with `properties`/`defaultPath`/`filters`/`title` as the options bag. + if (a && (a.properties || a.defaultPath || a.filters || a.title)) return a; + return a && !(a instanceof BrowserWindow) ? a : {}; +} + +export const dialog = { + showOpenDialog(a?: any, b?: any): Promise<{ canceled: boolean; filePaths: string[] }> { + const options = dialogOptions(a, b); + const props: string[] = options.properties || []; + const wantDir = props.indexOf("openDirectory") >= 0; + return new Promise((resolve) => { + const cb = (selected: string) => { + unrootNativeUi(cb); + if (!selected) resolve({ canceled: true, filePaths: [] }); + else resolve({ canceled: false, filePaths: [selected] }); + }; + rootedNativeUi.push(cb); + if (wantDir) openFolderDialog(cb); + else openFileDialog(cb); + }); + }, + showSaveDialog(a?: any, b?: any): Promise<{ canceled: boolean; filePath: string }> { + const options = dialogOptions(a, b); + const defaultPath: string = options.defaultPath || ""; + const base = defaultPath ? path.basename(defaultPath) : "untitled"; + const ext = path.extname(base).replace(/^\./, ""); + return new Promise((resolve) => { + const cb = (selected: string) => { + unrootNativeUi(cb); + if (!selected) resolve({ canceled: true, filePath: "" }); + else resolve({ canceled: false, filePath: selected }); + }; + rootedNativeUi.push(cb); + saveFileDialog(cb, base, ext); + }); + }, + showMessageBox(_window?: any, _options?: any): Promise<{ response: number; checkboxChecked: boolean }> { + return Promise.resolve({ response: 0, checkboxChecked: false }); + }, + showErrorBox(title: string, content: string): void { + console.error("[electron] " + title + ": " + content); + }, +}; + +// --------------------------------------------------------------------------- +// shell +// --------------------------------------------------------------------------- + +export const shell = { + openExternal(url: string): Promise { + try { + childProcess.spawn("open", [url]); + } catch (e) { + console.error("[electron] shell.openExternal failed: " + errMessage(e)); + } + return Promise.resolve(); + }, + openPath(p: string): Promise { + try { + childProcess.spawn("open", [p]); + } catch (e) {} + return Promise.resolve(""); + }, + showItemInFolder(_p: string): void {}, + beep(): void {}, +}; + +// --------------------------------------------------------------------------- +// clipboard — system pasteboard via perry/ui (text in v1). +// --------------------------------------------------------------------------- + +export const clipboard = { + readText(_type?: string): string { + return clipboardRead(); + }, + writeText(text: string, _type?: string): void { + clipboardWrite(text); + }, + clear(_type?: string): void { + clipboardWrite(""); + }, + availableFormats(_type?: string): string[] { + return ["text/plain"]; + }, +}; + +// --------------------------------------------------------------------------- +// nativeImage — thin wrapper carrying the source path (Tray/dock icons read it). +// --------------------------------------------------------------------------- + +class NativeImage { + // Source file path ("" for empty / unsupported sources). + _path: string; + constructor(p: string) { + this._path = p; + } + isEmpty(): boolean { + return this._path === ""; + } + getSize(): { width: number; height: number } { + return { width: 0, height: 0 }; + } + toDataURL(): string { + return ""; + } +} + +// Accept a path string or a NativeImage anywhere Electron takes an "image". +function iconToPath(icon: any): string { + if (typeof icon === "string") return icon; + if (icon && typeof icon._path === "string") return icon._path; + return ""; +} + +export const nativeImage = { + createFromPath(p: string): NativeImage { + return new NativeImage(p); + }, + createEmpty(): NativeImage { + return new NativeImage(""); + }, + createFromDataURL(_dataUrl: string): NativeImage { + // v1 supports path-backed images only; data-URL/buffer sources return an + // empty image. Warn so a missing Tray/dock icon isn't a silent surprise. + console.warn("[electron] nativeImage.createFromDataURL is unsupported (returns an empty image)"); + return new NativeImage(""); + }, + createFromBuffer(_buffer: any, _options?: any): NativeImage { + console.warn("[electron] nativeImage.createFromBuffer is unsupported (returns an empty image)"); + return new NativeImage(""); + }, +}; + +// --------------------------------------------------------------------------- +// Tray — system menu-bar status item via perry/ui tray*. +// --------------------------------------------------------------------------- + +class Tray extends EventEmitter { + private _handle: any; + private _destroyed: boolean; + + constructor(image: string | NativeImage) { + super(); + this._destroyed = false; + this._handle = trayCreate(iconToPath(image)); + rootedNativeUi.push(this._handle); + const self = this; + const onClick = () => self.emit("click"); + rootedNativeUi.push(onClick); + trayOnClick(this._handle, onClick); + } + + setImage(image: string | NativeImage): void { + if (this._destroyed) return; + traySetIcon(this._handle, iconToPath(image)); + } + setToolTip(toolTip: string): void { + if (this._destroyed) return; + traySetTooltip(this._handle, toolTip); + } + setTitle(_title: string, _options?: any): void { + /* status-item title text — not wired in v1 */ + } + setContextMenu(menu: Menu | null): void { + if (this._destroyed) return; + // `null` detaches the current menu — attach a fresh empty native menu so + // the previous context menu doesn't linger. + const native = menu ? buildNativeMenu(menuItemList(menu)) : menuCreate(); + if (!menu) rootedNativeUi.push(native); + trayAttachMenu(this._handle, native); + } + setPressedImage(_image: string | NativeImage): void {} + popUpContextMenu(_menu?: any, _position?: any): void {} + isDestroyed(): boolean { + return this._destroyed; + } + destroy(): void { + if (this._destroyed) return; + trayDestroy(this._handle); + this._destroyed = true; + } +} + +export { Tray }; + +// --------------------------------------------------------------------------- +// ipcRenderer / contextBridge — renderer-only in Electron. Provided here so a +// main-process `import { ipcRenderer } from 'electron'` doesn't crash; the real +// implementations run in the renderer (./preload-runtime.ts). +// --------------------------------------------------------------------------- + +export const ipcRenderer = { + invoke(_channel: string, ..._args: any[]): Promise { + return Promise.reject(new Error("ipcRenderer is only available in the renderer process")); + }, + send(_channel: string, ..._args: any[]): void {}, + on(_channel: string, _listener: any): any { + return ipcRenderer; + }, + once(_channel: string, _listener: any): any { + return ipcRenderer; + }, + removeListener(_channel: string, _listener: any): any { + return ipcRenderer; + }, + removeAllListeners(_channel?: string): any { + return ipcRenderer; + }, +}; + +export const contextBridge = { + exposeInMainWorld(_key: string, _api: any): void { + /* renderer-only; see preload-runtime.ts */ + }, +}; + +export const nativeTheme = { + shouldUseDarkColors: false, + themeSource: "system", + on: (_event: string, _cb: any) => {}, +}; + +// Default export mirrors `const electron = require('electron')`. +export default { + app, + BrowserWindow, + ipcMain, + ipcRenderer, + contextBridge, + Menu, + MenuItem, + dialog, + shell, + clipboard, + nativeImage, + Tray, + nativeTheme, + WebContents, +}; diff --git a/packages/electron/src/preload-runtime.ts b/packages/electron/src/preload-runtime.ts new file mode 100644 index 0000000000..08133b3c6a --- /dev/null +++ b/packages/electron/src/preload-runtime.ts @@ -0,0 +1,206 @@ +// AUTO-WRAPPED from bridge/preload-runtime.js — do not edit here; edit the .js and re-wrap. +// The renderer-side Electron-compat runtime, injected into every webview as a +// document-start user script (before the app preload) via webviewAddUserScript. +export const PRELOAD_RUNTIME: string = `// Renderer-side Electron-compat runtime. +// +// Injected into every webview as a document-start WKUserScript (before the app's own +// preload). Provides \`require('electron')\` → { ipcRenderer, contextBridge } and the +// transport to the native (Perry-compiled) main process. +// +// Transport: +// renderer -> main : window.webkit.messageHandlers.perry.postMessage(jsonString) +// (WebView2: window.chrome.webview.postMessage; GTK: same shape) +// main -> renderer : native evals window.__perryDeliver / __perryResolve into the page +(function () { + "use strict"; + if (window.__perryBridgeInstalled) return; + window.__perryBridgeInstalled = true; + + function postToNative(msg) { + var json = JSON.stringify(msg); + if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.perry) { + window.webkit.messageHandlers.perry.postMessage(json); // WKWebView (macOS/iOS) + } else if (window.chrome && window.chrome.webview) { + window.chrome.webview.postMessage(json); // WebView2 (Windows) + } else if (window.__perryNativePost) { + window.__perryNativePost(json); // GTK / fallback + } + // (no native channel → silently drop; console forwarding below would recurse) + } + + // Forward renderer console + uncaught errors to the native main process, so + // they land in the terminal (Electron pipes the renderer console to stdout via + // devtools; we do it over the bridge). Also the author's diagnostic window. + function fwd(level, args) { + try { + var parts = []; + for (var i = 0; i < args.length; i++) { + var a = args[i]; + parts.push(typeof a === "string" ? a : safeStringify(a)); + } + postToNative({ kind: "console", id: 0, channel: level, args: [parts.join(" ")] }); + } catch (e) {} + } + function safeStringify(v) { + try { return JSON.stringify(v); } catch (e) { return String(v); } + } + var realConsole = window.console || {}; + ["log", "info", "warn", "error", "debug"].forEach(function (level) { + var orig = realConsole[level] ? realConsole[level].bind(realConsole) : function () {}; + realConsole[level] = function () { + fwd(level, arguments); + orig.apply(null, arguments); + }; + }); + window.addEventListener("error", function (e) { + fwd("error", ["Uncaught " + (e.message || "error") + (e.filename ? " @ " + e.filename + ":" + e.lineno : "")]); + }); + window.addEventListener("unhandledrejection", function (e) { + fwd("error", ["Unhandled rejection: " + (e.reason && e.reason.message ? e.reason.message : safeStringify(e.reason))]); + }); + + var nextInvokeId = 1; + var pending = Object.create(null); // id -> {resolve, reject} + var listeners = Object.create(null); // channel -> [fn,...] + + // ---- main -> renderer entry points (called by native via evaluateJs) ---- + window.__perryResolve = function (id, ok, payloadJson) { + var p = pending[id]; + if (!p) return; + delete pending[id]; + var value = payloadJson === undefined ? undefined : JSON.parse(payloadJson); + if (ok) p.resolve(value); + else p.reject(Object.assign(new Error(value && value.message ? value.message : "ipc error"), value || {})); + }; + window.__perryDeliver = function (channel, payloadJson) { + var fns = listeners[channel]; + if (!fns || !fns.length) return; + var args = payloadJson === undefined ? [] : JSON.parse(payloadJson); + var event = { sender: ipcRenderer, senderId: 0 }; + for (var i = 0; i < fns.length; i++) { + try { fns[i].apply(null, [event].concat(args)); } + catch (e) { console.error("[perry-electron] listener for '" + channel + "' threw:", e); } + } + }; + + // ---- ipcRenderer ---- + var ipcRenderer = { + invoke: function (channel) { + var args = Array.prototype.slice.call(arguments, 1); + var id = nextInvokeId++; + return new Promise(function (resolve, reject) { + pending[id] = { resolve: resolve, reject: reject }; + postToNative({ kind: "invoke", id: id, channel: channel, args: args }); + }); + }, + send: function (channel) { + var args = Array.prototype.slice.call(arguments, 1); + postToNative({ kind: "send", id: 0, channel: channel, args: args }); + }, + sendSync: function () { + throw new Error("[perry-electron] ipcRenderer.sendSync is not supported; use invoke()"); + }, + on: function (channel, fn) { + (listeners[channel] || (listeners[channel] = [])).push(fn); + return ipcRenderer; + }, + once: function (channel, fn) { + var wrap = function () { ipcRenderer.removeListener(channel, wrap); return fn.apply(this, arguments); }; + return ipcRenderer.on(channel, wrap); + }, + removeListener: function (channel, fn) { + var fns = listeners[channel]; + if (fns) listeners[channel] = fns.filter(function (f) { return f !== fn; }); + return ipcRenderer; + }, + removeAllListeners: function (channel) { + if (channel === undefined) listeners = Object.create(null); + else delete listeners[channel]; + return ipcRenderer; + }, + }; + + // ---- contextBridge ---- + var contextBridge = { + exposeInMainWorld: function (key, api) { + // configurable:true so a renderer's top-level \`const x = window.x\` doesn't + // throw "duplicate variable that shadows a global property" in JSC. (Real + // Electron isolates the preload in a separate world; we share one world, + // so the exposed name must not be a non-configurable global binding.) + try { + Object.defineProperty(window, key, { + value: Object.freeze(deepBind(api)), + enumerable: true, + writable: false, + configurable: true, + }); + } catch (e) { + window[key] = deepBind(api); // some apps re-expose; be lenient + } + }, + exposeInIsolatedWorld: function (_worldId, key, api) { contextBridge.exposeInMainWorld(key, api); }, + }; + function deepBind(api) { + if (typeof api === "function") return api; + if (api && typeof api === "object") { + var out = Array.isArray(api) ? [] : {}; + for (var k in api) out[k] = deepBind(api[k]); + return out; + } + return api; + } + + // ---- require() for the renderer ---- + // Provides require('electron'), and a CommonJS loader for LOCAL files + // (require('./foo.js')) so old nodeIntegration-style apps that load their + // scripts/jQuery via require keep working — we sync-fetch the file and eval it + // as a CommonJS module. (Node *builtins* are not available in the webview.) + var electron = { ipcRenderer: ipcRenderer, contextBridge: contextBridge, webFrame: { setZoomFactor: function () {}, setZoomLevel: function () {} } }; + var moduleCache = Object.create(null); + + function loadSync(url) { + try { + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); // sync — required for CommonJS require() semantics + xhr.send(); + if (xhr.status === 0 || (xhr.status >= 200 && xhr.status < 300)) return xhr.responseText; + } catch (e) {} + return null; + } + function resolveUrl(name, base) { + try { return new URL(name, base).href; } catch (e) { return name; } + } + function makeRequire(baseUrl) { + return function (name) { + if (name === "electron") return electron; + if (name.charAt(0) === "." || name.charAt(0) === "/") { + var url = resolveUrl(name, baseUrl); + var src = loadSync(url); + if (src === null && url.slice(-3) !== ".js") { url = url + ".js"; src = loadSync(url); } + if (src === null) throw new Error("[perry-electron] require: cannot load '" + name + "'"); + if (moduleCache[url]) return moduleCache[url].exports; + var mod = { exports: {} }; + moduleCache[url] = mod; + var dir = url.replace(/\\/[^/]*$/, "/"); + try { + var fn = new Function("module", "exports", "require", "__filename", "__dirname", src); + fn(mod, mod.exports, makeRequire(dir), url, dir); + } catch (e) { + delete moduleCache[url]; + throw e; + } + return mod.exports; + } + throw new Error("[perry-electron] require('" + name + "') is not available in the renderer (no Node builtins in the system webview)"); + }; + } + window.require = makeRequire(window.location ? window.location.href : ""); + + window.electron = electron; // also expose directly for apps using window.electron + window.__perryIpcRenderer = ipcRenderer; + + // Diagnostic heartbeat so the main process can confirm the bridge installed + // at document-start and the message channel is live. + postToNative({ kind: "console", id: 0, channel: "debug", args: ["[perry-bridge] installed; channel=" + (!!(window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.perry)) ] }); +})(); +`; diff --git a/packages/perry-react/LICENSE b/packages/perry-react/LICENSE new file mode 100644 index 0000000000..c60e2b25ee --- /dev/null +++ b/packages/perry-react/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Perry Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/perry-react/README.md b/packages/perry-react/README.md new file mode 100644 index 0000000000..ded29372f3 --- /dev/null +++ b/packages/perry-react/README.md @@ -0,0 +1,81 @@ +# @perryts/react + +TypeScript types for [Perry](https://github.com/PerryTS/perry)'s React support. + +Perry compiles React/JSX to **native widgets** — standard React components +render to a native macOS/iOS/Android app, with no DOM and no browser. The +runtime lives in [`perry-react`](https://github.com/PerryTS/react) and +[`perry-react-dom`](https://github.com/PerryTS/react-dom); **this package is the +type layer** for it. + +It does two things: + +1. **Bundles the React types.** It depends on `@types/react` and + `@types/react-dom`, so a single `npm i -D @perryts/react` gives you working + React types — no need to remember the `@types/*` packages separately. + +2. **Types Perry's `createRoot` extension.** `@types/react-dom` only knows the + DOM-container form `createRoot(domNode)`. Perry has no DOM, so it extends + `createRoot` to take `null` plus native window options. This package augments + `react-dom/client` with that overload, so the call below type-checks instead + of erroring on the `null` container / extra argument. + +## Install + +```bash +npm install -D @perryts/react +# react / react-dom themselves are peer deps (the Perry runtime provides them): +npm install react react-dom +``` + +## Use + +Add it to your tsconfig so the `createRoot` augmentation is always in scope: + +```jsonc +// tsconfig.json +{ + "compilerOptions": { + "jsx": "react-jsx", + "types": ["@perryts/react"] + } +} +``` + +…or import it once anywhere in your project: + +```tsx +import '@perryts/react'; +import { useState } from 'react'; +import { createRoot } from 'react-dom/client'; + +function Counter() { + const [n, setN] = useState(0); + return ; +} + +// Perry overload: null container + native window options — now fully typed. +createRoot(null, { title: 'Counter', width: 300, height: 200 }).render(); +``` + +### `PerryRootOptions` + +The second argument to `createRoot(null, …)`. `title` / `width` / `height` are +the documented core; the rest mirror the common `perry/ui` window knobs and are +optional: + +```ts +import type { PerryRootOptions } from '@perryts/react'; + +const opts: PerryRootOptions = { + title: 'My App', + width: 900, + height: 640, + minWidth: 400, + resizable: true, +}; +``` + +## License + +MIT diff --git a/packages/perry-react/index.d.ts b/packages/perry-react/index.d.ts new file mode 100644 index 0000000000..5cde8f3c8a --- /dev/null +++ b/packages/perry-react/index.d.ts @@ -0,0 +1,76 @@ +/** + * `@perryts/react` — TypeScript types for Perry's React support. + * + * Two jobs: + * + * 1. **Bundle the React types.** This package depends on `@types/react` and + * `@types/react-dom`, so installing `@perryts/react` is enough — you don't + * have to remember to add the `@types/*` packages by hand. + * + * 2. **Type Perry's `createRoot` extension.** This file augments + * `react-dom/client` with the native-window overload + * `createRoot(null, { title, width, height })`. + * + * Activate it by adding the package to your tsconfig `types` (recommended, so + * the augmentation is always in scope): + * + * ```jsonc + * // tsconfig.json + * { "compilerOptions": { "jsx": "react-jsx", "types": ["@perryts/react"] } } + * ``` + * + * …or import it once anywhere in your project: + * + * ```ts + * import '@perryts/react'; + * import { createRoot } from 'react-dom/client'; + * createRoot(null, { title: 'Counter', width: 300, height: 200 }).render(); + * ``` + * + * NOTE: the `createRoot` augmentation only takes effect when the file that + * holds it is loaded directly (via `types: [...]`, a direct `import`, or a + * `/// `). TypeScript drops module augmentations reached only + * indirectly through a re-export from another `.d.ts`, so the augmentation + * lives here in the package entry rather than in a re-exported sub-module. + */ + +/// +/// + +import type { Root } from 'react-dom/client'; + +/** + * Options for the native window that hosts a Perry React root, passed as the + * second argument to `createRoot(null, options)`. + * + * `title` / `width` / `height` are the documented core; the rest mirror the + * common `perry/ui` window knobs and are all optional. + */ +export interface PerryRootOptions { + /** Window title shown in the title bar. */ + title?: string; + /** Initial content width, in points. */ + width?: number; + /** Initial content height, in points. */ + height?: number; + /** Minimum content width the user can resize to, in points. */ + minWidth?: number; + /** Minimum content height the user can resize to, in points. */ + minHeight?: number; + /** Whether the user can resize the window. Defaults to `true`. */ + resizable?: boolean; + /** Initial window x position, in screen points. Centered if omitted. */ + x?: number; + /** Initial window y position, in screen points. Centered if omitted. */ + y?: number; +} + +declare module 'react-dom/client' { + /** + * Perry native-window overload: pass `null` (no DOM container) plus the + * native window options. Standard `react-dom`'s DOM-container overloads stay + * available — this only adds the `null` form. Returns the same `Root` so + * `.render()` / `.unmount()` work as usual. + */ + export function createRoot(container: null | undefined, options: PerryRootOptions): Root; +} diff --git a/packages/perry-react/package.json b/packages/perry-react/package.json new file mode 100644 index 0000000000..78849e5cf7 --- /dev/null +++ b/packages/perry-react/package.json @@ -0,0 +1,55 @@ +{ + "name": "@perryts/react", + "version": "0.1.0", + "description": "TypeScript types for Perry's React support — bundles @types/react / @types/react-dom and augments react-dom/client's createRoot with Perry's native-window overload (createRoot(null, { title, width, height })).", + "types": "./index.d.ts", + "exports": { + ".": { + "types": "./index.d.ts" + }, + "./package.json": "./package.json" + }, + "files": [ + "index.d.ts", + "README.md", + "LICENSE" + ], + "scripts": { + "typecheck": "tsc --noEmit -p tsconfig.json" + }, + "keywords": [ + "perry", + "react", + "react-dom", + "createRoot", + "native", + "types", + "typescript" + ], + "author": "Perry Contributors", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/PerryTS/perry.git", + "directory": "packages/perry-react" + }, + "homepage": "https://github.com/PerryTS/perry/tree/main/packages/perry-react#readme", + "bugs": { + "url": "https://github.com/PerryTS/perry/issues" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react": { "optional": true }, + "react-dom": { "optional": true } + }, + "dependencies": { + "@types/react": "^18.3.0 || ^19.0.0", + "@types/react-dom": "^18.3.0 || ^19.0.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/perry-react/tsconfig.json b/packages/perry-react/tsconfig.json new file mode 100644 index 0000000000..3d53dba4cd --- /dev/null +++ b/packages/perry-react/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "strict": true, + "skipLibCheck": true, + "noEmit": true, + "types": [] + }, + "include": ["index.d.ts"] +} diff --git a/types/perry/ui/index.d.ts b/types/perry/ui/index.d.ts index 955f0d33bf..f03ea78bec 100644 --- a/types/perry/ui/index.d.ts +++ b/types/perry/ui/index.d.ts @@ -739,6 +739,17 @@ export function webviewCanGoBack(handle: Widget): number; export function webviewEvaluateJs(handle: Widget, js: string, callback: (result: string) => void): void; /** Wipe the WebView's cookies / local storage / IndexedDB. Use after auth. */ export function webviewClearCookies(handle: Widget): void; +/** + * Electron-compat IPC (renderer → main). Register a closure invoked with the + * JSON string the page posts via `window.webkit.messageHandlers.perry.postMessage(...)`. + * Reply with `webviewEvaluateJs(...)` (main → renderer). Backs `ipcMain`. + */ +export function webviewSetOnMessage(handle: Widget, onMessage: (json: string) => void): void; +/** + * Inject a document-start user script into all frames (the IPC bridge runtime + + * the app's preload). Call before `webviewLoadUrl` so it applies to that load. + */ +export function webviewAddUserScript(handle: Widget, source: string): void; /** VStack with built-in edge insets. */ export function VStackWithInsets(spacing: number, top: number, left: number, bottom: number, right: number): Widget; @@ -1819,6 +1830,24 @@ export function registerGlobalHotkey( */ export function onTerminate(callback: () => void): void; +/** + * Electron-compat body-less event loop. Sets up NSApplication + the timer pump, + * invokes `onReady` (which resolves `app.whenReady()`), then blocks. Windows are + * created dynamically afterward via `Window(...)`. Backs `electron`'s app loop. + */ +export function appRunLoop(onReady: () => void): void; + +/** Electron-compat `app.quit()` — terminate the application. */ +export function appQuit(): void; + +/** + * Electron-compat: register the top-level UI event loop without blocking. The + * generated `main` enters it (via the runtime's loop-takeover hook) AFTER the + * user's top-level code runs, so windows created from `app.whenReady().then(...)` + * composite correctly. Prefer this over `appRunLoop` for the `app` shell. + */ +export function appRequestLoop(onReady: () => void): void; + /** * Register a callback to run when the app becomes the frontmost app * (initial launch, dock click, cmd-tab). Runs once per activation. Use to