working on render server

Orual 9345aba3 d85fcef4

+3149 -1675
+1295 -1113
Cargo.lock
··· 9 9 checksum = "087113bd50d9adce24850eed5d0476c7d199d532fce8fab5173650331e09033a" 10 10 dependencies = [ 11 11 "abnf-core", 12 - "nom 7.1.3", 12 + "nom", 13 13 ] 14 14 15 15 [[package]] ··· 18 18 source = "registry+https://github.com/rust-lang/crates.io-index" 19 19 checksum = "c44e09c43ae1c368fb91a03a566472d0087c26cf7e1b9e8e289c14ede681dd7d" 20 20 dependencies = [ 21 - "nom 7.1.3", 21 + "nom", 22 22 ] 23 23 24 24 [[package]] ··· 48 48 source = "registry+https://github.com/rust-lang/crates.io-index" 49 49 checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 50 50 dependencies = [ 51 - "memchr 2.7.6", 51 + "memchr", 52 52 ] 53 53 54 54 [[package]] ··· 88 88 ] 89 89 90 90 [[package]] 91 - name = "ansi_term" 92 - version = "0.12.1" 93 - source = "registry+https://github.com/rust-lang/crates.io-index" 94 - checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 95 - dependencies = [ 96 - "winapi", 97 - ] 98 - 99 - [[package]] 100 91 name = "anstream" 101 92 version = "0.6.21" 102 93 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 147 138 ] 148 139 149 140 [[package]] 141 + name = "anyhow" 142 + version = "1.0.100" 143 + source = "registry+https://github.com/rust-lang/crates.io-index" 144 + checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" 145 + 146 + [[package]] 150 147 name = "arraydeque" 151 148 version = "0.5.1" 152 149 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 160 157 161 158 [[package]] 162 159 name = "ashpd" 163 - version = "0.8.1" 160 + version = "0.11.0" 164 161 source = "registry+https://github.com/rust-lang/crates.io-index" 165 - checksum = "dd884d7c72877a94102c3715f3b1cd09ff4fac28221add3e57cfbe25c236d093" 162 + checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df" 166 163 dependencies = [ 167 164 "enumflags2", 168 165 "futures-channel", 169 166 "futures-util", 170 - "rand 0.8.5", 167 + "rand 0.9.2", 168 + "raw-window-handle 0.6.2", 171 169 "serde", 172 170 "serde_repr", 173 171 "tokio", 174 172 "url", 173 + "wayland-backend", 174 + "wayland-client", 175 + "wayland-protocols", 175 176 "zbus", 176 177 ] 178 + 179 + [[package]] 180 + name = "askama_escape" 181 + version = "0.13.0" 182 + source = "registry+https://github.com/rust-lang/crates.io-index" 183 + checksum = "3df27b8d5ddb458c5fb1bbc1ce172d4a38c614a97d550b0ac89003897fb01de4" 177 184 178 185 [[package]] 179 186 name = "async-broadcast" ··· 188 195 ] 189 196 190 197 [[package]] 191 - name = "async-channel" 192 - version = "2.5.0" 193 - source = "registry+https://github.com/rust-lang/crates.io-index" 194 - checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" 195 - dependencies = [ 196 - "concurrent-queue", 197 - "event-listener-strategy", 198 - "futures-core", 199 - "pin-project-lite", 200 - ] 201 - 202 - [[package]] 203 198 name = "async-compression" 204 199 version = "0.4.32" 205 200 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 213 208 ] 214 209 215 210 [[package]] 216 - name = "async-io" 217 - version = "2.6.0" 218 - source = "registry+https://github.com/rust-lang/crates.io-index" 219 - checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" 220 - dependencies = [ 221 - "autocfg", 222 - "cfg-if 1.0.4", 223 - "concurrent-queue", 224 - "futures-io", 225 - "futures-lite", 226 - "parking", 227 - "polling", 228 - "rustix", 229 - "slab", 230 - "windows-sys 0.61.2", 231 - ] 232 - 233 - [[package]] 234 211 name = "async-lock" 235 212 version = "3.4.1" 236 213 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 242 219 ] 243 220 244 221 [[package]] 245 - name = "async-process" 246 - version = "2.5.0" 247 - source = "registry+https://github.com/rust-lang/crates.io-index" 248 - checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" 249 - dependencies = [ 250 - "async-channel", 251 - "async-io", 252 - "async-lock", 253 - "async-signal", 254 - "async-task", 255 - "blocking", 256 - "cfg-if 1.0.4", 257 - "event-listener", 258 - "futures-lite", 259 - "rustix", 260 - ] 261 - 262 - [[package]] 263 222 name = "async-recursion" 264 223 version = "1.1.1" 265 224 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 271 230 ] 272 231 273 232 [[package]] 274 - name = "async-signal" 275 - version = "0.2.13" 233 + name = "async-stream" 234 + version = "0.3.6" 276 235 source = "registry+https://github.com/rust-lang/crates.io-index" 277 - checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" 236 + checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" 278 237 dependencies = [ 279 - "async-io", 280 - "async-lock", 281 - "atomic-waker", 282 - "cfg-if 1.0.4", 238 + "async-stream-impl", 283 239 "futures-core", 284 - "futures-io", 285 - "rustix", 286 - "signal-hook-registry", 287 - "slab", 288 - "windows-sys 0.61.2", 240 + "pin-project-lite", 289 241 ] 290 242 291 243 [[package]] 292 - name = "async-task" 293 - version = "4.7.1" 244 + name = "async-stream-impl" 245 + version = "0.3.6" 294 246 source = "registry+https://github.com/rust-lang/crates.io-index" 295 - checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 247 + checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" 248 + dependencies = [ 249 + "proc-macro2", 250 + "quote", 251 + "syn 2.0.108", 252 + ] 296 253 297 254 [[package]] 298 255 name = "async-trait" ··· 306 263 ] 307 264 308 265 [[package]] 266 + name = "async-tungstenite" 267 + version = "0.31.0" 268 + source = "registry+https://github.com/rust-lang/crates.io-index" 269 + checksum = "ee88b4c88ac8c9ea446ad43498955750a4bbe64c4392f21ccfe5d952865e318f" 270 + dependencies = [ 271 + "atomic-waker", 272 + "futures-core", 273 + "futures-io", 274 + "futures-task", 275 + "futures-util", 276 + "log", 277 + "pin-project-lite", 278 + "tungstenite 0.27.0", 279 + ] 280 + 281 + [[package]] 309 282 name = "atk" 310 283 version = "0.18.2" 311 284 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 335 308 checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 336 309 337 310 [[package]] 338 - name = "atty" 339 - version = "0.2.14" 340 - source = "registry+https://github.com/rust-lang/crates.io-index" 341 - checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 342 - dependencies = [ 343 - "hermit-abi 0.1.19", 344 - "libc", 345 - "winapi", 346 - ] 347 - 348 - [[package]] 349 311 name = "autocfg" 350 312 version = "1.5.0" 351 313 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 358 320 checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" 359 321 dependencies = [ 360 322 "axum-core", 323 + "axum-macros", 324 + "base64 0.22.1", 361 325 "bytes", 362 326 "form_urlencoded", 363 327 "futures-util", ··· 366 330 "http-body-util", 367 331 "hyper", 368 332 "hyper-util", 369 - "itoa 1.0.15", 333 + "itoa", 370 334 "matchit", 371 - "memchr 2.7.6", 335 + "memchr", 372 336 "mime", 337 + "multer", 373 338 "percent-encoding", 374 339 "pin-project-lite", 375 340 "serde_core", 376 341 "serde_json", 377 342 "serde_path_to_error", 378 343 "serde_urlencoded", 344 + "sha1", 379 345 "sync_wrapper", 380 346 "tokio", 347 + "tokio-tungstenite 0.28.0", 381 348 "tower", 382 349 "tower-layer", 383 350 "tower-service", ··· 404 371 ] 405 372 406 373 [[package]] 374 + name = "axum-extra" 375 + version = "0.10.3" 376 + source = "registry+https://github.com/rust-lang/crates.io-index" 377 + checksum = "9963ff19f40c6102c76756ef0a46004c0d58957d87259fc9208ff8441c12ab96" 378 + dependencies = [ 379 + "axum", 380 + "axum-core", 381 + "bytes", 382 + "futures-util", 383 + "headers", 384 + "http", 385 + "http-body", 386 + "http-body-util", 387 + "mime", 388 + "pin-project-lite", 389 + "rustversion", 390 + "serde_core", 391 + "tower-layer", 392 + "tower-service", 393 + "tracing", 394 + ] 395 + 396 + [[package]] 397 + name = "axum-macros" 398 + version = "0.5.0" 399 + source = "registry+https://github.com/rust-lang/crates.io-index" 400 + checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c" 401 + dependencies = [ 402 + "proc-macro2", 403 + "quote", 404 + "syn 2.0.108", 405 + ] 406 + 407 + [[package]] 407 408 name = "backtrace" 408 409 version = "0.3.76" 409 410 source = "registry+https://github.com/rust-lang/crates.io-index" 410 411 checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" 411 412 dependencies = [ 412 413 "addr2line", 413 - "cfg-if 1.0.4", 414 + "cfg-if", 414 415 "libc", 415 416 "miniz_oxide", 416 417 "object", ··· 434 435 checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" 435 436 436 437 [[package]] 438 + name = "base16" 439 + version = "0.2.1" 440 + source = "registry+https://github.com/rust-lang/crates.io-index" 441 + checksum = "d27c3610c36aee21ce8ac510e6224498de4228ad772a171ed65643a24693a5a8" 442 + 443 + [[package]] 437 444 name = "base16ct" 438 445 version = "0.2.0" 439 446 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 445 452 source = "registry+https://github.com/rust-lang/crates.io-index" 446 453 checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" 447 454 dependencies = [ 448 - "const-str", 455 + "const-str 0.4.3", 449 456 "match-lookup", 450 457 ] 451 458 ··· 523 530 524 531 [[package]] 525 532 name = "block2" 526 - version = "0.5.1" 527 - source = "registry+https://github.com/rust-lang/crates.io-index" 528 - checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" 529 - dependencies = [ 530 - "objc2 0.5.2", 531 - ] 532 - 533 - [[package]] 534 - name = "block2" 535 533 version = "0.6.2" 536 534 source = "registry+https://github.com/rust-lang/crates.io-index" 537 535 checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" 538 536 dependencies = [ 539 - "objc2 0.6.3", 540 - ] 541 - 542 - [[package]] 543 - name = "blocking" 544 - version = "1.6.2" 545 - source = "registry+https://github.com/rust-lang/crates.io-index" 546 - checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" 547 - dependencies = [ 548 - "async-channel", 549 - "async-task", 550 - "futures-io", 551 - "futures-lite", 552 - "piper", 537 + "objc2", 553 538 ] 554 539 555 540 [[package]] ··· 619 604 source = "registry+https://github.com/rust-lang/crates.io-index" 620 605 checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" 621 606 dependencies = [ 622 - "memchr 2.7.6", 607 + "memchr", 623 608 "serde", 624 609 ] 625 610 ··· 653 638 source = "registry+https://github.com/rust-lang/crates.io-index" 654 639 checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" 655 640 dependencies = [ 656 - "memchr 2.7.6", 641 + "memchr", 657 642 "safemem", 658 643 ] 659 644 ··· 664 649 checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 665 650 666 651 [[package]] 652 + name = "bytecount" 653 + version = "0.6.9" 654 + source = "registry+https://github.com/rust-lang/crates.io-index" 655 + checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" 656 + 657 + [[package]] 667 658 name = "byteorder" 668 659 version = "1.5.0" 669 660 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 704 695 ] 705 696 706 697 [[package]] 698 + name = "camino" 699 + version = "1.2.1" 700 + source = "registry+https://github.com/rust-lang/crates.io-index" 701 + checksum = "276a59bf2b2c967788139340c9f0c5b12d7fd6630315c15c217e559de85d2609" 702 + dependencies = [ 703 + "serde_core", 704 + ] 705 + 706 + [[package]] 707 + name = "cargo-platform" 708 + version = "0.1.9" 709 + source = "registry+https://github.com/rust-lang/crates.io-index" 710 + checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" 711 + dependencies = [ 712 + "serde", 713 + ] 714 + 715 + [[package]] 716 + name = "cargo_metadata" 717 + version = "0.14.2" 718 + source = "registry+https://github.com/rust-lang/crates.io-index" 719 + checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" 720 + dependencies = [ 721 + "camino", 722 + "cargo-platform", 723 + "semver", 724 + "serde", 725 + "serde_json", 726 + ] 727 + 728 + [[package]] 707 729 name = "cbor4ii" 708 730 version = "0.2.14" 709 731 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 759 781 "smallvec", 760 782 "target-lexicon", 761 783 ] 762 - 763 - [[package]] 764 - name = "cfg-if" 765 - version = "0.1.10" 766 - source = "registry+https://github.com/rust-lang/crates.io-index" 767 - checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 768 784 769 785 [[package]] 770 786 name = "cfg-if" ··· 779 795 checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 780 796 781 797 [[package]] 798 + name = "charset" 799 + version = "0.1.5" 800 + source = "registry+https://github.com/rust-lang/crates.io-index" 801 + checksum = "f1f927b07c74ba84c7e5fe4db2baeb3e996ab2688992e39ac68ce3220a677c7e" 802 + dependencies = [ 803 + "base64 0.22.1", 804 + "encoding_rs", 805 + ] 806 + 807 + [[package]] 782 808 name = "chrono" 783 809 version = "0.4.42" 784 810 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 822 848 checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" 823 849 dependencies = [ 824 850 "ciborium-io", 825 - "half 2.7.1", 851 + "half", 826 852 ] 827 853 828 854 [[package]] ··· 841 867 842 868 [[package]] 843 869 name = "clap" 844 - version = "2.34.0" 845 - source = "registry+https://github.com/rust-lang/crates.io-index" 846 - checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" 847 - dependencies = [ 848 - "ansi_term", 849 - "atty", 850 - "bitflags 1.3.2", 851 - "strsim 0.8.0", 852 - "textwrap 0.11.0", 853 - "unicode-width 0.1.14", 854 - "vec_map", 855 - ] 856 - 857 - [[package]] 858 - name = "clap" 859 870 version = "4.5.51" 860 871 source = "registry+https://github.com/rust-lang/crates.io-index" 861 872 checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" ··· 873 884 "anstream", 874 885 "anstyle", 875 886 "clap_lex", 876 - "strsim 0.11.1", 887 + "strsim", 877 888 "unicase", 878 889 "unicode-width 0.2.2", 879 890 ] ··· 897 908 checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" 898 909 899 910 [[package]] 900 - name = "cloudabi" 901 - version = "0.0.3" 902 - source = "registry+https://github.com/rust-lang/crates.io-index" 903 - checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 904 - dependencies = [ 905 - "bitflags 1.3.2", 906 - ] 907 - 908 - [[package]] 909 - name = "cocoa" 910 - version = "0.25.0" 911 - source = "registry+https://github.com/rust-lang/crates.io-index" 912 - checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" 913 - dependencies = [ 914 - "bitflags 1.3.2", 915 - "block", 916 - "cocoa-foundation 0.1.2", 917 - "core-foundation 0.9.4", 918 - "core-graphics 0.23.2", 919 - "foreign-types 0.5.0", 920 - "libc", 921 - "objc", 922 - ] 923 - 924 - [[package]] 925 911 name = "cocoa" 926 912 version = "0.26.1" 927 913 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 929 915 dependencies = [ 930 916 "bitflags 2.10.0", 931 917 "block", 932 - "cocoa-foundation 0.2.1", 918 + "cocoa-foundation", 933 919 "core-foundation 0.10.1", 934 - "core-graphics 0.24.0", 920 + "core-graphics", 935 921 "foreign-types 0.5.0", 936 922 "libc", 937 923 "objc", ··· 939 925 940 926 [[package]] 941 927 name = "cocoa-foundation" 942 - version = "0.1.2" 943 - source = "registry+https://github.com/rust-lang/crates.io-index" 944 - checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" 945 - dependencies = [ 946 - "bitflags 1.3.2", 947 - "block", 948 - "core-foundation 0.9.4", 949 - "core-graphics-types 0.1.3", 950 - "libc", 951 - "objc", 952 - ] 953 - 954 - [[package]] 955 - name = "cocoa-foundation" 956 928 version = "0.2.1" 957 929 source = "registry+https://github.com/rust-lang/crates.io-index" 958 930 checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" ··· 960 932 "bitflags 2.10.0", 961 933 "block", 962 934 "core-foundation 0.10.1", 963 - "core-graphics-types 0.2.0", 935 + "core-graphics-types", 964 936 "objc", 965 937 ] 966 938 ··· 977 949 checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 978 950 dependencies = [ 979 951 "bytes", 980 - "memchr 2.7.6", 952 + "memchr", 981 953 ] 982 954 983 955 [[package]] ··· 998 970 dependencies = [ 999 971 "compression-core", 1000 972 "flate2", 1001 - "memchr 2.7.6", 973 + "memchr", 1002 974 ] 1003 975 1004 976 [[package]] ··· 1029 1001 ] 1030 1002 1031 1003 [[package]] 1032 - name = "console_error_panic_hook" 1033 - version = "0.1.7" 1034 - source = "registry+https://github.com/rust-lang/crates.io-index" 1035 - checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 1036 - dependencies = [ 1037 - "cfg-if 1.0.4", 1038 - "wasm-bindgen", 1039 - ] 1040 - 1041 - [[package]] 1042 1004 name = "const-oid" 1043 1005 version = "0.9.6" 1044 1006 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1046 1008 1047 1009 [[package]] 1048 1010 name = "const-serialize" 1049 - version = "0.6.2" 1011 + version = "0.7.0" 1050 1012 source = "registry+https://github.com/rust-lang/crates.io-index" 1051 - checksum = "08259976d62c715c4826cb4a3d64a3a9e5c5f68f964ff6087319857f569f93a6" 1013 + checksum = "4b4acbf274e71b0a53ff15f8669b86df421586a9fcac6398bc374c0b7146b6a3" 1052 1014 dependencies = [ 1053 1015 "const-serialize-macro", 1054 1016 "serde", ··· 1056 1018 1057 1019 [[package]] 1058 1020 name = "const-serialize-macro" 1059 - version = "0.6.2" 1021 + version = "0.7.0" 1060 1022 source = "registry+https://github.com/rust-lang/crates.io-index" 1061 - checksum = "04382d0d9df7434af6b1b49ea1a026ef39df1b0738b1cc373368cf175354f6eb" 1023 + checksum = "b2d3f3be18d39289c06c906cb7fb7ea1f027607ac5fa0cb0c4f1e91719042c52" 1062 1024 dependencies = [ 1063 1025 "proc-macro2", 1064 1026 "quote", ··· 1070 1032 version = "0.4.3" 1071 1033 source = "registry+https://github.com/rust-lang/crates.io-index" 1072 1034 checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" 1035 + 1036 + [[package]] 1037 + name = "const-str" 1038 + version = "0.7.0" 1039 + source = "registry+https://github.com/rust-lang/crates.io-index" 1040 + checksum = "f4d34b8f066904ed7cfa4a6f9ee96c3214aa998cb44b69ca20bd2054f47402ed" 1073 1041 1074 1042 [[package]] 1075 1043 name = "const_format" ··· 1092 1060 ] 1093 1061 1094 1062 [[package]] 1063 + name = "content_disposition" 1064 + version = "0.4.0" 1065 + source = "registry+https://github.com/rust-lang/crates.io-index" 1066 + checksum = "ebc14a88e1463ddd193906285abe5c360c7e8564e05ccc5d501755f7fbc9ca9c" 1067 + dependencies = [ 1068 + "charset", 1069 + ] 1070 + 1071 + [[package]] 1095 1072 name = "convert_case" 1096 1073 version = "0.4.0" 1097 1074 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1099 1076 1100 1077 [[package]] 1101 1078 name = "convert_case" 1102 - version = "0.6.0" 1079 + version = "0.8.0" 1103 1080 source = "registry+https://github.com/rust-lang/crates.io-index" 1104 - checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" 1081 + checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" 1105 1082 dependencies = [ 1106 1083 "unicode-segmentation", 1107 1084 ] ··· 1118 1095 ] 1119 1096 1120 1097 [[package]] 1098 + name = "cookie_store" 1099 + version = "0.21.1" 1100 + source = "registry+https://github.com/rust-lang/crates.io-index" 1101 + checksum = "2eac901828f88a5241ee0600950ab981148a18f2f756900ffba1b125ca6a3ef9" 1102 + dependencies = [ 1103 + "cookie", 1104 + "document-features", 1105 + "idna", 1106 + "log", 1107 + "publicsuffix", 1108 + "serde", 1109 + "serde_derive", 1110 + "serde_json", 1111 + "time", 1112 + "url", 1113 + ] 1114 + 1115 + [[package]] 1121 1116 name = "cordyceps" 1122 1117 version = "0.3.4" 1123 1118 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1155 1150 1156 1151 [[package]] 1157 1152 name = "core-graphics" 1158 - version = "0.23.2" 1159 - source = "registry+https://github.com/rust-lang/crates.io-index" 1160 - checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" 1161 - dependencies = [ 1162 - "bitflags 1.3.2", 1163 - "core-foundation 0.9.4", 1164 - "core-graphics-types 0.1.3", 1165 - "foreign-types 0.5.0", 1166 - "libc", 1167 - ] 1168 - 1169 - [[package]] 1170 - name = "core-graphics" 1171 1153 version = "0.24.0" 1172 1154 source = "registry+https://github.com/rust-lang/crates.io-index" 1173 1155 checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" 1174 1156 dependencies = [ 1175 1157 "bitflags 2.10.0", 1176 1158 "core-foundation 0.10.1", 1177 - "core-graphics-types 0.2.0", 1159 + "core-graphics-types", 1178 1160 "foreign-types 0.5.0", 1179 1161 "libc", 1180 1162 ] 1181 1163 1182 1164 [[package]] 1183 1165 name = "core-graphics-types" 1184 - version = "0.1.3" 1185 - source = "registry+https://github.com/rust-lang/crates.io-index" 1186 - checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" 1187 - dependencies = [ 1188 - "bitflags 1.3.2", 1189 - "core-foundation 0.9.4", 1190 - "libc", 1191 - ] 1192 - 1193 - [[package]] 1194 - name = "core-graphics-types" 1195 1166 version = "0.2.0" 1196 1167 source = "registry+https://github.com/rust-lang/crates.io-index" 1197 1168 checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" ··· 1207 1178 source = "registry+https://github.com/rust-lang/crates.io-index" 1208 1179 checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" 1209 1180 dependencies = [ 1210 - "memchr 2.7.6", 1181 + "memchr", 1211 1182 ] 1212 1183 1213 1184 [[package]] ··· 1225 1196 source = "registry+https://github.com/rust-lang/crates.io-index" 1226 1197 checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 1227 1198 dependencies = [ 1228 - "cfg-if 1.0.4", 1199 + "cfg-if", 1229 1200 ] 1230 1201 1231 1202 [[package]] ··· 1292 1263 1293 1264 [[package]] 1294 1265 name = "cssparser" 1295 - version = "0.27.2" 1266 + version = "0.29.6" 1296 1267 source = "registry+https://github.com/rust-lang/crates.io-index" 1297 - checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" 1268 + checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" 1298 1269 dependencies = [ 1299 1270 "cssparser-macros", 1300 1271 "dtoa-short", 1301 - "itoa 0.4.8", 1272 + "itoa", 1302 1273 "matches", 1303 - "phf 0.8.0", 1274 + "phf 0.10.1", 1304 1275 "proc-macro2", 1305 1276 "quote", 1306 1277 "smallvec", ··· 1323 1294 source = "registry+https://github.com/rust-lang/crates.io-index" 1324 1295 checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" 1325 1296 dependencies = [ 1326 - "cfg-if 1.0.4", 1297 + "cfg-if", 1327 1298 "cpufeatures", 1328 1299 "curve25519-dalek-derive", 1329 1300 "digest", ··· 1374 1345 "ident_case", 1375 1346 "proc-macro2", 1376 1347 "quote", 1377 - "strsim 0.11.1", 1348 + "strsim", 1378 1349 "syn 2.0.108", 1379 1350 ] 1380 1351 ··· 1388 1359 "ident_case", 1389 1360 "proc-macro2", 1390 1361 "quote", 1391 - "strsim 0.11.1", 1362 + "strsim", 1392 1363 "syn 2.0.108", 1393 1364 ] 1394 1365 ··· 1420 1391 source = "registry+https://github.com/rust-lang/crates.io-index" 1421 1392 checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" 1422 1393 dependencies = [ 1423 - "cfg-if 1.0.4", 1394 + "cfg-if", 1424 1395 "hashbrown 0.14.5", 1425 - "lock_api 0.4.14", 1396 + "lock_api", 1426 1397 "once_cell", 1427 - "parking_lot_core 0.9.12", 1398 + "parking_lot_core", 1428 1399 ] 1429 1400 1430 1401 [[package]] ··· 1433 1404 source = "registry+https://github.com/rust-lang/crates.io-index" 1434 1405 checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" 1435 1406 dependencies = [ 1436 - "cfg-if 1.0.4", 1407 + "cfg-if", 1437 1408 "crossbeam-utils", 1438 1409 "hashbrown 0.14.5", 1439 - "lock_api 0.4.14", 1410 + "lock_api", 1440 1411 "once_cell", 1441 - "parking_lot_core 0.9.12", 1412 + "parking_lot_core", 1442 1413 ] 1443 1414 1444 1415 [[package]] ··· 1535 1506 source = "registry+https://github.com/rust-lang/crates.io-index" 1536 1507 checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" 1537 1508 dependencies = [ 1538 - "derive_more-impl", 1509 + "derive_more-impl 1.0.0", 1510 + ] 1511 + 1512 + [[package]] 1513 + name = "derive_more" 1514 + version = "2.0.1" 1515 + source = "registry+https://github.com/rust-lang/crates.io-index" 1516 + checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" 1517 + dependencies = [ 1518 + "derive_more-impl 2.0.1", 1539 1519 ] 1540 1520 1541 1521 [[package]] ··· 1551 1531 ] 1552 1532 1553 1533 [[package]] 1534 + name = "derive_more-impl" 1535 + version = "2.0.1" 1536 + source = "registry+https://github.com/rust-lang/crates.io-index" 1537 + checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" 1538 + dependencies = [ 1539 + "proc-macro2", 1540 + "quote", 1541 + "syn 2.0.108", 1542 + "unicode-xid", 1543 + ] 1544 + 1545 + [[package]] 1554 1546 name = "diatomic-waker" 1555 1547 version = "0.2.3" 1556 1548 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1566 1558 "byteorder", 1567 1559 "chrono", 1568 1560 "diesel_derives", 1569 - "itoa 1.0.15", 1561 + "itoa", 1570 1562 "libsqlite3-sys", 1571 1563 "pq-sys", 1572 1564 "serde_json", ··· 1635 1627 1636 1628 [[package]] 1637 1629 name = "dioxus" 1638 - version = "0.6.3" 1630 + version = "0.7.0" 1639 1631 source = "registry+https://github.com/rust-lang/crates.io-index" 1640 - checksum = "60a247114500f1a78e87022defa8173de847accfada8e8809dfae23a118a580c" 1632 + checksum = "9361dcb0cacb57f8af31010e1a3503404415ce5ff33dd83c760dfdcf505aded9" 1641 1633 dependencies = [ 1634 + "dioxus-asset-resolver", 1642 1635 "dioxus-cli-config", 1643 1636 "dioxus-config-macro", 1637 + "dioxus-config-macros", 1644 1638 "dioxus-core", 1645 1639 "dioxus-core-macro", 1646 1640 "dioxus-desktop", 1647 1641 "dioxus-devtools", 1648 1642 "dioxus-document", 1649 1643 "dioxus-fullstack", 1644 + "dioxus-fullstack-macro", 1650 1645 "dioxus-history", 1651 1646 "dioxus-hooks", 1652 1647 "dioxus-html", 1648 + "dioxus-liveview", 1653 1649 "dioxus-logger", 1654 - "dioxus-mobile", 1655 1650 "dioxus-router", 1651 + "dioxus-server", 1656 1652 "dioxus-signals", 1653 + "dioxus-ssr", 1654 + "dioxus-stores", 1657 1655 "dioxus-web", 1658 1656 "manganis", 1659 1657 "serde", 1658 + "subsecond", 1660 1659 "warnings", 1661 1660 ] 1662 1661 1663 1662 [[package]] 1663 + name = "dioxus-asset-resolver" 1664 + version = "0.7.0" 1665 + source = "registry+https://github.com/rust-lang/crates.io-index" 1666 + checksum = "954badc855b8e61d8880d204c7e3e2570daa59302c3843b2de1fae30ec266e64" 1667 + dependencies = [ 1668 + "dioxus-cli-config", 1669 + "http", 1670 + "infer", 1671 + "jni", 1672 + "js-sys", 1673 + "ndk", 1674 + "ndk-context", 1675 + "ndk-sys", 1676 + "percent-encoding", 1677 + "thiserror 2.0.17", 1678 + "tokio", 1679 + "wasm-bindgen-futures", 1680 + "web-sys", 1681 + ] 1682 + 1683 + [[package]] 1664 1684 name = "dioxus-cli-config" 1665 - version = "0.6.3" 1685 + version = "0.7.0" 1666 1686 source = "registry+https://github.com/rust-lang/crates.io-index" 1667 - checksum = "cdd16948f1ffdb068dd9a64812158073a4250e2af4e98ea31fdac0312e6bce86" 1687 + checksum = "d28a6973d779e73f4b8ce705b1ea4c96f4083567ede862e734da2ab7c1dfc4b6" 1668 1688 dependencies = [ 1669 1689 "wasm-bindgen", 1670 1690 ] 1671 1691 1672 1692 [[package]] 1673 1693 name = "dioxus-config-macro" 1674 - version = "0.6.2" 1694 + version = "0.7.0" 1675 1695 source = "registry+https://github.com/rust-lang/crates.io-index" 1676 - checksum = "75cbf582fbb1c32d34a1042ea675469065574109c95154468710a4d73ee98b49" 1696 + checksum = "b9b5a9360dbf7a8499f67a96b8408f0c4d45222b0f19d7e42a7c49030b1a4085" 1677 1697 dependencies = [ 1678 1698 "proc-macro2", 1679 1699 "quote", 1680 1700 ] 1681 1701 1682 1702 [[package]] 1703 + name = "dioxus-config-macros" 1704 + version = "0.7.0" 1705 + source = "registry+https://github.com/rust-lang/crates.io-index" 1706 + checksum = "060c2e384709a434a74d24a676f4ccd61e7a97f812b0807fa71a8ef8896cfd3b" 1707 + 1708 + [[package]] 1683 1709 name = "dioxus-core" 1684 - version = "0.6.3" 1710 + version = "0.7.0" 1685 1711 source = "registry+https://github.com/rust-lang/crates.io-index" 1686 - checksum = "9c03f451a119e47433c16e2d8eb5b15bf7d6e6734eb1a4c47574e6711dadff8d" 1712 + checksum = "743e05cc98a6c7189e7df49791c0affb860cb858ba2a19dde4ecadf2a8729e8c" 1687 1713 dependencies = [ 1714 + "anyhow", 1688 1715 "const_format", 1689 1716 "dioxus-core-types", 1690 1717 "futures-channel", 1691 1718 "futures-util", 1692 1719 "generational-box", 1693 1720 "longest-increasing-subsequence", 1694 - "rustc-hash 1.1.0", 1721 + "rustc-hash 2.1.1", 1695 1722 "rustversion", 1696 1723 "serde", 1697 1724 "slab", 1698 1725 "slotmap", 1726 + "subsecond", 1699 1727 "tracing", 1700 1728 "warnings", 1701 1729 ] 1702 1730 1703 1731 [[package]] 1704 1732 name = "dioxus-core-macro" 1705 - version = "0.6.3" 1733 + version = "0.7.0" 1706 1734 source = "registry+https://github.com/rust-lang/crates.io-index" 1707 - checksum = "105c954caaaedf8cd10f3d1ba576b01e18aa8d33ad435182125eefe488cf0064" 1735 + checksum = "fa557c3d165eb2df73414f4678912e4595de80d6cd13566a3377f16c438c5ec3" 1708 1736 dependencies = [ 1709 - "convert_case 0.6.0", 1737 + "convert_case 0.8.0", 1710 1738 "dioxus-rsx", 1711 1739 "proc-macro2", 1712 1740 "quote", ··· 1715 1743 1716 1744 [[package]] 1717 1745 name = "dioxus-core-types" 1718 - version = "0.6.2" 1746 + version = "0.7.0" 1719 1747 source = "registry+https://github.com/rust-lang/crates.io-index" 1720 - checksum = "91a82fccfa48574eb7aa183e297769540904694844598433a9eb55896ad9f93b" 1721 - dependencies = [ 1722 - "once_cell", 1723 - ] 1748 + checksum = "6d16343cebee52e82686963ccd6f5590ebca567229bfa59aa3d598210f3a9fc0" 1724 1749 1725 1750 [[package]] 1726 1751 name = "dioxus-desktop" 1727 - version = "0.6.3" 1752 + version = "0.7.0" 1728 1753 source = "registry+https://github.com/rust-lang/crates.io-index" 1729 - checksum = "b5b0cca3e7a10a4a3df37ea52c4cc7a53e5c9233489e03ee3f2829471fc3099a" 1754 + checksum = "4dfcfa2ae65f643a05583acb27e5a52b22de52b2f49583d012c8e58b6c495941" 1730 1755 dependencies = [ 1731 1756 "async-trait", 1732 1757 "base64 0.22.1", 1733 - "cocoa 0.25.0", 1734 - "core-foundation 0.9.4", 1758 + "bytes", 1759 + "cocoa", 1760 + "core-foundation 0.10.1", 1761 + "dioxus-asset-resolver", 1735 1762 "dioxus-cli-config", 1736 1763 "dioxus-core", 1737 1764 "dioxus-devtools", ··· 1748 1775 "global-hotkey", 1749 1776 "infer", 1750 1777 "jni", 1751 - "lazy-js-bundle", 1752 - "muda 0.11.5", 1778 + "lazy-js-bundle 0.7.0", 1779 + "libc", 1780 + "muda", 1753 1781 "ndk", 1754 1782 "ndk-context", 1755 1783 "ndk-sys", 1756 1784 "objc", 1757 1785 "objc_id", 1758 - "once_cell", 1786 + "percent-encoding", 1787 + "rand 0.9.2", 1759 1788 "rfd", 1760 - "rustc-hash 1.1.0", 1789 + "rustc-hash 2.1.1", 1761 1790 "serde", 1762 1791 "serde_json", 1763 1792 "signal-hook", 1764 1793 "slab", 1794 + "subtle", 1765 1795 "tao", 1766 - "thiserror 1.0.69", 1796 + "thiserror 2.0.17", 1767 1797 "tokio", 1768 1798 "tracing", 1769 1799 "tray-icon", 1770 - "urlencoding", 1771 - "webbrowser", 1800 + "tungstenite 0.27.0", 1801 + "webbrowser 1.0.6", 1772 1802 "wry", 1773 1803 ] 1774 1804 1775 1805 [[package]] 1776 1806 name = "dioxus-devtools" 1777 - version = "0.6.2" 1807 + version = "0.7.0" 1778 1808 source = "registry+https://github.com/rust-lang/crates.io-index" 1779 - checksum = "712a7300f1e8181218187b03502044157eef04e0a25b518117c5ef9ae1096880" 1809 + checksum = "419353dace2fb67ac7b35070a56c00a66c920c0191e7a81cf9c9ac8dd7ab3798" 1780 1810 dependencies = [ 1811 + "dioxus-cli-config", 1781 1812 "dioxus-core", 1782 1813 "dioxus-devtools-types", 1783 1814 "dioxus-signals", 1815 + "futures-channel", 1816 + "futures-util", 1784 1817 "serde", 1785 1818 "serde_json", 1819 + "subsecond", 1820 + "thiserror 2.0.17", 1786 1821 "tracing", 1787 - "tungstenite 0.23.0", 1822 + "tungstenite 0.27.0", 1788 1823 "warnings", 1789 1824 ] 1790 1825 1791 1826 [[package]] 1792 1827 name = "dioxus-devtools-types" 1793 - version = "0.6.2" 1828 + version = "0.7.0" 1794 1829 source = "registry+https://github.com/rust-lang/crates.io-index" 1795 - checksum = "f62434973c0c9c5a3bc42e9cd5e7070401c2062a437fb5528f318c3e42ebf4ff" 1830 + checksum = "e6eb8755823ca644da88a50e80676330f4f0c1a40650af03d2fd617d3478a8e7" 1796 1831 dependencies = [ 1797 1832 "dioxus-core", 1798 1833 "serde", 1834 + "subsecond-types", 1799 1835 ] 1800 1836 1801 1837 [[package]] 1802 1838 name = "dioxus-document" 1803 - version = "0.6.3" 1839 + version = "0.7.0" 1804 1840 source = "registry+https://github.com/rust-lang/crates.io-index" 1805 - checksum = "802a2014d1662b6615eec0a275745822ee4fc66aacd9d0f2fb33d6c8da79b8f2" 1841 + checksum = "94cc73e120c260a07689353b09b8fdb0c49960fb88ba8e669992245c80720bb6" 1806 1842 dependencies = [ 1807 1843 "dioxus-core", 1808 1844 "dioxus-core-macro", ··· 1811 1847 "futures-channel", 1812 1848 "futures-util", 1813 1849 "generational-box", 1814 - "lazy-js-bundle", 1850 + "lazy-js-bundle 0.7.0", 1815 1851 "serde", 1816 1852 "serde_json", 1817 1853 "tracing", ··· 1819 1855 1820 1856 [[package]] 1821 1857 name = "dioxus-fullstack" 1822 - version = "0.6.3" 1858 + version = "0.7.0" 1823 1859 source = "registry+https://github.com/rust-lang/crates.io-index" 1824 - checksum = "fe99b48a1348eec385b5c4bd3e80fd863b0d3b47257d34e2ddc58754dec5d128" 1860 + checksum = "f55dfce343a754869dfde344e41c79a3ec4737867f90501dcfe8850eceeb37ea" 1825 1861 dependencies = [ 1862 + "anyhow", 1863 + "async-stream", 1864 + "async-tungstenite", 1865 + "axum", 1866 + "axum-core", 1867 + "axum-extra", 1826 1868 "base64 0.22.1", 1827 1869 "bytes", 1828 1870 "ciborium", 1829 - "dioxus-desktop", 1830 - "dioxus-devtools", 1871 + "const-str 0.7.0", 1872 + "const_format", 1873 + "content_disposition", 1874 + "derive_more 2.0.1", 1875 + "dioxus-asset-resolver", 1876 + "dioxus-cli-config", 1877 + "dioxus-core", 1878 + "dioxus-fullstack-core", 1879 + "dioxus-fullstack-macro", 1880 + "dioxus-hooks", 1881 + "dioxus-html", 1882 + "dioxus-signals", 1883 + "form_urlencoded", 1884 + "futures", 1885 + "futures-channel", 1886 + "futures-util", 1887 + "gloo-net", 1888 + "headers", 1889 + "http", 1890 + "http-body", 1891 + "http-body-util", 1892 + "inventory", 1893 + "js-sys", 1894 + "mime", 1895 + "pin-project", 1896 + "reqwest", 1897 + "rustversion", 1898 + "send_wrapper", 1899 + "serde", 1900 + "serde_json", 1901 + "serde_qs", 1902 + "serde_urlencoded", 1903 + "thiserror 2.0.17", 1904 + "tokio", 1905 + "tokio-stream", 1906 + "tokio-tungstenite 0.27.0", 1907 + "tokio-util", 1908 + "tower", 1909 + "tower-http", 1910 + "tower-layer", 1911 + "tracing", 1912 + "tungstenite 0.27.0", 1913 + "url", 1914 + "wasm-bindgen", 1915 + "wasm-bindgen-futures", 1916 + "wasm-streams", 1917 + "web-sys", 1918 + "xxhash-rust", 1919 + ] 1920 + 1921 + [[package]] 1922 + name = "dioxus-fullstack-core" 1923 + version = "0.7.0" 1924 + source = "registry+https://github.com/rust-lang/crates.io-index" 1925 + checksum = "6f486f2b8864d1a0843189acbec74af6d9d206e82694ded6e5923a6c6f774b15" 1926 + dependencies = [ 1927 + "anyhow", 1928 + "axum-core", 1929 + "base64 0.22.1", 1930 + "ciborium", 1931 + "dioxus-core", 1932 + "dioxus-document", 1831 1933 "dioxus-history", 1832 - "dioxus-lib", 1833 - "dioxus-mobile", 1834 - "dioxus-web", 1835 - "dioxus_server_macro", 1934 + "dioxus-hooks", 1935 + "dioxus-signals", 1836 1936 "futures-channel", 1837 1937 "futures-util", 1838 1938 "generational-box", 1839 - "once_cell", 1939 + "http", 1940 + "inventory", 1941 + "parking_lot", 1840 1942 "serde", 1841 - "server_fn", 1943 + "serde_json", 1944 + "thiserror 2.0.17", 1945 + "tokio", 1842 1946 "tracing", 1843 - "web-sys", 1947 + ] 1948 + 1949 + [[package]] 1950 + name = "dioxus-fullstack-macro" 1951 + version = "0.7.0" 1952 + source = "registry+https://github.com/rust-lang/crates.io-index" 1953 + checksum = "5a59c844d648dae315b5aa264956f0c6fd9f34a5cedbf79fd0744820bf302bc5" 1954 + dependencies = [ 1955 + "const_format", 1956 + "convert_case 0.8.0", 1957 + "proc-macro2", 1958 + "quote", 1959 + "syn 2.0.108", 1960 + "xxhash-rust", 1844 1961 ] 1845 1962 1846 1963 [[package]] 1847 1964 name = "dioxus-history" 1848 - version = "0.6.2" 1965 + version = "0.7.0" 1849 1966 source = "registry+https://github.com/rust-lang/crates.io-index" 1850 - checksum = "5ae4e22616c698f35b60727313134955d885de2d32e83689258e586ebc9b7909" 1967 + checksum = "1ea04ad918a08b81af66f1128f759162e33e8f7e7e062597e6dd542a45211905" 1851 1968 dependencies = [ 1852 1969 "dioxus-core", 1853 1970 "tracing", ··· 1855 1972 1856 1973 [[package]] 1857 1974 name = "dioxus-hooks" 1858 - version = "0.6.2" 1975 + version = "0.7.0" 1859 1976 source = "registry+https://github.com/rust-lang/crates.io-index" 1860 - checksum = "948e2b3f20d9d4b2c300aaa60281b1755f3298684448920b27106da5841896d0" 1977 + checksum = "0e7c1a9c7e8d2422198d082d03a9e1f4eb5789cdc1d73f1eb08e0d36a62fdfcb" 1861 1978 dependencies = [ 1862 1979 "dioxus-core", 1863 1980 "dioxus-signals", ··· 1872 1989 1873 1990 [[package]] 1874 1991 name = "dioxus-html" 1875 - version = "0.6.3" 1992 + version = "0.7.0" 1876 1993 source = "registry+https://github.com/rust-lang/crates.io-index" 1877 - checksum = "59c9a40e6fee20ce7990095492dedb6a753eebe05e67d28271a249de74dc796d" 1994 + checksum = "fe86f40430acb0ee310f91e7dbdd48ea4e26267dedab6e54f0c45f0c692db924" 1878 1995 dependencies = [ 1879 1996 "async-trait", 1997 + "bytes", 1880 1998 "dioxus-core", 1881 1999 "dioxus-core-macro", 1882 2000 "dioxus-core-types", ··· 1885 2003 "enumset", 1886 2004 "euclid", 1887 2005 "futures-channel", 2006 + "futures-util", 1888 2007 "generational-box", 1889 2008 "keyboard-types", 1890 - "lazy-js-bundle", 2009 + "lazy-js-bundle 0.7.0", 1891 2010 "rustversion", 1892 2011 "serde", 1893 2012 "serde_json", ··· 1897 2016 1898 2017 [[package]] 1899 2018 name = "dioxus-html-internal-macro" 1900 - version = "0.6.2" 2019 + version = "0.7.0" 1901 2020 source = "registry+https://github.com/rust-lang/crates.io-index" 1902 - checksum = "43ba87b53688a2c9f619ecdf4b3b955bc1f08bd0570a80a0d626c405f6d14a76" 2021 + checksum = "267ca3487501aa1b95a5d65554ee36839da660b03174146c5c27d54014067abd" 1903 2022 dependencies = [ 1904 - "convert_case 0.6.0", 2023 + "convert_case 0.8.0", 1905 2024 "proc-macro2", 1906 2025 "quote", 1907 2026 "syn 2.0.108", ··· 1909 2028 1910 2029 [[package]] 1911 2030 name = "dioxus-interpreter-js" 1912 - version = "0.6.2" 2031 + version = "0.7.0" 1913 2032 source = "registry+https://github.com/rust-lang/crates.io-index" 1914 - checksum = "330707b10ca75cb0eb05f9e5f8d80217cd0d7e62116a8277ae363c1a09b57a22" 2033 + checksum = "14c429cd5057cec2eb00acef02a699ebd359a98d392629464b2e1c350eaed8ce" 1915 2034 dependencies = [ 1916 2035 "dioxus-core", 1917 2036 "dioxus-core-types", 1918 2037 "dioxus-html", 1919 2038 "js-sys", 1920 - "lazy-js-bundle", 1921 - "rustc-hash 1.1.0", 2039 + "lazy-js-bundle 0.7.0", 2040 + "rustc-hash 2.1.1", 1922 2041 "serde", 1923 2042 "sledgehammer_bindgen", 1924 2043 "sledgehammer_utils", ··· 1928 2047 ] 1929 2048 1930 2049 [[package]] 1931 - name = "dioxus-lib" 1932 - version = "0.6.2" 2050 + name = "dioxus-liveview" 2051 + version = "0.7.0" 1933 2052 source = "registry+https://github.com/rust-lang/crates.io-index" 1934 - checksum = "5405b71aa9b8b0c3e0d22728f12f34217ca5277792bd315878cc6ecab7301b72" 2053 + checksum = "36d558d71ee41b33d2b35fd39444bfaab65fbda0b608c3eba33ea8ff97247115" 1935 2054 dependencies = [ 1936 - "dioxus-config-macro", 2055 + "axum", 2056 + "dioxus-cli-config", 1937 2057 "dioxus-core", 1938 - "dioxus-core-macro", 2058 + "dioxus-devtools", 1939 2059 "dioxus-document", 1940 2060 "dioxus-history", 1941 - "dioxus-hooks", 1942 2061 "dioxus-html", 1943 - "dioxus-rsx", 1944 - "dioxus-signals", 1945 - "warnings", 2062 + "dioxus-interpreter-js", 2063 + "futures-channel", 2064 + "futures-util", 2065 + "generational-box", 2066 + "rustc-hash 2.1.1", 2067 + "serde", 2068 + "serde_json", 2069 + "slab", 2070 + "thiserror 2.0.17", 2071 + "tokio", 2072 + "tokio-stream", 2073 + "tokio-util", 2074 + "tracing", 1946 2075 ] 1947 2076 1948 2077 [[package]] 1949 2078 name = "dioxus-logger" 1950 - version = "0.6.2" 2079 + version = "0.7.0" 1951 2080 source = "registry+https://github.com/rust-lang/crates.io-index" 1952 - checksum = "545961e752f6c8bf59c274951b3c8b18a106db6ad2f9e2035b29e1f2a3e899b1" 2081 + checksum = "7a54751cf6aa00132c8a17343ad8d8cdb587d67a4b71acfc19ed78a924128edb" 1953 2082 dependencies = [ 1954 - "console_error_panic_hook", 1955 2083 "dioxus-cli-config", 1956 2084 "tracing", 1957 2085 "tracing-subscriber", ··· 1959 2087 ] 1960 2088 1961 2089 [[package]] 1962 - name = "dioxus-mobile" 1963 - version = "0.6.2" 1964 - source = "registry+https://github.com/rust-lang/crates.io-index" 1965 - checksum = "6d1295388909f427758993f32a571e0f8698d6ce0f125fa0e81b8bfdec3fa952" 2090 + name = "dioxus-primitives" 2091 + version = "0.0.1" 2092 + source = "git+https://github.com/DioxusLabs/components#8e25631c7d4234ee070509156ed2abebb7b1d6e9" 1966 2093 dependencies = [ 1967 - "dioxus-cli-config", 1968 - "dioxus-desktop", 1969 - "dioxus-lib", 1970 - "jni", 1971 - "libc", 1972 - "once_cell", 2094 + "dioxus", 2095 + "dioxus-time", 2096 + "lazy-js-bundle 0.6.2", 2097 + "num-integer", 2098 + "time", 2099 + "tracing", 1973 2100 ] 1974 2101 1975 2102 [[package]] 1976 2103 name = "dioxus-router" 1977 - version = "0.6.3" 2104 + version = "0.7.0" 1978 2105 source = "registry+https://github.com/rust-lang/crates.io-index" 1979 - checksum = "7266a76fc9e4a91f56499d1d1aecfff7168952b6627a6008b4e9748d6bf863e4" 2106 + checksum = "577cc2680066242ef0e672c379c7b63072dee838a7dac6a4296f0c768ab2f72f" 1980 2107 dependencies = [ 1981 2108 "dioxus-cli-config", 2109 + "dioxus-core", 2110 + "dioxus-core-macro", 2111 + "dioxus-fullstack-core", 1982 2112 "dioxus-history", 1983 - "dioxus-lib", 2113 + "dioxus-hooks", 2114 + "dioxus-html", 1984 2115 "dioxus-router-macro", 2116 + "dioxus-signals", 2117 + "percent-encoding", 1985 2118 "rustversion", 1986 2119 "tracing", 1987 2120 "url", 1988 - "urlencoding", 1989 2121 ] 1990 2122 1991 2123 [[package]] 1992 2124 name = "dioxus-router-macro" 1993 - version = "0.6.3" 2125 + version = "0.7.0" 1994 2126 source = "registry+https://github.com/rust-lang/crates.io-index" 1995 - checksum = "2743ffb79e9a7d33d779c87d6deea2a6c047d0736012f95d63b909b83f0a6fd2" 2127 + checksum = "a924da6e4b92053266b1f153292bd2282ce1ff2b035b29002f1520112a4d00e5" 1996 2128 dependencies = [ 2129 + "base16", 2130 + "digest", 1997 2131 "proc-macro2", 1998 2132 "quote", 2133 + "sha2", 1999 2134 "slab", 2000 2135 "syn 2.0.108", 2001 2136 ] 2002 2137 2003 2138 [[package]] 2004 2139 name = "dioxus-rsx" 2005 - version = "0.6.2" 2140 + version = "0.7.0" 2006 2141 source = "registry+https://github.com/rust-lang/crates.io-index" 2007 - checksum = "3eb588e05800b5a7eb90b2f40fca5bbd7626e823fb5e1ba21e011de649b45aa1" 2142 + checksum = "e290f814c6ee06f34d40bb5f3db976500f39e1776c80984fb23815377c2c9cd0" 2008 2143 dependencies = [ 2009 2144 "proc-macro2", 2010 2145 "proc-macro2-diagnostics", ··· 2013 2148 ] 2014 2149 2015 2150 [[package]] 2151 + name = "dioxus-server" 2152 + version = "0.7.0" 2153 + source = "registry+https://github.com/rust-lang/crates.io-index" 2154 + checksum = "0b3b6b8658b79b05c44e66dd934ca3e419a175d1ea9c130b07aa6512605e8df5" 2155 + dependencies = [ 2156 + "anyhow", 2157 + "async-trait", 2158 + "axum", 2159 + "base64 0.22.1", 2160 + "bytes", 2161 + "chrono", 2162 + "ciborium", 2163 + "dashmap 6.1.0", 2164 + "dioxus-cli-config", 2165 + "dioxus-core", 2166 + "dioxus-core-macro", 2167 + "dioxus-devtools", 2168 + "dioxus-document", 2169 + "dioxus-fullstack-core", 2170 + "dioxus-history", 2171 + "dioxus-hooks", 2172 + "dioxus-html", 2173 + "dioxus-interpreter-js", 2174 + "dioxus-logger", 2175 + "dioxus-router", 2176 + "dioxus-signals", 2177 + "dioxus-ssr", 2178 + "enumset", 2179 + "futures", 2180 + "futures-channel", 2181 + "futures-util", 2182 + "generational-box", 2183 + "http", 2184 + "http-body-util", 2185 + "hyper", 2186 + "hyper-util", 2187 + "inventory", 2188 + "lru", 2189 + "parking_lot", 2190 + "pin-project", 2191 + "rustc-hash 2.1.1", 2192 + "serde", 2193 + "serde_json", 2194 + "serde_qs", 2195 + "subsecond", 2196 + "thiserror 2.0.17", 2197 + "tokio", 2198 + "tokio-tungstenite 0.27.0", 2199 + "tokio-util", 2200 + "tower", 2201 + "tower-http", 2202 + "tracing", 2203 + "tracing-futures", 2204 + "url", 2205 + "walkdir", 2206 + ] 2207 + 2208 + [[package]] 2016 2209 name = "dioxus-signals" 2017 - version = "0.6.3" 2210 + version = "0.7.0" 2018 2211 source = "registry+https://github.com/rust-lang/crates.io-index" 2019 - checksum = "10e032dbb3a2c0386ec8b8ee59bc20b5aeb67038147c855801237b45b13d72ac" 2212 + checksum = "4fce8fe43f49769d7a05bef9e1acafcefc9b5f7da2b9bb58e0bde12a145028b9" 2020 2213 dependencies = [ 2021 2214 "dioxus-core", 2022 2215 "futures-channel", 2023 2216 "futures-util", 2024 2217 "generational-box", 2025 - "once_cell", 2026 - "parking_lot 0.12.5", 2027 - "rustc-hash 1.1.0", 2218 + "parking_lot", 2219 + "rustc-hash 2.1.1", 2028 2220 "tracing", 2029 2221 "warnings", 2030 2222 ] 2031 2223 2032 2224 [[package]] 2225 + name = "dioxus-ssr" 2226 + version = "0.7.0" 2227 + source = "registry+https://github.com/rust-lang/crates.io-index" 2228 + checksum = "c180307efbf0f2cb64ad125fd4e6e00d0586dba73875bdea0d6587f5c89524b7" 2229 + dependencies = [ 2230 + "askama_escape", 2231 + "dioxus-core", 2232 + "dioxus-core-types", 2233 + "rustc-hash 2.1.1", 2234 + ] 2235 + 2236 + [[package]] 2237 + name = "dioxus-stores" 2238 + version = "0.7.0" 2239 + source = "registry+https://github.com/rust-lang/crates.io-index" 2240 + checksum = "01f9b29b4486f4aa515ab59b5d5b9177b1abf1a3f4c1940cedc8031ca6c11933" 2241 + dependencies = [ 2242 + "dioxus-core", 2243 + "dioxus-signals", 2244 + "dioxus-stores-macro", 2245 + ] 2246 + 2247 + [[package]] 2248 + name = "dioxus-stores-macro" 2249 + version = "0.7.0" 2250 + source = "registry+https://github.com/rust-lang/crates.io-index" 2251 + checksum = "24d63865f35106c145a11b1072eb84dd9d0d4ca4a78861ad666c297ebae8f42d" 2252 + dependencies = [ 2253 + "convert_case 0.8.0", 2254 + "proc-macro2", 2255 + "quote", 2256 + "syn 2.0.108", 2257 + ] 2258 + 2259 + [[package]] 2260 + name = "dioxus-time" 2261 + version = "0.7.0" 2262 + source = "git+https://github.com/ealmloff/dioxus-std?branch=0.7#e5a74354cd36be440febdd6b701f584bd552bd62" 2263 + dependencies = [ 2264 + "dioxus", 2265 + "futures", 2266 + "gloo-timers", 2267 + "tokio", 2268 + ] 2269 + 2270 + [[package]] 2033 2271 name = "dioxus-web" 2034 - version = "0.6.3" 2272 + version = "0.7.0" 2035 2273 source = "registry+https://github.com/rust-lang/crates.io-index" 2036 - checksum = "7e7c12475c3d360058b8afe1b68eb6dfc9cbb7dcd760aed37c5f85c561c83ed1" 2274 + checksum = "6d877058b49e547fee2b0fe26af17018142983262a9dd3f739963903799aea8e" 2037 2275 dependencies = [ 2038 - "async-trait", 2039 - "ciborium", 2040 2276 "dioxus-cli-config", 2041 2277 "dioxus-core", 2042 2278 "dioxus-core-types", 2043 2279 "dioxus-devtools", 2044 2280 "dioxus-document", 2281 + "dioxus-fullstack-core", 2045 2282 "dioxus-history", 2046 2283 "dioxus-html", 2047 2284 "dioxus-interpreter-js", ··· 2049 2286 "futures-channel", 2050 2287 "futures-util", 2051 2288 "generational-box", 2289 + "gloo-timers", 2052 2290 "js-sys", 2053 - "lazy-js-bundle", 2054 - "rustc-hash 1.1.0", 2291 + "lazy-js-bundle 0.7.0", 2292 + "rustc-hash 2.1.1", 2293 + "send_wrapper", 2055 2294 "serde", 2056 2295 "serde-wasm-bindgen", 2057 2296 "serde_json", 2058 2297 "tracing", 2059 2298 "wasm-bindgen", 2060 2299 "wasm-bindgen-futures", 2300 + "wasm-streams", 2061 2301 "web-sys", 2062 2302 ] 2063 2303 2064 2304 [[package]] 2065 - name = "dioxus_server_macro" 2066 - version = "0.6.2" 2067 - source = "registry+https://github.com/rust-lang/crates.io-index" 2068 - checksum = "371a5b21989a06b53c5092e977b3f75d0e60a65a4c15a2aa1d07014c3b2dda97" 2069 - dependencies = [ 2070 - "proc-macro2", 2071 - "quote", 2072 - "server_fn_macro", 2073 - "syn 2.0.108", 2074 - ] 2075 - 2076 - [[package]] 2077 2305 name = "dirs" 2078 2306 version = "6.0.0" 2079 2307 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2107 2335 checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" 2108 2336 dependencies = [ 2109 2337 "bitflags 2.10.0", 2110 - "objc2 0.6.3", 2338 + "block2", 2339 + "libc", 2340 + "objc2", 2111 2341 ] 2112 2342 2113 2343 [[package]] ··· 2122 2352 ] 2123 2353 2124 2354 [[package]] 2355 + name = "dlib" 2356 + version = "0.5.2" 2357 + source = "registry+https://github.com/rust-lang/crates.io-index" 2358 + checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" 2359 + dependencies = [ 2360 + "libloading 0.8.9", 2361 + ] 2362 + 2363 + [[package]] 2125 2364 name = "dlopen2" 2126 - version = "0.7.0" 2365 + version = "0.8.0" 2127 2366 source = "registry+https://github.com/rust-lang/crates.io-index" 2128 - checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" 2367 + checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff" 2129 2368 dependencies = [ 2130 2369 "dlopen2_derive", 2131 2370 "libc", ··· 2145 2384 ] 2146 2385 2147 2386 [[package]] 2387 + name = "document-features" 2388 + version = "0.2.12" 2389 + source = "registry+https://github.com/rust-lang/crates.io-index" 2390 + checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" 2391 + dependencies = [ 2392 + "litrs", 2393 + ] 2394 + 2395 + [[package]] 2148 2396 name = "dotenvy" 2149 2397 version = "0.15.7" 2150 2398 source = "registry+https://github.com/rust-lang/crates.io-index" 2151 2399 checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" 2400 + 2401 + [[package]] 2402 + name = "downcast-rs" 2403 + version = "1.2.1" 2404 + source = "registry+https://github.com/rust-lang/crates.io-index" 2405 + checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" 2152 2406 2153 2407 [[package]] 2154 2408 name = "dpi" ··· 2296 2550 source = "registry+https://github.com/rust-lang/crates.io-index" 2297 2551 checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 2298 2552 dependencies = [ 2299 - "cfg-if 1.0.4", 2553 + "cfg-if", 2300 2554 ] 2301 2555 2302 2556 [[package]] ··· 2376 2630 ] 2377 2631 2378 2632 [[package]] 2633 + name = "error-chain" 2634 + version = "0.12.4" 2635 + source = "registry+https://github.com/rust-lang/crates.io-index" 2636 + checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" 2637 + dependencies = [ 2638 + "version_check", 2639 + ] 2640 + 2641 + [[package]] 2379 2642 name = "euclid" 2380 2643 version = "0.22.11" 2381 2644 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2470 2733 source = "registry+https://github.com/rust-lang/crates.io-index" 2471 2734 checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" 2472 2735 dependencies = [ 2473 - "cfg-if 1.0.4", 2736 + "cfg-if", 2474 2737 "libc", 2475 2738 "libredox", 2476 2739 "windows-sys 0.60.2", ··· 2481 2744 version = "0.1.4" 2482 2745 source = "registry+https://github.com/rust-lang/crates.io-index" 2483 2746 checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" 2484 - 2485 - [[package]] 2486 - name = "fixedbitset" 2487 - version = "0.2.0" 2488 - source = "registry+https://github.com/rust-lang/crates.io-index" 2489 - checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" 2490 2747 2491 2748 [[package]] 2492 2749 name = "flate2" ··· 2521 2778 checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 2522 2779 2523 2780 [[package]] 2781 + name = "foldhash" 2782 + version = "0.2.0" 2783 + source = "registry+https://github.com/rust-lang/crates.io-index" 2784 + checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" 2785 + 2786 + [[package]] 2524 2787 name = "foreign-types" 2525 2788 version = "0.3.2" 2526 2789 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2690 2953 "futures-macro", 2691 2954 "futures-sink", 2692 2955 "futures-task", 2693 - "memchr 2.7.6", 2956 + "memchr", 2694 2957 "pin-project-lite", 2695 2958 "pin-utils", 2696 2959 "slab", ··· 2775 3038 "libc", 2776 3039 "pkg-config", 2777 3040 "system-deps", 2778 - ] 2779 - 2780 - [[package]] 2781 - name = "gdkx11" 2782 - version = "0.18.2" 2783 - source = "registry+https://github.com/rust-lang/crates.io-index" 2784 - checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" 2785 - dependencies = [ 2786 - "gdk", 2787 - "gdkx11-sys", 2788 - "gio", 2789 - "glib", 2790 - "libc", 2791 - "x11", 2792 3041 ] 2793 3042 2794 3043 [[package]] ··· 2806 3055 2807 3056 [[package]] 2808 3057 name = "generational-box" 2809 - version = "0.6.2" 3058 + version = "0.7.0" 2810 3059 source = "registry+https://github.com/rust-lang/crates.io-index" 2811 - checksum = "a673cf4fb0ea6a91aa86c08695756dfe875277a912cdbf33db9a9f62d47ed82b" 3060 + checksum = "0f067a79c49f237b1017258357a9789477be4f47f11422c74547a8bec189adb4" 2812 3061 dependencies = [ 2813 - "parking_lot 0.12.5", 3062 + "parking_lot", 2814 3063 "tracing", 2815 3064 ] 2816 3065 ··· 2821 3070 checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2" 2822 3071 dependencies = [ 2823 3072 "cc", 2824 - "cfg-if 1.0.4", 3073 + "cfg-if", 2825 3074 "libc", 2826 3075 "log", 2827 3076 "rustversion", 2828 - "windows 0.61.3", 3077 + "windows", 2829 3078 ] 2830 3079 2831 3080 [[package]] ··· 2841 3090 ] 2842 3091 2843 3092 [[package]] 3093 + name = "gethostname" 3094 + version = "1.1.0" 3095 + source = "registry+https://github.com/rust-lang/crates.io-index" 3096 + checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" 3097 + dependencies = [ 3098 + "rustix", 3099 + "windows-link 0.2.1", 3100 + ] 3101 + 3102 + [[package]] 2844 3103 name = "getopts" 2845 3104 version = "0.2.24" 2846 3105 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2855 3114 source = "registry+https://github.com/rust-lang/crates.io-index" 2856 3115 checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 2857 3116 dependencies = [ 2858 - "cfg-if 1.0.4", 3117 + "cfg-if", 2859 3118 "libc", 2860 3119 "wasi 0.9.0+wasi-snapshot-preview1", 2861 3120 ] ··· 2866 3125 source = "registry+https://github.com/rust-lang/crates.io-index" 2867 3126 checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 2868 3127 dependencies = [ 2869 - "cfg-if 1.0.4", 3128 + "cfg-if", 2870 3129 "js-sys", 2871 3130 "libc", 2872 3131 "wasi 0.11.1+wasi-snapshot-preview1", ··· 2879 3138 source = "registry+https://github.com/rust-lang/crates.io-index" 2880 3139 checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 2881 3140 dependencies = [ 2882 - "cfg-if 1.0.4", 3141 + "cfg-if", 2883 3142 "js-sys", 2884 3143 "libc", 2885 3144 "r-efi", ··· 2942 3201 "glib-sys", 2943 3202 "gobject-sys", 2944 3203 "libc", 2945 - "memchr 2.7.6", 3204 + "memchr", 2946 3205 "once_cell", 2947 3206 "smallvec", 2948 3207 "thiserror 1.0.69", ··· 2973 3232 ] 2974 3233 2975 3234 [[package]] 3235 + name = "glob" 3236 + version = "0.3.3" 3237 + source = "registry+https://github.com/rust-lang/crates.io-index" 3238 + checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" 3239 + 3240 + [[package]] 2976 3241 name = "global-hotkey" 2977 - version = "0.5.5" 3242 + version = "0.7.0" 2978 3243 source = "registry+https://github.com/rust-lang/crates.io-index" 2979 - checksum = "b436093d1598b05e3b7fddc097b2bad32763f53a1beb25ab6f9718c6a60acd09" 3244 + checksum = "b9247516746aa8e53411a0db9b62b0e24efbcf6a76e0ba73e5a91b512ddabed7" 2980 3245 dependencies = [ 2981 - "bitflags 2.10.0", 2982 - "cocoa 0.25.0", 2983 3246 "crossbeam-channel", 2984 3247 "keyboard-types", 2985 - "objc", 3248 + "objc2", 3249 + "objc2-app-kit", 2986 3250 "once_cell", 2987 - "thiserror 1.0.69", 2988 - "windows-sys 0.52.0", 2989 - "x11-dl", 3251 + "thiserror 2.0.17", 3252 + "windows-sys 0.59.0", 3253 + "x11rb", 3254 + "xkeysym", 2990 3255 ] 2991 3256 2992 3257 [[package]] ··· 3021 3286 "wasm-bindgen", 3022 3287 "wasm-bindgen-futures", 3023 3288 "web-sys", 3289 + ] 3290 + 3291 + [[package]] 3292 + name = "gloo-timers" 3293 + version = "0.3.0" 3294 + source = "registry+https://github.com/rust-lang/crates.io-index" 3295 + checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" 3296 + dependencies = [ 3297 + "futures-channel", 3298 + "futures-core", 3299 + "js-sys", 3300 + "wasm-bindgen", 3024 3301 ] 3025 3302 3026 3303 [[package]] ··· 3140 3417 3141 3418 [[package]] 3142 3419 name = "half" 3143 - version = "1.8.3" 3144 - source = "registry+https://github.com/rust-lang/crates.io-index" 3145 - checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" 3146 - 3147 - [[package]] 3148 - name = "half" 3149 3420 version = "2.7.1" 3150 3421 source = "registry+https://github.com/rust-lang/crates.io-index" 3151 3422 checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" 3152 3423 dependencies = [ 3153 - "cfg-if 1.0.4", 3424 + "cfg-if", 3154 3425 "crunchy", 3155 3426 "zerocopy", 3156 3427 ] ··· 3175 3446 dependencies = [ 3176 3447 "allocator-api2", 3177 3448 "equivalent", 3178 - "foldhash", 3449 + "foldhash 0.1.5", 3179 3450 "serde", 3180 3451 ] 3181 3452 ··· 3184 3455 version = "0.16.0" 3185 3456 source = "registry+https://github.com/rust-lang/crates.io-index" 3186 3457 checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 3458 + dependencies = [ 3459 + "allocator-api2", 3460 + "equivalent", 3461 + "foldhash 0.2.0", 3462 + ] 3187 3463 3188 3464 [[package]] 3189 3465 name = "hashlink" ··· 3195 3471 ] 3196 3472 3197 3473 [[package]] 3474 + name = "headers" 3475 + version = "0.4.1" 3476 + source = "registry+https://github.com/rust-lang/crates.io-index" 3477 + checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" 3478 + dependencies = [ 3479 + "base64 0.22.1", 3480 + "bytes", 3481 + "headers-core", 3482 + "http", 3483 + "httpdate", 3484 + "mime", 3485 + "sha1", 3486 + ] 3487 + 3488 + [[package]] 3489 + name = "headers-core" 3490 + version = "0.3.0" 3491 + source = "registry+https://github.com/rust-lang/crates.io-index" 3492 + checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" 3493 + dependencies = [ 3494 + "http", 3495 + ] 3496 + 3497 + [[package]] 3198 3498 name = "heck" 3199 3499 version = "0.4.1" 3200 3500 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3205 3505 version = "0.5.0" 3206 3506 source = "registry+https://github.com/rust-lang/crates.io-index" 3207 3507 checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 3208 - 3209 - [[package]] 3210 - name = "hermit-abi" 3211 - version = "0.1.19" 3212 - source = "registry+https://github.com/rust-lang/crates.io-index" 3213 - checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 3214 - dependencies = [ 3215 - "libc", 3216 - ] 3217 3508 3218 3509 [[package]] 3219 3510 name = "hermit-abi" ··· 3240 3531 checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" 3241 3532 dependencies = [ 3242 3533 "async-trait", 3243 - "cfg-if 1.0.4", 3534 + "cfg-if", 3244 3535 "data-encoding", 3245 3536 "enum-as-inner", 3246 3537 "futures-channel", ··· 3263 3554 source = "registry+https://github.com/rust-lang/crates.io-index" 3264 3555 checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" 3265 3556 dependencies = [ 3266 - "cfg-if 1.0.4", 3557 + "cfg-if", 3267 3558 "futures-util", 3268 3559 "hickory-proto", 3269 3560 "ipconfig", 3270 3561 "lru-cache", 3271 3562 "once_cell", 3272 - "parking_lot 0.12.5", 3563 + "parking_lot", 3273 3564 "rand 0.8.5", 3274 3565 "resolv-conf", 3275 3566 "smallvec", ··· 3298 3589 3299 3590 [[package]] 3300 3591 name = "html5ever" 3301 - version = "0.26.0" 3592 + version = "0.27.0" 3302 3593 source = "registry+https://github.com/rust-lang/crates.io-index" 3303 - checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" 3594 + checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" 3304 3595 dependencies = [ 3305 3596 "log", 3306 3597 "mac", 3307 - "markup5ever 0.11.0", 3598 + "markup5ever 0.12.1", 3308 3599 "proc-macro2", 3309 3600 "quote", 3310 - "syn 1.0.109", 3601 + "syn 2.0.108", 3311 3602 ] 3312 3603 3313 3604 [[package]] 3314 3605 name = "html5ever" 3315 - version = "0.27.0" 3606 + version = "0.29.1" 3316 3607 source = "registry+https://github.com/rust-lang/crates.io-index" 3317 - checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" 3608 + checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" 3318 3609 dependencies = [ 3319 3610 "log", 3320 3611 "mac", 3321 - "markup5ever 0.12.1", 3322 - "proc-macro2", 3323 - "quote", 3324 - "syn 2.0.108", 3612 + "markup5ever 0.14.1", 3613 + "match_token", 3325 3614 ] 3326 3615 3327 3616 [[package]] ··· 3332 3621 dependencies = [ 3333 3622 "bytes", 3334 3623 "fnv", 3335 - "itoa 1.0.15", 3624 + "itoa", 3336 3625 ] 3337 3626 3338 3627 [[package]] ··· 3391 3680 "http-body", 3392 3681 "httparse", 3393 3682 "httpdate", 3394 - "itoa 1.0.15", 3683 + "itoa", 3395 3684 "pin-project-lite", 3396 3685 "pin-utils", 3397 3686 "smallvec", ··· 3599 3888 "crossbeam-deque", 3600 3889 "globset", 3601 3890 "log", 3602 - "memchr 2.7.6", 3891 + "memchr", 3603 3892 "regex-automata", 3604 3893 "same-file", 3605 3894 "walkdir", ··· 3640 3929 3641 3930 [[package]] 3642 3931 name = "infer" 3643 - version = "0.11.0" 3932 + version = "0.19.0" 3644 3933 source = "registry+https://github.com/rust-lang/crates.io-index" 3645 - checksum = "0a6c16b11a665b26aeeb9b1d7f954cdeb034be38dd00adab4f2ae921a8fee804" 3934 + checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" 3646 3935 dependencies = [ 3647 3936 "cfb", 3648 3937 ] ··· 3660 3949 ] 3661 3950 3662 3951 [[package]] 3663 - name = "instant" 3664 - version = "0.1.13" 3665 - source = "registry+https://github.com/rust-lang/crates.io-index" 3666 - checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" 3667 - dependencies = [ 3668 - "cfg-if 1.0.4", 3669 - ] 3670 - 3671 - [[package]] 3672 3952 name = "inventory" 3673 3953 version = "0.3.21" 3674 3954 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3712 3992 source = "registry+https://github.com/rust-lang/crates.io-index" 3713 3993 checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" 3714 3994 dependencies = [ 3715 - "memchr 2.7.6", 3995 + "memchr", 3716 3996 "serde", 3717 3997 ] 3718 3998 ··· 3730 4010 3731 4011 [[package]] 3732 4012 name = "itoa" 3733 - version = "0.4.8" 3734 - source = "registry+https://github.com/rust-lang/crates.io-index" 3735 - checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" 3736 - 3737 - [[package]] 3738 - name = "itoa" 3739 4013 version = "1.0.15" 3740 4014 source = "registry+https://github.com/rust-lang/crates.io-index" 3741 4015 checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" ··· 3755 4029 "jacquard-oauth", 3756 4030 "jose-jwk", 3757 4031 "miette 7.6.0", 4032 + "n0-future", 3758 4033 "regex", 3759 4034 "reqwest", 3760 4035 "serde", ··· 3763 4038 "smol_str", 3764 4039 "thiserror 2.0.17", 3765 4040 "tokio", 3766 - "tracing", 3767 4041 "trait-variant", 3768 4042 "url", 3769 4043 "webpage", ··· 3846 4120 "tokio", 3847 4121 "tokio-tungstenite-wasm", 3848 4122 "tokio-util", 3849 - "tracing", 3850 4123 "trait-variant", 3851 4124 "url", 3852 4125 "zstd", ··· 3878 4151 "jacquard-lexicon", 3879 4152 "miette 7.6.0", 3880 4153 "moka", 4154 + "n0-future", 3881 4155 "percent-encoding", 3882 4156 "reqwest", 3883 4157 "serde", ··· 3885 4159 "serde_json", 3886 4160 "thiserror 2.0.17", 3887 4161 "tokio", 3888 - "tracing", 3889 4162 "trait-variant", 3890 4163 "url", 3891 4164 "urlencoding", ··· 3933 4206 "jose-jwa", 3934 4207 "jose-jwk", 3935 4208 "miette 7.6.0", 4209 + "n0-future", 3936 4210 "p256", 3937 4211 "rand 0.8.5", 3938 4212 "rouille", ··· 3944 4218 "smol_str", 3945 4219 "thiserror 2.0.17", 3946 4220 "tokio", 3947 - "tracing", 3948 4221 "trait-variant", 3949 4222 "url", 3950 - "webbrowser", 4223 + "webbrowser 0.8.15", 3951 4224 ] 3952 4225 3953 4226 [[package]] ··· 3980 4253 checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 3981 4254 dependencies = [ 3982 4255 "cesu8", 3983 - "cfg-if 1.0.4", 4256 + "cfg-if", 3984 4257 "combine", 3985 4258 "jni-sys", 3986 4259 "log", ··· 4012 4285 checksum = "de791f8b277ef903d49b0c6f3f3b866569ae8cb1d0829825eea28374cc4c803c" 4013 4286 dependencies = [ 4014 4287 "base64ct", 4015 - "cfg-if 1.0.4", 4288 + "cfg-if", 4016 4289 "digest", 4017 4290 "ecdsa", 4018 4291 "ed25519-dalek", ··· 4090 4363 source = "registry+https://github.com/rust-lang/crates.io-index" 4091 4364 checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" 4092 4365 dependencies = [ 4093 - "cfg-if 1.0.4", 4366 + "cfg-if", 4094 4367 "ecdsa", 4095 4368 "elliptic-curve", 4096 4369 "sha2", ··· 4103 4376 checksum = "e03e2e96c5926fe761088d66c8c2aee3a4352a2573f4eaca50043ad130af9117" 4104 4377 dependencies = [ 4105 4378 "miette 5.10.0", 4106 - "nom 7.1.3", 4379 + "nom", 4107 4380 "thiserror 1.0.69", 4108 4381 ] 4109 4382 ··· 4120 4393 4121 4394 [[package]] 4122 4395 name = "kuchikiki" 4123 - version = "0.8.2" 4396 + version = "0.8.8-speedreader" 4124 4397 source = "registry+https://github.com/rust-lang/crates.io-index" 4125 - checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" 4398 + checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" 4126 4399 dependencies = [ 4127 4400 "cssparser", 4128 - "html5ever 0.26.0", 4129 - "indexmap 1.9.3", 4130 - "matches", 4401 + "html5ever 0.29.1", 4402 + "indexmap 2.12.0", 4131 4403 "selectors", 4132 4404 ] 4133 4405 ··· 4149 4421 checksum = "e49596223b9d9d4947a14a25c142a6e7d8ab3f27eb3ade269d238bb8b5c267e2" 4150 4422 4151 4423 [[package]] 4424 + name = "lazy-js-bundle" 4425 + version = "0.7.0" 4426 + source = "registry+https://github.com/rust-lang/crates.io-index" 4427 + checksum = "cb1a786b3e81c7a8c1809f8e430cc53f26b37695d929ba41bc30d71679c80e0a" 4428 + 4429 + [[package]] 4152 4430 name = "lazy_static" 4153 4431 version = "1.5.0" 4154 4432 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4177 4455 checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" 4178 4456 dependencies = [ 4179 4457 "gtk-sys", 4180 - "libloading", 4458 + "libloading 0.7.4", 4181 4459 "once_cell", 4182 4460 ] 4183 4461 ··· 4193 4471 source = "registry+https://github.com/rust-lang/crates.io-index" 4194 4472 checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" 4195 4473 dependencies = [ 4196 - "cfg-if 1.0.4", 4474 + "cfg-if", 4197 4475 "winapi", 4198 4476 ] 4199 4477 4200 4478 [[package]] 4479 + name = "libloading" 4480 + version = "0.8.9" 4481 + source = "registry+https://github.com/rust-lang/crates.io-index" 4482 + checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" 4483 + dependencies = [ 4484 + "cfg-if", 4485 + "windows-link 0.2.1", 4486 + ] 4487 + 4488 + [[package]] 4201 4489 name = "libm" 4202 4490 version = "0.2.15" 4203 4491 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4211 4499 dependencies = [ 4212 4500 "bitflags 2.10.0", 4213 4501 "libc", 4214 - "redox_syscall 0.5.18", 4502 + "redox_syscall", 4215 4503 ] 4216 4504 4217 4505 [[package]] ··· 4262 4550 checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" 4263 4551 4264 4552 [[package]] 4265 - name = "lock_api" 4266 - version = "0.3.4" 4553 + name = "litrs" 4554 + version = "1.0.0" 4267 4555 source = "registry+https://github.com/rust-lang/crates.io-index" 4268 - checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" 4269 - dependencies = [ 4270 - "scopeguard", 4271 - ] 4556 + checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" 4272 4557 4273 4558 [[package]] 4274 4559 name = "lock_api" ··· 4297 4582 source = "registry+https://github.com/rust-lang/crates.io-index" 4298 4583 checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" 4299 4584 dependencies = [ 4300 - "cfg-if 1.0.4", 4585 + "cfg-if", 4301 4586 "generator", 4302 4587 "scoped-tls", 4303 4588 "tracing", ··· 4305 4590 ] 4306 4591 4307 4592 [[package]] 4593 + name = "lru" 4594 + version = "0.16.2" 4595 + source = "registry+https://github.com/rust-lang/crates.io-index" 4596 + checksum = "96051b46fc183dc9cd4a223960ef37b9af631b55191852a8274bfef064cda20f" 4597 + dependencies = [ 4598 + "hashbrown 0.16.0", 4599 + ] 4600 + 4601 + [[package]] 4308 4602 name = "lru-cache" 4309 4603 version = "0.1.2" 4310 4604 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4326 4620 checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 4327 4621 4328 4622 [[package]] 4623 + name = "macro-string" 4624 + version = "0.1.4" 4625 + source = "registry+https://github.com/rust-lang/crates.io-index" 4626 + checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" 4627 + dependencies = [ 4628 + "proc-macro2", 4629 + "quote", 4630 + "syn 2.0.108", 4631 + ] 4632 + 4633 + [[package]] 4329 4634 name = "malloc_buf" 4330 4635 version = "0.0.6" 4331 4636 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4336 4641 4337 4642 [[package]] 4338 4643 name = "manganis" 4339 - version = "0.6.2" 4644 + version = "0.7.0" 4340 4645 source = "registry+https://github.com/rust-lang/crates.io-index" 4341 - checksum = "317af44b15e7605b85f04525449a3bb631753040156c9b318e6cba8a3ea4ef73" 4646 + checksum = "bcdad2e00822f2705d142c76843e4d0de796754e1dfa7e459e4e2b1742d6e632" 4342 4647 dependencies = [ 4343 4648 "const-serialize", 4344 4649 "manganis-core", ··· 4347 4652 4348 4653 [[package]] 4349 4654 name = "manganis-core" 4350 - version = "0.6.2" 4655 + version = "0.7.0" 4351 4656 source = "registry+https://github.com/rust-lang/crates.io-index" 4352 - checksum = "c38bee65cc725b2bba23b5dbb290f57c8be8fadbe2043fb7e2ce73022ea06519" 4657 + checksum = "058d5b28351649020f1a1a3c36a8019a5e1d747f4103e3adb6b5eef15f1683e0" 4353 4658 dependencies = [ 4354 4659 "const-serialize", 4355 4660 "dioxus-cli-config", ··· 4359 4664 4360 4665 [[package]] 4361 4666 name = "manganis-macro" 4362 - version = "0.6.2" 4667 + version = "0.7.0" 4363 4668 source = "registry+https://github.com/rust-lang/crates.io-index" 4364 - checksum = "d9f4f71310913c40174d9f0cfcbcb127dad0329ecdb3945678a120db22d3d065" 4669 + checksum = "bd5449ca340d41990d79be6accc063aa9b6a70b83766a0210d5230dd76e40dd7" 4365 4670 dependencies = [ 4366 4671 "dunce", 4672 + "macro-string", 4367 4673 "manganis-core", 4368 4674 "proc-macro2", 4369 4675 "quote", ··· 4378 4684 "bitflags 2.10.0", 4379 4685 "getopts", 4380 4686 "markdown-weaver-escape", 4381 - "memchr 2.7.6", 4687 + "memchr", 4382 4688 "serde", 4383 4689 "unicase", 4384 4690 ] ··· 4390 4696 4391 4697 [[package]] 4392 4698 name = "markup5ever" 4393 - version = "0.11.0" 4699 + version = "0.12.1" 4394 4700 source = "registry+https://github.com/rust-lang/crates.io-index" 4395 - checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" 4701 + checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" 4396 4702 dependencies = [ 4397 4703 "log", 4398 - "phf 0.10.1", 4399 - "phf_codegen 0.10.0", 4704 + "phf 0.11.3", 4705 + "phf_codegen 0.11.3", 4400 4706 "string_cache", 4401 4707 "string_cache_codegen", 4402 4708 "tendril", ··· 4404 4710 4405 4711 [[package]] 4406 4712 name = "markup5ever" 4407 - version = "0.12.1" 4713 + version = "0.14.1" 4408 4714 source = "registry+https://github.com/rust-lang/crates.io-index" 4409 - checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" 4715 + checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" 4410 4716 dependencies = [ 4411 4717 "log", 4412 4718 "phf 0.11.3", ··· 4440 4746 ] 4441 4747 4442 4748 [[package]] 4749 + name = "match_token" 4750 + version = "0.1.0" 4751 + source = "registry+https://github.com/rust-lang/crates.io-index" 4752 + checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" 4753 + dependencies = [ 4754 + "proc-macro2", 4755 + "quote", 4756 + "syn 2.0.108", 4757 + ] 4758 + 4759 + [[package]] 4443 4760 name = "matchers" 4444 4761 version = "0.2.0" 4445 4762 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4466 4783 source = "registry+https://github.com/rust-lang/crates.io-index" 4467 4784 checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" 4468 4785 dependencies = [ 4469 - "cfg-if 1.0.4", 4786 + "cfg-if", 4470 4787 "digest", 4471 4788 ] 4472 4789 ··· 4481 4798 4482 4799 [[package]] 4483 4800 name = "memchr" 4484 - version = "1.0.2" 4801 + version = "2.7.6" 4485 4802 source = "registry+https://github.com/rust-lang/crates.io-index" 4486 - checksum = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a" 4803 + checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 4804 + 4805 + [[package]] 4806 + name = "memfd" 4807 + version = "0.6.5" 4808 + source = "registry+https://github.com/rust-lang/crates.io-index" 4809 + checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" 4487 4810 dependencies = [ 4488 - "libc", 4811 + "rustix", 4489 4812 ] 4490 4813 4491 4814 [[package]] 4492 - name = "memchr" 4493 - version = "2.7.6" 4815 + name = "memmap2" 4816 + version = "0.9.9" 4494 4817 source = "registry+https://github.com/rust-lang/crates.io-index" 4495 - checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 4818 + checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" 4819 + dependencies = [ 4820 + "libc", 4821 + ] 4496 4822 4497 4823 [[package]] 4498 4824 name = "memoffset" ··· 4523 4849 dependencies = [ 4524 4850 "backtrace", 4525 4851 "backtrace-ext", 4526 - "cfg-if 1.0.4", 4852 + "cfg-if", 4527 4853 "miette-derive 7.6.0", 4528 4854 "owo-colors", 4529 4855 "supports-color", ··· 4531 4857 "supports-unicode", 4532 4858 "syntect", 4533 4859 "terminal_size", 4534 - "textwrap 0.16.2", 4860 + "textwrap", 4535 4861 "unicode-width 0.1.14", 4536 4862 ] 4537 4863 ··· 4585 4911 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 4586 4912 4587 4913 [[package]] 4914 + name = "mime-sniffer" 4915 + version = "0.1.3" 4916 + source = "registry+https://github.com/rust-lang/crates.io-index" 4917 + checksum = "6b8b2a64cd735f1d5f17ff6701ced3cc3c54851f9448caf454cd9c923d812408" 4918 + dependencies = [ 4919 + "mime", 4920 + "url", 4921 + ] 4922 + 4923 + [[package]] 4588 4924 name = "mime_guess" 4589 4925 version = "2.0.5" 4590 4926 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4595 4931 ] 4596 4932 4597 4933 [[package]] 4934 + name = "mini-moka" 4935 + version = "0.10.3" 4936 + source = "registry+https://github.com/rust-lang/crates.io-index" 4937 + checksum = "c325dfab65f261f386debee8b0969da215b3fa0037e74c8a1234db7ba986d803" 4938 + dependencies = [ 4939 + "crossbeam-channel", 4940 + "crossbeam-utils", 4941 + "dashmap 5.5.3", 4942 + "skeptic", 4943 + "smallvec", 4944 + "tagptr", 4945 + "triomphe", 4946 + ] 4947 + 4948 + [[package]] 4598 4949 name = "minijinja" 4599 4950 version = "2.12.0" 4600 4951 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4653 5004 "equivalent", 4654 5005 "event-listener", 4655 5006 "futures-util", 4656 - "parking_lot 0.12.5", 5007 + "parking_lot", 4657 5008 "portable-atomic", 4658 5009 "rustc_version", 4659 5010 "smallvec", ··· 4663 5014 4664 5015 [[package]] 4665 5016 name = "muda" 4666 - version = "0.11.5" 5017 + version = "0.17.1" 4667 5018 source = "registry+https://github.com/rust-lang/crates.io-index" 4668 - checksum = "4c47e7625990fc1af2226ea4f34fb2412b03c12639fcb91868581eb3a6893453" 5019 + checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" 4669 5020 dependencies = [ 4670 - "cocoa 0.25.0", 4671 5021 "crossbeam-channel", 5022 + "dpi", 4672 5023 "gtk", 4673 5024 "keyboard-types", 4674 5025 "libxdo", 4675 - "objc", 5026 + "objc2", 5027 + "objc2-app-kit", 5028 + "objc2-core-foundation", 5029 + "objc2-foundation", 4676 5030 "once_cell", 4677 5031 "png", 4678 - "thiserror 1.0.69", 4679 - "windows-sys 0.52.0", 5032 + "thiserror 2.0.17", 5033 + "windows-sys 0.60.2", 4680 5034 ] 4681 5035 4682 5036 [[package]] 4683 - name = "muda" 4684 - version = "0.15.3" 5037 + name = "multer" 5038 + version = "3.1.0" 4685 5039 source = "registry+https://github.com/rust-lang/crates.io-index" 4686 - checksum = "fdae9c00e61cc0579bcac625e8ad22104c60548a025bfc972dc83868a28e1484" 5040 + checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" 4687 5041 dependencies = [ 4688 - "crossbeam-channel", 4689 - "dpi", 4690 - "gtk", 4691 - "keyboard-types", 4692 - "libxdo", 4693 - "objc2 0.5.2", 4694 - "objc2-app-kit 0.2.2", 4695 - "objc2-foundation 0.2.2", 4696 - "once_cell", 4697 - "png", 4698 - "thiserror 1.0.69", 4699 - "windows-sys 0.59.0", 5042 + "bytes", 5043 + "encoding_rs", 5044 + "futures-util", 5045 + "http", 5046 + "httparse", 5047 + "memchr", 5048 + "mime", 5049 + "spin 0.9.8", 5050 + "version_check", 4700 5051 ] 4701 5052 4702 5053 [[package]] ··· 4816 5167 4817 5168 [[package]] 4818 5169 name = "nix" 4819 - version = "0.29.0" 5170 + version = "0.30.1" 4820 5171 source = "registry+https://github.com/rust-lang/crates.io-index" 4821 - checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" 5172 + checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 4822 5173 dependencies = [ 4823 5174 "bitflags 2.10.0", 4824 - "cfg-if 1.0.4", 5175 + "cfg-if", 4825 5176 "cfg_aliases", 4826 5177 "libc", 4827 5178 "memoffset", ··· 4835 5186 4836 5187 [[package]] 4837 5188 name = "nom" 4838 - version = "3.2.1" 4839 - source = "registry+https://github.com/rust-lang/crates.io-index" 4840 - checksum = "05aec50c70fd288702bcd93284a8444607f3292dbdf2a30de5ea5dcdbe72287b" 4841 - dependencies = [ 4842 - "memchr 1.0.2", 4843 - ] 4844 - 4845 - [[package]] 4846 - name = "nom" 4847 5189 version = "7.1.3" 4848 5190 source = "registry+https://github.com/rust-lang/crates.io-index" 4849 5191 checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 4850 5192 dependencies = [ 4851 - "memchr 2.7.6", 5193 + "memchr", 4852 5194 "minimal-lexical", 4853 5195 ] 4854 5196 ··· 4920 5262 source = "registry+https://github.com/rust-lang/crates.io-index" 4921 5263 checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" 4922 5264 dependencies = [ 4923 - "hermit-abi 0.5.2", 5265 + "hermit-abi", 4924 5266 "libc", 4925 5267 ] 4926 5268 ··· 4962 5304 checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 4963 5305 dependencies = [ 4964 5306 "malloc_buf", 4965 - "objc_exception", 4966 - ] 4967 - 4968 - [[package]] 4969 - name = "objc-foundation" 4970 - version = "0.1.1" 4971 - source = "registry+https://github.com/rust-lang/crates.io-index" 4972 - checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" 4973 - dependencies = [ 4974 - "block", 4975 - "objc", 4976 - "objc_id", 4977 - ] 4978 - 4979 - [[package]] 4980 - name = "objc-sys" 4981 - version = "0.3.5" 4982 - source = "registry+https://github.com/rust-lang/crates.io-index" 4983 - checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" 4984 - 4985 - [[package]] 4986 - name = "objc2" 4987 - version = "0.5.2" 4988 - source = "registry+https://github.com/rust-lang/crates.io-index" 4989 - checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" 4990 - dependencies = [ 4991 - "objc-sys", 4992 - "objc2-encode", 4993 5307 ] 4994 5308 4995 5309 [[package]] ··· 4999 5313 checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" 5000 5314 dependencies = [ 5001 5315 "objc2-encode", 5002 - ] 5003 - 5004 - [[package]] 5005 - name = "objc2-app-kit" 5006 - version = "0.2.2" 5007 - source = "registry+https://github.com/rust-lang/crates.io-index" 5008 - checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" 5009 - dependencies = [ 5010 - "bitflags 2.10.0", 5011 - "block2 0.5.1", 5012 - "libc", 5013 - "objc2 0.5.2", 5014 - "objc2-core-data", 5015 - "objc2-core-image", 5016 - "objc2-foundation 0.2.2", 5017 - "objc2-quartz-core", 5316 + "objc2-exception-helper", 5018 5317 ] 5019 5318 5020 5319 [[package]] ··· 5024 5323 checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" 5025 5324 dependencies = [ 5026 5325 "bitflags 2.10.0", 5027 - "objc2 0.6.3", 5326 + "block2", 5327 + "objc2", 5028 5328 "objc2-core-foundation", 5029 - "objc2-foundation 0.3.2", 5030 - ] 5031 - 5032 - [[package]] 5033 - name = "objc2-core-data" 5034 - version = "0.2.2" 5035 - source = "registry+https://github.com/rust-lang/crates.io-index" 5036 - checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" 5037 - dependencies = [ 5038 - "bitflags 2.10.0", 5039 - "block2 0.5.1", 5040 - "objc2 0.5.2", 5041 - "objc2-foundation 0.2.2", 5329 + "objc2-foundation", 5042 5330 ] 5043 5331 5044 5332 [[package]] ··· 5049 5337 dependencies = [ 5050 5338 "bitflags 2.10.0", 5051 5339 "dispatch2", 5052 - "objc2 0.6.3", 5340 + "objc2", 5053 5341 ] 5054 5342 5055 5343 [[package]] ··· 5063 5351 ] 5064 5352 5065 5353 [[package]] 5066 - name = "objc2-core-image" 5067 - version = "0.2.2" 5068 - source = "registry+https://github.com/rust-lang/crates.io-index" 5069 - checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" 5070 - dependencies = [ 5071 - "block2 0.5.1", 5072 - "objc2 0.5.2", 5073 - "objc2-foundation 0.2.2", 5074 - "objc2-metal", 5075 - ] 5076 - 5077 - [[package]] 5078 5354 name = "objc2-encode" 5079 5355 version = "4.1.0" 5080 5356 source = "registry+https://github.com/rust-lang/crates.io-index" 5081 5357 checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" 5082 5358 5083 5359 [[package]] 5084 - name = "objc2-foundation" 5085 - version = "0.2.2" 5360 + name = "objc2-exception-helper" 5361 + version = "0.1.1" 5086 5362 source = "registry+https://github.com/rust-lang/crates.io-index" 5087 - checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 5363 + checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" 5088 5364 dependencies = [ 5089 - "bitflags 2.10.0", 5090 - "block2 0.5.1", 5091 - "libc", 5092 - "objc2 0.5.2", 5365 + "cc", 5093 5366 ] 5094 5367 5095 5368 [[package]] ··· 5099 5372 checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" 5100 5373 dependencies = [ 5101 5374 "bitflags 2.10.0", 5102 - "block2 0.6.2", 5103 - "objc2 0.6.3", 5375 + "block2", 5376 + "objc2", 5104 5377 "objc2-core-foundation", 5105 5378 ] 5106 5379 5107 5380 [[package]] 5108 - name = "objc2-metal" 5109 - version = "0.2.2" 5381 + name = "objc2-ui-kit" 5382 + version = "0.3.2" 5110 5383 source = "registry+https://github.com/rust-lang/crates.io-index" 5111 - checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 5384 + checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" 5112 5385 dependencies = [ 5113 5386 "bitflags 2.10.0", 5114 - "block2 0.5.1", 5115 - "objc2 0.5.2", 5116 - "objc2-foundation 0.2.2", 5387 + "objc2", 5388 + "objc2-core-foundation", 5389 + "objc2-foundation", 5117 5390 ] 5118 5391 5119 5392 [[package]] 5120 - name = "objc2-quartz-core" 5121 - version = "0.2.2" 5393 + name = "objc2-web-kit" 5394 + version = "0.3.2" 5122 5395 source = "registry+https://github.com/rust-lang/crates.io-index" 5123 - checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 5396 + checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" 5124 5397 dependencies = [ 5125 5398 "bitflags 2.10.0", 5126 - "block2 0.5.1", 5127 - "objc2 0.5.2", 5128 - "objc2-foundation 0.2.2", 5129 - "objc2-metal", 5130 - ] 5131 - 5132 - [[package]] 5133 - name = "objc_exception" 5134 - version = "0.1.2" 5135 - source = "registry+https://github.com/rust-lang/crates.io-index" 5136 - checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" 5137 - dependencies = [ 5138 - "cc", 5399 + "block2", 5400 + "objc2", 5401 + "objc2-app-kit", 5402 + "objc2-core-foundation", 5403 + "objc2-foundation", 5139 5404 ] 5140 5405 5141 5406 [[package]] ··· 5153 5418 source = "registry+https://github.com/rust-lang/crates.io-index" 5154 5419 checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" 5155 5420 dependencies = [ 5156 - "memchr 2.7.6", 5421 + "memchr", 5157 5422 ] 5158 5423 5159 5424 [[package]] ··· 5197 5462 checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" 5198 5463 dependencies = [ 5199 5464 "bitflags 2.10.0", 5200 - "cfg-if 1.0.4", 5465 + "cfg-if", 5201 5466 "foreign-types 0.3.2", 5202 5467 "libc", 5203 5468 "once_cell", ··· 5346 5611 5347 5612 [[package]] 5348 5613 name = "parking_lot" 5349 - version = "0.10.2" 5350 - source = "registry+https://github.com/rust-lang/crates.io-index" 5351 - checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" 5352 - dependencies = [ 5353 - "lock_api 0.3.4", 5354 - "parking_lot_core 0.7.3", 5355 - ] 5356 - 5357 - [[package]] 5358 - name = "parking_lot" 5359 5614 version = "0.12.5" 5360 5615 source = "registry+https://github.com/rust-lang/crates.io-index" 5361 5616 checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 5362 5617 dependencies = [ 5363 - "lock_api 0.4.14", 5364 - "parking_lot_core 0.9.12", 5365 - ] 5366 - 5367 - [[package]] 5368 - name = "parking_lot_core" 5369 - version = "0.7.3" 5370 - source = "registry+https://github.com/rust-lang/crates.io-index" 5371 - checksum = "b93f386bb233083c799e6e642a9d73db98c24a5deeb95ffc85bf281255dffc98" 5372 - dependencies = [ 5373 - "cfg-if 0.1.10", 5374 - "cloudabi", 5375 - "libc", 5376 - "redox_syscall 0.1.57", 5377 - "smallvec", 5378 - "winapi", 5618 + "lock_api", 5619 + "parking_lot_core", 5379 5620 ] 5380 5621 5381 5622 [[package]] ··· 5384 5625 source = "registry+https://github.com/rust-lang/crates.io-index" 5385 5626 checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 5386 5627 dependencies = [ 5387 - "cfg-if 1.0.4", 5628 + "cfg-if", 5388 5629 "libc", 5389 - "redox_syscall 0.5.18", 5630 + "redox_syscall", 5390 5631 "smallvec", 5391 5632 "windows-link 0.2.1", 5392 5633 ] 5393 - 5394 - [[package]] 5395 - name = "pathdiff" 5396 - version = "0.2.3" 5397 - source = "registry+https://github.com/rust-lang/crates.io-index" 5398 - checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" 5399 5634 5400 5635 [[package]] 5401 5636 name = "pem-rfc7468" ··· 5413 5648 checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 5414 5649 5415 5650 [[package]] 5416 - name = "petgraph" 5417 - version = "0.5.1" 5418 - source = "registry+https://github.com/rust-lang/crates.io-index" 5419 - checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" 5420 - dependencies = [ 5421 - "fixedbitset", 5422 - "indexmap 1.9.3", 5423 - ] 5424 - 5425 - [[package]] 5426 5651 name = "phf" 5427 5652 version = "0.8.0" 5428 5653 source = "registry+https://github.com/rust-lang/crates.io-index" 5429 5654 checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" 5430 5655 dependencies = [ 5431 - "phf_macros", 5432 5656 "phf_shared 0.8.0", 5433 - "proc-macro-hack", 5434 5657 ] 5435 5658 5436 5659 [[package]] ··· 5439 5662 source = "registry+https://github.com/rust-lang/crates.io-index" 5440 5663 checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" 5441 5664 dependencies = [ 5665 + "phf_macros", 5442 5666 "phf_shared 0.10.0", 5667 + "proc-macro-hack", 5443 5668 ] 5444 5669 5445 5670 [[package]] ··· 5473 5698 5474 5699 [[package]] 5475 5700 name = "phf_codegen" 5476 - version = "0.10.0" 5477 - source = "registry+https://github.com/rust-lang/crates.io-index" 5478 - checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" 5479 - dependencies = [ 5480 - "phf_generator 0.10.0", 5481 - "phf_shared 0.10.0", 5482 - ] 5483 - 5484 - [[package]] 5485 - name = "phf_codegen" 5486 5701 version = "0.11.3" 5487 5702 source = "registry+https://github.com/rust-lang/crates.io-index" 5488 5703 checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" ··· 5523 5738 5524 5739 [[package]] 5525 5740 name = "phf_macros" 5526 - version = "0.8.0" 5741 + version = "0.10.0" 5527 5742 source = "registry+https://github.com/rust-lang/crates.io-index" 5528 - checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" 5743 + checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" 5529 5744 dependencies = [ 5530 - "phf_generator 0.8.0", 5531 - "phf_shared 0.8.0", 5745 + "phf_generator 0.10.0", 5746 + "phf_shared 0.10.0", 5532 5747 "proc-macro-hack", 5533 5748 "proc-macro2", 5534 5749 "quote", ··· 5604 5819 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 5605 5820 5606 5821 [[package]] 5607 - name = "piper" 5608 - version = "0.2.4" 5609 - source = "registry+https://github.com/rust-lang/crates.io-index" 5610 - checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" 5611 - dependencies = [ 5612 - "atomic-waker", 5613 - "fastrand", 5614 - "futures-io", 5615 - ] 5616 - 5617 - [[package]] 5618 5822 name = "pkcs1" 5619 5823 version = "0.7.5" 5620 5824 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5649 5853 dependencies = [ 5650 5854 "base64 0.22.1", 5651 5855 "indexmap 2.12.0", 5652 - "quick-xml", 5856 + "quick-xml 0.38.3", 5653 5857 "serde", 5654 5858 "time", 5655 5859 ] ··· 5668 5872 ] 5669 5873 5670 5874 [[package]] 5671 - name = "polling" 5672 - version = "3.11.0" 5673 - source = "registry+https://github.com/rust-lang/crates.io-index" 5674 - checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" 5675 - dependencies = [ 5676 - "cfg-if 1.0.4", 5677 - "concurrent-queue", 5678 - "hermit-abi 0.5.2", 5679 - "pin-project-lite", 5680 - "rustix", 5681 - "windows-sys 0.61.2", 5682 - ] 5683 - 5684 - [[package]] 5685 5875 name = "pollster" 5686 - version = "0.3.0" 5876 + version = "0.4.0" 5687 5877 source = "registry+https://github.com/rust-lang/crates.io-index" 5688 - checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" 5878 + checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" 5689 5879 5690 5880 [[package]] 5691 5881 name = "portable-atomic" ··· 5705 5895 "fallible-iterator", 5706 5896 "hmac", 5707 5897 "md-5", 5708 - "memchr 2.7.6", 5898 + "memchr", 5709 5899 "rand 0.9.2", 5710 5900 "sha2", 5711 5901 "stringprep", ··· 5863 6053 ] 5864 6054 5865 6055 [[package]] 6056 + name = "psl-types" 6057 + version = "2.0.11" 6058 + source = "registry+https://github.com/rust-lang/crates.io-index" 6059 + checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" 6060 + 6061 + [[package]] 6062 + name = "publicsuffix" 6063 + version = "2.3.0" 6064 + source = "registry+https://github.com/rust-lang/crates.io-index" 6065 + checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" 6066 + dependencies = [ 6067 + "idna", 6068 + "psl-types", 6069 + ] 6070 + 6071 + [[package]] 6072 + name = "pulldown-cmark" 6073 + version = "0.9.6" 6074 + source = "registry+https://github.com/rust-lang/crates.io-index" 6075 + checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" 6076 + dependencies = [ 6077 + "bitflags 2.10.0", 6078 + "memchr", 6079 + "unicase", 6080 + ] 6081 + 6082 + [[package]] 5866 6083 name = "quick-error" 5867 6084 version = "1.2.3" 5868 6085 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5870 6087 5871 6088 [[package]] 5872 6089 name = "quick-xml" 6090 + version = "0.37.5" 6091 + source = "registry+https://github.com/rust-lang/crates.io-index" 6092 + checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" 6093 + dependencies = [ 6094 + "memchr", 6095 + ] 6096 + 6097 + [[package]] 6098 + name = "quick-xml" 5873 6099 version = "0.38.3" 5874 6100 source = "registry+https://github.com/rust-lang/crates.io-index" 5875 6101 checksum = "42a232e7487fc2ef313d96dde7948e7a3c05101870d8985e4fd8d26aedd27b89" 5876 6102 dependencies = [ 5877 - "memchr 2.7.6", 6103 + "memchr", 5878 6104 ] 5879 6105 5880 6106 [[package]] ··· 6077 6303 6078 6304 [[package]] 6079 6305 name = "redox_syscall" 6080 - version = "0.1.57" 6081 - source = "registry+https://github.com/rust-lang/crates.io-index" 6082 - checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" 6083 - 6084 - [[package]] 6085 - name = "redox_syscall" 6086 6306 version = "0.5.18" 6087 6307 source = "registry+https://github.com/rust-lang/crates.io-index" 6088 6308 checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" ··· 6128 6348 checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" 6129 6349 dependencies = [ 6130 6350 "aho-corasick", 6131 - "memchr 2.7.6", 6351 + "memchr", 6132 6352 "regex-automata", 6133 6353 "regex-syntax", 6134 6354 ] ··· 6140 6360 checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" 6141 6361 dependencies = [ 6142 6362 "aho-corasick", 6143 - "memchr 2.7.6", 6363 + "memchr", 6144 6364 "regex-syntax", 6145 6365 ] 6146 6366 ··· 6159 6379 "async-compression", 6160 6380 "base64 0.22.1", 6161 6381 "bytes", 6382 + "cookie", 6383 + "cookie_store", 6162 6384 "encoding_rs", 6163 6385 "futures-core", 6164 6386 "futures-util", ··· 6217 6439 6218 6440 [[package]] 6219 6441 name = "rfd" 6220 - version = "0.14.1" 6442 + version = "0.15.4" 6221 6443 source = "registry+https://github.com/rust-lang/crates.io-index" 6222 - checksum = "25a73a7337fc24366edfca76ec521f51877b114e42dab584008209cca6719251" 6444 + checksum = "ef2bee61e6cffa4635c72d7d81a84294e28f0930db0ddcb0f66d10244674ebed" 6223 6445 dependencies = [ 6224 6446 "ashpd", 6225 - "block", 6226 - "dispatch", 6447 + "block2", 6448 + "dispatch2", 6227 6449 "js-sys", 6228 6450 "log", 6229 - "objc", 6230 - "objc-foundation", 6231 - "objc_id", 6451 + "objc2", 6452 + "objc2-app-kit", 6453 + "objc2-core-foundation", 6454 + "objc2-foundation", 6232 6455 "pollster", 6233 6456 "raw-window-handle 0.6.2", 6234 6457 "urlencoding", 6235 6458 "wasm-bindgen", 6236 6459 "wasm-bindgen-futures", 6237 6460 "web-sys", 6238 - "windows-sys 0.48.0", 6461 + "windows-sys 0.59.0", 6239 6462 ] 6240 6463 6241 6464 [[package]] ··· 6245 6468 checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 6246 6469 dependencies = [ 6247 6470 "cc", 6248 - "cfg-if 1.0.4", 6471 + "cfg-if", 6249 6472 "getrandom 0.2.16", 6250 6473 "libc", 6251 6474 "untrusted", ··· 6459 6682 checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 6460 6683 6461 6684 [[package]] 6462 - name = "scoped_threadpool" 6463 - version = "0.1.9" 6464 - source = "registry+https://github.com/rust-lang/crates.io-index" 6465 - checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" 6466 - 6467 - [[package]] 6468 6685 name = "scopeguard" 6469 6686 version = "1.2.0" 6470 6687 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 6533 6750 6534 6751 [[package]] 6535 6752 name = "selectors" 6536 - version = "0.22.0" 6753 + version = "0.24.0" 6537 6754 source = "registry+https://github.com/rust-lang/crates.io-index" 6538 - checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" 6755 + checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" 6539 6756 dependencies = [ 6540 6757 "bitflags 1.3.2", 6541 6758 "cssparser", 6542 6759 "derive_more 0.99.20", 6543 6760 "fxhash", 6544 6761 "log", 6545 - "matches", 6546 6762 "phf 0.8.0", 6547 6763 "phf_codegen 0.8.0", 6548 6764 "precomputed-hash", 6549 6765 "servo_arc", 6550 6766 "smallvec", 6551 - "thin-slice", 6552 6767 ] 6553 6768 6554 6769 [[package]] ··· 6556 6771 version = "1.0.27" 6557 6772 source = "registry+https://github.com/rust-lang/crates.io-index" 6558 6773 checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 6774 + dependencies = [ 6775 + "serde", 6776 + "serde_core", 6777 + ] 6559 6778 6560 6779 [[package]] 6561 6780 name = "send_wrapper" ··· 6588 6807 6589 6808 [[package]] 6590 6809 name = "serde-wasm-bindgen" 6591 - version = "0.5.0" 6810 + version = "0.6.5" 6592 6811 source = "registry+https://github.com/rust-lang/crates.io-index" 6593 - checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" 6812 + checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" 6594 6813 dependencies = [ 6595 6814 "js-sys", 6596 6815 "serde", ··· 6608 6827 ] 6609 6828 6610 6829 [[package]] 6611 - name = "serde_cbor" 6612 - version = "0.11.2" 6613 - source = "registry+https://github.com/rust-lang/crates.io-index" 6614 - checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" 6615 - dependencies = [ 6616 - "half 1.8.3", 6617 - "serde", 6618 - ] 6619 - 6620 - [[package]] 6621 6830 name = "serde_core" 6622 6831 version = "1.0.228" 6623 6832 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 6645 6854 dependencies = [ 6646 6855 "form_urlencoded", 6647 6856 "indexmap 2.12.0", 6648 - "itoa 1.0.15", 6857 + "itoa", 6649 6858 "ryu", 6650 6859 "serde_core", 6651 6860 ] ··· 6669 6878 checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" 6670 6879 dependencies = [ 6671 6880 "indexmap 2.12.0", 6672 - "itoa 1.0.15", 6673 - "memchr 2.7.6", 6881 + "itoa", 6882 + "memchr", 6674 6883 "ryu", 6675 6884 "serde", 6676 6885 "serde_core", ··· 6682 6891 source = "registry+https://github.com/rust-lang/crates.io-index" 6683 6892 checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" 6684 6893 dependencies = [ 6685 - "itoa 1.0.15", 6894 + "itoa", 6686 6895 "serde", 6687 6896 "serde_core", 6688 6897 ] 6689 6898 6690 6899 [[package]] 6691 6900 name = "serde_qs" 6692 - version = "0.12.0" 6901 + version = "0.15.0" 6693 6902 source = "registry+https://github.com/rust-lang/crates.io-index" 6694 - checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c" 6903 + checksum = "f3faaf9e727533a19351a43cc5a8de957372163c7d35cc48c90b75cdda13c352" 6695 6904 dependencies = [ 6696 6905 "percent-encoding", 6697 6906 "serde", 6698 - "thiserror 1.0.69", 6907 + "thiserror 2.0.17", 6699 6908 ] 6700 6909 6701 6910 [[package]] ··· 6734 6943 checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 6735 6944 dependencies = [ 6736 6945 "form_urlencoded", 6737 - "itoa 1.0.15", 6946 + "itoa", 6738 6947 "ryu", 6739 6948 "serde", 6740 6949 ] ··· 6781 6990 ] 6782 6991 6783 6992 [[package]] 6784 - name = "server_fn" 6785 - version = "0.6.15" 6786 - source = "registry+https://github.com/rust-lang/crates.io-index" 6787 - checksum = "4fae7a3038a32e5a34ba32c6c45eb4852f8affaf8b794ebfcd4b1099e2d62ebe" 6788 - dependencies = [ 6789 - "bytes", 6790 - "const_format", 6791 - "dashmap 5.5.3", 6792 - "futures", 6793 - "gloo-net", 6794 - "http", 6795 - "js-sys", 6796 - "once_cell", 6797 - "reqwest", 6798 - "send_wrapper", 6799 - "serde", 6800 - "serde_json", 6801 - "serde_qs", 6802 - "server_fn_macro_default", 6803 - "thiserror 1.0.69", 6804 - "url", 6805 - "wasm-bindgen", 6806 - "wasm-bindgen-futures", 6807 - "wasm-streams", 6808 - "web-sys", 6809 - "xxhash-rust", 6810 - ] 6811 - 6812 - [[package]] 6813 - name = "server_fn_macro" 6814 - version = "0.6.15" 6815 - source = "registry+https://github.com/rust-lang/crates.io-index" 6816 - checksum = "faaaf648c6967aef78177c0610478abb5a3455811f401f3c62d10ae9bd3901a1" 6817 - dependencies = [ 6818 - "const_format", 6819 - "convert_case 0.6.0", 6820 - "proc-macro2", 6821 - "quote", 6822 - "syn 2.0.108", 6823 - "xxhash-rust", 6824 - ] 6825 - 6826 - [[package]] 6827 - name = "server_fn_macro_default" 6828 - version = "0.6.15" 6829 - source = "registry+https://github.com/rust-lang/crates.io-index" 6830 - checksum = "7f2aa8119b558a17992e0ac1fd07f080099564f24532858811ce04f742542440" 6831 - dependencies = [ 6832 - "server_fn_macro", 6833 - "syn 2.0.108", 6834 - ] 6835 - 6836 - [[package]] 6837 6993 name = "servo_arc" 6838 - version = "0.1.1" 6994 + version = "0.2.0" 6839 6995 source = "registry+https://github.com/rust-lang/crates.io-index" 6840 - checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" 6996 + checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" 6841 6997 dependencies = [ 6842 6998 "nodrop", 6843 6999 "stable_deref_trait", ··· 6849 7005 source = "registry+https://github.com/rust-lang/crates.io-index" 6850 7006 checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 6851 7007 dependencies = [ 6852 - "cfg-if 1.0.4", 7008 + "cfg-if", 6853 7009 "cpufeatures", 6854 7010 "digest", 6855 7011 ] ··· 6866 7022 source = "registry+https://github.com/rust-lang/crates.io-index" 6867 7023 checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 6868 7024 dependencies = [ 6869 - "cfg-if 1.0.4", 7025 + "cfg-if", 6870 7026 "cpufeatures", 6871 7027 "digest", 6872 7028 ] ··· 6938 7094 version = "1.0.1" 6939 7095 source = "registry+https://github.com/rust-lang/crates.io-index" 6940 7096 checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 7097 + 7098 + [[package]] 7099 + name = "skeptic" 7100 + version = "0.13.7" 7101 + source = "registry+https://github.com/rust-lang/crates.io-index" 7102 + checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" 7103 + dependencies = [ 7104 + "bytecount", 7105 + "cargo_metadata", 7106 + "error-chain", 7107 + "glob", 7108 + "pulldown-cmark", 7109 + "tempfile", 7110 + "walkdir", 7111 + ] 6941 7112 6942 7113 [[package]] 6943 7114 name = "slab" ··· 7107 7278 checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" 7108 7279 dependencies = [ 7109 7280 "new_debug_unreachable", 7110 - "parking_lot 0.12.5", 7281 + "parking_lot", 7111 7282 "phf_shared 0.11.3", 7112 7283 "precomputed-hash", 7113 7284 "serde", ··· 7138 7309 7139 7310 [[package]] 7140 7311 name = "strsim" 7141 - version = "0.8.0" 7312 + version = "0.11.1" 7142 7313 source = "registry+https://github.com/rust-lang/crates.io-index" 7143 - checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 7314 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 7144 7315 7145 7316 [[package]] 7146 - name = "strsim" 7147 - version = "0.11.1" 7317 + name = "subsecond" 7318 + version = "0.7.0" 7148 7319 source = "registry+https://github.com/rust-lang/crates.io-index" 7149 - checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 7320 + checksum = "e778134c310fa884270b226bbf58df76da727acf921f46834b0af896d739235c" 7321 + dependencies = [ 7322 + "js-sys", 7323 + "libc", 7324 + "libloading 0.8.9", 7325 + "memfd", 7326 + "memmap2", 7327 + "serde", 7328 + "subsecond-types", 7329 + "thiserror 2.0.17", 7330 + "wasm-bindgen", 7331 + "wasm-bindgen-futures", 7332 + "web-sys", 7333 + ] 7334 + 7335 + [[package]] 7336 + name = "subsecond-types" 7337 + version = "0.7.0" 7338 + source = "registry+https://github.com/rust-lang/crates.io-index" 7339 + checksum = "fcfc02dd02f2ce7c9aa6c0eb4f490fc455925c2590de7a3c54dde088c3ef481d" 7340 + dependencies = [ 7341 + "serde", 7342 + ] 7150 7343 7151 7344 [[package]] 7152 7345 name = "subtle" ··· 7274 7467 ] 7275 7468 7276 7469 [[package]] 7277 - name = "tabwriter" 7278 - version = "1.4.1" 7279 - source = "registry+https://github.com/rust-lang/crates.io-index" 7280 - checksum = "fce91f2f0ec87dff7e6bcbbeb267439aa1188703003c6055193c821487400432" 7281 - dependencies = [ 7282 - "unicode-width 0.2.2", 7283 - ] 7284 - 7285 - [[package]] 7286 7470 name = "tagptr" 7287 7471 version = "0.2.0" 7288 7472 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 7290 7474 7291 7475 [[package]] 7292 7476 name = "tao" 7293 - version = "0.30.8" 7477 + version = "0.34.5" 7294 7478 source = "registry+https://github.com/rust-lang/crates.io-index" 7295 - checksum = "6682a07cf5bab0b8a2bd20d0a542917ab928b5edb75ebd4eda6b05cbaab872da" 7479 + checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" 7296 7480 dependencies = [ 7297 7481 "bitflags 2.10.0", 7298 - "cocoa 0.26.1", 7482 + "block2", 7299 7483 "core-foundation 0.10.1", 7300 - "core-graphics 0.24.0", 7484 + "core-graphics", 7301 7485 "crossbeam-channel", 7302 7486 "dispatch", 7303 7487 "dlopen2", ··· 7305 7489 "gdkwayland-sys", 7306 7490 "gdkx11-sys", 7307 7491 "gtk", 7308 - "instant", 7309 7492 "jni", 7310 7493 "lazy_static", 7311 7494 "libc", ··· 7313 7496 "ndk", 7314 7497 "ndk-context", 7315 7498 "ndk-sys", 7316 - "objc", 7499 + "objc2", 7500 + "objc2-app-kit", 7501 + "objc2-foundation", 7317 7502 "once_cell", 7318 - "parking_lot 0.12.5", 7503 + "parking_lot", 7319 7504 "raw-window-handle 0.5.2", 7320 7505 "raw-window-handle 0.6.2", 7321 7506 "scopeguard", 7322 7507 "tao-macros", 7323 7508 "unicode-segmentation", 7324 7509 "url", 7325 - "windows 0.58.0", 7326 - "windows-core 0.58.0", 7510 + "windows", 7511 + "windows-core 0.61.2", 7327 7512 "windows-version", 7328 7513 "x11-dl", 7329 7514 ] ··· 7381 7566 7382 7567 [[package]] 7383 7568 name = "textwrap" 7384 - version = "0.11.0" 7385 - source = "registry+https://github.com/rust-lang/crates.io-index" 7386 - checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 7387 - dependencies = [ 7388 - "unicode-width 0.1.14", 7389 - ] 7390 - 7391 - [[package]] 7392 - name = "textwrap" 7393 7569 version = "0.16.2" 7394 7570 source = "registry+https://github.com/rust-lang/crates.io-index" 7395 7571 checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" ··· 7399 7575 ] 7400 7576 7401 7577 [[package]] 7402 - name = "thin-slice" 7403 - version = "0.1.1" 7404 - source = "registry+https://github.com/rust-lang/crates.io-index" 7405 - checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" 7406 - 7407 - [[package]] 7408 7578 name = "thiserror" 7409 7579 version = "1.0.69" 7410 7580 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 7450 7620 source = "registry+https://github.com/rust-lang/crates.io-index" 7451 7621 checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 7452 7622 dependencies = [ 7453 - "cfg-if 1.0.4", 7623 + "cfg-if", 7454 7624 ] 7455 7625 7456 7626 [[package]] ··· 7469 7639 checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" 7470 7640 dependencies = [ 7471 7641 "deranged", 7472 - "itoa 1.0.15", 7642 + "itoa", 7473 7643 "libc", 7474 7644 "num-conv", 7475 7645 "num_threads", ··· 7541 7711 "bytes", 7542 7712 "libc", 7543 7713 "mio", 7544 - "parking_lot 0.12.5", 7714 + "parking_lot", 7545 7715 "pin-project-lite", 7546 7716 "signal-hook-registry", 7547 7717 "socket2 0.6.1", ··· 7584 7754 "futures-channel", 7585 7755 "futures-util", 7586 7756 "log", 7587 - "parking_lot 0.12.5", 7757 + "parking_lot", 7588 7758 "percent-encoding", 7589 7759 "phf 0.13.1", 7590 7760 "pin-project-lite", ··· 7608 7778 ] 7609 7779 7610 7780 [[package]] 7781 + name = "tokio-stream" 7782 + version = "0.1.17" 7783 + source = "registry+https://github.com/rust-lang/crates.io-index" 7784 + checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" 7785 + dependencies = [ 7786 + "futures-core", 7787 + "pin-project-lite", 7788 + "tokio", 7789 + "tokio-util", 7790 + ] 7791 + 7792 + [[package]] 7611 7793 name = "tokio-tungstenite" 7612 7794 version = "0.24.0" 7613 7795 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 7624 7806 ] 7625 7807 7626 7808 [[package]] 7809 + name = "tokio-tungstenite" 7810 + version = "0.27.0" 7811 + source = "registry+https://github.com/rust-lang/crates.io-index" 7812 + checksum = "489a59b6730eda1b0171fcfda8b121f4bee2b35cba8645ca35c5f7ba3eb736c1" 7813 + dependencies = [ 7814 + "futures-util", 7815 + "log", 7816 + "tokio", 7817 + "tungstenite 0.27.0", 7818 + ] 7819 + 7820 + [[package]] 7821 + name = "tokio-tungstenite" 7822 + version = "0.28.0" 7823 + source = "registry+https://github.com/rust-lang/crates.io-index" 7824 + checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" 7825 + dependencies = [ 7826 + "futures-util", 7827 + "log", 7828 + "tokio", 7829 + "tungstenite 0.28.0", 7830 + ] 7831 + 7832 + [[package]] 7627 7833 name = "tokio-tungstenite-wasm" 7628 7834 version = "0.4.0" 7629 7835 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 7637 7843 "rustls", 7638 7844 "thiserror 1.0.69", 7639 7845 "tokio", 7640 - "tokio-tungstenite", 7846 + "tokio-tungstenite 0.24.0", 7641 7847 "wasm-bindgen", 7642 7848 "web-sys", 7643 7849 ] ··· 7650 7856 dependencies = [ 7651 7857 "bytes", 7652 7858 "futures-core", 7859 + "futures-io", 7653 7860 "futures-sink", 7654 7861 "futures-util", 7655 7862 "pin-project-lite", ··· 7797 8004 "cookie", 7798 8005 "futures-util", 7799 8006 "http", 7800 - "parking_lot 0.12.5", 8007 + "parking_lot", 7801 8008 "pin-project-lite", 7802 8009 "tower-layer", 7803 8010 "tower-service", ··· 7863 8070 checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" 7864 8071 dependencies = [ 7865 8072 "crossbeam-channel", 7866 - "parking_lot 0.12.5", 8073 + "parking_lot", 7867 8074 "thiserror 1.0.69", 7868 8075 "time", 7869 8076 "tracing-subscriber", ··· 7891 8098 ] 7892 8099 7893 8100 [[package]] 8101 + name = "tracing-futures" 8102 + version = "0.2.5" 8103 + source = "registry+https://github.com/rust-lang/crates.io-index" 8104 + checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" 8105 + dependencies = [ 8106 + "pin-project", 8107 + "tracing", 8108 + ] 8109 + 8110 + [[package]] 7894 8111 name = "tracing-log" 7895 8112 version = "0.2.0" 7896 8113 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 7956 8173 7957 8174 [[package]] 7958 8175 name = "tray-icon" 7959 - version = "0.19.3" 8176 + version = "0.21.2" 7960 8177 source = "registry+https://github.com/rust-lang/crates.io-index" 7961 - checksum = "eadd75f5002e2513eaa19b2365f533090cc3e93abd38788452d9ea85cff7b48a" 8178 + checksum = "e3d5572781bee8e3f994d7467084e1b1fd7a93ce66bd480f8156ba89dee55a2b" 7962 8179 dependencies = [ 7963 8180 "crossbeam-channel", 7964 8181 "dirs", 7965 8182 "libappindicator", 7966 - "muda 0.15.3", 7967 - "objc2 0.6.3", 7968 - "objc2-app-kit 0.3.2", 8183 + "muda", 8184 + "objc2", 8185 + "objc2-app-kit", 7969 8186 "objc2-core-foundation", 7970 8187 "objc2-core-graphics", 7971 - "objc2-foundation 0.3.2", 8188 + "objc2-foundation", 7972 8189 "once_cell", 7973 8190 "png", 7974 8191 "thiserror 2.0.17", 7975 - "windows-sys 0.59.0", 8192 + "windows-sys 0.60.2", 7976 8193 ] 7977 8194 7978 8195 [[package]] 7979 - name = "tree_magic" 7980 - version = "0.2.3" 8196 + name = "triomphe" 8197 + version = "0.1.15" 7981 8198 source = "registry+https://github.com/rust-lang/crates.io-index" 7982 - checksum = "b1d99367ce3e553a84738f73bd626ccca541ef90ae757fdcdc4cbe728e6cb629" 7983 - dependencies = [ 7984 - "clap 2.34.0", 7985 - "fnv", 7986 - "lazy_static", 7987 - "nom 3.2.1", 7988 - "num_cpus", 7989 - "parking_lot 0.10.2", 7990 - "petgraph", 7991 - "scoped_threadpool", 7992 - "tabwriter", 7993 - "walkdir", 7994 - ] 8199 + checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" 7995 8200 7996 8201 [[package]] 7997 8202 name = "try-lock" ··· 8001 8206 8002 8207 [[package]] 8003 8208 name = "tungstenite" 8004 - version = "0.23.0" 8209 + version = "0.24.0" 8005 8210 source = "registry+https://github.com/rust-lang/crates.io-index" 8006 - checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" 8211 + checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" 8007 8212 dependencies = [ 8008 8213 "byteorder", 8009 8214 "bytes", ··· 8012 8217 "httparse", 8013 8218 "log", 8014 8219 "rand 0.8.5", 8220 + "rustls", 8221 + "rustls-pki-types", 8015 8222 "sha1", 8016 8223 "thiserror 1.0.69", 8017 8224 "utf-8", ··· 8019 8226 8020 8227 [[package]] 8021 8228 name = "tungstenite" 8022 - version = "0.24.0" 8229 + version = "0.27.0" 8023 8230 source = "registry+https://github.com/rust-lang/crates.io-index" 8024 - checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" 8231 + checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" 8025 8232 dependencies = [ 8026 - "byteorder", 8027 8233 "bytes", 8028 8234 "data-encoding", 8029 8235 "http", 8030 8236 "httparse", 8031 8237 "log", 8032 - "rand 0.8.5", 8238 + "native-tls", 8239 + "rand 0.9.2", 8033 8240 "rustls", 8034 - "rustls-pki-types", 8035 8241 "sha1", 8036 - "thiserror 1.0.69", 8242 + "thiserror 2.0.17", 8243 + "utf-8", 8244 + ] 8245 + 8246 + [[package]] 8247 + name = "tungstenite" 8248 + version = "0.28.0" 8249 + source = "registry+https://github.com/rust-lang/crates.io-index" 8250 + checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" 8251 + dependencies = [ 8252 + "bytes", 8253 + "data-encoding", 8254 + "http", 8255 + "httparse", 8256 + "log", 8257 + "rand 0.9.2", 8258 + "sha1", 8259 + "thiserror 2.0.17", 8037 8260 "utf-8", 8038 8261 ] 8039 8262 ··· 8043 8266 source = "registry+https://github.com/rust-lang/crates.io-index" 8044 8267 checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" 8045 8268 dependencies = [ 8046 - "memchr 2.7.6", 8269 + "memchr", 8047 8270 ] 8048 8271 8049 8272 [[package]] ··· 8199 8422 checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 8200 8423 8201 8424 [[package]] 8202 - name = "vec_map" 8203 - version = "0.8.2" 8204 - source = "registry+https://github.com/rust-lang/crates.io-index" 8205 - checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 8206 - 8207 - [[package]] 8208 8425 name = "version-compare" 8209 8426 version = "0.2.1" 8210 8427 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 8290 8507 source = "registry+https://github.com/rust-lang/crates.io-index" 8291 8508 checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" 8292 8509 dependencies = [ 8293 - "cfg-if 1.0.4", 8510 + "cfg-if", 8294 8511 "once_cell", 8295 8512 "rustversion", 8296 8513 "wasm-bindgen-macro", ··· 8303 8520 source = "registry+https://github.com/rust-lang/crates.io-index" 8304 8521 checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" 8305 8522 dependencies = [ 8306 - "cfg-if 1.0.4", 8523 + "cfg-if", 8307 8524 "js-sys", 8308 8525 "once_cell", 8309 8526 "wasm-bindgen", ··· 8356 8573 ] 8357 8574 8358 8575 [[package]] 8576 + name = "wayland-backend" 8577 + version = "0.3.11" 8578 + source = "registry+https://github.com/rust-lang/crates.io-index" 8579 + checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" 8580 + dependencies = [ 8581 + "cc", 8582 + "downcast-rs", 8583 + "rustix", 8584 + "scoped-tls", 8585 + "smallvec", 8586 + "wayland-sys", 8587 + ] 8588 + 8589 + [[package]] 8590 + name = "wayland-client" 8591 + version = "0.31.11" 8592 + source = "registry+https://github.com/rust-lang/crates.io-index" 8593 + checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" 8594 + dependencies = [ 8595 + "bitflags 2.10.0", 8596 + "rustix", 8597 + "wayland-backend", 8598 + "wayland-scanner", 8599 + ] 8600 + 8601 + [[package]] 8602 + name = "wayland-protocols" 8603 + version = "0.32.9" 8604 + source = "registry+https://github.com/rust-lang/crates.io-index" 8605 + checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" 8606 + dependencies = [ 8607 + "bitflags 2.10.0", 8608 + "wayland-backend", 8609 + "wayland-client", 8610 + "wayland-scanner", 8611 + ] 8612 + 8613 + [[package]] 8614 + name = "wayland-scanner" 8615 + version = "0.31.7" 8616 + source = "registry+https://github.com/rust-lang/crates.io-index" 8617 + checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" 8618 + dependencies = [ 8619 + "proc-macro2", 8620 + "quick-xml 0.37.5", 8621 + "quote", 8622 + ] 8623 + 8624 + [[package]] 8625 + name = "wayland-sys" 8626 + version = "0.31.7" 8627 + source = "registry+https://github.com/rust-lang/crates.io-index" 8628 + checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" 8629 + dependencies = [ 8630 + "dlib", 8631 + "log", 8632 + "pkg-config", 8633 + ] 8634 + 8635 + [[package]] 8359 8636 name = "weaver-api" 8360 8637 version = "0.1.0" 8361 8638 dependencies = [ ··· 8377 8654 dependencies = [ 8378 8655 "axum", 8379 8656 "chrono", 8380 - "clap 4.5.51", 8657 + "clap", 8381 8658 "dashmap 6.1.0", 8382 8659 "diesel", 8383 8660 "diesel-async", ··· 8407 8684 "url", 8408 8685 "uuid", 8409 8686 "weaver-common", 8410 - "weaver-workspace-hack", 8411 8687 ] 8412 8688 8413 8689 [[package]] 8414 8690 name = "weaver-cli" 8415 8691 version = "0.1.0" 8416 8692 dependencies = [ 8417 - "clap 4.5.51", 8693 + "clap", 8418 8694 "dirs", 8419 8695 "jacquard", 8420 8696 "jacquard-api", ··· 8423 8699 "tokio", 8424 8700 "weaver-common", 8425 8701 "weaver-renderer", 8426 - "weaver-workspace-hack", 8427 8702 ] 8428 8703 8429 8704 [[package]] 8430 8705 name = "weaver-common" 8431 8706 version = "0.1.0" 8432 8707 dependencies = [ 8433 - "dirs", 8434 - "hickory-resolver", 8435 8708 "http", 8436 8709 "jacquard", 8437 - "jose-jwk", 8438 8710 "markdown-weaver", 8439 8711 "markdown-weaver-escape", 8440 8712 "miette 7.6.0", 8713 + "mime-sniffer", 8441 8714 "minijinja", 8442 - "multibase", 8443 8715 "n0-future", 8444 8716 "owo-colors", 8445 8717 "regex", 8446 8718 "reqwest", 8447 8719 "serde", 8448 8720 "serde_bytes", 8449 - "serde_cbor", 8450 8721 "serde_html_form", 8451 8722 "serde_ipld_dagcbor", 8452 8723 "serde_json", 8453 8724 "thiserror 2.0.17", 8454 8725 "tokio", 8455 - "toml 0.8.23", 8456 - "tower-layer", 8457 - "tower-service", 8458 8726 "tracing", 8459 8727 "trait-variant", 8460 - "tree_magic", 8461 8728 "weaver-api", 8462 - "weaver-workspace-hack", 8463 8729 ] 8464 8730 8465 8731 [[package]] 8466 8732 name = "weaver-renderer" 8467 8733 version = "0.1.0" 8468 8734 dependencies = [ 8469 - "async-trait", 8470 8735 "bitflags 2.10.0", 8471 8736 "compact_string", 8472 8737 "dashmap 6.1.0", ··· 8478 8743 "markdown-weaver-escape", 8479 8744 "miette 7.6.0", 8480 8745 "n0-future", 8481 - "pathdiff", 8482 8746 "pin-project", 8483 8747 "pin-utils", 8484 8748 "regex", ··· 8491 8755 "unicode-normalization", 8492 8756 "url", 8493 8757 "weaver-common", 8494 - "weaver-workspace-hack", 8495 8758 "yaml-rust2", 8496 8759 ] 8497 8760 ··· 8499 8762 name = "weaver-server" 8500 8763 version = "0.1.0" 8501 8764 dependencies = [ 8765 + "dashmap 6.1.0", 8502 8766 "dioxus", 8767 + "dioxus-primitives", 8503 8768 "jacquard", 8769 + "jacquard-axum", 8770 + "markdown-weaver", 8771 + "mini-moka", 8772 + "moka", 8773 + "weaver-api", 8504 8774 "weaver-common", 8505 - "weaver-workspace-hack", 8506 - ] 8507 - 8508 - [[package]] 8509 - name = "weaver-workspace-hack" 8510 - version = "0.1.0" 8511 - dependencies = [ 8512 - "aho-corasick", 8513 - "byteorder", 8514 - "bytes", 8515 - "data-encoding", 8516 - "diesel", 8517 - "diesel-async", 8518 - "diesel_derives", 8519 - "elliptic-curve", 8520 - "futures-channel", 8521 - "futures-core", 8522 - "futures-task", 8523 - "futures-util", 8524 - "generic-array", 8525 - "hashbrown 0.15.5", 8526 - "idna", 8527 - "jacquard", 8528 - "jacquard-api", 8529 - "jacquard-common", 8530 - "jacquard-identity", 8531 - "jacquard-lexicon", 8532 - "jacquard-oauth", 8533 - "log", 8534 - "memchr 2.7.6", 8535 - "miette 7.6.0", 8536 - "minijinja", 8537 - "minimal-lexical", 8538 - "nom 7.1.3", 8539 - "num-traits", 8540 - "p384", 8541 - "percent-encoding", 8542 - "rand 0.8.5", 8543 - "regex-automata", 8544 - "reqwest", 8545 - "sec1", 8546 - "serde_json", 8547 - "sha2", 8548 - "smallvec", 8549 - "subtle", 8550 - "syn 2.0.108", 8551 - "syntect", 8552 - "time", 8553 - "tokio", 8554 - "tokio-util", 8555 - "toml 0.8.23", 8556 - "tower-http", 8557 - "tracing", 8558 - "tracing-core", 8559 - "uuid", 8560 - "winnow 0.7.13", 8561 - "zerocopy", 8562 - "zeroize", 8563 8775 ] 8564 8776 8565 8777 [[package]] ··· 8595 8807 "ndk-context", 8596 8808 "objc", 8597 8809 "raw-window-handle 0.5.2", 8810 + "url", 8811 + "web-sys", 8812 + ] 8813 + 8814 + [[package]] 8815 + name = "webbrowser" 8816 + version = "1.0.6" 8817 + source = "registry+https://github.com/rust-lang/crates.io-index" 8818 + checksum = "00f1243ef785213e3a32fa0396093424a3a6ea566f9948497e5a2309261a4c97" 8819 + dependencies = [ 8820 + "core-foundation 0.10.1", 8821 + "jni", 8822 + "log", 8823 + "ndk-context", 8824 + "objc2", 8825 + "objc2-foundation", 8598 8826 "url", 8599 8827 "web-sys", 8600 8828 ] ··· 8666 8894 8667 8895 [[package]] 8668 8896 name = "webview2-com" 8669 - version = "0.33.0" 8897 + version = "0.38.0" 8670 8898 source = "registry+https://github.com/rust-lang/crates.io-index" 8671 - checksum = "6f61ff3d9d0ee4efcb461b14eb3acfda2702d10dc329f339303fc3e57215ae2c" 8899 + checksum = "d4ba622a989277ef3886dd5afb3e280e3dd6d974b766118950a08f8f678ad6a4" 8672 8900 dependencies = [ 8673 8901 "webview2-com-macros", 8674 8902 "webview2-com-sys", 8675 - "windows 0.58.0", 8676 - "windows-core 0.58.0", 8677 - "windows-implement 0.58.0", 8678 - "windows-interface 0.58.0", 8903 + "windows", 8904 + "windows-core 0.61.2", 8905 + "windows-implement", 8906 + "windows-interface", 8679 8907 ] 8680 8908 8681 8909 [[package]] ··· 8691 8919 8692 8920 [[package]] 8693 8921 name = "webview2-com-sys" 8694 - version = "0.33.0" 8922 + version = "0.38.0" 8695 8923 source = "registry+https://github.com/rust-lang/crates.io-index" 8696 - checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886" 8924 + checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c" 8697 8925 dependencies = [ 8698 - "thiserror 1.0.69", 8699 - "windows 0.58.0", 8700 - "windows-core 0.58.0", 8926 + "thiserror 2.0.17", 8927 + "windows", 8928 + "windows-core 0.61.2", 8701 8929 ] 8702 8930 8703 8931 [[package]] ··· 8750 8978 8751 8979 [[package]] 8752 8980 name = "windows" 8753 - version = "0.58.0" 8754 - source = "registry+https://github.com/rust-lang/crates.io-index" 8755 - checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 8756 - dependencies = [ 8757 - "windows-core 0.58.0", 8758 - "windows-targets 0.52.6", 8759 - ] 8760 - 8761 - [[package]] 8762 - name = "windows" 8763 8981 version = "0.61.3" 8764 8982 source = "registry+https://github.com/rust-lang/crates.io-index" 8765 8983 checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" ··· 8782 9000 8783 9001 [[package]] 8784 9002 name = "windows-core" 8785 - version = "0.58.0" 8786 - source = "registry+https://github.com/rust-lang/crates.io-index" 8787 - checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 8788 - dependencies = [ 8789 - "windows-implement 0.58.0", 8790 - "windows-interface 0.58.0", 8791 - "windows-result 0.2.0", 8792 - "windows-strings 0.1.0", 8793 - "windows-targets 0.52.6", 8794 - ] 8795 - 8796 - [[package]] 8797 - name = "windows-core" 8798 9003 version = "0.61.2" 8799 9004 source = "registry+https://github.com/rust-lang/crates.io-index" 8800 9005 checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 8801 9006 dependencies = [ 8802 - "windows-implement 0.60.2", 8803 - "windows-interface 0.59.3", 9007 + "windows-implement", 9008 + "windows-interface", 8804 9009 "windows-link 0.1.3", 8805 9010 "windows-result 0.3.4", 8806 9011 "windows-strings 0.4.2", ··· 8812 9017 source = "registry+https://github.com/rust-lang/crates.io-index" 8813 9018 checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" 8814 9019 dependencies = [ 8815 - "windows-implement 0.60.2", 8816 - "windows-interface 0.59.3", 9020 + "windows-implement", 9021 + "windows-interface", 8817 9022 "windows-link 0.2.1", 8818 9023 "windows-result 0.4.1", 8819 9024 "windows-strings 0.5.1", ··· 8832 9037 8833 9038 [[package]] 8834 9039 name = "windows-implement" 8835 - version = "0.58.0" 8836 - source = "registry+https://github.com/rust-lang/crates.io-index" 8837 - checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 8838 - dependencies = [ 8839 - "proc-macro2", 8840 - "quote", 8841 - "syn 2.0.108", 8842 - ] 8843 - 8844 - [[package]] 8845 - name = "windows-implement" 8846 9040 version = "0.60.2" 8847 9041 source = "registry+https://github.com/rust-lang/crates.io-index" 8848 9042 checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" ··· 8854 9048 8855 9049 [[package]] 8856 9050 name = "windows-interface" 8857 - version = "0.58.0" 8858 - source = "registry+https://github.com/rust-lang/crates.io-index" 8859 - checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 8860 - dependencies = [ 8861 - "proc-macro2", 8862 - "quote", 8863 - "syn 2.0.108", 8864 - ] 8865 - 8866 - [[package]] 8867 - name = "windows-interface" 8868 9051 version = "0.59.3" 8869 9052 source = "registry+https://github.com/rust-lang/crates.io-index" 8870 9053 checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" ··· 8909 9092 8910 9093 [[package]] 8911 9094 name = "windows-result" 8912 - version = "0.2.0" 8913 - source = "registry+https://github.com/rust-lang/crates.io-index" 8914 - checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 8915 - dependencies = [ 8916 - "windows-targets 0.52.6", 8917 - ] 8918 - 8919 - [[package]] 8920 - name = "windows-result" 8921 9095 version = "0.3.4" 8922 9096 source = "registry+https://github.com/rust-lang/crates.io-index" 8923 9097 checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" ··· 8932 9106 checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" 8933 9107 dependencies = [ 8934 9108 "windows-link 0.2.1", 8935 - ] 8936 - 8937 - [[package]] 8938 - name = "windows-strings" 8939 - version = "0.1.0" 8940 - source = "registry+https://github.com/rust-lang/crates.io-index" 8941 - checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 8942 - dependencies = [ 8943 - "windows-result 0.2.0", 8944 - "windows-targets 0.52.6", 8945 9109 ] 8946 9110 8947 9111 [[package]] ··· 9283 9447 source = "registry+https://github.com/rust-lang/crates.io-index" 9284 9448 checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" 9285 9449 dependencies = [ 9286 - "memchr 2.7.6", 9450 + "memchr", 9287 9451 ] 9288 9452 9289 9453 [[package]] ··· 9292 9456 source = "registry+https://github.com/rust-lang/crates.io-index" 9293 9457 checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" 9294 9458 dependencies = [ 9295 - "memchr 2.7.6", 9459 + "memchr", 9296 9460 ] 9297 9461 9298 9462 [[package]] ··· 9301 9465 source = "registry+https://github.com/rust-lang/crates.io-index" 9302 9466 checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 9303 9467 dependencies = [ 9304 - "cfg-if 1.0.4", 9468 + "cfg-if", 9305 9469 "windows-sys 0.48.0", 9306 9470 ] 9307 9471 ··· 9319 9483 9320 9484 [[package]] 9321 9485 name = "wry" 9322 - version = "0.45.0" 9486 + version = "0.53.5" 9323 9487 source = "registry+https://github.com/rust-lang/crates.io-index" 9324 - checksum = "ac0099a336829fbf54c26b5f620c68980ebbe37196772aeaf6118df4931b5cb0" 9488 + checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2" 9325 9489 dependencies = [ 9326 9490 "base64 0.22.1", 9327 - "block", 9328 - "cocoa 0.26.1", 9329 - "core-graphics 0.24.0", 9491 + "block2", 9492 + "cookie", 9330 9493 "crossbeam-channel", 9494 + "dirs", 9331 9495 "dpi", 9332 9496 "dunce", 9333 - "gdkx11", 9334 9497 "gtk", 9335 - "html5ever 0.26.0", 9498 + "html5ever 0.29.1", 9336 9499 "http", 9337 9500 "javascriptcore-rs", 9338 9501 "jni", 9339 9502 "kuchikiki", 9340 9503 "libc", 9341 9504 "ndk", 9342 - "objc", 9343 - "objc_id", 9505 + "objc2", 9506 + "objc2-app-kit", 9507 + "objc2-core-foundation", 9508 + "objc2-foundation", 9509 + "objc2-ui-kit", 9510 + "objc2-web-kit", 9344 9511 "once_cell", 9345 9512 "percent-encoding", 9346 9513 "raw-window-handle 0.6.2", 9347 9514 "sha2", 9348 9515 "soup3", 9349 9516 "tao-macros", 9350 - "thiserror 1.0.69", 9517 + "thiserror 2.0.17", 9518 + "url", 9351 9519 "webkit2gtk", 9352 9520 "webkit2gtk-sys", 9353 9521 "webview2-com", 9354 - "windows 0.58.0", 9355 - "windows-core 0.58.0", 9522 + "windows", 9523 + "windows-core 0.61.2", 9356 9524 "windows-version", 9357 - "x11-dl", 9358 9525 ] 9359 9526 9360 9527 [[package]] ··· 9379 9546 ] 9380 9547 9381 9548 [[package]] 9382 - name = "xdg-home" 9383 - version = "1.3.0" 9549 + name = "x11rb" 9550 + version = "0.13.2" 9384 9551 source = "registry+https://github.com/rust-lang/crates.io-index" 9385 - checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" 9552 + checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" 9386 9553 dependencies = [ 9387 - "libc", 9388 - "windows-sys 0.59.0", 9554 + "gethostname", 9555 + "rustix", 9556 + "x11rb-protocol", 9389 9557 ] 9558 + 9559 + [[package]] 9560 + name = "x11rb-protocol" 9561 + version = "0.13.2" 9562 + source = "registry+https://github.com/rust-lang/crates.io-index" 9563 + checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" 9564 + 9565 + [[package]] 9566 + name = "xkeysym" 9567 + version = "0.2.1" 9568 + source = "registry+https://github.com/rust-lang/crates.io-index" 9569 + checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" 9390 9570 9391 9571 [[package]] 9392 9572 name = "xml5ever" ··· 9456 9636 9457 9637 [[package]] 9458 9638 name = "zbus" 9459 - version = "4.4.0" 9639 + version = "5.12.0" 9460 9640 source = "registry+https://github.com/rust-lang/crates.io-index" 9461 - checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" 9641 + checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91" 9462 9642 dependencies = [ 9463 9643 "async-broadcast", 9464 - "async-process", 9465 9644 "async-recursion", 9466 9645 "async-trait", 9467 9646 "enumflags2", 9468 9647 "event-listener", 9469 9648 "futures-core", 9470 - "futures-sink", 9471 - "futures-util", 9649 + "futures-lite", 9472 9650 "hex", 9473 9651 "nix", 9474 9652 "ordered-stream", 9475 - "rand 0.8.5", 9476 9653 "serde", 9477 9654 "serde_repr", 9478 - "sha1", 9479 - "static_assertions", 9480 9655 "tokio", 9481 9656 "tracing", 9482 9657 "uds_windows", 9483 - "windows-sys 0.52.0", 9484 - "xdg-home", 9658 + "uuid", 9659 + "windows-sys 0.61.2", 9660 + "winnow 0.7.13", 9485 9661 "zbus_macros", 9486 9662 "zbus_names", 9487 9663 "zvariant", ··· 9489 9665 9490 9666 [[package]] 9491 9667 name = "zbus_macros" 9492 - version = "4.4.0" 9668 + version = "5.12.0" 9493 9669 source = "registry+https://github.com/rust-lang/crates.io-index" 9494 - checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" 9670 + checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" 9495 9671 dependencies = [ 9496 9672 "proc-macro-crate 3.4.0", 9497 9673 "proc-macro2", 9498 9674 "quote", 9499 9675 "syn 2.0.108", 9676 + "zbus_names", 9677 + "zvariant", 9500 9678 "zvariant_utils", 9501 9679 ] 9502 9680 9503 9681 [[package]] 9504 9682 name = "zbus_names" 9505 - version = "3.0.0" 9683 + version = "4.2.0" 9506 9684 source = "registry+https://github.com/rust-lang/crates.io-index" 9507 - checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" 9685 + checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" 9508 9686 dependencies = [ 9509 9687 "serde", 9510 9688 "static_assertions", 9689 + "winnow 0.7.13", 9511 9690 "zvariant", 9512 9691 ] 9513 9692 ··· 9636 9815 9637 9816 [[package]] 9638 9817 name = "zvariant" 9639 - version = "4.2.0" 9818 + version = "5.8.0" 9640 9819 source = "registry+https://github.com/rust-lang/crates.io-index" 9641 - checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" 9820 + checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c" 9642 9821 dependencies = [ 9643 9822 "endi", 9644 9823 "enumflags2", 9645 9824 "serde", 9646 - "static_assertions", 9647 9825 "url", 9826 + "winnow 0.7.13", 9648 9827 "zvariant_derive", 9828 + "zvariant_utils", 9649 9829 ] 9650 9830 9651 9831 [[package]] 9652 9832 name = "zvariant_derive" 9653 - version = "4.2.0" 9833 + version = "5.8.0" 9654 9834 source = "registry+https://github.com/rust-lang/crates.io-index" 9655 - checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" 9835 + checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" 9656 9836 dependencies = [ 9657 9837 "proc-macro-crate 3.4.0", 9658 9838 "proc-macro2", ··· 9663 9843 9664 9844 [[package]] 9665 9845 name = "zvariant_utils" 9666 - version = "2.1.0" 9846 + version = "3.2.1" 9667 9847 source = "registry+https://github.com/rust-lang/crates.io-index" 9668 - checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" 9848 + checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" 9669 9849 dependencies = [ 9670 9850 "proc-macro2", 9671 9851 "quote", 9852 + "serde", 9672 9853 "syn 2.0.108", 9854 + "winnow 0.7.13", 9673 9855 ]
+2 -3
Cargo.toml
··· 4 4 # paths because the flake.nix is written in a way such that top-level members 5 5 # (`weaver-cli` and `weaver-server`) are built as different derivations which avoid being 6 6 # rebuilt if the other package's sources change. 7 - members = ["crates/*", "crates/weaver-server"] 7 + members = ["crates/*", "crates/weaver-server", "crates/weaver-server"] 8 8 9 9 #default-members = ["crates/weaver-cli"] 10 10 ··· 39 39 markdown-weaver = { git = "https://github.com/rsform/markdown-weaver" } 40 40 markdown-weaver-escape = { git = "https://github.com/rsform/markdown-weaver" } 41 41 42 - jacquard = { git = "https://tangled.org/@nonbinary.computer/jacquard", default-features = false, features = ["derive", "api_bluesky", "dns"] } 42 + jacquard = { git = "https://tangled.org/@nonbinary.computer/jacquard", default-features = false, features = ["derive", "api_bluesky"] } 43 43 jacquard-api = { git = "https://tangled.org/@nonbinary.computer/jacquard" } 44 44 jacquard-axum = { git = "https://tangled.org/@nonbinary.computer/jacquard" } 45 - tree_magic = { version = "0.2.3", features = ["cli"] } 46 45 47 46 [profile] 48 47
+9 -2
crates/weaver-api/lexicons/sh_weaver_notebook_chapter.json
··· 4 4 "defs": { 5 5 "main": { 6 6 "type": "record", 7 - "description": "A grouping of entries in a notebook, intended to be displayed as a single page.", 7 + "description": "A grouping of entries in a notebook.", 8 8 "key": "tid", 9 9 "record": { 10 10 "type": "object", ··· 14 14 "entryList" 15 15 ], 16 16 "properties": { 17 + "authors": { 18 + "type": "array", 19 + "items": { 20 + "type": "ref", 21 + "ref": "sh.weaver.actor.defs#author" 22 + } 23 + }, 17 24 "createdAt": { 18 25 "type": "string", 19 26 "description": "Client-declared timestamp when this was originally created.", ··· 28 35 }, 29 36 "notebook": { 30 37 "type": "ref", 31 - "description": "The notebook this page belongs to.", 38 + "description": "The notebook this chapter belongs to.", 32 39 "ref": "com.atproto.repo.strongRef" 33 40 }, 34 41 "tags": {
+13 -11
crates/weaver-api/lexicons/sh_weaver_notebook_defs.json
··· 5 5 "authorListView": { 6 6 "type": "object", 7 7 "required": [ 8 - "profile", 8 + "record", 9 9 "index" 10 10 ], 11 11 "properties": { 12 - "cid": { 13 - "type": "string", 14 - "format": "cid" 15 - }, 16 12 "index": { 17 13 "type": "integer" 18 14 }, ··· 84 80 "required": [ 85 81 "uri", 86 82 "cid", 87 - "author", 83 + "authors", 88 84 "record", 89 85 "indexedAt" 90 86 ], 91 87 "properties": { 92 88 "authors": { 93 - "type": "ref", 94 - "ref": "#authorListView" 89 + "type": "array", 90 + "items": { 91 + "type": "ref", 92 + "ref": "#authorListView" 93 + } 95 94 }, 96 95 "cid": { 97 96 "type": "string", ··· 127 126 "required": [ 128 127 "uri", 129 128 "cid", 130 - "author", 129 + "authors", 131 130 "record", 132 131 "indexedAt" 133 132 ], 134 133 "properties": { 135 134 "authors": { 136 - "type": "ref", 137 - "ref": "#authorListView" 135 + "type": "array", 136 + "items": { 137 + "type": "ref", 138 + "ref": "#authorListView" 139 + } 138 140 }, 139 141 "cid": { 140 142 "type": "string",
+46
crates/weaver-api/lexicons/sh_weaver_notebook_page.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "sh.weaver.notebook.page", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A grouping of entries in a notebook, intended to be displayed as a single page.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "notebook", 13 + "authors", 14 + "entryList" 15 + ], 16 + "properties": { 17 + "createdAt": { 18 + "type": "string", 19 + "description": "Client-declared timestamp when this was originally created.", 20 + "format": "datetime" 21 + }, 22 + "entryList": { 23 + "type": "array", 24 + "items": { 25 + "type": "ref", 26 + "ref": "com.atproto.repo.strongRef" 27 + } 28 + }, 29 + "notebook": { 30 + "type": "ref", 31 + "description": "The notebook this page belongs to.", 32 + "ref": "com.atproto.repo.strongRef" 33 + }, 34 + "tags": { 35 + "type": "ref", 36 + "ref": "sh.weaver.notebook.defs#tags" 37 + }, 38 + "title": { 39 + "type": "ref", 40 + "ref": "sh.weaver.notebook.defs#title" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + }
+122 -156
crates/weaver-api/src/sh_weaver/notebook.rs
··· 9 9 pub mod book; 10 10 pub mod chapter; 11 11 pub mod entry; 12 + pub mod page; 12 13 13 14 #[jacquard_derive::lexicon] 14 15 #[derive( ··· 22 23 )] 23 24 #[serde(rename_all = "camelCase")] 24 25 pub struct AuthorListView<'a> { 25 - #[serde(skip_serializing_if = "std::option::Option::is_none")] 26 - #[serde(borrow)] 27 - pub cid: Option<jacquard_common::types::string::Cid<'a>>, 28 26 pub index: i64, 29 - #[serde(skip_serializing_if = "std::option::Option::is_none")] 30 27 #[serde(borrow)] 31 - pub record: Option<jacquard_common::types::value::Data<'a>>, 28 + pub record: jacquard_common::types::value::Data<'a>, 32 29 #[serde(skip_serializing_if = "std::option::Option::is_none")] 33 30 #[serde(borrow)] 34 31 pub uri: Option<jacquard_common::types::string::AtUri<'a>>, ··· 44 41 } 45 42 /// State trait tracking which required fields have been set 46 43 pub trait State: sealed::Sealed { 47 - type Profile; 44 + type Record; 48 45 type Index; 49 46 } 50 47 /// Empty state - all required fields are unset 51 48 pub struct Empty(()); 52 49 impl sealed::Sealed for Empty {} 53 50 impl State for Empty { 54 - type Profile = Unset; 51 + type Record = Unset; 55 52 type Index = Unset; 56 53 } 57 - ///State transition - sets the `profile` field to Set 58 - pub struct SetProfile<S: State = Empty>(PhantomData<fn() -> S>); 59 - impl<S: State> sealed::Sealed for SetProfile<S> {} 60 - impl<S: State> State for SetProfile<S> { 61 - type Profile = Set<members::profile>; 54 + ///State transition - sets the `record` field to Set 55 + pub struct SetRecord<S: State = Empty>(PhantomData<fn() -> S>); 56 + impl<S: State> sealed::Sealed for SetRecord<S> {} 57 + impl<S: State> State for SetRecord<S> { 58 + type Record = Set<members::record>; 62 59 type Index = S::Index; 63 60 } 64 61 ///State transition - sets the `index` field to Set 65 62 pub struct SetIndex<S: State = Empty>(PhantomData<fn() -> S>); 66 63 impl<S: State> sealed::Sealed for SetIndex<S> {} 67 64 impl<S: State> State for SetIndex<S> { 68 - type Profile = S::Profile; 65 + type Record = S::Record; 69 66 type Index = Set<members::index>; 70 67 } 71 68 /// Marker types for field names 72 69 #[allow(non_camel_case_types)] 73 70 pub mod members { 74 - ///Marker type for the `profile` field 75 - pub struct profile(()); 71 + ///Marker type for the `record` field 72 + pub struct record(()); 76 73 ///Marker type for the `index` field 77 74 pub struct index(()); 78 75 } ··· 82 79 pub struct AuthorListViewBuilder<'a, S: author_list_view_state::State> { 83 80 _phantom_state: ::core::marker::PhantomData<fn() -> S>, 84 81 __unsafe_private_named: ( 85 - ::core::option::Option<jacquard_common::types::string::Cid<'a>>, 86 82 ::core::option::Option<i64>, 87 83 ::core::option::Option<jacquard_common::types::value::Data<'a>>, 88 84 ::core::option::Option<jacquard_common::types::string::AtUri<'a>>, ··· 102 98 pub fn new() -> Self { 103 99 AuthorListViewBuilder { 104 100 _phantom_state: ::core::marker::PhantomData, 105 - __unsafe_private_named: (None, None, None, None), 101 + __unsafe_private_named: (None, None, None), 106 102 _phantom: ::core::marker::PhantomData, 107 103 } 108 104 } 109 105 } 110 106 111 - impl<'a, S: author_list_view_state::State> AuthorListViewBuilder<'a, S> { 112 - /// Set the `cid` field (optional) 113 - pub fn cid( 114 - mut self, 115 - value: impl Into<Option<jacquard_common::types::string::Cid<'a>>>, 116 - ) -> Self { 117 - self.__unsafe_private_named.0 = value.into(); 118 - self 119 - } 120 - /// Set the `cid` field to an Option value (optional) 121 - pub fn maybe_cid( 122 - mut self, 123 - value: Option<jacquard_common::types::string::Cid<'a>>, 124 - ) -> Self { 125 - self.__unsafe_private_named.0 = value; 126 - self 127 - } 128 - } 129 - 130 107 impl<'a, S> AuthorListViewBuilder<'a, S> 131 108 where 132 109 S: author_list_view_state::State, ··· 137 114 mut self, 138 115 value: impl Into<i64>, 139 116 ) -> AuthorListViewBuilder<'a, author_list_view_state::SetIndex<S>> { 140 - self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into()); 117 + self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into()); 141 118 AuthorListViewBuilder { 142 119 _phantom_state: ::core::marker::PhantomData, 143 120 __unsafe_private_named: self.__unsafe_private_named, ··· 146 123 } 147 124 } 148 125 149 - impl<'a, S: author_list_view_state::State> AuthorListViewBuilder<'a, S> { 150 - /// Set the `record` field (optional) 126 + impl<'a, S> AuthorListViewBuilder<'a, S> 127 + where 128 + S: author_list_view_state::State, 129 + S::Record: author_list_view_state::IsUnset, 130 + { 131 + /// Set the `record` field (required) 151 132 pub fn record( 152 133 mut self, 153 - value: impl Into<Option<jacquard_common::types::value::Data<'a>>>, 154 - ) -> Self { 155 - self.__unsafe_private_named.2 = value.into(); 156 - self 157 - } 158 - /// Set the `record` field to an Option value (optional) 159 - pub fn maybe_record( 160 - mut self, 161 - value: Option<jacquard_common::types::value::Data<'a>>, 162 - ) -> Self { 163 - self.__unsafe_private_named.2 = value; 164 - self 134 + value: impl Into<jacquard_common::types::value::Data<'a>>, 135 + ) -> AuthorListViewBuilder<'a, author_list_view_state::SetRecord<S>> { 136 + self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into()); 137 + AuthorListViewBuilder { 138 + _phantom_state: ::core::marker::PhantomData, 139 + __unsafe_private_named: self.__unsafe_private_named, 140 + _phantom: ::core::marker::PhantomData, 141 + } 165 142 } 166 143 } 167 144 ··· 171 148 mut self, 172 149 value: impl Into<Option<jacquard_common::types::string::AtUri<'a>>>, 173 150 ) -> Self { 174 - self.__unsafe_private_named.3 = value.into(); 151 + self.__unsafe_private_named.2 = value.into(); 175 152 self 176 153 } 177 154 /// Set the `uri` field to an Option value (optional) ··· 179 156 mut self, 180 157 value: Option<jacquard_common::types::string::AtUri<'a>>, 181 158 ) -> Self { 182 - self.__unsafe_private_named.3 = value; 159 + self.__unsafe_private_named.2 = value; 183 160 self 184 161 } 185 162 } ··· 187 164 impl<'a, S> AuthorListViewBuilder<'a, S> 188 165 where 189 166 S: author_list_view_state::State, 190 - S::Profile: author_list_view_state::IsSet, 167 + S::Record: author_list_view_state::IsSet, 191 168 S::Index: author_list_view_state::IsSet, 192 169 { 193 170 /// Build the final struct 194 171 pub fn build(self) -> AuthorListView<'a> { 195 172 AuthorListView { 196 - cid: self.__unsafe_private_named.0, 197 - index: self.__unsafe_private_named.1.unwrap(), 198 - record: self.__unsafe_private_named.2, 199 - uri: self.__unsafe_private_named.3, 173 + index: self.__unsafe_private_named.0.unwrap(), 174 + record: self.__unsafe_private_named.1.unwrap(), 175 + uri: self.__unsafe_private_named.2, 200 176 extra_data: Default::default(), 201 177 } 202 178 } ··· 209 185 >, 210 186 ) -> AuthorListView<'a> { 211 187 AuthorListView { 212 - cid: self.__unsafe_private_named.0, 213 - index: self.__unsafe_private_named.1.unwrap(), 214 - record: self.__unsafe_private_named.2, 215 - uri: self.__unsafe_private_named.3, 188 + index: self.__unsafe_private_named.0.unwrap(), 189 + record: self.__unsafe_private_named.1.unwrap(), 190 + uri: self.__unsafe_private_named.2, 216 191 extra_data: Some(extra_data), 217 192 } 218 193 } ··· 234 209 description: None, 235 210 required: Some( 236 211 vec![ 237 - ::jacquard_common::smol_str::SmolStr::new_static("profile"), 212 + ::jacquard_common::smol_str::SmolStr::new_static("record"), 238 213 ::jacquard_common::smol_str::SmolStr::new_static("index") 239 214 ], 240 215 ), ··· 243 218 #[allow(unused_mut)] 244 219 let mut map = ::std::collections::BTreeMap::new(); 245 220 map.insert( 246 - ::jacquard_common::smol_str::SmolStr::new_static("cid"), 247 - ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString { 248 - description: None, 249 - format: Some( 250 - ::jacquard_lexicon::lexicon::LexStringFormat::Cid, 251 - ), 252 - default: None, 253 - min_length: None, 254 - max_length: None, 255 - min_graphemes: None, 256 - max_graphemes: None, 257 - r#enum: None, 258 - r#const: None, 259 - known_values: None, 260 - }), 261 - ); 262 - map.insert( 263 221 ::jacquard_common::smol_str::SmolStr::new_static("index"), 264 222 ::jacquard_lexicon::lexicon::LexObjectProperty::Integer(::jacquard_lexicon::lexicon::LexInteger { 265 223 description: None, ··· 421 379 vec![ 422 380 ::jacquard_common::smol_str::SmolStr::new_static("uri"), 423 381 ::jacquard_common::smol_str::SmolStr::new_static("cid"), 424 - ::jacquard_common::smol_str::SmolStr::new_static("author"), 382 + ::jacquard_common::smol_str::SmolStr::new_static("authors"), 425 383 ::jacquard_common::smol_str::SmolStr::new_static("record"), 426 384 ::jacquard_common::smol_str::SmolStr::new_static("indexedAt") 427 385 ], ··· 432 390 let mut map = ::std::collections::BTreeMap::new(); 433 391 map.insert( 434 392 ::jacquard_common::smol_str::SmolStr::new_static("authors"), 435 - ::jacquard_lexicon::lexicon::LexObjectProperty::Ref(::jacquard_lexicon::lexicon::LexRef { 393 + ::jacquard_lexicon::lexicon::LexObjectProperty::Array(::jacquard_lexicon::lexicon::LexArray { 436 394 description: None, 437 - r#ref: ::jacquard_common::CowStr::new_static( 438 - "#authorListView", 439 - ), 395 + items: ::jacquard_lexicon::lexicon::LexArrayItem::Ref(::jacquard_lexicon::lexicon::LexRef { 396 + description: None, 397 + r#ref: ::jacquard_common::CowStr::new_static( 398 + "#authorListView", 399 + ), 400 + }), 401 + min_length: None, 402 + max_length: None, 440 403 }), 441 404 ); 442 405 map.insert( ··· 535 498 vec![ 536 499 ::jacquard_common::smol_str::SmolStr::new_static("uri"), 537 500 ::jacquard_common::smol_str::SmolStr::new_static("cid"), 538 - ::jacquard_common::smol_str::SmolStr::new_static("author"), 501 + ::jacquard_common::smol_str::SmolStr::new_static("authors"), 539 502 ::jacquard_common::smol_str::SmolStr::new_static("record"), 540 503 ::jacquard_common::smol_str::SmolStr::new_static("indexedAt") 541 504 ], ··· 546 509 let mut map = ::std::collections::BTreeMap::new(); 547 510 map.insert( 548 511 ::jacquard_common::smol_str::SmolStr::new_static("authors"), 549 - ::jacquard_lexicon::lexicon::LexObjectProperty::Ref(::jacquard_lexicon::lexicon::LexRef { 512 + ::jacquard_lexicon::lexicon::LexObjectProperty::Array(::jacquard_lexicon::lexicon::LexArray { 550 513 description: None, 551 - r#ref: ::jacquard_common::CowStr::new_static( 552 - "#authorListView", 553 - ), 514 + items: ::jacquard_lexicon::lexicon::LexArrayItem::Ref(::jacquard_lexicon::lexicon::LexRef { 515 + description: None, 516 + r#ref: ::jacquard_common::CowStr::new_static( 517 + "#authorListView", 518 + ), 519 + }), 520 + min_length: None, 521 + max_length: None, 554 522 }), 555 523 ); 556 524 map.insert( ··· 1138 1106 )] 1139 1107 #[serde(rename_all = "camelCase")] 1140 1108 pub struct EntryView<'a> { 1141 - #[serde(skip_serializing_if = "std::option::Option::is_none")] 1142 1109 #[serde(borrow)] 1143 - pub authors: Option<crate::sh_weaver::notebook::AuthorListView<'a>>, 1110 + pub authors: Vec<crate::sh_weaver::notebook::AuthorListView<'a>>, 1144 1111 #[serde(borrow)] 1145 1112 pub cid: jacquard_common::types::string::Cid<'a>, 1146 1113 pub indexed_at: jacquard_common::types::string::Datetime, ··· 1171 1138 pub trait State: sealed::Sealed { 1172 1139 type Uri; 1173 1140 type Cid; 1174 - type Author; 1141 + type Authors; 1175 1142 type Record; 1176 1143 type IndexedAt; 1177 1144 } ··· 1181 1148 impl State for Empty { 1182 1149 type Uri = Unset; 1183 1150 type Cid = Unset; 1184 - type Author = Unset; 1151 + type Authors = Unset; 1185 1152 type Record = Unset; 1186 1153 type IndexedAt = Unset; 1187 1154 } ··· 1191 1158 impl<S: State> State for SetUri<S> { 1192 1159 type Uri = Set<members::uri>; 1193 1160 type Cid = S::Cid; 1194 - type Author = S::Author; 1161 + type Authors = S::Authors; 1195 1162 type Record = S::Record; 1196 1163 type IndexedAt = S::IndexedAt; 1197 1164 } ··· 1201 1168 impl<S: State> State for SetCid<S> { 1202 1169 type Uri = S::Uri; 1203 1170 type Cid = Set<members::cid>; 1204 - type Author = S::Author; 1171 + type Authors = S::Authors; 1205 1172 type Record = S::Record; 1206 1173 type IndexedAt = S::IndexedAt; 1207 1174 } 1208 - ///State transition - sets the `author` field to Set 1209 - pub struct SetAuthor<S: State = Empty>(PhantomData<fn() -> S>); 1210 - impl<S: State> sealed::Sealed for SetAuthor<S> {} 1211 - impl<S: State> State for SetAuthor<S> { 1175 + ///State transition - sets the `authors` field to Set 1176 + pub struct SetAuthors<S: State = Empty>(PhantomData<fn() -> S>); 1177 + impl<S: State> sealed::Sealed for SetAuthors<S> {} 1178 + impl<S: State> State for SetAuthors<S> { 1212 1179 type Uri = S::Uri; 1213 1180 type Cid = S::Cid; 1214 - type Author = Set<members::author>; 1181 + type Authors = Set<members::authors>; 1215 1182 type Record = S::Record; 1216 1183 type IndexedAt = S::IndexedAt; 1217 1184 } ··· 1221 1188 impl<S: State> State for SetRecord<S> { 1222 1189 type Uri = S::Uri; 1223 1190 type Cid = S::Cid; 1224 - type Author = S::Author; 1191 + type Authors = S::Authors; 1225 1192 type Record = Set<members::record>; 1226 1193 type IndexedAt = S::IndexedAt; 1227 1194 } ··· 1231 1198 impl<S: State> State for SetIndexedAt<S> { 1232 1199 type Uri = S::Uri; 1233 1200 type Cid = S::Cid; 1234 - type Author = S::Author; 1201 + type Authors = S::Authors; 1235 1202 type Record = S::Record; 1236 1203 type IndexedAt = Set<members::indexed_at>; 1237 1204 } ··· 1242 1209 pub struct uri(()); 1243 1210 ///Marker type for the `cid` field 1244 1211 pub struct cid(()); 1245 - ///Marker type for the `author` field 1246 - pub struct author(()); 1212 + ///Marker type for the `authors` field 1213 + pub struct authors(()); 1247 1214 ///Marker type for the `record` field 1248 1215 pub struct record(()); 1249 1216 ///Marker type for the `indexed_at` field ··· 1255 1222 pub struct EntryViewBuilder<'a, S: entry_view_state::State> { 1256 1223 _phantom_state: ::core::marker::PhantomData<fn() -> S>, 1257 1224 __unsafe_private_named: ( 1258 - ::core::option::Option<crate::sh_weaver::notebook::AuthorListView<'a>>, 1225 + ::core::option::Option<Vec<crate::sh_weaver::notebook::AuthorListView<'a>>>, 1259 1226 ::core::option::Option<jacquard_common::types::string::Cid<'a>>, 1260 1227 ::core::option::Option<jacquard_common::types::string::Datetime>, 1261 1228 ::core::option::Option<jacquard_common::types::value::Data<'a>>, ··· 1285 1252 } 1286 1253 } 1287 1254 1288 - impl<'a, S: entry_view_state::State> EntryViewBuilder<'a, S> { 1289 - /// Set the `authors` field (optional) 1255 + impl<'a, S> EntryViewBuilder<'a, S> 1256 + where 1257 + S: entry_view_state::State, 1258 + S::Authors: entry_view_state::IsUnset, 1259 + { 1260 + /// Set the `authors` field (required) 1290 1261 pub fn authors( 1291 1262 mut self, 1292 - value: impl Into<Option<crate::sh_weaver::notebook::AuthorListView<'a>>>, 1293 - ) -> Self { 1294 - self.__unsafe_private_named.0 = value.into(); 1295 - self 1296 - } 1297 - /// Set the `authors` field to an Option value (optional) 1298 - pub fn maybe_authors( 1299 - mut self, 1300 - value: Option<crate::sh_weaver::notebook::AuthorListView<'a>>, 1301 - ) -> Self { 1302 - self.__unsafe_private_named.0 = value; 1303 - self 1263 + value: impl Into<Vec<crate::sh_weaver::notebook::AuthorListView<'a>>>, 1264 + ) -> EntryViewBuilder<'a, entry_view_state::SetAuthors<S>> { 1265 + self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into()); 1266 + EntryViewBuilder { 1267 + _phantom_state: ::core::marker::PhantomData, 1268 + __unsafe_private_named: self.__unsafe_private_named, 1269 + _phantom: ::core::marker::PhantomData, 1270 + } 1304 1271 } 1305 1272 } 1306 1273 ··· 1442 1409 S: entry_view_state::State, 1443 1410 S::Uri: entry_view_state::IsSet, 1444 1411 S::Cid: entry_view_state::IsSet, 1445 - S::Author: entry_view_state::IsSet, 1412 + S::Authors: entry_view_state::IsSet, 1446 1413 S::Record: entry_view_state::IsSet, 1447 1414 S::IndexedAt: entry_view_state::IsSet, 1448 1415 { 1449 1416 /// Build the final struct 1450 1417 pub fn build(self) -> EntryView<'a> { 1451 1418 EntryView { 1452 - authors: self.__unsafe_private_named.0, 1419 + authors: self.__unsafe_private_named.0.unwrap(), 1453 1420 cid: self.__unsafe_private_named.1.unwrap(), 1454 1421 indexed_at: self.__unsafe_private_named.2.unwrap(), 1455 1422 record: self.__unsafe_private_named.3.unwrap(), ··· 1469 1436 >, 1470 1437 ) -> EntryView<'a> { 1471 1438 EntryView { 1472 - authors: self.__unsafe_private_named.0, 1439 + authors: self.__unsafe_private_named.0.unwrap(), 1473 1440 cid: self.__unsafe_private_named.1.unwrap(), 1474 1441 indexed_at: self.__unsafe_private_named.2.unwrap(), 1475 1442 record: self.__unsafe_private_named.3.unwrap(), ··· 1511 1478 )] 1512 1479 #[serde(rename_all = "camelCase")] 1513 1480 pub struct NotebookView<'a> { 1514 - #[serde(skip_serializing_if = "std::option::Option::is_none")] 1515 1481 #[serde(borrow)] 1516 - pub authors: Option<crate::sh_weaver::notebook::AuthorListView<'a>>, 1482 + pub authors: Vec<crate::sh_weaver::notebook::AuthorListView<'a>>, 1517 1483 #[serde(borrow)] 1518 1484 pub cid: jacquard_common::types::string::Cid<'a>, 1519 1485 pub indexed_at: jacquard_common::types::string::Datetime, ··· 1541 1507 pub trait State: sealed::Sealed { 1542 1508 type Uri; 1543 1509 type Cid; 1544 - type Author; 1510 + type Authors; 1545 1511 type Record; 1546 1512 type IndexedAt; 1547 1513 } ··· 1551 1517 impl State for Empty { 1552 1518 type Uri = Unset; 1553 1519 type Cid = Unset; 1554 - type Author = Unset; 1520 + type Authors = Unset; 1555 1521 type Record = Unset; 1556 1522 type IndexedAt = Unset; 1557 1523 } ··· 1561 1527 impl<S: State> State for SetUri<S> { 1562 1528 type Uri = Set<members::uri>; 1563 1529 type Cid = S::Cid; 1564 - type Author = S::Author; 1530 + type Authors = S::Authors; 1565 1531 type Record = S::Record; 1566 1532 type IndexedAt = S::IndexedAt; 1567 1533 } ··· 1571 1537 impl<S: State> State for SetCid<S> { 1572 1538 type Uri = S::Uri; 1573 1539 type Cid = Set<members::cid>; 1574 - type Author = S::Author; 1540 + type Authors = S::Authors; 1575 1541 type Record = S::Record; 1576 1542 type IndexedAt = S::IndexedAt; 1577 1543 } 1578 - ///State transition - sets the `author` field to Set 1579 - pub struct SetAuthor<S: State = Empty>(PhantomData<fn() -> S>); 1580 - impl<S: State> sealed::Sealed for SetAuthor<S> {} 1581 - impl<S: State> State for SetAuthor<S> { 1544 + ///State transition - sets the `authors` field to Set 1545 + pub struct SetAuthors<S: State = Empty>(PhantomData<fn() -> S>); 1546 + impl<S: State> sealed::Sealed for SetAuthors<S> {} 1547 + impl<S: State> State for SetAuthors<S> { 1582 1548 type Uri = S::Uri; 1583 1549 type Cid = S::Cid; 1584 - type Author = Set<members::author>; 1550 + type Authors = Set<members::authors>; 1585 1551 type Record = S::Record; 1586 1552 type IndexedAt = S::IndexedAt; 1587 1553 } ··· 1591 1557 impl<S: State> State for SetRecord<S> { 1592 1558 type Uri = S::Uri; 1593 1559 type Cid = S::Cid; 1594 - type Author = S::Author; 1560 + type Authors = S::Authors; 1595 1561 type Record = Set<members::record>; 1596 1562 type IndexedAt = S::IndexedAt; 1597 1563 } ··· 1601 1567 impl<S: State> State for SetIndexedAt<S> { 1602 1568 type Uri = S::Uri; 1603 1569 type Cid = S::Cid; 1604 - type Author = S::Author; 1570 + type Authors = S::Authors; 1605 1571 type Record = S::Record; 1606 1572 type IndexedAt = Set<members::indexed_at>; 1607 1573 } ··· 1612 1578 pub struct uri(()); 1613 1579 ///Marker type for the `cid` field 1614 1580 pub struct cid(()); 1615 - ///Marker type for the `author` field 1616 - pub struct author(()); 1581 + ///Marker type for the `authors` field 1582 + pub struct authors(()); 1617 1583 ///Marker type for the `record` field 1618 1584 pub struct record(()); 1619 1585 ///Marker type for the `indexed_at` field ··· 1625 1591 pub struct NotebookViewBuilder<'a, S: notebook_view_state::State> { 1626 1592 _phantom_state: ::core::marker::PhantomData<fn() -> S>, 1627 1593 __unsafe_private_named: ( 1628 - ::core::option::Option<crate::sh_weaver::notebook::AuthorListView<'a>>, 1594 + ::core::option::Option<Vec<crate::sh_weaver::notebook::AuthorListView<'a>>>, 1629 1595 ::core::option::Option<jacquard_common::types::string::Cid<'a>>, 1630 1596 ::core::option::Option<jacquard_common::types::string::Datetime>, 1631 1597 ::core::option::Option<jacquard_common::types::value::Data<'a>>, ··· 1654 1620 } 1655 1621 } 1656 1622 1657 - impl<'a, S: notebook_view_state::State> NotebookViewBuilder<'a, S> { 1658 - /// Set the `authors` field (optional) 1623 + impl<'a, S> NotebookViewBuilder<'a, S> 1624 + where 1625 + S: notebook_view_state::State, 1626 + S::Authors: notebook_view_state::IsUnset, 1627 + { 1628 + /// Set the `authors` field (required) 1659 1629 pub fn authors( 1660 1630 mut self, 1661 - value: impl Into<Option<crate::sh_weaver::notebook::AuthorListView<'a>>>, 1662 - ) -> Self { 1663 - self.__unsafe_private_named.0 = value.into(); 1664 - self 1665 - } 1666 - /// Set the `authors` field to an Option value (optional) 1667 - pub fn maybe_authors( 1668 - mut self, 1669 - value: Option<crate::sh_weaver::notebook::AuthorListView<'a>>, 1670 - ) -> Self { 1671 - self.__unsafe_private_named.0 = value; 1672 - self 1631 + value: impl Into<Vec<crate::sh_weaver::notebook::AuthorListView<'a>>>, 1632 + ) -> NotebookViewBuilder<'a, notebook_view_state::SetAuthors<S>> { 1633 + self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into()); 1634 + NotebookViewBuilder { 1635 + _phantom_state: ::core::marker::PhantomData, 1636 + __unsafe_private_named: self.__unsafe_private_named, 1637 + _phantom: ::core::marker::PhantomData, 1638 + } 1673 1639 } 1674 1640 } 1675 1641 ··· 1792 1758 S: notebook_view_state::State, 1793 1759 S::Uri: notebook_view_state::IsSet, 1794 1760 S::Cid: notebook_view_state::IsSet, 1795 - S::Author: notebook_view_state::IsSet, 1761 + S::Authors: notebook_view_state::IsSet, 1796 1762 S::Record: notebook_view_state::IsSet, 1797 1763 S::IndexedAt: notebook_view_state::IsSet, 1798 1764 { 1799 1765 /// Build the final struct 1800 1766 pub fn build(self) -> NotebookView<'a> { 1801 1767 NotebookView { 1802 - authors: self.__unsafe_private_named.0, 1768 + authors: self.__unsafe_private_named.0.unwrap(), 1803 1769 cid: self.__unsafe_private_named.1.unwrap(), 1804 1770 indexed_at: self.__unsafe_private_named.2.unwrap(), 1805 1771 record: self.__unsafe_private_named.3.unwrap(), ··· 1818 1784 >, 1819 1785 ) -> NotebookView<'a> { 1820 1786 NotebookView { 1821 - authors: self.__unsafe_private_named.0, 1787 + authors: self.__unsafe_private_named.0.unwrap(), 1822 1788 cid: self.__unsafe_private_named.1.unwrap(), 1823 1789 indexed_at: self.__unsafe_private_named.2.unwrap(), 1824 1790 record: self.__unsafe_private_named.3.unwrap(),
+60 -22
crates/weaver-api/src/sh_weaver/notebook/chapter.rs
··· 5 5 // This file was automatically generated from Lexicon schemas. 6 6 // Any manual changes will be overwritten on the next regeneration. 7 7 8 - /// A grouping of entries in a notebook, intended to be displayed as a single page. 8 + /// A grouping of entries in a notebook. 9 9 #[jacquard_derive::lexicon] 10 10 #[derive( 11 11 serde::Serialize, ··· 18 18 )] 19 19 #[serde(rename_all = "camelCase")] 20 20 pub struct Chapter<'a> { 21 + #[serde(borrow)] 22 + pub authors: Vec<crate::sh_weaver::actor::Author<'a>>, 21 23 /// Client-declared timestamp when this was originally created. 22 24 #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 25 pub created_at: Option<jacquard_common::types::string::Datetime>, 24 26 #[serde(borrow)] 25 27 pub entry_list: Vec<crate::com_atproto::repo::strong_ref::StrongRef<'a>>, 26 - /// The notebook this page belongs to. 28 + /// The notebook this chapter belongs to. 27 29 #[serde(borrow)] 28 30 pub notebook: crate::com_atproto::repo::strong_ref::StrongRef<'a>, 29 31 #[serde(skip_serializing_if = "std::option::Option::is_none")] ··· 96 98 pub struct ChapterBuilder<'a, S: chapter_state::State> { 97 99 _phantom_state: ::core::marker::PhantomData<fn() -> S>, 98 100 __unsafe_private_named: ( 101 + ::core::option::Option<Vec<crate::sh_weaver::actor::Author<'a>>>, 99 102 ::core::option::Option<jacquard_common::types::string::Datetime>, 100 103 ::core::option::Option<Vec<crate::com_atproto::repo::strong_ref::StrongRef<'a>>>, 101 104 ::core::option::Option<crate::com_atproto::repo::strong_ref::StrongRef<'a>>, ··· 117 120 pub fn new() -> Self { 118 121 ChapterBuilder { 119 122 _phantom_state: ::core::marker::PhantomData, 120 - __unsafe_private_named: (None, None, None, None, None), 123 + __unsafe_private_named: (None, None, None, None, None, None), 124 + _phantom: ::core::marker::PhantomData, 125 + } 126 + } 127 + } 128 + 129 + impl<'a, S> ChapterBuilder<'a, S> 130 + where 131 + S: chapter_state::State, 132 + S::Authors: chapter_state::IsUnset, 133 + { 134 + /// Set the `authors` field (required) 135 + pub fn authors( 136 + mut self, 137 + value: impl Into<Vec<crate::sh_weaver::actor::Author<'a>>>, 138 + ) -> ChapterBuilder<'a, chapter_state::SetAuthors<S>> { 139 + self.__unsafe_private_named.0 = ::core::option::Option::Some(value.into()); 140 + ChapterBuilder { 141 + _phantom_state: ::core::marker::PhantomData, 142 + __unsafe_private_named: self.__unsafe_private_named, 121 143 _phantom: ::core::marker::PhantomData, 122 144 } 123 145 } ··· 129 151 mut self, 130 152 value: impl Into<Option<jacquard_common::types::string::Datetime>>, 131 153 ) -> Self { 132 - self.__unsafe_private_named.0 = value.into(); 154 + self.__unsafe_private_named.1 = value.into(); 133 155 self 134 156 } 135 157 /// Set the `createdAt` field to an Option value (optional) ··· 137 159 mut self, 138 160 value: Option<jacquard_common::types::string::Datetime>, 139 161 ) -> Self { 140 - self.__unsafe_private_named.0 = value; 162 + self.__unsafe_private_named.1 = value; 141 163 self 142 164 } 143 165 } ··· 152 174 mut self, 153 175 value: impl Into<Vec<crate::com_atproto::repo::strong_ref::StrongRef<'a>>>, 154 176 ) -> ChapterBuilder<'a, chapter_state::SetEntryList<S>> { 155 - self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into()); 177 + self.__unsafe_private_named.2 = ::core::option::Option::Some(value.into()); 156 178 ChapterBuilder { 157 179 _phantom_state: ::core::marker::PhantomData, 158 180 __unsafe_private_named: self.__unsafe_private_named, ··· 171 193 mut self, 172 194 value: impl Into<crate::com_atproto::repo::strong_ref::StrongRef<'a>>, 173 195 ) -> ChapterBuilder<'a, chapter_state::SetNotebook<S>> { 174 - self.__unsafe_private_named.2 = ::core::option::Option::Some(value.into()); 196 + self.__unsafe_private_named.3 = ::core::option::Option::Some(value.into()); 175 197 ChapterBuilder { 176 198 _phantom_state: ::core::marker::PhantomData, 177 199 __unsafe_private_named: self.__unsafe_private_named, ··· 186 208 mut self, 187 209 value: impl Into<Option<crate::sh_weaver::notebook::Tags<'a>>>, 188 210 ) -> Self { 189 - self.__unsafe_private_named.3 = value.into(); 211 + self.__unsafe_private_named.4 = value.into(); 190 212 self 191 213 } 192 214 /// Set the `tags` field to an Option value (optional) ··· 194 216 mut self, 195 217 value: Option<crate::sh_weaver::notebook::Tags<'a>>, 196 218 ) -> Self { 197 - self.__unsafe_private_named.3 = value; 219 + self.__unsafe_private_named.4 = value; 198 220 self 199 221 } 200 222 } ··· 205 227 mut self, 206 228 value: impl Into<Option<crate::sh_weaver::notebook::Title<'a>>>, 207 229 ) -> Self { 208 - self.__unsafe_private_named.4 = value.into(); 230 + self.__unsafe_private_named.5 = value.into(); 209 231 self 210 232 } 211 233 /// Set the `title` field to an Option value (optional) ··· 213 235 mut self, 214 236 value: Option<crate::sh_weaver::notebook::Title<'a>>, 215 237 ) -> Self { 216 - self.__unsafe_private_named.4 = value; 238 + self.__unsafe_private_named.5 = value; 217 239 self 218 240 } 219 241 } ··· 228 250 /// Build the final struct 229 251 pub fn build(self) -> Chapter<'a> { 230 252 Chapter { 231 - created_at: self.__unsafe_private_named.0, 232 - entry_list: self.__unsafe_private_named.1.unwrap(), 233 - notebook: self.__unsafe_private_named.2.unwrap(), 234 - tags: self.__unsafe_private_named.3, 235 - title: self.__unsafe_private_named.4, 253 + authors: self.__unsafe_private_named.0.unwrap(), 254 + created_at: self.__unsafe_private_named.1, 255 + entry_list: self.__unsafe_private_named.2.unwrap(), 256 + notebook: self.__unsafe_private_named.3.unwrap(), 257 + tags: self.__unsafe_private_named.4, 258 + title: self.__unsafe_private_named.5, 236 259 extra_data: Default::default(), 237 260 } 238 261 } ··· 245 268 >, 246 269 ) -> Chapter<'a> { 247 270 Chapter { 248 - created_at: self.__unsafe_private_named.0, 249 - entry_list: self.__unsafe_private_named.1.unwrap(), 250 - notebook: self.__unsafe_private_named.2.unwrap(), 251 - tags: self.__unsafe_private_named.3, 252 - title: self.__unsafe_private_named.4, 271 + authors: self.__unsafe_private_named.0.unwrap(), 272 + created_at: self.__unsafe_private_named.1, 273 + entry_list: self.__unsafe_private_named.2.unwrap(), 274 + notebook: self.__unsafe_private_named.3.unwrap(), 275 + tags: self.__unsafe_private_named.4, 276 + title: self.__unsafe_private_named.5, 253 277 extra_data: Some(extra_data), 254 278 } 255 279 } ··· 348 372 ::jacquard_lexicon::lexicon::LexUserType::Record(::jacquard_lexicon::lexicon::LexRecord { 349 373 description: Some( 350 374 ::jacquard_common::CowStr::new_static( 351 - "A grouping of entries in a notebook, intended to be displayed as a single page.", 375 + "A grouping of entries in a notebook.", 352 376 ), 353 377 ), 354 378 key: Some(::jacquard_common::CowStr::new_static("tid")), ··· 365 389 properties: { 366 390 #[allow(unused_mut)] 367 391 let mut map = ::std::collections::BTreeMap::new(); 392 + map.insert( 393 + ::jacquard_common::smol_str::SmolStr::new_static("authors"), 394 + ::jacquard_lexicon::lexicon::LexObjectProperty::Array(::jacquard_lexicon::lexicon::LexArray { 395 + description: None, 396 + items: ::jacquard_lexicon::lexicon::LexArrayItem::Ref(::jacquard_lexicon::lexicon::LexRef { 397 + description: None, 398 + r#ref: ::jacquard_common::CowStr::new_static( 399 + "sh.weaver.actor.defs#author", 400 + ), 401 + }), 402 + min_length: None, 403 + max_length: None, 404 + }), 405 + ); 368 406 map.insert( 369 407 ::jacquard_common::smol_str::SmolStr::new_static( 370 408 "createdAt",
+444
crates/weaver-api/src/sh_weaver/notebook/page.rs
··· 1 + // @generated by jacquard-lexicon. DO NOT EDIT. 2 + // 3 + // Lexicon: sh.weaver.notebook.page 4 + // 5 + // This file was automatically generated from Lexicon schemas. 6 + // Any manual changes will be overwritten on the next regeneration. 7 + 8 + /// A grouping of entries in a notebook, intended to be displayed as a single page. 9 + #[jacquard_derive::lexicon] 10 + #[derive( 11 + serde::Serialize, 12 + serde::Deserialize, 13 + Debug, 14 + Clone, 15 + PartialEq, 16 + Eq, 17 + jacquard_derive::IntoStatic 18 + )] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct Page<'a> { 21 + /// Client-declared timestamp when this was originally created. 22 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 23 + pub created_at: Option<jacquard_common::types::string::Datetime>, 24 + #[serde(borrow)] 25 + pub entry_list: Vec<crate::com_atproto::repo::strong_ref::StrongRef<'a>>, 26 + /// The notebook this page belongs to. 27 + #[serde(borrow)] 28 + pub notebook: crate::com_atproto::repo::strong_ref::StrongRef<'a>, 29 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 30 + #[serde(borrow)] 31 + pub tags: Option<crate::sh_weaver::notebook::Tags<'a>>, 32 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 33 + #[serde(borrow)] 34 + pub title: Option<crate::sh_weaver::notebook::Title<'a>>, 35 + } 36 + 37 + pub mod page_state { 38 + 39 + pub use crate::builder_types::{Set, Unset, IsSet, IsUnset}; 40 + #[allow(unused)] 41 + use ::core::marker::PhantomData; 42 + mod sealed { 43 + pub trait Sealed {} 44 + } 45 + /// State trait tracking which required fields have been set 46 + pub trait State: sealed::Sealed { 47 + type Notebook; 48 + type Authors; 49 + type EntryList; 50 + } 51 + /// Empty state - all required fields are unset 52 + pub struct Empty(()); 53 + impl sealed::Sealed for Empty {} 54 + impl State for Empty { 55 + type Notebook = Unset; 56 + type Authors = Unset; 57 + type EntryList = Unset; 58 + } 59 + ///State transition - sets the `notebook` field to Set 60 + pub struct SetNotebook<S: State = Empty>(PhantomData<fn() -> S>); 61 + impl<S: State> sealed::Sealed for SetNotebook<S> {} 62 + impl<S: State> State for SetNotebook<S> { 63 + type Notebook = Set<members::notebook>; 64 + type Authors = S::Authors; 65 + type EntryList = S::EntryList; 66 + } 67 + ///State transition - sets the `authors` field to Set 68 + pub struct SetAuthors<S: State = Empty>(PhantomData<fn() -> S>); 69 + impl<S: State> sealed::Sealed for SetAuthors<S> {} 70 + impl<S: State> State for SetAuthors<S> { 71 + type Notebook = S::Notebook; 72 + type Authors = Set<members::authors>; 73 + type EntryList = S::EntryList; 74 + } 75 + ///State transition - sets the `entry_list` field to Set 76 + pub struct SetEntryList<S: State = Empty>(PhantomData<fn() -> S>); 77 + impl<S: State> sealed::Sealed for SetEntryList<S> {} 78 + impl<S: State> State for SetEntryList<S> { 79 + type Notebook = S::Notebook; 80 + type Authors = S::Authors; 81 + type EntryList = Set<members::entry_list>; 82 + } 83 + /// Marker types for field names 84 + #[allow(non_camel_case_types)] 85 + pub mod members { 86 + ///Marker type for the `notebook` field 87 + pub struct notebook(()); 88 + ///Marker type for the `authors` field 89 + pub struct authors(()); 90 + ///Marker type for the `entry_list` field 91 + pub struct entry_list(()); 92 + } 93 + } 94 + 95 + /// Builder for constructing an instance of this type 96 + pub struct PageBuilder<'a, S: page_state::State> { 97 + _phantom_state: ::core::marker::PhantomData<fn() -> S>, 98 + __unsafe_private_named: ( 99 + ::core::option::Option<jacquard_common::types::string::Datetime>, 100 + ::core::option::Option<Vec<crate::com_atproto::repo::strong_ref::StrongRef<'a>>>, 101 + ::core::option::Option<crate::com_atproto::repo::strong_ref::StrongRef<'a>>, 102 + ::core::option::Option<crate::sh_weaver::notebook::Tags<'a>>, 103 + ::core::option::Option<crate::sh_weaver::notebook::Title<'a>>, 104 + ), 105 + _phantom: ::core::marker::PhantomData<&'a ()>, 106 + } 107 + 108 + impl<'a> Page<'a> { 109 + /// Create a new builder for this type 110 + pub fn new() -> PageBuilder<'a, page_state::Empty> { 111 + PageBuilder::new() 112 + } 113 + } 114 + 115 + impl<'a> PageBuilder<'a, page_state::Empty> { 116 + /// Create a new builder with all fields unset 117 + pub fn new() -> Self { 118 + PageBuilder { 119 + _phantom_state: ::core::marker::PhantomData, 120 + __unsafe_private_named: (None, None, None, None, None), 121 + _phantom: ::core::marker::PhantomData, 122 + } 123 + } 124 + } 125 + 126 + impl<'a, S: page_state::State> PageBuilder<'a, S> { 127 + /// Set the `createdAt` field (optional) 128 + pub fn created_at( 129 + mut self, 130 + value: impl Into<Option<jacquard_common::types::string::Datetime>>, 131 + ) -> Self { 132 + self.__unsafe_private_named.0 = value.into(); 133 + self 134 + } 135 + /// Set the `createdAt` field to an Option value (optional) 136 + pub fn maybe_created_at( 137 + mut self, 138 + value: Option<jacquard_common::types::string::Datetime>, 139 + ) -> Self { 140 + self.__unsafe_private_named.0 = value; 141 + self 142 + } 143 + } 144 + 145 + impl<'a, S> PageBuilder<'a, S> 146 + where 147 + S: page_state::State, 148 + S::EntryList: page_state::IsUnset, 149 + { 150 + /// Set the `entryList` field (required) 151 + pub fn entry_list( 152 + mut self, 153 + value: impl Into<Vec<crate::com_atproto::repo::strong_ref::StrongRef<'a>>>, 154 + ) -> PageBuilder<'a, page_state::SetEntryList<S>> { 155 + self.__unsafe_private_named.1 = ::core::option::Option::Some(value.into()); 156 + PageBuilder { 157 + _phantom_state: ::core::marker::PhantomData, 158 + __unsafe_private_named: self.__unsafe_private_named, 159 + _phantom: ::core::marker::PhantomData, 160 + } 161 + } 162 + } 163 + 164 + impl<'a, S> PageBuilder<'a, S> 165 + where 166 + S: page_state::State, 167 + S::Notebook: page_state::IsUnset, 168 + { 169 + /// Set the `notebook` field (required) 170 + pub fn notebook( 171 + mut self, 172 + value: impl Into<crate::com_atproto::repo::strong_ref::StrongRef<'a>>, 173 + ) -> PageBuilder<'a, page_state::SetNotebook<S>> { 174 + self.__unsafe_private_named.2 = ::core::option::Option::Some(value.into()); 175 + PageBuilder { 176 + _phantom_state: ::core::marker::PhantomData, 177 + __unsafe_private_named: self.__unsafe_private_named, 178 + _phantom: ::core::marker::PhantomData, 179 + } 180 + } 181 + } 182 + 183 + impl<'a, S: page_state::State> PageBuilder<'a, S> { 184 + /// Set the `tags` field (optional) 185 + pub fn tags( 186 + mut self, 187 + value: impl Into<Option<crate::sh_weaver::notebook::Tags<'a>>>, 188 + ) -> Self { 189 + self.__unsafe_private_named.3 = value.into(); 190 + self 191 + } 192 + /// Set the `tags` field to an Option value (optional) 193 + pub fn maybe_tags( 194 + mut self, 195 + value: Option<crate::sh_weaver::notebook::Tags<'a>>, 196 + ) -> Self { 197 + self.__unsafe_private_named.3 = value; 198 + self 199 + } 200 + } 201 + 202 + impl<'a, S: page_state::State> PageBuilder<'a, S> { 203 + /// Set the `title` field (optional) 204 + pub fn title( 205 + mut self, 206 + value: impl Into<Option<crate::sh_weaver::notebook::Title<'a>>>, 207 + ) -> Self { 208 + self.__unsafe_private_named.4 = value.into(); 209 + self 210 + } 211 + /// Set the `title` field to an Option value (optional) 212 + pub fn maybe_title( 213 + mut self, 214 + value: Option<crate::sh_weaver::notebook::Title<'a>>, 215 + ) -> Self { 216 + self.__unsafe_private_named.4 = value; 217 + self 218 + } 219 + } 220 + 221 + impl<'a, S> PageBuilder<'a, S> 222 + where 223 + S: page_state::State, 224 + S::Notebook: page_state::IsSet, 225 + S::Authors: page_state::IsSet, 226 + S::EntryList: page_state::IsSet, 227 + { 228 + /// Build the final struct 229 + pub fn build(self) -> Page<'a> { 230 + Page { 231 + created_at: self.__unsafe_private_named.0, 232 + entry_list: self.__unsafe_private_named.1.unwrap(), 233 + notebook: self.__unsafe_private_named.2.unwrap(), 234 + tags: self.__unsafe_private_named.3, 235 + title: self.__unsafe_private_named.4, 236 + extra_data: Default::default(), 237 + } 238 + } 239 + /// Build the final struct with custom extra_data 240 + pub fn build_with_data( 241 + self, 242 + extra_data: std::collections::BTreeMap< 243 + jacquard_common::smol_str::SmolStr, 244 + jacquard_common::types::value::Data<'a>, 245 + >, 246 + ) -> Page<'a> { 247 + Page { 248 + created_at: self.__unsafe_private_named.0, 249 + entry_list: self.__unsafe_private_named.1.unwrap(), 250 + notebook: self.__unsafe_private_named.2.unwrap(), 251 + tags: self.__unsafe_private_named.3, 252 + title: self.__unsafe_private_named.4, 253 + extra_data: Some(extra_data), 254 + } 255 + } 256 + } 257 + 258 + impl<'a> Page<'a> { 259 + pub fn uri( 260 + uri: impl Into<jacquard_common::CowStr<'a>>, 261 + ) -> Result< 262 + jacquard_common::types::uri::RecordUri<'a, PageRecord>, 263 + jacquard_common::types::uri::UriError, 264 + > { 265 + jacquard_common::types::uri::RecordUri::try_from_uri( 266 + jacquard_common::types::string::AtUri::new_cow(uri.into())?, 267 + ) 268 + } 269 + } 270 + 271 + /// Typed wrapper for GetRecord response with this collection's record type. 272 + #[derive( 273 + serde::Serialize, 274 + serde::Deserialize, 275 + Debug, 276 + Clone, 277 + PartialEq, 278 + Eq, 279 + jacquard_derive::IntoStatic 280 + )] 281 + #[serde(rename_all = "camelCase")] 282 + pub struct PageGetRecordOutput<'a> { 283 + #[serde(skip_serializing_if = "std::option::Option::is_none")] 284 + #[serde(borrow)] 285 + pub cid: std::option::Option<jacquard_common::types::string::Cid<'a>>, 286 + #[serde(borrow)] 287 + pub uri: jacquard_common::types::string::AtUri<'a>, 288 + #[serde(borrow)] 289 + pub value: Page<'a>, 290 + } 291 + 292 + impl From<PageGetRecordOutput<'_>> for Page<'_> { 293 + fn from(output: PageGetRecordOutput<'_>) -> Self { 294 + use jacquard_common::IntoStatic; 295 + output.value.into_static() 296 + } 297 + } 298 + 299 + impl jacquard_common::types::collection::Collection for Page<'_> { 300 + const NSID: &'static str = "sh.weaver.notebook.page"; 301 + type Record = PageRecord; 302 + } 303 + 304 + /// Marker type for deserializing records from this collection. 305 + #[derive(Debug, serde::Serialize, serde::Deserialize)] 306 + pub struct PageRecord; 307 + impl jacquard_common::xrpc::XrpcResp for PageRecord { 308 + const NSID: &'static str = "sh.weaver.notebook.page"; 309 + const ENCODING: &'static str = "application/json"; 310 + type Output<'de> = PageGetRecordOutput<'de>; 311 + type Err<'de> = jacquard_common::types::collection::RecordError<'de>; 312 + } 313 + 314 + impl jacquard_common::types::collection::Collection for PageRecord { 315 + const NSID: &'static str = "sh.weaver.notebook.page"; 316 + type Record = PageRecord; 317 + } 318 + 319 + impl<'a> ::jacquard_lexicon::schema::LexiconSchema for Page<'a> { 320 + fn nsid() -> &'static str { 321 + "sh.weaver.notebook.page" 322 + } 323 + fn def_name() -> &'static str { 324 + "main" 325 + } 326 + fn lexicon_doc() -> ::jacquard_lexicon::lexicon::LexiconDoc<'static> { 327 + lexicon_doc_sh_weaver_notebook_page() 328 + } 329 + fn validate( 330 + &self, 331 + ) -> ::std::result::Result<(), ::jacquard_lexicon::validation::ConstraintError> { 332 + Ok(()) 333 + } 334 + } 335 + 336 + fn lexicon_doc_sh_weaver_notebook_page() -> ::jacquard_lexicon::lexicon::LexiconDoc< 337 + 'static, 338 + > { 339 + ::jacquard_lexicon::lexicon::LexiconDoc { 340 + lexicon: ::jacquard_lexicon::lexicon::Lexicon::Lexicon1, 341 + id: ::jacquard_common::CowStr::new_static("sh.weaver.notebook.page"), 342 + revision: None, 343 + description: None, 344 + defs: { 345 + let mut map = ::std::collections::BTreeMap::new(); 346 + map.insert( 347 + ::jacquard_common::smol_str::SmolStr::new_static("main"), 348 + ::jacquard_lexicon::lexicon::LexUserType::Record(::jacquard_lexicon::lexicon::LexRecord { 349 + description: Some( 350 + ::jacquard_common::CowStr::new_static( 351 + "A grouping of entries in a notebook, intended to be displayed as a single page.", 352 + ), 353 + ), 354 + key: Some(::jacquard_common::CowStr::new_static("tid")), 355 + record: ::jacquard_lexicon::lexicon::LexRecordRecord::Object(::jacquard_lexicon::lexicon::LexObject { 356 + description: None, 357 + required: Some( 358 + vec![ 359 + ::jacquard_common::smol_str::SmolStr::new_static("notebook"), 360 + ::jacquard_common::smol_str::SmolStr::new_static("authors"), 361 + ::jacquard_common::smol_str::SmolStr::new_static("entryList") 362 + ], 363 + ), 364 + nullable: None, 365 + properties: { 366 + #[allow(unused_mut)] 367 + let mut map = ::std::collections::BTreeMap::new(); 368 + map.insert( 369 + ::jacquard_common::smol_str::SmolStr::new_static( 370 + "createdAt", 371 + ), 372 + ::jacquard_lexicon::lexicon::LexObjectProperty::String(::jacquard_lexicon::lexicon::LexString { 373 + description: Some( 374 + ::jacquard_common::CowStr::new_static( 375 + "Client-declared timestamp when this was originally created.", 376 + ), 377 + ), 378 + format: Some( 379 + ::jacquard_lexicon::lexicon::LexStringFormat::Datetime, 380 + ), 381 + default: None, 382 + min_length: None, 383 + max_length: None, 384 + min_graphemes: None, 385 + max_graphemes: None, 386 + r#enum: None, 387 + r#const: None, 388 + known_values: None, 389 + }), 390 + ); 391 + map.insert( 392 + ::jacquard_common::smol_str::SmolStr::new_static( 393 + "entryList", 394 + ), 395 + ::jacquard_lexicon::lexicon::LexObjectProperty::Array(::jacquard_lexicon::lexicon::LexArray { 396 + description: None, 397 + items: ::jacquard_lexicon::lexicon::LexArrayItem::Ref(::jacquard_lexicon::lexicon::LexRef { 398 + description: None, 399 + r#ref: ::jacquard_common::CowStr::new_static( 400 + "com.atproto.repo.strongRef", 401 + ), 402 + }), 403 + min_length: None, 404 + max_length: None, 405 + }), 406 + ); 407 + map.insert( 408 + ::jacquard_common::smol_str::SmolStr::new_static( 409 + "notebook", 410 + ), 411 + ::jacquard_lexicon::lexicon::LexObjectProperty::Ref(::jacquard_lexicon::lexicon::LexRef { 412 + description: None, 413 + r#ref: ::jacquard_common::CowStr::new_static( 414 + "com.atproto.repo.strongRef", 415 + ), 416 + }), 417 + ); 418 + map.insert( 419 + ::jacquard_common::smol_str::SmolStr::new_static("tags"), 420 + ::jacquard_lexicon::lexicon::LexObjectProperty::Ref(::jacquard_lexicon::lexicon::LexRef { 421 + description: None, 422 + r#ref: ::jacquard_common::CowStr::new_static( 423 + "sh.weaver.notebook.defs#tags", 424 + ), 425 + }), 426 + ); 427 + map.insert( 428 + ::jacquard_common::smol_str::SmolStr::new_static("title"), 429 + ::jacquard_lexicon::lexicon::LexObjectProperty::Ref(::jacquard_lexicon::lexicon::LexRef { 430 + description: None, 431 + r#ref: ::jacquard_common::CowStr::new_static( 432 + "sh.weaver.notebook.defs#title", 433 + ), 434 + }), 435 + ); 436 + map 437 + }, 438 + }), 439 + }), 440 + ); 441 + map 442 + }, 443 + } 444 + }
-1
crates/weaver-appview/Cargo.toml
··· 11 11 12 12 [dependencies] 13 13 weaver-common = { path = "../weaver-common", default-features = false } 14 - weaver-workspace-hack = { version = "0.1", path = "../weaver-workspace-hack" } 15 14 clap = { version = "4.5", features = ["derive", "env", "cargo", "unicode"] } 16 15 dotenvy = "0.15" 17 16
+1 -2
crates/weaver-cli/Cargo.toml
··· 13 13 clap = { version = "4.5", features = ["derive", "env", "cargo", "unicode"] } 14 14 weaver-common = { path = "../weaver-common", features = ["native"] } 15 15 weaver-renderer = { path = "../weaver-renderer" } 16 - weaver-workspace-hack = { version = "0.1", path = "../weaver-workspace-hack" } 17 16 miette = { workspace = true, features = ["fancy"] } 18 17 19 - jacquard = { workspace = true, features = ["loopback"] } 18 + jacquard = { workspace = true, features = ["loopback", "dns"] } 20 19 jacquard-api = { workspace = true, features = ["sh_weaver"] } 21 20 22 21 tokio = { version = "1.45.0", features = ["full"] }
+3 -14
crates/weaver-common/Cargo.toml
··· 8 8 [features] 9 9 default = ["dev"] 10 10 dev = [] 11 - native = ["tokio"] 11 + native = ["jacquard/dns"] 12 12 13 13 [dependencies] 14 14 n0-future = { workspace = true } 15 - weaver-workspace-hack = { version = "0.1", path = "../weaver-workspace-hack" } 16 15 weaver-api = { version = "0.1", path = "../weaver-api" } 17 16 markdown-weaver = { workspace = true } 18 17 #libsqlite3-sys = { version = "0.30.1", features = ["bundled"] } ··· 25 24 serde = { workspace = true } 26 25 serde_json = { version = "1.0.140", features = ["preserve_order", "raw_value"] } 27 26 serde_ipld_dagcbor = { version = "0.6.1", features = ["codec"] } 28 - serde_cbor = "0.11.2" 29 27 serde_html_form = "0.2.7" 30 28 serde_bytes = "0.11.17" 29 + tokio = { version = "1.44", features = ["sync"] } 31 30 32 31 minijinja = { workspace = true, features = [ 33 32 "builtins", ··· 45 44 owo-colors = { workspace = true } 46 45 thiserror = { workspace = true } 47 46 tracing = { workspace = true } 48 - hickory-resolver = "0.24.1" 49 - toml = "0.8.22" 50 - #jose = { version = "0.0.2", features = ["crypto-rustcrypto"] } 51 - jose-jwk = "0.1.2" 52 47 reqwest = "0.12.15" 53 - tokio = { version = "1.44", features = ["full"], optional = true } 54 - 55 - tower-service = "0.3.3" 56 - tower-layer = "0.3.3" 57 - multibase = "0.9.1" 58 - dirs = "6.0.0" 59 48 regex = "1.11.1" 60 49 markdown-weaver-escape = { workspace = true, features = ["std"] } 61 - tree_magic.workspace = true 50 + mime-sniffer = "^0.1" 62 51 63 52 64 53 [dev-dependencies]
-2
crates/weaver-common/src/error.rs
··· 112 112 #[diagnostic_source] 113 113 Json(#[from] serde_json::Error), 114 114 #[error(transparent)] 115 - Cbor(#[from] serde_cbor::Error), 116 - #[error(transparent)] 117 115 DagCbor(#[from] serde_ipld_dagcbor::error::CodecError), 118 116 #[error(transparent)] 119 117 HtmlForm(#[from] serde_html_form::ser::Error),
+6 -1
crates/weaver-common/src/lib.rs
··· 1 1 //! Weaver common library - thin wrapper around jacquard with notebook-specific conveniences 2 2 3 3 pub mod error; 4 + pub mod view; 4 5 5 6 // Re-export jacquard for convenience 6 7 pub use jacquard; ··· 18 19 use jacquard::types::blob::{BlobRef, MimeType}; 19 20 use jacquard::types::string::{AtUri, Cid, Did, Handle, RecordKey}; 20 21 use jacquard::xrpc::Response; 22 + use mime_sniffer::MimeTypeSniffer; 21 23 use std::path::Path; 22 24 use std::sync::LazyLock; 23 25 use tokio::sync::Mutex; ··· 90 92 url_path: &'a str, 91 93 prev: Option<Tid>, 92 94 ) -> Result<(StrongRef<'a>, PublishedBlob<'a>), WeaverError> { 93 - let mime_type = MimeType::new_owned(tree_magic::from_u8(blob.as_ref())); 95 + let mime_type = MimeType::new_owned( 96 + blob.sniff_mime_type() 97 + .unwrap_or("applicaction/octet-stream"), 98 + ); 94 99 95 100 let blob = self.upload_blob(blob, mime_type).await?; 96 101 let publish_record = PublishedBlob::new()
+284
crates/weaver-common/src/view.rs
··· 1 + use std::sync::Arc; 2 + 3 + use jacquard::{ 4 + IntoStatic, 5 + client::{AgentSessionExt, BasicClient}, 6 + from_data, 7 + prelude::IdentityResolver, 8 + to_data, 9 + types::{ 10 + aturi::AtUri, collection::Collection, did::Did, ident::AtIdentifier, nsid::Nsid, 11 + string::Datetime, 12 + }, 13 + xrpc::XrpcExt, 14 + }; 15 + use miette::{IntoDiagnostic, Result}; 16 + use weaver_api::{ 17 + app_bsky::actor::profile::Profile as BskyProfile, 18 + com_atproto::repo::{list_records::ListRecords, strong_ref::StrongRef}, 19 + sh_weaver::notebook::{ 20 + AuthorListView, BookEntryRef, BookEntryView, EntryView, NotebookView, book::Book, 21 + entry::Entry, page::Page, 22 + }, 23 + }; 24 + 25 + pub async fn view_notebook( 26 + client: Arc<BasicClient>, 27 + uri: &AtUri<'_>, 28 + ) -> Result<(NotebookView<'static>, Vec<StrongRef<'static>>)> { 29 + let notebook = client.get_record::<Book>(uri).await?.into_output()?; 30 + 31 + let title = notebook.value.title.clone(); 32 + let tags = notebook.value.tags.clone(); 33 + 34 + let mut authors = Vec::new(); 35 + 36 + for (index, author) in notebook.value.authors.iter().enumerate() { 37 + // TODO: swap to using weaver profiles here, or pick between them 38 + let author_uri = 39 + BskyProfile::uri(format!("at://{}/app.bsky.actor.profile/self", author.did))?; 40 + let author_profile = client.fetch_record(&author_uri).await?; 41 + 42 + authors.push( 43 + AuthorListView::new() 44 + .uri(author_uri.as_uri().clone()) 45 + .record(to_data(&author_profile)?) 46 + .index(index as i64) 47 + .build(), 48 + ); 49 + } 50 + let entries = notebook 51 + .value 52 + .entry_list 53 + .iter() 54 + .cloned() 55 + .map(IntoStatic::into_static) 56 + .collect(); 57 + 58 + Ok(( 59 + NotebookView::new() 60 + .cid(notebook.cid.unwrap()) 61 + .uri(notebook.uri) 62 + .indexed_at(Datetime::now()) 63 + .maybe_title(title) 64 + .maybe_tags(tags) 65 + .authors(authors) 66 + .record(to_data(&notebook.value)?) 67 + .build(), 68 + entries, 69 + )) 70 + } 71 + 72 + pub async fn fetch_entry_view<'a>( 73 + client: Arc<BasicClient>, 74 + notebook: &NotebookView<'a>, 75 + entry_ref: &StrongRef<'_>, 76 + ) -> Result<EntryView<'a>> { 77 + let entry = client 78 + .fetch_record(&Entry::uri(entry_ref.uri.clone())?) 79 + .await?; 80 + 81 + let title = entry.value.title.clone(); 82 + let tags = entry.value.tags.clone(); 83 + 84 + Ok(EntryView::new() 85 + .cid(entry.cid.unwrap()) 86 + .uri(entry.uri) 87 + .indexed_at(Datetime::now()) 88 + .record(to_data(&entry.value)?) 89 + .maybe_tags(tags) 90 + .title(title) 91 + .authors(notebook.authors.clone()) 92 + .build()) 93 + } 94 + 95 + pub async fn view_entry<'a>( 96 + client: Arc<BasicClient>, 97 + notebook: &NotebookView<'a>, 98 + entries: &[StrongRef<'_>], 99 + index: usize, 100 + ) -> Result<BookEntryView<'a>> { 101 + let entry_ref = entries 102 + .get(index) 103 + .ok_or(miette::miette!("entry out of bounds"))?; 104 + let entry = fetch_entry_view(client.clone(), notebook, entry_ref).await?; 105 + let prev_entry = if index > 0 { 106 + let prev_entry_ref = entries[index - 1].clone(); 107 + fetch_entry_view(client.clone(), notebook, &prev_entry_ref) 108 + .await 109 + .ok() 110 + } else { 111 + None 112 + } 113 + .map(|e| BookEntryRef::new().entry(e).build()); 114 + let next_entry = if index < entries.len() - 1 { 115 + let next_entry_ref = entries[index + 1].clone(); 116 + fetch_entry_view(client.clone(), notebook, &next_entry_ref) 117 + .await 118 + .ok() 119 + } else { 120 + None 121 + } 122 + .map(|e| BookEntryRef::new().entry(e).build()); 123 + Ok(BookEntryView::new() 124 + .entry(entry) 125 + .maybe_next(next_entry) 126 + .maybe_prev(prev_entry) 127 + .index(index as i64) 128 + .build()) 129 + } 130 + 131 + pub async fn fetch_page_view<'a>( 132 + client: Arc<BasicClient>, 133 + notebook: &NotebookView<'a>, 134 + entry_ref: &StrongRef<'_>, 135 + ) -> Result<EntryView<'a>> { 136 + let entry = client 137 + .fetch_record(&Page::uri(entry_ref.uri.clone())?) 138 + .await?; 139 + 140 + let title = entry.value.title.clone(); 141 + let tags = entry.value.tags.clone(); 142 + 143 + Ok(EntryView::new() 144 + .cid(entry.cid.unwrap()) 145 + .uri(entry.uri) 146 + .indexed_at(Datetime::now()) 147 + .record(to_data(&entry.value)?) 148 + .maybe_tags(tags) 149 + .title(title) 150 + .authors(notebook.authors.clone()) 151 + .build()) 152 + } 153 + 154 + pub async fn view_page<'a>( 155 + client: Arc<BasicClient>, 156 + notebook: &NotebookView<'a>, 157 + pages: &[StrongRef<'_>], 158 + index: usize, 159 + ) -> Result<BookEntryView<'a>> { 160 + let entry_ref = pages 161 + .get(index) 162 + .ok_or(miette::miette!("entry out of bounds"))?; 163 + let entry = fetch_page_view(client.clone(), notebook, entry_ref).await?; 164 + let prev_entry = if index > 0 { 165 + let prev_entry_ref = pages[index - 1].clone(); 166 + fetch_page_view(client.clone(), notebook, &prev_entry_ref) 167 + .await 168 + .ok() 169 + } else { 170 + None 171 + } 172 + .map(|e| BookEntryRef::new().entry(e).build()); 173 + let next_entry = if index < pages.len() - 1 { 174 + let next_entry_ref = pages[index + 1].clone(); 175 + fetch_page_view(client.clone(), notebook, &next_entry_ref) 176 + .await 177 + .ok() 178 + } else { 179 + None 180 + } 181 + .map(|e| BookEntryRef::new().entry(e).build()); 182 + Ok(BookEntryView::new() 183 + .entry(entry) 184 + .maybe_next(next_entry) 185 + .maybe_prev(prev_entry) 186 + .index(index as i64) 187 + .build()) 188 + } 189 + 190 + pub async fn entry_by_title<'a>( 191 + client: Arc<BasicClient>, 192 + notebook: &NotebookView<'a>, 193 + entries: &[StrongRef<'_>], 194 + title: &str, 195 + ) -> Result<Option<(BookEntryView<'a>, Entry<'a>)>> { 196 + for (index, entry_ref) in entries.iter().enumerate() { 197 + let resp = client.get_record::<Entry>(&entry_ref.uri).await?; 198 + if let Ok(entry) = resp.parse() 199 + && entry.value.title == title 200 + { 201 + return Ok(Some(( 202 + view_entry(client.clone(), notebook, entries, index).await?, 203 + entry.value.into_static(), 204 + ))); 205 + } 206 + } 207 + Ok(None) 208 + } 209 + 210 + pub async fn notebook_by_title<'a>( 211 + client: Arc<BasicClient>, 212 + ident: &AtIdentifier<'_>, 213 + title: &str, 214 + ) -> Result<Option<(NotebookView<'static>, Vec<StrongRef<'static>>)>> { 215 + let (repo_did, pds_url) = match ident { 216 + AtIdentifier::Did(did) => { 217 + let pds = client.pds_for_did(did).await?; 218 + (did.clone(), pds) 219 + } 220 + AtIdentifier::Handle(handle) => client.pds_for_handle(handle).await?, 221 + }; 222 + // TODO: use the cursor to search through all records with this NSID for the repo 223 + let resp = client 224 + .xrpc(pds_url) 225 + .send( 226 + &ListRecords::new() 227 + .repo(repo_did) 228 + .collection(Nsid::raw(Book::NSID)) 229 + .limit(100) 230 + .build(), 231 + ) 232 + .await?; 233 + if let Ok(list) = resp.parse() { 234 + for record in list.records { 235 + let notebook: Book = from_data(&record.value).into_diagnostic()?; 236 + if let Some(book_title) = notebook.title 237 + && book_title == title 238 + { 239 + let tags = notebook.tags.clone(); 240 + 241 + let mut authors = Vec::new(); 242 + 243 + for (index, author) in notebook.authors.iter().enumerate() { 244 + // TODO: swap to using weaver profiles here, or pick between them 245 + let author_uri = BskyProfile::uri(format!( 246 + "at://{}/app.bsky.actor.profile/self", 247 + author.did 248 + ))?; 249 + let author_profile = client.fetch_record(&author_uri).await?; 250 + 251 + authors.push( 252 + AuthorListView::new() 253 + .uri(author_uri.as_uri().clone()) 254 + .record(to_data(&author_profile)?) 255 + .index(index as i64) 256 + .build(), 257 + ); 258 + } 259 + let entries = notebook 260 + .entry_list 261 + .iter() 262 + .cloned() 263 + .map(IntoStatic::into_static) 264 + .collect(); 265 + 266 + return Ok(Some(( 267 + NotebookView::new() 268 + .cid(record.cid) 269 + .uri(record.uri) 270 + .indexed_at(Datetime::now()) 271 + .title(book_title) 272 + .maybe_tags(tags) 273 + .authors(authors) 274 + .record(record.value.clone()) 275 + .build() 276 + .into_static(), 277 + entries, 278 + ))); 279 + } 280 + } 281 + } 282 + 283 + Ok(None) 284 + }
+2 -4
crates/weaver-renderer/Cargo.toml
··· 9 9 n0-future.workspace = true 10 10 weaver-common = { path = "../weaver-common" } 11 11 markdown-weaver = { workspace = true } 12 - weaver-workspace-hack = { version = "0.1", path = "../weaver-workspace-hack" } 13 12 compact_string = "0.1.0" 14 13 http = "1.3.1" 15 14 url = "2.5.4" ··· 17 16 markdown-weaver-escape = { workspace = true, features = ["std"] } 18 17 thiserror.workspace = true 19 18 miette.workspace = true 20 - pathdiff = "0.2.3" 21 19 unicode-normalization = "0.1.24" 22 20 yaml-rust2 = { version = "0.10.2" } 23 21 bitflags = "2.9.1" 24 - ignore = "0.4.23" 22 + 25 23 dashmap = "6.1.0" 26 24 regex = "1.11.1" 27 25 pin-utils = "0.1.0" 28 26 pin-project = "1.1.10" 29 27 dynosaur = "0.2.0" 30 - async-trait = "0.1.88" 31 28 smol_str = { version = "0.3", features = ["serde"] } 32 29 reqwest = { version = "0.12.7", default-features = false, features = [ 33 30 "json", ··· 37 34 [target.'cfg(not(all(target_family = "wasm", target_os = "unknown")))'.dependencies] 38 35 tokio = { version = "1.28", features = ["rt", "time"] } 39 36 tokio-util = { version = "0.7.14", features = ["rt"] } 37 + ignore = "0.4.23" 40 38 41 39 [dev-dependencies] 42 40 insta = { version = "1.40", features = ["yaml"] }
+41 -14
crates/weaver-renderer/src/css.rs
··· 1 1 use crate::theme::Theme; 2 2 use miette::IntoDiagnostic; 3 + use std::io::Cursor; 3 4 use syntect::highlighting::{Theme as SyntectTheme, ThemeSet}; 4 5 use syntect::html::{ClassStyle, css_for_theme_with_class_style}; 5 6 use syntect::parsing::SyntaxSet; 6 - use std::io::Cursor; 7 7 8 8 // Embed rose-pine themes at compile time 9 9 const ROSE_PINE_THEME: &str = include_str!("../themes/rose-pine.tmTheme"); ··· 24 24 --color-foreground: {}; 25 25 --color-link: {}; 26 26 --color-link-hover: {}; 27 + --color-primary: {}; 28 + --color-secondary: {}; 27 29 28 30 --font-body: {}; 29 31 --font-heading: {}; ··· 57 59 line-height: 1.2; 58 60 }} 59 61 60 - h1 {{ font-size: 2.5rem; }} 61 - h2 {{ font-size: 2rem; }} 62 - h3 {{ font-size: 1.5rem; }} 63 - h4 {{ font-size: 1.25rem; }} 64 - h5 {{ font-size: 1.125rem; }} 62 + h1 {{ 63 + font-size: 2.5rem; 64 + color: var(--color-primary); 65 + }} 66 + h2 {{ 67 + font-size: 2rem; 68 + color: var(--color-secondary); 69 + }} 70 + h3 {{ 71 + font-size: 1.5rem; 72 + color: var(--color-primary); 73 + }} 74 + h4 {{ 75 + font-size: 1.25rem; 76 + color: var(--color-secondary); 77 + }} 78 + h5 {{ 79 + font-size: 1.125rem; 80 + color: var(--color-primary); 81 + }} 65 82 h6 {{ font-size: 1rem; }} 66 83 67 84 p {{ ··· 174 191 theme.colors.foreground, 175 192 theme.colors.link, 176 193 theme.colors.link_hover, 194 + theme.colors.primary, 195 + theme.colors.secondary, 177 196 theme.fonts.body, 178 197 theme.fonts.heading, 179 198 theme.fonts.monospace, ··· 183 202 ) 184 203 } 185 204 186 - pub fn generate_syntax_css( 187 - theme: &Theme, 188 - _syntax_set: &SyntaxSet, 189 - ) -> miette::Result<String> { 205 + pub fn generate_syntax_css(theme: &Theme, _syntax_set: &SyntaxSet) -> miette::Result<String> { 190 206 let syntect_theme = if let Some(custom_path) = &theme.custom_syntect_theme_path { 191 207 // Load custom theme from file 192 208 ThemeSet::get_theme(custom_path) 193 209 .into_diagnostic() 194 - .map_err(|e| miette::miette!("Failed to load custom theme from {:?}: {}", custom_path, e))? 210 + .map_err(|e| { 211 + miette::miette!("Failed to load custom theme from {:?}: {}", custom_path, e) 212 + })? 195 213 } else { 196 214 // Check for embedded themes first 197 215 match theme.syntect_theme_name.as_str() { ··· 199 217 let mut cursor = Cursor::new(ROSE_PINE_THEME.as_bytes()); 200 218 ThemeSet::load_from_reader(&mut cursor) 201 219 .into_diagnostic() 202 - .map_err(|e| miette::miette!("Failed to load embedded rose-pine theme: {}", e))? 220 + .map_err(|e| { 221 + miette::miette!("Failed to load embedded rose-pine theme: {}", e) 222 + })? 203 223 } 204 224 "rose-pine-dawn" => { 205 225 let mut cursor = Cursor::new(ROSE_PINE_DAWN_THEME.as_bytes()); 206 226 ThemeSet::load_from_reader(&mut cursor) 207 227 .into_diagnostic() 208 - .map_err(|e| miette::miette!("Failed to load embedded rose-pine-dawn theme: {}", e))? 228 + .map_err(|e| { 229 + miette::miette!("Failed to load embedded rose-pine-dawn theme: {}", e) 230 + })? 209 231 } 210 232 _ => { 211 233 // Fall back to syntect's built-in themes ··· 213 235 theme_set 214 236 .themes 215 237 .get(theme.syntect_theme_name.as_str()) 216 - .ok_or_else(|| miette::miette!("Theme '{}' not found in defaults", theme.syntect_theme_name))? 238 + .ok_or_else(|| { 239 + miette::miette!( 240 + "Theme '{}' not found in defaults", 241 + theme.syntect_theme_name 242 + ) 243 + })? 217 244 .clone() 218 245 } 219 246 }
+2
crates/weaver-renderer/src/lib.rs
··· 25 25 pub mod base_html; 26 26 pub mod code_pretty; 27 27 pub mod css; 28 + #[cfg(not(target_family = "wasm"))] 28 29 pub mod static_site; 29 30 pub mod theme; 30 31 pub mod types; 31 32 pub mod utils; 33 + #[cfg(not(target_family = "wasm"))] 32 34 pub mod walker; 33 35 34 36 pub static OBSIDIAN_NOTE_LINK_RE: LazyLock<Regex> = LazyLock::new(|| {
+4
crates/weaver-renderer/src/theme.rs
··· 16 16 pub foreground: SmolStr, 17 17 pub link: SmolStr, 18 18 pub link_hover: SmolStr, 19 + pub primary: SmolStr, 20 + pub secondary: SmolStr, 19 21 } 20 22 21 23 #[derive(Debug, Clone)] ··· 51 53 foreground: SmolStr::new("#2b303b"), 52 54 link: SmolStr::new("#286983"), 53 55 link_hover: SmolStr::new("#56949f"), 56 + primary: SmolStr::new("#c4a7e7"), 57 + secondary: SmolStr::new("#3e8fb0"), 54 58 } 55 59 } 56 60 }
+11 -4
crates/weaver-server/Cargo.toml
··· 7 7 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 8 9 9 [dependencies] 10 - dioxus = { version = "0.6.0", features = ["router", "fullstack"] } 10 + dashmap = "6.1.0" 11 + dioxus = { version = "0.7.0", features = ["router", "fullstack"] } 11 12 weaver-common = { path = "../weaver-common" } 12 - weaver-workspace-hack = { version = "0.1", path = "../weaver-workspace-hack" } 13 - 14 - jacquard = { workspace = true, features = ["tracing"] } 13 + jacquard = { workspace = true, features = ["streaming"] } 14 + jacquard-axum = { workspace = true, optional = true } 15 + weaver-api = { path = "../weaver-api", features = ["streaming"] } 16 + markdown-weaver = { workspace = true } 17 + moka = { version = "0.12", features = ["future"], optional = true } 18 + mini-moka = { version = "0.10" } 19 + dioxus-primitives = { git = "https://github.com/DioxusLabs/components", version = "0.0.1", default-features = false } 15 20 16 21 [features] 17 22 default = ["web"] ··· 21 26 desktop = ["dioxus/desktop"] 22 27 # The feature that are only required for the mobile = ["dioxus/mobile"] build target should be optional and only enabled in the mobile = ["dioxus/mobile"] feature 23 28 mobile = ["dioxus/mobile"] 29 + # The feature that are only required for the server = ["dioxus/server"] build target should be optional and only enabled in the server = ["dioxus/server"] feature 30 + server = ["dioxus/server", "dep:jacquard-axum", "dep:moka"]
+83
crates/weaver-server/assets/dx-components-theme.css
··· 1 + /* This file contains the global styles for the styled dioxus components. You only 2 + * need to import this file once in your project root. 3 + */ 4 + @import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap"); 5 + 6 + body { 7 + padding: 0; 8 + margin: 0; 9 + background-color: var(--primary-color); 10 + color: var(--secondary-color-4); 11 + font-family: Inter, sans-serif; 12 + font-optical-sizing: auto; 13 + font-style: normal; 14 + font-weight: 400; 15 + } 16 + 17 + @media (prefers-color-scheme: dark) { 18 + :root { 19 + --dark: initial; 20 + --light: ; 21 + } 22 + } 23 + 24 + @media (prefers-color-scheme: light) { 25 + :root { 26 + --dark: ; 27 + --light: initial; 28 + } 29 + } 30 + 31 + :root { 32 + /* Primary colors */ 33 + --primary-color: var(--dark, #000) var(--light, #fff); 34 + --primary-color-1: var(--dark, #0e0e0e) var(--light, #fbfbfb); 35 + --primary-color-2: var(--dark, #0a0a0a) var(--light, #fff); 36 + --primary-color-3: var(--dark, #141313) var(--light, #f8f8f8); 37 + --primary-color-4: var(--dark, #1a1a1a) var(--light, #f8f8f8); 38 + --primary-color-5: var(--dark, #262626) var(--light, #f5f5f5); 39 + --primary-color-6: var(--dark, #232323) var(--light, #e5e5e5); 40 + --primary-color-7: var(--dark, #3e3e3e) var(--light, #b0b0b0); 41 + 42 + /* Secondary colors */ 43 + --secondary-color: var(--dark, #fff) var(--light, #000); 44 + --secondary-color-1: var(--dark, #fafafa) var(--light, #000); 45 + --secondary-color-2: var(--dark, #e6e6e6) var(--light, #0d0d0d); 46 + --secondary-color-3: var(--dark, #dcdcdc) var(--light, #2b2b2b); 47 + --secondary-color-4: var(--dark, #d4d4d4) var(--light, #111); 48 + --secondary-color-5: var(--dark, #a1a1a1) var(--light, #848484); 49 + --secondary-color-6: var(--dark, #5d5d5d) var(--light, #d0d0d0); 50 + 51 + /* Highlight colors */ 52 + --focused-border-color: var(--dark, #2b7fff) var(--light, #2b7fff); 53 + --primary-success-color: var(--dark, #02271c) var(--light, #ecfdf5); 54 + --secondary-success-color: var(--dark, #b6fae3) var(--light, #10b981); 55 + --primary-warning-color: var(--dark, #342203) var(--light, #fffbeb); 56 + --secondary-warning-color: var(--dark, #feeac7) var(--light, #f59e0b); 57 + --primary-error-color: var(--dark, #a22e2e) var(--light, #dc2626); 58 + --secondary-error-color: var(--dark, #9b1c1c) var(--light, #ef4444); 59 + --contrast-error-color: var(--dark, var(--secondary-color-3)) 60 + var(--light, var(--primary-color)); 61 + --primary-info-color: var(--dark, var(--primary-color-5)) 62 + var(--light, var(--primary-color)); 63 + --secondary-info-color: var(--dark, var(--primary-color-7)) 64 + var(--light, var(--secondary-color-3)); 65 + } 66 + 67 + /* Modern browsers with `scrollbar-*` support */ 68 + @supports (scrollbar-width: auto) { 69 + :not(:hover) { 70 + scrollbar-color: rgb(0 0 0 / 0%) rgb(0 0 0 / 0%); 71 + } 72 + 73 + :hover { 74 + scrollbar-color: var(--secondary-color-2) rgb(0 0 0 / 0%); 75 + } 76 + } 77 + 78 + /* Legacy browsers with `::-webkit-scrollbar-*` support */ 79 + @supports selector(::-webkit-scrollbar) { 80 + :root::-webkit-scrollbar-track { 81 + background: transparent; 82 + } 83 + }
-8
crates/weaver-server/clippy.toml
··· 1 - await-holding-invalid-types = [ 2 - "generational_box::GenerationalRef", 3 - { path = "generational_box::GenerationalRef", reason = "Reads should not be held over an await point. This will cause any writes to fail while the await is pending since the read borrow is still active." }, 4 - "generational_box::GenerationalRefMut", 5 - { path = "generational_box::GenerationalRefMut", reason = "Write should not be held over an await point. This will cause any reads or writes to fail while the await is pending since the write borrow is still active." }, 6 - "dioxus_signals::Write", 7 - { path = "dioxus_signals::Write", reason = "Write should not be held over an await point. This will cause any reads or writes to fail while the await is pending since the write borrow is still active." }, 8 - ]
+81
crates/weaver-server/src/components/avatar/component.rs
··· 1 + use dioxus::prelude::*; 2 + use dioxus_primitives::avatar::{self, AvatarFallbackProps, AvatarImageProps, AvatarState}; 3 + 4 + #[derive(Clone, Copy, PartialEq, Default)] 5 + pub enum AvatarImageSize { 6 + #[default] 7 + Small, 8 + Medium, 9 + Large, 10 + } 11 + 12 + impl AvatarImageSize { 13 + fn to_class(self) -> &'static str { 14 + match self { 15 + AvatarImageSize::Small => "avatar-sm", 16 + AvatarImageSize::Medium => "avatar-md", 17 + AvatarImageSize::Large => "avatar-lg", 18 + } 19 + } 20 + } 21 + 22 + /// The props for the [`Avatar`] component. 23 + #[derive(Props, Clone, PartialEq)] 24 + pub struct AvatarProps { 25 + /// Callback when image loads successfully 26 + #[props(default)] 27 + pub on_load: Option<EventHandler<()>>, 28 + 29 + /// Callback when image fails to load 30 + #[props(default)] 31 + pub on_error: Option<EventHandler<()>>, 32 + 33 + /// Callback when the avatar state changes 34 + #[props(default)] 35 + pub on_state_change: Option<EventHandler<AvatarState>>, 36 + 37 + #[props(default)] 38 + pub size: AvatarImageSize, 39 + 40 + /// Additional attributes for the avatar element 41 + #[props(extends = GlobalAttributes)] 42 + pub attributes: Vec<Attribute>, 43 + 44 + /// The children of the Avatar component, which can include AvatarImage and AvatarFallback 45 + pub children: Element, 46 + } 47 + 48 + #[component] 49 + pub fn Avatar(props: AvatarProps) -> Element { 50 + rsx! { 51 + document::Link { rel: "stylesheet", href: asset!("./style.css") } 52 + 53 + avatar::Avatar { 54 + class: "avatar {props.size.to_class()}", 55 + on_load: props.on_load, 56 + on_error: props.on_error, 57 + on_state_change: props.on_state_change, 58 + attributes: props.attributes, 59 + {props.children} 60 + } 61 + } 62 + } 63 + 64 + #[component] 65 + pub fn AvatarImage(props: AvatarImageProps) -> Element { 66 + rsx! { 67 + avatar::AvatarImage { 68 + class: "avatar-image", 69 + src: props.src, 70 + alt: props.alt, 71 + attributes: props.attributes, 72 + } 73 + } 74 + } 75 + 76 + #[component] 77 + pub fn AvatarFallback(props: AvatarFallbackProps) -> Element { 78 + rsx! { 79 + avatar::AvatarFallback { class: "avatar-fallback", attributes: props.attributes, {props.children} } 80 + } 81 + }
+2
crates/weaver-server/src/components/avatar/mod.rs
··· 1 + mod component; 2 + pub use component::*;
+92
crates/weaver-server/src/components/avatar/style.css
··· 1 + .avatar-item { 2 + display: flex; 3 + flex-direction: column; 4 + align-items: center; 5 + gap: 0.5rem; 6 + } 7 + 8 + .avatar-label { 9 + margin: 0; 10 + color: var(--secondary-color-4); 11 + font-size: 0.875rem; 12 + } 13 + 14 + /* Avatar Component Styles */ 15 + .avatar { 16 + position: relative; 17 + display: inline-flex; 18 + overflow: hidden; 19 + width: 64px; 20 + height: 64px; 21 + flex-shrink: 0; 22 + align-items: center; 23 + justify-content: center; 24 + border-radius: 3.40282e+38px; 25 + color: var(--secondary-color-4); 26 + cursor: pointer; 27 + font-weight: 500; 28 + } 29 + 30 + .avatar-image { 31 + width: 100%; 32 + height: 100%; 33 + aspect-ratio: 1; 34 + } 35 + 36 + /* Avatar sizes */ 37 + .avatar-sm { 38 + width: 2rem; 39 + height: 2rem; 40 + font-size: 0.875rem; 41 + } 42 + 43 + .avatar-md { 44 + width: 3rem; 45 + height: 3rem; 46 + font-size: 1.25rem; 47 + } 48 + 49 + .avatar-lg { 50 + width: 4rem; 51 + height: 4rem; 52 + font-size: 1.75rem; 53 + } 54 + 55 + /* State-specific styles */ 56 + .avatar[data-state="loading"] { 57 + animation: pulse 1.5s infinite ease-in-out; 58 + } 59 + 60 + .avatar[data-state="empty"] { 61 + background: var(--primary-color-2); 62 + } 63 + 64 + @keyframes pulse { 65 + 0% { 66 + opacity: 1; 67 + } 68 + 69 + 50% { 70 + opacity: 0.7; 71 + } 72 + 73 + 100% { 74 + opacity: 1; 75 + } 76 + } 77 + 78 + .avatar-fallback { 79 + display: flex; 80 + width: 100%; 81 + height: 100%; 82 + align-items: center; 83 + justify-content: center; 84 + background: var(--primary-color); 85 + color: var(--secondary-color-4); 86 + font-size: 1.5rem; 87 + } 88 + 89 + .avatar[data-state="error"] .avatar-fallback { 90 + background: var(--primary-color-3); 91 + color: var(--secondary-color-4); 92 + }
+2
crates/weaver-server/src/components/cssblob.rs
··· 1 + use dioxus::prelude::*; 2 + use weaver_common::jacquard::smol_str::SmolStr;
-61
crates/weaver-server/src/components/echo.rs
··· 1 - use dioxus::prelude::*; 2 - 3 - const ECHO_CSS: Asset = asset!("/assets/styling/echo.css"); 4 - 5 - /// Echo component that demonstrates fullstack server functions. 6 - #[component] 7 - pub fn Echo() -> Element { 8 - // use_signal is a hook. Hooks in dioxus must be run in a consistent order every time the component is rendered. 9 - // That means they can't be run inside other hooks, async blocks, if statements, or loops. 10 - // 11 - // use_signal is a hook that creates a state for the component. It takes a closure that returns the initial value of the state. 12 - // The state is automatically tracked and will rerun any other hooks or components that read it whenever it changes. 13 - let mut response = use_signal(|| String::new()); 14 - 15 - rsx! { 16 - document::Link { rel: "stylesheet", href: ECHO_CSS } 17 - 18 - div { 19 - id: "echo", 20 - h4 { "ServerFn Echo" } 21 - input { 22 - placeholder: "Type here to echo...", 23 - // `oninput` is an event handler that will run when the input changes. It can return either nothing or a future 24 - // that will be run when the event runs. 25 - oninput: move |event| async move { 26 - // When we call the echo_server function from the client, it will fire a request to the server and return 27 - // the response. It handles serialization and deserialization of the request and response for us. 28 - let data = echo_server(event.value()).await.unwrap(); 29 - 30 - // After we have the data from the server, we can set the state of the signal to the new value. 31 - // Since we read the `response` signal later in this component, the component will rerun. 32 - response.set(data); 33 - }, 34 - } 35 - 36 - // Signals can be called like a function to clone the current value of the signal 37 - if !response().is_empty() { 38 - p { 39 - "Server echoed: " 40 - // Since we read the signal inside this component, the component "subscribes" to the signal. Whenever 41 - // the signal changes, the component will rerun. 42 - i { "{response}" } 43 - } 44 - } 45 - } 46 - } 47 - } 48 - 49 - // Server functions let us define public APIs on the server that can be called like a normal async function from the client. 50 - // Each server function needs to be annotated with the `#[server]` attribute, accept and return serializable types, and return 51 - // a `Result` with the error type [`ServerFnError`]. 52 - // 53 - // When the server function is called from the client, it will just serialize the arguments, call the API, and deserialize the 54 - // response. 55 - #[server] 56 - async fn echo_server(input: String) -> Result<String, ServerFnError> { 57 - // The body of server function like this comment are only included on the server. If you have any server-only logic like 58 - // database queries, you can put it here. Any imports for the server function should either be imported inside the function 59 - // or imported under a `#[cfg(feature = "server")]` block. 60 - Ok(input) 61 - }
+65
crates/weaver-server/src/components/entry.rs
··· 1 + #![allow(non_snake_case)] 2 + 3 + use crate::fetch; 4 + use dioxus::prelude::*; 5 + use jacquard::{smol_str::SmolStr, types::string::AtIdentifier, CowStr}; 6 + use weaver_api::sh_weaver::notebook::{entry, BookEntryView}; 7 + 8 + #[component] 9 + pub fn Entry(ident: AtIdentifier<'static>, book_title: SmolStr, title: SmolStr) -> Element { 10 + let entry = use_resource(use_reactive!(|(ident, book_title, title)| async move { 11 + let fetcher = use_context::<fetch::CachedFetcher>(); 12 + fetcher 13 + .get_entry(ident, book_title, title) 14 + .await 15 + .ok() 16 + .flatten() 17 + })); 18 + 19 + rsx! { 20 + match &*entry.read_unchecked() { 21 + Some(Some(entry)) => { 22 + let class = use_signal(|| String::from("entry")); 23 + let content = use_signal(||entry.1.clone()); 24 + rsx! { EntryMarkdown { 25 + class, 26 + content 27 + } } 28 + }, 29 + Some(None) => rsx! { p { "Loading entry failed" } }, 30 + None => rsx! { p { "Loading..." } } 31 + } 32 + } 33 + } 34 + 35 + #[component] 36 + pub fn EntryCard(entry: BookEntryView<'static>) -> Element { 37 + rsx! {} 38 + } 39 + 40 + #[derive(Props, Clone, PartialEq)] 41 + pub struct EntryMarkdownProps { 42 + #[props(default)] 43 + id: Signal<String>, 44 + #[props(default)] 45 + class: Signal<String>, 46 + 47 + content: ReadSignal<entry::Entry<'static>>, 48 + } 49 + 50 + /// Render some text as markdown. 51 + pub fn EntryMarkdown(props: EntryMarkdownProps) -> Element { 52 + let content = &*props.content.read(); 53 + let parser = markdown_weaver::Parser::new(&content.content); 54 + 55 + let mut html_buf = String::new(); 56 + markdown_weaver::html::push_html(&mut html_buf, parser); 57 + 58 + rsx! { 59 + div { 60 + id: "{&*props.id.read()}", 61 + class: "{&*props.class.read()}", 62 + dangerous_inner_html: "{html_buf}" 63 + } 64 + } 65 + }
-25
crates/weaver-server/src/components/hero.rs
··· 1 - use dioxus::prelude::*; 2 - 3 - const HEADER_SVG: Asset = asset!("/assets/header.svg"); 4 - 5 - #[component] 6 - pub fn Hero() -> Element { 7 - rsx! { 8 - // We can create elements inside the rsx macro with the element name followed by a block of attributes and children. 9 - div { 10 - // Attributes should be defined in the element before any children 11 - id: "hero", 12 - // After all attributes are defined, we can define child elements and components 13 - img { src: HEADER_SVG, id: "header" } 14 - div { id: "links", 15 - // The RSX macro also supports text nodes surrounded by quotes 16 - a { href: "https://dioxuslabs.com/learn/0.6/", "📚 Learn Dioxus" } 17 - a { href: "https://dioxuslabs.com/awesome", "🚀 Awesome Dioxus" } 18 - a { href: "https://github.com/dioxus-community/", "📡 Community Libraries" } 19 - a { href: "https://github.com/DioxusLabs/sdk", "⚙️ Dioxus Development Kit" } 20 - a { href: "https://marketplace.visualstudio.com/items?itemName=DioxusLabs.dioxus", "💫 VSCode Extension" } 21 - a { href: "https://discord.gg/XgGxMSkvUM", "👋 Community Discord" } 22 - } 23 - } 24 - } 25 - }
+41
crates/weaver-server/src/components/identity.rs
··· 1 + use crate::{fetch, Route}; 2 + use dioxus::prelude::*; 3 + use jacquard::{ 4 + client::BasicClient, 5 + types::{ident::AtIdentifier, tid::Tid}, 6 + CowStr, 7 + }; 8 + use weaver_api::sh_weaver::notebook::NotebookView; 9 + #[component] 10 + pub fn Repository(ident: AtIdentifier<'static>) -> Element { 11 + rsx! { 12 + // We can create elements inside the rsx macro with the element name followed by a block of attributes and children. 13 + div { 14 + Outlet::<Route> {} 15 + } 16 + } 17 + } 18 + 19 + #[component] 20 + pub fn RepositoryIndex(ident: AtIdentifier<'static>) -> Element { 21 + let fetcher = use_context::<fetch::CachedFetcher>(); 22 + let notebooks = use_signal(|| fetcher.list_recent_notebooks()); 23 + rsx! { 24 + for notebook in notebooks.iter() { 25 + { 26 + let view = &notebook.0; 27 + rsx! { 28 + div { 29 + key: "{view.cid}", 30 + NotebookCard { notebook: view.clone() } 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + 38 + #[component] 39 + pub fn NotebookCard(notebook: NotebookView<'static>) -> Element { 40 + rsx! {} 41 + }
+7 -4
crates/weaver-server/src/components/mod.rs
··· 2 2 //! They can be used to defined common UI elements like buttons, forms, and modals. In this template, we define a Hero 3 3 //! component and an Echo component for fullstack apps to be used in our app. 4 4 5 - mod hero; 6 - pub use hero::Hero; 5 + mod cssblob; 6 + 7 + mod entry; 8 + pub use entry::{Entry, EntryCard}; 7 9 8 - mod echo; 9 - pub use echo::Echo; 10 + mod identity; 11 + pub use identity::{Repository, RepositoryIndex}; 12 + pub mod avatar;
+140
crates/weaver-server/src/fetch.rs
··· 1 + use dioxus::{CapturedError, Result}; 2 + use jacquard::{client::BasicClient, smol_str::SmolStr, types::ident::AtIdentifier}; 3 + use std::{ 4 + sync::{Arc, Mutex}, 5 + time::Duration, 6 + }; 7 + use weaver_api::{ 8 + com_atproto::repo::strong_ref::StrongRef, 9 + sh_weaver::notebook::{entry::Entry, BookEntryView, NotebookView}, 10 + }; 11 + use weaver_common::view::{entry_by_title, fetch_entry_view, notebook_by_title, view_entry}; 12 + 13 + #[derive(Clone)] 14 + pub struct CachedFetcher { 15 + client: Arc<BasicClient>, 16 + 17 + book_cache: Arc< 18 + Mutex< 19 + mini_moka::unsync::Cache< 20 + (AtIdentifier<'static>, SmolStr), 21 + Arc<(NotebookView<'static>, Vec<StrongRef<'static>>)>, 22 + >, 23 + >, 24 + >, 25 + entry_cache: Arc< 26 + Mutex< 27 + mini_moka::unsync::Cache< 28 + (AtIdentifier<'static>, SmolStr), 29 + Arc<(BookEntryView<'static>, Entry<'static>)>, 30 + >, 31 + >, 32 + >, 33 + } 34 + 35 + impl CachedFetcher { 36 + pub fn new(client: Arc<BasicClient>) -> Self { 37 + let book_cache = mini_moka::unsync::Cache::builder() 38 + .max_capacity(100) 39 + .time_to_idle(Duration::from_secs(1200)) 40 + .build(); 41 + let entry_cache = mini_moka::unsync::Cache::builder() 42 + .max_capacity(100) 43 + .time_to_idle(Duration::from_secs(600)) 44 + .build(); 45 + 46 + Self { 47 + client, 48 + book_cache: Arc::new(Mutex::new(book_cache)), 49 + entry_cache: Arc::new(Mutex::new(entry_cache)), 50 + } 51 + } 52 + 53 + pub async fn get_notebook( 54 + &self, 55 + ident: AtIdentifier<'static>, 56 + title: SmolStr, 57 + ) -> Result<Option<Arc<(NotebookView<'static>, Vec<StrongRef<'static>>)>>> { 58 + if let Ok(mut book_cache) = self.book_cache.lock() { 59 + if let Some(entry) = book_cache.get(&(ident.clone(), title.clone())) { 60 + Ok(Some(entry.clone())) 61 + } else { 62 + if let Some((notebook, entries)) = 63 + notebook_by_title(self.client.clone(), &ident, &title) 64 + .await 65 + .map_err(|e| dioxus::CapturedError::from_display(e))? 66 + { 67 + let stored = Arc::new((notebook, entries)); 68 + book_cache.insert((ident.clone(), title.into()), stored.clone()); 69 + Ok(Some(stored)) 70 + } else { 71 + Ok(None) 72 + } 73 + } 74 + } else { 75 + Ok(None) 76 + } 77 + } 78 + 79 + pub async fn get_entry( 80 + &self, 81 + ident: AtIdentifier<'static>, 82 + book_title: SmolStr, 83 + entry_title: SmolStr, 84 + ) -> Result<Option<Arc<(BookEntryView<'static>, Entry<'static>)>>> { 85 + if let Some(result) = self.get_notebook(ident.clone(), book_title).await? { 86 + let (notebook, entries) = result.as_ref(); 87 + if let Ok(mut entry_cache) = self.entry_cache.lock() { 88 + if let Some(entry) = entry_cache.get(&(ident.clone(), entry_title.clone())) { 89 + Ok(Some(entry.clone())) 90 + } else { 91 + if let Some(entry) = entry_by_title( 92 + self.client.clone(), 93 + notebook, 94 + entries.as_ref(), 95 + &entry_title, 96 + ) 97 + .await 98 + .map_err(|e| dioxus::CapturedError::from_display(e))? 99 + { 100 + let stored = Arc::new(entry); 101 + entry_cache.insert((ident.clone(), entry_title.into()), stored.clone()); 102 + Ok(Some(stored)) 103 + } else { 104 + Ok(None) 105 + } 106 + } 107 + } else { 108 + Ok(None) 109 + } 110 + } else { 111 + Ok(None) 112 + } 113 + } 114 + 115 + pub fn list_recent_entries(&self) -> Vec<Arc<(BookEntryView<'static>, Entry<'static>)>> { 116 + if let Ok(entry_cache) = self.entry_cache.lock() { 117 + let mut entries = Vec::new(); 118 + for (_, entry) in entry_cache.iter() { 119 + entries.push(entry.clone()); 120 + } 121 + entries 122 + } else { 123 + Vec::new() 124 + } 125 + } 126 + 127 + pub fn list_recent_notebooks( 128 + &self, 129 + ) -> Vec<Arc<(NotebookView<'static>, Vec<StrongRef<'static>>)>> { 130 + if let Ok(book_cache) = self.book_cache.lock() { 131 + let mut entries = Vec::new(); 132 + for (_, entry) in book_cache.iter() { 133 + entries.push(entry.clone()); 134 + } 135 + entries 136 + } else { 137 + Vec::new() 138 + } 139 + } 140 + }
+57 -12
crates/weaver-server/src/main.rs
··· 1 1 // The dioxus prelude contains a ton of common items used in dioxus apps. It's a good idea to import wherever you 2 2 // need dioxus 3 - use dioxus::prelude::*; 4 - 5 - use views::{Blog, Home, Navbar}; 3 + use components::{Entry, Repository, RepositoryIndex}; 4 + use dioxus::{fullstack::FullstackContext, prelude::*}; 5 + use jacquard::{ 6 + client::BasicClient, smol_str::SmolStr, types::did::Did, types::string::AtIdentifier, CowStr, 7 + }; 8 + use std::sync::Arc; 9 + use views::{Home, Navbar, Notebook, NotebookIndex, NotebookPage}; 6 10 7 11 /// Define a components module that contains all shared components for our app. 8 12 mod components; 13 + mod fetch; 9 14 /// Define a views module that contains the UI for all Layouts and Routes for our app. 10 15 mod views; 11 16 12 17 /// The Route enum is used to define the structure of internal routes in our app. All route enums need to derive 13 18 /// the [`Routable`] trait, which provides the necessary methods for the router to work. 14 - /// 19 + /// 15 20 /// Each variant represents a different URL pattern that can be matched by the router. If that pattern is matched, 16 21 /// the components for that route will be rendered. 17 22 #[derive(Debug, Clone, Routable, PartialEq)] ··· 24 29 // the component for that route will be rendered. The component name that is rendered defaults to the variant name. 25 30 #[route("/")] 26 31 Home {}, 27 - // The route attribute can include dynamic parameters that implement [`std::str::FromStr`] and [`std::fmt::Display`] with the `:` syntax. 28 - // In this case, id will match any integer like `/blog/123` or `/blog/-456`. 29 - #[route("/blog/:id")] 30 - // Fields of the route variant will be passed to the component as props. In this case, the blog component must accept 31 - // an `id` prop of type `i32`. 32 - Blog { id: i32 }, 32 + #[layout(ErrorLayout)] 33 + #[nest("/:ident")] 34 + #[layout(components::Repository)] 35 + #[route("/")] 36 + RepositoryIndex { ident: AtIdentifier<'static> }, 37 + #[nest("/:book_title")] 38 + #[layout(views::Notebook)] 39 + #[route("/")] 40 + NotebookIndex { ident: AtIdentifier<'static>, book_title: SmolStr }, 41 + #[route("/:title")] 42 + Entry { ident: AtIdentifier<'static>, book_title: SmolStr, title: SmolStr } 43 + 33 44 } 34 45 35 46 // We can import assets in dioxus with the `asset!` macro. This macro takes a path to an asset relative to the crate root. ··· 39 50 const MAIN_CSS: Asset = asset!("/assets/styling/main.css"); 40 51 41 52 fn main() { 42 - // The `launch` function is the main entry point for a dioxus app. It takes a component and renders it with the platform feature 43 - // you have enabled 53 + // Run `serve()` on the server only 54 + #[cfg(feature = "server")] 55 + dioxus::serve(|| async move { 56 + // Create a new router for our app using the `router` function 57 + let mut router = dioxus::server::router(App); 58 + 59 + // .. customize the router, adding layers and new routes 60 + 61 + // And then return the router 62 + Ok(router) 63 + }); 64 + 65 + // When not on the server, just run `launch()` like normal 66 + #[cfg(not(feature = "server"))] 44 67 dioxus::launch(App); 45 68 } 46 69 ··· 51 74 #[component] 52 75 fn App() -> Element { 53 76 // The `rsx!` macro lets us define HTML inside of rust. It expands to an Element with all of our HTML inside. 77 + use_context_provider(|| fetch::CachedFetcher::new(Arc::new(BasicClient::unauthenticated()))); 54 78 rsx! { 55 79 // In addition to element and text (which we will see later), rsx can contain other components. In this case, 56 80 // we are using the `document::Link` component to add a link to our favicon and main CSS file into the head of our app. ··· 63 87 Router::<Route> {} 64 88 } 65 89 } 90 + 91 + // And then our Outlet is wrapped in a fallback UI 92 + #[component] 93 + fn ErrorLayout() -> Element { 94 + rsx! { 95 + ErrorBoundary { 96 + handle_error: move |err: ErrorContext| { 97 + let http_error = FullstackContext::commit_error_status(err.error().unwrap()); 98 + match http_error.status { 99 + StatusCode::NOT_FOUND => rsx! { div { "404 - Page not found" } }, 100 + _ => rsx! { div { "An unknown error occurred" } }, 101 + } 102 + }, 103 + Outlet::<Route> {} 104 + } 105 + } 106 + } 107 + 108 + struct Config { 109 + did: Option<Did<'static>>, 110 + }
-39
crates/weaver-server/src/views/blog.rs
··· 1 - use crate::Route; 2 - use dioxus::prelude::*; 3 - 4 - const BLOG_CSS: Asset = asset!("/assets/styling/blog.css"); 5 - 6 - /// The Blog page component that will be rendered when the current route is `[Route::Blog]` 7 - /// 8 - /// The component takes a `id` prop of type `i32` from the route enum. Whenever the id changes, the component function will be 9 - /// re-run and the rendered HTML will be updated. 10 - #[component] 11 - pub fn Blog(id: i32) -> Element { 12 - rsx! { 13 - document::Link { rel: "stylesheet", href: BLOG_CSS } 14 - 15 - div { 16 - id: "blog", 17 - 18 - // Content 19 - h1 { "This is blog #{id}!" } 20 - p { "In blog #{id}, we show how the Dioxus router works and how URL parameters can be passed as props to our route components." } 21 - 22 - // Navigation links 23 - // The `Link` component lets us link to other routes inside our app. It takes a `to` prop of type `Route` and 24 - // any number of child nodes. 25 - Link { 26 - // The `to` prop is the route that the link should navigate to. We can use the `Route` enum to link to the 27 - // blog page with the id of -1. Since we are using an enum instead of a string, all of the routes will be checked 28 - // at compile time to make sure they are valid. 29 - to: Route::Blog { id: id - 1 }, 30 - "Previous" 31 - } 32 - span { " <---> " } 33 - Link { 34 - to: Route::Blog { id: id + 1 }, 35 - "Next" 36 - } 37 - } 38 - } 39 - }
+14 -3
crates/weaver-server/src/views/home.rs
··· 1 - use crate::components::{Echo, Hero}; 1 + use crate::{components::EntryCard, fetch}; 2 2 use dioxus::prelude::*; 3 3 4 4 /// The Home page component that will be rendered when the current route is `[Route::Home]` 5 5 #[component] 6 6 pub fn Home() -> Element { 7 + let fetcher = use_context::<fetch::CachedFetcher>(); 8 + let entries = use_signal(|| fetcher.list_recent_entries()); 7 9 rsx! { 8 - Hero {} 9 - Echo {} 10 + for entry in entries.iter() { 11 + { 12 + let view = &entry.0; 13 + rsx! { 14 + div { 15 + key: "{view.entry.cid}", 16 + EntryCard { entry: view.clone() } 17 + } 18 + } 19 + } 20 + } 10 21 } 11 22 }
+6 -3
crates/weaver-server/src/views/mod.rs
··· 11 11 mod home; 12 12 pub use home::Home; 13 13 14 - mod blog; 15 - pub use blog::Blog; 16 - 17 14 mod navbar; 18 15 pub use navbar::Navbar; 16 + 17 + mod notebookpage; 18 + pub use notebookpage::NotebookPage; 19 + 20 + mod notebook; 21 + pub use notebook::{Notebook, NotebookIndex};
+1 -4
crates/weaver-server/src/views/navbar.rs
··· 19 19 to: Route::Home {}, 20 20 "Home" 21 21 } 22 - Link { 23 - to: Route::Blog { id: 1 }, 24 - "Blog" 25 - } 22 + 26 23 } 27 24 28 25 // The `Outlet` component is used to render the next component inside the layout. In this case, it will render either
+30
crates/weaver-server/src/views/notebook.rs
··· 1 + use crate::{fetch, Route}; 2 + use dioxus::prelude::*; 3 + use jacquard::{ 4 + client::BasicClient, 5 + smol_str::SmolStr, 6 + types::{ident::AtIdentifier, tid::Tid}, 7 + CowStr, 8 + }; 9 + use std::sync::Arc; 10 + 11 + const BLOG_CSS: Asset = asset!("/assets/styling/blog.css"); 12 + 13 + /// The Blog page component that will be rendered when the current route is `[Route::Blog]` 14 + /// 15 + /// The component takes a `id` prop of type `i32` from the route enum. Whenever the id changes, the component function will be 16 + /// re-run and the rendered HTML will be updated. 17 + #[component] 18 + pub fn Notebook(ident: AtIdentifier<'static>, book_title: SmolStr) -> Element { 19 + let fetcher = use_context::<fetch::CachedFetcher>(); 20 + rsx! { 21 + document::Link { rel: "stylesheet", href: BLOG_CSS } 22 + Outlet::<Route> {} 23 + } 24 + } 25 + 26 + #[component] 27 + pub fn NotebookIndex(ident: AtIdentifier<'static>, book_title: SmolStr) -> Element { 28 + let fetcher = use_context::<fetch::CachedFetcher>(); 29 + rsx! {} 30 + }
+25
crates/weaver-server/src/views/notebookpage.rs
··· 1 + use crate::Route; 2 + use dioxus::prelude::*; 3 + use jacquard::types::tid::Tid; 4 + 5 + const BLOG_CSS: Asset = asset!("/assets/styling/blog.css"); 6 + 7 + /// The Blog page component that will be rendered when the current route is `[Route::Blog]` 8 + /// 9 + /// The component takes a `id` prop of type `i32` from the route enum. Whenever the id changes, the component function will be 10 + /// re-run and the rendered HTML will be updated. 11 + #[component] 12 + pub fn NotebookPage(id: Tid, children: Element) -> Element { 13 + rsx! { 14 + document::Link { rel: "stylesheet", href: BLOG_CSS } 15 + 16 + div { 17 + id: "blog", 18 + 19 + // Content 20 + h1 { "This is blog #{id}!" } 21 + p { "In blog #{id}, we show how the Dioxus router works and how URL parameters can be passed as props to our route components." } 22 + 23 + } 24 + } 25 + }
-4
crates/weaver-workspace-hack/.gitattributes
··· 1 - # Avoid putting conflict markers in the generated Cargo.toml file, since their presence breaks 2 - # Cargo. 3 - # Also do not check out the file as CRLF on Windows, as that's what hakari needs. 4 - Cargo.toml merge=binary -crlf
-110
crates/weaver-workspace-hack/Cargo.toml
··· 1 - # This file is generated by `cargo hakari`. 2 - # To regenerate, run: 3 - # cargo hakari generate 4 - 5 - [package] 6 - name = "weaver-workspace-hack" 7 - version = "0.1.0" 8 - description = "workspace-hack package, managed by hakari" 9 - license.workspace = true 10 - edition.workspace = true 11 - # You can choose to publish this crate: see https://docs.rs/cargo-hakari/latest/cargo_hakari/publishing. 12 - publish = false 13 - 14 - # The parts of the file between the BEGIN HAKARI SECTION and END HAKARI SECTION comments 15 - # are managed by hakari. 16 - 17 - ### BEGIN HAKARI SECTION 18 - [dependencies] 19 - aho-corasick = { version = "1" } 20 - byteorder = { version = "1" } 21 - bytes = { version = "1", features = ["serde"] } 22 - data-encoding = { version = "2" } 23 - diesel = { version = "2", features = ["chrono", "i-implement-a-third-party-backend-and-opt-into-breaking-changes", "postgres", "serde_json", "sqlite"] } 24 - diesel-async = { version = "0.5", features = ["deadpool", "postgres", "sync-connection-wrapper"] } 25 - elliptic-curve = { version = "0.13", features = ["digest", "hazmat", "jwk", "pem", "std"] } 26 - futures-channel = { version = "0.3", features = ["sink"] } 27 - futures-core = { version = "0.3" } 28 - futures-task = { version = "0.3", default-features = false, features = ["std"] } 29 - futures-util = { version = "0.3", features = ["channel", "io", "sink"] } 30 - generic-array = { version = "0.14", default-features = false, features = ["more_lengths", "serde", "zeroize"] } 31 - hashbrown = { version = "0.15", features = ["serde"] } 32 - idna = { version = "1" } 33 - jacquard = { git = "https://tangled.org/@nonbinary.computer/jacquard", default-features = false, features = ["api_bluesky", "derive", "dns", "loopback", "tracing", "websocket", "zstd"] } 34 - jacquard-api = { git = "https://tangled.org/@nonbinary.computer/jacquard", features = ["bluesky", "sh_weaver"] } 35 - jacquard-common = { git = "https://tangled.org/@nonbinary.computer/jacquard", features = ["tracing", "websocket", "zstd"] } 36 - jacquard-identity = { git = "https://tangled.org/@nonbinary.computer/jacquard", default-features = false, features = ["cache", "dns", "tracing"] } 37 - jacquard-lexicon = { git = "https://tangled.org/@nonbinary.computer/jacquard" } 38 - jacquard-oauth = { git = "https://tangled.org/@nonbinary.computer/jacquard", features = ["browser-open", "loopback", "tracing"] } 39 - log = { version = "0.4", default-features = false, features = ["std"] } 40 - memchr = { version = "2" } 41 - miette = { version = "7", features = ["fancy", "syntect-highlighter"] } 42 - minijinja = { version = "2" } 43 - minimal-lexical = { version = "0.2", default-features = false, features = ["std"] } 44 - nom = { version = "7" } 45 - num-traits = { version = "0.2", default-features = false, features = ["i128", "libm", "std"] } 46 - p384 = { version = "0.13", default-features = false, features = ["ecdsa"] } 47 - percent-encoding = { version = "2" } 48 - rand = { version = "0.8", features = ["small_rng"] } 49 - regex-automata = { version = "0.4", default-features = false, features = ["dfa", "hybrid", "meta", "nfa", "perf", "std", "unicode"] } 50 - reqwest = { version = "0.12", features = ["gzip", "json", "rustls-tls", "stream"] } 51 - sec1 = { version = "0.7", features = ["pem", "serde", "std", "subtle"] } 52 - serde_json = { version = "1", features = ["alloc", "preserve_order", "raw_value"] } 53 - sha2 = { version = "0.10", features = ["oid"] } 54 - smallvec = { version = "1", default-features = false, features = ["const_new"] } 55 - subtle = { version = "2" } 56 - syn = { version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] } 57 - syntect = { version = "5", features = ["default-fancy"] } 58 - time = { version = "0.3", features = ["formatting", "macros", "parsing"] } 59 - tokio = { version = "1", features = ["full"] } 60 - tokio-util = { version = "0.7", features = ["codec", "io"] } 61 - toml = { version = "0.8", features = ["preserve_order"] } 62 - tower-http = { version = "0.6", features = ["cors", "fs", "normalize-path", "request-id", "timeout", "trace"] } 63 - tracing = { version = "0.1", features = ["log"] } 64 - tracing-core = { version = "0.1" } 65 - uuid = { version = "1", features = ["serde", "v4", "v7"] } 66 - winnow = { version = "0.7" } 67 - zerocopy = { version = "0.8", default-features = false, features = ["derive", "simd"] } 68 - zeroize = { version = "1", features = ["derive", "serde"] } 69 - 70 - [build-dependencies] 71 - aho-corasick = { version = "1" } 72 - bytes = { version = "1", features = ["serde"] } 73 - data-encoding = { version = "2" } 74 - diesel_derives = { version = "2", features = ["32-column-tables", "chrono", "postgres", "sqlite", "with-deprecated"] } 75 - elliptic-curve = { version = "0.13", features = ["digest", "hazmat", "jwk", "pem", "std"] } 76 - futures-channel = { version = "0.3", features = ["sink"] } 77 - futures-core = { version = "0.3" } 78 - futures-task = { version = "0.3", default-features = false, features = ["std"] } 79 - futures-util = { version = "0.3", features = ["channel", "io", "sink"] } 80 - generic-array = { version = "0.14", default-features = false, features = ["more_lengths", "serde", "zeroize"] } 81 - idna = { version = "1" } 82 - jacquard-common = { git = "https://tangled.org/@nonbinary.computer/jacquard", features = ["tracing", "websocket", "zstd"] } 83 - jacquard-lexicon = { git = "https://tangled.org/@nonbinary.computer/jacquard" } 84 - log = { version = "0.4", default-features = false, features = ["std"] } 85 - memchr = { version = "2" } 86 - miette = { version = "7", features = ["fancy", "syntect-highlighter"] } 87 - minimal-lexical = { version = "0.2", default-features = false, features = ["std"] } 88 - nom = { version = "7" } 89 - num-traits = { version = "0.2", default-features = false, features = ["i128", "libm", "std"] } 90 - percent-encoding = { version = "2" } 91 - rand = { version = "0.8", features = ["small_rng"] } 92 - regex-automata = { version = "0.4", default-features = false, features = ["dfa", "hybrid", "meta", "nfa", "perf", "std", "unicode"] } 93 - reqwest = { version = "0.12", features = ["gzip", "json", "rustls-tls", "stream"] } 94 - sec1 = { version = "0.7", features = ["pem", "serde", "std", "subtle"] } 95 - serde_json = { version = "1", features = ["alloc", "preserve_order", "raw_value"] } 96 - sha2 = { version = "0.10", features = ["oid"] } 97 - smallvec = { version = "1", default-features = false, features = ["const_new"] } 98 - subtle = { version = "2" } 99 - syn = { version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] } 100 - syntect = { version = "5", features = ["default-fancy"] } 101 - time = { version = "0.3", features = ["formatting", "macros", "parsing"] } 102 - tokio = { version = "1", features = ["full"] } 103 - tokio-util = { version = "0.7", features = ["codec", "io"] } 104 - tracing = { version = "0.1", features = ["log"] } 105 - tracing-core = { version = "0.1" } 106 - winnow = { version = "0.7" } 107 - zerocopy = { version = "0.8", default-features = false, features = ["derive", "simd"] } 108 - zeroize = { version = "1", features = ["derive", "serde"] } 109 - 110 - ### END HAKARI SECTION
-2
crates/weaver-workspace-hack/build.rs
··· 1 - // A build script is required for cargo to consider build dependencies. 2 - fn main() {}
-1
crates/weaver-workspace-hack/src/lib.rs
··· 1 - // This is a stub lib.rs.
+130 -10
flake.lock
··· 31 31 "type": "github" 32 32 } 33 33 }, 34 - "flake-utils": { 34 + "dioxus": { 35 35 "inputs": { 36 + "flake-parts": "flake-parts", 37 + "nixpkgs": "nixpkgs", 38 + "rust-overlay": "rust-overlay", 36 39 "systems": "systems" 37 40 }, 38 41 "locked": { 42 + "lastModified": 1761886294, 43 + "narHash": "sha256-GEyOUuFbqWzpQIKO6mT2oCEp2JnUvNkOW/WsrHOFK6I=", 44 + "owner": "DioxusLabs", 45 + "repo": "dioxus", 46 + "rev": "2ab9a5586dc6b4d95e210eded692f50e7ab7575e", 47 + "type": "github" 48 + }, 49 + "original": { 50 + "owner": "DioxusLabs", 51 + "repo": "dioxus", 52 + "type": "github" 53 + } 54 + }, 55 + "flake-parts": { 56 + "inputs": { 57 + "nixpkgs-lib": "nixpkgs-lib" 58 + }, 59 + "locked": { 60 + "lastModified": 1743550720, 61 + "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", 62 + "owner": "hercules-ci", 63 + "repo": "flake-parts", 64 + "rev": "c621e8422220273271f52058f618c94e405bb0f5", 65 + "type": "github" 66 + }, 67 + "original": { 68 + "owner": "hercules-ci", 69 + "repo": "flake-parts", 70 + "type": "github" 71 + } 72 + }, 73 + "flake-utils": { 74 + "inputs": { 75 + "systems": "systems_2" 76 + }, 77 + "locked": { 39 78 "lastModified": 1731533236, 40 79 "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 41 80 "owner": "numtide", ··· 51 90 }, 52 91 "nixpkgs": { 53 92 "locked": { 54 - "lastModified": 1761594641, 55 - "narHash": "sha256-sImk6SJQASDLQo8l+0zWWaBgg7TueLS6lTvdH5pBZpo=", 93 + "lastModified": 1744536153, 94 + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", 95 + "owner": "nixos", 96 + "repo": "nixpkgs", 97 + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", 98 + "type": "github" 99 + }, 100 + "original": { 101 + "owner": "nixos", 102 + "ref": "nixpkgs-unstable", 103 + "repo": "nixpkgs", 104 + "type": "github" 105 + } 106 + }, 107 + "nixpkgs-lib": { 108 + "locked": { 109 + "lastModified": 1743296961, 110 + "narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=", 111 + "owner": "nix-community", 112 + "repo": "nixpkgs.lib", 113 + "rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa", 114 + "type": "github" 115 + }, 116 + "original": { 117 + "owner": "nix-community", 118 + "repo": "nixpkgs.lib", 119 + "type": "github" 120 + } 121 + }, 122 + "nixpkgs_2": { 123 + "locked": { 124 + "lastModified": 1744536153, 125 + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", 56 126 "owner": "NixOS", 57 127 "repo": "nixpkgs", 58 - "rev": "1666250dbe4141e4ca8aaf89b40a3a51c2e36144", 128 + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", 129 + "type": "github" 130 + }, 131 + "original": { 132 + "owner": "NixOS", 133 + "ref": "nixpkgs-unstable", 134 + "repo": "nixpkgs", 135 + "type": "github" 136 + } 137 + }, 138 + "nixpkgs_3": { 139 + "locked": { 140 + "lastModified": 1761880412, 141 + "narHash": "sha256-QoJjGd4NstnyOG4mm4KXF+weBzA2AH/7gn1Pmpfcb0A=", 142 + "owner": "NixOS", 143 + "repo": "nixpkgs", 144 + "rev": "a7fc11be66bdfb5cdde611ee5ce381c183da8386", 59 145 "type": "github" 60 146 }, 61 147 "original": { ··· 65 151 "type": "github" 66 152 } 67 153 }, 68 - "nixpkgs_2": { 154 + "nixpkgs_4": { 69 155 "locked": { 70 156 "lastModified": 1744536153, 71 157 "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", ··· 85 171 "inputs": { 86 172 "advisory-db": "advisory-db", 87 173 "crane": "crane", 174 + "dioxus": "dioxus", 88 175 "flake-utils": "flake-utils", 89 - "nixpkgs": "nixpkgs", 90 - "rust-overlay": "rust-overlay" 176 + "nixpkgs": "nixpkgs_3", 177 + "rust-overlay": "rust-overlay_2" 91 178 } 92 179 }, 93 180 "rust-overlay": { ··· 95 182 "nixpkgs": "nixpkgs_2" 96 183 }, 97 184 "locked": { 98 - "lastModified": 1761619008, 99 - "narHash": "sha256-vp97eNmi5GG/+jlvnBpmG6EVO2F1+nqMQFF9GT2TIQg=", 185 + "lastModified": 1744684506, 186 + "narHash": "sha256-pDPDMT1rdkTWi8MIoZ67gT3L817R7P0Jo+PP+BrnyJI=", 100 187 "owner": "oxalica", 101 188 "repo": "rust-overlay", 102 - "rev": "7bc7d2f706ebe5479d230d2c6806b5dc757ae4cd", 189 + "rev": "47beae969336c05e892e1e4a9dbaac9593de34ab", 190 + "type": "github" 191 + }, 192 + "original": { 193 + "owner": "oxalica", 194 + "repo": "rust-overlay", 195 + "type": "github" 196 + } 197 + }, 198 + "rust-overlay_2": { 199 + "inputs": { 200 + "nixpkgs": "nixpkgs_4" 201 + }, 202 + "locked": { 203 + "lastModified": 1761878277, 204 + "narHash": "sha256-6fCtyVdTzoQejwoextAu7dCLoy5fyD3WVh+Qm7t2Nhg=", 205 + "owner": "oxalica", 206 + "repo": "rust-overlay", 207 + "rev": "6604534e44090c917db714faa58d47861657690c", 103 208 "type": "github" 104 209 }, 105 210 "original": { ··· 109 214 } 110 215 }, 111 216 "systems": { 217 + "locked": { 218 + "lastModified": 1681028828, 219 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 220 + "owner": "nix-systems", 221 + "repo": "default", 222 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 223 + "type": "github" 224 + }, 225 + "original": { 226 + "owner": "nix-systems", 227 + "repo": "default", 228 + "type": "github" 229 + } 230 + }, 231 + "systems_2": { 112 232 "locked": { 113 233 "lastModified": 1681028828, 114 234 "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+19 -31
flake.nix
··· 12 12 13 13 rust-overlay.url = "github:oxalica/rust-overlay"; 14 14 crane.url = "github:ipetkov/crane"; 15 + dioxus.url = "github:DioxusLabs/dioxus"; 15 16 }; 16 17 17 18 outputs = { ··· 21 22 rust-overlay, 22 23 flake-utils, 23 24 advisory-db, 25 + dioxus, 24 26 ... 25 27 }: let 26 28 name = "weaver"; ··· 28 30 flake-utils.lib.eachDefaultSystem (system: let 29 31 pkgs = import nixpkgs { 30 32 inherit system; 31 - overlays = [(import rust-overlay)]; 33 + overlays = [ 34 + (import rust-overlay) 35 + (_: prev: { 36 + dioxus-cli = dioxus.packages.${prev.system}.dioxus-cli; 37 + }) 38 + ]; 32 39 }; 33 40 inherit (pkgs) lib; 34 41 ··· 37 44 toolchain.default.override { 38 45 # Set the build targets supported by the toolchain, 39 46 # wasm32-unknown-unknown is required for trunk. 40 - targets = ["wasm32-unknown-unknown"]; 47 + targets = ["wasm32-unknown-unknown" "wasm32-wasip1" "wasm32-wasip2"]; 41 48 extensions = [ 42 49 "rust-src" 43 50 "rust-analyzer" ··· 93 100 fileset = lib.fileset.unions [ 94 101 ./Cargo.toml 95 102 ./Cargo.lock 103 + (lib.fileset.maybeMissing ./crates/weaver-server/Dioxus.lock) 96 104 (craneLib.fileset.commonCargoSources ./crates/weaver-common) 97 - (craneLib.fileset.commonCargoSources ./crates/weaver-workspace-hack) 98 105 (craneLib.fileset.commonCargoSources crate) 99 106 ]; 100 107 }; ··· 178 185 partitionType = "count"; 179 186 cargoNextestPartitionsExtraArgs = "--no-tests=pass"; 180 187 }); 181 - 182 - # Ensure that cargo-hakari is up to date 183 - "${name}-workspace-hakari" = craneLib.mkCargoDerivation { 184 - inherit src; 185 - pname = "${name}-workspace-hakari"; 186 - cargoArtifacts = null; 187 - doInstallCargoArtifacts = false; 188 - 189 - buildPhaseCargoCommand = '' 190 - cargo hakari generate --diff # workspace-hack Cargo.toml is up-to-date 191 - cargo hakari manage-deps --dry-run # all workspace crates depend on workspace-hack 192 - cargo hakari verify 193 - ''; 194 - 195 - nativeBuildInputs = with pkgs; [ 196 - cargo-hakari 197 - ]; 198 - }; 199 188 }; 200 189 201 190 packages = ··· 218 207 }; 219 208 220 209 devShells.default = let 221 - dioxus-cli = pkgs.dioxus-cli.overrideAttrs (_: { 222 - postPatch = '' 223 - rm Cargo.lock 224 - cp ${./crates/weaver-server/Dioxus.lock} Cargo.lock 225 - ''; 226 - cargoDeps = pkgs.rustPlatform.importCargoLock { 227 - lockFile = ./crates/weaver-server/Dioxus.lock; 228 - }; 229 - }); 210 + # dioxus-cli = pkgs.dioxus-cli.overrideAttrs (_: { 211 + # postPatch = '' 212 + # rm Cargo.lock 213 + # cp ${./crates/weaver-server/Dioxus.lock} Cargo.lock 214 + # ''; 215 + # cargoDeps = pkgs.rustPlatform.importCargoLock { 216 + # lockFile = ./crates/weaver-server/Dioxus.lock; 217 + # }; 218 + # }); 230 219 cargoLock = builtins.fromTOML (builtins.readFile ./Cargo.lock); 231 220 232 221 wasmBindgen = ··· 269 258 270 259 # Extra inputs can be added here; cargo and rustc are provided by default. 271 260 packages = with pkgs; [ 272 - cargo-hakari 273 261 nixd 274 262 alejandra 275 263 diesel-cli
+8 -8
lexicons/notebook/defs.json
··· 4 4 "defs": { 5 5 "notebookView": { 6 6 "type": "object", 7 - "required": ["uri", "cid", "author", "record", "indexedAt"], 7 + "required": ["uri", "cid", "authors", "record", "indexedAt"], 8 8 9 9 "properties": { 10 10 "title": { "type": "ref", "ref": "#title" }, ··· 12 12 "uri": { "type": "string", "format": "at-uri" }, 13 13 "cid": { "type": "string", "format": "cid" }, 14 14 "authors": { 15 - "type": "ref", 16 - "ref": "#authorListView" 15 + "type": "array", 16 + "items": { "type": "ref", "ref": "#authorListView" } 17 17 }, 18 18 "record": { "type": "unknown" }, 19 19 "indexedAt": { "type": "string", "format": "datetime" } ··· 21 21 }, 22 22 "entryView": { 23 23 "type": "object", 24 - "required": ["uri", "cid", "author", "record", "indexedAt"], 24 + "required": ["uri", "cid", "authors", "record", "indexedAt"], 25 25 26 26 "properties": { 27 27 "title": { "type": "ref", "ref": "#title" }, ··· 29 29 "uri": { "type": "string", "format": "at-uri" }, 30 30 "cid": { "type": "string", "format": "cid" }, 31 31 "authors": { 32 - "type": "ref", 33 - "ref": "#authorListView" 32 + "type": "array", 33 + "items": { "type": "ref", "ref": "#authorListView" } 34 34 }, 35 35 "record": { "type": "unknown" }, 36 36 "renderedView": { ··· 60 60 }, 61 61 "authorListView": { 62 62 "type": "object", 63 - "required": ["profile", "index"], 63 + "required": ["record", "index"], 64 64 "properties": { 65 65 "uri": { "type": "string", "format": "at-uri" }, 66 - "cid": { "type": "string", "format": "cid" }, 67 66 "record": { "type": "unknown" }, 68 67 "index": { "type": "integer" } 69 68 } ··· 89 88 } 90 89 } 91 90 }, 91 + 92 92 "bookEntryRef": { 93 93 "type": "object", 94 94 "required": ["entry"],
+1 -1
lexicons/notebook/page.json
··· 1 1 { 2 2 "lexicon": 1, 3 - "id": "sh.weaver.notebook.chapter", 3 + "id": "sh.weaver.notebook.page", 4 4 "defs": { 5 5 "main": { 6 6 "type": "record",