diff --git a/Cargo.lock b/Cargo.lock index 6f4b086..0b2ea81 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -36,7 +36,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "thiserror", + "thiserror 1.0.69", "tokio", "tower 0.4.13", "tracing", @@ -91,9 +91,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" [[package]] name = "android-tzdata" @@ -111,10 +111,22 @@ dependencies = [ ] [[package]] -name = "anyhow" -version = "1.0.91" +name = "any_spawner" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" +checksum = "9747eb01aed7603aba23f7c869d5d7e5d37aab9c3501aced42d8fdb786f1f6e3" +dependencies = [ + "futures", + "thiserror 1.0.69", + "tokio", + "wasm-bindgen-futures", +] + +[[package]] +name = "anyhow" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" [[package]] name = "argparse" @@ -139,17 +151,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-recursion" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.85", -] - [[package]] name = "async-trait" version = "0.1.83" @@ -158,7 +159,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -169,32 +170,32 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "attribute-derive" -version = "0.9.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f1ee502851995027b06f99f5ffbeffa1406b38d0b318a1ebfa469332c6cbafd" +checksum = "0053e96dd3bec5b4879c23a138d6ef26f2cb936c9cdc96274ac2b9ed44b5bb54" dependencies = [ "attribute-derive-macro", "derive-where", "manyhow", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] name = "attribute-derive-macro" -version = "0.9.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3601467f634cfe36c4780ca9c75dea9a5b34529c1f2810676a337e7e0997f954" +checksum = "463b53ad0fd5b460af4b1915fe045ff4d946d025fb6c4dc3337752eaa980f71b" dependencies = [ "collection_literals", "interpolator", "manyhow", - "proc-macro-utils 0.8.0", + "proc-macro-utils", "proc-macro2", "quote", "quote-use", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -205,9 +206,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" -version = "0.7.7" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", "axum-core", @@ -290,7 +291,7 @@ checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -415,38 +416,6 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" -[[package]] -name = "cached" -version = "0.45.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90eb5776f28a149524d1d8623035760b4454ec881e8cf3838fa8d7e1b11254b3" -dependencies = [ - "cached_proc_macro", - "cached_proc_macro_types", - "hashbrown 0.13.2", - "instant", - "once_cell", - "thiserror", -] - -[[package]] -name = "cached_proc_macro" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c878c71c2821aa2058722038a59a67583a4240524687c6028571c9b395ded61f" -dependencies = [ - "darling 0.14.4", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "cached_proc_macro_types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" - [[package]] name = "camino" version = "1.1.9" @@ -455,9 +424,9 @@ checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" [[package]] name = "cc" -version = "1.1.31" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ "shlex", ] @@ -495,33 +464,6 @@ dependencies = [ "windows-targets", ] -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half", -] - [[package]] name = "cipher" version = "0.4.4" @@ -538,7 +480,9 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d3ad3122b0001c7f140cf4d605ef9a9e2c24d96ab0b4fb4347b76de2425f445" dependencies = [ - "thiserror", + "serde", + "serde_json", + "thiserror 1.0.69", ] [[package]] @@ -641,6 +585,12 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "const_str_slice_concat" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f67855af358fcb20fac58f9d714c94e2b228fe5694c1c9b4ead4a366343eda1b" + [[package]] name = "convert_case" version = "0.4.0" @@ -669,12 +619,13 @@ dependencies = [ [[package]] name = "cookie_store" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4934e6b7e8419148b6ef56950d277af8561060b56afd59e2aadf98b59fce6baa" +checksum = "2eac901828f88a5241ee0600950ab981148a18f2f756900ffba1b125ca6a3ef9" dependencies = [ "cookie", - "idna 0.5.0", + "document-features", + "idna 1.0.3", "log", "publicsuffix", "serde", @@ -702,9 +653,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" dependencies = [ "libc", ] @@ -827,7 +778,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -860,16 +811,17 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] name = "dashmap" -version = "5.5.3" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" dependencies = [ "cfg-if", + "crossbeam-utils", "hashbrown 0.14.5", "lock_api", "once_cell", @@ -885,7 +837,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -927,7 +879,7 @@ checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -969,7 +921,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -989,7 +941,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core 0.20.2", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1002,7 +954,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1029,7 +981,7 @@ checksum = "d5adf688c584fe33726ce0e2898f608a2a92578ac94a4a92fcecf73214fe0716" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1042,7 +994,7 @@ dependencies = [ "dsl_auto_type", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1062,7 +1014,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" dependencies = [ - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1099,7 +1051,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1111,6 +1063,15 @@ dependencies = [ "const-random", ] +[[package]] +name = "document-features" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +dependencies = [ + "litrs", +] + [[package]] name = "doku" version = "0.21.1" @@ -1157,7 +1118,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1191,6 +1152,15 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "either_of" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6e22feb4d5cacf9f2c64902a1c35ef0f2d766e42db316a98b93992bbce669cb" +dependencies = [ + "pin-project-lite", +] + [[package]] name = "encoding_rs" version = "0.8.35" @@ -1298,15 +1268,15 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" [[package]] name = "flate2" -version = "1.0.34" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide", @@ -1382,6 +1352,7 @@ dependencies = [ "futures-core", "futures-task", "futures-util", + "num_cpus", ] [[package]] @@ -1398,7 +1369,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1485,7 +1456,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -1516,6 +1487,12 @@ dependencies = [ "web-sys", ] +[[package]] +name = "guardian" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "493913a18c0d7bebb75127a26a432162c59edbe06f6cf712001e3e769345e8b5" + [[package]] name = "h2" version = "0.4.6" @@ -1535,22 +1512,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "half" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" -dependencies = [ - "cfg-if", - "crunchy", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" - [[package]] name = "hashbrown" version = "0.14.5" @@ -1563,9 +1524,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" [[package]] name = "hashlink" @@ -1665,7 +1626,7 @@ dependencies = [ "reqwest", "reqwest-middleware", "sha2", - "thiserror", + "thiserror 1.0.69", "tokio", ] @@ -1681,6 +1642,22 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "hydration_context" +version = "0.2.0-rc2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e578296c79066cdf7325259d8259b48adc311e324beecd801c43d953532c51b" +dependencies = [ + "futures", + "js-sys", + "once_cell", + "or_poisoned", + "pin-project-lite", + "serde", + "throw_error", + "wasm-bindgen", +] + [[package]] name = "hyper" version = "1.5.0" @@ -1802,7 +1779,10 @@ dependencies = [ "enum_delegate", "env_logger", "futures", + "getrandom", + "gloo-net", "hex", + "http", "jsonwebtoken", "katex", "leptos", @@ -1822,8 +1802,10 @@ dependencies = [ "rand", "reqwest", "retry_future", + "send_wrapper", "serde", "serde_json", + "serde_urlencoded", "sha2", "smart-default", "time", @@ -1834,6 +1816,126 @@ dependencies = [ "tracing", "url", "uuid", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] @@ -1854,12 +1956,23 @@ dependencies = [ [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1869,7 +1982,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.0", + "hashbrown 0.15.1", ] [[package]] @@ -1881,15 +1994,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - [[package]] name = "interpolator" version = "0.5.0" @@ -1917,15 +2021,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.13.0" @@ -1943,9 +2038,9 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -1987,7 +2082,7 @@ dependencies = [ "ducc", "itertools 0.10.5", "js-sys", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", ] @@ -2002,18 +2097,35 @@ dependencies = [ [[package]] name = "leptos" -version = "0.6.15" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cbb3237c274dadf00dcc27db96c52601b40375117178fb24a991cda073624f0" +checksum = "cc41e5764d7476efb929db94c1039752ccde5bea2ad40fddaaeeb9b94493fb0d" dependencies = [ + "any_spawner", + "base64 0.22.1", "cfg-if", + "either_of", + "futures", + "hydration_context", "leptos_config", "leptos_dom", + "leptos_hot_reload", "leptos_macro", - "leptos_reactive", "leptos_server", + "oco_ref", + "or_poisoned", + "paste", + "rand", + "reactive_graph", + "rustc-hash", + "send_wrapper", + "serde", + "serde_qs", "server_fn", - "tracing", + "slotmap", + "tachys", + "thiserror 2.0.3", + "throw_error", "typed-builder", "typed-builder-macro", "wasm-bindgen", @@ -2022,9 +2134,9 @@ dependencies = [ [[package]] name = "leptos-use" -version = "0.13.6" +version = "0.14.0-rc3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f918fb333772f6401d671f996689e7258e3bee31e4108d5e142566897c678a50" +checksum = "fc40bd3ae7bf4dd84b5a67f7fc0e91d0335341e07430900001242dd81ac7aec2" dependencies = [ "cfg-if", "codee", @@ -2038,7 +2150,8 @@ dependencies = [ "leptos", "leptos_axum", "paste", - "thiserror", + "send_wrapper", + "thiserror 2.0.3", "unic-langid", "wasm-bindgen", "wasm-bindgen-futures", @@ -2047,14 +2160,15 @@ dependencies = [ [[package]] name = "leptos_axum" -version = "0.6.15" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "910681b920c48a43508b2bd0261bdb67c4ef9456a0b3613f956a0d30e832e9de" +checksum = "15a7318603b14939a7332555ce8fd24a043047780dc6c9820359472ec4db6251" dependencies = [ + "any_spawner", "axum", - "cfg-if", + "dashmap", "futures", - "http-body-util", + "hydration_context", "leptos", "leptos_integration_utils", "leptos_macro", @@ -2062,61 +2176,45 @@ dependencies = [ "leptos_router", "once_cell", "parking_lot", - "serde_json", "server_fn", "tokio", - "tokio-util", - "tracing", + "tower 0.5.1", + "tower-http", ] [[package]] name = "leptos_config" -version = "0.6.15" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ed778611380ddea47568ac6ad6ec5158d39b5bd59e6c4dcd24efc15dc3dc0d" +checksum = "fe8f7f58ee40b2c0d7e1f0abdbf51ffd2343d281b3f16c1854c0218c152fbad8" dependencies = [ "config", "regex", "serde", - "thiserror", + "thiserror 2.0.3", "typed-builder", ] [[package]] name = "leptos_dom" -version = "0.6.15" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8401c46c86c1f4c16dcb7881ed319fcdca9cda9b9e78a6088955cb423afcf119" +checksum = "3dccedefe9054b9ca09e027801557dc82cad64cb1f1a8061b114e7f6203bbe51" dependencies = [ - "async-recursion", - "cfg-if", - "drain_filter_polyfill", - "futures", - "getrandom", - "html-escape", - "indexmap", - "itertools 0.12.1", "js-sys", - "leptos_reactive", - "once_cell", - "pad-adapter", - "paste", - "rustc-hash 1.1.0", - "serde", - "serde_json", - "server_fn", - "smallvec", - "tracing", + "or_poisoned", + "reactive_graph", + "send_wrapper", + "tachys", "wasm-bindgen", - "wasm-bindgen-futures", "web-sys", ] [[package]] name = "leptos_hot_reload" -version = "0.6.15" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb53d4794240b684a2f4be224b84bee9e62d2abc498cf2bcd643cd565e01d96" +checksum = "754d861dbdaf20b6da328112b68e1b2ea2da9a157aef748f53b15fd118972b85" dependencies = [ "anyhow", "camino", @@ -2126,35 +2224,36 @@ dependencies = [ "quote", "rstml", "serde", - "syn 2.0.85", + "syn 2.0.87", "walkdir", ] [[package]] name = "leptos_integration_utils" -version = "0.6.15" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a96976631c2225ec116a7bf9c0ed5bf6999a19fed33f5e3cbcf37af44c384dc" +checksum = "30224324686ef508bc4a08fcfc16451410823b7d11b83325d2444221880bbbaa" dependencies = [ "futures", + "hydration_context", "leptos", "leptos_config", - "leptos_hot_reload", "leptos_meta", - "tracing", + "leptos_router", + "reactive_graph", ] [[package]] name = "leptos_macro" -version = "0.6.15" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b13bc3db70715cd8218c4535a5af3ae3c0e5fea6f018531fc339377b36bc0e0" +checksum = "9c592d8e91148c73ee562f6d4b867d84d1995a5adb10d5a723f538b3dc173dfc" dependencies = [ "attribute-derive", "cfg-if", "convert_case 0.6.0", "html-escape", - "itertools 0.12.1", + "itertools 0.13.0", "leptos_hot_reload", "prettyplease", "proc-macro-error2", @@ -2162,106 +2261,87 @@ dependencies = [ "quote", "rstml", "server_fn_macro", - "syn 2.0.85", - "tracing", + "syn 2.0.87", "uuid", ] [[package]] name = "leptos_meta" -version = "0.6.15" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25acc2f63cf91932013e400a95bf6e35e5d3dbb44a7b7e25a8e3057d12005b3b" +checksum = "7d95aec94d2c28120fe702182ec83e5402b9ad2c6fccaf3dbb98d0d94bf9f908" dependencies = [ - "cfg-if", - "indexmap", - "leptos", - "tracing", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "leptos_reactive" -version = "0.6.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4161acbf80f59219d8d14182371f57302bc7ff81ee41aba8ba1ff7295727f23" -dependencies = [ - "base64 0.22.1", - "cfg-if", "futures", "indexmap", - "js-sys", - "oco_ref", - "paste", - "pin-project", - "rustc-hash 1.1.0", - "self_cell", - "serde", - "serde-wasm-bindgen", - "serde_json", - "slotmap", - "thiserror", - "tokio", - "tracing", + "leptos", + "once_cell", + "or_poisoned", + "send_wrapper", "wasm-bindgen", - "wasm-bindgen-futures", "web-sys", ] [[package]] name = "leptos_router" -version = "0.6.15" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d71dea7d42c0d29c40842750232d3425ed1cf10e313a1f898076d20871dad32" +checksum = "123f2c0df5b3fd3025d1c26bc0dce1abd236409d9f031112ab5a0f871cfa6cbb" dependencies = [ - "cached", - "cfg-if", + "any_spawner", + "either_of", + "futures", "gloo-net", - "itertools 0.12.1", "js-sys", - "lazy_static", "leptos", - "leptos_integration_utils", - "leptos_meta", - "linear-map", - "lru", + "leptos_router_macro", "once_cell", + "or_poisoned", "percent-encoding", - "regex", + "reactive_graph", "send_wrapper", - "serde", - "serde_json", - "serde_qs 0.13.0", - "thiserror", - "tracing", + "tachys", + "thiserror 2.0.3", "url", "wasm-bindgen", - "wasm-bindgen-futures", "web-sys", ] [[package]] -name = "leptos_server" -version = "0.6.15" +name = "leptos_router_macro" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a97eb90a13f71500b831c7119ddd3bdd0d7ae0a6b0487cade4fddeed3b8c03f" +checksum = "f84e0d92a7d6973682f02539b8de1f37651e72f557b1fd3f2d55460662669926" dependencies = [ - "inventory", - "lazy_static", - "leptos_macro", - "leptos_reactive", + "proc-macro-error2", + "proc-macro2", + "quote", +] + +[[package]] +name = "leptos_server" +version = "0.7.0-rc2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1387314dcb7f9547394a61b0cb41cdbd09e6c5dd5e154e304123f3d9b5b747b" +dependencies = [ + "any_spawner", + "base64 0.22.1", + "codee", + "futures", + "hydration_context", + "or_poisoned", + "reactive_graph", + "send_wrapper", "serde", + "serde_json", "server_fn", - "thiserror", - "tracing", + "tachys", ] [[package]] name = "libc" -version = "0.2.161" +version = "0.2.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" [[package]] name = "libm" @@ -2274,10 +2354,6 @@ name = "linear-map" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfae20f6b19ad527b550c223fddc3077a547fc70cda94b9b566575423fd303ee" -dependencies = [ - "serde", - "serde_test", -] [[package]] name = "linked-hash-map" @@ -2300,6 +2376,18 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + [[package]] name = "lock_api" version = "0.4.12" @@ -2316,34 +2404,25 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" -[[package]] -name = "lru" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21" -dependencies = [ - "hashbrown 0.14.5", -] - [[package]] name = "manyhow" -version = "0.10.4" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91ea592d76c0b6471965708ccff7e6a5d277f676b90ab31f4d3f3fc77fade64" +checksum = "b33efb3ca6d3b07393750d4030418d594ab1139cee518f0dc88db70fec873587" dependencies = [ "manyhow-macros", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] name = "manyhow-macros" -version = "0.10.4" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64621e2c08f2576e4194ea8be11daf24ac01249a4f53cd8befcbb7077120ead" +checksum = "46fce34d199b78b6e6073abf984c9cf5fd3e9330145a93ee0738a7443e371495" dependencies = [ - "proc-macro-utils 0.8.0", + "proc-macro-utils", "proc-macro2", "quote", ] @@ -2524,7 +2603,7 @@ dependencies = [ "rustc_version", "smallvec", "tagptr", - "thiserror", + "thiserror 1.0.69", "triomphe", "uuid", ] @@ -2563,6 +2642,12 @@ dependencies = [ "tempfile", ] +[[package]] +name = "next_tuple" +version = "0.1.0-rc2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6989c5af5a391cdc1c25aad10c6fb881b6e7ebd8df7c6fb29188acb5cba576" + [[package]] name = "nom" version = "7.1.3" @@ -2645,6 +2730,16 @@ dependencies = [ "libm", ] +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + [[package]] name = "object" version = "0.36.5" @@ -2656,12 +2751,12 @@ dependencies = [ [[package]] name = "oco_ref" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51ebcefb2f0b9a5e0bea115532c8ae4215d1b01eff176d0f4ba4192895c2708" +checksum = "64b94982fe39a861561cf67ff17a7849f2cedadbbad960a797634032b7abb998" dependencies = [ "serde", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2693,7 +2788,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2714,6 +2809,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "or_poisoned" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c04f5d74368e4d0dfe06c45c8627c81bd7c317d52762d118fb9b3076f6420fd" + [[package]] name = "ordered-multimap" version = "0.7.3" @@ -2724,12 +2825,6 @@ dependencies = [ "hashbrown 0.14.5", ] -[[package]] -name = "pad-adapter" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d80efc4b6721e8be2a10a5df21a30fa0b470f1539e53d8b4e6e75faf938b63" - [[package]] name = "parking" version = "2.2.1" @@ -2803,7 +2898,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", - "thiserror", + "thiserror 1.0.69", "ucd-trie", ] @@ -2827,7 +2922,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2858,7 +2953,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2954,7 +3049,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2999,17 +3094,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", -] - -[[package]] -name = "proc-macro-utils" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f59e109e2f795a5070e69578c4dc101068139f74616778025ae1011d4cd41a8" -dependencies = [ - "proc-macro2", - "quote", - "smallvec", + "syn 2.0.87", ] [[package]] @@ -3040,7 +3125,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "version_check", "yansi", ] @@ -3053,20 +3138,20 @@ checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" [[package]] name = "psm" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" dependencies = [ "cc", ] [[package]] name = "publicsuffix" -version = "2.2.3" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" dependencies = [ - "idna 0.3.0", + "idna 1.0.3", "psl-types", ] @@ -3096,44 +3181,47 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ "bytes", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.0.0", + "rustc-hash", "rustls", "socket2", - "thiserror", + "thiserror 2.0.3", "tokio", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", + "getrandom", "rand", "ring", - "rustc-hash 2.0.0", + "rustc-hash", "rustls", + "rustls-pki-types", "slab", - "thiserror", + "thiserror 2.0.3", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e346e016eacfff12233c243718197ca12f148c84e1e84268a896699b41c71780" +checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" dependencies = [ "cfg_aliases", "libc", @@ -3168,10 +3256,10 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82ebfb7faafadc06a7ab141a6f67bcfb24cb8beb158c6fe933f2f035afa99f35" dependencies = [ - "proc-macro-utils 0.10.0", + "proc-macro-utils", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -3224,6 +3312,55 @@ dependencies = [ "bitflags 2.6.0", ] +[[package]] +name = "reactive_graph" +version = "0.1.0-rc2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49131fcf9733a991f3485f9a0d0c9b9f65f55df4bb9f9d37203d1f82efa9513c" +dependencies = [ + "any_spawner", + "async-lock", + "futures", + "guardian", + "hydration_context", + "or_poisoned", + "pin-project-lite", + "rustc-hash", + "send_wrapper", + "serde", + "slotmap", + "thiserror 2.0.3", + "web-sys", +] + +[[package]] +name = "reactive_stores" +version = "0.1.0-rc2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e722a72d10534f7613291bd2ef44cd2473ad70b2aa965d4bb7b940afb6f7257" +dependencies = [ + "guardian", + "itertools 0.13.0", + "or_poisoned", + "paste", + "reactive_graph", + "reactive_stores_macro", + "rustc-hash", +] + +[[package]] +name = "reactive_stores_macro" +version = "0.1.0-rc2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b37fc52b98f16d437cdf5541cf60f661596b6e84a708e02b216a7bf864fe699b" +dependencies = [ + "convert_case 0.6.0", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "readonly" version = "0.2.12" @@ -3232,7 +3369,7 @@ checksum = "a25d631e41bfb5fdcde1d4e2215f62f7f0afa3ff11e26563765bd6ea1d229aeb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -3258,9 +3395,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -3336,7 +3473,7 @@ dependencies = [ "http", "reqwest", "serde", - "thiserror", + "thiserror 1.0.69", "tower-service", ] @@ -3401,16 +3538,17 @@ dependencies = [ [[package]] name = "rstml" -version = "0.11.2" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe542870b8f59dd45ad11d382e5339c9a1047cde059be136a7016095bbdefa77" +checksum = "51187e564f12336ef40cd04f6f4d805d6919188001dcf1e0a021898ea0fe28ce" dependencies = [ + "derive-where", "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.85", + "syn 2.0.87", "syn_derive", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3429,12 +3567,6 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[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.0.0" @@ -3452,9 +3584,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.38" +version = "0.38.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa260229e6538e52293eeb577aabd09945a09d6d9cc0fc550ed7529056c2e32a" +checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" dependencies = [ "bitflags 2.6.0", "errno", @@ -3491,6 +3623,9 @@ name = "rustls-pki-types" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +dependencies = [ + "web-time", +] [[package]] name = "rustls-webpki" @@ -3563,20 +3698,14 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" dependencies = [ "core-foundation-sys", "libc", ] -[[package]] -name = "self_cell" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" - [[package]] name = "semver" version = "1.0.23" @@ -3594,33 +3723,22 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.214" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] -[[package]] -name = "serde-wasm-bindgen" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - [[package]] name = "serde_derive" -version = "1.0.214" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -3646,17 +3764,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_qs" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c" -dependencies = [ - "percent-encoding", - "serde", - "thiserror", -] - [[package]] name = "serde_qs" version = "0.13.0" @@ -3665,7 +3772,7 @@ checksum = "cd34f36fe4c5ba9654417139a9b3a20d2e1de6012ee678ad14d240c22c78d8d6" dependencies = [ "percent-encoding", "serde", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3677,15 +3784,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_test" -version = "1.0.177" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f901ee573cab6b3060453d2d5f0bae4e6d628c23c0a962ff9b5f1d7c8d4f1ed" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3700,13 +3798,12 @@ dependencies = [ [[package]] name = "server_fn" -version = "0.6.15" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fae7a3038a32e5a34ba32c6c45eb4852f8affaf8b794ebfcd4b1099e2d62ebe" +checksum = "bed94ec81d1b9ef2b28325bcf715461d861e90f41d249b70b561c6eefcb96afe" dependencies = [ "axum", "bytes", - "ciborium", "const_format", "dashmap", "futures", @@ -3717,13 +3814,15 @@ dependencies = [ "inventory", "js-sys", "once_cell", + "pin-project-lite", "send_wrapper", "serde", "serde_json", - "serde_qs 0.12.0", + "serde_qs", "server_fn_macro_default", - "thiserror", - "tower 0.4.13", + "thiserror 2.0.3", + "throw_error", + "tower 0.5.1", "tower-layer", "url", "wasm-bindgen", @@ -3735,26 +3834,26 @@ dependencies = [ [[package]] name = "server_fn_macro" -version = "0.6.15" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faaaf648c6967aef78177c0610478abb5a3455811f401f3c62d10ae9bd3901a1" +checksum = "4b7e77dd4f15d19a65019d24700963e40294b5a30c42c32bce2e532fbfe00b49" dependencies = [ "const_format", "convert_case 0.6.0", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "xxhash-rust", ] [[package]] name = "server_fn_macro_default" -version = "0.6.15" +version = "0.7.0-rc2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2aa8119b558a17992e0ac1fd07f080099564f24532858811ce04f742542440" +checksum = "295a3c3d01be1cf17d0c8b25a48b963a747f6ccdba0f62f657e8df37df4afaac" dependencies = [ "server_fn_macro", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -3801,7 +3900,7 @@ checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ "num-bigint", "num-traits", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -3820,7 +3919,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" dependencies = [ - "serde", "version_check", ] @@ -3838,7 +3936,7 @@ checksum = "0eb01866308440fc64d6c44d9e86c5cc17adfe33c4d6eed55da9145044d0ffc1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -3867,6 +3965,12 @@ dependencies = [ "der", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "stacker" version = "0.1.17" @@ -3911,9 +4015,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.85" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -3929,7 +4033,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -3947,6 +4051,17 @@ dependencies = [ "futures-core", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "syntect" version = "5.2.0" @@ -3964,7 +4079,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "thiserror", + "thiserror 1.0.69", "walkdir", "yaml-rust", ] @@ -3990,6 +4105,38 @@ dependencies = [ "libc", ] +[[package]] +name = "tachys" +version = "0.1.0-rc2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "231b9e7ce516683c062dd2c8e4d30b81ae8d9a6d05f1e2a9c898e0b84ad728fe" +dependencies = [ + "any_spawner", + "const_str_slice_concat", + "drain_filter_polyfill", + "either_of", + "futures", + "html-escape", + "indexmap", + "itertools 0.13.0", + "js-sys", + "linear-map", + "next_tuple", + "oco_ref", + "once_cell", + "or_poisoned", + "parking_lot", + "paste", + "reactive_graph", + "reactive_stores", + "rustc-hash", + "send_wrapper", + "slotmap", + "throw_error", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "tagptr" version = "0.2.0" @@ -3998,9 +4145,9 @@ checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" [[package]] name = "tempfile" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", @@ -4011,22 +4158,51 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.65" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +dependencies = [ + "thiserror-impl 2.0.3", ] [[package]] name = "thiserror-impl" -version = "1.0.65" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "throw_error" +version = "0.2.0-rc2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0240909e3ad4ed2dab72b2861fc9a7930110c1d3a9a0a32c6dee0a747591d10a" +dependencies = [ + "pin-project-lite", ] [[package]] @@ -4076,6 +4252,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ "displaydoc", + "zerovec", ] [[package]] @@ -4095,9 +4272,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.41.0" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" dependencies = [ "backtrace", "bytes", @@ -4119,7 +4296,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4152,8 +4329,6 @@ dependencies = [ "bytes", "futures-core", "futures-sink", - "futures-util", - "hashbrown 0.14.5", "pin-project-lite", "tokio", ] @@ -4221,9 +4396,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8437150ab6bbc8c5f0f519e3d5ed4aa883a83dd4cdd3d1b21f9482936046cb97" +checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" dependencies = [ "bitflags 2.6.0", "bytes", @@ -4276,7 +4451,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4302,22 +4477,22 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typed-builder" -version = "0.18.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77739c880e00693faef3d65ea3aad725f196da38b22fdc7ea6ded6e1ce4d3add" +checksum = "7e14ed59dc8b7b26cacb2a92bad2e8b1f098806063898ab42a3bd121d7d45e75" dependencies = [ "typed-builder-macro", ] [[package]] name = "typed-builder-macro" -version = "0.18.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f718dfaf347dcb5b983bfc87608144b0bad87970aebcbea5ce44d2a30c08e63" +checksum = "560b82d656506509d43abe30e0ba64c56b1953ab3d4fe7ba5902747a7a3cedd5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4403,22 +4578,34 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna 1.0.3", "percent-encoding", "serde", ] +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + [[package]] name = "utf8-width" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "uuid" version = "1.11.0" @@ -4468,9 +4655,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", "once_cell", @@ -4479,24 +4666,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -4506,9 +4693,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4516,28 +4703,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "wasm-streams" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -4548,9 +4735,19 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -4726,6 +4923,18 @@ dependencies = [ "memchr", ] +[[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" + [[package]] name = "xxhash-rust" version = "0.8.12" @@ -4758,6 +4967,30 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "synstructure", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -4776,7 +5009,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "synstructure", ] [[package]] @@ -4784,3 +5038,25 @@ name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[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.87", +] diff --git a/Cargo.toml b/Cargo.toml index ee4c72a..fa34605 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,14 +29,9 @@ ssr = [ "config", "tower", "tower-layer", + "reqwest","diesel-derive-newtype" ] -hydrate = [ - "leptos/hydrate", - "leptos_meta/hydrate", - "leptos_router/hydrate", - "katex/wasm-js", -] -diesel-derive-newtype = ["dep:diesel-derive-newtype"] +hydrate = ["leptos/hydrate", "katex/wasm-js", "gloo-net"] # This profile significantly speeds up build time. If debug info is needed you can comment the line # out temporarily, but make sure to leave this in the main branch. @@ -60,24 +55,28 @@ dbg_macro = "deny" unwrap_used = "deny" [dependencies] -anyhow = "1.0.89" -leptos = "0.6.15" -leptos_meta = "0.6.15" -leptos_router = "0.6.15" +anyhow = "1.0.93" +leptos = "0.7.0-rc2" +leptos_meta = "0.7.0-rc2" +leptos_router = "0.7.0-rc2" chrono = { version = "0.4.38", features = ["serde"] } env_logger = { version = "0.11.5", default-features = false } -futures = "0.3.30" +futures = "0.3.31" hex = "0.4.3" rand = "0.8.5" -serde_json = "1.0.128" +getrandom = { version = "0.2", features = ["js"] } +serde_json = "1.0.132" sha2 = "0.10.8" -uuid = { version = "1.10.0", features = ["serde"] } -serde = { version = "1.0.210", features = ["derive"] } -url = { version = "2.5.2", features = ["serde"] } -reqwest = { version = "0.12.8", features = ["json", "cookies"] } +uuid = { version = "1.11.0", features = ["serde"] } +serde = { version = "1.0.215", features = ["derive"] } +url = { version = "2.5.3", features = ["serde"] } +reqwest = { version = "0.12.9", features = [ + "json", + "cookies", +], optional = true } log = "0.4" tracing = "0.1.40" -once_cell = "1.20.1" +once_cell = "1.20.2" console_error_panic_hook = "0.1.7" time = "0.3.36" markdown-it = "0.6.1" @@ -88,14 +87,15 @@ markdown-it-heading-anchors = "0.3.0" markdown-it-footnote = "0.2.0" markdown-it-sub = "1.0.0" markdown-it-sup = "1.0.0" -leptos-use = "0.13.6" +leptos-use = "0.14.0-rc3" codee = "0.2.0" +wasm-bindgen = "=0.2.95" # backend-only features axum = { version = "0.7.7", optional = true } axum-macros = { version = "0.4.2", optional = true } axum-extra = { version = "0.9.4", features = ["cookie"], optional = true } -tokio = { version = "1.40.0", features = ["full"], optional = true } +tokio = { version = "1.41.1", features = ["full"], optional = true } tower-http = { version = "0.6.1", features = ["cors", "fs"], optional = true } activitypub_federation = { version = "0.6.0", features = [ "axum", @@ -111,15 +111,20 @@ diesel-derive-newtype = { version = "2.1.2", optional = true } diesel_migrations = { version = "2.2.0", optional = true } doku = { version = "0.21.1", optional = true } jsonwebtoken = { version = "9.3.0", optional = true } -leptos_axum = { version = "0.6.15", optional = true } +leptos_axum = { version = "0.7.0-rc2", optional = true } bcrypt = { version = "0.15.1", optional = true } diffy = { version = "0.4.0", optional = true } enum_delegate = { version = "0.2.0", optional = true } async-trait = { version = "0.1.83", optional = true } -config = { version = "0.14.0", features = ["toml"], optional = true } +config = { version = "0.14.1", features = ["toml"], optional = true } tower = { version = "0.5.1", optional = true } tower-layer = { version = "0.3.3", optional = true } console_log = "1.0.0" +send_wrapper = "0.6.0" +gloo-net = { version = "0.6.0", optional = true } +web-sys = "0.3.72" +http = "1.1.0" +serde_urlencoded = "0.7.1" [dev-dependencies] pretty_assertions = "1.4.1" diff --git a/src/backend/api/instance.rs b/src/backend/api/instance.rs index 6e04ec1..c7feaa1 100644 --- a/src/backend/api/instance.rs +++ b/src/backend/api/instance.rs @@ -1,6 +1,14 @@ use crate::{ backend::{database::IbisData, error::MyResult, federation::activities::follow::Follow}, - common::{DbInstance, FollowInstance, GetInstance, InstanceView, LocalUserView, ResolveObject}, + common::{ + DbInstance, + FollowInstance, + FollowInstanceResponse, + GetInstance, + InstanceView, + LocalUserView, + ResolveObject, + }, }; use activitypub_federation::{config::Data, fetch::object_id::ObjectId}; use axum::{extract::Query, Extension, Form, Json}; @@ -23,13 +31,13 @@ pub(in crate::backend::api) async fn follow_instance( Extension(user): Extension, data: Data, Form(query): Form, -) -> MyResult<()> { +) -> MyResult> { let target = DbInstance::read(query.id, &data)?; let pending = !target.local; DbInstance::follow(&user.person, &target, pending, &data)?; let instance = DbInstance::read(query.id, &data)?; Follow::send(user.person, &instance, &data).await?; - Ok(()) + Ok(Json(FollowInstanceResponse { success: true })) } /// Fetch a remote instance actor. This automatically synchronizes the remote articles collection to diff --git a/src/backend/assets.rs b/src/backend/assets.rs index 3bda404..7a3b78f 100644 --- a/src/backend/assets.rs +++ b/src/backend/assets.rs @@ -5,7 +5,7 @@ use axum::{ response::{IntoResponse, Response}, }; use axum_macros::debug_handler; -use leptos::LeptosOptions; +use leptos::prelude::*; use tower::ServiceExt; use tower_http::services::ServeDir; diff --git a/src/backend/mod.rs b/src/backend/mod.rs index 2b2cd12..fa1b61c 100644 --- a/src/backend/mod.rs +++ b/src/backend/mod.rs @@ -16,7 +16,7 @@ use crate::{ AUTH_COOKIE, MAIN_PAGE_NAME, }, - frontend::app::App, + frontend::app::{shell, App}, }; use activitypub_federation::{ config::{Data, FederationConfig, FederationMiddleware}, @@ -47,7 +47,7 @@ use federation::objects::{ articles_collection::local_articles_url, instance_collection::linked_instances_url, }; -use leptos::*; +use leptos::prelude::*; use leptos_axum::{generate_route_list, LeptosRoutes}; use log::info; use std::net::SocketAddr; @@ -93,7 +93,7 @@ pub async fn start(config: IbisConfig, override_hostname: Option) -> setup(&data.to_request_data()).await?; } - let leptos_options = get_configuration(Some("Cargo.toml")).await?.leptos_options; + let leptos_options = get_configuration(Some("Cargo.toml"))?.leptos_options; let mut addr = leptos_options.site_addr; if let Some(override_hostname) = override_hostname { addr = override_hostname; @@ -102,7 +102,6 @@ pub async fn start(config: IbisConfig, override_hostname: Option) -> let config = data.clone(); let app = Router::new() - //.leptos_routes(&leptos_options, routes, App) .leptos_routes_with_handler(routes, get(leptos_routes_handler)) .fallback(file_and_error_handler) .with_state(leptos_options) @@ -127,16 +126,15 @@ pub async fn start(config: IbisConfig, override_hostname: Option) -> /// Make auth token available in hydrate mode async fn leptos_routes_handler( jar: CookieJar, - State(option): State, + State(leptos_options): State, req: Request, ) -> Response { let handler = leptos_axum::render_app_async_with_context( - option.clone(), move || { let cookie = jar.get(AUTH_COOKIE).map(|c| c.value().to_string()); provide_context(Auth(cookie)); }, - move || view! { }, + move || shell(leptos_options.clone()), ); handler(req).await.into_response() diff --git a/src/common/mod.rs b/src/common/mod.rs index a7b9ae8..9042baa 100644 --- a/src/common/mod.rs +++ b/src/common/mod.rs @@ -36,7 +36,7 @@ pub struct GetArticleForm { pub id: Option, } -#[derive(Deserialize, Serialize, Clone, Default)] +#[derive(Deserialize, Serialize, Clone, Default, Debug)] pub struct ListArticlesForm { pub only_local: Option, pub instance_id: Option, @@ -128,13 +128,13 @@ impl Default for EditVersion { } } -#[derive(Deserialize, Serialize, Clone)] +#[derive(Deserialize, Serialize, Clone, Debug)] pub struct RegisterUserForm { pub username: String, pub password: String, } -#[derive(Deserialize, Serialize)] +#[derive(Deserialize, Serialize, Debug)] pub struct LoginUserForm { pub username: String, pub password: String, @@ -188,7 +188,7 @@ impl DbPerson { } } -#[derive(Deserialize, Serialize)] +#[derive(Deserialize, Serialize, Debug)] pub struct CreateArticleForm { pub title: String, pub text: String, @@ -217,19 +217,19 @@ pub struct ProtectArticleForm { pub protected: bool, } -#[derive(Deserialize, Serialize)] +#[derive(Deserialize, Serialize, Debug)] pub struct ForkArticleForm { pub article_id: ArticleId, pub new_title: String, } -#[derive(Deserialize, Serialize)] +#[derive(Deserialize, Serialize, Debug)] pub struct ApproveArticleForm { pub article_id: ArticleId, pub approve: bool, } -#[derive(Deserialize, Serialize)] +#[derive(Deserialize, Serialize, Debug)] pub struct DeleteConflictForm { pub conflict_id: ConflictId, } @@ -244,12 +244,17 @@ pub struct FollowInstance { pub id: InstanceId, } -#[derive(Deserialize, Serialize, Clone)] +#[derive(Deserialize, Serialize, Debug)] +pub struct FollowInstanceResponse { + pub success: bool, +} + +#[derive(Deserialize, Serialize, Clone, Debug)] pub struct SearchArticleForm { pub query: String, } -#[derive(Deserialize, Serialize)] +#[derive(Deserialize, Serialize, Debug)] pub struct ResolveObject { pub id: Url, } diff --git a/src/frontend/api.rs b/src/frontend/api.rs index abfc016..5687331 100644 --- a/src/frontend/api.rs +++ b/src/frontend/api.rs @@ -12,6 +12,7 @@ use crate::{ DeleteConflictForm, EditArticleForm, FollowInstance, + FollowInstanceResponse, ForkArticleForm, GetArticleForm, GetInstance, @@ -30,37 +31,36 @@ use crate::{ frontend::error::MyResult, }; use anyhow::anyhow; -use reqwest::{Client, RequestBuilder, StatusCode}; +use http::*; use serde::{Deserialize, Serialize}; -use std::sync::LazyLock; +use std::{fmt::Debug, sync::LazyLock}; use url::Url; -pub static CLIENT: LazyLock = LazyLock::new(|| ApiClient::new(Client::new(), None)); +pub static CLIENT: LazyLock = LazyLock::new(|| { + #[cfg(feature = "ssr")] + { + ApiClient::new(reqwest::Client::new(), None) + } + #[cfg(not(feature = "ssr"))] + { + ApiClient::new() + } +}); #[derive(Clone)] pub struct ApiClient { - client: Client, + #[cfg(feature = "ssr")] + client: reqwest::Client, pub hostname: String, ssl: bool, } impl ApiClient { - pub fn new(client: Client, hostname_: Option) -> Self { - let mut hostname; - let ssl; - #[cfg(not(feature = "ssr"))] - { - use leptos_use::use_document; - hostname = use_document().location().unwrap().host().unwrap(); - ssl = !cfg!(debug_assertions); - } - #[cfg(feature = "ssr")] - { - use leptos::leptos_config::get_config_from_str; - let leptos_options = get_config_from_str(include_str!("../../Cargo.toml")).unwrap(); - hostname = leptos_options.site_addr.to_string(); - ssl = false; - } + #[cfg(feature = "ssr")] + pub fn new(client: reqwest::Client, hostname_: Option) -> Self { + use leptos::config::get_config_from_str; + let leptos_options = get_config_from_str(include_str!("../../Cargo.toml")).unwrap(); + let mut hostname = leptos_options.site_addr.to_string(); // required for tests if let Some(hostname_) = hostname_ { hostname = hostname_; @@ -68,63 +68,44 @@ impl ApiClient { Self { client, hostname, - ssl, + ssl: false, } } - - async fn get_query(&self, endpoint: &str, query: Option) -> MyResult - where - T: for<'de> Deserialize<'de>, - R: Serialize, - { - let mut req = self.client.get(self.request_endpoint(endpoint)); - if let Some(query) = query { - req = req.query(&query); - } - handle_json_res::(req).await + #[cfg(not(feature = "ssr"))] + pub fn new() -> Self { + use leptos_use::use_document; + let hostname = use_document().location().unwrap().host().unwrap(); + let ssl = !cfg!(debug_assertions); + Self { hostname, ssl } } pub async fn get_article(&self, data: GetArticleForm) -> MyResult { - self.get_query("/api/v1/article", Some(data)).await + self.get("/api/v1/article", Some(data)).await } pub async fn list_articles(&self, data: ListArticlesForm) -> MyResult> { - self.get_query("/api/v1/article/list", Some(data)).await + self.get("/api/v1/article/list", Some(data)).await } pub async fn register(&self, register_form: RegisterUserForm) -> MyResult { - let req = self - .client - .post(self.request_endpoint("/api/v1/account/register")) - .form(®ister_form); - handle_json_res::(req).await + self.post("/api/v1/account/register", Some(®ister_form)) + .await } pub async fn login(&self, login_form: LoginUserForm) -> MyResult { - let req = self - .client - .post(self.request_endpoint("/api/v1/account/login")) - .form(&login_form); - handle_json_res::(req).await + self.post("/api/v1/account/login", Some(&login_form)).await } pub async fn create_article(&self, data: &CreateArticleForm) -> MyResult { - let req = self - .client - .post(self.request_endpoint("/api/v1/article")) - .form(data); - handle_json_res(req).await + self.send(Method::POST, "/api/v1/article", Some(&data)) + .await } pub async fn edit_article_with_conflict( &self, edit_form: &EditArticleForm, ) -> MyResult> { - let req = self - .client - .patch(self.request_endpoint("/api/v1/article")) - .form(edit_form); - handle_json_res(req).await + self.get("/api/v1/article", Some(&edit_form)).await } pub async fn edit_article(&self, edit_form: &EditArticleForm) -> MyResult { @@ -140,17 +121,13 @@ impl ApiClient { } pub async fn notifications_list(&self) -> MyResult> { - let req = self - .client - .get(self.request_endpoint("/api/v1/user/notifications/list")); - handle_json_res(req).await + self.get("/api/v1/user/notifications/list", None::<()>) + .await } pub async fn notifications_count(&self) -> MyResult { - let req = self - .client - .get(self.request_endpoint("/api/v1/user/notifications/count")); - handle_json_res(req).await + self.get("/api/v1/user/notifications/count", None::<()>) + .await } pub async fn approve_article(&self, article_id: ArticleId, approve: bool) -> MyResult<()> { @@ -158,36 +135,29 @@ impl ApiClient { article_id, approve, }; - let req = self - .client - .post(self.request_endpoint("/api/v1/article/approve")) - .form(&form); - handle_json_res(req).await + self.post("/api/v1/article/approve", Some(&form)).await } pub async fn delete_conflict(&self, conflict_id: ConflictId) -> MyResult<()> { let form = DeleteConflictForm { conflict_id }; - let req = self - .client - .delete(self.request_endpoint("/api/v1/conflict")) - .form(&form); - handle_json_res(req).await + self.send(Method::DELETE, "/api/v1/conflict", Some(form)) + .await } pub async fn search(&self, search_form: &SearchArticleForm) -> MyResult> { - self.get_query("/api/v1/search", Some(search_form)).await + self.get("/api/v1/search", Some(search_form)).await } pub async fn get_local_instance(&self) -> MyResult { - self.get_query("/api/v1/instance", None::).await + self.get("/api/v1/instance", None::).await } pub async fn get_instance(&self, get_form: &GetInstance) -> MyResult { - self.get_query("/api/v1/instance", Some(get_form)).await + self.get("/api/v1/instance", Some(&get_form)).await } pub async fn list_instances(&self) -> MyResult> { - self.get_query("/api/v1/instance/list", None::).await + self.get("/api/v1/instance/list", None::).await } pub async fn follow_instance_with_resolve( @@ -199,7 +169,7 @@ impl ApiClient { id: Url::parse(&format!("{}://{}", http_protocol_str(), follow_instance))?, }; let instance_resolved: DbInstance = self - .get_query("/api/v1/instance/resolve", Some(resolve_form)) + .get("/api/v1/instance/resolve", Some(resolve_form)) .await?; // send follow @@ -210,63 +180,148 @@ impl ApiClient { Ok(instance_resolved) } - pub async fn follow_instance(&self, follow_form: FollowInstance) -> MyResult<()> { - // cant use post helper because follow doesnt return json - let res = self - .client - .post(self.request_endpoint("/api/v1/instance/follow")) - .form(&follow_form) - .send() - .await?; - if res.status() == StatusCode::OK { - Ok(()) - } else { - Err(anyhow!("API error: {}", res.text().await?).into()) - } + pub async fn follow_instance( + &self, + follow_form: FollowInstance, + ) -> MyResult { + self.post("/api/v1/instance/follow", Some(follow_form)) + .await } pub async fn site(&self) -> MyResult { - let req = self.client.get(self.request_endpoint("/api/v1/site")); - handle_json_res(req).await + self.get("/api/v1/site", None::<()>).await } pub async fn logout(&self) -> MyResult<()> { - self.client - .get(self.request_endpoint("/api/v1/account/logout")) - .send() - .await?; - Ok(()) + self.get("/api/v1/account/logout", None::<()>).await } pub async fn fork_article(&self, form: &ForkArticleForm) -> MyResult { - let req = self - .client - .post(self.request_endpoint("/api/v1/article/fork")) - .form(form); - Ok(handle_json_res(req).await.unwrap()) + Ok(self.post("/api/v1/article/fork", Some(form)).await.unwrap()) } pub async fn protect_article(&self, params: &ProtectArticleForm) -> MyResult { - let req = self - .client - .post(self.request_endpoint("/api/v1/article/protect")) - .form(params); - handle_json_res(req).await + self.post("/api/v1/article/protect", Some(params)).await } pub async fn resolve_article(&self, id: Url) -> MyResult { let resolve_object = ResolveObject { id }; - self.get_query("/api/v1/article/resolve", Some(resolve_object)) + self.get("/api/v1/article/resolve", Some(resolve_object)) .await } pub async fn resolve_instance(&self, id: Url) -> MyResult { let resolve_object = ResolveObject { id }; - self.get_query("/api/v1/instance/resolve", Some(resolve_object)) + self.get("/api/v1/instance/resolve", Some(resolve_object)) .await } pub async fn get_user(&self, data: GetUserForm) -> MyResult { - self.get_query("/api/v1/user", Some(data)).await + self.get("/api/v1/user", Some(data)).await + } + + async fn get(&self, endpoint: &str, query: Option) -> MyResult + where + T: for<'de> Deserialize<'de>, + R: Serialize + Debug, + { + self.send(Method::GET, endpoint, query).await + } + + async fn post(&self, endpoint: &str, query: Option) -> MyResult + where + T: for<'de> Deserialize<'de>, + R: Serialize + Debug, + { + self.send(Method::POST, endpoint, query).await + } + + #[cfg(feature = "ssr")] + async fn send(&self, method: Method, path: &str, params: Option

) -> MyResult + where + P: Serialize + Debug, + T: for<'de> Deserialize<'de>, + { + use crate::common::{Auth, AUTH_COOKIE}; + use leptos::prelude::use_context; + use reqwest::header::HeaderName; + let mut req = self + .client + .request(method, self.request_endpoint(path)) + .query(¶ms); + let auth = use_context::(); + if let Some(Auth(Some(auth))) = auth { + req = req.header(HeaderName::from_static(AUTH_COOKIE), auth); + } + let res = req.send().await?; + let status = res.status(); + let text = res.text().await?.to_string(); + Self::response(status.into(), text) + } + + #[cfg(not(feature = "ssr"))] + fn send<'a, P, T>( + &'a self, + method: Method, + path: &'a str, + params: Option

, + ) -> impl std::future::Future> + Send + 'a + where + P: Serialize + Debug + 'a, + T: for<'de> Deserialize<'de>, + { + use gloo_net::http::*; + use leptos::prelude::on_cleanup; + use send_wrapper::SendWrapper; + use web_sys::RequestCredentials; + + SendWrapper::new(async move { + let abort_controller = SendWrapper::new(web_sys::AbortController::new().ok()); + let abort_signal = abort_controller.as_ref().map(|a| a.signal()); + + // abort in-flight requests if, e.g., we've navigated away from this page + on_cleanup(move || { + if let Some(abort_controller) = abort_controller.take() { + abort_controller.abort() + } + }); + + let path_with_endpoint = self.request_endpoint(path); + let params_encoded = serde_urlencoded::to_string(¶ms).unwrap(); + let path = if method == Method::GET { + // Cannot pass the struct directly but need to convert it manually + // https://github.com/rustwasm/gloo/issues/378 + format!("{path_with_endpoint}?{params_encoded}") + } else { + path_with_endpoint + }; + let builder = RequestBuilder::new(&path) + .method(method.clone()) + .abort_signal(abort_signal.as_ref()) + .credentials(RequestCredentials::Include); + let req = if method == Method::POST { + builder + .header("content-type", "application/x-www-form-urlencoded") + .body(params_encoded) + } else { + builder.build() + } + .unwrap(); + let res = req.send().await.unwrap(); + let status = res.status(); + let text = res.text().await.unwrap(); + Self::response(status, text) + }) + } + + fn response(status: u16, text: String) -> MyResult + where + T: for<'de> Deserialize<'de>, + { + if status == StatusCode::OK { + Ok(serde_json::from_str(&text).map_err(|e| anyhow!("Json error on {text}: {e}"))?) + } else { + Err(anyhow!("API error: {text}").into()) + } } fn request_endpoint(&self, path: &str) -> String { @@ -274,33 +329,3 @@ impl ApiClient { format!("{protocol}://{}{path}", &self.hostname) } } - -async fn handle_json_res(#[allow(unused_mut)] mut req: RequestBuilder) -> MyResult -where - T: for<'de> Deserialize<'de>, -{ - #[cfg(not(feature = "ssr"))] - { - req = req.fetch_credentials_include(); - } - - #[cfg(feature = "ssr")] - { - use crate::common::{Auth, AUTH_COOKIE}; - use leptos::use_context; - use reqwest::header::HeaderName; - - let auth = use_context::(); - if let Some(Auth(Some(auth))) = auth { - req = req.header(HeaderName::from_static(AUTH_COOKIE), auth); - } - } - let res = req.send().await?; - let status = res.status(); - let text = res.text().await?; - if status == StatusCode::OK { - Ok(serde_json::from_str(&text).map_err(|e| anyhow!("Json error on {text}: {e}"))?) - } else { - Err(anyhow!("API error: {text}").into()) - } -} diff --git a/src/frontend/app.rs b/src/frontend/app.rs index 258e197..807c804 100644 --- a/src/frontend/app.rs +++ b/src/frontend/app.rs @@ -2,7 +2,7 @@ use crate::{ common::SiteView, frontend::{ api::CLIENT, - components::nav::Nav, + components::{nav::Nav, protected_route::IbisProtectedRoute}, dark_mode::DarkMode, pages::{ article::{ @@ -23,12 +23,15 @@ use crate::{ }, }, }; -use leptos::*; +use leptos::prelude::*; use leptos_meta::{provide_meta_context, *}; -use leptos_router::{Route, Router, Routes}; +use leptos_router::{ + components::{Route, Router, Routes}, + path, +}; -pub fn site() -> Resource<(), SiteView> { - use_context::>().unwrap() +pub fn site() -> Resource { + use_context::>().unwrap() } pub fn is_logged_in() -> bool { @@ -43,11 +46,12 @@ pub fn is_admin() -> bool { }) } +// TODO: can probably get rid of this pub trait DefaultResource { fn with_default(&self, f: impl FnOnce(&T) -> O) -> O; } -impl DefaultResource for Resource<(), T> { +impl DefaultResource for Resource { fn with_default(&self, f: impl FnOnce(&T) -> O) -> O { self.with(|x| match x { Some(x) => f(x), @@ -55,46 +59,66 @@ impl DefaultResource for Resource<(), T> { }) } } +pub fn shell(options: LeptosOptions) -> impl IntoView { + view! { + + + + + + + + + + + + + + } +} #[component] pub fn App() -> impl IntoView { - // TODO: should create_resource() but then things break - let site_resource = - create_local_resource(move || (), |_| async move { CLIENT.site().await.unwrap() }); - provide_context(site_resource); provide_meta_context(); + // TODO: should Resource::new() but then things break + let site_resource = Resource::new(|| (), |_| async move { CLIENT.site().await.unwrap() }); + provide_context(site_resource); + let darkmode = DarkMode::init(); provide_context(darkmode.clone()); view! { - - + + <>