data endpoint for entity 90008 (aka. a website)

add dysnomia

ptr.pet 6f5313bc 16d0e032

verified
0/0
Waiting for spindle ...
+1 -1
deno.json
··· 1 1 { 2 - "workspace": ["./eunomia"], 2 + "workspace": ["./eunomia", "./dysnomia/www"], 3 3 "nodeModulesDir": "auto" 4 4 }
+392
deno.lock
··· 14 14 "npm:@types/eslint@^9.6.1": "9.6.1", 15 15 "npm:@types/node-schedule@^2.1.8": "2.1.8", 16 16 "npm:@types/node@^24.10.1": "24.10.1", 17 + "npm:@xterm/addon-canvas@0.7": "0.7.0_@xterm+xterm@5.5.0", 18 + "npm:@xterm/addon-fit@0.10": "0.10.0_@xterm+xterm@5.5.0", 19 + "npm:@xterm/addon-web-links@0.11": "0.11.0_@xterm+xterm@5.5.0", 20 + "npm:@xterm/addon-webgl@0.18": "0.18.0_@xterm+xterm@5.5.0", 21 + "npm:@xterm/xterm@^5.5.0": "5.5.0", 17 22 "npm:autoprefixer@^10.4.22": "10.4.22_postcss@8.5.6", 18 23 "npm:eslint-config-prettier@^10.1.8": "10.1.8_eslint@9.39.1", 19 24 "npm:eslint-plugin-svelte@^3.13.0": "3.13.0_eslint@9.39.1_svelte@5.45.2__acorn@8.15.0_postcss@8.5.6", ··· 27 32 "npm:prettier@^3.7.1": "3.7.1", 28 33 "npm:prometheus-remote-write@~0.5.1": "0.5.1_node-fetch@3.3.2", 29 34 "npm:robots-parser@^3.0.1": "3.0.1", 35 + "npm:rolldown-vite@7.2.5": "7.2.5_@types+node@24.10.1_picomatch@4.0.3", 30 36 "npm:steamgriddb@^2.2.0": "2.2.1", 31 37 "npm:svelte-check@^4.3.4": "4.3.4_svelte@5.45.2__acorn@8.15.0_typescript@5.9.3", 32 38 "npm:svelte@^5.45.2": "5.45.2_acorn@8.15.0", ··· 37 43 "npm:typescript-eslint@^8.48.0": "8.48.0_eslint@9.39.1_typescript@5.9.3_@typescript-eslint+parser@8.48.0__eslint@9.39.1__typescript@5.9.3", 38 44 "npm:typescript-svelte-plugin@~0.3.50": "0.3.50_svelte@5.45.2__acorn@8.15.0_typescript@5.9.3", 39 45 "npm:typescript@^5.9.2": "5.9.3", 46 + "npm:typescript@~5.9.3": "5.9.3", 47 + "npm:vite-plugin-top-level-await@^1.6.0": "1.6.0_vite@7.2.4__@types+node@24.10.1__picomatch@4.0.3_@types+node@24.10.1", 48 + "npm:vite-plugin-wasm@^3.5.0": "3.5.0_vite@7.2.4__@types+node@24.10.1__picomatch@4.0.3_@types+node@24.10.1", 40 49 "npm:vite@^7.2.4": "7.2.4_@types+node@24.10.1_picomatch@4.0.3" 41 50 }, 42 51 "npm": { ··· 131 140 }, 132 141 "@badrap/valita@0.4.6": { 133 142 "integrity": "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==" 143 + }, 144 + "@emnapi/core@1.7.1": { 145 + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", 146 + "dependencies": [ 147 + "@emnapi/wasi-threads", 148 + "tslib" 149 + ] 150 + }, 151 + "@emnapi/runtime@1.7.1": { 152 + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", 153 + "dependencies": [ 154 + "tslib" 155 + ] 156 + }, 157 + "@emnapi/wasi-threads@1.1.0": { 158 + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", 159 + "dependencies": [ 160 + "tslib" 161 + ] 134 162 }, 135 163 "@esbuild/aix-ppc64@0.25.12": { 136 164 "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", ··· 376 404 ], 377 405 "tarball": "https://npm.jsr.io/~/11/@jsr/std__toml/1.0.11.tgz" 378 406 }, 407 + "@napi-rs/wasm-runtime@1.1.0": { 408 + "integrity": "sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==", 409 + "dependencies": [ 410 + "@emnapi/core", 411 + "@emnapi/runtime", 412 + "@tybys/wasm-util" 413 + ] 414 + }, 379 415 "@neodrag/svelte@2.3.3_svelte@5.45.2__acorn@8.15.0": { 380 416 "integrity": "sha512-avXzhrilsBsnMFljhVAQ7h+6hbSIrvRCJ61GCiGbGISkC1QOhjDCNvPZo2+7KVwiYrnUBx4NRH0kTIqrcxv9Lg==", 381 417 "dependencies": [ ··· 399 435 "fastq" 400 436 ] 401 437 }, 438 + "@oxc-project/runtime@0.97.0": { 439 + "integrity": "sha512-yH0zw7z+jEws4dZ4IUKoix5Lh3yhqIJWF9Dc8PWvhpo7U7O+lJrv7ZZL4BeRO0la8LBQFwcCewtLBnVV7hPe/w==" 440 + }, 441 + "@oxc-project/types@0.97.0": { 442 + "integrity": "sha512-lxmZK4xFrdvU0yZiDwgVQTCvh2gHWBJCBk5ALsrtsBWhs0uDIi+FTOnXRQeQfs304imdvTdaakT/lqwQ8hkOXQ==" 443 + }, 402 444 "@polka/url@1.0.0-next.29": { 403 445 "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==" 404 446 }, ··· 436 478 "@protobufjs/utf8@1.1.0": { 437 479 "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" 438 480 }, 481 + "@rolldown/binding-android-arm64@1.0.0-beta.50": { 482 + "integrity": "sha512-XlEkrOIHLyGT3avOgzfTFSjG+f+dZMw+/qd+Y3HLN86wlndrB/gSimrJCk4gOhr1XtRtEKfszpadI3Md4Z4/Ag==", 483 + "os": ["android"], 484 + "cpu": ["arm64"] 485 + }, 486 + "@rolldown/binding-darwin-arm64@1.0.0-beta.50": { 487 + "integrity": "sha512-+JRqKJhoFlt5r9q+DecAGPLZ5PxeLva+wCMtAuoFMWPoZzgcYrr599KQ+Ix0jwll4B4HGP43avu9My8KtSOR+w==", 488 + "os": ["darwin"], 489 + "cpu": ["arm64"] 490 + }, 491 + "@rolldown/binding-darwin-x64@1.0.0-beta.50": { 492 + "integrity": "sha512-fFXDjXnuX7/gQZQm/1FoivVtRcyAzdjSik7Eo+9iwPQ9EgtA5/nB2+jmbzaKtMGG3q+BnZbdKHCtOacmNrkIDA==", 493 + "os": ["darwin"], 494 + "cpu": ["x64"] 495 + }, 496 + "@rolldown/binding-freebsd-x64@1.0.0-beta.50": { 497 + "integrity": "sha512-F1b6vARy49tjmT/hbloplzgJS7GIvwWZqt+tAHEstCh0JIh9sa8FAMVqEmYxDviqKBaAI8iVvUREm/Kh/PD26Q==", 498 + "os": ["freebsd"], 499 + "cpu": ["x64"] 500 + }, 501 + "@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.50": { 502 + "integrity": "sha512-U6cR76N8T8M6lHj7EZrQ3xunLPxSvYYxA8vJsBKZiFZkT8YV4kjgCO3KwMJL0NOjQCPGKyiXO07U+KmJzdPGRw==", 503 + "os": ["linux"], 504 + "cpu": ["arm"] 505 + }, 506 + "@rolldown/binding-linux-arm64-gnu@1.0.0-beta.50": { 507 + "integrity": "sha512-ONgyjofCrrE3bnh5GZb8EINSFyR/hmwTzZ7oVuyUB170lboza1VMCnb8jgE6MsyyRgHYmN8Lb59i3NKGrxrYjw==", 508 + "os": ["linux"], 509 + "cpu": ["arm64"] 510 + }, 511 + "@rolldown/binding-linux-arm64-musl@1.0.0-beta.50": { 512 + "integrity": "sha512-L0zRdH2oDPkmB+wvuTl+dJbXCsx62SkqcEqdM+79LOcB+PxbAxxjzHU14BuZIQdXcAVDzfpMfaHWzZuwhhBTcw==", 513 + "os": ["linux"], 514 + "cpu": ["arm64"] 515 + }, 516 + "@rolldown/binding-linux-x64-gnu@1.0.0-beta.50": { 517 + "integrity": "sha512-gyoI8o/TGpQd3OzkJnh1M2kxy1Bisg8qJ5Gci0sXm9yLFzEXIFdtc4EAzepxGvrT2ri99ar5rdsmNG0zP0SbIg==", 518 + "os": ["linux"], 519 + "cpu": ["x64"] 520 + }, 521 + "@rolldown/binding-linux-x64-musl@1.0.0-beta.50": { 522 + "integrity": "sha512-zti8A7M+xFDpKlghpcCAzyOi+e5nfUl3QhU023ce5NCgUxRG5zGP2GR9LTydQ1rnIPwZUVBWd4o7NjZDaQxaXA==", 523 + "os": ["linux"], 524 + "cpu": ["x64"] 525 + }, 526 + "@rolldown/binding-openharmony-arm64@1.0.0-beta.50": { 527 + "integrity": "sha512-eZUssog7qljrrRU9Mi0eqYEPm3Ch0UwB+qlWPMKSUXHNqhm3TvDZarJQdTevGEfu3EHAXJvBIe0YFYr0TPVaMA==", 528 + "os": ["openharmony"], 529 + "cpu": ["arm64"] 530 + }, 531 + "@rolldown/binding-wasm32-wasi@1.0.0-beta.50": { 532 + "integrity": "sha512-nmCN0nIdeUnmgeDXiQ+2HU6FT162o+rxnF7WMkBm4M5Ds8qTU7Dzv2Wrf22bo4ftnlrb2hKK6FSwAJSAe2FWLg==", 533 + "dependencies": [ 534 + "@napi-rs/wasm-runtime" 535 + ], 536 + "cpu": ["wasm32"] 537 + }, 538 + "@rolldown/binding-win32-arm64-msvc@1.0.0-beta.50": { 539 + "integrity": "sha512-7kcNLi7Ua59JTTLvbe1dYb028QEPaJPJQHqkmSZ5q3tJueUeb6yjRtx8mw4uIqgWZcnQHAR3PrLN4XRJxvgIkA==", 540 + "os": ["win32"], 541 + "cpu": ["arm64"] 542 + }, 543 + "@rolldown/binding-win32-ia32-msvc@1.0.0-beta.50": { 544 + "integrity": "sha512-lL70VTNvSCdSZkDPPVMwWn/M2yQiYvSoXw9hTLgdIWdUfC3g72UaruezusR6ceRuwHCY1Ayu2LtKqXkBO5LIwg==", 545 + "os": ["win32"], 546 + "cpu": ["ia32"] 547 + }, 548 + "@rolldown/binding-win32-x64-msvc@1.0.0-beta.50": { 549 + "integrity": "sha512-4qU4x5DXWB4JPjyTne/wBNPqkbQU8J45bl21geERBKtEittleonioACBL1R0PsBu0Aq21SwMK5a9zdBkWSlQtQ==", 550 + "os": ["win32"], 551 + "cpu": ["x64"] 552 + }, 553 + "@rolldown/pluginutils@1.0.0-beta.50": { 554 + "integrity": "sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==" 555 + }, 439 556 "@rollup/plugin-commonjs@28.0.9_rollup@4.53.3_picomatch@4.0.3": { 440 557 "integrity": "sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==", 441 558 "dependencies": [ ··· 475 592 "optionalPeers": [ 476 593 "rollup" 477 594 ] 595 + }, 596 + "@rollup/plugin-virtual@3.0.2": { 597 + "integrity": "sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==" 478 598 }, 479 599 "@rollup/pluginutils@5.3.0_rollup@4.53.3": { 480 600 "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", ··· 702 822 "vitefu" 703 823 ] 704 824 }, 825 + "@swc/core-darwin-arm64@1.15.3": { 826 + "integrity": "sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==", 827 + "os": ["darwin"], 828 + "cpu": ["arm64"] 829 + }, 830 + "@swc/core-darwin-x64@1.15.3": { 831 + "integrity": "sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==", 832 + "os": ["darwin"], 833 + "cpu": ["x64"] 834 + }, 835 + "@swc/core-linux-arm-gnueabihf@1.15.3": { 836 + "integrity": "sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==", 837 + "os": ["linux"], 838 + "cpu": ["arm"] 839 + }, 840 + "@swc/core-linux-arm64-gnu@1.15.3": { 841 + "integrity": "sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==", 842 + "os": ["linux"], 843 + "cpu": ["arm64"] 844 + }, 845 + "@swc/core-linux-arm64-musl@1.15.3": { 846 + "integrity": "sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==", 847 + "os": ["linux"], 848 + "cpu": ["arm64"] 849 + }, 850 + "@swc/core-linux-x64-gnu@1.15.3": { 851 + "integrity": "sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==", 852 + "os": ["linux"], 853 + "cpu": ["x64"] 854 + }, 855 + "@swc/core-linux-x64-musl@1.15.3": { 856 + "integrity": "sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==", 857 + "os": ["linux"], 858 + "cpu": ["x64"] 859 + }, 860 + "@swc/core-win32-arm64-msvc@1.15.3": { 861 + "integrity": "sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==", 862 + "os": ["win32"], 863 + "cpu": ["arm64"] 864 + }, 865 + "@swc/core-win32-ia32-msvc@1.15.3": { 866 + "integrity": "sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==", 867 + "os": ["win32"], 868 + "cpu": ["ia32"] 869 + }, 870 + "@swc/core-win32-x64-msvc@1.15.3": { 871 + "integrity": "sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==", 872 + "os": ["win32"], 873 + "cpu": ["x64"] 874 + }, 875 + "@swc/core@1.15.3": { 876 + "integrity": "sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==", 877 + "dependencies": [ 878 + "@swc/counter", 879 + "@swc/types" 880 + ], 881 + "optionalDependencies": [ 882 + "@swc/core-darwin-arm64", 883 + "@swc/core-darwin-x64", 884 + "@swc/core-linux-arm-gnueabihf", 885 + "@swc/core-linux-arm64-gnu", 886 + "@swc/core-linux-arm64-musl", 887 + "@swc/core-linux-x64-gnu", 888 + "@swc/core-linux-x64-musl", 889 + "@swc/core-win32-arm64-msvc", 890 + "@swc/core-win32-ia32-msvc", 891 + "@swc/core-win32-x64-msvc" 892 + ], 893 + "scripts": true 894 + }, 895 + "@swc/counter@0.1.3": { 896 + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" 897 + }, 898 + "@swc/types@0.1.25": { 899 + "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", 900 + "dependencies": [ 901 + "@swc/counter" 902 + ] 903 + }, 904 + "@swc/wasm@1.15.3": { 905 + "integrity": "sha512-NrjGmAplk+v4wokIaLxp1oLoCMVqdQcWoBXopQg57QqyPRcJXLKe+kg5ehhW6z8XaU4Bu5cRkDxUTDY5P0Zy9Q==" 906 + }, 705 907 "@tailwindcss/forms@0.5.10_tailwindcss@3.4.18__postcss@8.5.6__jiti@1.21.7": { 706 908 "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", 707 909 "dependencies": [ ··· 714 916 "dependencies": [ 715 917 "postcss-selector-parser@6.0.10", 716 918 "tailwindcss" 919 + ] 920 + }, 921 + "@tybys/wasm-util@0.10.1": { 922 + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", 923 + "dependencies": [ 924 + "tslib" 717 925 ] 718 926 }, 719 927 "@types/cookie@0.6.0": { ··· 863 1071 "@typescript-eslint/types", 864 1072 "eslint-visitor-keys@4.2.1" 865 1073 ] 1074 + }, 1075 + "@xterm/addon-canvas@0.7.0_@xterm+xterm@5.5.0": { 1076 + "integrity": "sha512-LF5LYcfvefJuJ7QotNRdRSPc9YASAVDeoT5uyXS/nZshZXjYplGXRECBGiznwvhNL2I8bq1Lf5MzRwstsYQ2Iw==", 1077 + "dependencies": [ 1078 + "@xterm/xterm" 1079 + ] 1080 + }, 1081 + "@xterm/addon-fit@0.10.0_@xterm+xterm@5.5.0": { 1082 + "integrity": "sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==", 1083 + "dependencies": [ 1084 + "@xterm/xterm" 1085 + ] 1086 + }, 1087 + "@xterm/addon-web-links@0.11.0_@xterm+xterm@5.5.0": { 1088 + "integrity": "sha512-nIHQ38pQI+a5kXnRaTgwqSHnX7KE6+4SVoceompgHL26unAxdfP6IPqUTSYPQgSwM56hsElfoNrrW5V7BUED/Q==", 1089 + "dependencies": [ 1090 + "@xterm/xterm" 1091 + ] 1092 + }, 1093 + "@xterm/addon-webgl@0.18.0_@xterm+xterm@5.5.0": { 1094 + "integrity": "sha512-xCnfMBTI+/HKPdRnSOHaJDRqEpq2Ugy8LEj9GiY4J3zJObo3joylIFaMvzBwbYRg8zLtkO0KQaStCeSfoaI2/w==", 1095 + "dependencies": [ 1096 + "@xterm/xterm" 1097 + ] 1098 + }, 1099 + "@xterm/xterm@5.5.0": { 1100 + "integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==" 866 1101 }, 867 1102 "acorn-jsx@5.3.2_acorn@8.15.0": { 868 1103 "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", ··· 1084 1319 }, 1085 1320 "delayed-stream@1.0.0": { 1086 1321 "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" 1322 + }, 1323 + "detect-libc@2.1.2": { 1324 + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==" 1087 1325 }, 1088 1326 "devalue@5.5.0": { 1089 1327 "integrity": "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==" ··· 1557 1795 "type-check" 1558 1796 ] 1559 1797 }, 1798 + "lightningcss-android-arm64@1.30.2": { 1799 + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", 1800 + "os": ["android"], 1801 + "cpu": ["arm64"] 1802 + }, 1803 + "lightningcss-darwin-arm64@1.30.2": { 1804 + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", 1805 + "os": ["darwin"], 1806 + "cpu": ["arm64"] 1807 + }, 1808 + "lightningcss-darwin-x64@1.30.2": { 1809 + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", 1810 + "os": ["darwin"], 1811 + "cpu": ["x64"] 1812 + }, 1813 + "lightningcss-freebsd-x64@1.30.2": { 1814 + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", 1815 + "os": ["freebsd"], 1816 + "cpu": ["x64"] 1817 + }, 1818 + "lightningcss-linux-arm-gnueabihf@1.30.2": { 1819 + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", 1820 + "os": ["linux"], 1821 + "cpu": ["arm"] 1822 + }, 1823 + "lightningcss-linux-arm64-gnu@1.30.2": { 1824 + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", 1825 + "os": ["linux"], 1826 + "cpu": ["arm64"] 1827 + }, 1828 + "lightningcss-linux-arm64-musl@1.30.2": { 1829 + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", 1830 + "os": ["linux"], 1831 + "cpu": ["arm64"] 1832 + }, 1833 + "lightningcss-linux-x64-gnu@1.30.2": { 1834 + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", 1835 + "os": ["linux"], 1836 + "cpu": ["x64"] 1837 + }, 1838 + "lightningcss-linux-x64-musl@1.30.2": { 1839 + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", 1840 + "os": ["linux"], 1841 + "cpu": ["x64"] 1842 + }, 1843 + "lightningcss-win32-arm64-msvc@1.30.2": { 1844 + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", 1845 + "os": ["win32"], 1846 + "cpu": ["arm64"] 1847 + }, 1848 + "lightningcss-win32-x64-msvc@1.30.2": { 1849 + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", 1850 + "os": ["win32"], 1851 + "cpu": ["x64"] 1852 + }, 1853 + "lightningcss@1.30.2": { 1854 + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", 1855 + "dependencies": [ 1856 + "detect-libc" 1857 + ], 1858 + "optionalDependencies": [ 1859 + "lightningcss-android-arm64", 1860 + "lightningcss-darwin-arm64", 1861 + "lightningcss-darwin-x64", 1862 + "lightningcss-freebsd-x64", 1863 + "lightningcss-linux-arm-gnueabihf", 1864 + "lightningcss-linux-arm64-gnu", 1865 + "lightningcss-linux-arm64-musl", 1866 + "lightningcss-linux-x64-gnu", 1867 + "lightningcss-linux-x64-musl", 1868 + "lightningcss-win32-arm64-msvc", 1869 + "lightningcss-win32-x64-msvc" 1870 + ] 1871 + }, 1560 1872 "lilconfig@2.1.0": { 1561 1873 "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" 1562 1874 }, ··· 1941 2253 "robots-parser@3.0.1": { 1942 2254 "integrity": "sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==" 1943 2255 }, 2256 + "rolldown-vite@7.2.5_@types+node@24.10.1_picomatch@4.0.3": { 2257 + "integrity": "sha512-u09tdk/huMiN8xwoiBbig197jKdCamQTtOruSalOzbqGje3jdHiV0njQlAW0YvzoahkirFePNQ4RYlfnRQpXZA==", 2258 + "dependencies": [ 2259 + "@oxc-project/runtime", 2260 + "@types/node@24.10.1", 2261 + "fdir", 2262 + "lightningcss", 2263 + "picomatch@4.0.3", 2264 + "postcss", 2265 + "rolldown", 2266 + "tinyglobby" 2267 + ], 2268 + "optionalDependencies": [ 2269 + "fsevents" 2270 + ], 2271 + "optionalPeers": [ 2272 + "@types/node@24.10.1" 2273 + ], 2274 + "bin": true 2275 + }, 2276 + "rolldown@1.0.0-beta.50": { 2277 + "integrity": "sha512-JFULvCNl/anKn99eKjOSEubi0lLmNqQDAjyEMME2T4CwezUDL0i6t1O9xZsu2OMehPnV2caNefWpGF+8TnzB6A==", 2278 + "dependencies": [ 2279 + "@oxc-project/types", 2280 + "@rolldown/pluginutils" 2281 + ], 2282 + "optionalDependencies": [ 2283 + "@rolldown/binding-android-arm64", 2284 + "@rolldown/binding-darwin-arm64", 2285 + "@rolldown/binding-darwin-x64", 2286 + "@rolldown/binding-freebsd-x64", 2287 + "@rolldown/binding-linux-arm-gnueabihf", 2288 + "@rolldown/binding-linux-arm64-gnu", 2289 + "@rolldown/binding-linux-arm64-musl", 2290 + "@rolldown/binding-linux-x64-gnu", 2291 + "@rolldown/binding-linux-x64-musl", 2292 + "@rolldown/binding-openharmony-arm64", 2293 + "@rolldown/binding-wasm32-wasi", 2294 + "@rolldown/binding-win32-arm64-msvc", 2295 + "@rolldown/binding-win32-ia32-msvc", 2296 + "@rolldown/binding-win32-x64-msvc" 2297 + ], 2298 + "bin": true 2299 + }, 1944 2300 "rollup@4.53.3": { 1945 2301 "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", 1946 2302 "dependencies": [ ··· 2269 2625 "util-deprecate@1.0.2": { 2270 2626 "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 2271 2627 }, 2628 + "uuid@10.0.0": { 2629 + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", 2630 + "bin": true 2631 + }, 2272 2632 "vfile-message@2.0.4": { 2273 2633 "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", 2274 2634 "dependencies": [ 2275 2635 "@types/unist", 2276 2636 "unist-util-stringify-position" 2637 + ] 2638 + }, 2639 + "vite-plugin-top-level-await@1.6.0_vite@7.2.4__@types+node@24.10.1__picomatch@4.0.3_@types+node@24.10.1": { 2640 + "integrity": "sha512-bNhUreLamTIkoulCR9aDXbTbhLk6n1YE8NJUTTxl5RYskNRtzOR0ASzSjBVRtNdjIfngDXo11qOsybGLNsrdww==", 2641 + "dependencies": [ 2642 + "@rollup/plugin-virtual", 2643 + "@swc/core", 2644 + "@swc/wasm", 2645 + "uuid", 2646 + "vite" 2647 + ] 2648 + }, 2649 + "vite-plugin-wasm@3.5.0_vite@7.2.4__@types+node@24.10.1__picomatch@4.0.3_@types+node@24.10.1": { 2650 + "integrity": "sha512-X5VWgCnqiQEGb+omhlBVsvTfxikKtoOgAzQ95+BZ8gQ+VfMHIjSHr0wyvXFQCa0eKQ0fKyaL0kWcEnYqBac4lQ==", 2651 + "dependencies": [ 2652 + "vite" 2277 2653 ] 2278 2654 }, 2279 2655 "vite@7.2.4_@types+node@24.10.1_picomatch@4.0.3": { ··· 2332 2708 }, 2333 2709 "workspace": { 2334 2710 "members": { 2711 + "dysnomia/www": { 2712 + "packageJson": { 2713 + "dependencies": [ 2714 + "npm:@jsr/std__toml@*", 2715 + "npm:@xterm/addon-canvas@0.7", 2716 + "npm:@xterm/addon-fit@0.10", 2717 + "npm:@xterm/addon-web-links@0.11", 2718 + "npm:@xterm/addon-webgl@0.18", 2719 + "npm:@xterm/xterm@^5.5.0", 2720 + "npm:rolldown-vite@7.2.5", 2721 + "npm:typescript@~5.9.3", 2722 + "npm:vite-plugin-top-level-await@^1.6.0", 2723 + "npm:vite-plugin-wasm@^3.5.0" 2724 + ] 2725 + } 2726 + }, 2335 2727 "eunomia": { 2336 2728 "packageJson": { 2337 2729 "dependencies": [
+2
dysnomia/.cargo/config.toml
··· 1 + [target.wasm32-unknown-unknown] 2 + rustflags = ["-C", "target-feature=+atomics,+bulk-memory,+mutable-globals,+simd128"]
+6632
dysnomia/Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "abnf" 7 + version = "0.13.0" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "087113bd50d9adce24850eed5d0476c7d199d532fce8fab5173650331e09033a" 10 + dependencies = [ 11 + "abnf-core", 12 + "nom", 13 + ] 14 + 15 + [[package]] 16 + name = "abnf-core" 17 + version = "0.5.0" 18 + source = "registry+https://github.com/rust-lang/crates.io-index" 19 + checksum = "c44e09c43ae1c368fb91a03a566472d0087c26cf7e1b9e8e289c14ede681dd7d" 20 + dependencies = [ 21 + "nom", 22 + ] 23 + 24 + [[package]] 25 + name = "addr2line" 26 + version = "0.25.1" 27 + source = "registry+https://github.com/rust-lang/crates.io-index" 28 + checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" 29 + dependencies = [ 30 + "gimli", 31 + ] 32 + 33 + [[package]] 34 + name = "adler2" 35 + version = "2.0.1" 36 + source = "registry+https://github.com/rust-lang/crates.io-index" 37 + checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 38 + 39 + [[package]] 40 + name = "aho-corasick" 41 + version = "1.1.4" 42 + source = "registry+https://github.com/rust-lang/crates.io-index" 43 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 44 + dependencies = [ 45 + "memchr", 46 + ] 47 + 48 + [[package]] 49 + name = "aliasable" 50 + version = "0.1.3" 51 + source = "registry+https://github.com/rust-lang/crates.io-index" 52 + checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" 53 + 54 + [[package]] 55 + name = "alloc-no-stdlib" 56 + version = "2.0.4" 57 + source = "registry+https://github.com/rust-lang/crates.io-index" 58 + checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 59 + 60 + [[package]] 61 + name = "alloc-stdlib" 62 + version = "0.2.2" 63 + source = "registry+https://github.com/rust-lang/crates.io-index" 64 + checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 65 + dependencies = [ 66 + "alloc-no-stdlib", 67 + ] 68 + 69 + [[package]] 70 + name = "allocator-api2" 71 + version = "0.2.21" 72 + source = "registry+https://github.com/rust-lang/crates.io-index" 73 + checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 74 + 75 + [[package]] 76 + name = "alphanumeric-sort" 77 + version = "1.5.4" 78 + source = "registry+https://github.com/rust-lang/crates.io-index" 79 + checksum = "ab31f79a61d3c25cae1d6734a386662e5cf1b6ba5a9720c135b609273c058c15" 80 + 81 + [[package]] 82 + name = "android_system_properties" 83 + version = "0.1.5" 84 + source = "registry+https://github.com/rust-lang/crates.io-index" 85 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 86 + dependencies = [ 87 + "libc", 88 + ] 89 + 90 + [[package]] 91 + name = "ansi-str" 92 + version = "0.9.0" 93 + source = "registry+https://github.com/rust-lang/crates.io-index" 94 + checksum = "060de1453b69f46304b28274f382132f4e72c55637cf362920926a70d090890d" 95 + dependencies = [ 96 + "ansitok", 97 + ] 98 + 99 + [[package]] 100 + name = "ansi_term" 101 + version = "0.12.1" 102 + source = "registry+https://github.com/rust-lang/crates.io-index" 103 + checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 104 + dependencies = [ 105 + "winapi", 106 + ] 107 + 108 + [[package]] 109 + name = "ansitok" 110 + version = "0.3.0" 111 + source = "registry+https://github.com/rust-lang/crates.io-index" 112 + checksum = "c0a8acea8c2f1c60f0a92a8cd26bf96ca97db56f10bbcab238bbe0cceba659ee" 113 + dependencies = [ 114 + "nom", 115 + "vte", 116 + ] 117 + 118 + [[package]] 119 + name = "anstream" 120 + version = "0.6.21" 121 + source = "registry+https://github.com/rust-lang/crates.io-index" 122 + checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" 123 + dependencies = [ 124 + "anstyle", 125 + "anstyle-parse", 126 + "anstyle-query", 127 + "anstyle-wincon", 128 + "colorchoice", 129 + "is_terminal_polyfill", 130 + "utf8parse", 131 + ] 132 + 133 + [[package]] 134 + name = "anstyle" 135 + version = "1.0.13" 136 + source = "registry+https://github.com/rust-lang/crates.io-index" 137 + checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" 138 + 139 + [[package]] 140 + name = "anstyle-parse" 141 + version = "0.2.7" 142 + source = "registry+https://github.com/rust-lang/crates.io-index" 143 + checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 144 + dependencies = [ 145 + "utf8parse", 146 + ] 147 + 148 + [[package]] 149 + name = "anstyle-query" 150 + version = "1.1.5" 151 + source = "registry+https://github.com/rust-lang/crates.io-index" 152 + checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" 153 + dependencies = [ 154 + "windows-sys 0.61.2", 155 + ] 156 + 157 + [[package]] 158 + name = "anstyle-wincon" 159 + version = "3.0.11" 160 + source = "registry+https://github.com/rust-lang/crates.io-index" 161 + checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" 162 + dependencies = [ 163 + "anstyle", 164 + "once_cell_polyfill", 165 + "windows-sys 0.61.2", 166 + ] 167 + 168 + [[package]] 169 + name = "anyhow" 170 + version = "1.0.100" 171 + source = "registry+https://github.com/rust-lang/crates.io-index" 172 + checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" 173 + 174 + [[package]] 175 + name = "arbitrary" 176 + version = "1.4.2" 177 + source = "registry+https://github.com/rust-lang/crates.io-index" 178 + checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" 179 + dependencies = [ 180 + "derive_arbitrary", 181 + ] 182 + 183 + [[package]] 184 + name = "arrayvec" 185 + version = "0.7.6" 186 + source = "registry+https://github.com/rust-lang/crates.io-index" 187 + checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 188 + 189 + [[package]] 190 + name = "async-compression" 191 + version = "0.4.36" 192 + source = "registry+https://github.com/rust-lang/crates.io-index" 193 + checksum = "98ec5f6c2f8bc326c994cb9e241cc257ddaba9afa8555a43cffbb5dd86efaa37" 194 + dependencies = [ 195 + "compression-codecs", 196 + "compression-core", 197 + "futures-core", 198 + "pin-project-lite", 199 + "tokio", 200 + ] 201 + 202 + [[package]] 203 + name = "atoi_simd" 204 + version = "0.16.1" 205 + source = "registry+https://github.com/rust-lang/crates.io-index" 206 + checksum = "c2a49e05797ca52e312a0c658938b7d00693ef037799ef7187678f212d7684cf" 207 + dependencies = [ 208 + "debug_unsafe", 209 + ] 210 + 211 + [[package]] 212 + name = "atomic-polyfill" 213 + version = "1.0.3" 214 + source = "registry+https://github.com/rust-lang/crates.io-index" 215 + checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" 216 + dependencies = [ 217 + "critical-section", 218 + ] 219 + 220 + [[package]] 221 + name = "atomic-waker" 222 + version = "1.1.2" 223 + source = "registry+https://github.com/rust-lang/crates.io-index" 224 + checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 225 + 226 + [[package]] 227 + name = "autocfg" 228 + version = "1.5.0" 229 + source = "registry+https://github.com/rust-lang/crates.io-index" 230 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 231 + 232 + [[package]] 233 + name = "backtrace" 234 + version = "0.3.76" 235 + source = "registry+https://github.com/rust-lang/crates.io-index" 236 + checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" 237 + dependencies = [ 238 + "addr2line", 239 + "cfg-if", 240 + "libc", 241 + "miniz_oxide", 242 + "object", 243 + "rustc-demangle", 244 + "windows-link 0.2.1", 245 + ] 246 + 247 + [[package]] 248 + name = "backtrace-ext" 249 + version = "0.2.1" 250 + source = "registry+https://github.com/rust-lang/crates.io-index" 251 + checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50" 252 + dependencies = [ 253 + "backtrace", 254 + ] 255 + 256 + [[package]] 257 + name = "base-x" 258 + version = "0.2.11" 259 + source = "registry+https://github.com/rust-lang/crates.io-index" 260 + checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" 261 + 262 + [[package]] 263 + name = "base16ct" 264 + version = "0.2.0" 265 + source = "registry+https://github.com/rust-lang/crates.io-index" 266 + checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" 267 + 268 + [[package]] 269 + name = "base256emoji" 270 + version = "1.0.2" 271 + source = "registry+https://github.com/rust-lang/crates.io-index" 272 + checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" 273 + dependencies = [ 274 + "const-str", 275 + "match-lookup", 276 + ] 277 + 278 + [[package]] 279 + name = "base64" 280 + version = "0.22.1" 281 + source = "registry+https://github.com/rust-lang/crates.io-index" 282 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 283 + 284 + [[package]] 285 + name = "base64ct" 286 + version = "1.8.1" 287 + source = "registry+https://github.com/rust-lang/crates.io-index" 288 + checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" 289 + 290 + [[package]] 291 + name = "bindgen" 292 + version = "0.72.1" 293 + source = "registry+https://github.com/rust-lang/crates.io-index" 294 + checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" 295 + dependencies = [ 296 + "bitflags", 297 + "cexpr", 298 + "clang-sys", 299 + "itertools 0.13.0", 300 + "proc-macro2", 301 + "quote", 302 + "regex", 303 + "rustc-hash", 304 + "shlex", 305 + "syn 2.0.111", 306 + ] 307 + 308 + [[package]] 309 + name = "bit-set" 310 + version = "0.8.0" 311 + source = "registry+https://github.com/rust-lang/crates.io-index" 312 + checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" 313 + dependencies = [ 314 + "bit-vec", 315 + ] 316 + 317 + [[package]] 318 + name = "bit-vec" 319 + version = "0.8.0" 320 + source = "registry+https://github.com/rust-lang/crates.io-index" 321 + checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" 322 + 323 + [[package]] 324 + name = "bitflags" 325 + version = "2.10.0" 326 + source = "registry+https://github.com/rust-lang/crates.io-index" 327 + checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" 328 + 329 + [[package]] 330 + name = "block-buffer" 331 + version = "0.10.4" 332 + source = "registry+https://github.com/rust-lang/crates.io-index" 333 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 334 + dependencies = [ 335 + "generic-array", 336 + ] 337 + 338 + [[package]] 339 + name = "bon" 340 + version = "3.8.1" 341 + source = "registry+https://github.com/rust-lang/crates.io-index" 342 + checksum = "ebeb9aaf9329dff6ceb65c689ca3db33dbf15f324909c60e4e5eef5701ce31b1" 343 + dependencies = [ 344 + "bon-macros", 345 + "rustversion", 346 + ] 347 + 348 + [[package]] 349 + name = "bon-macros" 350 + version = "3.8.1" 351 + source = "registry+https://github.com/rust-lang/crates.io-index" 352 + checksum = "77e9d642a7e3a318e37c2c9427b5a6a48aa1ad55dcd986f3034ab2239045a645" 353 + dependencies = [ 354 + "darling", 355 + "ident_case", 356 + "prettyplease", 357 + "proc-macro2", 358 + "quote", 359 + "rustversion", 360 + "syn 2.0.111", 361 + ] 362 + 363 + [[package]] 364 + name = "borsh" 365 + version = "1.6.0" 366 + source = "registry+https://github.com/rust-lang/crates.io-index" 367 + checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" 368 + dependencies = [ 369 + "cfg_aliases", 370 + ] 371 + 372 + [[package]] 373 + name = "bracoxide" 374 + version = "0.1.7" 375 + source = "registry+https://github.com/rust-lang/crates.io-index" 376 + checksum = "f5a4d25760c1b6f53db7257292236bc20da1215a1004ee330b37976eeac3af31" 377 + 378 + [[package]] 379 + name = "brotli" 380 + version = "8.0.2" 381 + source = "registry+https://github.com/rust-lang/crates.io-index" 382 + checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" 383 + dependencies = [ 384 + "alloc-no-stdlib", 385 + "alloc-stdlib", 386 + "brotli-decompressor", 387 + ] 388 + 389 + [[package]] 390 + name = "brotli-decompressor" 391 + version = "5.0.0" 392 + source = "registry+https://github.com/rust-lang/crates.io-index" 393 + checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" 394 + dependencies = [ 395 + "alloc-no-stdlib", 396 + "alloc-stdlib", 397 + ] 398 + 399 + [[package]] 400 + name = "bstr" 401 + version = "1.12.1" 402 + source = "registry+https://github.com/rust-lang/crates.io-index" 403 + checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" 404 + dependencies = [ 405 + "memchr", 406 + "regex-automata", 407 + "serde", 408 + ] 409 + 410 + [[package]] 411 + name = "btree-range-map" 412 + version = "0.7.2" 413 + source = "registry+https://github.com/rust-lang/crates.io-index" 414 + checksum = "1be5c9672446d3800bcbcaabaeba121fe22f1fb25700c4562b22faf76d377c33" 415 + dependencies = [ 416 + "btree-slab", 417 + "cc-traits", 418 + "range-traits", 419 + "serde", 420 + "slab", 421 + ] 422 + 423 + [[package]] 424 + name = "btree-slab" 425 + version = "0.6.1" 426 + source = "registry+https://github.com/rust-lang/crates.io-index" 427 + checksum = "7a2b56d3029f075c4fa892428a098425b86cef5c89ae54073137ece416aef13c" 428 + dependencies = [ 429 + "cc-traits", 430 + "slab", 431 + "smallvec", 432 + ] 433 + 434 + [[package]] 435 + name = "buf-trait" 436 + version = "0.4.1" 437 + source = "registry+https://github.com/rust-lang/crates.io-index" 438 + checksum = "21eaafc770e8c073d6c3facafe7617e774305d4954aa6351b9c452eb37ee17b4" 439 + dependencies = [ 440 + "zerocopy 0.7.35", 441 + ] 442 + 443 + [[package]] 444 + name = "bumpalo" 445 + version = "3.19.0" 446 + source = "registry+https://github.com/rust-lang/crates.io-index" 447 + checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 448 + 449 + [[package]] 450 + name = "bytecount" 451 + version = "0.6.9" 452 + source = "registry+https://github.com/rust-lang/crates.io-index" 453 + checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" 454 + 455 + [[package]] 456 + name = "byteorder" 457 + version = "1.5.0" 458 + source = "registry+https://github.com/rust-lang/crates.io-index" 459 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 460 + 461 + [[package]] 462 + name = "bytes" 463 + version = "1.11.0" 464 + source = "registry+https://github.com/rust-lang/crates.io-index" 465 + checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" 466 + dependencies = [ 467 + "serde", 468 + ] 469 + 470 + [[package]] 471 + name = "bytesize" 472 + version = "2.3.1" 473 + source = "registry+https://github.com/rust-lang/crates.io-index" 474 + checksum = "6bd91ee7b2422bcb158d90ef4d14f75ef67f340943fc4149891dcce8f8b972a3" 475 + 476 + [[package]] 477 + name = "byteyarn" 478 + version = "0.5.1" 479 + source = "registry+https://github.com/rust-lang/crates.io-index" 480 + checksum = "b93e51d26468a15ea59f8525e0c13dc405db43e644a0b1e6d44346c72cf4cf7b" 481 + dependencies = [ 482 + "buf-trait", 483 + ] 484 + 485 + [[package]] 486 + name = "calamine" 487 + version = "0.28.0" 488 + source = "registry+https://github.com/rust-lang/crates.io-index" 489 + checksum = "15e02a18e79de779a78b0a6ec84a3deed1ff0607dd970a11369f993263f99f1a" 490 + dependencies = [ 491 + "atoi_simd", 492 + "byteorder", 493 + "chrono", 494 + "codepage", 495 + "encoding_rs", 496 + "fast-float2", 497 + "log", 498 + "quick-xml 0.37.5", 499 + "serde", 500 + "zip", 501 + ] 502 + 503 + [[package]] 504 + name = "castaway" 505 + version = "0.2.4" 506 + source = "registry+https://github.com/rust-lang/crates.io-index" 507 + checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" 508 + dependencies = [ 509 + "rustversion", 510 + ] 511 + 512 + [[package]] 513 + name = "cbor4ii" 514 + version = "0.2.14" 515 + source = "registry+https://github.com/rust-lang/crates.io-index" 516 + checksum = "b544cf8c89359205f4f990d0e6f3828db42df85b5dac95d09157a250eb0749c4" 517 + dependencies = [ 518 + "serde", 519 + ] 520 + 521 + [[package]] 522 + name = "cc" 523 + version = "1.2.49" 524 + source = "registry+https://github.com/rust-lang/crates.io-index" 525 + checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" 526 + dependencies = [ 527 + "find-msvc-tools", 528 + "shlex", 529 + ] 530 + 531 + [[package]] 532 + name = "cc-traits" 533 + version = "2.0.0" 534 + source = "registry+https://github.com/rust-lang/crates.io-index" 535 + checksum = "060303ef31ef4a522737e1b1ab68c67916f2a787bb2f4f54f383279adba962b5" 536 + dependencies = [ 537 + "slab", 538 + ] 539 + 540 + [[package]] 541 + name = "cexpr" 542 + version = "0.6.0" 543 + source = "registry+https://github.com/rust-lang/crates.io-index" 544 + checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 545 + dependencies = [ 546 + "nom", 547 + ] 548 + 549 + [[package]] 550 + name = "cfg-if" 551 + version = "1.0.4" 552 + source = "registry+https://github.com/rust-lang/crates.io-index" 553 + checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 554 + 555 + [[package]] 556 + name = "cfg_aliases" 557 + version = "0.2.1" 558 + source = "registry+https://github.com/rust-lang/crates.io-index" 559 + checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 560 + 561 + [[package]] 562 + name = "chardetng" 563 + version = "0.1.17" 564 + source = "registry+https://github.com/rust-lang/crates.io-index" 565 + checksum = "14b8f0b65b7b08ae3c8187e8d77174de20cb6777864c6b832d8ad365999cf1ea" 566 + dependencies = [ 567 + "cfg-if", 568 + "encoding_rs", 569 + "memchr", 570 + ] 571 + 572 + [[package]] 573 + name = "chrono" 574 + version = "0.4.42" 575 + source = "registry+https://github.com/rust-lang/crates.io-index" 576 + checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" 577 + dependencies = [ 578 + "iana-time-zone", 579 + "js-sys", 580 + "num-traits", 581 + "pure-rust-locales", 582 + "serde", 583 + "wasm-bindgen", 584 + "windows-link 0.2.1", 585 + ] 586 + 587 + [[package]] 588 + name = "chrono-humanize" 589 + version = "0.2.3" 590 + source = "registry+https://github.com/rust-lang/crates.io-index" 591 + checksum = "799627e6b4d27827a814e837b9d8a504832086081806d45b1afa34dc982b023b" 592 + dependencies = [ 593 + "chrono", 594 + ] 595 + 596 + [[package]] 597 + name = "chrono-tz" 598 + version = "0.10.4" 599 + source = "registry+https://github.com/rust-lang/crates.io-index" 600 + checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3" 601 + dependencies = [ 602 + "chrono", 603 + "phf 0.12.1", 604 + ] 605 + 606 + [[package]] 607 + name = "ciborium" 608 + version = "0.2.2" 609 + source = "registry+https://github.com/rust-lang/crates.io-index" 610 + checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" 611 + dependencies = [ 612 + "ciborium-io", 613 + "ciborium-ll", 614 + "serde", 615 + ] 616 + 617 + [[package]] 618 + name = "ciborium-io" 619 + version = "0.2.2" 620 + source = "registry+https://github.com/rust-lang/crates.io-index" 621 + checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" 622 + 623 + [[package]] 624 + name = "ciborium-ll" 625 + version = "0.2.2" 626 + source = "registry+https://github.com/rust-lang/crates.io-index" 627 + checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" 628 + dependencies = [ 629 + "ciborium-io", 630 + "half", 631 + ] 632 + 633 + [[package]] 634 + name = "cid" 635 + version = "0.11.1" 636 + source = "registry+https://github.com/rust-lang/crates.io-index" 637 + checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a" 638 + dependencies = [ 639 + "core2", 640 + "multibase", 641 + "multihash", 642 + "serde", 643 + "serde_bytes", 644 + "unsigned-varint 0.8.0", 645 + ] 646 + 647 + [[package]] 648 + name = "clang-sys" 649 + version = "1.8.1" 650 + source = "registry+https://github.com/rust-lang/crates.io-index" 651 + checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" 652 + dependencies = [ 653 + "glob", 654 + "libc", 655 + "libloading", 656 + ] 657 + 658 + [[package]] 659 + name = "clap" 660 + version = "4.5.53" 661 + source = "registry+https://github.com/rust-lang/crates.io-index" 662 + checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" 663 + dependencies = [ 664 + "clap_builder", 665 + ] 666 + 667 + [[package]] 668 + name = "clap_builder" 669 + version = "4.5.53" 670 + source = "registry+https://github.com/rust-lang/crates.io-index" 671 + checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" 672 + dependencies = [ 673 + "anstream", 674 + "anstyle", 675 + "clap_lex", 676 + "strsim", 677 + "terminal_size", 678 + ] 679 + 680 + [[package]] 681 + name = "clap_lex" 682 + version = "0.7.6" 683 + source = "registry+https://github.com/rust-lang/crates.io-index" 684 + checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" 685 + 686 + [[package]] 687 + name = "cobs" 688 + version = "0.3.0" 689 + source = "registry+https://github.com/rust-lang/crates.io-index" 690 + checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" 691 + dependencies = [ 692 + "thiserror 2.0.17", 693 + ] 694 + 695 + [[package]] 696 + name = "codepage" 697 + version = "0.1.2" 698 + source = "registry+https://github.com/rust-lang/crates.io-index" 699 + checksum = "48f68d061bc2828ae826206326e61251aca94c1e4a5305cf52d9138639c918b4" 700 + dependencies = [ 701 + "encoding_rs", 702 + ] 703 + 704 + [[package]] 705 + name = "colorchoice" 706 + version = "1.0.4" 707 + source = "registry+https://github.com/rust-lang/crates.io-index" 708 + checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 709 + 710 + [[package]] 711 + name = "compression-codecs" 712 + version = "0.4.35" 713 + source = "registry+https://github.com/rust-lang/crates.io-index" 714 + checksum = "b0f7ac3e5b97fdce45e8922fb05cae2c37f7bbd63d30dd94821dacfd8f3f2bf2" 715 + dependencies = [ 716 + "compression-core", 717 + "flate2", 718 + "memchr", 719 + ] 720 + 721 + [[package]] 722 + name = "compression-core" 723 + version = "0.4.31" 724 + source = "registry+https://github.com/rust-lang/crates.io-index" 725 + checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d" 726 + 727 + [[package]] 728 + name = "console" 729 + version = "0.15.11" 730 + source = "registry+https://github.com/rust-lang/crates.io-index" 731 + checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" 732 + dependencies = [ 733 + "encode_unicode", 734 + "libc", 735 + "once_cell", 736 + "unicode-width 0.2.2", 737 + "windows-sys 0.59.0", 738 + ] 739 + 740 + [[package]] 741 + name = "console" 742 + version = "0.16.1" 743 + source = "registry+https://github.com/rust-lang/crates.io-index" 744 + checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" 745 + dependencies = [ 746 + "encode_unicode", 747 + "libc", 748 + "once_cell", 749 + "unicode-width 0.2.2", 750 + "windows-sys 0.61.2", 751 + ] 752 + 753 + [[package]] 754 + name = "console_error_panic_hook" 755 + version = "0.1.7" 756 + source = "registry+https://github.com/rust-lang/crates.io-index" 757 + checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 758 + dependencies = [ 759 + "cfg-if", 760 + "wasm-bindgen", 761 + ] 762 + 763 + [[package]] 764 + name = "const-oid" 765 + version = "0.9.6" 766 + source = "registry+https://github.com/rust-lang/crates.io-index" 767 + checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 768 + 769 + [[package]] 770 + name = "const-str" 771 + version = "0.4.3" 772 + source = "registry+https://github.com/rust-lang/crates.io-index" 773 + checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" 774 + 775 + [[package]] 776 + name = "const_format" 777 + version = "0.2.35" 778 + source = "registry+https://github.com/rust-lang/crates.io-index" 779 + checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" 780 + dependencies = [ 781 + "const_format_proc_macros", 782 + ] 783 + 784 + [[package]] 785 + name = "const_format_proc_macros" 786 + version = "0.2.34" 787 + source = "registry+https://github.com/rust-lang/crates.io-index" 788 + checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" 789 + dependencies = [ 790 + "proc-macro2", 791 + "quote", 792 + "unicode-xid", 793 + ] 794 + 795 + [[package]] 796 + name = "cordyceps" 797 + version = "0.3.4" 798 + source = "registry+https://github.com/rust-lang/crates.io-index" 799 + checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a" 800 + dependencies = [ 801 + "loom", 802 + "tracing", 803 + ] 804 + 805 + [[package]] 806 + name = "core-foundation" 807 + version = "0.9.4" 808 + source = "registry+https://github.com/rust-lang/crates.io-index" 809 + checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 810 + dependencies = [ 811 + "core-foundation-sys", 812 + "libc", 813 + ] 814 + 815 + [[package]] 816 + name = "core-foundation-sys" 817 + version = "0.8.7" 818 + source = "registry+https://github.com/rust-lang/crates.io-index" 819 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 820 + 821 + [[package]] 822 + name = "core2" 823 + version = "0.4.0" 824 + source = "registry+https://github.com/rust-lang/crates.io-index" 825 + checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" 826 + dependencies = [ 827 + "memchr", 828 + ] 829 + 830 + [[package]] 831 + name = "cpufeatures" 832 + version = "0.2.17" 833 + source = "registry+https://github.com/rust-lang/crates.io-index" 834 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 835 + dependencies = [ 836 + "libc", 837 + ] 838 + 839 + [[package]] 840 + name = "crc32fast" 841 + version = "1.5.0" 842 + source = "registry+https://github.com/rust-lang/crates.io-index" 843 + checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 844 + dependencies = [ 845 + "cfg-if", 846 + ] 847 + 848 + [[package]] 849 + name = "critical-section" 850 + version = "1.2.0" 851 + source = "registry+https://github.com/rust-lang/crates.io-index" 852 + checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" 853 + 854 + [[package]] 855 + name = "crossbeam-channel" 856 + version = "0.5.15" 857 + source = "registry+https://github.com/rust-lang/crates.io-index" 858 + checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 859 + dependencies = [ 860 + "crossbeam-utils", 861 + ] 862 + 863 + [[package]] 864 + name = "crossbeam-deque" 865 + version = "0.8.6" 866 + source = "registry+https://github.com/rust-lang/crates.io-index" 867 + checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 868 + dependencies = [ 869 + "crossbeam-epoch", 870 + "crossbeam-utils", 871 + ] 872 + 873 + [[package]] 874 + name = "crossbeam-epoch" 875 + version = "0.9.18" 876 + source = "registry+https://github.com/rust-lang/crates.io-index" 877 + checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 878 + dependencies = [ 879 + "crossbeam-utils", 880 + ] 881 + 882 + [[package]] 883 + name = "crossbeam-utils" 884 + version = "0.8.21" 885 + source = "registry+https://github.com/rust-lang/crates.io-index" 886 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 887 + 888 + [[package]] 889 + name = "crossterm_winapi" 890 + version = "0.9.1" 891 + source = "registry+https://github.com/rust-lang/crates.io-index" 892 + checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" 893 + dependencies = [ 894 + "winapi", 895 + ] 896 + 897 + [[package]] 898 + name = "crunchy" 899 + version = "0.2.4" 900 + source = "registry+https://github.com/rust-lang/crates.io-index" 901 + checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 902 + 903 + [[package]] 904 + name = "crypto-bigint" 905 + version = "0.5.5" 906 + source = "registry+https://github.com/rust-lang/crates.io-index" 907 + checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" 908 + dependencies = [ 909 + "generic-array", 910 + "rand_core 0.6.4", 911 + "subtle", 912 + "zeroize", 913 + ] 914 + 915 + [[package]] 916 + name = "crypto-common" 917 + version = "0.1.6" 918 + source = "registry+https://github.com/rust-lang/crates.io-index" 919 + checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 920 + dependencies = [ 921 + "generic-array", 922 + "typenum", 923 + ] 924 + 925 + [[package]] 926 + name = "csv" 927 + version = "1.4.0" 928 + source = "registry+https://github.com/rust-lang/crates.io-index" 929 + checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" 930 + dependencies = [ 931 + "csv-core", 932 + "itoa", 933 + "ryu", 934 + "serde_core", 935 + ] 936 + 937 + [[package]] 938 + name = "csv-core" 939 + version = "0.1.13" 940 + source = "registry+https://github.com/rust-lang/crates.io-index" 941 + checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" 942 + dependencies = [ 943 + "memchr", 944 + ] 945 + 946 + [[package]] 947 + name = "curve25519-dalek" 948 + version = "4.1.3" 949 + source = "registry+https://github.com/rust-lang/crates.io-index" 950 + checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" 951 + dependencies = [ 952 + "cfg-if", 953 + "cpufeatures", 954 + "curve25519-dalek-derive", 955 + "digest", 956 + "fiat-crypto", 957 + "rustc_version", 958 + "subtle", 959 + "zeroize", 960 + ] 961 + 962 + [[package]] 963 + name = "curve25519-dalek-derive" 964 + version = "0.1.1" 965 + source = "registry+https://github.com/rust-lang/crates.io-index" 966 + checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" 967 + dependencies = [ 968 + "proc-macro2", 969 + "quote", 970 + "syn 2.0.111", 971 + ] 972 + 973 + [[package]] 974 + name = "darling" 975 + version = "0.21.3" 976 + source = "registry+https://github.com/rust-lang/crates.io-index" 977 + checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" 978 + dependencies = [ 979 + "darling_core", 980 + "darling_macro", 981 + ] 982 + 983 + [[package]] 984 + name = "darling_core" 985 + version = "0.21.3" 986 + source = "registry+https://github.com/rust-lang/crates.io-index" 987 + checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" 988 + dependencies = [ 989 + "fnv", 990 + "ident_case", 991 + "proc-macro2", 992 + "quote", 993 + "strsim", 994 + "syn 2.0.111", 995 + ] 996 + 997 + [[package]] 998 + name = "darling_macro" 999 + version = "0.21.3" 1000 + source = "registry+https://github.com/rust-lang/crates.io-index" 1001 + checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" 1002 + dependencies = [ 1003 + "darling_core", 1004 + "quote", 1005 + "syn 2.0.111", 1006 + ] 1007 + 1008 + [[package]] 1009 + name = "dashmap" 1010 + version = "6.1.0" 1011 + source = "registry+https://github.com/rust-lang/crates.io-index" 1012 + checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" 1013 + dependencies = [ 1014 + "cfg-if", 1015 + "crossbeam-utils", 1016 + "hashbrown 0.14.5", 1017 + "lock_api", 1018 + "once_cell", 1019 + "parking_lot_core", 1020 + ] 1021 + 1022 + [[package]] 1023 + name = "data-encoding" 1024 + version = "2.9.0" 1025 + source = "registry+https://github.com/rust-lang/crates.io-index" 1026 + checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" 1027 + 1028 + [[package]] 1029 + name = "data-encoding-macro" 1030 + version = "0.1.18" 1031 + source = "registry+https://github.com/rust-lang/crates.io-index" 1032 + checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" 1033 + dependencies = [ 1034 + "data-encoding", 1035 + "data-encoding-macro-internal", 1036 + ] 1037 + 1038 + [[package]] 1039 + name = "data-encoding-macro-internal" 1040 + version = "0.1.16" 1041 + source = "registry+https://github.com/rust-lang/crates.io-index" 1042 + checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" 1043 + dependencies = [ 1044 + "data-encoding", 1045 + "syn 2.0.111", 1046 + ] 1047 + 1048 + [[package]] 1049 + name = "debug_unsafe" 1050 + version = "0.1.3" 1051 + source = "registry+https://github.com/rust-lang/crates.io-index" 1052 + checksum = "85d3cef41d236720ed453e102153a53e4cc3d2fde848c0078a50cf249e8e3e5b" 1053 + 1054 + [[package]] 1055 + name = "der" 1056 + version = "0.7.10" 1057 + source = "registry+https://github.com/rust-lang/crates.io-index" 1058 + checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" 1059 + dependencies = [ 1060 + "const-oid", 1061 + "pem-rfc7468", 1062 + "zeroize", 1063 + ] 1064 + 1065 + [[package]] 1066 + name = "deranged" 1067 + version = "0.5.5" 1068 + source = "registry+https://github.com/rust-lang/crates.io-index" 1069 + checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" 1070 + dependencies = [ 1071 + "powerfmt", 1072 + "serde_core", 1073 + ] 1074 + 1075 + [[package]] 1076 + name = "derive_arbitrary" 1077 + version = "1.4.2" 1078 + source = "registry+https://github.com/rust-lang/crates.io-index" 1079 + checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" 1080 + dependencies = [ 1081 + "proc-macro2", 1082 + "quote", 1083 + "syn 2.0.111", 1084 + ] 1085 + 1086 + [[package]] 1087 + name = "derive_more" 1088 + version = "1.0.0" 1089 + source = "registry+https://github.com/rust-lang/crates.io-index" 1090 + checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" 1091 + dependencies = [ 1092 + "derive_more-impl", 1093 + ] 1094 + 1095 + [[package]] 1096 + name = "derive_more-impl" 1097 + version = "1.0.0" 1098 + source = "registry+https://github.com/rust-lang/crates.io-index" 1099 + checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" 1100 + dependencies = [ 1101 + "proc-macro2", 1102 + "quote", 1103 + "syn 2.0.111", 1104 + "unicode-xid", 1105 + ] 1106 + 1107 + [[package]] 1108 + name = "devicons" 1109 + version = "0.6.12" 1110 + source = "registry+https://github.com/rust-lang/crates.io-index" 1111 + checksum = "830e47e2f330cf4fdd5a958dcef921b9523ffc21ab6713aa5e77ba2cce03904b" 1112 + dependencies = [ 1113 + "lazy_static", 1114 + ] 1115 + 1116 + [[package]] 1117 + name = "dialoguer" 1118 + version = "0.11.0" 1119 + source = "registry+https://github.com/rust-lang/crates.io-index" 1120 + checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" 1121 + dependencies = [ 1122 + "console 0.15.11", 1123 + "fuzzy-matcher", 1124 + "shell-words", 1125 + "thiserror 1.0.69", 1126 + ] 1127 + 1128 + [[package]] 1129 + name = "diatomic-waker" 1130 + version = "0.2.3" 1131 + source = "registry+https://github.com/rust-lang/crates.io-index" 1132 + checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c" 1133 + 1134 + [[package]] 1135 + name = "digest" 1136 + version = "0.10.7" 1137 + source = "registry+https://github.com/rust-lang/crates.io-index" 1138 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 1139 + dependencies = [ 1140 + "block-buffer", 1141 + "const-oid", 1142 + "crypto-common", 1143 + "subtle", 1144 + ] 1145 + 1146 + [[package]] 1147 + name = "dirs" 1148 + version = "6.0.0" 1149 + source = "registry+https://github.com/rust-lang/crates.io-index" 1150 + checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" 1151 + dependencies = [ 1152 + "dirs-sys", 1153 + ] 1154 + 1155 + [[package]] 1156 + name = "dirs-sys" 1157 + version = "0.5.0" 1158 + source = "registry+https://github.com/rust-lang/crates.io-index" 1159 + checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" 1160 + dependencies = [ 1161 + "libc", 1162 + "option-ext", 1163 + "redox_users", 1164 + "windows-sys 0.61.2", 1165 + ] 1166 + 1167 + [[package]] 1168 + name = "displaydoc" 1169 + version = "0.2.5" 1170 + source = "registry+https://github.com/rust-lang/crates.io-index" 1171 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 1172 + dependencies = [ 1173 + "proc-macro2", 1174 + "quote", 1175 + "syn 2.0.111", 1176 + ] 1177 + 1178 + [[package]] 1179 + name = "dtparse" 1180 + version = "2.0.1" 1181 + source = "registry+https://github.com/rust-lang/crates.io-index" 1182 + checksum = "23fb403c0926d35af2cc54d961bc2696a10d40725c08360ef69db04a4c201fd7" 1183 + dependencies = [ 1184 + "chrono", 1185 + "lazy_static", 1186 + "num-traits", 1187 + "rust_decimal", 1188 + ] 1189 + 1190 + [[package]] 1191 + name = "dyn-clone" 1192 + version = "1.0.20" 1193 + source = "registry+https://github.com/rust-lang/crates.io-index" 1194 + checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" 1195 + 1196 + [[package]] 1197 + name = "dysnomia-sh" 1198 + version = "0.1.0" 1199 + dependencies = [ 1200 + "ansi_term", 1201 + "anyhow", 1202 + "console_error_panic_hook", 1203 + "futures", 1204 + "getrandom 0.3.4", 1205 + "jacquard", 1206 + "jacquard-repo", 1207 + "js-sys", 1208 + "miette", 1209 + "nu-cmd-extra", 1210 + "nu-cmd-lang", 1211 + "nu-command", 1212 + "nu-engine", 1213 + "nu-parser", 1214 + "nu-protocol", 1215 + "rapidhash", 1216 + "reqwest", 1217 + "scc", 1218 + "serde", 1219 + "serde_ipld_dagcbor", 1220 + "serde_json", 1221 + "url", 1222 + "vfs", 1223 + "wasm-bindgen", 1224 + "wasm-bindgen-futures", 1225 + "web-sys", 1226 + ] 1227 + 1228 + [[package]] 1229 + name = "ecdsa" 1230 + version = "0.16.9" 1231 + source = "registry+https://github.com/rust-lang/crates.io-index" 1232 + checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" 1233 + dependencies = [ 1234 + "der", 1235 + "digest", 1236 + "elliptic-curve", 1237 + "rfc6979", 1238 + "signature", 1239 + "spki", 1240 + ] 1241 + 1242 + [[package]] 1243 + name = "ed25519" 1244 + version = "2.2.3" 1245 + source = "registry+https://github.com/rust-lang/crates.io-index" 1246 + checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" 1247 + dependencies = [ 1248 + "pkcs8", 1249 + "signature", 1250 + ] 1251 + 1252 + [[package]] 1253 + name = "ed25519-dalek" 1254 + version = "2.2.0" 1255 + source = "registry+https://github.com/rust-lang/crates.io-index" 1256 + checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" 1257 + dependencies = [ 1258 + "curve25519-dalek", 1259 + "ed25519", 1260 + "rand_core 0.6.4", 1261 + "serde", 1262 + "sha2", 1263 + "subtle", 1264 + "zeroize", 1265 + ] 1266 + 1267 + [[package]] 1268 + name = "either" 1269 + version = "1.15.0" 1270 + source = "registry+https://github.com/rust-lang/crates.io-index" 1271 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 1272 + 1273 + [[package]] 1274 + name = "elliptic-curve" 1275 + version = "0.13.8" 1276 + source = "registry+https://github.com/rust-lang/crates.io-index" 1277 + checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" 1278 + dependencies = [ 1279 + "base16ct", 1280 + "crypto-bigint", 1281 + "digest", 1282 + "ff", 1283 + "generic-array", 1284 + "group", 1285 + "pem-rfc7468", 1286 + "pkcs8", 1287 + "rand_core 0.6.4", 1288 + "sec1", 1289 + "subtle", 1290 + "zeroize", 1291 + ] 1292 + 1293 + [[package]] 1294 + name = "embedded-io" 1295 + version = "0.4.0" 1296 + source = "registry+https://github.com/rust-lang/crates.io-index" 1297 + checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" 1298 + 1299 + [[package]] 1300 + name = "embedded-io" 1301 + version = "0.6.1" 1302 + source = "registry+https://github.com/rust-lang/crates.io-index" 1303 + checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" 1304 + 1305 + [[package]] 1306 + name = "encode_unicode" 1307 + version = "1.0.0" 1308 + source = "registry+https://github.com/rust-lang/crates.io-index" 1309 + checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" 1310 + 1311 + [[package]] 1312 + name = "encoding_rs" 1313 + version = "0.8.35" 1314 + source = "registry+https://github.com/rust-lang/crates.io-index" 1315 + checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 1316 + dependencies = [ 1317 + "cfg-if", 1318 + ] 1319 + 1320 + [[package]] 1321 + name = "equivalent" 1322 + version = "1.0.2" 1323 + source = "registry+https://github.com/rust-lang/crates.io-index" 1324 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 1325 + 1326 + [[package]] 1327 + name = "erased-serde" 1328 + version = "0.4.9" 1329 + source = "registry+https://github.com/rust-lang/crates.io-index" 1330 + checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" 1331 + dependencies = [ 1332 + "serde", 1333 + "serde_core", 1334 + "typeid", 1335 + ] 1336 + 1337 + [[package]] 1338 + name = "errno" 1339 + version = "0.3.14" 1340 + source = "registry+https://github.com/rust-lang/crates.io-index" 1341 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 1342 + dependencies = [ 1343 + "libc", 1344 + "windows-sys 0.61.2", 1345 + ] 1346 + 1347 + [[package]] 1348 + name = "fancy-regex" 1349 + version = "0.16.2" 1350 + source = "registry+https://github.com/rust-lang/crates.io-index" 1351 + checksum = "998b056554fbe42e03ae0e152895cd1a7e1002aec800fdc6635d20270260c46f" 1352 + dependencies = [ 1353 + "bit-set", 1354 + "regex-automata", 1355 + "regex-syntax", 1356 + ] 1357 + 1358 + [[package]] 1359 + name = "fast-float2" 1360 + version = "0.2.3" 1361 + source = "registry+https://github.com/rust-lang/crates.io-index" 1362 + checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55" 1363 + 1364 + [[package]] 1365 + name = "fastrand" 1366 + version = "2.3.0" 1367 + source = "registry+https://github.com/rust-lang/crates.io-index" 1368 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 1369 + 1370 + [[package]] 1371 + name = "ff" 1372 + version = "0.13.1" 1373 + source = "registry+https://github.com/rust-lang/crates.io-index" 1374 + checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" 1375 + dependencies = [ 1376 + "rand_core 0.6.4", 1377 + "subtle", 1378 + ] 1379 + 1380 + [[package]] 1381 + name = "fiat-crypto" 1382 + version = "0.2.9" 1383 + source = "registry+https://github.com/rust-lang/crates.io-index" 1384 + checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" 1385 + 1386 + [[package]] 1387 + name = "filesize" 1388 + version = "0.2.0" 1389 + source = "registry+https://github.com/rust-lang/crates.io-index" 1390 + checksum = "12d741e2415d4e2e5bd1c1d00409d1a8865a57892c2d689b504365655d237d43" 1391 + dependencies = [ 1392 + "winapi", 1393 + ] 1394 + 1395 + [[package]] 1396 + name = "filetime" 1397 + version = "0.2.26" 1398 + source = "registry+https://github.com/rust-lang/crates.io-index" 1399 + checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" 1400 + dependencies = [ 1401 + "cfg-if", 1402 + "libc", 1403 + "libredox", 1404 + "windows-sys 0.60.2", 1405 + ] 1406 + 1407 + [[package]] 1408 + name = "find-msvc-tools" 1409 + version = "0.1.5" 1410 + source = "registry+https://github.com/rust-lang/crates.io-index" 1411 + checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" 1412 + 1413 + [[package]] 1414 + name = "flate2" 1415 + version = "1.1.5" 1416 + source = "registry+https://github.com/rust-lang/crates.io-index" 1417 + checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" 1418 + dependencies = [ 1419 + "crc32fast", 1420 + "libz-rs-sys", 1421 + "miniz_oxide", 1422 + ] 1423 + 1424 + [[package]] 1425 + name = "fluent" 1426 + version = "0.17.0" 1427 + source = "registry+https://github.com/rust-lang/crates.io-index" 1428 + checksum = "8137a6d5a2c50d6b0ebfcb9aaa91a28154e0a70605f112d30cb0cd4a78670477" 1429 + dependencies = [ 1430 + "fluent-bundle", 1431 + "unic-langid", 1432 + ] 1433 + 1434 + [[package]] 1435 + name = "fluent-bundle" 1436 + version = "0.16.0" 1437 + source = "registry+https://github.com/rust-lang/crates.io-index" 1438 + checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4" 1439 + dependencies = [ 1440 + "fluent-langneg", 1441 + "fluent-syntax", 1442 + "intl-memoizer", 1443 + "intl_pluralrules", 1444 + "rustc-hash", 1445 + "self_cell", 1446 + "smallvec", 1447 + "unic-langid", 1448 + ] 1449 + 1450 + [[package]] 1451 + name = "fluent-langneg" 1452 + version = "0.13.1" 1453 + source = "registry+https://github.com/rust-lang/crates.io-index" 1454 + checksum = "7eebbe59450baee8282d71676f3bfed5689aeab00b27545e83e5f14b1195e8b0" 1455 + dependencies = [ 1456 + "unic-langid", 1457 + ] 1458 + 1459 + [[package]] 1460 + name = "fluent-syntax" 1461 + version = "0.12.0" 1462 + source = "registry+https://github.com/rust-lang/crates.io-index" 1463 + checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198" 1464 + dependencies = [ 1465 + "memchr", 1466 + "thiserror 2.0.17", 1467 + ] 1468 + 1469 + [[package]] 1470 + name = "fnv" 1471 + version = "1.0.7" 1472 + source = "registry+https://github.com/rust-lang/crates.io-index" 1473 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 1474 + 1475 + [[package]] 1476 + name = "foldhash" 1477 + version = "0.1.5" 1478 + source = "registry+https://github.com/rust-lang/crates.io-index" 1479 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 1480 + 1481 + [[package]] 1482 + name = "form_urlencoded" 1483 + version = "1.2.2" 1484 + source = "registry+https://github.com/rust-lang/crates.io-index" 1485 + checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 1486 + dependencies = [ 1487 + "percent-encoding", 1488 + ] 1489 + 1490 + [[package]] 1491 + name = "futf" 1492 + version = "0.1.5" 1493 + source = "registry+https://github.com/rust-lang/crates.io-index" 1494 + checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" 1495 + dependencies = [ 1496 + "mac", 1497 + "new_debug_unreachable", 1498 + ] 1499 + 1500 + [[package]] 1501 + name = "futures" 1502 + version = "0.3.31" 1503 + source = "registry+https://github.com/rust-lang/crates.io-index" 1504 + checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 1505 + dependencies = [ 1506 + "futures-channel", 1507 + "futures-core", 1508 + "futures-executor", 1509 + "futures-io", 1510 + "futures-sink", 1511 + "futures-task", 1512 + "futures-util", 1513 + ] 1514 + 1515 + [[package]] 1516 + name = "futures-buffered" 1517 + version = "0.2.12" 1518 + source = "registry+https://github.com/rust-lang/crates.io-index" 1519 + checksum = "a8e0e1f38ec07ba4abbde21eed377082f17ccb988be9d988a5adbf4bafc118fd" 1520 + dependencies = [ 1521 + "cordyceps", 1522 + "diatomic-waker", 1523 + "futures-core", 1524 + "pin-project-lite", 1525 + "spin 0.10.0", 1526 + ] 1527 + 1528 + [[package]] 1529 + name = "futures-channel" 1530 + version = "0.3.31" 1531 + source = "registry+https://github.com/rust-lang/crates.io-index" 1532 + checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 1533 + dependencies = [ 1534 + "futures-core", 1535 + "futures-sink", 1536 + ] 1537 + 1538 + [[package]] 1539 + name = "futures-core" 1540 + version = "0.3.31" 1541 + source = "registry+https://github.com/rust-lang/crates.io-index" 1542 + checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 1543 + 1544 + [[package]] 1545 + name = "futures-executor" 1546 + version = "0.3.31" 1547 + source = "registry+https://github.com/rust-lang/crates.io-index" 1548 + checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 1549 + dependencies = [ 1550 + "futures-core", 1551 + "futures-task", 1552 + "futures-util", 1553 + ] 1554 + 1555 + [[package]] 1556 + name = "futures-io" 1557 + version = "0.3.31" 1558 + source = "registry+https://github.com/rust-lang/crates.io-index" 1559 + checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1560 + 1561 + [[package]] 1562 + name = "futures-lite" 1563 + version = "2.6.1" 1564 + source = "registry+https://github.com/rust-lang/crates.io-index" 1565 + checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" 1566 + dependencies = [ 1567 + "fastrand", 1568 + "futures-core", 1569 + "futures-io", 1570 + "parking", 1571 + "pin-project-lite", 1572 + ] 1573 + 1574 + [[package]] 1575 + name = "futures-macro" 1576 + version = "0.3.31" 1577 + source = "registry+https://github.com/rust-lang/crates.io-index" 1578 + checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 1579 + dependencies = [ 1580 + "proc-macro2", 1581 + "quote", 1582 + "syn 2.0.111", 1583 + ] 1584 + 1585 + [[package]] 1586 + name = "futures-sink" 1587 + version = "0.3.31" 1588 + source = "registry+https://github.com/rust-lang/crates.io-index" 1589 + checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 1590 + 1591 + [[package]] 1592 + name = "futures-task" 1593 + version = "0.3.31" 1594 + source = "registry+https://github.com/rust-lang/crates.io-index" 1595 + checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 1596 + 1597 + [[package]] 1598 + name = "futures-util" 1599 + version = "0.3.31" 1600 + source = "registry+https://github.com/rust-lang/crates.io-index" 1601 + checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 1602 + dependencies = [ 1603 + "futures-channel", 1604 + "futures-core", 1605 + "futures-io", 1606 + "futures-macro", 1607 + "futures-sink", 1608 + "futures-task", 1609 + "memchr", 1610 + "pin-project-lite", 1611 + "pin-utils", 1612 + "slab", 1613 + ] 1614 + 1615 + [[package]] 1616 + name = "fuzzy-matcher" 1617 + version = "0.3.7" 1618 + source = "registry+https://github.com/rust-lang/crates.io-index" 1619 + checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" 1620 + dependencies = [ 1621 + "thread_local", 1622 + ] 1623 + 1624 + [[package]] 1625 + name = "generator" 1626 + version = "0.8.7" 1627 + source = "registry+https://github.com/rust-lang/crates.io-index" 1628 + checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2" 1629 + dependencies = [ 1630 + "cc", 1631 + "cfg-if", 1632 + "libc", 1633 + "log", 1634 + "rustversion", 1635 + "windows 0.61.3", 1636 + ] 1637 + 1638 + [[package]] 1639 + name = "generic-array" 1640 + version = "0.14.9" 1641 + source = "registry+https://github.com/rust-lang/crates.io-index" 1642 + checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" 1643 + dependencies = [ 1644 + "typenum", 1645 + "version_check", 1646 + "zeroize", 1647 + ] 1648 + 1649 + [[package]] 1650 + name = "getrandom" 1651 + version = "0.2.16" 1652 + source = "registry+https://github.com/rust-lang/crates.io-index" 1653 + checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 1654 + dependencies = [ 1655 + "cfg-if", 1656 + "js-sys", 1657 + "libc", 1658 + "wasi", 1659 + "wasm-bindgen", 1660 + ] 1661 + 1662 + [[package]] 1663 + name = "getrandom" 1664 + version = "0.3.4" 1665 + source = "registry+https://github.com/rust-lang/crates.io-index" 1666 + checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 1667 + dependencies = [ 1668 + "cfg-if", 1669 + "js-sys", 1670 + "libc", 1671 + "r-efi", 1672 + "wasip2", 1673 + "wasm-bindgen", 1674 + ] 1675 + 1676 + [[package]] 1677 + name = "gimli" 1678 + version = "0.32.3" 1679 + source = "registry+https://github.com/rust-lang/crates.io-index" 1680 + checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" 1681 + 1682 + [[package]] 1683 + name = "glob" 1684 + version = "0.3.3" 1685 + source = "registry+https://github.com/rust-lang/crates.io-index" 1686 + checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" 1687 + 1688 + [[package]] 1689 + name = "gloo-storage" 1690 + version = "0.3.0" 1691 + source = "registry+https://github.com/rust-lang/crates.io-index" 1692 + checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a" 1693 + dependencies = [ 1694 + "gloo-utils", 1695 + "js-sys", 1696 + "serde", 1697 + "serde_json", 1698 + "thiserror 1.0.69", 1699 + "wasm-bindgen", 1700 + "web-sys", 1701 + ] 1702 + 1703 + [[package]] 1704 + name = "gloo-utils" 1705 + version = "0.2.0" 1706 + source = "registry+https://github.com/rust-lang/crates.io-index" 1707 + checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" 1708 + dependencies = [ 1709 + "js-sys", 1710 + "serde", 1711 + "serde_json", 1712 + "wasm-bindgen", 1713 + "web-sys", 1714 + ] 1715 + 1716 + [[package]] 1717 + name = "group" 1718 + version = "0.13.0" 1719 + source = "registry+https://github.com/rust-lang/crates.io-index" 1720 + checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" 1721 + dependencies = [ 1722 + "ff", 1723 + "rand_core 0.6.4", 1724 + "subtle", 1725 + ] 1726 + 1727 + [[package]] 1728 + name = "h2" 1729 + version = "0.4.12" 1730 + source = "registry+https://github.com/rust-lang/crates.io-index" 1731 + checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" 1732 + dependencies = [ 1733 + "atomic-waker", 1734 + "bytes", 1735 + "fnv", 1736 + "futures-core", 1737 + "futures-sink", 1738 + "http", 1739 + "indexmap 2.12.1", 1740 + "slab", 1741 + "tokio", 1742 + "tokio-util", 1743 + "tracing", 1744 + ] 1745 + 1746 + [[package]] 1747 + name = "half" 1748 + version = "2.7.1" 1749 + source = "registry+https://github.com/rust-lang/crates.io-index" 1750 + checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" 1751 + dependencies = [ 1752 + "cfg-if", 1753 + "crunchy", 1754 + "zerocopy 0.8.31", 1755 + ] 1756 + 1757 + [[package]] 1758 + name = "hash32" 1759 + version = "0.2.1" 1760 + source = "registry+https://github.com/rust-lang/crates.io-index" 1761 + checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" 1762 + dependencies = [ 1763 + "byteorder", 1764 + ] 1765 + 1766 + [[package]] 1767 + name = "hashbrown" 1768 + version = "0.12.3" 1769 + source = "registry+https://github.com/rust-lang/crates.io-index" 1770 + checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1771 + 1772 + [[package]] 1773 + name = "hashbrown" 1774 + version = "0.14.5" 1775 + source = "registry+https://github.com/rust-lang/crates.io-index" 1776 + checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1777 + 1778 + [[package]] 1779 + name = "hashbrown" 1780 + version = "0.15.5" 1781 + source = "registry+https://github.com/rust-lang/crates.io-index" 1782 + checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 1783 + dependencies = [ 1784 + "allocator-api2", 1785 + "equivalent", 1786 + "foldhash", 1787 + ] 1788 + 1789 + [[package]] 1790 + name = "hashbrown" 1791 + version = "0.16.1" 1792 + source = "registry+https://github.com/rust-lang/crates.io-index" 1793 + checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" 1794 + 1795 + [[package]] 1796 + name = "heapless" 1797 + version = "0.7.17" 1798 + source = "registry+https://github.com/rust-lang/crates.io-index" 1799 + checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" 1800 + dependencies = [ 1801 + "atomic-polyfill", 1802 + "hash32", 1803 + "rustc_version", 1804 + "serde", 1805 + "spin 0.9.8", 1806 + "stable_deref_trait", 1807 + ] 1808 + 1809 + [[package]] 1810 + name = "heck" 1811 + version = "0.4.1" 1812 + source = "registry+https://github.com/rust-lang/crates.io-index" 1813 + checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 1814 + 1815 + [[package]] 1816 + name = "heck" 1817 + version = "0.5.0" 1818 + source = "registry+https://github.com/rust-lang/crates.io-index" 1819 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1820 + 1821 + [[package]] 1822 + name = "hex" 1823 + version = "0.4.3" 1824 + source = "registry+https://github.com/rust-lang/crates.io-index" 1825 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1826 + 1827 + [[package]] 1828 + name = "hex_fmt" 1829 + version = "0.3.0" 1830 + source = "registry+https://github.com/rust-lang/crates.io-index" 1831 + checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" 1832 + 1833 + [[package]] 1834 + name = "hmac" 1835 + version = "0.12.1" 1836 + source = "registry+https://github.com/rust-lang/crates.io-index" 1837 + checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1838 + dependencies = [ 1839 + "digest", 1840 + ] 1841 + 1842 + [[package]] 1843 + name = "html5ever" 1844 + version = "0.27.0" 1845 + source = "registry+https://github.com/rust-lang/crates.io-index" 1846 + checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" 1847 + dependencies = [ 1848 + "log", 1849 + "mac", 1850 + "markup5ever", 1851 + "proc-macro2", 1852 + "quote", 1853 + "syn 2.0.111", 1854 + ] 1855 + 1856 + [[package]] 1857 + name = "http" 1858 + version = "1.4.0" 1859 + source = "registry+https://github.com/rust-lang/crates.io-index" 1860 + checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" 1861 + dependencies = [ 1862 + "bytes", 1863 + "itoa", 1864 + ] 1865 + 1866 + [[package]] 1867 + name = "http-body" 1868 + version = "1.0.1" 1869 + source = "registry+https://github.com/rust-lang/crates.io-index" 1870 + checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 1871 + dependencies = [ 1872 + "bytes", 1873 + "http", 1874 + ] 1875 + 1876 + [[package]] 1877 + name = "http-body-util" 1878 + version = "0.1.3" 1879 + source = "registry+https://github.com/rust-lang/crates.io-index" 1880 + checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 1881 + dependencies = [ 1882 + "bytes", 1883 + "futures-core", 1884 + "http", 1885 + "http-body", 1886 + "pin-project-lite", 1887 + ] 1888 + 1889 + [[package]] 1890 + name = "httparse" 1891 + version = "1.10.1" 1892 + source = "registry+https://github.com/rust-lang/crates.io-index" 1893 + checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 1894 + 1895 + [[package]] 1896 + name = "human-date-parser" 1897 + version = "0.3.1" 1898 + source = "registry+https://github.com/rust-lang/crates.io-index" 1899 + checksum = "406f83c56de4b2c9183be52ae9a4fefa22c0e0c3d3d7ef80be26eaee11c7110e" 1900 + dependencies = [ 1901 + "chrono", 1902 + "pest", 1903 + "pest_consume", 1904 + "pest_derive", 1905 + "thiserror 1.0.69", 1906 + ] 1907 + 1908 + [[package]] 1909 + name = "hyper" 1910 + version = "1.8.1" 1911 + source = "registry+https://github.com/rust-lang/crates.io-index" 1912 + checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" 1913 + dependencies = [ 1914 + "atomic-waker", 1915 + "bytes", 1916 + "futures-channel", 1917 + "futures-core", 1918 + "h2", 1919 + "http", 1920 + "http-body", 1921 + "httparse", 1922 + "itoa", 1923 + "pin-project-lite", 1924 + "pin-utils", 1925 + "smallvec", 1926 + "tokio", 1927 + "want", 1928 + ] 1929 + 1930 + [[package]] 1931 + name = "hyper-rustls" 1932 + version = "0.27.7" 1933 + source = "registry+https://github.com/rust-lang/crates.io-index" 1934 + checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" 1935 + dependencies = [ 1936 + "http", 1937 + "hyper", 1938 + "hyper-util", 1939 + "rustls", 1940 + "rustls-pki-types", 1941 + "tokio", 1942 + "tokio-rustls", 1943 + "tower-service", 1944 + "webpki-roots", 1945 + ] 1946 + 1947 + [[package]] 1948 + name = "hyper-util" 1949 + version = "0.1.19" 1950 + source = "registry+https://github.com/rust-lang/crates.io-index" 1951 + checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" 1952 + dependencies = [ 1953 + "base64", 1954 + "bytes", 1955 + "futures-channel", 1956 + "futures-core", 1957 + "futures-util", 1958 + "http", 1959 + "http-body", 1960 + "hyper", 1961 + "ipnet", 1962 + "libc", 1963 + "percent-encoding", 1964 + "pin-project-lite", 1965 + "socket2", 1966 + "system-configuration", 1967 + "tokio", 1968 + "tower-service", 1969 + "tracing", 1970 + "windows-registry", 1971 + ] 1972 + 1973 + [[package]] 1974 + name = "iana-time-zone" 1975 + version = "0.1.64" 1976 + source = "registry+https://github.com/rust-lang/crates.io-index" 1977 + checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" 1978 + dependencies = [ 1979 + "android_system_properties", 1980 + "core-foundation-sys", 1981 + "iana-time-zone-haiku", 1982 + "js-sys", 1983 + "log", 1984 + "wasm-bindgen", 1985 + "windows-core 0.62.2", 1986 + ] 1987 + 1988 + [[package]] 1989 + name = "iana-time-zone-haiku" 1990 + version = "0.1.2" 1991 + source = "registry+https://github.com/rust-lang/crates.io-index" 1992 + checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1993 + dependencies = [ 1994 + "cc", 1995 + ] 1996 + 1997 + [[package]] 1998 + name = "icu_collections" 1999 + version = "2.1.1" 2000 + source = "registry+https://github.com/rust-lang/crates.io-index" 2001 + checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" 2002 + dependencies = [ 2003 + "displaydoc", 2004 + "potential_utf", 2005 + "yoke", 2006 + "zerofrom", 2007 + "zerovec", 2008 + ] 2009 + 2010 + [[package]] 2011 + name = "icu_locale_core" 2012 + version = "2.1.1" 2013 + source = "registry+https://github.com/rust-lang/crates.io-index" 2014 + checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" 2015 + dependencies = [ 2016 + "displaydoc", 2017 + "litemap", 2018 + "tinystr", 2019 + "writeable", 2020 + "zerovec", 2021 + ] 2022 + 2023 + [[package]] 2024 + name = "icu_normalizer" 2025 + version = "2.1.1" 2026 + source = "registry+https://github.com/rust-lang/crates.io-index" 2027 + checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" 2028 + dependencies = [ 2029 + "icu_collections", 2030 + "icu_normalizer_data", 2031 + "icu_properties", 2032 + "icu_provider", 2033 + "smallvec", 2034 + "zerovec", 2035 + ] 2036 + 2037 + [[package]] 2038 + name = "icu_normalizer_data" 2039 + version = "2.1.1" 2040 + source = "registry+https://github.com/rust-lang/crates.io-index" 2041 + checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" 2042 + 2043 + [[package]] 2044 + name = "icu_properties" 2045 + version = "2.1.2" 2046 + source = "registry+https://github.com/rust-lang/crates.io-index" 2047 + checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" 2048 + dependencies = [ 2049 + "icu_collections", 2050 + "icu_locale_core", 2051 + "icu_properties_data", 2052 + "icu_provider", 2053 + "zerotrie", 2054 + "zerovec", 2055 + ] 2056 + 2057 + [[package]] 2058 + name = "icu_properties_data" 2059 + version = "2.1.2" 2060 + source = "registry+https://github.com/rust-lang/crates.io-index" 2061 + checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" 2062 + 2063 + [[package]] 2064 + name = "icu_provider" 2065 + version = "2.1.1" 2066 + source = "registry+https://github.com/rust-lang/crates.io-index" 2067 + checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" 2068 + dependencies = [ 2069 + "displaydoc", 2070 + "icu_locale_core", 2071 + "writeable", 2072 + "yoke", 2073 + "zerofrom", 2074 + "zerotrie", 2075 + "zerovec", 2076 + ] 2077 + 2078 + [[package]] 2079 + name = "ident_case" 2080 + version = "1.0.1" 2081 + source = "registry+https://github.com/rust-lang/crates.io-index" 2082 + checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 2083 + 2084 + [[package]] 2085 + name = "idna" 2086 + version = "1.1.0" 2087 + source = "registry+https://github.com/rust-lang/crates.io-index" 2088 + checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 2089 + dependencies = [ 2090 + "idna_adapter", 2091 + "smallvec", 2092 + "utf8_iter", 2093 + ] 2094 + 2095 + [[package]] 2096 + name = "idna_adapter" 2097 + version = "1.2.1" 2098 + source = "registry+https://github.com/rust-lang/crates.io-index" 2099 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 2100 + dependencies = [ 2101 + "icu_normalizer", 2102 + "icu_properties", 2103 + ] 2104 + 2105 + [[package]] 2106 + name = "indexmap" 2107 + version = "1.9.3" 2108 + source = "registry+https://github.com/rust-lang/crates.io-index" 2109 + checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 2110 + dependencies = [ 2111 + "autocfg", 2112 + "hashbrown 0.12.3", 2113 + "serde", 2114 + ] 2115 + 2116 + [[package]] 2117 + name = "indexmap" 2118 + version = "2.12.1" 2119 + source = "registry+https://github.com/rust-lang/crates.io-index" 2120 + checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" 2121 + dependencies = [ 2122 + "equivalent", 2123 + "hashbrown 0.16.1", 2124 + "serde", 2125 + "serde_core", 2126 + ] 2127 + 2128 + [[package]] 2129 + name = "indicatif" 2130 + version = "0.18.3" 2131 + source = "registry+https://github.com/rust-lang/crates.io-index" 2132 + checksum = "9375e112e4b463ec1b1c6c011953545c65a30164fbab5b581df32b3abf0dcb88" 2133 + dependencies = [ 2134 + "console 0.16.1", 2135 + "portable-atomic", 2136 + "unicode-width 0.2.2", 2137 + "unit-prefix", 2138 + "web-time", 2139 + ] 2140 + 2141 + [[package]] 2142 + name = "indoc" 2143 + version = "2.0.7" 2144 + source = "registry+https://github.com/rust-lang/crates.io-index" 2145 + checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" 2146 + dependencies = [ 2147 + "rustversion", 2148 + ] 2149 + 2150 + [[package]] 2151 + name = "intl-memoizer" 2152 + version = "0.5.3" 2153 + source = "registry+https://github.com/rust-lang/crates.io-index" 2154 + checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f" 2155 + dependencies = [ 2156 + "type-map", 2157 + "unic-langid", 2158 + ] 2159 + 2160 + [[package]] 2161 + name = "intl_pluralrules" 2162 + version = "7.0.2" 2163 + source = "registry+https://github.com/rust-lang/crates.io-index" 2164 + checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" 2165 + dependencies = [ 2166 + "unic-langid", 2167 + ] 2168 + 2169 + [[package]] 2170 + name = "inventory" 2171 + version = "0.3.21" 2172 + source = "registry+https://github.com/rust-lang/crates.io-index" 2173 + checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" 2174 + dependencies = [ 2175 + "rustversion", 2176 + ] 2177 + 2178 + [[package]] 2179 + name = "ipld-core" 2180 + version = "0.4.2" 2181 + source = "registry+https://github.com/rust-lang/crates.io-index" 2182 + checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db" 2183 + dependencies = [ 2184 + "cid", 2185 + "serde", 2186 + "serde_bytes", 2187 + ] 2188 + 2189 + [[package]] 2190 + name = "ipnet" 2191 + version = "2.11.0" 2192 + source = "registry+https://github.com/rust-lang/crates.io-index" 2193 + checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 2194 + 2195 + [[package]] 2196 + name = "iri-string" 2197 + version = "0.7.9" 2198 + source = "registry+https://github.com/rust-lang/crates.io-index" 2199 + checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" 2200 + dependencies = [ 2201 + "memchr", 2202 + "serde", 2203 + ] 2204 + 2205 + [[package]] 2206 + name = "iroh-car" 2207 + version = "0.5.1" 2208 + source = "registry+https://github.com/rust-lang/crates.io-index" 2209 + checksum = "cb7f8cd4cb9aa083fba8b52e921764252d0b4dcb1cd6d120b809dbfe1106e81a" 2210 + dependencies = [ 2211 + "anyhow", 2212 + "cid", 2213 + "futures", 2214 + "serde", 2215 + "serde_ipld_dagcbor", 2216 + "thiserror 1.0.69", 2217 + "tokio", 2218 + "unsigned-varint 0.7.2", 2219 + ] 2220 + 2221 + [[package]] 2222 + name = "is_ci" 2223 + version = "1.2.0" 2224 + source = "registry+https://github.com/rust-lang/crates.io-index" 2225 + checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" 2226 + 2227 + [[package]] 2228 + name = "is_debug" 2229 + version = "1.1.0" 2230 + source = "registry+https://github.com/rust-lang/crates.io-index" 2231 + checksum = "1fe266d2e243c931d8190177f20bf7f24eed45e96f39e87dc49a27b32d12d407" 2232 + 2233 + [[package]] 2234 + name = "is_terminal_polyfill" 2235 + version = "1.70.2" 2236 + source = "registry+https://github.com/rust-lang/crates.io-index" 2237 + checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" 2238 + 2239 + [[package]] 2240 + name = "itertools" 2241 + version = "0.11.0" 2242 + source = "registry+https://github.com/rust-lang/crates.io-index" 2243 + checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" 2244 + dependencies = [ 2245 + "either", 2246 + ] 2247 + 2248 + [[package]] 2249 + name = "itertools" 2250 + version = "0.13.0" 2251 + source = "registry+https://github.com/rust-lang/crates.io-index" 2252 + checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" 2253 + dependencies = [ 2254 + "either", 2255 + ] 2256 + 2257 + [[package]] 2258 + name = "itertools" 2259 + version = "0.14.0" 2260 + source = "registry+https://github.com/rust-lang/crates.io-index" 2261 + checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 2262 + dependencies = [ 2263 + "either", 2264 + ] 2265 + 2266 + [[package]] 2267 + name = "itoa" 2268 + version = "1.0.15" 2269 + source = "registry+https://github.com/rust-lang/crates.io-index" 2270 + checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 2271 + 2272 + [[package]] 2273 + name = "jacquard" 2274 + version = "0.9.4" 2275 + dependencies = [ 2276 + "bytes", 2277 + "getrandom 0.2.16", 2278 + "gloo-storage", 2279 + "http", 2280 + "jacquard-api", 2281 + "jacquard-common", 2282 + "jacquard-identity", 2283 + "jacquard-oauth", 2284 + "jose-jwk", 2285 + "miette", 2286 + "regex", 2287 + "regex-lite", 2288 + "reqwest", 2289 + "ring", 2290 + "serde", 2291 + "serde_html_form", 2292 + "serde_json", 2293 + "smol_str", 2294 + "thiserror 2.0.17", 2295 + "tokio", 2296 + "trait-variant", 2297 + "url", 2298 + "webpage", 2299 + ] 2300 + 2301 + [[package]] 2302 + name = "jacquard-api" 2303 + version = "0.9.2" 2304 + dependencies = [ 2305 + "bon", 2306 + "bytes", 2307 + "jacquard-common", 2308 + "jacquard-derive", 2309 + "jacquard-lexicon", 2310 + "miette", 2311 + "rustversion", 2312 + "serde", 2313 + "serde_bytes", 2314 + "serde_ipld_dagcbor", 2315 + "thiserror 2.0.17", 2316 + "unicode-segmentation", 2317 + ] 2318 + 2319 + [[package]] 2320 + name = "jacquard-common" 2321 + version = "0.9.2" 2322 + dependencies = [ 2323 + "base64", 2324 + "bon", 2325 + "bytes", 2326 + "chrono", 2327 + "cid", 2328 + "ed25519-dalek", 2329 + "getrandom 0.2.16", 2330 + "getrandom 0.3.4", 2331 + "http", 2332 + "ipld-core", 2333 + "k256", 2334 + "langtag", 2335 + "miette", 2336 + "multibase", 2337 + "multihash", 2338 + "ouroboros", 2339 + "p256", 2340 + "postcard", 2341 + "rand 0.9.2", 2342 + "regex", 2343 + "regex-lite", 2344 + "reqwest", 2345 + "ring", 2346 + "serde", 2347 + "serde_bytes", 2348 + "serde_html_form", 2349 + "serde_ipld_dagcbor", 2350 + "serde_json", 2351 + "signature", 2352 + "smol_str", 2353 + "thiserror 2.0.17", 2354 + "tokio", 2355 + "tokio-util", 2356 + "trait-variant", 2357 + "url", 2358 + ] 2359 + 2360 + [[package]] 2361 + name = "jacquard-derive" 2362 + version = "0.9.4" 2363 + dependencies = [ 2364 + "heck 0.5.0", 2365 + "jacquard-lexicon", 2366 + "proc-macro2", 2367 + "quote", 2368 + "syn 2.0.111", 2369 + ] 2370 + 2371 + [[package]] 2372 + name = "jacquard-identity" 2373 + version = "0.9.2" 2374 + dependencies = [ 2375 + "bon", 2376 + "bytes", 2377 + "http", 2378 + "jacquard-api", 2379 + "jacquard-common", 2380 + "jacquard-lexicon", 2381 + "miette", 2382 + "mini-moka", 2383 + "n0-future", 2384 + "percent-encoding", 2385 + "reqwest", 2386 + "ring", 2387 + "serde", 2388 + "serde_html_form", 2389 + "serde_json", 2390 + "thiserror 2.0.17", 2391 + "tokio", 2392 + "trait-variant", 2393 + "url", 2394 + "urlencoding", 2395 + ] 2396 + 2397 + [[package]] 2398 + name = "jacquard-lexicon" 2399 + version = "0.9.2" 2400 + dependencies = [ 2401 + "cid", 2402 + "dashmap", 2403 + "heck 0.5.0", 2404 + "inventory", 2405 + "jacquard-common", 2406 + "miette", 2407 + "multihash", 2408 + "prettyplease", 2409 + "proc-macro2", 2410 + "quote", 2411 + "serde", 2412 + "serde_ipld_dagcbor", 2413 + "serde_json", 2414 + "serde_repr", 2415 + "serde_with", 2416 + "sha2", 2417 + "syn 2.0.111", 2418 + "thiserror 2.0.17", 2419 + "unicode-segmentation", 2420 + ] 2421 + 2422 + [[package]] 2423 + name = "jacquard-oauth" 2424 + version = "0.9.2" 2425 + dependencies = [ 2426 + "base64", 2427 + "bytes", 2428 + "chrono", 2429 + "dashmap", 2430 + "elliptic-curve", 2431 + "http", 2432 + "jacquard-common", 2433 + "jacquard-identity", 2434 + "jose-jwa", 2435 + "jose-jwk", 2436 + "miette", 2437 + "p256", 2438 + "rand 0.8.5", 2439 + "ring", 2440 + "serde", 2441 + "serde_html_form", 2442 + "serde_json", 2443 + "sha2", 2444 + "smol_str", 2445 + "thiserror 2.0.17", 2446 + "tokio", 2447 + "trait-variant", 2448 + "url", 2449 + ] 2450 + 2451 + [[package]] 2452 + name = "jacquard-repo" 2453 + version = "0.9.4" 2454 + dependencies = [ 2455 + "bytes", 2456 + "cid", 2457 + "ed25519-dalek", 2458 + "iroh-car", 2459 + "jacquard-common", 2460 + "jacquard-derive", 2461 + "k256", 2462 + "miette", 2463 + "multihash", 2464 + "n0-future", 2465 + "p256", 2466 + "serde", 2467 + "serde_bytes", 2468 + "serde_ipld_dagcbor", 2469 + "sha2", 2470 + "smol_str", 2471 + "thiserror 2.0.17", 2472 + "tokio", 2473 + "trait-variant", 2474 + ] 2475 + 2476 + [[package]] 2477 + name = "jose-b64" 2478 + version = "0.1.2" 2479 + source = "registry+https://github.com/rust-lang/crates.io-index" 2480 + checksum = "bec69375368709666b21c76965ce67549f2d2db7605f1f8707d17c9656801b56" 2481 + dependencies = [ 2482 + "base64ct", 2483 + "serde", 2484 + "subtle", 2485 + "zeroize", 2486 + ] 2487 + 2488 + [[package]] 2489 + name = "jose-jwa" 2490 + version = "0.1.2" 2491 + source = "registry+https://github.com/rust-lang/crates.io-index" 2492 + checksum = "9ab78e053fe886a351d67cf0d194c000f9d0dcb92906eb34d853d7e758a4b3a7" 2493 + dependencies = [ 2494 + "serde", 2495 + ] 2496 + 2497 + [[package]] 2498 + name = "jose-jwk" 2499 + version = "0.1.2" 2500 + source = "registry+https://github.com/rust-lang/crates.io-index" 2501 + checksum = "280fa263807fe0782ecb6f2baadc28dffc04e00558a58e33bfdb801d11fd58e7" 2502 + dependencies = [ 2503 + "jose-b64", 2504 + "jose-jwa", 2505 + "p256", 2506 + "p384", 2507 + "rsa", 2508 + "serde", 2509 + "zeroize", 2510 + ] 2511 + 2512 + [[package]] 2513 + name = "js-sys" 2514 + version = "0.3.83" 2515 + source = "registry+https://github.com/rust-lang/crates.io-index" 2516 + checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" 2517 + dependencies = [ 2518 + "once_cell", 2519 + "wasm-bindgen", 2520 + ] 2521 + 2522 + [[package]] 2523 + name = "k256" 2524 + version = "0.13.4" 2525 + source = "registry+https://github.com/rust-lang/crates.io-index" 2526 + checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" 2527 + dependencies = [ 2528 + "cfg-if", 2529 + "ecdsa", 2530 + "elliptic-curve", 2531 + "once_cell", 2532 + "sha2", 2533 + "signature", 2534 + ] 2535 + 2536 + [[package]] 2537 + name = "langtag" 2538 + version = "0.4.0" 2539 + source = "registry+https://github.com/rust-lang/crates.io-index" 2540 + checksum = "9ecb4c689a30e48ebeaa14237f34037e300dd072e6ad21a9ec72e810ff3c6600" 2541 + dependencies = [ 2542 + "serde", 2543 + "static-regular-grammar", 2544 + "thiserror 1.0.69", 2545 + ] 2546 + 2547 + [[package]] 2548 + name = "lazy_static" 2549 + version = "1.5.0" 2550 + source = "registry+https://github.com/rust-lang/crates.io-index" 2551 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 2552 + dependencies = [ 2553 + "spin 0.9.8", 2554 + ] 2555 + 2556 + [[package]] 2557 + name = "lean_string" 2558 + version = "0.5.1" 2559 + source = "registry+https://github.com/rust-lang/crates.io-index" 2560 + checksum = "962df00ba70ac8d5ca5c064e17e5c3d090c087fd8d21aa45096c716b169da514" 2561 + dependencies = [ 2562 + "castaway", 2563 + "itoa", 2564 + "ryu", 2565 + "serde", 2566 + ] 2567 + 2568 + [[package]] 2569 + name = "libc" 2570 + version = "0.2.178" 2571 + source = "registry+https://github.com/rust-lang/crates.io-index" 2572 + checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" 2573 + 2574 + [[package]] 2575 + name = "libloading" 2576 + version = "0.8.9" 2577 + source = "registry+https://github.com/rust-lang/crates.io-index" 2578 + checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" 2579 + dependencies = [ 2580 + "cfg-if", 2581 + "windows-link 0.2.1", 2582 + ] 2583 + 2584 + [[package]] 2585 + name = "libm" 2586 + version = "0.2.15" 2587 + source = "registry+https://github.com/rust-lang/crates.io-index" 2588 + checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 2589 + 2590 + [[package]] 2591 + name = "libproc" 2592 + version = "0.14.11" 2593 + source = "registry+https://github.com/rust-lang/crates.io-index" 2594 + checksum = "a54ad7278b8bc5301d5ffd2a94251c004feb971feba96c971ea4063645990757" 2595 + dependencies = [ 2596 + "bindgen", 2597 + "errno", 2598 + "libc", 2599 + ] 2600 + 2601 + [[package]] 2602 + name = "libredox" 2603 + version = "0.1.10" 2604 + source = "registry+https://github.com/rust-lang/crates.io-index" 2605 + checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" 2606 + dependencies = [ 2607 + "bitflags", 2608 + "libc", 2609 + "redox_syscall", 2610 + ] 2611 + 2612 + [[package]] 2613 + name = "libz-rs-sys" 2614 + version = "0.5.4" 2615 + source = "registry+https://github.com/rust-lang/crates.io-index" 2616 + checksum = "15413ef615ad868d4d65dce091cb233b229419c7c0c4bcaa746c0901c49ff39c" 2617 + dependencies = [ 2618 + "zlib-rs", 2619 + ] 2620 + 2621 + [[package]] 2622 + name = "linked-hash-map" 2623 + version = "0.5.6" 2624 + source = "registry+https://github.com/rust-lang/crates.io-index" 2625 + checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 2626 + dependencies = [ 2627 + "serde", 2628 + ] 2629 + 2630 + [[package]] 2631 + name = "linux-raw-sys" 2632 + version = "0.4.15" 2633 + source = "registry+https://github.com/rust-lang/crates.io-index" 2634 + checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 2635 + 2636 + [[package]] 2637 + name = "linux-raw-sys" 2638 + version = "0.11.0" 2639 + source = "registry+https://github.com/rust-lang/crates.io-index" 2640 + checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" 2641 + 2642 + [[package]] 2643 + name = "litemap" 2644 + version = "0.8.1" 2645 + source = "registry+https://github.com/rust-lang/crates.io-index" 2646 + checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" 2647 + 2648 + [[package]] 2649 + name = "lock_api" 2650 + version = "0.4.14" 2651 + source = "registry+https://github.com/rust-lang/crates.io-index" 2652 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 2653 + dependencies = [ 2654 + "scopeguard", 2655 + ] 2656 + 2657 + [[package]] 2658 + name = "log" 2659 + version = "0.4.29" 2660 + source = "registry+https://github.com/rust-lang/crates.io-index" 2661 + checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" 2662 + 2663 + [[package]] 2664 + name = "loom" 2665 + version = "0.7.2" 2666 + source = "registry+https://github.com/rust-lang/crates.io-index" 2667 + checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" 2668 + dependencies = [ 2669 + "cfg-if", 2670 + "generator", 2671 + "scoped-tls", 2672 + "tracing", 2673 + "tracing-subscriber", 2674 + ] 2675 + 2676 + [[package]] 2677 + name = "lru" 2678 + version = "0.12.5" 2679 + source = "registry+https://github.com/rust-lang/crates.io-index" 2680 + checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" 2681 + dependencies = [ 2682 + "hashbrown 0.15.5", 2683 + ] 2684 + 2685 + [[package]] 2686 + name = "lru-slab" 2687 + version = "0.1.2" 2688 + source = "registry+https://github.com/rust-lang/crates.io-index" 2689 + checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" 2690 + 2691 + [[package]] 2692 + name = "lscolors" 2693 + version = "0.20.0" 2694 + source = "registry+https://github.com/rust-lang/crates.io-index" 2695 + checksum = "61183da5de8ba09a58e330d55e5ea796539d8443bd00fdeb863eac39724aa4ab" 2696 + dependencies = [ 2697 + "aho-corasick", 2698 + "nu-ansi-term", 2699 + ] 2700 + 2701 + [[package]] 2702 + name = "mac" 2703 + version = "0.1.1" 2704 + source = "registry+https://github.com/rust-lang/crates.io-index" 2705 + checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 2706 + 2707 + [[package]] 2708 + name = "mach2" 2709 + version = "0.4.3" 2710 + source = "registry+https://github.com/rust-lang/crates.io-index" 2711 + checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44" 2712 + dependencies = [ 2713 + "libc", 2714 + ] 2715 + 2716 + [[package]] 2717 + name = "markup5ever" 2718 + version = "0.12.1" 2719 + source = "registry+https://github.com/rust-lang/crates.io-index" 2720 + checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" 2721 + dependencies = [ 2722 + "log", 2723 + "phf 0.11.3", 2724 + "phf_codegen", 2725 + "string_cache", 2726 + "string_cache_codegen", 2727 + "tendril", 2728 + ] 2729 + 2730 + [[package]] 2731 + name = "markup5ever_rcdom" 2732 + version = "0.3.0" 2733 + source = "registry+https://github.com/rust-lang/crates.io-index" 2734 + checksum = "edaa21ab3701bfee5099ade5f7e1f84553fd19228cf332f13cd6e964bf59be18" 2735 + dependencies = [ 2736 + "html5ever", 2737 + "markup5ever", 2738 + "tendril", 2739 + "xml5ever", 2740 + ] 2741 + 2742 + [[package]] 2743 + name = "match-lookup" 2744 + version = "0.1.1" 2745 + source = "registry+https://github.com/rust-lang/crates.io-index" 2746 + checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" 2747 + dependencies = [ 2748 + "proc-macro2", 2749 + "quote", 2750 + "syn 1.0.109", 2751 + ] 2752 + 2753 + [[package]] 2754 + name = "matchers" 2755 + version = "0.2.0" 2756 + source = "registry+https://github.com/rust-lang/crates.io-index" 2757 + checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" 2758 + dependencies = [ 2759 + "regex-automata", 2760 + ] 2761 + 2762 + [[package]] 2763 + name = "md-5" 2764 + version = "0.10.6" 2765 + source = "registry+https://github.com/rust-lang/crates.io-index" 2766 + checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" 2767 + dependencies = [ 2768 + "cfg-if", 2769 + "digest", 2770 + ] 2771 + 2772 + [[package]] 2773 + name = "memchr" 2774 + version = "2.7.6" 2775 + source = "registry+https://github.com/rust-lang/crates.io-index" 2776 + checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 2777 + 2778 + [[package]] 2779 + name = "memoffset" 2780 + version = "0.9.1" 2781 + source = "registry+https://github.com/rust-lang/crates.io-index" 2782 + checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 2783 + dependencies = [ 2784 + "autocfg", 2785 + ] 2786 + 2787 + [[package]] 2788 + name = "miette" 2789 + version = "7.6.0" 2790 + source = "registry+https://github.com/rust-lang/crates.io-index" 2791 + checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7" 2792 + dependencies = [ 2793 + "backtrace", 2794 + "backtrace-ext", 2795 + "cfg-if", 2796 + "miette-derive", 2797 + "owo-colors", 2798 + "supports-color", 2799 + "supports-hyperlinks", 2800 + "supports-unicode", 2801 + "terminal_size", 2802 + "textwrap", 2803 + "unicode-width 0.1.14", 2804 + ] 2805 + 2806 + [[package]] 2807 + name = "miette-derive" 2808 + version = "7.6.0" 2809 + source = "registry+https://github.com/rust-lang/crates.io-index" 2810 + checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" 2811 + dependencies = [ 2812 + "proc-macro2", 2813 + "quote", 2814 + "syn 2.0.111", 2815 + ] 2816 + 2817 + [[package]] 2818 + name = "mime" 2819 + version = "0.3.17" 2820 + source = "registry+https://github.com/rust-lang/crates.io-index" 2821 + checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2822 + 2823 + [[package]] 2824 + name = "mime_guess" 2825 + version = "2.0.5" 2826 + source = "registry+https://github.com/rust-lang/crates.io-index" 2827 + checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 2828 + dependencies = [ 2829 + "mime", 2830 + "unicase", 2831 + ] 2832 + 2833 + [[package]] 2834 + name = "mini-moka" 2835 + version = "0.10.99" 2836 + dependencies = [ 2837 + "crossbeam-channel", 2838 + "crossbeam-utils", 2839 + "dashmap", 2840 + "smallvec", 2841 + "tagptr", 2842 + "triomphe", 2843 + "web-time", 2844 + ] 2845 + 2846 + [[package]] 2847 + name = "minimal-lexical" 2848 + version = "0.2.1" 2849 + source = "registry+https://github.com/rust-lang/crates.io-index" 2850 + checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2851 + 2852 + [[package]] 2853 + name = "miniz_oxide" 2854 + version = "0.8.9" 2855 + source = "registry+https://github.com/rust-lang/crates.io-index" 2856 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 2857 + dependencies = [ 2858 + "adler2", 2859 + "simd-adler32", 2860 + ] 2861 + 2862 + [[package]] 2863 + name = "mio" 2864 + version = "1.1.1" 2865 + source = "registry+https://github.com/rust-lang/crates.io-index" 2866 + checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" 2867 + dependencies = [ 2868 + "libc", 2869 + "wasi", 2870 + "windows-sys 0.61.2", 2871 + ] 2872 + 2873 + [[package]] 2874 + name = "multibase" 2875 + version = "0.9.2" 2876 + source = "registry+https://github.com/rust-lang/crates.io-index" 2877 + checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" 2878 + dependencies = [ 2879 + "base-x", 2880 + "base256emoji", 2881 + "data-encoding", 2882 + "data-encoding-macro", 2883 + ] 2884 + 2885 + [[package]] 2886 + name = "multihash" 2887 + version = "0.19.3" 2888 + source = "registry+https://github.com/rust-lang/crates.io-index" 2889 + checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" 2890 + dependencies = [ 2891 + "core2", 2892 + "serde", 2893 + "unsigned-varint 0.8.0", 2894 + ] 2895 + 2896 + [[package]] 2897 + name = "n0-future" 2898 + version = "0.1.3" 2899 + source = "registry+https://github.com/rust-lang/crates.io-index" 2900 + checksum = "7bb0e5d99e681ab3c938842b96fcb41bf8a7bb4bfdb11ccbd653a7e83e06c794" 2901 + dependencies = [ 2902 + "cfg_aliases", 2903 + "derive_more", 2904 + "futures-buffered", 2905 + "futures-lite", 2906 + "futures-util", 2907 + "js-sys", 2908 + "pin-project", 2909 + "send_wrapper", 2910 + "tokio", 2911 + "tokio-util", 2912 + "wasm-bindgen", 2913 + "wasm-bindgen-futures", 2914 + "web-time", 2915 + ] 2916 + 2917 + [[package]] 2918 + name = "new_debug_unreachable" 2919 + version = "1.0.6" 2920 + source = "registry+https://github.com/rust-lang/crates.io-index" 2921 + checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 2922 + 2923 + [[package]] 2924 + name = "nix" 2925 + version = "0.30.1" 2926 + source = "registry+https://github.com/rust-lang/crates.io-index" 2927 + checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 2928 + dependencies = [ 2929 + "bitflags", 2930 + "cfg-if", 2931 + "cfg_aliases", 2932 + "libc", 2933 + ] 2934 + 2935 + [[package]] 2936 + name = "nom" 2937 + version = "7.1.3" 2938 + source = "registry+https://github.com/rust-lang/crates.io-index" 2939 + checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2940 + dependencies = [ 2941 + "memchr", 2942 + "minimal-lexical", 2943 + ] 2944 + 2945 + [[package]] 2946 + name = "ntapi" 2947 + version = "0.4.1" 2948 + source = "registry+https://github.com/rust-lang/crates.io-index" 2949 + checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" 2950 + dependencies = [ 2951 + "winapi", 2952 + ] 2953 + 2954 + [[package]] 2955 + name = "nu-ansi-term" 2956 + version = "0.50.3" 2957 + source = "registry+https://github.com/rust-lang/crates.io-index" 2958 + checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" 2959 + dependencies = [ 2960 + "windows-sys 0.61.2", 2961 + ] 2962 + 2963 + [[package]] 2964 + name = "nu-cmd-base" 2965 + version = "0.109.1" 2966 + source = "registry+https://github.com/rust-lang/crates.io-index" 2967 + checksum = "2460ee389a43b935aa18ef5ed9fa8275bdf617e8c05eba7c2b82f92effd2132b" 2968 + dependencies = [ 2969 + "indexmap 2.12.1", 2970 + "miette", 2971 + "nu-engine", 2972 + "nu-parser", 2973 + "nu-path", 2974 + "nu-protocol", 2975 + ] 2976 + 2977 + [[package]] 2978 + name = "nu-cmd-extra" 2979 + version = "0.109.1" 2980 + source = "registry+https://github.com/rust-lang/crates.io-index" 2981 + checksum = "96f1ac416cd5182ca427a1007c9d0193feaa746aeb54b5320251faad41481cfe" 2982 + dependencies = [ 2983 + "fancy-regex", 2984 + "heck 0.5.0", 2985 + "itertools 0.14.0", 2986 + "mime", 2987 + "nu-ansi-term", 2988 + "nu-cmd-base", 2989 + "nu-engine", 2990 + "nu-json", 2991 + "nu-parser", 2992 + "nu-pretty-hex", 2993 + "nu-protocol", 2994 + "nu-utils", 2995 + "num-traits", 2996 + "rust-embed", 2997 + "serde", 2998 + "serde_urlencoded", 2999 + "v_htmlescape", 3000 + ] 3001 + 3002 + [[package]] 3003 + name = "nu-cmd-lang" 3004 + version = "0.109.1" 3005 + source = "registry+https://github.com/rust-lang/crates.io-index" 3006 + checksum = "5b266674d87b816264f6aff8cca351e6ebb156f34faab45d7d728c2aba005495" 3007 + dependencies = [ 3008 + "itertools 0.14.0", 3009 + "nu-cmd-base", 3010 + "nu-engine", 3011 + "nu-experimental", 3012 + "nu-parser", 3013 + "nu-protocol", 3014 + "nu-utils", 3015 + "shadow-rs", 3016 + ] 3017 + 3018 + [[package]] 3019 + name = "nu-color-config" 3020 + version = "0.109.1" 3021 + source = "registry+https://github.com/rust-lang/crates.io-index" 3022 + checksum = "440a59265caf5468af6ff186e656bc6e6d349c08662ee959b116375597864206" 3023 + dependencies = [ 3024 + "nu-ansi-term", 3025 + "nu-engine", 3026 + "nu-json", 3027 + "nu-protocol", 3028 + "serde", 3029 + ] 3030 + 3031 + [[package]] 3032 + name = "nu-command" 3033 + version = "0.109.1" 3034 + source = "registry+https://github.com/rust-lang/crates.io-index" 3035 + checksum = "5380a9cf6ef0f482280b71d6e78fa8d4bc1b2b43aa8f0b1fa786f96087c2d500" 3036 + dependencies = [ 3037 + "alphanumeric-sort", 3038 + "base64", 3039 + "bracoxide", 3040 + "brotli", 3041 + "byteorder", 3042 + "bytesize", 3043 + "calamine", 3044 + "chardetng", 3045 + "chrono", 3046 + "chrono-humanize", 3047 + "chrono-tz", 3048 + "csv", 3049 + "data-encoding", 3050 + "devicons", 3051 + "dialoguer", 3052 + "digest", 3053 + "dtparse", 3054 + "encoding_rs", 3055 + "fancy-regex", 3056 + "filesize", 3057 + "filetime", 3058 + "fuzzy-matcher", 3059 + "http", 3060 + "human-date-parser", 3061 + "indexmap 2.12.1", 3062 + "indicatif", 3063 + "itertools 0.14.0", 3064 + "log", 3065 + "lscolors", 3066 + "md-5", 3067 + "mime", 3068 + "mime_guess", 3069 + "nix", 3070 + "nu-ansi-term", 3071 + "nu-cmd-base", 3072 + "nu-color-config", 3073 + "nu-engine", 3074 + "nu-experimental", 3075 + "nu-glob", 3076 + "nu-json", 3077 + "nu-parser", 3078 + "nu-path", 3079 + "nu-pretty-hex", 3080 + "nu-protocol", 3081 + "nu-system", 3082 + "nu-table", 3083 + "nu-term-grid", 3084 + "nu-utils", 3085 + "num-format", 3086 + "num-traits", 3087 + "nuon", 3088 + "oem_cp", 3089 + "pathdiff", 3090 + "percent-encoding", 3091 + "print-positions", 3092 + "procfs 0.17.0", 3093 + "quick-xml 0.38.4", 3094 + "rayon", 3095 + "rmp", 3096 + "roxmltree", 3097 + "scopeguard", 3098 + "serde", 3099 + "serde_json", 3100 + "serde_urlencoded", 3101 + "serde_yaml", 3102 + "sha2", 3103 + "strum", 3104 + "sysinfo", 3105 + "tabled", 3106 + "titlecase", 3107 + "toml", 3108 + "uds_windows", 3109 + "umask", 3110 + "unicode-segmentation", 3111 + "unicode-width 0.2.2", 3112 + "url", 3113 + "uucore", 3114 + "v_htmlescape", 3115 + "wax", 3116 + "web-time", 3117 + "windows 0.62.2", 3118 + "winreg", 3119 + ] 3120 + 3121 + [[package]] 3122 + name = "nu-derive-value" 3123 + version = "0.109.1" 3124 + source = "registry+https://github.com/rust-lang/crates.io-index" 3125 + checksum = "1465d2d3ada6004cb6689f269a08c70ba81056231e2b5392d1e0ccf5825f81cb" 3126 + dependencies = [ 3127 + "heck 0.5.0", 3128 + "proc-macro-error2", 3129 + "proc-macro2", 3130 + "quote", 3131 + "syn 2.0.111", 3132 + ] 3133 + 3134 + [[package]] 3135 + name = "nu-engine" 3136 + version = "0.109.1" 3137 + source = "registry+https://github.com/rust-lang/crates.io-index" 3138 + checksum = "b3b777faf7c5180fe5d7f67d83c44fd14138d91f2938a36494ed6ac66b7160f3" 3139 + dependencies = [ 3140 + "fancy-regex", 3141 + "log", 3142 + "nu-experimental", 3143 + "nu-glob", 3144 + "nu-path", 3145 + "nu-protocol", 3146 + "nu-utils", 3147 + ] 3148 + 3149 + [[package]] 3150 + name = "nu-experimental" 3151 + version = "0.109.1" 3152 + source = "registry+https://github.com/rust-lang/crates.io-index" 3153 + checksum = "73dd212a1afdad646a38c00579a0988264880aeb97fee820b349a28cdcc04df2" 3154 + dependencies = [ 3155 + "itertools 0.14.0", 3156 + "thiserror 2.0.17", 3157 + ] 3158 + 3159 + [[package]] 3160 + name = "nu-glob" 3161 + version = "0.109.1" 3162 + source = "registry+https://github.com/rust-lang/crates.io-index" 3163 + checksum = "15aa2c17078926f14e393b4b708e69f228cb6fd4c81136839bde82772bdde1b5" 3164 + 3165 + [[package]] 3166 + name = "nu-json" 3167 + version = "0.109.1" 3168 + source = "registry+https://github.com/rust-lang/crates.io-index" 3169 + checksum = "7ca63927a3c1c4fb889e80dc5cfbe754daed822a7b503cc74e600627c2aa8435" 3170 + dependencies = [ 3171 + "linked-hash-map", 3172 + "nu-utils", 3173 + "num-traits", 3174 + "serde", 3175 + "serde_json", 3176 + ] 3177 + 3178 + [[package]] 3179 + name = "nu-parser" 3180 + version = "0.109.1" 3181 + source = "registry+https://github.com/rust-lang/crates.io-index" 3182 + checksum = "237172636312c3566272511a00c1dc355202406c376e1546a45a33c65e81babe" 3183 + dependencies = [ 3184 + "bytesize", 3185 + "chrono", 3186 + "itertools 0.14.0", 3187 + "log", 3188 + "nu-engine", 3189 + "nu-path", 3190 + "nu-protocol", 3191 + "nu-utils", 3192 + "serde_json", 3193 + ] 3194 + 3195 + [[package]] 3196 + name = "nu-path" 3197 + version = "0.109.1" 3198 + source = "registry+https://github.com/rust-lang/crates.io-index" 3199 + checksum = "dde9d8ba26f62c07176c0237a36f38ce964ab3a0dcfb6aab1feea7515d1c6594" 3200 + dependencies = [ 3201 + "dirs", 3202 + "omnipath", 3203 + "pwd", 3204 + "ref-cast", 3205 + ] 3206 + 3207 + [[package]] 3208 + name = "nu-pretty-hex" 3209 + version = "0.109.1" 3210 + source = "registry+https://github.com/rust-lang/crates.io-index" 3211 + checksum = "02561546604ac4c443bad65d9485ab3965154cad0873340e2e9ebe72d4a18aef" 3212 + dependencies = [ 3213 + "nu-ansi-term", 3214 + ] 3215 + 3216 + [[package]] 3217 + name = "nu-protocol" 3218 + version = "0.109.1" 3219 + source = "registry+https://github.com/rust-lang/crates.io-index" 3220 + checksum = "038943300ca9de0924fef1c795a7dd16ffc67105629477cf163e8ee6bad95ea6" 3221 + dependencies = [ 3222 + "bytes", 3223 + "chrono", 3224 + "chrono-humanize", 3225 + "dirs", 3226 + "dirs-sys", 3227 + "fancy-regex", 3228 + "heck 0.5.0", 3229 + "indexmap 2.12.1", 3230 + "log", 3231 + "lru", 3232 + "memchr", 3233 + "miette", 3234 + "nix", 3235 + "nu-derive-value", 3236 + "nu-experimental", 3237 + "nu-glob", 3238 + "nu-path", 3239 + "nu-system", 3240 + "nu-utils", 3241 + "num-format", 3242 + "serde", 3243 + "serde_json", 3244 + "strum", 3245 + "strum_macros", 3246 + "thiserror 2.0.17", 3247 + "typetag", 3248 + "web-time", 3249 + "windows 0.62.2", 3250 + "windows-sys 0.61.2", 3251 + ] 3252 + 3253 + [[package]] 3254 + name = "nu-system" 3255 + version = "0.109.1" 3256 + source = "registry+https://github.com/rust-lang/crates.io-index" 3257 + checksum = "46be734cc9b19e09a9665769e14360e13e6978490056ba5c8bfad7dd0537ea83" 3258 + dependencies = [ 3259 + "chrono", 3260 + "itertools 0.14.0", 3261 + "libc", 3262 + "libproc", 3263 + "log", 3264 + "mach2", 3265 + "nix", 3266 + "ntapi", 3267 + "procfs 0.17.0", 3268 + "sysinfo", 3269 + "web-time", 3270 + "windows 0.62.2", 3271 + ] 3272 + 3273 + [[package]] 3274 + name = "nu-table" 3275 + version = "0.109.1" 3276 + source = "registry+https://github.com/rust-lang/crates.io-index" 3277 + checksum = "aa96502adbb69c838d8469715327ba2dacf2c4f5254a4cdee7536e2c6849de1d" 3278 + dependencies = [ 3279 + "fancy-regex", 3280 + "nu-ansi-term", 3281 + "nu-color-config", 3282 + "nu-engine", 3283 + "nu-protocol", 3284 + "nu-utils", 3285 + "tabled", 3286 + ] 3287 + 3288 + [[package]] 3289 + name = "nu-term-grid" 3290 + version = "0.109.1" 3291 + source = "registry+https://github.com/rust-lang/crates.io-index" 3292 + checksum = "2b6545b361413e88bea37c4b9c7aa97a7fd7a11d84a5d330a72242367fd1d2df" 3293 + dependencies = [ 3294 + "nu-utils", 3295 + "unicode-width 0.2.2", 3296 + ] 3297 + 3298 + [[package]] 3299 + name = "nu-utils" 3300 + version = "0.109.1" 3301 + source = "registry+https://github.com/rust-lang/crates.io-index" 3302 + checksum = "3f8eb43c29cc5bce85f87defdadc2cca964fa434d808af37036a7cb78f3c68e9" 3303 + dependencies = [ 3304 + "byteyarn", 3305 + "crossterm_winapi", 3306 + "fancy-regex", 3307 + "lean_string", 3308 + "log", 3309 + "lscolors", 3310 + "memchr", 3311 + "nix", 3312 + "num-format", 3313 + "serde", 3314 + "serde_json", 3315 + "strip-ansi-escapes", 3316 + "sys-locale", 3317 + "unicase", 3318 + ] 3319 + 3320 + [[package]] 3321 + name = "num-bigint-dig" 3322 + version = "0.8.6" 3323 + source = "registry+https://github.com/rust-lang/crates.io-index" 3324 + checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" 3325 + dependencies = [ 3326 + "lazy_static", 3327 + "libm", 3328 + "num-integer", 3329 + "num-iter", 3330 + "num-traits", 3331 + "rand 0.8.5", 3332 + "smallvec", 3333 + "zeroize", 3334 + ] 3335 + 3336 + [[package]] 3337 + name = "num-conv" 3338 + version = "0.1.0" 3339 + source = "registry+https://github.com/rust-lang/crates.io-index" 3340 + checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 3341 + 3342 + [[package]] 3343 + name = "num-format" 3344 + version = "0.4.4" 3345 + source = "registry+https://github.com/rust-lang/crates.io-index" 3346 + checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" 3347 + dependencies = [ 3348 + "arrayvec", 3349 + "itoa", 3350 + ] 3351 + 3352 + [[package]] 3353 + name = "num-integer" 3354 + version = "0.1.46" 3355 + source = "registry+https://github.com/rust-lang/crates.io-index" 3356 + checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 3357 + dependencies = [ 3358 + "num-traits", 3359 + ] 3360 + 3361 + [[package]] 3362 + name = "num-iter" 3363 + version = "0.1.45" 3364 + source = "registry+https://github.com/rust-lang/crates.io-index" 3365 + checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" 3366 + dependencies = [ 3367 + "autocfg", 3368 + "num-integer", 3369 + "num-traits", 3370 + ] 3371 + 3372 + [[package]] 3373 + name = "num-traits" 3374 + version = "0.2.19" 3375 + source = "registry+https://github.com/rust-lang/crates.io-index" 3376 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 3377 + dependencies = [ 3378 + "autocfg", 3379 + "libm", 3380 + ] 3381 + 3382 + [[package]] 3383 + name = "num_threads" 3384 + version = "0.1.7" 3385 + source = "registry+https://github.com/rust-lang/crates.io-index" 3386 + checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 3387 + dependencies = [ 3388 + "libc", 3389 + ] 3390 + 3391 + [[package]] 3392 + name = "number_prefix" 3393 + version = "0.4.0" 3394 + source = "registry+https://github.com/rust-lang/crates.io-index" 3395 + checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" 3396 + 3397 + [[package]] 3398 + name = "nuon" 3399 + version = "0.109.1" 3400 + source = "registry+https://github.com/rust-lang/crates.io-index" 3401 + checksum = "f8c4f2e4460a6cf00e50cddf0840f954874d645be3af5196c5858c70c069d8c0" 3402 + dependencies = [ 3403 + "nu-engine", 3404 + "nu-parser", 3405 + "nu-protocol", 3406 + "nu-utils", 3407 + ] 3408 + 3409 + [[package]] 3410 + name = "objc2-core-foundation" 3411 + version = "0.3.2" 3412 + source = "registry+https://github.com/rust-lang/crates.io-index" 3413 + checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" 3414 + dependencies = [ 3415 + "bitflags", 3416 + ] 3417 + 3418 + [[package]] 3419 + name = "objc2-io-kit" 3420 + version = "0.3.2" 3421 + source = "registry+https://github.com/rust-lang/crates.io-index" 3422 + checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" 3423 + dependencies = [ 3424 + "libc", 3425 + "objc2-core-foundation", 3426 + ] 3427 + 3428 + [[package]] 3429 + name = "object" 3430 + version = "0.37.3" 3431 + source = "registry+https://github.com/rust-lang/crates.io-index" 3432 + checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" 3433 + dependencies = [ 3434 + "memchr", 3435 + ] 3436 + 3437 + [[package]] 3438 + name = "oem_cp" 3439 + version = "2.1.1" 3440 + source = "registry+https://github.com/rust-lang/crates.io-index" 3441 + checksum = "a4b91a3be3b523e58bd7a9d839b0bf65720331db50ddfba5ace0680f8c6f58a1" 3442 + dependencies = [ 3443 + "phf 0.11.3", 3444 + ] 3445 + 3446 + [[package]] 3447 + name = "omnipath" 3448 + version = "0.1.6" 3449 + source = "registry+https://github.com/rust-lang/crates.io-index" 3450 + checksum = "80adb31078122c880307e9cdfd4e3361e6545c319f9b9dcafcb03acd3b51a575" 3451 + 3452 + [[package]] 3453 + name = "once_cell" 3454 + version = "1.21.3" 3455 + source = "registry+https://github.com/rust-lang/crates.io-index" 3456 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 3457 + 3458 + [[package]] 3459 + name = "once_cell_polyfill" 3460 + version = "1.70.2" 3461 + source = "registry+https://github.com/rust-lang/crates.io-index" 3462 + checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" 3463 + 3464 + [[package]] 3465 + name = "option-ext" 3466 + version = "0.2.0" 3467 + source = "registry+https://github.com/rust-lang/crates.io-index" 3468 + checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 3469 + 3470 + [[package]] 3471 + name = "os_display" 3472 + version = "0.1.4" 3473 + source = "registry+https://github.com/rust-lang/crates.io-index" 3474 + checksum = "ad5fd71b79026fb918650dde6d125000a233764f1c2f1659a1c71118e33ea08f" 3475 + dependencies = [ 3476 + "unicode-width 0.2.2", 3477 + ] 3478 + 3479 + [[package]] 3480 + name = "ouroboros" 3481 + version = "0.18.5" 3482 + source = "registry+https://github.com/rust-lang/crates.io-index" 3483 + checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59" 3484 + dependencies = [ 3485 + "aliasable", 3486 + "ouroboros_macro", 3487 + "static_assertions", 3488 + ] 3489 + 3490 + [[package]] 3491 + name = "ouroboros_macro" 3492 + version = "0.18.5" 3493 + source = "registry+https://github.com/rust-lang/crates.io-index" 3494 + checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0" 3495 + dependencies = [ 3496 + "heck 0.4.1", 3497 + "proc-macro2", 3498 + "proc-macro2-diagnostics", 3499 + "quote", 3500 + "syn 2.0.111", 3501 + ] 3502 + 3503 + [[package]] 3504 + name = "owo-colors" 3505 + version = "4.2.3" 3506 + source = "registry+https://github.com/rust-lang/crates.io-index" 3507 + checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52" 3508 + 3509 + [[package]] 3510 + name = "p256" 3511 + version = "0.13.2" 3512 + source = "registry+https://github.com/rust-lang/crates.io-index" 3513 + checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" 3514 + dependencies = [ 3515 + "ecdsa", 3516 + "elliptic-curve", 3517 + "primeorder", 3518 + "sha2", 3519 + ] 3520 + 3521 + [[package]] 3522 + name = "p384" 3523 + version = "0.13.1" 3524 + source = "registry+https://github.com/rust-lang/crates.io-index" 3525 + checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" 3526 + dependencies = [ 3527 + "elliptic-curve", 3528 + "primeorder", 3529 + ] 3530 + 3531 + [[package]] 3532 + name = "papergrid" 3533 + version = "0.17.0" 3534 + source = "registry+https://github.com/rust-lang/crates.io-index" 3535 + checksum = "6978128c8b51d8f4080631ceb2302ab51e32cc6e8615f735ee2f83fd269ae3f1" 3536 + dependencies = [ 3537 + "ansi-str", 3538 + "ansitok", 3539 + "bytecount", 3540 + "fnv", 3541 + "unicode-width 0.2.2", 3542 + ] 3543 + 3544 + [[package]] 3545 + name = "parking" 3546 + version = "2.2.1" 3547 + source = "registry+https://github.com/rust-lang/crates.io-index" 3548 + checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 3549 + 3550 + [[package]] 3551 + name = "parking_lot" 3552 + version = "0.12.5" 3553 + source = "registry+https://github.com/rust-lang/crates.io-index" 3554 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 3555 + dependencies = [ 3556 + "lock_api", 3557 + "parking_lot_core", 3558 + ] 3559 + 3560 + [[package]] 3561 + name = "parking_lot_core" 3562 + version = "0.9.12" 3563 + source = "registry+https://github.com/rust-lang/crates.io-index" 3564 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 3565 + dependencies = [ 3566 + "cfg-if", 3567 + "libc", 3568 + "redox_syscall", 3569 + "smallvec", 3570 + "windows-link 0.2.1", 3571 + ] 3572 + 3573 + [[package]] 3574 + name = "paste" 3575 + version = "1.0.15" 3576 + source = "registry+https://github.com/rust-lang/crates.io-index" 3577 + checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 3578 + 3579 + [[package]] 3580 + name = "pathdiff" 3581 + version = "0.2.3" 3582 + source = "registry+https://github.com/rust-lang/crates.io-index" 3583 + checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" 3584 + 3585 + [[package]] 3586 + name = "pem-rfc7468" 3587 + version = "0.7.0" 3588 + source = "registry+https://github.com/rust-lang/crates.io-index" 3589 + checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" 3590 + dependencies = [ 3591 + "base64ct", 3592 + ] 3593 + 3594 + [[package]] 3595 + name = "percent-encoding" 3596 + version = "2.3.2" 3597 + source = "registry+https://github.com/rust-lang/crates.io-index" 3598 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 3599 + 3600 + [[package]] 3601 + name = "pest" 3602 + version = "2.8.4" 3603 + source = "registry+https://github.com/rust-lang/crates.io-index" 3604 + checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22" 3605 + dependencies = [ 3606 + "memchr", 3607 + "ucd-trie", 3608 + ] 3609 + 3610 + [[package]] 3611 + name = "pest_consume" 3612 + version = "1.1.3" 3613 + source = "registry+https://github.com/rust-lang/crates.io-index" 3614 + checksum = "79447402d15d18e7142e14c72f2e63fa3d155be1bc5b70b3ccbb610ac55f536b" 3615 + dependencies = [ 3616 + "pest", 3617 + "pest_consume_macros", 3618 + "pest_derive", 3619 + ] 3620 + 3621 + [[package]] 3622 + name = "pest_consume_macros" 3623 + version = "1.1.0" 3624 + source = "registry+https://github.com/rust-lang/crates.io-index" 3625 + checksum = "9d8630a7a899cb344ec1c16ba0a6b24240029af34bdc0a21f84e411d7f793f29" 3626 + dependencies = [ 3627 + "proc-macro2", 3628 + "quote", 3629 + "syn 1.0.109", 3630 + ] 3631 + 3632 + [[package]] 3633 + name = "pest_derive" 3634 + version = "2.8.4" 3635 + source = "registry+https://github.com/rust-lang/crates.io-index" 3636 + checksum = "51f72981ade67b1ca6adc26ec221be9f463f2b5839c7508998daa17c23d94d7f" 3637 + dependencies = [ 3638 + "pest", 3639 + "pest_generator", 3640 + ] 3641 + 3642 + [[package]] 3643 + name = "pest_generator" 3644 + version = "2.8.4" 3645 + source = "registry+https://github.com/rust-lang/crates.io-index" 3646 + checksum = "dee9efd8cdb50d719a80088b76f81aec7c41ed6d522ee750178f83883d271625" 3647 + dependencies = [ 3648 + "pest", 3649 + "pest_meta", 3650 + "proc-macro2", 3651 + "quote", 3652 + "syn 2.0.111", 3653 + ] 3654 + 3655 + [[package]] 3656 + name = "pest_meta" 3657 + version = "2.8.4" 3658 + source = "registry+https://github.com/rust-lang/crates.io-index" 3659 + checksum = "bf1d70880e76bdc13ba52eafa6239ce793d85c8e43896507e43dd8984ff05b82" 3660 + dependencies = [ 3661 + "pest", 3662 + "sha2", 3663 + ] 3664 + 3665 + [[package]] 3666 + name = "phf" 3667 + version = "0.11.3" 3668 + source = "registry+https://github.com/rust-lang/crates.io-index" 3669 + checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 3670 + dependencies = [ 3671 + "phf_shared 0.11.3", 3672 + ] 3673 + 3674 + [[package]] 3675 + name = "phf" 3676 + version = "0.12.1" 3677 + source = "registry+https://github.com/rust-lang/crates.io-index" 3678 + checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7" 3679 + dependencies = [ 3680 + "phf_shared 0.12.1", 3681 + ] 3682 + 3683 + [[package]] 3684 + name = "phf" 3685 + version = "0.13.1" 3686 + source = "registry+https://github.com/rust-lang/crates.io-index" 3687 + checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" 3688 + dependencies = [ 3689 + "phf_shared 0.13.1", 3690 + "serde", 3691 + ] 3692 + 3693 + [[package]] 3694 + name = "phf_codegen" 3695 + version = "0.11.3" 3696 + source = "registry+https://github.com/rust-lang/crates.io-index" 3697 + checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" 3698 + dependencies = [ 3699 + "phf_generator", 3700 + "phf_shared 0.11.3", 3701 + ] 3702 + 3703 + [[package]] 3704 + name = "phf_generator" 3705 + version = "0.11.3" 3706 + source = "registry+https://github.com/rust-lang/crates.io-index" 3707 + checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 3708 + dependencies = [ 3709 + "phf_shared 0.11.3", 3710 + "rand 0.8.5", 3711 + ] 3712 + 3713 + [[package]] 3714 + name = "phf_shared" 3715 + version = "0.11.3" 3716 + source = "registry+https://github.com/rust-lang/crates.io-index" 3717 + checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 3718 + dependencies = [ 3719 + "siphasher", 3720 + ] 3721 + 3722 + [[package]] 3723 + name = "phf_shared" 3724 + version = "0.12.1" 3725 + source = "registry+https://github.com/rust-lang/crates.io-index" 3726 + checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981" 3727 + dependencies = [ 3728 + "siphasher", 3729 + ] 3730 + 3731 + [[package]] 3732 + name = "phf_shared" 3733 + version = "0.13.1" 3734 + source = "registry+https://github.com/rust-lang/crates.io-index" 3735 + checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" 3736 + dependencies = [ 3737 + "siphasher", 3738 + ] 3739 + 3740 + [[package]] 3741 + name = "pin-project" 3742 + version = "1.1.10" 3743 + source = "registry+https://github.com/rust-lang/crates.io-index" 3744 + checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 3745 + dependencies = [ 3746 + "pin-project-internal", 3747 + ] 3748 + 3749 + [[package]] 3750 + name = "pin-project-internal" 3751 + version = "1.1.10" 3752 + source = "registry+https://github.com/rust-lang/crates.io-index" 3753 + checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 3754 + dependencies = [ 3755 + "proc-macro2", 3756 + "quote", 3757 + "syn 2.0.111", 3758 + ] 3759 + 3760 + [[package]] 3761 + name = "pin-project-lite" 3762 + version = "0.2.16" 3763 + source = "registry+https://github.com/rust-lang/crates.io-index" 3764 + checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 3765 + 3766 + [[package]] 3767 + name = "pin-utils" 3768 + version = "0.1.0" 3769 + source = "registry+https://github.com/rust-lang/crates.io-index" 3770 + checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 3771 + 3772 + [[package]] 3773 + name = "pkcs1" 3774 + version = "0.7.5" 3775 + source = "registry+https://github.com/rust-lang/crates.io-index" 3776 + checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" 3777 + dependencies = [ 3778 + "der", 3779 + "pkcs8", 3780 + "spki", 3781 + ] 3782 + 3783 + [[package]] 3784 + name = "pkcs8" 3785 + version = "0.10.2" 3786 + source = "registry+https://github.com/rust-lang/crates.io-index" 3787 + checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 3788 + dependencies = [ 3789 + "der", 3790 + "spki", 3791 + ] 3792 + 3793 + [[package]] 3794 + name = "pori" 3795 + version = "0.0.0" 3796 + source = "registry+https://github.com/rust-lang/crates.io-index" 3797 + checksum = "a4a63d338dec139f56dacc692ca63ad35a6be6a797442479b55acd611d79e906" 3798 + dependencies = [ 3799 + "nom", 3800 + ] 3801 + 3802 + [[package]] 3803 + name = "portable-atomic" 3804 + version = "1.11.1" 3805 + source = "registry+https://github.com/rust-lang/crates.io-index" 3806 + checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 3807 + 3808 + [[package]] 3809 + name = "postcard" 3810 + version = "1.1.3" 3811 + source = "registry+https://github.com/rust-lang/crates.io-index" 3812 + checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" 3813 + dependencies = [ 3814 + "cobs", 3815 + "embedded-io 0.4.0", 3816 + "embedded-io 0.6.1", 3817 + "heapless", 3818 + "serde", 3819 + ] 3820 + 3821 + [[package]] 3822 + name = "potential_utf" 3823 + version = "0.1.4" 3824 + source = "registry+https://github.com/rust-lang/crates.io-index" 3825 + checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" 3826 + dependencies = [ 3827 + "zerovec", 3828 + ] 3829 + 3830 + [[package]] 3831 + name = "powerfmt" 3832 + version = "0.2.0" 3833 + source = "registry+https://github.com/rust-lang/crates.io-index" 3834 + checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 3835 + 3836 + [[package]] 3837 + name = "ppv-lite86" 3838 + version = "0.2.21" 3839 + source = "registry+https://github.com/rust-lang/crates.io-index" 3840 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 3841 + dependencies = [ 3842 + "zerocopy 0.8.31", 3843 + ] 3844 + 3845 + [[package]] 3846 + name = "precomputed-hash" 3847 + version = "0.1.1" 3848 + source = "registry+https://github.com/rust-lang/crates.io-index" 3849 + checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 3850 + 3851 + [[package]] 3852 + name = "prettyplease" 3853 + version = "0.2.37" 3854 + source = "registry+https://github.com/rust-lang/crates.io-index" 3855 + checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 3856 + dependencies = [ 3857 + "proc-macro2", 3858 + "syn 2.0.111", 3859 + ] 3860 + 3861 + [[package]] 3862 + name = "primeorder" 3863 + version = "0.13.6" 3864 + source = "registry+https://github.com/rust-lang/crates.io-index" 3865 + checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" 3866 + dependencies = [ 3867 + "elliptic-curve", 3868 + ] 3869 + 3870 + [[package]] 3871 + name = "print-positions" 3872 + version = "0.6.1" 3873 + source = "registry+https://github.com/rust-lang/crates.io-index" 3874 + checksum = "1df593470e3ef502e48cb0cfc9a3a61e5f61e967b78e1ed35a67ac615cfbd208" 3875 + dependencies = [ 3876 + "unicode-segmentation", 3877 + ] 3878 + 3879 + [[package]] 3880 + name = "proc-macro-error" 3881 + version = "1.0.4" 3882 + source = "registry+https://github.com/rust-lang/crates.io-index" 3883 + checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 3884 + dependencies = [ 3885 + "proc-macro-error-attr", 3886 + "proc-macro2", 3887 + "quote", 3888 + "syn 1.0.109", 3889 + "version_check", 3890 + ] 3891 + 3892 + [[package]] 3893 + name = "proc-macro-error-attr" 3894 + version = "1.0.4" 3895 + source = "registry+https://github.com/rust-lang/crates.io-index" 3896 + checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 3897 + dependencies = [ 3898 + "proc-macro2", 3899 + "quote", 3900 + "version_check", 3901 + ] 3902 + 3903 + [[package]] 3904 + name = "proc-macro-error-attr2" 3905 + version = "2.0.0" 3906 + source = "registry+https://github.com/rust-lang/crates.io-index" 3907 + checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" 3908 + dependencies = [ 3909 + "proc-macro2", 3910 + "quote", 3911 + ] 3912 + 3913 + [[package]] 3914 + name = "proc-macro-error2" 3915 + version = "2.0.1" 3916 + source = "registry+https://github.com/rust-lang/crates.io-index" 3917 + checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" 3918 + dependencies = [ 3919 + "proc-macro-error-attr2", 3920 + "proc-macro2", 3921 + "quote", 3922 + "syn 2.0.111", 3923 + ] 3924 + 3925 + [[package]] 3926 + name = "proc-macro2" 3927 + version = "1.0.103" 3928 + source = "registry+https://github.com/rust-lang/crates.io-index" 3929 + checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" 3930 + dependencies = [ 3931 + "unicode-ident", 3932 + ] 3933 + 3934 + [[package]] 3935 + name = "proc-macro2-diagnostics" 3936 + version = "0.10.1" 3937 + source = "registry+https://github.com/rust-lang/crates.io-index" 3938 + checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" 3939 + dependencies = [ 3940 + "proc-macro2", 3941 + "quote", 3942 + "syn 2.0.111", 3943 + "version_check", 3944 + "yansi", 3945 + ] 3946 + 3947 + [[package]] 3948 + name = "procfs" 3949 + version = "0.17.0" 3950 + source = "registry+https://github.com/rust-lang/crates.io-index" 3951 + checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" 3952 + dependencies = [ 3953 + "bitflags", 3954 + "chrono", 3955 + "flate2", 3956 + "hex", 3957 + "procfs-core 0.17.0", 3958 + "rustix 0.38.44", 3959 + ] 3960 + 3961 + [[package]] 3962 + name = "procfs" 3963 + version = "0.18.0" 3964 + source = "registry+https://github.com/rust-lang/crates.io-index" 3965 + checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7" 3966 + dependencies = [ 3967 + "bitflags", 3968 + "chrono", 3969 + "flate2", 3970 + "procfs-core 0.18.0", 3971 + "rustix 1.1.2", 3972 + ] 3973 + 3974 + [[package]] 3975 + name = "procfs-core" 3976 + version = "0.17.0" 3977 + source = "registry+https://github.com/rust-lang/crates.io-index" 3978 + checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" 3979 + dependencies = [ 3980 + "bitflags", 3981 + "chrono", 3982 + "hex", 3983 + ] 3984 + 3985 + [[package]] 3986 + name = "procfs-core" 3987 + version = "0.18.0" 3988 + source = "registry+https://github.com/rust-lang/crates.io-index" 3989 + checksum = "e6401bf7b6af22f78b563665d15a22e9aef27775b79b149a66ca022468a4e405" 3990 + dependencies = [ 3991 + "bitflags", 3992 + "chrono", 3993 + "hex", 3994 + ] 3995 + 3996 + [[package]] 3997 + name = "pure-rust-locales" 3998 + version = "0.8.2" 3999 + source = "registry+https://github.com/rust-lang/crates.io-index" 4000 + checksum = "869675ad2d7541aea90c6d88c81f46a7f4ea9af8cd0395d38f11a95126998a0d" 4001 + 4002 + [[package]] 4003 + name = "pwd" 4004 + version = "1.4.0" 4005 + source = "registry+https://github.com/rust-lang/crates.io-index" 4006 + checksum = "72c71c0c79b9701efe4e1e4b563b2016dd4ee789eb99badcb09d61ac4b92e4a2" 4007 + dependencies = [ 4008 + "libc", 4009 + "thiserror 1.0.69", 4010 + ] 4011 + 4012 + [[package]] 4013 + name = "quick-xml" 4014 + version = "0.37.5" 4015 + source = "registry+https://github.com/rust-lang/crates.io-index" 4016 + checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" 4017 + dependencies = [ 4018 + "encoding_rs", 4019 + "memchr", 4020 + ] 4021 + 4022 + [[package]] 4023 + name = "quick-xml" 4024 + version = "0.38.4" 4025 + source = "registry+https://github.com/rust-lang/crates.io-index" 4026 + checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" 4027 + dependencies = [ 4028 + "memchr", 4029 + ] 4030 + 4031 + [[package]] 4032 + name = "quinn" 4033 + version = "0.11.9" 4034 + source = "registry+https://github.com/rust-lang/crates.io-index" 4035 + checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" 4036 + dependencies = [ 4037 + "bytes", 4038 + "cfg_aliases", 4039 + "pin-project-lite", 4040 + "quinn-proto", 4041 + "quinn-udp", 4042 + "rustc-hash", 4043 + "rustls", 4044 + "socket2", 4045 + "thiserror 2.0.17", 4046 + "tokio", 4047 + "tracing", 4048 + "web-time", 4049 + ] 4050 + 4051 + [[package]] 4052 + name = "quinn-proto" 4053 + version = "0.11.13" 4054 + source = "registry+https://github.com/rust-lang/crates.io-index" 4055 + checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" 4056 + dependencies = [ 4057 + "bytes", 4058 + "getrandom 0.3.4", 4059 + "lru-slab", 4060 + "rand 0.9.2", 4061 + "ring", 4062 + "rustc-hash", 4063 + "rustls", 4064 + "rustls-pki-types", 4065 + "slab", 4066 + "thiserror 2.0.17", 4067 + "tinyvec", 4068 + "tracing", 4069 + "web-time", 4070 + ] 4071 + 4072 + [[package]] 4073 + name = "quinn-udp" 4074 + version = "0.5.14" 4075 + source = "registry+https://github.com/rust-lang/crates.io-index" 4076 + checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" 4077 + dependencies = [ 4078 + "cfg_aliases", 4079 + "libc", 4080 + "once_cell", 4081 + "socket2", 4082 + "tracing", 4083 + "windows-sys 0.60.2", 4084 + ] 4085 + 4086 + [[package]] 4087 + name = "quote" 4088 + version = "1.0.42" 4089 + source = "registry+https://github.com/rust-lang/crates.io-index" 4090 + checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" 4091 + dependencies = [ 4092 + "proc-macro2", 4093 + ] 4094 + 4095 + [[package]] 4096 + name = "r-efi" 4097 + version = "5.3.0" 4098 + source = "registry+https://github.com/rust-lang/crates.io-index" 4099 + checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 4100 + 4101 + [[package]] 4102 + name = "rand" 4103 + version = "0.8.5" 4104 + source = "registry+https://github.com/rust-lang/crates.io-index" 4105 + checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 4106 + dependencies = [ 4107 + "libc", 4108 + "rand_chacha 0.3.1", 4109 + "rand_core 0.6.4", 4110 + ] 4111 + 4112 + [[package]] 4113 + name = "rand" 4114 + version = "0.9.2" 4115 + source = "registry+https://github.com/rust-lang/crates.io-index" 4116 + checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 4117 + dependencies = [ 4118 + "rand_chacha 0.9.0", 4119 + "rand_core 0.9.3", 4120 + ] 4121 + 4122 + [[package]] 4123 + name = "rand_chacha" 4124 + version = "0.3.1" 4125 + source = "registry+https://github.com/rust-lang/crates.io-index" 4126 + checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 4127 + dependencies = [ 4128 + "ppv-lite86", 4129 + "rand_core 0.6.4", 4130 + ] 4131 + 4132 + [[package]] 4133 + name = "rand_chacha" 4134 + version = "0.9.0" 4135 + source = "registry+https://github.com/rust-lang/crates.io-index" 4136 + checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 4137 + dependencies = [ 4138 + "ppv-lite86", 4139 + "rand_core 0.9.3", 4140 + ] 4141 + 4142 + [[package]] 4143 + name = "rand_core" 4144 + version = "0.6.4" 4145 + source = "registry+https://github.com/rust-lang/crates.io-index" 4146 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 4147 + dependencies = [ 4148 + "getrandom 0.2.16", 4149 + ] 4150 + 4151 + [[package]] 4152 + name = "rand_core" 4153 + version = "0.9.3" 4154 + source = "registry+https://github.com/rust-lang/crates.io-index" 4155 + checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 4156 + dependencies = [ 4157 + "getrandom 0.3.4", 4158 + ] 4159 + 4160 + [[package]] 4161 + name = "range-traits" 4162 + version = "0.3.2" 4163 + source = "registry+https://github.com/rust-lang/crates.io-index" 4164 + checksum = "d20581732dd76fa913c7dff1a2412b714afe3573e94d41c34719de73337cc8ab" 4165 + 4166 + [[package]] 4167 + name = "rapidhash" 4168 + version = "4.1.1" 4169 + source = "registry+https://github.com/rust-lang/crates.io-index" 4170 + checksum = "d8e65c75143ce5d47c55b510297eeb1182f3c739b6043c537670e9fc18612dae" 4171 + dependencies = [ 4172 + "rustversion", 4173 + ] 4174 + 4175 + [[package]] 4176 + name = "rayon" 4177 + version = "1.11.0" 4178 + source = "registry+https://github.com/rust-lang/crates.io-index" 4179 + checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" 4180 + dependencies = [ 4181 + "either", 4182 + "rayon-core", 4183 + ] 4184 + 4185 + [[package]] 4186 + name = "rayon-core" 4187 + version = "1.13.0" 4188 + source = "registry+https://github.com/rust-lang/crates.io-index" 4189 + checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" 4190 + dependencies = [ 4191 + "crossbeam-deque", 4192 + "crossbeam-utils", 4193 + ] 4194 + 4195 + [[package]] 4196 + name = "redox_syscall" 4197 + version = "0.5.18" 4198 + source = "registry+https://github.com/rust-lang/crates.io-index" 4199 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 4200 + dependencies = [ 4201 + "bitflags", 4202 + ] 4203 + 4204 + [[package]] 4205 + name = "redox_users" 4206 + version = "0.5.2" 4207 + source = "registry+https://github.com/rust-lang/crates.io-index" 4208 + checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" 4209 + dependencies = [ 4210 + "getrandom 0.2.16", 4211 + "libredox", 4212 + "thiserror 2.0.17", 4213 + ] 4214 + 4215 + [[package]] 4216 + name = "ref-cast" 4217 + version = "1.0.25" 4218 + source = "registry+https://github.com/rust-lang/crates.io-index" 4219 + checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" 4220 + dependencies = [ 4221 + "ref-cast-impl", 4222 + ] 4223 + 4224 + [[package]] 4225 + name = "ref-cast-impl" 4226 + version = "1.0.25" 4227 + source = "registry+https://github.com/rust-lang/crates.io-index" 4228 + checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" 4229 + dependencies = [ 4230 + "proc-macro2", 4231 + "quote", 4232 + "syn 2.0.111", 4233 + ] 4234 + 4235 + [[package]] 4236 + name = "regex" 4237 + version = "1.12.2" 4238 + source = "registry+https://github.com/rust-lang/crates.io-index" 4239 + checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" 4240 + dependencies = [ 4241 + "aho-corasick", 4242 + "memchr", 4243 + "regex-automata", 4244 + "regex-syntax", 4245 + ] 4246 + 4247 + [[package]] 4248 + name = "regex-automata" 4249 + version = "0.4.13" 4250 + source = "registry+https://github.com/rust-lang/crates.io-index" 4251 + checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" 4252 + dependencies = [ 4253 + "aho-corasick", 4254 + "memchr", 4255 + "regex-syntax", 4256 + ] 4257 + 4258 + [[package]] 4259 + name = "regex-lite" 4260 + version = "0.1.8" 4261 + source = "registry+https://github.com/rust-lang/crates.io-index" 4262 + checksum = "8d942b98df5e658f56f20d592c7f868833fe38115e65c33003d8cd224b0155da" 4263 + 4264 + [[package]] 4265 + name = "regex-syntax" 4266 + version = "0.8.8" 4267 + source = "registry+https://github.com/rust-lang/crates.io-index" 4268 + checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" 4269 + 4270 + [[package]] 4271 + name = "reqwest" 4272 + version = "0.12.25" 4273 + source = "registry+https://github.com/rust-lang/crates.io-index" 4274 + checksum = "b6eff9328d40131d43bd911d42d79eb6a47312002a4daefc9e37f17e74a7701a" 4275 + dependencies = [ 4276 + "base64", 4277 + "bytes", 4278 + "encoding_rs", 4279 + "futures-core", 4280 + "h2", 4281 + "http", 4282 + "http-body", 4283 + "http-body-util", 4284 + "hyper", 4285 + "hyper-rustls", 4286 + "hyper-util", 4287 + "js-sys", 4288 + "log", 4289 + "mime", 4290 + "percent-encoding", 4291 + "pin-project-lite", 4292 + "quinn", 4293 + "rustls", 4294 + "rustls-pki-types", 4295 + "serde", 4296 + "serde_json", 4297 + "serde_urlencoded", 4298 + "sync_wrapper", 4299 + "tokio", 4300 + "tokio-rustls", 4301 + "tower", 4302 + "tower-http", 4303 + "tower-service", 4304 + "url", 4305 + "wasm-bindgen", 4306 + "wasm-bindgen-futures", 4307 + "web-sys", 4308 + "webpki-roots", 4309 + ] 4310 + 4311 + [[package]] 4312 + name = "rfc6979" 4313 + version = "0.4.0" 4314 + source = "registry+https://github.com/rust-lang/crates.io-index" 4315 + checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" 4316 + dependencies = [ 4317 + "hmac", 4318 + "subtle", 4319 + ] 4320 + 4321 + [[package]] 4322 + name = "ring" 4323 + version = "0.17.14" 4324 + source = "registry+https://github.com/rust-lang/crates.io-index" 4325 + checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 4326 + dependencies = [ 4327 + "cc", 4328 + "cfg-if", 4329 + "getrandom 0.2.16", 4330 + "libc", 4331 + "untrusted", 4332 + "windows-sys 0.52.0", 4333 + ] 4334 + 4335 + [[package]] 4336 + name = "rmp" 4337 + version = "0.8.14" 4338 + source = "registry+https://github.com/rust-lang/crates.io-index" 4339 + checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" 4340 + dependencies = [ 4341 + "byteorder", 4342 + "num-traits", 4343 + "paste", 4344 + ] 4345 + 4346 + [[package]] 4347 + name = "roxmltree" 4348 + version = "0.20.0" 4349 + source = "registry+https://github.com/rust-lang/crates.io-index" 4350 + checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" 4351 + 4352 + [[package]] 4353 + name = "rsa" 4354 + version = "0.9.9" 4355 + source = "registry+https://github.com/rust-lang/crates.io-index" 4356 + checksum = "40a0376c50d0358279d9d643e4bf7b7be212f1f4ff1da9070a7b54d22ef75c88" 4357 + dependencies = [ 4358 + "const-oid", 4359 + "digest", 4360 + "num-bigint-dig", 4361 + "num-integer", 4362 + "num-traits", 4363 + "pkcs1", 4364 + "pkcs8", 4365 + "rand_core 0.6.4", 4366 + "signature", 4367 + "spki", 4368 + "subtle", 4369 + "zeroize", 4370 + ] 4371 + 4372 + [[package]] 4373 + name = "rust-embed" 4374 + version = "8.9.0" 4375 + source = "registry+https://github.com/rust-lang/crates.io-index" 4376 + checksum = "947d7f3fad52b283d261c4c99a084937e2fe492248cb9a68a8435a861b8798ca" 4377 + dependencies = [ 4378 + "rust-embed-impl", 4379 + "rust-embed-utils", 4380 + "walkdir", 4381 + ] 4382 + 4383 + [[package]] 4384 + name = "rust-embed-impl" 4385 + version = "8.9.0" 4386 + source = "registry+https://github.com/rust-lang/crates.io-index" 4387 + checksum = "5fa2c8c9e8711e10f9c4fd2d64317ef13feaab820a4c51541f1a8c8e2e851ab2" 4388 + dependencies = [ 4389 + "proc-macro2", 4390 + "quote", 4391 + "rust-embed-utils", 4392 + "syn 2.0.111", 4393 + "walkdir", 4394 + ] 4395 + 4396 + [[package]] 4397 + name = "rust-embed-utils" 4398 + version = "8.9.0" 4399 + source = "registry+https://github.com/rust-lang/crates.io-index" 4400 + checksum = "60b161f275cb337fe0a44d924a5f4df0ed69c2c39519858f931ce61c779d3475" 4401 + dependencies = [ 4402 + "sha2", 4403 + "walkdir", 4404 + ] 4405 + 4406 + [[package]] 4407 + name = "rust_decimal" 4408 + version = "1.39.0" 4409 + source = "registry+https://github.com/rust-lang/crates.io-index" 4410 + checksum = "35affe401787a9bd846712274d97654355d21b2a2c092a3139aabe31e9022282" 4411 + dependencies = [ 4412 + "arrayvec", 4413 + "num-traits", 4414 + ] 4415 + 4416 + [[package]] 4417 + name = "rustc-demangle" 4418 + version = "0.1.26" 4419 + source = "registry+https://github.com/rust-lang/crates.io-index" 4420 + checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" 4421 + 4422 + [[package]] 4423 + name = "rustc-hash" 4424 + version = "2.1.1" 4425 + source = "registry+https://github.com/rust-lang/crates.io-index" 4426 + checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 4427 + 4428 + [[package]] 4429 + name = "rustc_version" 4430 + version = "0.4.1" 4431 + source = "registry+https://github.com/rust-lang/crates.io-index" 4432 + checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 4433 + dependencies = [ 4434 + "semver", 4435 + ] 4436 + 4437 + [[package]] 4438 + name = "rustix" 4439 + version = "0.38.44" 4440 + source = "registry+https://github.com/rust-lang/crates.io-index" 4441 + checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 4442 + dependencies = [ 4443 + "bitflags", 4444 + "errno", 4445 + "libc", 4446 + "linux-raw-sys 0.4.15", 4447 + "windows-sys 0.59.0", 4448 + ] 4449 + 4450 + [[package]] 4451 + name = "rustix" 4452 + version = "1.1.2" 4453 + source = "registry+https://github.com/rust-lang/crates.io-index" 4454 + checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" 4455 + dependencies = [ 4456 + "bitflags", 4457 + "errno", 4458 + "libc", 4459 + "linux-raw-sys 0.11.0", 4460 + "windows-sys 0.61.2", 4461 + ] 4462 + 4463 + [[package]] 4464 + name = "rustls" 4465 + version = "0.23.28" 4466 + source = "registry+https://github.com/rust-lang/crates.io-index" 4467 + checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" 4468 + dependencies = [ 4469 + "once_cell", 4470 + "ring", 4471 + "rustls-pki-types", 4472 + "rustls-webpki", 4473 + "subtle", 4474 + "zeroize", 4475 + ] 4476 + 4477 + [[package]] 4478 + name = "rustls-pki-types" 4479 + version = "1.13.1" 4480 + source = "registry+https://github.com/rust-lang/crates.io-index" 4481 + checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" 4482 + dependencies = [ 4483 + "web-time", 4484 + "zeroize", 4485 + ] 4486 + 4487 + [[package]] 4488 + name = "rustls-webpki" 4489 + version = "0.103.8" 4490 + source = "registry+https://github.com/rust-lang/crates.io-index" 4491 + checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" 4492 + dependencies = [ 4493 + "ring", 4494 + "rustls-pki-types", 4495 + "untrusted", 4496 + ] 4497 + 4498 + [[package]] 4499 + name = "rustversion" 4500 + version = "1.0.22" 4501 + source = "registry+https://github.com/rust-lang/crates.io-index" 4502 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 4503 + 4504 + [[package]] 4505 + name = "ryu" 4506 + version = "1.0.20" 4507 + source = "registry+https://github.com/rust-lang/crates.io-index" 4508 + checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 4509 + 4510 + [[package]] 4511 + name = "saa" 4512 + version = "5.4.0" 4513 + source = "registry+https://github.com/rust-lang/crates.io-index" 4514 + checksum = "3192d99ee2f69effeacef86c9fa80e75b6604e2a5d3ade6856d206b519521e53" 4515 + 4516 + [[package]] 4517 + name = "same-file" 4518 + version = "1.0.6" 4519 + source = "registry+https://github.com/rust-lang/crates.io-index" 4520 + checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 4521 + dependencies = [ 4522 + "winapi-util", 4523 + ] 4524 + 4525 + [[package]] 4526 + name = "scc" 4527 + version = "3.4.6" 4528 + source = "registry+https://github.com/rust-lang/crates.io-index" 4529 + checksum = "0b6f8686af8563182fc6b63ab7bd7b5cad8f40fbe660675627caedc6c073eca8" 4530 + dependencies = [ 4531 + "saa", 4532 + "sdd", 4533 + ] 4534 + 4535 + [[package]] 4536 + name = "schemars" 4537 + version = "0.9.0" 4538 + source = "registry+https://github.com/rust-lang/crates.io-index" 4539 + checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" 4540 + dependencies = [ 4541 + "dyn-clone", 4542 + "ref-cast", 4543 + "serde", 4544 + "serde_json", 4545 + ] 4546 + 4547 + [[package]] 4548 + name = "schemars" 4549 + version = "1.1.0" 4550 + source = "registry+https://github.com/rust-lang/crates.io-index" 4551 + checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" 4552 + dependencies = [ 4553 + "dyn-clone", 4554 + "ref-cast", 4555 + "serde", 4556 + "serde_json", 4557 + ] 4558 + 4559 + [[package]] 4560 + name = "scoped-tls" 4561 + version = "1.0.1" 4562 + source = "registry+https://github.com/rust-lang/crates.io-index" 4563 + checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 4564 + 4565 + [[package]] 4566 + name = "scopeguard" 4567 + version = "1.2.0" 4568 + source = "registry+https://github.com/rust-lang/crates.io-index" 4569 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 4570 + 4571 + [[package]] 4572 + name = "sdd" 4573 + version = "4.5.0" 4574 + source = "registry+https://github.com/rust-lang/crates.io-index" 4575 + checksum = "7168ecf885fdd3920ade15d50189593b076e1d060b60406a745766380195d65a" 4576 + 4577 + [[package]] 4578 + name = "sec1" 4579 + version = "0.7.3" 4580 + source = "registry+https://github.com/rust-lang/crates.io-index" 4581 + checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" 4582 + dependencies = [ 4583 + "base16ct", 4584 + "der", 4585 + "generic-array", 4586 + "pkcs8", 4587 + "subtle", 4588 + "zeroize", 4589 + ] 4590 + 4591 + [[package]] 4592 + name = "self_cell" 4593 + version = "1.2.1" 4594 + source = "registry+https://github.com/rust-lang/crates.io-index" 4595 + checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33" 4596 + 4597 + [[package]] 4598 + name = "semver" 4599 + version = "1.0.27" 4600 + source = "registry+https://github.com/rust-lang/crates.io-index" 4601 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 4602 + 4603 + [[package]] 4604 + name = "send_wrapper" 4605 + version = "0.6.0" 4606 + source = "registry+https://github.com/rust-lang/crates.io-index" 4607 + checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" 4608 + 4609 + [[package]] 4610 + name = "serde" 4611 + version = "1.0.228" 4612 + source = "registry+https://github.com/rust-lang/crates.io-index" 4613 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 4614 + dependencies = [ 4615 + "serde_core", 4616 + "serde_derive", 4617 + ] 4618 + 4619 + [[package]] 4620 + name = "serde_bytes" 4621 + version = "0.11.19" 4622 + source = "registry+https://github.com/rust-lang/crates.io-index" 4623 + checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" 4624 + dependencies = [ 4625 + "serde", 4626 + "serde_core", 4627 + ] 4628 + 4629 + [[package]] 4630 + name = "serde_core" 4631 + version = "1.0.228" 4632 + source = "registry+https://github.com/rust-lang/crates.io-index" 4633 + checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 4634 + dependencies = [ 4635 + "serde_derive", 4636 + ] 4637 + 4638 + [[package]] 4639 + name = "serde_derive" 4640 + version = "1.0.228" 4641 + source = "registry+https://github.com/rust-lang/crates.io-index" 4642 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 4643 + dependencies = [ 4644 + "proc-macro2", 4645 + "quote", 4646 + "syn 2.0.111", 4647 + ] 4648 + 4649 + [[package]] 4650 + name = "serde_html_form" 4651 + version = "0.2.8" 4652 + source = "registry+https://github.com/rust-lang/crates.io-index" 4653 + checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f" 4654 + dependencies = [ 4655 + "form_urlencoded", 4656 + "indexmap 2.12.1", 4657 + "itoa", 4658 + "ryu", 4659 + "serde_core", 4660 + ] 4661 + 4662 + [[package]] 4663 + name = "serde_ipld_dagcbor" 4664 + version = "0.6.4" 4665 + source = "registry+https://github.com/rust-lang/crates.io-index" 4666 + checksum = "46182f4f08349a02b45c998ba3215d3f9de826246ba02bb9dddfe9a2a2100778" 4667 + dependencies = [ 4668 + "cbor4ii", 4669 + "ipld-core", 4670 + "scopeguard", 4671 + "serde", 4672 + ] 4673 + 4674 + [[package]] 4675 + name = "serde_json" 4676 + version = "1.0.145" 4677 + source = "registry+https://github.com/rust-lang/crates.io-index" 4678 + checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" 4679 + dependencies = [ 4680 + "indexmap 2.12.1", 4681 + "itoa", 4682 + "memchr", 4683 + "ryu", 4684 + "serde", 4685 + "serde_core", 4686 + ] 4687 + 4688 + [[package]] 4689 + name = "serde_repr" 4690 + version = "0.1.20" 4691 + source = "registry+https://github.com/rust-lang/crates.io-index" 4692 + checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" 4693 + dependencies = [ 4694 + "proc-macro2", 4695 + "quote", 4696 + "syn 2.0.111", 4697 + ] 4698 + 4699 + [[package]] 4700 + name = "serde_spanned" 4701 + version = "0.6.9" 4702 + source = "registry+https://github.com/rust-lang/crates.io-index" 4703 + checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" 4704 + dependencies = [ 4705 + "serde", 4706 + ] 4707 + 4708 + [[package]] 4709 + name = "serde_urlencoded" 4710 + version = "0.7.1" 4711 + source = "registry+https://github.com/rust-lang/crates.io-index" 4712 + checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 4713 + dependencies = [ 4714 + "form_urlencoded", 4715 + "itoa", 4716 + "ryu", 4717 + "serde", 4718 + ] 4719 + 4720 + [[package]] 4721 + name = "serde_with" 4722 + version = "3.16.1" 4723 + source = "registry+https://github.com/rust-lang/crates.io-index" 4724 + checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" 4725 + dependencies = [ 4726 + "base64", 4727 + "chrono", 4728 + "hex", 4729 + "indexmap 1.9.3", 4730 + "indexmap 2.12.1", 4731 + "schemars 0.9.0", 4732 + "schemars 1.1.0", 4733 + "serde_core", 4734 + "serde_json", 4735 + "serde_with_macros", 4736 + "time", 4737 + ] 4738 + 4739 + [[package]] 4740 + name = "serde_with_macros" 4741 + version = "3.16.1" 4742 + source = "registry+https://github.com/rust-lang/crates.io-index" 4743 + checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" 4744 + dependencies = [ 4745 + "darling", 4746 + "proc-macro2", 4747 + "quote", 4748 + "syn 2.0.111", 4749 + ] 4750 + 4751 + [[package]] 4752 + name = "serde_yaml" 4753 + version = "0.9.34+deprecated" 4754 + source = "registry+https://github.com/rust-lang/crates.io-index" 4755 + checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" 4756 + dependencies = [ 4757 + "indexmap 2.12.1", 4758 + "itoa", 4759 + "ryu", 4760 + "serde", 4761 + "unsafe-libyaml", 4762 + ] 4763 + 4764 + [[package]] 4765 + name = "sha2" 4766 + version = "0.10.9" 4767 + source = "registry+https://github.com/rust-lang/crates.io-index" 4768 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 4769 + dependencies = [ 4770 + "cfg-if", 4771 + "cpufeatures", 4772 + "digest", 4773 + ] 4774 + 4775 + [[package]] 4776 + name = "shadow-rs" 4777 + version = "1.4.0" 4778 + source = "registry+https://github.com/rust-lang/crates.io-index" 4779 + checksum = "72d18183cef626bce22836103349c7050d73db799be0171386b80947d157ae32" 4780 + dependencies = [ 4781 + "const_format", 4782 + "is_debug", 4783 + "time", 4784 + "tzdb", 4785 + ] 4786 + 4787 + [[package]] 4788 + name = "sharded-slab" 4789 + version = "0.1.7" 4790 + source = "registry+https://github.com/rust-lang/crates.io-index" 4791 + checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 4792 + dependencies = [ 4793 + "lazy_static", 4794 + ] 4795 + 4796 + [[package]] 4797 + name = "shell-words" 4798 + version = "1.1.1" 4799 + source = "registry+https://github.com/rust-lang/crates.io-index" 4800 + checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77" 4801 + 4802 + [[package]] 4803 + name = "shlex" 4804 + version = "1.3.0" 4805 + source = "registry+https://github.com/rust-lang/crates.io-index" 4806 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 4807 + 4808 + [[package]] 4809 + name = "signature" 4810 + version = "2.2.0" 4811 + source = "registry+https://github.com/rust-lang/crates.io-index" 4812 + checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 4813 + dependencies = [ 4814 + "digest", 4815 + "rand_core 0.6.4", 4816 + ] 4817 + 4818 + [[package]] 4819 + name = "simd-adler32" 4820 + version = "0.3.8" 4821 + source = "registry+https://github.com/rust-lang/crates.io-index" 4822 + checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" 4823 + 4824 + [[package]] 4825 + name = "siphasher" 4826 + version = "1.0.1" 4827 + source = "registry+https://github.com/rust-lang/crates.io-index" 4828 + checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 4829 + 4830 + [[package]] 4831 + name = "slab" 4832 + version = "0.4.11" 4833 + source = "registry+https://github.com/rust-lang/crates.io-index" 4834 + checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 4835 + 4836 + [[package]] 4837 + name = "smallvec" 4838 + version = "1.15.1" 4839 + source = "registry+https://github.com/rust-lang/crates.io-index" 4840 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 4841 + 4842 + [[package]] 4843 + name = "smol_str" 4844 + version = "0.3.4" 4845 + source = "registry+https://github.com/rust-lang/crates.io-index" 4846 + checksum = "3498b0a27f93ef1402f20eefacfaa1691272ac4eca1cdc8c596cb0a245d6cbf5" 4847 + dependencies = [ 4848 + "borsh", 4849 + "serde_core", 4850 + ] 4851 + 4852 + [[package]] 4853 + name = "socket2" 4854 + version = "0.6.1" 4855 + source = "registry+https://github.com/rust-lang/crates.io-index" 4856 + checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" 4857 + dependencies = [ 4858 + "libc", 4859 + "windows-sys 0.60.2", 4860 + ] 4861 + 4862 + [[package]] 4863 + name = "spin" 4864 + version = "0.9.8" 4865 + source = "registry+https://github.com/rust-lang/crates.io-index" 4866 + checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 4867 + dependencies = [ 4868 + "lock_api", 4869 + ] 4870 + 4871 + [[package]] 4872 + name = "spin" 4873 + version = "0.10.0" 4874 + source = "registry+https://github.com/rust-lang/crates.io-index" 4875 + checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" 4876 + 4877 + [[package]] 4878 + name = "spki" 4879 + version = "0.7.3" 4880 + source = "registry+https://github.com/rust-lang/crates.io-index" 4881 + checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 4882 + dependencies = [ 4883 + "base64ct", 4884 + "der", 4885 + ] 4886 + 4887 + [[package]] 4888 + name = "stable_deref_trait" 4889 + version = "1.2.1" 4890 + source = "registry+https://github.com/rust-lang/crates.io-index" 4891 + checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 4892 + 4893 + [[package]] 4894 + name = "static-regular-grammar" 4895 + version = "2.0.2" 4896 + source = "registry+https://github.com/rust-lang/crates.io-index" 4897 + checksum = "4f4a6c40247579acfbb138c3cd7de3dab113ab4ac6227f1b7de7d626ee667957" 4898 + dependencies = [ 4899 + "abnf", 4900 + "btree-range-map", 4901 + "ciborium", 4902 + "hex_fmt", 4903 + "indoc", 4904 + "proc-macro-error", 4905 + "proc-macro2", 4906 + "quote", 4907 + "serde", 4908 + "sha2", 4909 + "syn 2.0.111", 4910 + "thiserror 1.0.69", 4911 + ] 4912 + 4913 + [[package]] 4914 + name = "static_assertions" 4915 + version = "1.1.0" 4916 + source = "registry+https://github.com/rust-lang/crates.io-index" 4917 + checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 4918 + 4919 + [[package]] 4920 + name = "string_cache" 4921 + version = "0.8.9" 4922 + source = "registry+https://github.com/rust-lang/crates.io-index" 4923 + checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" 4924 + dependencies = [ 4925 + "new_debug_unreachable", 4926 + "parking_lot", 4927 + "phf_shared 0.11.3", 4928 + "precomputed-hash", 4929 + "serde", 4930 + ] 4931 + 4932 + [[package]] 4933 + name = "string_cache_codegen" 4934 + version = "0.5.4" 4935 + source = "registry+https://github.com/rust-lang/crates.io-index" 4936 + checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" 4937 + dependencies = [ 4938 + "phf_generator", 4939 + "phf_shared 0.11.3", 4940 + "proc-macro2", 4941 + "quote", 4942 + ] 4943 + 4944 + [[package]] 4945 + name = "strip-ansi-escapes" 4946 + version = "0.2.1" 4947 + source = "registry+https://github.com/rust-lang/crates.io-index" 4948 + checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025" 4949 + dependencies = [ 4950 + "vte", 4951 + ] 4952 + 4953 + [[package]] 4954 + name = "strsim" 4955 + version = "0.11.1" 4956 + source = "registry+https://github.com/rust-lang/crates.io-index" 4957 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 4958 + 4959 + [[package]] 4960 + name = "strum" 4961 + version = "0.26.3" 4962 + source = "registry+https://github.com/rust-lang/crates.io-index" 4963 + checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 4964 + 4965 + [[package]] 4966 + name = "strum_macros" 4967 + version = "0.27.2" 4968 + source = "registry+https://github.com/rust-lang/crates.io-index" 4969 + checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" 4970 + dependencies = [ 4971 + "heck 0.5.0", 4972 + "proc-macro2", 4973 + "quote", 4974 + "syn 2.0.111", 4975 + ] 4976 + 4977 + [[package]] 4978 + name = "subtle" 4979 + version = "2.6.1" 4980 + source = "registry+https://github.com/rust-lang/crates.io-index" 4981 + checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 4982 + 4983 + [[package]] 4984 + name = "supports-color" 4985 + version = "3.0.2" 4986 + source = "registry+https://github.com/rust-lang/crates.io-index" 4987 + checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6" 4988 + dependencies = [ 4989 + "is_ci", 4990 + ] 4991 + 4992 + [[package]] 4993 + name = "supports-hyperlinks" 4994 + version = "3.1.0" 4995 + source = "registry+https://github.com/rust-lang/crates.io-index" 4996 + checksum = "804f44ed3c63152de6a9f90acbea1a110441de43006ea51bcce8f436196a288b" 4997 + 4998 + [[package]] 4999 + name = "supports-unicode" 5000 + version = "3.0.0" 5001 + source = "registry+https://github.com/rust-lang/crates.io-index" 5002 + checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" 5003 + 5004 + [[package]] 5005 + name = "syn" 5006 + version = "1.0.109" 5007 + source = "registry+https://github.com/rust-lang/crates.io-index" 5008 + checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 5009 + dependencies = [ 5010 + "proc-macro2", 5011 + "quote", 5012 + "unicode-ident", 5013 + ] 5014 + 5015 + [[package]] 5016 + name = "syn" 5017 + version = "2.0.111" 5018 + source = "registry+https://github.com/rust-lang/crates.io-index" 5019 + checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" 5020 + dependencies = [ 5021 + "proc-macro2", 5022 + "quote", 5023 + "unicode-ident", 5024 + ] 5025 + 5026 + [[package]] 5027 + name = "sync_wrapper" 5028 + version = "1.0.2" 5029 + source = "registry+https://github.com/rust-lang/crates.io-index" 5030 + checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 5031 + dependencies = [ 5032 + "futures-core", 5033 + ] 5034 + 5035 + [[package]] 5036 + name = "synstructure" 5037 + version = "0.13.2" 5038 + source = "registry+https://github.com/rust-lang/crates.io-index" 5039 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 5040 + dependencies = [ 5041 + "proc-macro2", 5042 + "quote", 5043 + "syn 2.0.111", 5044 + ] 5045 + 5046 + [[package]] 5047 + name = "sys-locale" 5048 + version = "0.3.2" 5049 + source = "registry+https://github.com/rust-lang/crates.io-index" 5050 + checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" 5051 + dependencies = [ 5052 + "libc", 5053 + ] 5054 + 5055 + [[package]] 5056 + name = "sysinfo" 5057 + version = "0.37.2" 5058 + source = "registry+https://github.com/rust-lang/crates.io-index" 5059 + checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" 5060 + dependencies = [ 5061 + "libc", 5062 + "memchr", 5063 + "ntapi", 5064 + "objc2-core-foundation", 5065 + "objc2-io-kit", 5066 + "windows 0.61.3", 5067 + ] 5068 + 5069 + [[package]] 5070 + name = "system-configuration" 5071 + version = "0.6.1" 5072 + source = "registry+https://github.com/rust-lang/crates.io-index" 5073 + checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 5074 + dependencies = [ 5075 + "bitflags", 5076 + "core-foundation", 5077 + "system-configuration-sys", 5078 + ] 5079 + 5080 + [[package]] 5081 + name = "system-configuration-sys" 5082 + version = "0.6.0" 5083 + source = "registry+https://github.com/rust-lang/crates.io-index" 5084 + checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 5085 + dependencies = [ 5086 + "core-foundation-sys", 5087 + "libc", 5088 + ] 5089 + 5090 + [[package]] 5091 + name = "tabled" 5092 + version = "0.20.0" 5093 + source = "registry+https://github.com/rust-lang/crates.io-index" 5094 + checksum = "e39a2ee1fbcd360805a771e1b300f78cc88fec7b8d3e2f71cd37bbf23e725c7d" 5095 + dependencies = [ 5096 + "ansi-str", 5097 + "ansitok", 5098 + "papergrid", 5099 + "testing_table", 5100 + ] 5101 + 5102 + [[package]] 5103 + name = "tagptr" 5104 + version = "0.2.0" 5105 + source = "registry+https://github.com/rust-lang/crates.io-index" 5106 + checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" 5107 + 5108 + [[package]] 5109 + name = "tempfile" 5110 + version = "3.23.0" 5111 + source = "registry+https://github.com/rust-lang/crates.io-index" 5112 + checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" 5113 + dependencies = [ 5114 + "fastrand", 5115 + "getrandom 0.3.4", 5116 + "once_cell", 5117 + "rustix 1.1.2", 5118 + "windows-sys 0.61.2", 5119 + ] 5120 + 5121 + [[package]] 5122 + name = "tendril" 5123 + version = "0.4.3" 5124 + source = "registry+https://github.com/rust-lang/crates.io-index" 5125 + checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" 5126 + dependencies = [ 5127 + "futf", 5128 + "mac", 5129 + "utf-8", 5130 + ] 5131 + 5132 + [[package]] 5133 + name = "terminal_size" 5134 + version = "0.4.3" 5135 + source = "registry+https://github.com/rust-lang/crates.io-index" 5136 + checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" 5137 + dependencies = [ 5138 + "rustix 1.1.2", 5139 + "windows-sys 0.60.2", 5140 + ] 5141 + 5142 + [[package]] 5143 + name = "testing_table" 5144 + version = "0.3.0" 5145 + source = "registry+https://github.com/rust-lang/crates.io-index" 5146 + checksum = "0f8daae29995a24f65619e19d8d31dea5b389f3d853d8bf297bbf607cd0014cc" 5147 + dependencies = [ 5148 + "ansitok", 5149 + "unicode-width 0.2.2", 5150 + ] 5151 + 5152 + [[package]] 5153 + name = "textwrap" 5154 + version = "0.16.2" 5155 + source = "registry+https://github.com/rust-lang/crates.io-index" 5156 + checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" 5157 + dependencies = [ 5158 + "unicode-linebreak", 5159 + "unicode-width 0.2.2", 5160 + ] 5161 + 5162 + [[package]] 5163 + name = "thiserror" 5164 + version = "1.0.69" 5165 + source = "registry+https://github.com/rust-lang/crates.io-index" 5166 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 5167 + dependencies = [ 5168 + "thiserror-impl 1.0.69", 5169 + ] 5170 + 5171 + [[package]] 5172 + name = "thiserror" 5173 + version = "2.0.17" 5174 + source = "registry+https://github.com/rust-lang/crates.io-index" 5175 + checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 5176 + dependencies = [ 5177 + "thiserror-impl 2.0.17", 5178 + ] 5179 + 5180 + [[package]] 5181 + name = "thiserror-impl" 5182 + version = "1.0.69" 5183 + source = "registry+https://github.com/rust-lang/crates.io-index" 5184 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 5185 + dependencies = [ 5186 + "proc-macro2", 5187 + "quote", 5188 + "syn 2.0.111", 5189 + ] 5190 + 5191 + [[package]] 5192 + name = "thiserror-impl" 5193 + version = "2.0.17" 5194 + source = "registry+https://github.com/rust-lang/crates.io-index" 5195 + checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 5196 + dependencies = [ 5197 + "proc-macro2", 5198 + "quote", 5199 + "syn 2.0.111", 5200 + ] 5201 + 5202 + [[package]] 5203 + name = "thread_local" 5204 + version = "1.1.9" 5205 + source = "registry+https://github.com/rust-lang/crates.io-index" 5206 + checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 5207 + dependencies = [ 5208 + "cfg-if", 5209 + ] 5210 + 5211 + [[package]] 5212 + name = "time" 5213 + version = "0.3.44" 5214 + source = "registry+https://github.com/rust-lang/crates.io-index" 5215 + checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" 5216 + dependencies = [ 5217 + "deranged", 5218 + "itoa", 5219 + "libc", 5220 + "num-conv", 5221 + "num_threads", 5222 + "powerfmt", 5223 + "serde", 5224 + "time-core", 5225 + "time-macros", 5226 + ] 5227 + 5228 + [[package]] 5229 + name = "time-core" 5230 + version = "0.1.6" 5231 + source = "registry+https://github.com/rust-lang/crates.io-index" 5232 + checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" 5233 + 5234 + [[package]] 5235 + name = "time-macros" 5236 + version = "0.2.24" 5237 + source = "registry+https://github.com/rust-lang/crates.io-index" 5238 + checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" 5239 + dependencies = [ 5240 + "num-conv", 5241 + "time-core", 5242 + ] 5243 + 5244 + [[package]] 5245 + name = "tinystr" 5246 + version = "0.8.2" 5247 + source = "registry+https://github.com/rust-lang/crates.io-index" 5248 + checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" 5249 + dependencies = [ 5250 + "displaydoc", 5251 + "serde_core", 5252 + "zerovec", 5253 + ] 5254 + 5255 + [[package]] 5256 + name = "tinyvec" 5257 + version = "1.10.0" 5258 + source = "registry+https://github.com/rust-lang/crates.io-index" 5259 + checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" 5260 + dependencies = [ 5261 + "tinyvec_macros", 5262 + ] 5263 + 5264 + [[package]] 5265 + name = "tinyvec_macros" 5266 + version = "0.1.1" 5267 + source = "registry+https://github.com/rust-lang/crates.io-index" 5268 + checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 5269 + 5270 + [[package]] 5271 + name = "titlecase" 5272 + version = "3.6.0" 5273 + source = "registry+https://github.com/rust-lang/crates.io-index" 5274 + checksum = "eb567088a91d59b492520c8149e2be5ce10d5deb2d9a383f3378df3259679d40" 5275 + dependencies = [ 5276 + "regex", 5277 + ] 5278 + 5279 + [[package]] 5280 + name = "tokio" 5281 + version = "1.48.0" 5282 + source = "registry+https://github.com/rust-lang/crates.io-index" 5283 + checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" 5284 + dependencies = [ 5285 + "bytes", 5286 + "libc", 5287 + "mio", 5288 + "pin-project-lite", 5289 + "socket2", 5290 + "tokio-macros", 5291 + "windows-sys 0.61.2", 5292 + ] 5293 + 5294 + [[package]] 5295 + name = "tokio-macros" 5296 + version = "2.6.0" 5297 + source = "registry+https://github.com/rust-lang/crates.io-index" 5298 + checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" 5299 + dependencies = [ 5300 + "proc-macro2", 5301 + "quote", 5302 + "syn 2.0.111", 5303 + ] 5304 + 5305 + [[package]] 5306 + name = "tokio-rustls" 5307 + version = "0.26.4" 5308 + source = "registry+https://github.com/rust-lang/crates.io-index" 5309 + checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" 5310 + dependencies = [ 5311 + "rustls", 5312 + "tokio", 5313 + ] 5314 + 5315 + [[package]] 5316 + name = "tokio-util" 5317 + version = "0.7.17" 5318 + source = "registry+https://github.com/rust-lang/crates.io-index" 5319 + checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" 5320 + dependencies = [ 5321 + "bytes", 5322 + "futures-core", 5323 + "futures-sink", 5324 + "futures-util", 5325 + "pin-project-lite", 5326 + "tokio", 5327 + ] 5328 + 5329 + [[package]] 5330 + name = "toml" 5331 + version = "0.8.23" 5332 + source = "registry+https://github.com/rust-lang/crates.io-index" 5333 + checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" 5334 + dependencies = [ 5335 + "indexmap 2.12.1", 5336 + "serde", 5337 + "serde_spanned", 5338 + "toml_datetime", 5339 + "toml_edit", 5340 + ] 5341 + 5342 + [[package]] 5343 + name = "toml_datetime" 5344 + version = "0.6.11" 5345 + source = "registry+https://github.com/rust-lang/crates.io-index" 5346 + checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" 5347 + dependencies = [ 5348 + "serde", 5349 + ] 5350 + 5351 + [[package]] 5352 + name = "toml_edit" 5353 + version = "0.22.27" 5354 + source = "registry+https://github.com/rust-lang/crates.io-index" 5355 + checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" 5356 + dependencies = [ 5357 + "indexmap 2.12.1", 5358 + "serde", 5359 + "serde_spanned", 5360 + "toml_datetime", 5361 + "toml_write", 5362 + "winnow", 5363 + ] 5364 + 5365 + [[package]] 5366 + name = "toml_write" 5367 + version = "0.1.2" 5368 + source = "registry+https://github.com/rust-lang/crates.io-index" 5369 + checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" 5370 + 5371 + [[package]] 5372 + name = "tower" 5373 + version = "0.5.2" 5374 + source = "registry+https://github.com/rust-lang/crates.io-index" 5375 + checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 5376 + dependencies = [ 5377 + "futures-core", 5378 + "futures-util", 5379 + "pin-project-lite", 5380 + "sync_wrapper", 5381 + "tokio", 5382 + "tower-layer", 5383 + "tower-service", 5384 + ] 5385 + 5386 + [[package]] 5387 + name = "tower-http" 5388 + version = "0.6.8" 5389 + source = "registry+https://github.com/rust-lang/crates.io-index" 5390 + checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" 5391 + dependencies = [ 5392 + "async-compression", 5393 + "bitflags", 5394 + "bytes", 5395 + "futures-core", 5396 + "futures-util", 5397 + "http", 5398 + "http-body", 5399 + "http-body-util", 5400 + "iri-string", 5401 + "pin-project-lite", 5402 + "tokio", 5403 + "tokio-util", 5404 + "tower", 5405 + "tower-layer", 5406 + "tower-service", 5407 + ] 5408 + 5409 + [[package]] 5410 + name = "tower-layer" 5411 + version = "0.3.3" 5412 + source = "registry+https://github.com/rust-lang/crates.io-index" 5413 + checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 5414 + 5415 + [[package]] 5416 + name = "tower-service" 5417 + version = "0.3.3" 5418 + source = "registry+https://github.com/rust-lang/crates.io-index" 5419 + checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 5420 + 5421 + [[package]] 5422 + name = "tracing" 5423 + version = "0.1.43" 5424 + source = "registry+https://github.com/rust-lang/crates.io-index" 5425 + checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" 5426 + dependencies = [ 5427 + "pin-project-lite", 5428 + "tracing-attributes", 5429 + "tracing-core", 5430 + ] 5431 + 5432 + [[package]] 5433 + name = "tracing-attributes" 5434 + version = "0.1.31" 5435 + source = "registry+https://github.com/rust-lang/crates.io-index" 5436 + checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" 5437 + dependencies = [ 5438 + "proc-macro2", 5439 + "quote", 5440 + "syn 2.0.111", 5441 + ] 5442 + 5443 + [[package]] 5444 + name = "tracing-core" 5445 + version = "0.1.35" 5446 + source = "registry+https://github.com/rust-lang/crates.io-index" 5447 + checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" 5448 + dependencies = [ 5449 + "once_cell", 5450 + "valuable", 5451 + ] 5452 + 5453 + [[package]] 5454 + name = "tracing-log" 5455 + version = "0.2.0" 5456 + source = "registry+https://github.com/rust-lang/crates.io-index" 5457 + checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 5458 + dependencies = [ 5459 + "log", 5460 + "once_cell", 5461 + "tracing-core", 5462 + ] 5463 + 5464 + [[package]] 5465 + name = "tracing-subscriber" 5466 + version = "0.3.22" 5467 + source = "registry+https://github.com/rust-lang/crates.io-index" 5468 + checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" 5469 + dependencies = [ 5470 + "matchers", 5471 + "nu-ansi-term", 5472 + "once_cell", 5473 + "regex-automata", 5474 + "sharded-slab", 5475 + "smallvec", 5476 + "thread_local", 5477 + "tracing", 5478 + "tracing-core", 5479 + "tracing-log", 5480 + ] 5481 + 5482 + [[package]] 5483 + name = "trait-variant" 5484 + version = "0.1.2" 5485 + source = "registry+https://github.com/rust-lang/crates.io-index" 5486 + checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" 5487 + dependencies = [ 5488 + "proc-macro2", 5489 + "quote", 5490 + "syn 2.0.111", 5491 + ] 5492 + 5493 + [[package]] 5494 + name = "triomphe" 5495 + version = "0.1.15" 5496 + source = "registry+https://github.com/rust-lang/crates.io-index" 5497 + checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" 5498 + 5499 + [[package]] 5500 + name = "try-lock" 5501 + version = "0.2.5" 5502 + source = "registry+https://github.com/rust-lang/crates.io-index" 5503 + checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 5504 + 5505 + [[package]] 5506 + name = "type-map" 5507 + version = "0.5.1" 5508 + source = "registry+https://github.com/rust-lang/crates.io-index" 5509 + checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" 5510 + dependencies = [ 5511 + "rustc-hash", 5512 + ] 5513 + 5514 + [[package]] 5515 + name = "typeid" 5516 + version = "1.0.3" 5517 + source = "registry+https://github.com/rust-lang/crates.io-index" 5518 + checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" 5519 + 5520 + [[package]] 5521 + name = "typenum" 5522 + version = "1.19.0" 5523 + source = "registry+https://github.com/rust-lang/crates.io-index" 5524 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 5525 + 5526 + [[package]] 5527 + name = "typetag" 5528 + version = "0.2.21" 5529 + source = "registry+https://github.com/rust-lang/crates.io-index" 5530 + checksum = "be2212c8a9b9bcfca32024de14998494cf9a5dfa59ea1b829de98bac374b86bf" 5531 + dependencies = [ 5532 + "erased-serde", 5533 + "inventory", 5534 + "once_cell", 5535 + "serde", 5536 + "typetag-impl", 5537 + ] 5538 + 5539 + [[package]] 5540 + name = "typetag-impl" 5541 + version = "0.2.21" 5542 + source = "registry+https://github.com/rust-lang/crates.io-index" 5543 + checksum = "27a7a9b72ba121f6f1f6c3632b85604cac41aedb5ddc70accbebb6cac83de846" 5544 + dependencies = [ 5545 + "proc-macro2", 5546 + "quote", 5547 + "syn 2.0.111", 5548 + ] 5549 + 5550 + [[package]] 5551 + name = "tz-rs" 5552 + version = "0.7.1" 5553 + source = "registry+https://github.com/rust-lang/crates.io-index" 5554 + checksum = "14eff19b8dc1ace5bf7e4d920b2628ae3837f422ff42210cb1567cbf68b5accf" 5555 + 5556 + [[package]] 5557 + name = "tzdb" 5558 + version = "0.7.3" 5559 + source = "registry+https://github.com/rust-lang/crates.io-index" 5560 + checksum = "56d4e985b6dda743ae7fd4140c28105316ffd75bc58258ee6cc12934e3eb7a0c" 5561 + dependencies = [ 5562 + "iana-time-zone", 5563 + "tz-rs", 5564 + "tzdb_data", 5565 + ] 5566 + 5567 + [[package]] 5568 + name = "tzdb_data" 5569 + version = "0.2.3" 5570 + source = "registry+https://github.com/rust-lang/crates.io-index" 5571 + checksum = "42302a846dea7ab786f42dc5f519387069045acff793e1178d9368414168fe95" 5572 + dependencies = [ 5573 + "tz-rs", 5574 + ] 5575 + 5576 + [[package]] 5577 + name = "ucd-trie" 5578 + version = "0.1.7" 5579 + source = "registry+https://github.com/rust-lang/crates.io-index" 5580 + checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" 5581 + 5582 + [[package]] 5583 + name = "uds_windows" 5584 + version = "1.1.0" 5585 + source = "registry+https://github.com/rust-lang/crates.io-index" 5586 + checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" 5587 + dependencies = [ 5588 + "memoffset", 5589 + "tempfile", 5590 + "winapi", 5591 + ] 5592 + 5593 + [[package]] 5594 + name = "umask" 5595 + version = "2.1.0" 5596 + source = "registry+https://github.com/rust-lang/crates.io-index" 5597 + checksum = "ec9a46c2549e35c054e0ffe281a3a6ec0007793db4df106604d37ed3f4d73d1c" 5598 + dependencies = [ 5599 + "thiserror 1.0.69", 5600 + ] 5601 + 5602 + [[package]] 5603 + name = "unic-langid" 5604 + version = "0.9.6" 5605 + source = "registry+https://github.com/rust-lang/crates.io-index" 5606 + checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" 5607 + dependencies = [ 5608 + "unic-langid-impl", 5609 + ] 5610 + 5611 + [[package]] 5612 + name = "unic-langid-impl" 5613 + version = "0.9.6" 5614 + source = "registry+https://github.com/rust-lang/crates.io-index" 5615 + checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" 5616 + dependencies = [ 5617 + "tinystr", 5618 + ] 5619 + 5620 + [[package]] 5621 + name = "unicase" 5622 + version = "2.8.1" 5623 + source = "registry+https://github.com/rust-lang/crates.io-index" 5624 + checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" 5625 + 5626 + [[package]] 5627 + name = "unicode-ident" 5628 + version = "1.0.22" 5629 + source = "registry+https://github.com/rust-lang/crates.io-index" 5630 + checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" 5631 + 5632 + [[package]] 5633 + name = "unicode-linebreak" 5634 + version = "0.1.5" 5635 + source = "registry+https://github.com/rust-lang/crates.io-index" 5636 + checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" 5637 + 5638 + [[package]] 5639 + name = "unicode-segmentation" 5640 + version = "1.12.0" 5641 + source = "registry+https://github.com/rust-lang/crates.io-index" 5642 + checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 5643 + 5644 + [[package]] 5645 + name = "unicode-width" 5646 + version = "0.1.14" 5647 + source = "registry+https://github.com/rust-lang/crates.io-index" 5648 + checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 5649 + 5650 + [[package]] 5651 + name = "unicode-width" 5652 + version = "0.2.2" 5653 + source = "registry+https://github.com/rust-lang/crates.io-index" 5654 + checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" 5655 + 5656 + [[package]] 5657 + name = "unicode-xid" 5658 + version = "0.2.6" 5659 + source = "registry+https://github.com/rust-lang/crates.io-index" 5660 + checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 5661 + 5662 + [[package]] 5663 + name = "unit-prefix" 5664 + version = "0.5.2" 5665 + source = "registry+https://github.com/rust-lang/crates.io-index" 5666 + checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3" 5667 + 5668 + [[package]] 5669 + name = "unsafe-libyaml" 5670 + version = "0.2.11" 5671 + source = "registry+https://github.com/rust-lang/crates.io-index" 5672 + checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" 5673 + 5674 + [[package]] 5675 + name = "unsigned-varint" 5676 + version = "0.7.2" 5677 + source = "registry+https://github.com/rust-lang/crates.io-index" 5678 + checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" 5679 + 5680 + [[package]] 5681 + name = "unsigned-varint" 5682 + version = "0.8.0" 5683 + source = "registry+https://github.com/rust-lang/crates.io-index" 5684 + checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" 5685 + 5686 + [[package]] 5687 + name = "untrusted" 5688 + version = "0.9.0" 5689 + source = "registry+https://github.com/rust-lang/crates.io-index" 5690 + checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 5691 + 5692 + [[package]] 5693 + name = "url" 5694 + version = "2.5.7" 5695 + source = "registry+https://github.com/rust-lang/crates.io-index" 5696 + checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" 5697 + dependencies = [ 5698 + "form_urlencoded", 5699 + "idna", 5700 + "percent-encoding", 5701 + "serde", 5702 + ] 5703 + 5704 + [[package]] 5705 + name = "urlencoding" 5706 + version = "2.1.3" 5707 + source = "registry+https://github.com/rust-lang/crates.io-index" 5708 + checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 5709 + 5710 + [[package]] 5711 + name = "utf-8" 5712 + version = "0.7.6" 5713 + source = "registry+https://github.com/rust-lang/crates.io-index" 5714 + checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 5715 + 5716 + [[package]] 5717 + name = "utf8_iter" 5718 + version = "1.0.4" 5719 + source = "registry+https://github.com/rust-lang/crates.io-index" 5720 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 5721 + 5722 + [[package]] 5723 + name = "utf8parse" 5724 + version = "0.2.2" 5725 + source = "registry+https://github.com/rust-lang/crates.io-index" 5726 + checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 5727 + 5728 + [[package]] 5729 + name = "uucore" 5730 + version = "0.4.0" 5731 + source = "registry+https://github.com/rust-lang/crates.io-index" 5732 + checksum = "2003164a38a7f39da1de103a70fa66b745f572f0045ec261481539516c0a8a0e" 5733 + dependencies = [ 5734 + "bstr", 5735 + "clap", 5736 + "fluent", 5737 + "fluent-bundle", 5738 + "fluent-syntax", 5739 + "libc", 5740 + "nix", 5741 + "number_prefix", 5742 + "os_display", 5743 + "phf 0.13.1", 5744 + "procfs 0.18.0", 5745 + "thiserror 2.0.17", 5746 + "unic-langid", 5747 + "uucore_procs", 5748 + "wild", 5749 + ] 5750 + 5751 + [[package]] 5752 + name = "uucore_procs" 5753 + version = "0.4.0" 5754 + source = "registry+https://github.com/rust-lang/crates.io-index" 5755 + checksum = "c76f0308f7810d915246a39748e7f5d64e43e6bb9d6c8107224f9d741aefc375" 5756 + dependencies = [ 5757 + "proc-macro2", 5758 + "quote", 5759 + ] 5760 + 5761 + [[package]] 5762 + name = "v_htmlescape" 5763 + version = "0.15.8" 5764 + source = "registry+https://github.com/rust-lang/crates.io-index" 5765 + checksum = "4e8257fbc510f0a46eb602c10215901938b5c2a7d5e70fc11483b1d3c9b5b18c" 5766 + 5767 + [[package]] 5768 + name = "valuable" 5769 + version = "0.1.1" 5770 + source = "registry+https://github.com/rust-lang/crates.io-index" 5771 + checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 5772 + 5773 + [[package]] 5774 + name = "version_check" 5775 + version = "0.9.5" 5776 + source = "registry+https://github.com/rust-lang/crates.io-index" 5777 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 5778 + 5779 + [[package]] 5780 + name = "vfs" 5781 + version = "0.12.1" 5782 + source = "git+https://github.com/landaire/rust-vfs?branch=fix%2Fwasm#c4341e8e7c16a019c1a1415fc8a413bf883a08d5" 5783 + dependencies = [ 5784 + "filetime", 5785 + ] 5786 + 5787 + [[package]] 5788 + name = "vte" 5789 + version = "0.14.1" 5790 + source = "registry+https://github.com/rust-lang/crates.io-index" 5791 + checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077" 5792 + dependencies = [ 5793 + "arrayvec", 5794 + "memchr", 5795 + ] 5796 + 5797 + [[package]] 5798 + name = "walkdir" 5799 + version = "2.5.0" 5800 + source = "registry+https://github.com/rust-lang/crates.io-index" 5801 + checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 5802 + dependencies = [ 5803 + "same-file", 5804 + "winapi-util", 5805 + ] 5806 + 5807 + [[package]] 5808 + name = "want" 5809 + version = "0.3.1" 5810 + source = "registry+https://github.com/rust-lang/crates.io-index" 5811 + checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 5812 + dependencies = [ 5813 + "try-lock", 5814 + ] 5815 + 5816 + [[package]] 5817 + name = "wasi" 5818 + version = "0.11.1+wasi-snapshot-preview1" 5819 + source = "registry+https://github.com/rust-lang/crates.io-index" 5820 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 5821 + 5822 + [[package]] 5823 + name = "wasip2" 5824 + version = "1.0.1+wasi-0.2.4" 5825 + source = "registry+https://github.com/rust-lang/crates.io-index" 5826 + checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" 5827 + dependencies = [ 5828 + "wit-bindgen", 5829 + ] 5830 + 5831 + [[package]] 5832 + name = "wasm-bindgen" 5833 + version = "0.2.106" 5834 + source = "registry+https://github.com/rust-lang/crates.io-index" 5835 + checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" 5836 + dependencies = [ 5837 + "cfg-if", 5838 + "once_cell", 5839 + "rustversion", 5840 + "wasm-bindgen-macro", 5841 + "wasm-bindgen-shared", 5842 + ] 5843 + 5844 + [[package]] 5845 + name = "wasm-bindgen-futures" 5846 + version = "0.4.56" 5847 + source = "registry+https://github.com/rust-lang/crates.io-index" 5848 + checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" 5849 + dependencies = [ 5850 + "cfg-if", 5851 + "js-sys", 5852 + "once_cell", 5853 + "wasm-bindgen", 5854 + "web-sys", 5855 + ] 5856 + 5857 + [[package]] 5858 + name = "wasm-bindgen-macro" 5859 + version = "0.2.106" 5860 + source = "registry+https://github.com/rust-lang/crates.io-index" 5861 + checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" 5862 + dependencies = [ 5863 + "quote", 5864 + "wasm-bindgen-macro-support", 5865 + ] 5866 + 5867 + [[package]] 5868 + name = "wasm-bindgen-macro-support" 5869 + version = "0.2.106" 5870 + source = "registry+https://github.com/rust-lang/crates.io-index" 5871 + checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" 5872 + dependencies = [ 5873 + "bumpalo", 5874 + "proc-macro2", 5875 + "quote", 5876 + "syn 2.0.111", 5877 + "wasm-bindgen-shared", 5878 + ] 5879 + 5880 + [[package]] 5881 + name = "wasm-bindgen-shared" 5882 + version = "0.2.106" 5883 + source = "registry+https://github.com/rust-lang/crates.io-index" 5884 + checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" 5885 + dependencies = [ 5886 + "unicode-ident", 5887 + ] 5888 + 5889 + [[package]] 5890 + name = "wax" 5891 + version = "0.6.0" 5892 + source = "registry+https://github.com/rust-lang/crates.io-index" 5893 + checksum = "8d12a78aa0bab22d2f26ed1a96df7ab58e8a93506a3e20adb47c51a93b4e1357" 5894 + dependencies = [ 5895 + "const_format", 5896 + "itertools 0.11.0", 5897 + "nom", 5898 + "pori", 5899 + "regex", 5900 + "thiserror 1.0.69", 5901 + "walkdir", 5902 + ] 5903 + 5904 + [[package]] 5905 + name = "web-sys" 5906 + version = "0.3.83" 5907 + source = "registry+https://github.com/rust-lang/crates.io-index" 5908 + checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" 5909 + dependencies = [ 5910 + "js-sys", 5911 + "wasm-bindgen", 5912 + ] 5913 + 5914 + [[package]] 5915 + name = "web-time" 5916 + version = "1.1.0" 5917 + source = "registry+https://github.com/rust-lang/crates.io-index" 5918 + checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 5919 + dependencies = [ 5920 + "js-sys", 5921 + "wasm-bindgen", 5922 + ] 5923 + 5924 + [[package]] 5925 + name = "webpage" 5926 + version = "2.0.1" 5927 + source = "registry+https://github.com/rust-lang/crates.io-index" 5928 + checksum = "70862efc041d46e6bbaa82bb9c34ae0596d090e86cbd14bd9e93b36ee6802eac" 5929 + dependencies = [ 5930 + "html5ever", 5931 + "markup5ever_rcdom", 5932 + "serde_json", 5933 + "url", 5934 + ] 5935 + 5936 + [[package]] 5937 + name = "webpki-roots" 5938 + version = "1.0.4" 5939 + source = "registry+https://github.com/rust-lang/crates.io-index" 5940 + checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e" 5941 + dependencies = [ 5942 + "rustls-pki-types", 5943 + ] 5944 + 5945 + [[package]] 5946 + name = "wild" 5947 + version = "2.2.1" 5948 + source = "registry+https://github.com/rust-lang/crates.io-index" 5949 + checksum = "a3131afc8c575281e1e80f36ed6a092aa502c08b18ed7524e86fbbb12bb410e1" 5950 + dependencies = [ 5951 + "glob", 5952 + ] 5953 + 5954 + [[package]] 5955 + name = "winapi" 5956 + version = "0.3.9" 5957 + source = "registry+https://github.com/rust-lang/crates.io-index" 5958 + checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 5959 + dependencies = [ 5960 + "winapi-i686-pc-windows-gnu", 5961 + "winapi-x86_64-pc-windows-gnu", 5962 + ] 5963 + 5964 + [[package]] 5965 + name = "winapi-i686-pc-windows-gnu" 5966 + version = "0.4.0" 5967 + source = "registry+https://github.com/rust-lang/crates.io-index" 5968 + checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 5969 + 5970 + [[package]] 5971 + name = "winapi-util" 5972 + version = "0.1.11" 5973 + source = "registry+https://github.com/rust-lang/crates.io-index" 5974 + checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 5975 + dependencies = [ 5976 + "windows-sys 0.61.2", 5977 + ] 5978 + 5979 + [[package]] 5980 + name = "winapi-x86_64-pc-windows-gnu" 5981 + version = "0.4.0" 5982 + source = "registry+https://github.com/rust-lang/crates.io-index" 5983 + checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 5984 + 5985 + [[package]] 5986 + name = "windows" 5987 + version = "0.61.3" 5988 + source = "registry+https://github.com/rust-lang/crates.io-index" 5989 + checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 5990 + dependencies = [ 5991 + "windows-collections 0.2.0", 5992 + "windows-core 0.61.2", 5993 + "windows-future 0.2.1", 5994 + "windows-link 0.1.3", 5995 + "windows-numerics 0.2.0", 5996 + ] 5997 + 5998 + [[package]] 5999 + name = "windows" 6000 + version = "0.62.2" 6001 + source = "registry+https://github.com/rust-lang/crates.io-index" 6002 + checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" 6003 + dependencies = [ 6004 + "windows-collections 0.3.2", 6005 + "windows-core 0.62.2", 6006 + "windows-future 0.3.2", 6007 + "windows-numerics 0.3.1", 6008 + ] 6009 + 6010 + [[package]] 6011 + name = "windows-collections" 6012 + version = "0.2.0" 6013 + source = "registry+https://github.com/rust-lang/crates.io-index" 6014 + checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 6015 + dependencies = [ 6016 + "windows-core 0.61.2", 6017 + ] 6018 + 6019 + [[package]] 6020 + name = "windows-collections" 6021 + version = "0.3.2" 6022 + source = "registry+https://github.com/rust-lang/crates.io-index" 6023 + checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" 6024 + dependencies = [ 6025 + "windows-core 0.62.2", 6026 + ] 6027 + 6028 + [[package]] 6029 + name = "windows-core" 6030 + version = "0.61.2" 6031 + source = "registry+https://github.com/rust-lang/crates.io-index" 6032 + checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 6033 + dependencies = [ 6034 + "windows-implement", 6035 + "windows-interface", 6036 + "windows-link 0.1.3", 6037 + "windows-result 0.3.4", 6038 + "windows-strings 0.4.2", 6039 + ] 6040 + 6041 + [[package]] 6042 + name = "windows-core" 6043 + version = "0.62.2" 6044 + source = "registry+https://github.com/rust-lang/crates.io-index" 6045 + checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" 6046 + dependencies = [ 6047 + "windows-implement", 6048 + "windows-interface", 6049 + "windows-link 0.2.1", 6050 + "windows-result 0.4.1", 6051 + "windows-strings 0.5.1", 6052 + ] 6053 + 6054 + [[package]] 6055 + name = "windows-future" 6056 + version = "0.2.1" 6057 + source = "registry+https://github.com/rust-lang/crates.io-index" 6058 + checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 6059 + dependencies = [ 6060 + "windows-core 0.61.2", 6061 + "windows-link 0.1.3", 6062 + "windows-threading 0.1.0", 6063 + ] 6064 + 6065 + [[package]] 6066 + name = "windows-future" 6067 + version = "0.3.2" 6068 + source = "registry+https://github.com/rust-lang/crates.io-index" 6069 + checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" 6070 + dependencies = [ 6071 + "windows-core 0.62.2", 6072 + "windows-link 0.2.1", 6073 + "windows-threading 0.2.1", 6074 + ] 6075 + 6076 + [[package]] 6077 + name = "windows-implement" 6078 + version = "0.60.2" 6079 + source = "registry+https://github.com/rust-lang/crates.io-index" 6080 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 6081 + dependencies = [ 6082 + "proc-macro2", 6083 + "quote", 6084 + "syn 2.0.111", 6085 + ] 6086 + 6087 + [[package]] 6088 + name = "windows-interface" 6089 + version = "0.59.3" 6090 + source = "registry+https://github.com/rust-lang/crates.io-index" 6091 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 6092 + dependencies = [ 6093 + "proc-macro2", 6094 + "quote", 6095 + "syn 2.0.111", 6096 + ] 6097 + 6098 + [[package]] 6099 + name = "windows-link" 6100 + version = "0.1.3" 6101 + source = "registry+https://github.com/rust-lang/crates.io-index" 6102 + checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 6103 + 6104 + [[package]] 6105 + name = "windows-link" 6106 + version = "0.2.1" 6107 + source = "registry+https://github.com/rust-lang/crates.io-index" 6108 + checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 6109 + 6110 + [[package]] 6111 + name = "windows-numerics" 6112 + version = "0.2.0" 6113 + source = "registry+https://github.com/rust-lang/crates.io-index" 6114 + checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 6115 + dependencies = [ 6116 + "windows-core 0.61.2", 6117 + "windows-link 0.1.3", 6118 + ] 6119 + 6120 + [[package]] 6121 + name = "windows-numerics" 6122 + version = "0.3.1" 6123 + source = "registry+https://github.com/rust-lang/crates.io-index" 6124 + checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" 6125 + dependencies = [ 6126 + "windows-core 0.62.2", 6127 + "windows-link 0.2.1", 6128 + ] 6129 + 6130 + [[package]] 6131 + name = "windows-registry" 6132 + version = "0.6.1" 6133 + source = "registry+https://github.com/rust-lang/crates.io-index" 6134 + checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" 6135 + dependencies = [ 6136 + "windows-link 0.2.1", 6137 + "windows-result 0.4.1", 6138 + "windows-strings 0.5.1", 6139 + ] 6140 + 6141 + [[package]] 6142 + name = "windows-result" 6143 + version = "0.3.4" 6144 + source = "registry+https://github.com/rust-lang/crates.io-index" 6145 + checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 6146 + dependencies = [ 6147 + "windows-link 0.1.3", 6148 + ] 6149 + 6150 + [[package]] 6151 + name = "windows-result" 6152 + version = "0.4.1" 6153 + source = "registry+https://github.com/rust-lang/crates.io-index" 6154 + checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" 6155 + dependencies = [ 6156 + "windows-link 0.2.1", 6157 + ] 6158 + 6159 + [[package]] 6160 + name = "windows-strings" 6161 + version = "0.4.2" 6162 + source = "registry+https://github.com/rust-lang/crates.io-index" 6163 + checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 6164 + dependencies = [ 6165 + "windows-link 0.1.3", 6166 + ] 6167 + 6168 + [[package]] 6169 + name = "windows-strings" 6170 + version = "0.5.1" 6171 + source = "registry+https://github.com/rust-lang/crates.io-index" 6172 + checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 6173 + dependencies = [ 6174 + "windows-link 0.2.1", 6175 + ] 6176 + 6177 + [[package]] 6178 + name = "windows-sys" 6179 + version = "0.48.0" 6180 + source = "registry+https://github.com/rust-lang/crates.io-index" 6181 + checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 6182 + dependencies = [ 6183 + "windows-targets 0.48.5", 6184 + ] 6185 + 6186 + [[package]] 6187 + name = "windows-sys" 6188 + version = "0.52.0" 6189 + source = "registry+https://github.com/rust-lang/crates.io-index" 6190 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 6191 + dependencies = [ 6192 + "windows-targets 0.52.6", 6193 + ] 6194 + 6195 + [[package]] 6196 + name = "windows-sys" 6197 + version = "0.59.0" 6198 + source = "registry+https://github.com/rust-lang/crates.io-index" 6199 + checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 6200 + dependencies = [ 6201 + "windows-targets 0.52.6", 6202 + ] 6203 + 6204 + [[package]] 6205 + name = "windows-sys" 6206 + version = "0.60.2" 6207 + source = "registry+https://github.com/rust-lang/crates.io-index" 6208 + checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 6209 + dependencies = [ 6210 + "windows-targets 0.53.5", 6211 + ] 6212 + 6213 + [[package]] 6214 + name = "windows-sys" 6215 + version = "0.61.2" 6216 + source = "registry+https://github.com/rust-lang/crates.io-index" 6217 + checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 6218 + dependencies = [ 6219 + "windows-link 0.2.1", 6220 + ] 6221 + 6222 + [[package]] 6223 + name = "windows-targets" 6224 + version = "0.48.5" 6225 + source = "registry+https://github.com/rust-lang/crates.io-index" 6226 + checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 6227 + dependencies = [ 6228 + "windows_aarch64_gnullvm 0.48.5", 6229 + "windows_aarch64_msvc 0.48.5", 6230 + "windows_i686_gnu 0.48.5", 6231 + "windows_i686_msvc 0.48.5", 6232 + "windows_x86_64_gnu 0.48.5", 6233 + "windows_x86_64_gnullvm 0.48.5", 6234 + "windows_x86_64_msvc 0.48.5", 6235 + ] 6236 + 6237 + [[package]] 6238 + name = "windows-targets" 6239 + version = "0.52.6" 6240 + source = "registry+https://github.com/rust-lang/crates.io-index" 6241 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 6242 + dependencies = [ 6243 + "windows_aarch64_gnullvm 0.52.6", 6244 + "windows_aarch64_msvc 0.52.6", 6245 + "windows_i686_gnu 0.52.6", 6246 + "windows_i686_gnullvm 0.52.6", 6247 + "windows_i686_msvc 0.52.6", 6248 + "windows_x86_64_gnu 0.52.6", 6249 + "windows_x86_64_gnullvm 0.52.6", 6250 + "windows_x86_64_msvc 0.52.6", 6251 + ] 6252 + 6253 + [[package]] 6254 + name = "windows-targets" 6255 + version = "0.53.5" 6256 + source = "registry+https://github.com/rust-lang/crates.io-index" 6257 + checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 6258 + dependencies = [ 6259 + "windows-link 0.2.1", 6260 + "windows_aarch64_gnullvm 0.53.1", 6261 + "windows_aarch64_msvc 0.53.1", 6262 + "windows_i686_gnu 0.53.1", 6263 + "windows_i686_gnullvm 0.53.1", 6264 + "windows_i686_msvc 0.53.1", 6265 + "windows_x86_64_gnu 0.53.1", 6266 + "windows_x86_64_gnullvm 0.53.1", 6267 + "windows_x86_64_msvc 0.53.1", 6268 + ] 6269 + 6270 + [[package]] 6271 + name = "windows-threading" 6272 + version = "0.1.0" 6273 + source = "registry+https://github.com/rust-lang/crates.io-index" 6274 + checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 6275 + dependencies = [ 6276 + "windows-link 0.1.3", 6277 + ] 6278 + 6279 + [[package]] 6280 + name = "windows-threading" 6281 + version = "0.2.1" 6282 + source = "registry+https://github.com/rust-lang/crates.io-index" 6283 + checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" 6284 + dependencies = [ 6285 + "windows-link 0.2.1", 6286 + ] 6287 + 6288 + [[package]] 6289 + name = "windows_aarch64_gnullvm" 6290 + version = "0.48.5" 6291 + source = "registry+https://github.com/rust-lang/crates.io-index" 6292 + checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 6293 + 6294 + [[package]] 6295 + name = "windows_aarch64_gnullvm" 6296 + version = "0.52.6" 6297 + source = "registry+https://github.com/rust-lang/crates.io-index" 6298 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 6299 + 6300 + [[package]] 6301 + name = "windows_aarch64_gnullvm" 6302 + version = "0.53.1" 6303 + source = "registry+https://github.com/rust-lang/crates.io-index" 6304 + checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 6305 + 6306 + [[package]] 6307 + name = "windows_aarch64_msvc" 6308 + version = "0.48.5" 6309 + source = "registry+https://github.com/rust-lang/crates.io-index" 6310 + checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 6311 + 6312 + [[package]] 6313 + name = "windows_aarch64_msvc" 6314 + version = "0.52.6" 6315 + source = "registry+https://github.com/rust-lang/crates.io-index" 6316 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 6317 + 6318 + [[package]] 6319 + name = "windows_aarch64_msvc" 6320 + version = "0.53.1" 6321 + source = "registry+https://github.com/rust-lang/crates.io-index" 6322 + checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 6323 + 6324 + [[package]] 6325 + name = "windows_i686_gnu" 6326 + version = "0.48.5" 6327 + source = "registry+https://github.com/rust-lang/crates.io-index" 6328 + checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 6329 + 6330 + [[package]] 6331 + name = "windows_i686_gnu" 6332 + version = "0.52.6" 6333 + source = "registry+https://github.com/rust-lang/crates.io-index" 6334 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 6335 + 6336 + [[package]] 6337 + name = "windows_i686_gnu" 6338 + version = "0.53.1" 6339 + source = "registry+https://github.com/rust-lang/crates.io-index" 6340 + checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 6341 + 6342 + [[package]] 6343 + name = "windows_i686_gnullvm" 6344 + version = "0.52.6" 6345 + source = "registry+https://github.com/rust-lang/crates.io-index" 6346 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 6347 + 6348 + [[package]] 6349 + name = "windows_i686_gnullvm" 6350 + version = "0.53.1" 6351 + source = "registry+https://github.com/rust-lang/crates.io-index" 6352 + checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 6353 + 6354 + [[package]] 6355 + name = "windows_i686_msvc" 6356 + version = "0.48.5" 6357 + source = "registry+https://github.com/rust-lang/crates.io-index" 6358 + checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 6359 + 6360 + [[package]] 6361 + name = "windows_i686_msvc" 6362 + version = "0.52.6" 6363 + source = "registry+https://github.com/rust-lang/crates.io-index" 6364 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 6365 + 6366 + [[package]] 6367 + name = "windows_i686_msvc" 6368 + version = "0.53.1" 6369 + source = "registry+https://github.com/rust-lang/crates.io-index" 6370 + checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 6371 + 6372 + [[package]] 6373 + name = "windows_x86_64_gnu" 6374 + version = "0.48.5" 6375 + source = "registry+https://github.com/rust-lang/crates.io-index" 6376 + checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 6377 + 6378 + [[package]] 6379 + name = "windows_x86_64_gnu" 6380 + version = "0.52.6" 6381 + source = "registry+https://github.com/rust-lang/crates.io-index" 6382 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 6383 + 6384 + [[package]] 6385 + name = "windows_x86_64_gnu" 6386 + version = "0.53.1" 6387 + source = "registry+https://github.com/rust-lang/crates.io-index" 6388 + checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 6389 + 6390 + [[package]] 6391 + name = "windows_x86_64_gnullvm" 6392 + version = "0.48.5" 6393 + source = "registry+https://github.com/rust-lang/crates.io-index" 6394 + checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 6395 + 6396 + [[package]] 6397 + name = "windows_x86_64_gnullvm" 6398 + version = "0.52.6" 6399 + source = "registry+https://github.com/rust-lang/crates.io-index" 6400 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 6401 + 6402 + [[package]] 6403 + name = "windows_x86_64_gnullvm" 6404 + version = "0.53.1" 6405 + source = "registry+https://github.com/rust-lang/crates.io-index" 6406 + checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 6407 + 6408 + [[package]] 6409 + name = "windows_x86_64_msvc" 6410 + version = "0.48.5" 6411 + source = "registry+https://github.com/rust-lang/crates.io-index" 6412 + checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 6413 + 6414 + [[package]] 6415 + name = "windows_x86_64_msvc" 6416 + version = "0.52.6" 6417 + source = "registry+https://github.com/rust-lang/crates.io-index" 6418 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 6419 + 6420 + [[package]] 6421 + name = "windows_x86_64_msvc" 6422 + version = "0.53.1" 6423 + source = "registry+https://github.com/rust-lang/crates.io-index" 6424 + checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 6425 + 6426 + [[package]] 6427 + name = "winnow" 6428 + version = "0.7.14" 6429 + source = "registry+https://github.com/rust-lang/crates.io-index" 6430 + checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" 6431 + dependencies = [ 6432 + "memchr", 6433 + ] 6434 + 6435 + [[package]] 6436 + name = "winreg" 6437 + version = "0.52.0" 6438 + source = "registry+https://github.com/rust-lang/crates.io-index" 6439 + checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" 6440 + dependencies = [ 6441 + "cfg-if", 6442 + "windows-sys 0.48.0", 6443 + ] 6444 + 6445 + [[package]] 6446 + name = "wit-bindgen" 6447 + version = "0.46.0" 6448 + source = "registry+https://github.com/rust-lang/crates.io-index" 6449 + checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" 6450 + 6451 + [[package]] 6452 + name = "writeable" 6453 + version = "0.6.2" 6454 + source = "registry+https://github.com/rust-lang/crates.io-index" 6455 + checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" 6456 + 6457 + [[package]] 6458 + name = "xml5ever" 6459 + version = "0.18.1" 6460 + source = "registry+https://github.com/rust-lang/crates.io-index" 6461 + checksum = "9bbb26405d8e919bc1547a5aa9abc95cbfa438f04844f5fdd9dc7596b748bf69" 6462 + dependencies = [ 6463 + "log", 6464 + "mac", 6465 + "markup5ever", 6466 + ] 6467 + 6468 + [[package]] 6469 + name = "yansi" 6470 + version = "1.0.1" 6471 + source = "registry+https://github.com/rust-lang/crates.io-index" 6472 + checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" 6473 + 6474 + [[package]] 6475 + name = "yoke" 6476 + version = "0.8.1" 6477 + source = "registry+https://github.com/rust-lang/crates.io-index" 6478 + checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" 6479 + dependencies = [ 6480 + "stable_deref_trait", 6481 + "yoke-derive", 6482 + "zerofrom", 6483 + ] 6484 + 6485 + [[package]] 6486 + name = "yoke-derive" 6487 + version = "0.8.1" 6488 + source = "registry+https://github.com/rust-lang/crates.io-index" 6489 + checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" 6490 + dependencies = [ 6491 + "proc-macro2", 6492 + "quote", 6493 + "syn 2.0.111", 6494 + "synstructure", 6495 + ] 6496 + 6497 + [[package]] 6498 + name = "zerocopy" 6499 + version = "0.7.35" 6500 + source = "registry+https://github.com/rust-lang/crates.io-index" 6501 + checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 6502 + dependencies = [ 6503 + "byteorder", 6504 + "zerocopy-derive 0.7.35", 6505 + ] 6506 + 6507 + [[package]] 6508 + name = "zerocopy" 6509 + version = "0.8.31" 6510 + source = "registry+https://github.com/rust-lang/crates.io-index" 6511 + checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" 6512 + dependencies = [ 6513 + "zerocopy-derive 0.8.31", 6514 + ] 6515 + 6516 + [[package]] 6517 + name = "zerocopy-derive" 6518 + version = "0.7.35" 6519 + source = "registry+https://github.com/rust-lang/crates.io-index" 6520 + checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 6521 + dependencies = [ 6522 + "proc-macro2", 6523 + "quote", 6524 + "syn 2.0.111", 6525 + ] 6526 + 6527 + [[package]] 6528 + name = "zerocopy-derive" 6529 + version = "0.8.31" 6530 + source = "registry+https://github.com/rust-lang/crates.io-index" 6531 + checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" 6532 + dependencies = [ 6533 + "proc-macro2", 6534 + "quote", 6535 + "syn 2.0.111", 6536 + ] 6537 + 6538 + [[package]] 6539 + name = "zerofrom" 6540 + version = "0.1.6" 6541 + source = "registry+https://github.com/rust-lang/crates.io-index" 6542 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 6543 + dependencies = [ 6544 + "zerofrom-derive", 6545 + ] 6546 + 6547 + [[package]] 6548 + name = "zerofrom-derive" 6549 + version = "0.1.6" 6550 + source = "registry+https://github.com/rust-lang/crates.io-index" 6551 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 6552 + dependencies = [ 6553 + "proc-macro2", 6554 + "quote", 6555 + "syn 2.0.111", 6556 + "synstructure", 6557 + ] 6558 + 6559 + [[package]] 6560 + name = "zeroize" 6561 + version = "1.8.2" 6562 + source = "registry+https://github.com/rust-lang/crates.io-index" 6563 + checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" 6564 + dependencies = [ 6565 + "serde", 6566 + ] 6567 + 6568 + [[package]] 6569 + name = "zerotrie" 6570 + version = "0.2.3" 6571 + source = "registry+https://github.com/rust-lang/crates.io-index" 6572 + checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" 6573 + dependencies = [ 6574 + "displaydoc", 6575 + "yoke", 6576 + "zerofrom", 6577 + ] 6578 + 6579 + [[package]] 6580 + name = "zerovec" 6581 + version = "0.11.5" 6582 + source = "registry+https://github.com/rust-lang/crates.io-index" 6583 + checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" 6584 + dependencies = [ 6585 + "serde", 6586 + "yoke", 6587 + "zerofrom", 6588 + "zerovec-derive", 6589 + ] 6590 + 6591 + [[package]] 6592 + name = "zerovec-derive" 6593 + version = "0.11.2" 6594 + source = "registry+https://github.com/rust-lang/crates.io-index" 6595 + checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" 6596 + dependencies = [ 6597 + "proc-macro2", 6598 + "quote", 6599 + "syn 2.0.111", 6600 + ] 6601 + 6602 + [[package]] 6603 + name = "zip" 6604 + version = "4.6.1" 6605 + source = "registry+https://github.com/rust-lang/crates.io-index" 6606 + checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" 6607 + dependencies = [ 6608 + "arbitrary", 6609 + "crc32fast", 6610 + "flate2", 6611 + "indexmap 2.12.1", 6612 + "memchr", 6613 + "zopfli", 6614 + ] 6615 + 6616 + [[package]] 6617 + name = "zlib-rs" 6618 + version = "0.5.4" 6619 + source = "registry+https://github.com/rust-lang/crates.io-index" 6620 + checksum = "51f936044d677be1a1168fae1d03b583a285a5dd9d8cbf7b24c23aa1fc775235" 6621 + 6622 + [[package]] 6623 + name = "zopfli" 6624 + version = "0.8.3" 6625 + source = "registry+https://github.com/rust-lang/crates.io-index" 6626 + checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" 6627 + dependencies = [ 6628 + "bumpalo", 6629 + "crc32fast", 6630 + "log", 6631 + "simd-adler32", 6632 + ]
+46
dysnomia/Cargo.toml
··· 1 + [package] 2 + name = "dysnomia-sh" 3 + version = "0.1.0" 4 + edition = "2024" 5 + 6 + [lib] 7 + crate-type = ["cdylib"] 8 + 9 + [dependencies] 10 + wasm-bindgen = "0.2" 11 + wasm-bindgen-futures = "0.4" 12 + getrandom = { version = "0.3", features = ["wasm_js"] } 13 + web-sys = { version = "0.3", features = ["console", "Window"] } 14 + vfs = { version = "0.12" } 15 + nu-cmd-lang = { version = "0.109.1", default-features = false } 16 + nu-command = { version = "0.109.1", default-features = false } 17 + nu-engine = { version = "0.109.1", default-features = false } 18 + nu-parser = { version = "0.109.1", default-features = false } 19 + nu-protocol = { version = "0.109.1", default-features = false } 20 + nu-cmd-extra = { version = "0.109.1", default-features = false } 21 + serde = { version = "1.0", features = ["derive"] } 22 + serde_json = "1" 23 + miette = { version = "7.6", features = ["fancy"] } 24 + ansi_term = "0.12.1" 25 + 26 + anyhow = "1" 27 + jacquard = { path = "../../jacquard/crates/jacquard", default-features = false, features = ["api", "cache"] } 28 + jacquard-repo = { path = "../../jacquard/crates/jacquard-repo" } 29 + url = "2" 30 + futures = "0.3.31" 31 + js-sys = "0.3.83" 32 + serde_ipld_dagcbor = "0.6.4" 33 + reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] } 34 + console_error_panic_hook = "0.1.7" 35 + 36 + scc = "3" 37 + rapidhash = { version = "4", features = ["unsafe"] } 38 + 39 + [patch.crates-io] 40 + vfs = { git = "https://github.com/landaire/rust-vfs", branch = "fix/wasm" } 41 + 42 + [profile.release] 43 + opt-level = 3 44 + lto = true 45 + codegen-units = 1 46 + strip = true
+64
dysnomia/src/cmd/cd.rs
··· 1 + use crate::globals::{get_pwd, get_vfs, set_pwd, to_shell_err}; 2 + use nu_engine::CallExt; 3 + use nu_protocol::{ 4 + Category, PipelineData, ShellError, Signature, SyntaxShape, 5 + engine::{Command, EngineState, Stack}, 6 + }; 7 + use std::sync::Arc; 8 + use vfs::VfsFileType; 9 + 10 + #[derive(Clone)] 11 + pub struct Cd; 12 + 13 + impl Command for Cd { 14 + fn name(&self) -> &str { 15 + "cd" 16 + } 17 + 18 + fn signature(&self) -> Signature { 19 + Signature::build("cd") 20 + .optional("path", SyntaxShape::String, "the path to change into") 21 + .category(Category::FileSystem) 22 + } 23 + 24 + fn description(&self) -> &str { 25 + "change the current directory in the virtual filesystem." 26 + } 27 + 28 + fn run( 29 + &self, 30 + engine_state: &EngineState, 31 + _stack: &mut Stack, 32 + call: &nu_protocol::engine::Call, 33 + _input: PipelineData, 34 + ) -> Result<PipelineData, ShellError> { 35 + let path_arg: Option<String> = call.opt(engine_state, _stack, 0)?; 36 + let path = path_arg.unwrap_or_else(|| "/".to_string()); 37 + 38 + let base: Arc<vfs::VfsPath> = if path.starts_with('/') { 39 + get_vfs() 40 + } else { 41 + get_pwd().clone() 42 + }; 43 + 44 + let target = base 45 + .join(path.trim_end_matches('/')) 46 + .map_err(to_shell_err(call.head))?; 47 + 48 + // Ensure target exists and is a directory 49 + let metadata = target.metadata().map_err(to_shell_err(call.head))?; 50 + match metadata.file_type { 51 + VfsFileType::Directory => { 52 + set_pwd(Arc::new(target)); 53 + Ok(PipelineData::Empty) 54 + } 55 + VfsFileType::File => Err(ShellError::GenericError { 56 + error: "not a directory".to_string(), 57 + msg: format!("'{}' is not a directory", path), 58 + span: Some(call.head), 59 + help: None, 60 + inner: vec![], 61 + }), 62 + } 63 + } 64 + }
+338
dysnomia/src/cmd/fetch.rs
··· 1 + use crate::globals::{get_pwd, print_to_console, register_task, remove_task, to_shell_err}; 2 + use anyhow::{Result, anyhow}; 3 + use futures::future::{AbortHandle, Abortable}; 4 + use jacquard::types::aturi::AtUri; 5 + use jacquard::types::ident::AtIdentifier; 6 + use jacquard::types::string::Rkey; 7 + use jacquard::{ 8 + api::com_atproto::{ 9 + repo::{get_record::GetRecord, list_records::ListRecords}, 10 + sync::get_repo::GetRepo, 11 + }, 12 + client::{Agent, MemorySessionStore, credential_session::CredentialSession}, 13 + identity::{resolver::IdentityResolver, slingshot_resolver_default}, 14 + prelude::*, 15 + types::{did::Did, nsid::Nsid}, 16 + }; 17 + use jacquard_repo::{ 18 + Repository, 19 + car::parse_car_bytes, 20 + storage::{BlockStore, MemoryBlockStore}, 21 + }; 22 + use nu_engine::CallExt; 23 + use nu_protocol::IntoPipelineData; 24 + use nu_protocol::{ 25 + Category, PipelineData, ShellError, Signature, SyntaxShape, Value, 26 + engine::{Command, EngineState, Stack}, 27 + }; 28 + use std::io::Write; 29 + use std::str::FromStr; 30 + use std::sync::Arc; 31 + use url::Url; 32 + use wasm_bindgen_futures::spawn_local; 33 + 34 + #[derive(Clone)] 35 + pub struct Fetch; 36 + 37 + impl Command for Fetch { 38 + fn name(&self) -> &str { 39 + "fetch" 40 + } 41 + 42 + fn signature(&self) -> Signature { 43 + Signature::build(self.name()) 44 + .required( 45 + "uri", 46 + SyntaxShape::String, 47 + "HTTP URI or AT URI (at://identifier[/collection[/rkey]])", 48 + ) 49 + .named("output", SyntaxShape::Filepath, "output path", Some('o')) 50 + .category(Category::Network) 51 + } 52 + 53 + fn description(&self) -> &str { 54 + "fetch files using HTTP or fetch records from an AT Protocol repository.\nsupports full repo (CAR), collection, or a single record." 55 + } 56 + 57 + fn run( 58 + &self, 59 + engine_state: &EngineState, 60 + stack: &mut Stack, 61 + call: &nu_protocol::engine::Call, 62 + _input: PipelineData, 63 + ) -> Result<PipelineData, ShellError> { 64 + let uri_arg: String = call.req(engine_state, stack, 0)?; 65 + let output_arg: Option<String> = call.get_flag(engine_state, stack, "output")?; 66 + let output_span = call.get_flag_span(stack, "output"); 67 + 68 + let at_uri = uri_arg 69 + .starts_with("at://") 70 + .then(|| { 71 + AtUri::from_str(&uri_arg).map_err(|err| ShellError::GenericError { 72 + error: "invalid AT URI format".into(), 73 + msg: err.to_string(), 74 + span: Some(call.arguments_span()), 75 + help: None, 76 + inner: vec![], 77 + }) 78 + }) 79 + .transpose()?; 80 + let uri = at_uri 81 + .is_none() 82 + .then(|| { 83 + Url::from_str(&uri_arg).map_err(|err| ShellError::GenericError { 84 + error: "invalid URI format".into(), 85 + msg: err.to_string(), 86 + span: Some(call.arguments_span()), 87 + help: None, 88 + inner: vec![], 89 + }) 90 + }) 91 + .transpose()?; 92 + 93 + // Determine target directory 94 + let pwd = get_pwd(); 95 + let base_dir = if let Some(out) = output_arg.as_ref() { 96 + pwd.join(out.trim_end_matches('/')) 97 + .map_err(to_shell_err(output_span.unwrap()))? 98 + } else { 99 + pwd.join("").unwrap() 100 + }; 101 + 102 + let final_path = if let Some(at_uri) = at_uri.as_ref() { 103 + match (at_uri.collection(), at_uri.rkey()) { 104 + (None, _) => base_dir 105 + .join(at_uri.authority()) 106 + .map_err(to_shell_err(call.span()))?, 107 + (Some(collection), None) => base_dir 108 + .join(collection) 109 + .map_err(to_shell_err(call.span()))?, 110 + // use rkey as file name 111 + (Some(_), Some(rkey)) => output_arg 112 + .is_some() 113 + .then(|| Ok(base_dir.clone())) 114 + .unwrap_or_else(|| base_dir.join(&rkey.0).map_err(to_shell_err(call.span())))?, 115 + } 116 + } else if let Some(uri) = uri.as_ref() { 117 + // choose file name from uri 118 + output_arg 119 + .is_some() 120 + .then(|| Ok(base_dir.clone())) 121 + .unwrap_or_else(|| { 122 + base_dir 123 + .join( 124 + uri.path() 125 + .split('/') 126 + .rfind(|a| !a.is_empty()) 127 + .unwrap_or("index"), 128 + ) 129 + .map_err(to_shell_err(call.span())) 130 + })? 131 + } else { 132 + // todo: make these into an enum so we dont need this 133 + unreachable!("either of at_uri or uri should be set") 134 + }; 135 + 136 + if !final_path.exists().map_err(to_shell_err(call.span()))? { 137 + // if http uri or at uri with rkey, we create parent dir since we'll 138 + // write just a single file, otherwise we create this path as directory 139 + if at_uri.as_ref().map_or(true, |at| at.rkey().is_some()) { 140 + final_path 141 + .parent() 142 + .create_dir_all() 143 + .map_err(to_shell_err(call.span()))?; 144 + } else { 145 + final_path 146 + .create_dir_all() 147 + .map_err(to_shell_err(call.span()))?; 148 + } 149 + } 150 + 151 + let (abort_handle, abort_registration) = AbortHandle::new_pair(); 152 + let task_desc = format!("{name} {uri_arg}", name = self.name()); 153 + let task_id = register_task(task_desc.clone(), abort_handle); 154 + 155 + spawn_local(async move { 156 + let task_future = async { 157 + if let Some(at_uri) = at_uri { 158 + let identifier = at_uri.authority().clone(); 159 + match (at_uri.collection(), at_uri.rkey()) { 160 + (Some(coll), Some(key)) => { 161 + fetch_record(identifier, coll.clone(), key.0.clone(), final_path).await 162 + } 163 + (Some(coll), None) => { 164 + fetch_collection(identifier, coll.clone(), final_path).await 165 + } 166 + _ => fetch_repo(identifier, final_path).await, 167 + } 168 + } else if let Some(uri) = uri { 169 + fetch_file(uri, final_path).await 170 + } else { 171 + Ok(()) 172 + } 173 + }; 174 + 175 + let abortable = Abortable::new(task_future, abort_registration); 176 + 177 + match abortable.await { 178 + Ok(result) => { 179 + remove_task(task_id); 180 + match result { 181 + Ok(_) => {} 182 + Err(e) => { 183 + print_to_console( 184 + &format!("\x1b[31m✖\x1b[0m ({task_desc}) error: {e}"), 185 + false, 186 + ); 187 + } 188 + } 189 + } 190 + Err(_) => { 191 + remove_task(task_id); 192 + } 193 + } 194 + }); 195 + 196 + Ok(Value::nothing(call.head).into_pipeline_data()) 197 + } 198 + } 199 + 200 + async fn fetch_file(uri: Url, target_path: vfs::VfsPath) -> Result<()> { 201 + let response = reqwest::get(uri).await?; 202 + let content = response.bytes().await?; 203 + target_path.create_file()?.write_all(&content)?; 204 + Ok(()) 205 + } 206 + 207 + async fn resolve_did(identifier: AtIdentifier<'_>) -> Result<Did<'_>> { 208 + match identifier { 209 + AtIdentifier::Did(did) => Ok(did), 210 + AtIdentifier::Handle(handle) => { 211 + let did = slingshot_resolver_default().resolve_handle(&handle).await?; 212 + Ok(did) 213 + } 214 + } 215 + } 216 + 217 + async fn resolve_pds(did: &Did<'_>) -> Result<Url> { 218 + slingshot_resolver_default() 219 + .resolve_did_doc(did) 220 + .await? 221 + .parse()? 222 + .pds_endpoint() 223 + .ok_or_else(|| anyhow!("no pds endpoint in did doc")) 224 + } 225 + 226 + async fn create_agent(pds: Url) -> BasicClient { 227 + let store = MemorySessionStore::default(); 228 + let session = CredentialSession::new(Arc::new(store), Arc::new(slingshot_resolver_default())); 229 + session.set_endpoint(pds).await; 230 + Agent::new(session) 231 + } 232 + 233 + async fn fetch_record( 234 + identifier: AtIdentifier<'_>, 235 + collection: Nsid<'_>, 236 + rkey: Rkey<'_>, 237 + target_path: vfs::VfsPath, 238 + ) -> anyhow::Result<()> { 239 + let did = resolve_did(identifier).await?; 240 + let pds = resolve_pds(&did).await?; 241 + let client = create_agent(pds).await; 242 + 243 + let nsid = Nsid::new(&collection)?; 244 + 245 + let request = GetRecord::new() 246 + .repo(did) 247 + .collection(nsid) 248 + .rkey(rkey.clone()); 249 + 250 + let output = client.send(request.build()).await?.into_output()?; 251 + let file = target_path.create_file()?; 252 + serde_json::to_writer_pretty(file, &output.value)?; 253 + 254 + Ok(()) 255 + } 256 + 257 + async fn fetch_collection( 258 + identifier: AtIdentifier<'_>, 259 + collection: Nsid<'_>, 260 + target_path: vfs::VfsPath, 261 + ) -> anyhow::Result<()> { 262 + let did = resolve_did(identifier).await?; 263 + let pds = resolve_pds(&did).await?; 264 + let client = create_agent(pds).await; 265 + 266 + let mut cursor: Option<String> = None; 267 + 268 + loop { 269 + let request = ListRecords::new() 270 + .repo(did.clone()) 271 + .collection(collection.clone()) 272 + .limit(100) 273 + .cursor(cursor.map(Into::into)); 274 + 275 + let response = client.send(request.build()).await?; 276 + 277 + let output = response.into_output()?; 278 + 279 + for rec in output.records { 280 + if let Some(rkey) = rec.uri.rkey() { 281 + let file = target_path.join(&rkey.0)?.create_file()?; 282 + serde_json::to_writer_pretty(file, &rec.value)?; 283 + } 284 + } 285 + 286 + if let Some(c) = output.cursor { 287 + cursor = Some(c.into()); 288 + } else { 289 + break; 290 + } 291 + } 292 + 293 + Ok(()) 294 + } 295 + 296 + async fn fetch_repo(identifier: AtIdentifier<'_>, target_path: vfs::VfsPath) -> Result<()> { 297 + let did = resolve_did(identifier).await?; 298 + let pds = resolve_pds(&did).await?; 299 + let client = create_agent(pds).await; 300 + 301 + let response = client.send(GetRepo::new().did(did).build()).await?; 302 + 303 + // parse the car and create the repo 304 + let car_bytes = response.into_output()?.body; 305 + let parsed = parse_car_bytes(&car_bytes).await?; 306 + let storage = Arc::new(MemoryBlockStore::new_from_blocks(parsed.blocks)); 307 + let repo = Repository::from_commit(storage, &parsed.root).await?; 308 + 309 + // Iterate over all leaves in the MST 310 + // repo.mst() gives us the Mst<S> 311 + // mst.leaves() returns Vec<(SmolStr, IpldCid)> 312 + let leaves = repo.mst().leaves_sequential().await?; 313 + 314 + for (key, cid) in leaves { 315 + // key format: collection/rkey 316 + let key_str = key.as_str(); 317 + 318 + if let Some((collection, rkey)) = key_str.split_once('/') { 319 + // Get the record block from storage 320 + // The record data is just a CBOR block. We need to convert it to JSON for readability. 321 + if let Some(block_bytes) = repo.storage().get(&cid).await? { 322 + // Deserialize DAG-CBOR to generic JSON Value 323 + let json_val: jacquard::RawData = serde_ipld_dagcbor::from_slice(&block_bytes) 324 + .map_err(|e| anyhow!("failed to deserialize record {}: {}", key, e))?; 325 + 326 + let coll_dir = target_path.join(collection)?; 327 + if !coll_dir.exists()? { 328 + coll_dir.create_dir_all()?; 329 + } 330 + let file = coll_dir.join(rkey)?.create_file()?; 331 + 332 + serde_json::to_writer_pretty(file, &json_val)?; 333 + } 334 + } 335 + } 336 + 337 + Ok(()) 338 + }
+39
dysnomia/src/cmd/job.rs
··· 1 + use nu_engine::{command_prelude::*, get_full_help}; 2 + use nu_protocol::{ 3 + Category, IntoPipelineData, PipelineData, ShellError, Signature, Value, 4 + engine::{Command, EngineState, Stack}, 5 + }; 6 + 7 + #[derive(Clone)] 8 + pub struct Job; 9 + 10 + // Top-level `job` command that just prints help (like nu stdlib style) 11 + impl Command for Job { 12 + fn name(&self) -> &str { 13 + "job" 14 + } 15 + 16 + fn signature(&self) -> Signature { 17 + Signature::build("job") 18 + .category(Category::System) 19 + .input_output_types(vec![(Type::Nothing, Type::String)]) 20 + } 21 + 22 + fn description(&self) -> &str { 23 + "Various commands for working with background jobs." 24 + } 25 + 26 + fn extra_description(&self) -> &str { 27 + "You must use one of the following subcommands. Using this command as-is will only produce this help message." 28 + } 29 + 30 + fn run( 31 + &self, 32 + engine_state: &EngineState, 33 + stack: &mut Stack, 34 + call: &Call, 35 + _input: PipelineData, 36 + ) -> Result<PipelineData, ShellError> { 37 + Ok(Value::string(get_full_help(self, engine_state, stack), call.head).into_pipeline_data()) 38 + } 39 + }
+49
dysnomia/src/cmd/job_kill.rs
··· 1 + use crate::globals::kill_task_by_id; 2 + use nu_engine::CallExt; 3 + use nu_protocol::{ 4 + Category, IntoPipelineData, PipelineData, ShellError, Signature, SyntaxShape, Value, 5 + engine::{Call, Command, EngineState, Stack}, 6 + }; 7 + 8 + #[derive(Clone)] 9 + pub struct JobKill; 10 + 11 + impl Command for JobKill { 12 + fn name(&self) -> &str { 13 + "job kill" 14 + } 15 + 16 + fn signature(&self) -> Signature { 17 + Signature::build("job kill") 18 + .required("id", SyntaxShape::Int, "id of job to kill") 19 + .category(Category::System) 20 + } 21 + 22 + fn description(&self) -> &str { 23 + "Kill a background job by ID." 24 + } 25 + 26 + fn run( 27 + &self, 28 + engine_state: &EngineState, 29 + stack: &mut Stack, 30 + call: &Call, 31 + _input: PipelineData, 32 + ) -> Result<PipelineData, ShellError> { 33 + let id: i64 = call.req(engine_state, stack, 0)?; 34 + if id < 0 { 35 + return Err(ShellError::GenericError { 36 + error: "invalid id".to_string(), 37 + msg: format!("task id must be non-negative, got {}", id), 38 + span: Some(call.head), 39 + help: None, 40 + inner: vec![], 41 + }); 42 + } 43 + 44 + let killed = kill_task_by_id(id as usize); 45 + 46 + // Return a boolean indicating whether a task was found & killed. 47 + Ok(Value::bool(killed, call.head).into_pipeline_data()) 48 + } 49 + }
+43
dysnomia/src/cmd/job_list.rs
··· 1 + use crate::globals::get_all_tasks; 2 + use nu_protocol::{ 3 + Category, ListStream, PipelineData, Record, ShellError, Signature, Value, 4 + engine::{Call, Command, EngineState, Stack}, 5 + }; 6 + 7 + #[derive(Clone)] 8 + pub struct JobList; 9 + 10 + impl Command for JobList { 11 + fn name(&self) -> &str { 12 + "job list" 13 + } 14 + 15 + fn signature(&self) -> Signature { 16 + Signature::build("job list").category(Category::System) 17 + } 18 + 19 + fn description(&self) -> &str { 20 + "List background jobs." 21 + } 22 + 23 + fn run( 24 + &self, 25 + engine_state: &EngineState, 26 + _stack: &mut Stack, 27 + call: &Call, 28 + _input: PipelineData, 29 + ) -> Result<PipelineData, ShellError> { 30 + let tasks = get_all_tasks(); 31 + let span = call.head; 32 + let iter = tasks.into_iter().map(move |(id, desc)| { 33 + let mut rec = Record::new(); 34 + rec.push("id", Value::int(id as i64, span)); 35 + rec.push("description", Value::string(desc, span)); 36 + Value::record(rec, span) 37 + }); 38 + Ok(PipelineData::list_stream( 39 + ListStream::new(iter, span, engine_state.signals().clone()), 40 + None, 41 + )) 42 + } 43 + }
+139
dysnomia/src/cmd/ls.rs
··· 1 + use std::{ 2 + sync::Arc, 3 + time::{SystemTime, UNIX_EPOCH}, 4 + }; 5 + 6 + use crate::globals::{get_pwd, to_shell_err}; 7 + use jacquard::chrono; 8 + use nu_engine::CallExt; 9 + use nu_protocol::{ 10 + Category, ListStream, PipelineData, Record, ShellError, Signature, SyntaxShape, Value, 11 + engine::{Command, EngineState, Stack}, 12 + }; 13 + 14 + #[derive(Clone)] 15 + pub struct Ls; 16 + 17 + impl Command for Ls { 18 + fn name(&self) -> &str { 19 + "ls" 20 + } 21 + 22 + fn signature(&self) -> Signature { 23 + Signature::build("ls") 24 + .optional("path", SyntaxShape::String, "the path to list") 25 + .switch( 26 + "all", 27 + "include hidden paths (that start with a dot)", 28 + Some('a'), 29 + ) 30 + .switch( 31 + "long", 32 + "show detailed information about each file", 33 + Some('l'), 34 + ) 35 + .category(Category::FileSystem) 36 + } 37 + 38 + fn description(&self) -> &str { 39 + "list the files in the virtual filesystem." 40 + } 41 + 42 + fn run( 43 + &self, 44 + engine_state: &EngineState, 45 + stack: &mut Stack, 46 + call: &nu_protocol::engine::Call, 47 + _input: PipelineData, 48 + ) -> Result<PipelineData, ShellError> { 49 + let path_arg: Option<String> = call.opt(engine_state, stack, 0)?; 50 + let all = call.has_flag(engine_state, stack, "all")?; 51 + let long = call.has_flag(engine_state, stack, "long")?; 52 + 53 + let mut target_dir = get_pwd(); 54 + if let Some(path) = path_arg { 55 + target_dir = Arc::new( 56 + target_dir 57 + .join(path.trim_end_matches('/')) 58 + .map_err(to_shell_err(call.arguments_span()))?, 59 + ); 60 + } 61 + 62 + let span = call.head; 63 + let entries = target_dir.read_dir().map_err(to_shell_err(span))?; 64 + 65 + let make_record = move |name: &str, metadata: &vfs::VfsMetadata| { 66 + let type_str = match metadata.file_type { 67 + vfs::VfsFileType::Directory => "dir", 68 + vfs::VfsFileType::File => "file", 69 + }; 70 + 71 + let mut record = Record::new(); 72 + record.push("name", Value::string(name, span)); 73 + record.push("type", Value::string(type_str, span)); 74 + record.push("size", Value::filesize(metadata.len as i64, span)); 75 + let mut add_timestamp = |field: &str, timestamp: Option<SystemTime>| { 76 + if let Some(dur) = timestamp.and_then(|s| s.duration_since(UNIX_EPOCH).ok()) { 77 + record.push( 78 + field, 79 + Value::date( 80 + chrono::DateTime::from_timestamp_nanos(dur.as_nanos() as i64) 81 + .fixed_offset(), 82 + span, 83 + ), 84 + ); 85 + } else { 86 + record.push(field, Value::nothing(span)); 87 + } 88 + }; 89 + add_timestamp("modified", metadata.modified); 90 + if long { 91 + add_timestamp("created", metadata.created); 92 + add_timestamp("accessed", metadata.accessed); 93 + } 94 + Value::record(record, span) 95 + }; 96 + const DIR_METADATA: vfs::VfsMetadata = vfs::VfsMetadata { 97 + file_type: vfs::VfsFileType::Directory, 98 + len: 0, 99 + modified: None, 100 + created: None, 101 + accessed: None, 102 + }; 103 + 104 + let dots = if all { 105 + vec![ 106 + make_record(".", &DIR_METADATA), 107 + make_record("..", &DIR_METADATA), 108 + ] 109 + } else { 110 + Vec::new() 111 + }; 112 + let entries = dots 113 + .into_iter() 114 + .chain(entries.into_iter().flat_map(move |entry| { 115 + let do_map = move || { 116 + let name = entry.filename(); 117 + if name.starts_with('.') && !all { 118 + return Ok(None); 119 + } 120 + let metadata = entry.metadata().map_err(to_shell_err(span))?; 121 + 122 + Ok(Some(make_record(&name, &metadata))) 123 + }; 124 + do_map() 125 + .transpose() 126 + .map(|res| res.unwrap_or_else(|err| Value::error(err, span))) 127 + })); 128 + 129 + let signals = engine_state.signals().clone(); 130 + Ok(PipelineData::list_stream( 131 + ListStream::new(entries, span, signals.clone()), 132 + Some(nu_protocol::PipelineMetadata { 133 + data_source: nu_protocol::DataSource::Ls, 134 + content_type: None, 135 + custom: Record::new(), 136 + }), 137 + )) 138 + } 139 + }
+46
dysnomia/src/cmd/mkdir.rs
··· 1 + use crate::globals::{get_pwd, to_shell_err}; 2 + use nu_engine::CallExt; 3 + use nu_protocol::{ 4 + Category, PipelineData, ShellError, Signature, SyntaxShape, 5 + engine::{Command, EngineState, Stack}, 6 + }; 7 + 8 + #[derive(Clone)] 9 + pub struct Mkdir; 10 + 11 + impl Command for Mkdir { 12 + fn name(&self) -> &str { 13 + "mkdir" 14 + } 15 + 16 + fn signature(&self) -> Signature { 17 + Signature::build("mkdir") 18 + .required( 19 + "path", 20 + SyntaxShape::String, 21 + "path of the directory(s) to create", 22 + ) 23 + .category(Category::FileSystem) 24 + } 25 + 26 + fn description(&self) -> &str { 27 + "create a directory in the virtual filesystem." 28 + } 29 + 30 + fn run( 31 + &self, 32 + engine_state: &EngineState, 33 + stack: &mut Stack, 34 + call: &nu_protocol::engine::Call, 35 + _: PipelineData, 36 + ) -> Result<PipelineData, ShellError> { 37 + let path: String = call.req(engine_state, stack, 0)?; 38 + let new_dir = get_pwd() 39 + .join(path.trim_end_matches('/')) 40 + .map_err(to_shell_err(call.head))?; 41 + new_dir 42 + .create_dir_all() 43 + .map_err(to_shell_err(call.head)) 44 + .map(|_| PipelineData::Empty) 45 + } 46 + }
+31
dysnomia/src/cmd/mod.rs
··· 1 + pub mod cd; 2 + pub mod fetch; 3 + pub mod job; 4 + pub mod job_kill; 5 + pub mod job_list; 6 + pub mod ls; 7 + pub mod mkdir; 8 + pub mod open; 9 + pub mod pwd; 10 + pub mod random; 11 + pub mod rm; 12 + pub mod save; 13 + pub mod source; 14 + pub mod sys; 15 + pub mod version; 16 + 17 + pub use cd::Cd; 18 + pub use fetch::Fetch; 19 + pub use job::Job; 20 + pub use job_kill::JobKill; 21 + pub use job_list::JobList; 22 + pub use ls::Ls; 23 + pub use mkdir::Mkdir; 24 + pub use open::Open; 25 + pub use pwd::Pwd; 26 + pub use random::Random; 27 + pub use rm::Rm; 28 + pub use save::Save; 29 + pub use source::Source; 30 + pub use sys::Sys; 31 + pub use version::Version;
+88
dysnomia/src/cmd/open.rs
··· 1 + use std::ops::Not; 2 + 3 + use crate::globals::{get_pwd, to_shell_err}; 4 + use nu_command::{FromCsv, FromJson, FromOds, FromToml, FromTsv, FromXlsx, FromXml, FromYaml}; 5 + use nu_engine::CallExt; 6 + use nu_protocol::{ 7 + ByteStream, Category, PipelineData, ShellError, Signature, SyntaxShape, 8 + engine::{Command, EngineState, Stack}, 9 + }; 10 + 11 + #[derive(Clone)] 12 + pub struct Open; 13 + 14 + impl Command for Open { 15 + fn name(&self) -> &str { 16 + "open" 17 + } 18 + 19 + fn signature(&self) -> Signature { 20 + Signature::build("open") 21 + .required("path", SyntaxShape::String, "path to the file") 22 + .switch( 23 + "raw", 24 + "output content as raw string/binary without parsing", 25 + Some('r'), 26 + ) 27 + .category(Category::FileSystem) 28 + } 29 + 30 + fn description(&self) -> &str { 31 + "open a file from the virtual filesystem." 32 + } 33 + 34 + fn run( 35 + &self, 36 + engine_state: &EngineState, 37 + stack: &mut Stack, 38 + call: &nu_protocol::engine::Call, 39 + _input: PipelineData, 40 + ) -> Result<PipelineData, ShellError> { 41 + let path: String = call.req(engine_state, stack, 0)?; 42 + let raw_flag = call.has_flag(engine_state, stack, "raw")?; 43 + 44 + let target_file = get_pwd().join(&path).map_err(to_shell_err(call.head))?; 45 + 46 + let parse_cmd = raw_flag 47 + .not() 48 + .then(|| { 49 + target_file 50 + .extension() 51 + .and_then(|ext| get_cmd_for_ext(&ext)) 52 + }) 53 + .flatten(); 54 + 55 + target_file 56 + .open_file() 57 + .map_err(to_shell_err(call.head)) 58 + .and_then(|f| { 59 + let data = PipelineData::ByteStream( 60 + ByteStream::read( 61 + f, 62 + call.head, 63 + engine_state.signals().clone(), 64 + nu_protocol::ByteStreamType::String, 65 + ), 66 + None, 67 + ); 68 + if let Some(cmd) = parse_cmd { 69 + return cmd.run(engine_state, stack, call, data); 70 + } 71 + Ok(data) 72 + }) 73 + } 74 + } 75 + 76 + fn get_cmd_for_ext(ext: &str) -> Option<Box<dyn Command>> { 77 + Some(match ext { 78 + "json" => Box::new(FromJson), 79 + "yaml" | "yml" => Box::new(FromYaml), 80 + "toml" => Box::new(FromToml), 81 + "csv" => Box::new(FromCsv), 82 + "ods" => Box::new(FromOds), 83 + "tsv" => Box::new(FromTsv), 84 + "xml" => Box::new(FromXml), 85 + "xlsx" => Box::new(FromXlsx), 86 + _ => return None, 87 + }) 88 + }
+37
dysnomia/src/cmd/pwd.rs
··· 1 + use crate::globals::get_pwd; 2 + use nu_protocol::engine::Call; 3 + use nu_protocol::{ 4 + Category, IntoPipelineData, PipelineData, ShellError, Signature, Value, 5 + engine::{Command, EngineState, Stack}, 6 + }; 7 + 8 + #[derive(Clone)] 9 + pub struct Pwd; 10 + 11 + impl Command for Pwd { 12 + fn name(&self) -> &str { 13 + "pwd" 14 + } 15 + 16 + fn signature(&self) -> Signature { 17 + Signature::build("pwd").category(Category::FileSystem) 18 + } 19 + 20 + fn description(&self) -> &str { 21 + "print the current working directory in the virtual filesystem." 22 + } 23 + 24 + fn run( 25 + &self, 26 + _engine_state: &EngineState, 27 + _stack: &mut Stack, 28 + call: &Call, 29 + _input: PipelineData, 30 + ) -> Result<PipelineData, ShellError> { 31 + let mut pwd = get_pwd().as_str().to_string(); 32 + if pwd.is_empty() { 33 + pwd.push('/'); 34 + } 35 + Ok(Value::string(pwd, call.head).into_pipeline_data()) 36 + } 37 + }
+37
dysnomia/src/cmd/random.rs
··· 1 + use js_sys::Math; 2 + use nu_protocol::Type; 3 + use nu_protocol::engine::Call; 4 + use nu_protocol::{ 5 + Category, IntoPipelineData, PipelineData, ShellError, Signature, Value, 6 + engine::{Command, EngineState, Stack}, 7 + }; 8 + 9 + #[derive(Clone)] 10 + pub struct Random; 11 + 12 + impl Command for Random { 13 + fn name(&self) -> &str { 14 + "random" 15 + } 16 + 17 + fn signature(&self) -> Signature { 18 + Signature::build("random") 19 + .category(Category::Math) 20 + .input_output_type(Type::Nothing, Type::Float) 21 + } 22 + 23 + fn description(&self) -> &str { 24 + "returns a random float between 0 and 1." 25 + } 26 + 27 + fn run( 28 + &self, 29 + _engine_state: &EngineState, 30 + _stack: &mut Stack, 31 + call: &Call, 32 + _input: PipelineData, 33 + ) -> Result<PipelineData, ShellError> { 34 + let v: f64 = Math::random(); 35 + Ok(Value::float(v, call.head).into_pipeline_data()) 36 + } 37 + }
+80
dysnomia/src/cmd/rm.rs
··· 1 + use crate::globals::{get_pwd, to_shell_err}; 2 + use nu_engine::CallExt; 3 + use nu_protocol::{ 4 + Category, PipelineData, ShellError, Signature, SyntaxShape, 5 + engine::{Command, EngineState, Stack}, 6 + }; 7 + use vfs::VfsFileType; 8 + 9 + #[derive(Clone)] 10 + pub struct Rm; 11 + 12 + impl Command for Rm { 13 + fn name(&self) -> &str { 14 + "rm" 15 + } 16 + 17 + fn signature(&self) -> Signature { 18 + Signature::build("rm") 19 + .required( 20 + "path", 21 + SyntaxShape::String, 22 + "path to file or directory to remove", 23 + ) 24 + .switch( 25 + "recursive", 26 + "remove directories and their contents recursively", 27 + Some('r'), 28 + ) 29 + .category(Category::FileSystem) 30 + } 31 + 32 + fn description(&self) -> &str { 33 + "remove a file or directory from the virtual filesystem." 34 + } 35 + 36 + fn run( 37 + &self, 38 + engine_state: &EngineState, 39 + stack: &mut Stack, 40 + call: &nu_protocol::engine::Call, 41 + _input: PipelineData, 42 + ) -> Result<PipelineData, ShellError> { 43 + let path: String = call.req(engine_state, stack, 0)?; 44 + let recursive = call.has_flag(engine_state, stack, "recursive")?; 45 + 46 + // Prevent removing root 47 + if path == "/" { 48 + return Err(ShellError::GenericError { 49 + error: "cannot remove root".to_string(), 50 + msg: "refusing to remove root directory".to_string(), 51 + span: Some(call.head), 52 + help: None, 53 + inner: vec![], 54 + }); 55 + } 56 + 57 + // Resolve target relative to PWD (or absolute if path starts with '/') 58 + let target = get_pwd() 59 + .join(path.trim_end_matches('/')) 60 + .map_err(to_shell_err(call.head))?; 61 + 62 + let meta = target.metadata().map_err(to_shell_err(call.head))?; 63 + match meta.file_type { 64 + VfsFileType::File => { 65 + target.remove_file().map_err(to_shell_err(call.head))?; 66 + Ok(PipelineData::Empty) 67 + } 68 + VfsFileType::Directory => { 69 + (if recursive { 70 + target.remove_dir_all() 71 + } else { 72 + // non-recursive: attempt to remove directory (will fail if not empty) 73 + target.remove_dir() 74 + }) 75 + .map_err(to_shell_err(call.head)) 76 + .map(|_| PipelineData::Empty) 77 + } 78 + } 79 + } 80 + }
+67
dysnomia/src/cmd/save.rs
··· 1 + use crate::globals::{get_pwd, to_shell_err}; 2 + use nu_engine::CallExt; 3 + use nu_protocol::{ 4 + Category, PipelineData, ShellError, Signature, SyntaxShape, Type, Value, 5 + engine::{Command, EngineState, Stack}, 6 + }; 7 + use vfs::VfsError; 8 + 9 + #[derive(Clone)] 10 + pub struct Save; 11 + 12 + impl Command for Save { 13 + fn name(&self) -> &str { 14 + "save" 15 + } 16 + 17 + fn signature(&self) -> Signature { 18 + Signature::build("save") 19 + .required("path", SyntaxShape::String, "path to write the data to") 20 + .input_output_types(vec![(Type::Any, Type::Nothing)]) 21 + .category(Category::FileSystem) 22 + } 23 + 24 + fn description(&self) -> &str { 25 + "save content to a file in the virtual filesystem." 26 + } 27 + 28 + fn run( 29 + &self, 30 + engine_state: &EngineState, 31 + stack: &mut Stack, 32 + call: &nu_protocol::engine::Call, 33 + input: PipelineData, 34 + ) -> Result<PipelineData, ShellError> { 35 + let path: String = call.req(engine_state, stack, 0)?; 36 + 37 + let value = input.into_value(call.head)?; 38 + let contents = match value { 39 + Value::String { val, .. } => val.into_bytes(), 40 + Value::Binary { val, .. } => val, 41 + Value::Bool { val, .. } => val.to_string().into_bytes(), 42 + Value::Float { val, .. } => val.to_string().into_bytes(), 43 + Value::Int { val, .. } => val.to_string().into_bytes(), 44 + Value::Date { val, .. } => val.to_string().into_bytes(), 45 + _ => { 46 + return Err(ShellError::CantConvert { 47 + to_type: "string".to_string(), 48 + from_type: value.get_type().to_string(), 49 + span: value.span(), 50 + help: None, 51 + }); 52 + } 53 + }; 54 + 55 + let target_file = get_pwd().join(&path).map_err(to_shell_err(call.head))?; 56 + 57 + target_file 58 + .create_file() 59 + .map_err(to_shell_err(call.head)) 60 + .and_then(|mut f| { 61 + f.write_all(&contents) 62 + .map_err(VfsError::from) 63 + .map_err(to_shell_err(call.head)) 64 + }) 65 + .map(|_| PipelineData::Empty) 66 + } 67 + }
+89
dysnomia/src/cmd/source.rs
··· 1 + use crate::globals::{get_pwd, queue_delta, to_shell_err}; 2 + use nu_engine::{CallExt, command_prelude::IoError, eval_block}; 3 + use nu_parser::parse; 4 + use nu_protocol::{ 5 + Category, PipelineData, ShellError, Signature, SyntaxShape, 6 + debugger::WithoutDebug, 7 + engine::{Command, EngineState, Stack, StateWorkingSet}, 8 + }; 9 + use std::{io::Read, path::PathBuf, str::FromStr}; 10 + 11 + #[derive(Clone)] 12 + pub struct Source; 13 + 14 + impl Command for Source { 15 + fn name(&self) -> &str { 16 + "source" 17 + } 18 + 19 + fn signature(&self) -> Signature { 20 + Signature::build(self.name()) 21 + .required("filename", SyntaxShape::String, "the file to source") 22 + .category(Category::Core) 23 + } 24 + 25 + fn description(&self) -> &str { 26 + "source a file from the virtual filesystem." 27 + } 28 + 29 + fn run( 30 + &self, 31 + engine_state: &EngineState, 32 + stack: &mut Stack, 33 + call: &nu_protocol::engine::Call, 34 + input: PipelineData, 35 + ) -> Result<PipelineData, ShellError> { 36 + let filename: String = call.req(engine_state, stack, 0)?; 37 + 38 + // 1. Read file from VFS 39 + let path = get_pwd().join(&filename).map_err(to_shell_err(call.head))?; 40 + let mut file = path.open_file().map_err(to_shell_err(call.head))?; 41 + let mut contents = String::new(); 42 + file.read_to_string(&mut contents).map_err(|e| { 43 + ShellError::Io(IoError::new( 44 + e, 45 + call.head, 46 + PathBuf::from_str(path.as_str()).unwrap(), 47 + )) 48 + })?; 49 + 50 + // 2. Parse the content 51 + // We create a new working set based on the CURRENT engine state. 52 + let mut working_set = StateWorkingSet::new(engine_state); 53 + 54 + // We must add the file to the working set so the parser can track spans correctly 55 + let _file_id = working_set.add_file(filename.clone(), contents.as_bytes()); 56 + 57 + // Parse the block 58 + let block = parse( 59 + &mut working_set, 60 + Some(&filename), 61 + contents.as_bytes(), 62 + false, 63 + ); 64 + 65 + if let Some(err) = working_set.parse_errors.first() { 66 + return Err(ShellError::GenericError { 67 + error: "Parse error".into(), 68 + msg: err.to_string(), 69 + span: Some(call.head), 70 + help: None, 71 + inner: vec![], 72 + }); 73 + } 74 + 75 + // 3. Prepare execution context 76 + // We clone the engine state to merge the new definitions (delta) locally. 77 + // This ensures the script can call its own defined functions immediately. 78 + let mut local_state = engine_state.clone(); 79 + local_state.merge_delta(working_set.delta.clone())?; 80 + 81 + // 4. Queue the delta for the global engine state 82 + // This allows definitions to be available in the next command execution cycle (REPL behavior). 83 + queue_delta(working_set.delta); 84 + 85 + // 5. Evaluate the block 86 + // We pass the MUTABLE stack, so environment variable changes (PWD, load-env) WILL persist. 87 + eval_block::<WithoutDebug>(&local_state, stack, &block, input).map(|data| data.body) 88 + } 89 + }
+182
dysnomia/src/cmd/sys.rs
··· 1 + use js_sys::Reflect; 2 + use js_sys::global; 3 + use nu_protocol::{ 4 + Category, IntoPipelineData, PipelineData, Record, ShellError, Signature, Value, 5 + engine::{Command, EngineState, Stack}, 6 + }; 7 + use wasm_bindgen::JsValue; 8 + 9 + #[derive(Clone)] 10 + pub struct Sys; 11 + 12 + impl Command for Sys { 13 + fn name(&self) -> &str { 14 + "sys" 15 + } 16 + 17 + fn signature(&self) -> Signature { 18 + Signature::build("sys").category(Category::System) 19 + } 20 + 21 + fn description(&self) -> &str { 22 + "return information about the browser environment (when running in wasm)" 23 + } 24 + 25 + fn run( 26 + &self, 27 + _engine_state: &EngineState, 28 + _stack: &mut Stack, 29 + call: &nu_protocol::engine::Call, 30 + _input: PipelineData, 31 + ) -> Result<PipelineData, ShellError> { 32 + let head = call.head; 33 + let mut rec = Record::new(); 34 + 35 + let g = global(); 36 + 37 + // navigator-derived fields 38 + if let Ok(nav) = Reflect::get(&g, &JsValue::from_str("navigator")) { 39 + if !nav.is_undefined() && !nav.is_null() { 40 + let ua = Reflect::get(&nav, &JsValue::from_str("userAgent")) 41 + .ok() 42 + .and_then(|v| v.as_string()) 43 + .unwrap_or_default(); 44 + rec.push("user_agent", Value::string(ua, head)); 45 + 46 + let platform = Reflect::get(&nav, &JsValue::from_str("platform")) 47 + .ok() 48 + .and_then(|v| v.as_string()) 49 + .unwrap_or_default(); 50 + rec.push("platform", Value::string(platform, head)); 51 + 52 + let vendor = Reflect::get(&nav, &JsValue::from_str("vendor")) 53 + .ok() 54 + .and_then(|v| v.as_string()) 55 + .unwrap_or_default(); 56 + rec.push("vendor", Value::string(vendor, head)); 57 + 58 + let product = Reflect::get(&nav, &JsValue::from_str("product")) 59 + .ok() 60 + .and_then(|v| v.as_string()) 61 + .unwrap_or_default(); 62 + rec.push("product", Value::string(product, head)); 63 + 64 + let app_name = Reflect::get(&nav, &JsValue::from_str("appName")) 65 + .ok() 66 + .and_then(|v| v.as_string()) 67 + .unwrap_or_default(); 68 + rec.push("app_name", Value::string(app_name, head)); 69 + 70 + let language = Reflect::get(&nav, &JsValue::from_str("language")) 71 + .ok() 72 + .and_then(|v| v.as_string()) 73 + .unwrap_or_default(); 74 + rec.push("language", Value::string(language, head)); 75 + 76 + // booleans now use Value::bool 77 + let online = Reflect::get(&nav, &JsValue::from_str("onLine")) 78 + .ok() 79 + .and_then(|v| v.as_bool()) 80 + .unwrap_or(false); 81 + rec.push("online", Value::bool(online, head)); 82 + 83 + let cookie_enabled = Reflect::get(&nav, &JsValue::from_str("cookieEnabled")) 84 + .ok() 85 + .and_then(|v| v.as_bool()) 86 + .unwrap_or(false); 87 + rec.push("cookie_enabled", Value::bool(cookie_enabled, head)); 88 + 89 + // numeric-ish fields 90 + let hardware_concurrency = 91 + Reflect::get(&nav, &JsValue::from_str("hardwareConcurrency")) 92 + .ok() 93 + .and_then(|v| v.as_f64()) 94 + .map(|f| f as i64); 95 + if let Some(hc) = hardware_concurrency { 96 + rec.push("hardware_concurrency", Value::int(hc, head)); 97 + } 98 + 99 + let device_memory = Reflect::get(&nav, &JsValue::from_str("deviceMemory")) 100 + .ok() 101 + .and_then(|v| v.as_f64()) 102 + .map(|f| f as i64); 103 + if let Some(dm) = device_memory { 104 + rec.push("device_memory_gb", Value::int(dm, head)); 105 + } 106 + 107 + let max_touch_points = Reflect::get(&nav, &JsValue::from_str("maxTouchPoints")) 108 + .ok() 109 + .and_then(|v| v.as_f64()) 110 + .map(|f| f as i64); 111 + if let Some(tp) = max_touch_points { 112 + rec.push("max_touch_points", Value::int(tp, head)); 113 + } 114 + 115 + let dnt = Reflect::get(&nav, &JsValue::from_str("doNotTrack")) 116 + .ok() 117 + .and_then(|v| v.as_string()) 118 + .unwrap_or_default(); 119 + if !dnt.is_empty() { 120 + rec.push("do_not_track", Value::string(dnt, head)); 121 + } 122 + } 123 + } 124 + 125 + // screen dimensions (if available) 126 + if let Ok(screen) = Reflect::get(&g, &JsValue::from_str("screen")) { 127 + if !screen.is_undefined() && !screen.is_null() { 128 + let width = Reflect::get(&screen, &JsValue::from_str("width")) 129 + .ok() 130 + .and_then(|v| v.as_f64()) 131 + .map(|f| f as i64); 132 + let height = Reflect::get(&screen, &JsValue::from_str("height")) 133 + .ok() 134 + .and_then(|v| v.as_f64()) 135 + .map(|f| f as i64); 136 + if let Some(w) = width { 137 + rec.push("screen_width", Value::int(w, head)); 138 + } 139 + if let Some(h) = height { 140 + rec.push("screen_height", Value::int(h, head)); 141 + } 142 + } 143 + } 144 + 145 + // performance.memory (optional) 146 + if let Ok(perf) = Reflect::get(&g, &JsValue::from_str("performance")) { 147 + if !perf.is_undefined() && !perf.is_null() { 148 + if let Ok(mem) = Reflect::get(&perf, &JsValue::from_str("memory")) { 149 + if !mem.is_undefined() && !mem.is_null() { 150 + let used = Reflect::get(&mem, &JsValue::from_str("usedJSHeapSize")) 151 + .ok() 152 + .and_then(|v| v.as_f64()) 153 + .map(|f| f as i64); 154 + let limit = Reflect::get(&mem, &JsValue::from_str("jsHeapSizeLimit")) 155 + .ok() 156 + .and_then(|v| v.as_f64()) 157 + .map(|f| f as i64); 158 + let mut mrec = Record::new(); 159 + if let Some(u) = used { 160 + mrec.push("used_js_heap_size", Value::filesize(u, head)); 161 + } 162 + if let Some(l) = limit { 163 + mrec.push("js_heap_size_limit", Value::filesize(l, head)); 164 + } 165 + if !mrec.is_empty() { 166 + rec.push("performance_memory", Value::record(mrec, head)); 167 + } 168 + } 169 + } 170 + } 171 + } 172 + 173 + if rec.is_empty() { 174 + rec.push( 175 + "error", 176 + Value::string("not running in a browser environment", head), 177 + ); 178 + } 179 + 180 + Ok(Value::record(rec, head).into_pipeline_data()) 181 + } 182 + }
+32
dysnomia/src/cmd/version.rs
··· 1 + use nu_protocol::engine::Call; 2 + use nu_protocol::{ 3 + Category, IntoPipelineData, PipelineData, ShellError, Signature, Value, 4 + engine::{Command, EngineState, Stack}, 5 + }; 6 + 7 + #[derive(Clone)] 8 + pub struct Version; 9 + 10 + impl Command for Version { 11 + fn name(&self) -> &str { 12 + "version" 13 + } 14 + 15 + fn signature(&self) -> Signature { 16 + Signature::build(self.name()).category(Category::System) 17 + } 18 + 19 + fn description(&self) -> &str { 20 + "print the version of dysnomia." 21 + } 22 + 23 + fn run( 24 + &self, 25 + _engine_state: &EngineState, 26 + _stack: &mut Stack, 27 + call: &Call, 28 + _input: PipelineData, 29 + ) -> Result<PipelineData, ShellError> { 30 + Ok(Value::string("dysnomia.v099.t1765660500", call.head).into_pipeline_data()) 31 + } 32 + }
+213
dysnomia/src/completion.rs
··· 1 + use super::*; 2 + 3 + #[derive(Debug, Serialize)] 4 + struct Suggestion { 5 + name: String, 6 + description: Option<String>, 7 + is_command: bool, 8 + rendered: String, 9 + span_start: usize, // char index (not byte) 10 + span_end: usize, // char index (not byte) 11 + } 12 + 13 + impl PartialEq for Suggestion { 14 + fn eq(&self, other: &Self) -> bool { 15 + self.name == other.name 16 + } 17 + } 18 + impl Eq for Suggestion {} 19 + impl PartialOrd for Suggestion { 20 + fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> { 21 + self.name.partial_cmp(&other.name) 22 + } 23 + } 24 + impl Ord for Suggestion { 25 + fn cmp(&self, other: &Self) -> std::cmp::Ordering { 26 + self.name.cmp(&other.name) 27 + } 28 + } 29 + 30 + #[wasm_bindgen] 31 + pub fn completion(input: &str, js_cursor_pos: usize) -> String { 32 + let engine_guard = ENGINE_STATE 33 + .get() 34 + .unwrap() 35 + .lock() 36 + .expect("engine state initialized"); 37 + let root = get_pwd(); 38 + 39 + // Map UTF-16 cursor position (from JS) to Byte index (for Rust) 40 + let byte_pos = input 41 + .char_indices() 42 + .map(|(i, _)| i) 43 + .nth(js_cursor_pos) 44 + .unwrap_or(input.len()); 45 + 46 + // 1. Parse & Flatten 47 + let mut working_set = StateWorkingSet::new(&engine_guard); 48 + // CRITICAL: Capture the start offset so we can normalize spans later 49 + let global_offset = working_set.next_span_start(); 50 + let block = parse(&mut working_set, None, input.as_bytes(), false); 51 + let shapes = flatten_block(&working_set, &block); 52 + 53 + // 2. Identify context 54 + let mut is_command_pos = false; 55 + let mut current_span = Span::new(byte_pos, byte_pos); 56 + let mut prefix = "".to_string(); 57 + let mut found_shape = false; 58 + 59 + // Check if cursor is inside or touching a shape 60 + for (span, shape) in &shapes { 61 + // Convert global span to local indices 62 + let local_start = span.start.saturating_sub(global_offset); 63 + let local_end = span.end.saturating_sub(global_offset); 64 + let local_span = Span::new(local_start, local_end); 65 + 66 + if local_span.contains(byte_pos) || local_span.end == byte_pos { 67 + current_span = local_span; 68 + found_shape = true; 69 + let safe_end = std::cmp::min(local_span.end, byte_pos); 70 + if local_span.start < input.len() { 71 + prefix = input[local_span.start..safe_end].to_string(); 72 + } 73 + 74 + match shape { 75 + FlatShape::External(_) | FlatShape::InternalCall(_) | FlatShape::Keyword => { 76 + is_command_pos = true; 77 + } 78 + FlatShape::Garbage => { 79 + // Check if it looks like a flag 80 + if prefix.starts_with('-') { 81 + is_command_pos = false; 82 + } else { 83 + // Assume command if it's garbage but not a flag (e.g. typing a new command) 84 + is_command_pos = true; 85 + } 86 + } 87 + _ => { 88 + is_command_pos = false; 89 + } 90 + } 91 + break; 92 + } 93 + } 94 + 95 + // Fallback to Lexer if in whitespace 96 + if !found_shape { 97 + let (tokens, _err) = lex(input.as_bytes(), 0, &[], &[], true); 98 + let last_token = tokens.iter().filter(|t| t.span.end <= byte_pos).last(); 99 + 100 + if let Some(token) = last_token { 101 + match token.contents { 102 + TokenContents::Pipe 103 + | TokenContents::PipePipe 104 + | TokenContents::Semicolon 105 + | TokenContents::Eol => { 106 + is_command_pos = true; 107 + } 108 + _ => { 109 + let text = &input[token.span.start..token.span.end]; 110 + if text == "{" || text == "(" || text == ";" || text == "&&" || text == "||" { 111 + is_command_pos = true; 112 + } else { 113 + is_command_pos = false; 114 + } 115 + } 116 + } 117 + } else { 118 + is_command_pos = true; // Start of input 119 + } 120 + } 121 + 122 + let mut suggestions: Vec<Suggestion> = Vec::new(); 123 + 124 + // Convert byte-spans back to char-spans for JS 125 + let to_char_span = |start: usize, end: usize| -> (usize, usize) { 126 + let char_start = input[..start].chars().count(); 127 + let char_end = input[..end].chars().count(); 128 + (char_start, char_end) 129 + }; 130 + 131 + let (span_start, span_end) = to_char_span(current_span.start, current_span.end); 132 + 133 + let mut add_cmd_suggestion = |name: Vec<u8>, desc: Option<String>| { 134 + let name = String::from_utf8_lossy(&name).to_string(); 135 + suggestions.push(Suggestion { 136 + rendered: { 137 + let name = ansi_term::Color::Green.bold().paint(&name); 138 + let desc = desc.as_deref().unwrap_or("<no description>"); 139 + format!("{name} {desc}") 140 + }, 141 + name: name.clone(), // Replacement text is just the name 142 + description: desc, 143 + is_command: true, 144 + span_start, 145 + span_end, 146 + }); 147 + }; 148 + 149 + let working_set = StateWorkingSet::new(&engine_guard); 150 + 151 + if is_command_pos { 152 + for (_, name, desc, _) in working_set 153 + .find_commands_by_predicate(|value| value.starts_with(prefix.as_bytes()), true) 154 + { 155 + add_cmd_suggestion(name, desc); 156 + } 157 + } else { 158 + // File completion 159 + // Split prefix into directory and file part 160 + let (dir, file_prefix) = if let Some(idx) = prefix.rfind('/') { 161 + (&prefix[..idx + 1], &prefix[idx + 1..]) 162 + } else { 163 + ("", prefix.as_str()) 164 + }; 165 + 166 + // Fix: Clean up the directory path before joining. 167 + // VFS often fails if 'join' is called with a trailing slash (e.g. "a/") because it interprets it as "a" + "" 168 + let dir_to_join = if dir.len() > 1 && dir.ends_with('/') { 169 + &dir[..dir.len() - 1] 170 + } else { 171 + dir 172 + }; 173 + 174 + let target_dir = if !dir.is_empty() { 175 + match root.join(dir_to_join) { 176 + Ok(d) => { 177 + if let Ok(true) = d.is_dir() { 178 + Some(d) 179 + } else { 180 + None 181 + } 182 + } 183 + Err(_) => None, 184 + } 185 + } else { 186 + // If prefix is empty, list current directory 187 + Some(root.join("").unwrap()) 188 + }; 189 + 190 + if let Some(d) = target_dir { 191 + if let Ok(iterator) = d.read_dir() { 192 + for entry in iterator { 193 + let name = entry.filename(); 194 + if name.starts_with(file_prefix) { 195 + let full_completion = format!("{}{}", dir, name); 196 + suggestions.push(Suggestion { 197 + name: full_completion.clone(), 198 + description: None, 199 + is_command: false, 200 + rendered: full_completion, 201 + span_start, 202 + span_end, 203 + }) 204 + } 205 + } 206 + } 207 + } 208 + } 209 + 210 + suggestions.sort(); 211 + 212 + serde_json::to_string(&suggestions).unwrap_or_else(|_| "[]".to_string()) 213 + }
+370
dysnomia/src/default_context.rs
··· 1 + use nu_command::*; 2 + use nu_protocol::engine::{EngineState, StateWorkingSet}; 3 + 4 + pub fn add_shell_command_context(mut engine_state: EngineState) -> EngineState { 5 + let delta = { 6 + let mut working_set = StateWorkingSet::new(&engine_state); 7 + 8 + macro_rules! bind_command { 9 + ( $( $command:expr ),* $(,)? ) => { 10 + $( working_set.add_decl(Box::new($command)); )* 11 + }; 12 + } 13 + 14 + // If there are commands that have the same name as default declarations, 15 + // they have to be registered before the main declarations. This helps to make 16 + // them only accessible if the correct input value category is used with the 17 + // declaration 18 + 19 + // Database-related 20 + // Adds all related commands to query databases 21 + // add_database_decls(&mut working_set); 22 + 23 + // Charts 24 + bind_command! { 25 + Histogram 26 + } 27 + 28 + // Filters 29 + bind_command! { 30 + All, 31 + Any, 32 + Append, 33 + Chunks, 34 + Columns, 35 + Compact, 36 + Default, 37 + Drop, 38 + DropColumn, 39 + DropNth, 40 + Each, 41 + Enumerate, 42 + Every, 43 + Filter, 44 + Find, 45 + First, 46 + Flatten, 47 + Get, 48 + GroupBy, 49 + Headers, 50 + Insert, 51 + IsEmpty, 52 + IsNotEmpty, 53 + Interleave, 54 + Items, 55 + Join, 56 + Take, 57 + Merge, 58 + MergeDeep, 59 + Move, 60 + TakeWhile, 61 + TakeUntil, 62 + Last, 63 + Length, 64 + Lines, 65 + ParEach, 66 + ChunkBy, 67 + Prepend, 68 + Reduce, 69 + Reject, 70 + Rename, 71 + Reverse, 72 + Select, 73 + Skip, 74 + SkipUntil, 75 + SkipWhile, 76 + Slice, 77 + Sort, 78 + SortBy, 79 + SplitList, 80 + Tee, 81 + Transpose, 82 + Uniq, 83 + UniqBy, 84 + Upsert, 85 + Update, 86 + Values, 87 + Where, 88 + Window, 89 + Wrap, 90 + Zip, 91 + }; 92 + 93 + // Misc 94 + bind_command! { 95 + Panic, 96 + }; 97 + 98 + // Path 99 + bind_command! { 100 + Path, 101 + PathBasename, 102 + PathSelf, 103 + PathDirname, 104 + PathExists, 105 + PathExpand, 106 + PathJoin, 107 + PathParse, 108 + PathRelativeTo, 109 + PathSplit, 110 + PathType, 111 + }; 112 + 113 + // Help 114 + bind_command! { 115 + Help, 116 + HelpAliases, 117 + HelpExterns, 118 + HelpCommands, 119 + HelpModules, 120 + HelpOperators, 121 + HelpPipeAndRedirect, 122 + HelpEscapes, 123 + }; 124 + 125 + // Debug 126 + bind_command! { 127 + Ast, 128 + Debug, 129 + DebugEnv, 130 + DebugExperimentalOptions, 131 + DebugInfo, 132 + DebugProfile, 133 + Explain, 134 + Inspect, 135 + Metadata, 136 + MetadataAccess, 137 + MetadataSet, 138 + TimeIt, 139 + View, 140 + ViewBlocks, 141 + ViewFiles, 142 + ViewIr, 143 + ViewSource, 144 + ViewSpan, 145 + }; 146 + 147 + // Strings 148 + bind_command! { 149 + Ansi, 150 + AnsiLink, 151 + AnsiStrip, 152 + Char, 153 + Decode, 154 + Encode, 155 + DecodeHex, 156 + EncodeHex, 157 + DecodeBase32, 158 + EncodeBase32, 159 + DecodeBase32Hex, 160 + EncodeBase32Hex, 161 + DecodeBase64, 162 + EncodeBase64, 163 + Detect, 164 + DetectColumns, 165 + DetectType, 166 + Parse, 167 + Split, 168 + SplitChars, 169 + SplitColumn, 170 + SplitRow, 171 + SplitWords, 172 + Str, 173 + StrCapitalize, 174 + StrContains, 175 + StrDistance, 176 + StrDowncase, 177 + StrEndswith, 178 + StrExpand, 179 + StrJoin, 180 + StrReplace, 181 + StrIndexOf, 182 + StrLength, 183 + StrReverse, 184 + StrStats, 185 + StrStartsWith, 186 + StrSubstring, 187 + StrTrim, 188 + StrUpcase, 189 + Format, 190 + FormatDate, 191 + FormatDuration, 192 + FormatFilesize, 193 + }; 194 + 195 + // Date 196 + bind_command! { 197 + Date, 198 + DateFromHuman, 199 + DateHumanize, 200 + DateListTimezones, 201 + DateNow, 202 + DateToTimezone, 203 + }; 204 + 205 + // Formats 206 + bind_command! { 207 + From, 208 + FromCsv, 209 + FromJson, 210 + FromMsgpack, 211 + FromMsgpackz, 212 + FromNuon, 213 + FromOds, 214 + FromSsv, 215 + FromToml, 216 + FromTsv, 217 + FromXlsx, 218 + FromXml, 219 + FromYaml, 220 + FromYml, 221 + To, 222 + ToCsv, 223 + ToJson, 224 + ToMd, 225 + ToMsgpack, 226 + ToMsgpackz, 227 + ToNuon, 228 + ToText, 229 + ToToml, 230 + ToTsv, 231 + Upsert, 232 + Where, 233 + ToXml, 234 + ToYaml, 235 + ToYml, 236 + }; 237 + 238 + // Viewers 239 + bind_command! { 240 + Griddle, 241 + Table, 242 + }; 243 + 244 + // Conversions 245 + bind_command! { 246 + Fill, 247 + Into, 248 + IntoBool, 249 + IntoBinary, 250 + IntoCellPath, 251 + IntoDatetime, 252 + IntoDuration, 253 + IntoFloat, 254 + IntoFilesize, 255 + IntoInt, 256 + IntoRecord, 257 + IntoString, 258 + IntoGlob, 259 + IntoValue, 260 + SplitCellPath, 261 + }; 262 + 263 + // Env 264 + bind_command! { 265 + ExportEnv, 266 + LoadEnv, 267 + SourceEnv, 268 + WithEnv, 269 + ConfigNu, 270 + ConfigEnv, 271 + ConfigFlatten, 272 + ConfigMeta, 273 + ConfigReset, 274 + ConfigUseColors, 275 + }; 276 + 277 + // Math 278 + bind_command! { 279 + Math, 280 + MathAbs, 281 + MathAvg, 282 + MathCeil, 283 + MathFloor, 284 + MathMax, 285 + MathMedian, 286 + MathMin, 287 + MathMode, 288 + MathProduct, 289 + MathRound, 290 + MathSqrt, 291 + MathStddev, 292 + MathSum, 293 + MathVariance, 294 + MathLog, 295 + }; 296 + 297 + // Bytes 298 + bind_command! { 299 + Bytes, 300 + BytesLen, 301 + BytesSplit, 302 + BytesStartsWith, 303 + BytesEndsWith, 304 + BytesReverse, 305 + BytesReplace, 306 + BytesAdd, 307 + BytesAt, 308 + BytesIndexOf, 309 + BytesCollect, 310 + BytesRemove, 311 + BytesBuild 312 + } 313 + 314 + bind_command! { 315 + Url, 316 + UrlBuildQuery, 317 + UrlSplitQuery, 318 + UrlDecode, 319 + UrlEncode, 320 + UrlJoin, 321 + UrlParse, 322 + } 323 + 324 + // Generators 325 + bind_command! { 326 + Cal, 327 + Seq, 328 + SeqDate, 329 + SeqChar, 330 + Generate, 331 + }; 332 + 333 + // Hash 334 + bind_command! { 335 + Hash, 336 + HashMd5::default(), 337 + HashSha256::default(), 338 + }; 339 + 340 + // Removed 341 + bind_command! { 342 + LetEnv, 343 + DateFormat, 344 + }; 345 + 346 + // bind_command! { 347 + // Stor, 348 + // StorCreate, 349 + // StorDelete, 350 + // StorExport, 351 + // StorImport, 352 + // StorInsert, 353 + // StorOpen, 354 + // StorReset, 355 + // StorUpdate, 356 + // }; 357 + 358 + working_set.render() 359 + }; 360 + 361 + if let Err(err) = engine_state.merge_delta(delta) { 362 + eprintln!("Error creating default context: {err:?}"); 363 + } 364 + 365 + // Cache the table decl id so we don't have to look it up later 366 + let table_decl_id = engine_state.find_decl("table".as_bytes(), &[]); 367 + engine_state.table_decl_id = table_decl_id; 368 + 369 + engine_state 370 + }
+78
dysnomia/src/error.rs
··· 1 + use miette::{GraphicalReportHandler, Report, SourceCode, SourceSpan, SpanContents}; 2 + 3 + pub struct CommandError { 4 + pub error: Report, 5 + pub start_offset: usize, 6 + } 7 + 8 + pub struct OffsetSource { 9 + pub source: String, 10 + pub start_offset: usize, 11 + } 12 + 13 + pub struct OffsetSpanContents<'a> { 14 + inner: Box<dyn SpanContents<'a> + 'a>, 15 + global_span: SourceSpan, 16 + } 17 + 18 + impl<'a> SpanContents<'a> for OffsetSpanContents<'a> { 19 + fn data(&self) -> &'a [u8] { 20 + self.inner.data() 21 + } 22 + fn span(&self) -> &SourceSpan { 23 + &self.global_span 24 + } 25 + fn line(&self) -> usize { 26 + self.inner.line() 27 + } 28 + fn column(&self) -> usize { 29 + self.inner.column() 30 + } 31 + fn line_count(&self) -> usize { 32 + self.inner.line_count() 33 + } 34 + } 35 + 36 + impl SourceCode for OffsetSource { 37 + fn read_span<'b>( 38 + &'b self, 39 + span: &SourceSpan, 40 + context_lines_before: usize, 41 + context_lines_after: usize, 42 + ) -> Result<Box<dyn miette::SpanContents<'b> + 'b>, miette::MietteError> { 43 + let local_start = span.offset().saturating_sub(self.start_offset); 44 + let local_len = std::cmp::min(span.len(), self.source.len().saturating_sub(local_start)); 45 + let local_span = SourceSpan::new(local_start.into(), local_len); 46 + 47 + let local_contents = 48 + self.source 49 + .read_span(&local_span, context_lines_before, context_lines_after)?; 50 + 51 + let content_local_span = local_contents.span(); 52 + let global_start = content_local_span.offset() + self.start_offset; 53 + let global_span = SourceSpan::new(global_start.into(), content_local_span.len()); 54 + 55 + Ok(Box::new(OffsetSpanContents { 56 + inner: local_contents, 57 + global_span, 58 + })) 59 + } 60 + } 61 + 62 + pub fn format_error(error: Report, input: String, start_offset: usize) -> String { 63 + let handler = GraphicalReportHandler::new() 64 + .with_theme(miette::GraphicalTheme::unicode()) 65 + .with_cause_chain(); 66 + 67 + let source = OffsetSource { 68 + source: input, 69 + start_offset, 70 + }; 71 + 72 + let report_with_source = error.with_source_code(source); 73 + let mut output = String::new(); 74 + handler 75 + .render_report(&mut output, report_with_source.as_ref()) 76 + .unwrap(); 77 + output 78 + }
+189
dysnomia/src/globals.rs
··· 1 + use futures::stream::AbortHandle; 2 + use nu_protocol::{ 3 + ShellError, Span, 4 + engine::{EngineState, StateDelta}, 5 + }; 6 + use std::{ 7 + collections::HashMap, 8 + sync::{ 9 + Arc, Mutex, OnceLock, RwLock, 10 + atomic::{AtomicUsize, Ordering}, 11 + }, 12 + time::{Duration, SystemTime, UNIX_EPOCH}, 13 + }; 14 + use vfs::{VfsError, VfsPath, error::VfsErrorKind}; 15 + use wasm_bindgen::prelude::*; 16 + 17 + use crate::memory_fs::MemoryFS; 18 + 19 + static ROOT: OnceLock<Arc<VfsPath>> = OnceLock::new(); 20 + 21 + pub fn get_vfs() -> Arc<VfsPath> { 22 + ROOT.get_or_init(|| Arc::new(VfsPath::new(MemoryFS::new()))) 23 + .clone() 24 + } 25 + 26 + static PWD: OnceLock<RwLock<Arc<VfsPath>>> = OnceLock::new(); 27 + 28 + pub fn get_pwd() -> Arc<VfsPath> { 29 + PWD.get_or_init(|| RwLock::new(get_vfs())) 30 + .read() 31 + .unwrap() 32 + .clone() 33 + } 34 + 35 + pub fn set_pwd(path: Arc<VfsPath>) { 36 + *PWD.get_or_init(|| RwLock::new(get_vfs())).write().unwrap() = path; 37 + } 38 + 39 + pub fn to_shell_err(span: Span) -> impl Fn(VfsError) -> ShellError { 40 + move |vfs_error: VfsError| ShellError::GenericError { 41 + error: (match vfs_error.kind() { 42 + VfsErrorKind::DirectoryExists 43 + | VfsErrorKind::FileExists 44 + | VfsErrorKind::FileNotFound 45 + | VfsErrorKind::InvalidPath => "path error", 46 + _ => "io error", 47 + }) 48 + .to_string(), 49 + msg: vfs_error.to_string(), 50 + span: Some(span), 51 + help: None, 52 + inner: vec![], 53 + } 54 + } 55 + 56 + pub struct TaskInfo { 57 + pub id: usize, 58 + pub description: String, 59 + pub handle: AbortHandle, 60 + } 61 + 62 + pub struct CallbackWrapper(js_sys::Function); 63 + unsafe impl Send for CallbackWrapper {} 64 + unsafe impl Sync for CallbackWrapper {} 65 + 66 + static NEXT_TASK_ID: AtomicUsize = AtomicUsize::new(1); 67 + static TASK_REGISTRY: OnceLock<Mutex<HashMap<usize, TaskInfo>>> = OnceLock::new(); 68 + static TASK_CALLBACK: OnceLock<Mutex<Option<CallbackWrapper>>> = OnceLock::new(); 69 + 70 + pub fn get_registry() -> &'static Mutex<HashMap<usize, TaskInfo>> { 71 + TASK_REGISTRY.get_or_init(|| Mutex::new(HashMap::new())) 72 + } 73 + 74 + #[wasm_bindgen] 75 + pub fn register_task_count_callback(f: js_sys::Function) { 76 + let _ = TASK_CALLBACK.get_or_init(|| Mutex::new(None)); 77 + if let Ok(mut guard) = TASK_CALLBACK.get().unwrap().lock() { 78 + *guard = Some(CallbackWrapper(f)); 79 + } 80 + } 81 + 82 + pub fn notify_task_count() { 83 + if let Some(mutex) = TASK_CALLBACK.get() { 84 + if let Ok(guard) = mutex.lock() { 85 + if let Some(cb) = guard.as_ref() { 86 + let count = if let Ok(reg) = get_registry().lock() { 87 + reg.len() 88 + } else { 89 + 0 90 + }; 91 + let this = JsValue::NULL; 92 + let arg = JsValue::from(count as u32); 93 + let _ = cb.0.call1(&this, &arg); 94 + } 95 + } 96 + } 97 + } 98 + 99 + pub fn register_task(description: String, handle: AbortHandle) -> usize { 100 + let id = NEXT_TASK_ID.fetch_add(1, Ordering::Relaxed); 101 + if let Ok(mut reg) = get_registry().lock() { 102 + reg.insert( 103 + id, 104 + TaskInfo { 105 + id, 106 + description, 107 + handle, 108 + }, 109 + ); 110 + } 111 + notify_task_count(); 112 + id 113 + } 114 + 115 + pub fn remove_task(id: usize) { 116 + if let Ok(mut reg) = get_registry().lock() { 117 + reg.remove(&id); 118 + } 119 + notify_task_count(); 120 + } 121 + 122 + pub fn get_all_tasks() -> Vec<(usize, String)> { 123 + if let Ok(reg) = get_registry().lock() { 124 + reg.values() 125 + .map(|t| (t.id, t.description.clone())) 126 + .collect() 127 + } else { 128 + vec![] 129 + } 130 + } 131 + 132 + pub fn kill_task_by_id(id: usize) -> bool { 133 + if let Ok(mut reg) = get_registry().lock() { 134 + if let Some(task) = reg.remove(&id) { 135 + task.handle.abort(); 136 + drop(reg); 137 + notify_task_count(); 138 + return true; 139 + } 140 + } 141 + false 142 + } 143 + 144 + static PENDING_DELTAS: OnceLock<Mutex<Vec<StateDelta>>> = OnceLock::new(); 145 + 146 + pub fn queue_delta(delta: StateDelta) { 147 + let _ = PENDING_DELTAS.get_or_init(|| Mutex::new(Vec::new())); 148 + if let Ok(mut guard) = PENDING_DELTAS.get().unwrap().lock() { 149 + guard.push(delta); 150 + } 151 + } 152 + 153 + pub fn apply_pending_deltas(engine_state: &mut EngineState) -> Result<(), ShellError> { 154 + if let Some(mutex) = PENDING_DELTAS.get() { 155 + if let Ok(mut guard) = mutex.lock() { 156 + for delta in guard.drain(..) { 157 + engine_state.merge_delta(delta)?; 158 + } 159 + } 160 + } 161 + Ok(()) 162 + } 163 + 164 + pub static CONSOLE_CALLBACK: OnceLock<Mutex<Option<CallbackWrapper>>> = OnceLock::new(); 165 + 166 + #[wasm_bindgen] 167 + pub fn register_console_callback(f: js_sys::Function) { 168 + let _ = CONSOLE_CALLBACK.get_or_init(|| Mutex::new(None)); 169 + if let Ok(mut guard) = CONSOLE_CALLBACK.get().unwrap().lock() { 170 + *guard = Some(CallbackWrapper(f)); 171 + } 172 + } 173 + 174 + pub fn print_to_console(msg: &str, is_cmd: bool) { 175 + if let Some(mutex) = CONSOLE_CALLBACK.get() { 176 + if let Ok(guard) = mutex.lock() { 177 + if let Some(cb) = guard.as_ref() { 178 + let this = JsValue::NULL; 179 + let arg = JsValue::from_str(msg); 180 + let arg2 = JsValue::from_bool(is_cmd); 181 + let _ = cb.0.call2(&this, &arg, &arg2); 182 + } 183 + } 184 + } 185 + } 186 + 187 + pub fn current_time() -> Option<SystemTime> { 188 + UNIX_EPOCH.checked_add(Duration::from_millis(js_sys::Date::now() as u64)) 189 + }
+72
dysnomia/src/highlight.rs
··· 1 + use super::*; 2 + 3 + #[wasm_bindgen] 4 + pub fn highlight(input: &str) -> String { 5 + let engine_guard = ENGINE_STATE 6 + .get() 7 + .unwrap() 8 + .lock() 9 + .expect("engine state initialized"); 10 + let mut working_set = StateWorkingSet::new(&engine_guard); 11 + 12 + // Capture the global offset before parsing, as parse will generate spans relative to this 13 + let global_offset = working_set.next_span_start(); 14 + 15 + // Parse the input block using Nushell's full parser 16 + let block = parse(&mut working_set, None, input.as_bytes(), false); 17 + 18 + // Flatten the block to get shapes (semantic tokens) 19 + let shapes = flatten_block(&working_set, &block); 20 + 21 + let mut output = String::new(); 22 + let mut last_end = 0; 23 + 24 + for (span, shape) in shapes { 25 + // Adjust global span to local byte indices 26 + let local_start = span.start.saturating_sub(global_offset); 27 + let local_end = span.end.saturating_sub(global_offset); 28 + 29 + if local_start >= input.len() { 30 + continue; 31 + } 32 + let safe_end = std::cmp::min(local_end, input.len()); 33 + 34 + if local_start > last_end { 35 + output.push_str(&input[last_end..local_start]); 36 + } 37 + 38 + let start_index = std::cmp::max(local_start, last_end); 39 + if start_index >= safe_end { 40 + continue; 41 + } 42 + 43 + // Colors corresponding to standard Nushell/Ansi map 44 + let color = match shape { 45 + FlatShape::Pipe | FlatShape::Redirection => "\x1b[35m", // Magenta 46 + FlatShape::Bool | FlatShape::Int | FlatShape::Float => "\x1b[35;1m", // Light Magenta (Numbers/Bool) 47 + FlatShape::External(_) | FlatShape::InternalCall(_) | FlatShape::Keyword => { 48 + "\x1b[32;1m" 49 + } // Green Bold 50 + FlatShape::String | FlatShape::StringInterpolation | FlatShape::RawString => "\x1b[36m", // Cyan 51 + FlatShape::Variable(_) | FlatShape::Flag => "\x1b[34m", // Blue 52 + FlatShape::Garbage => "\x1b[31;1m\x1b[47m", // Red on White 53 + FlatShape::Signature => "\x1b[33;1m", // Yellow Bold 54 + // Closures, blocks, punctuation often fall here 55 + FlatShape::Block => "\x1b[37m", // White 56 + FlatShape::Closure => "\x1b[36;1m", // Light Cyan 57 + _ => "\x1b[0m", 58 + }; 59 + 60 + output.push_str(color); 61 + output.push_str(&input[start_index..safe_end]); 62 + output.push_str("\x1b[0m"); 63 + 64 + last_end = safe_end; 65 + } 66 + 67 + if last_end < input.len() { 68 + output.push_str(&input[last_end..]); 69 + } 70 + 71 + output 72 + }
+249
dysnomia/src/lib.rs
··· 1 + use jacquard::chrono; 2 + use miette::Report; 3 + use nu_cmd_extra::add_extra_command_context; 4 + use nu_cmd_lang::create_default_context; 5 + use nu_engine::{command_prelude::*, eval_block}; 6 + use nu_parser::{FlatShape, TokenContents, flatten_block, lex, parse}; 7 + use nu_protocol::{ 8 + Config, PipelineData, Span, 9 + engine::{Call, EngineState, Stack, StateWorkingSet}, 10 + }; 11 + use serde::Serialize; 12 + use std::{ 13 + sync::{Arc, Mutex, OnceLock}, 14 + time::UNIX_EPOCH, 15 + }; 16 + use vfs::VfsError; 17 + use wasm_bindgen::prelude::*; 18 + 19 + pub mod cmd; 20 + pub mod completion; 21 + pub mod default_context; 22 + pub mod error; 23 + pub mod globals; 24 + pub mod highlight; 25 + pub mod memory_fs; 26 + 27 + use crate::{ 28 + cmd::{ 29 + Cd, Fetch, Job, JobKill, JobList, Ls, Mkdir, Open, Pwd, Random, Rm, Save, Source, Sys, 30 + Version, 31 + }, 32 + default_context::add_shell_command_context, 33 + error::format_error, 34 + globals::{apply_pending_deltas, current_time, get_pwd, print_to_console}, 35 + }; 36 + use error::CommandError; 37 + use globals::get_vfs; 38 + 39 + static ENGINE_STATE: OnceLock<Mutex<EngineState>> = OnceLock::new(); 40 + static STACK: OnceLock<Mutex<Stack>> = OnceLock::new(); 41 + 42 + fn init_engine_internal() -> Result<(), Report> { 43 + let mut engine_state = create_default_context(); 44 + engine_state = add_shell_command_context(engine_state); 45 + engine_state = add_extra_command_context(engine_state); 46 + 47 + let write_file = |name: &str, contents: &str| { 48 + get_vfs() 49 + .join(name) 50 + .and_then(|p| p.create_file()) 51 + .and_then(|mut f| f.write_all(contents.as_bytes()).map_err(VfsError::from)) 52 + .map_err(|e| miette::miette!(e.to_string())) 53 + }; 54 + 55 + let access_log = format!( 56 + r#"/dysnomia.v000 /user: 90008/ /ip: [REDACTED]/ /time: [REDACTED]// 57 + /dysnomia.v002 /user: 90008/ /ip: [REDACTED]/ /time: [REDACTED]// 58 + /dysnomia.v011 /user: 90008/ /ip: [REDACTED]/ /time: [REDACTED]// 59 + [...ENTRIES TRUNCATED...] 60 + /dysnomia.v099 /user: anonymous/ /ip: [REDACTED]/ /time: {time}//"#, 61 + time = current_time() 62 + .and_then(|t| t.duration_since(UNIX_EPOCH).ok()) 63 + .map_or_else( 64 + || "unknown".to_string(), 65 + |time| chrono::DateTime::from_timestamp_nanos(time.as_nanos() as i64) 66 + .format("%Y-%m-%dT%H:%M:%SZ") 67 + .to_string() 68 + ) 69 + ); 70 + write_file(".access.log", &access_log)?; 71 + 72 + let welcome_txt = r#"welcome anonymous ! 73 + 74 + 75 + you are interfacing with dysnomia.v099 76 + using the nu shell. 77 + 78 + 79 + a few commands you can try: 80 + 81 + "hello, user!" | save message.txt 82 + fetch at://ptr.pet 83 + ls --help"#; 84 + write_file("welcome.txt", &welcome_txt)?; 85 + 86 + let mut working_set = StateWorkingSet::new(&engine_state); 87 + let decls: [Box<dyn Command>; 15] = [ 88 + Box::new(Ls), 89 + Box::new(Open), 90 + Box::new(Save), 91 + Box::new(Mkdir), 92 + Box::new(Pwd), 93 + Box::new(Cd), 94 + Box::new(Rm), 95 + Box::new(Fetch), 96 + Box::new(Source), 97 + Box::new(Job), 98 + Box::new(JobList), 99 + Box::new(JobKill), 100 + Box::new(Sys), 101 + Box::new(Random), 102 + Box::new(Version), 103 + ]; 104 + for decl in decls { 105 + working_set.add_decl(decl); 106 + } 107 + engine_state.merge_delta(working_set.delta)?; 108 + 109 + let mut config = Config::default(); 110 + config.use_ansi_coloring = true.into(); 111 + config.show_banner = nu_protocol::BannerKind::Full; 112 + engine_state.config = Arc::new(config); 113 + 114 + ENGINE_STATE 115 + .set(Mutex::new(engine_state)) 116 + .map_err(|_| miette::miette!("ENGINE_STATE was already set!?"))?; 117 + STACK 118 + .set(Mutex::new(Stack::new())) 119 + .map_err(|_| miette::miette!("STACK was already set!?"))?; 120 + 121 + // web_sys::console::log_1(&"Hello, World!".into()); 122 + 123 + Ok(()) 124 + } 125 + 126 + #[wasm_bindgen] 127 + pub fn init_engine() -> String { 128 + console_error_panic_hook::set_once(); 129 + init_engine_internal().map_or_else(|err| format!("error: {err}"), |_| String::new()) 130 + } 131 + 132 + fn run_command_internal( 133 + engine_state: &mut EngineState, 134 + stack: &mut Stack, 135 + input: &str, 136 + ) -> Result<(), CommandError> { 137 + // apply any pending deltas from previous commands (like `source`) 138 + apply_pending_deltas(engine_state).map_err(|e| CommandError { 139 + error: Report::new(e), 140 + start_offset: 0, 141 + })?; 142 + // set PWD 143 + engine_state.add_env_var( 144 + "PWD".to_string(), 145 + get_pwd_string().into_value(Span::unknown()), 146 + ); 147 + 148 + let mut working_set = StateWorkingSet::new(engine_state); 149 + 150 + // Capture the start offset *before* adding the file, as this is the global offset 151 + // where our file begins. 152 + let start_offset = working_set.next_span_start(); 153 + let block = parse(&mut working_set, Some("entry"), input.as_bytes(), false); 154 + 155 + let cmd_err = |err: ShellError| CommandError { 156 + error: Report::new(err), 157 + start_offset, 158 + }; 159 + 160 + if let Some(err) = working_set.parse_errors.into_iter().next() { 161 + return Err(CommandError { 162 + error: Report::new(err), 163 + start_offset, 164 + }); 165 + } 166 + if let Some(err) = working_set.compile_errors.into_iter().next() { 167 + return Err(CommandError { 168 + error: Report::new(err), 169 + start_offset, 170 + }); 171 + } 172 + 173 + engine_state 174 + .merge_delta(working_set.delta) 175 + .map_err(cmd_err)?; 176 + let result = eval_block::<nu_protocol::debugger::WithoutDebug>( 177 + engine_state, 178 + stack, 179 + &block, 180 + PipelineData::Empty, 181 + ); 182 + 183 + let pipeline_data = result.map_err(cmd_err)?; 184 + let table_command = nu_command::Table; 185 + let call = Call::new(pipeline_data.span().unwrap_or_else(Span::unknown)); 186 + 187 + let res = table_command 188 + .run(engine_state, stack, &call, pipeline_data.body) 189 + .map_err(cmd_err)?; 190 + 191 + match res { 192 + PipelineData::Empty => {} 193 + PipelineData::Value(v, _) => { 194 + print_to_console(&v.to_expanded_string("\n", &engine_state.config), true) 195 + } 196 + PipelineData::ByteStream(s, _) => { 197 + for line in s.lines().into_iter().flatten() { 198 + let out = line.map_err(|e| CommandError { 199 + error: Report::new(e), 200 + start_offset, 201 + })?; 202 + print_to_console(&out, true); 203 + } 204 + } 205 + PipelineData::ListStream(s, _) => { 206 + for item in s.into_iter() { 207 + let out = item.to_expanded_string("\n", &engine_state.config); 208 + print_to_console(&out, true); 209 + } 210 + } 211 + } 212 + 213 + Ok(()) 214 + } 215 + 216 + #[wasm_bindgen] 217 + pub fn run_command(input: &str) -> Option<String> { 218 + let (mut engine_guard, mut stack_guard) = ( 219 + ENGINE_STATE 220 + .get() 221 + .unwrap() 222 + .lock() 223 + .expect("engine state initialized"), 224 + STACK.get().unwrap().lock().expect("stack initialized"), 225 + ); 226 + 227 + let result = std::panic::catch_unwind(move || { 228 + match run_command_internal(&mut engine_guard, &mut stack_guard, input) { 229 + Ok(_) => None, 230 + Err(cmd_err) => Some(format_error( 231 + cmd_err.error, 232 + input.to_owned(), 233 + cmd_err.start_offset, 234 + )), 235 + } 236 + }); 237 + result.unwrap_or_else(|err| Some(format!("panicked: {err:?}"))) 238 + } 239 + 240 + #[wasm_bindgen] 241 + pub fn get_pwd_string() -> String { 242 + // web_sys::console::log_1(&"before pwd".into()); 243 + let pwd = get_pwd(); 244 + // web_sys::console::log_1(&"after pwd".into()); 245 + if pwd.is_root() { 246 + return "/".to_string(); 247 + } 248 + pwd.as_str().to_string() 249 + }
+390
dysnomia/src/memory_fs.rs
··· 1 + //! An ephemeral in-memory file system, intended mainly for unit tests 2 + 3 + use core::cmp; 4 + use std::fmt; 5 + use std::fmt::{Debug, Formatter}; 6 + use std::io::{Cursor, Read, Seek, SeekFrom, Write}; 7 + use std::mem::swap; 8 + use std::sync::Arc; 9 + use std::time::SystemTime; 10 + use vfs::error::VfsErrorKind; 11 + use vfs::{FileSystem, VfsFileType}; 12 + use vfs::{SeekAndRead, VfsMetadata}; 13 + use vfs::{SeekAndWrite, VfsResult}; 14 + 15 + use crate::globals::current_time; 16 + 17 + type MemoryFsHandle = Arc<MemoryFsImpl>; 18 + 19 + /// An ephemeral in-memory file system, intended mainly for unit tests 20 + pub struct MemoryFS { 21 + handle: MemoryFsHandle, 22 + } 23 + 24 + impl Debug for MemoryFS { 25 + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { 26 + f.write_str("In Memory File System") 27 + } 28 + } 29 + 30 + impl MemoryFS { 31 + /// Create a new in-memory filesystem 32 + pub fn new() -> Self { 33 + MemoryFS { 34 + handle: Arc::new(MemoryFsImpl::new()), 35 + } 36 + } 37 + 38 + fn ensure_has_parent(&self, path: &str) -> VfsResult<()> { 39 + let separator = path.rfind('/'); 40 + if let Some(index) = separator { 41 + if self.exists(&path[..index])? { 42 + return Ok(()); 43 + } 44 + } 45 + Err(VfsErrorKind::Other("Parent path does not exist".into()).into()) 46 + } 47 + } 48 + 49 + impl Default for MemoryFS { 50 + fn default() -> Self { 51 + Self::new() 52 + } 53 + } 54 + 55 + struct WritableFile { 56 + content: Cursor<Vec<u8>>, 57 + destination: String, 58 + fs: MemoryFsHandle, 59 + } 60 + 61 + impl Seek for WritableFile { 62 + fn seek(&mut self, pos: SeekFrom) -> std::io::Result<u64> { 63 + self.content.seek(pos) 64 + } 65 + } 66 + 67 + impl Write for WritableFile { 68 + fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> { 69 + self.content.write(buf) 70 + } 71 + 72 + fn flush(&mut self) -> std::io::Result<()> { 73 + self.content.flush()?; 74 + let mut content = self.content.get_ref().clone(); 75 + swap(&mut content, self.content.get_mut()); 76 + let content = Arc::new(content); 77 + 78 + let new_file = self 79 + .fs 80 + .files 81 + .peek_with(&self.destination, |_, previous_file| MemoryFile { 82 + file_type: VfsFileType::File, 83 + content: content.clone(), 84 + created: previous_file.created, 85 + modified: current_time(), 86 + accessed: previous_file.accessed, 87 + }) 88 + .unwrap_or_else(|| { 89 + let time = current_time(); 90 + MemoryFile { 91 + file_type: VfsFileType::File, 92 + content, 93 + created: time, 94 + modified: time, 95 + accessed: None, 96 + } 97 + }); 98 + 99 + // Remove old entry if it exists, then insert new one 100 + self.fs.files.remove_sync(&self.destination); 101 + let _ = self 102 + .fs 103 + .files 104 + .insert_sync(self.destination.clone(), new_file); 105 + Ok(()) 106 + } 107 + } 108 + 109 + impl Drop for WritableFile { 110 + fn drop(&mut self) { 111 + self.flush() 112 + .expect("Flush failed while dropping in-memory file"); 113 + } 114 + } 115 + 116 + struct ReadableFile { 117 + #[allow(clippy::rc_buffer)] // to allow accessing the same object as writable 118 + content: Arc<Vec<u8>>, 119 + position: u64, 120 + } 121 + 122 + impl ReadableFile { 123 + fn len(&self) -> u64 { 124 + self.content.len() as u64 - self.position 125 + } 126 + } 127 + 128 + impl Read for ReadableFile { 129 + fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> { 130 + let amt = cmp::min(buf.len(), self.len() as usize); 131 + 132 + if amt == 1 { 133 + buf[0] = self.content[self.position as usize]; 134 + } else { 135 + buf[..amt].copy_from_slice( 136 + &self.content.as_slice()[self.position as usize..self.position as usize + amt], 137 + ); 138 + } 139 + self.position += amt as u64; 140 + Ok(amt) 141 + } 142 + } 143 + 144 + impl Seek for ReadableFile { 145 + fn seek(&mut self, pos: SeekFrom) -> std::io::Result<u64> { 146 + match pos { 147 + SeekFrom::Start(offset) => self.position = offset, 148 + SeekFrom::Current(offset) => self.position = (self.position as i64 + offset) as u64, 149 + SeekFrom::End(offset) => self.position = (self.content.len() as i64 + offset) as u64, 150 + } 151 + Ok(self.position) 152 + } 153 + } 154 + 155 + impl FileSystem for MemoryFS { 156 + fn read_dir(&self, path: &str) -> VfsResult<Box<dyn Iterator<Item = String> + Send>> { 157 + let prefix = format!("{}/", path); 158 + 159 + // Ensure the directory exists 160 + if !self.handle.files.contains(path) { 161 + return Err(VfsErrorKind::FileNotFound.into()); 162 + } 163 + 164 + let guard = scc::Guard::new(); 165 + let mut entries = Vec::new(); 166 + 167 + let range_start = prefix.clone(); 168 + for (candidate_path, _) in self.handle.files.range(range_start.., &guard) { 169 + if candidate_path.starts_with(&prefix) { 170 + let rest = &candidate_path[prefix.len()..]; 171 + if !rest.contains('/') { 172 + entries.push(rest.to_string()); 173 + } 174 + } else { 175 + // we are in a different directory if the prefix doesnt match 176 + break; 177 + } 178 + } 179 + 180 + Ok(Box::new(entries.into_iter())) 181 + } 182 + 183 + fn create_dir(&self, path: &str) -> VfsResult<()> { 184 + self.ensure_has_parent(path)?; 185 + 186 + // Check if path already exists and return appropriate error 187 + if let Some(result) = self 188 + .handle 189 + .files 190 + .peek_with(path, |_, file| match file.file_type { 191 + VfsFileType::File => Err(VfsErrorKind::FileExists.into()), 192 + VfsFileType::Directory => Err(VfsErrorKind::DirectoryExists.into()), 193 + }) 194 + { 195 + return result; 196 + } 197 + 198 + let new_dir = MemoryFile { 199 + file_type: VfsFileType::Directory, 200 + content: Default::default(), 201 + created: current_time(), 202 + modified: current_time(), 203 + accessed: current_time(), 204 + }; 205 + 206 + self.handle 207 + .files 208 + .insert_sync(path.to_string(), new_dir) 209 + .map_err(|_| VfsErrorKind::DirectoryExists.into()) 210 + } 211 + 212 + fn open_file(&self, path: &str) -> VfsResult<Box<dyn SeekAndRead + Send>> { 213 + if let Some(time) = current_time() { 214 + let _ = self.set_access_time(path, time); 215 + } 216 + 217 + let content = self 218 + .handle 219 + .files 220 + .peek_with(path, |_, file| { 221 + ensure_file(file)?; 222 + VfsResult::Ok(file.content.clone()) 223 + }) 224 + .ok_or(VfsErrorKind::FileNotFound)??; 225 + 226 + Ok(Box::new(ReadableFile { 227 + content, 228 + position: 0, 229 + })) 230 + } 231 + 232 + fn create_file(&self, path: &str) -> VfsResult<Box<dyn SeekAndWrite + Send>> { 233 + self.ensure_has_parent(path)?; 234 + let content = Arc::new(Vec::<u8>::new()); 235 + let new_file = MemoryFile { 236 + file_type: VfsFileType::File, 237 + content, 238 + created: current_time(), 239 + modified: current_time(), 240 + accessed: current_time(), 241 + }; 242 + 243 + // Remove old entry if it exists, then insert new one 244 + self.handle.files.remove_sync(path); 245 + let _ = self.handle.files.insert_sync(path.to_string(), new_file); 246 + 247 + let writer = WritableFile { 248 + content: Cursor::new(vec![]), 249 + destination: path.to_string(), 250 + fs: self.handle.clone(), 251 + }; 252 + Ok(Box::new(writer)) 253 + } 254 + 255 + fn append_file(&self, path: &str) -> VfsResult<Box<dyn SeekAndWrite + Send>> { 256 + let content = self 257 + .handle 258 + .files 259 + .peek_with(path, |_, file| file.content.clone()) 260 + .ok_or(VfsErrorKind::FileNotFound)?; 261 + let mut content = Cursor::new(content.as_slice().to_vec()); 262 + content.seek(SeekFrom::End(0))?; 263 + let writer = WritableFile { 264 + content, 265 + destination: path.to_string(), 266 + fs: self.handle.clone(), 267 + }; 268 + Ok(Box::new(writer)) 269 + } 270 + 271 + fn metadata(&self, path: &str) -> VfsResult<VfsMetadata> { 272 + self.handle 273 + .files 274 + .peek_with(path, |_, file| VfsMetadata { 275 + file_type: file.file_type, 276 + len: file.content.len() as u64, 277 + modified: file.modified, 278 + created: file.created, 279 + accessed: file.accessed, 280 + }) 281 + .ok_or(VfsErrorKind::FileNotFound.into()) 282 + } 283 + 284 + fn set_creation_time(&self, path: &str, time: SystemTime) -> VfsResult<()> { 285 + let updated = self 286 + .handle 287 + .files 288 + .peek_with(path, |_, file| MemoryFile { 289 + created: Some(time), 290 + ..file.clone() 291 + }) 292 + .ok_or(VfsErrorKind::FileNotFound)?; 293 + 294 + self.handle.files.remove_sync(path); 295 + let _ = self.handle.files.insert_sync(path.to_string(), updated); 296 + Ok(()) 297 + } 298 + 299 + fn set_modification_time(&self, path: &str, time: SystemTime) -> VfsResult<()> { 300 + let updated = self 301 + .handle 302 + .files 303 + .peek_with(path, |_, file| MemoryFile { 304 + modified: Some(time), 305 + ..file.clone() 306 + }) 307 + .ok_or(VfsErrorKind::FileNotFound)?; 308 + 309 + self.handle.files.remove_sync(path); 310 + let _ = self.handle.files.insert_sync(path.to_string(), updated); 311 + Ok(()) 312 + } 313 + 314 + fn set_access_time(&self, path: &str, time: SystemTime) -> VfsResult<()> { 315 + let updated = self 316 + .handle 317 + .files 318 + .peek_with(path, |_, file| MemoryFile { 319 + accessed: Some(time), 320 + ..file.clone() 321 + }) 322 + .ok_or(VfsErrorKind::FileNotFound)?; 323 + 324 + self.handle.files.remove_sync(path); 325 + let _ = self.handle.files.insert_sync(path.to_string(), updated); 326 + Ok(()) 327 + } 328 + 329 + fn exists(&self, path: &str) -> VfsResult<bool> { 330 + Ok(self.handle.files.contains(path)) 331 + } 332 + 333 + fn remove_file(&self, path: &str) -> VfsResult<()> { 334 + self.handle 335 + .files 336 + .remove_sync(path) 337 + .then_some(Ok(())) 338 + .unwrap_or_else(|| Err(VfsErrorKind::FileNotFound.into())) 339 + } 340 + 341 + fn remove_dir(&self, path: &str) -> VfsResult<()> { 342 + if self.read_dir(path)?.next().is_some() { 343 + return Err(VfsErrorKind::Other("Directory to remove is not empty".into()).into()); 344 + } 345 + self.handle 346 + .files 347 + .remove_sync(path) 348 + .then_some(Ok(())) 349 + .unwrap_or_else(|| Err(VfsErrorKind::FileNotFound.into())) 350 + } 351 + } 352 + 353 + struct MemoryFsImpl { 354 + files: scc::TreeIndex<String, MemoryFile>, 355 + } 356 + 357 + impl MemoryFsImpl { 358 + pub fn new() -> Self { 359 + let files = scc::TreeIndex::new(); 360 + // Add root directory 361 + let _ = files.insert_sync( 362 + "".to_string(), 363 + MemoryFile { 364 + file_type: VfsFileType::Directory, 365 + content: Arc::new(vec![]), 366 + created: current_time(), 367 + modified: None, 368 + accessed: None, 369 + }, 370 + ); 371 + Self { files } 372 + } 373 + } 374 + 375 + #[derive(Clone)] 376 + struct MemoryFile { 377 + file_type: VfsFileType, 378 + content: Arc<Vec<u8>>, 379 + 380 + created: Option<SystemTime>, 381 + modified: Option<SystemTime>, 382 + accessed: Option<SystemTime>, 383 + } 384 + 385 + fn ensure_file(file: &MemoryFile) -> VfsResult<()> { 386 + if file.file_type != VfsFileType::File { 387 + return Err(VfsErrorKind::Other("Not a file".into()).into()); 388 + } 389 + Ok(()) 390 + }
+24
dysnomia/www/.gitignore
··· 1 + # Logs 2 + logs 3 + *.log 4 + npm-debug.log* 5 + yarn-debug.log* 6 + yarn-error.log* 7 + pnpm-debug.log* 8 + lerna-debug.log* 9 + 10 + node_modules 11 + dist 12 + dist-ssr 13 + *.local 14 + 15 + # Editor directories and files 16 + .vscode/* 17 + !.vscode/extensions.json 18 + .idea 19 + .DS_Store 20 + *.suo 21 + *.ntvs* 22 + *.njsproj 23 + *.sln 24 + *.sw?
+13
dysnomia/www/index.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + <link rel="icon" type="image/svg+xml" href="/vite.svg" /> 6 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 + <title>dysnomia</title> 8 + </head> 9 + <body> 10 + <div id="app"></div> 11 + <script type="module" src="/src/main.ts"></script> 12 + </body> 13 + </html>
+25
dysnomia/www/package.json
··· 1 + { 2 + "name": "dysnomia", 3 + "private": true, 4 + "version": "0.0.0", 5 + "type": "module", 6 + "scripts": { 7 + "dev": "vite", 8 + "build": "tsc && vite build", 9 + "preview": "vite preview" 10 + }, 11 + "devDependencies": { 12 + "typescript": "~5.9.3", 13 + "vite": "npm:rolldown-vite@7.2.5", 14 + "vite-plugin-top-level-await": "^1.6.0", 15 + "vite-plugin-wasm": "^3.5.0" 16 + }, 17 + "dependencies": { 18 + "@std/toml": "npm:@jsr/std__toml", 19 + "@xterm/addon-canvas": "^0.7.0", 20 + "@xterm/addon-fit": "^0.10.0", 21 + "@xterm/addon-web-links": "^0.11.0", 22 + "@xterm/addon-webgl": "^0.18.0", 23 + "@xterm/xterm": "^5.5.0" 24 + } 25 + }
+1
dysnomia/www/public/vite.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
+659
dysnomia/www/src/main.ts
··· 1 + import { Terminal } from "@xterm/xterm"; 2 + import { FitAddon } from "@xterm/addon-fit"; 3 + import { WebLinksAddon } from "@xterm/addon-web-links"; 4 + import { CanvasAddon } from "@xterm/addon-canvas"; 5 + import { WebglAddon } from "@xterm/addon-webgl"; 6 + 7 + // Import the worker using Vite's explicit worker suffix 8 + // This fixes the "disallowed MIME type" error by ensuring Vite bundles it correctly 9 + import DysnomiaWorker from "./worker?worker"; 10 + 11 + import "./style.css"; 12 + import "@xterm/xterm/css/xterm.css"; 13 + 14 + type Candidate = { 15 + name: string; 16 + description: string; 17 + is_command: boolean; 18 + rendered: string; 19 + span_start: number; 20 + span_end: number; 21 + }; 22 + 23 + type SearchState = "history" | "completion" | "none"; 24 + 25 + async function bootstrap() { 26 + // Instantiate the worker using the imported class 27 + const worker = new DysnomiaWorker(); 28 + 29 + // Communication Helpers 30 + let msgId = 0; 31 + const pending = new Map< 32 + number, 33 + { resolve: (value: any) => void; reject: (reason: any) => void } 34 + >(); 35 + 36 + // State to track if WASM is fully loaded 37 + let isWorkerReady = false; 38 + 39 + const callWorker = (type: string, payload?: any): Promise<any> => { 40 + return new Promise((resolve, reject) => { 41 + const id = ++msgId; 42 + pending.set(id, { resolve, reject }); 43 + worker.postMessage({ id, type, payload }); 44 + }); 45 + }; 46 + 47 + const term = new Terminal({ 48 + cursorBlink: true, 49 + cursorStyle: "bar", 50 + cursorInactiveStyle: "block", 51 + fontFamily: '"Comic Mono", monospace', 52 + fontSize: 15, 53 + scrollback: 100000, 54 + theme: { 55 + background: "#000000", 56 + foreground: "#ffffff", 57 + }, 58 + }); 59 + 60 + const fitAddon = new FitAddon(); 61 + term.loadAddon(fitAddon); 62 + term.loadAddon(new WebLinksAddon()); 63 + 64 + document.querySelector<HTMLDivElement>("#app")!.innerHTML = 65 + `<div id="terminal"></div>`; 66 + term.open(document.getElementById("terminal")!); 67 + try { 68 + term.loadAddon(new WebglAddon()); 69 + } catch (err) { 70 + console.error("WebGL addon failed to load:", err); 71 + console.warn("falling back to canvas!"); 72 + term.loadAddon(new CanvasAddon()); 73 + } 74 + fitAddon.fit(); 75 + 76 + let activeTasks = 0; 77 + let currentLine = ""; 78 + let completionBaseLine = ""; 79 + let cursorPos = 0; 80 + let isRunningCommand = false; 81 + 82 + let searchState: SearchState = "none"; 83 + let completionCandidates: Candidate[] = []; 84 + let completionIndex = -1; 85 + const history: string[] = []; 86 + let historyIndex = 0; 87 + 88 + // Cache PWD to avoid flickering/excessive async calls 89 + let cachedPwd = "/"; 90 + 91 + let readyPromiseResolve: () => void; 92 + const readyPromise = new Promise<void>((resolve) => { 93 + readyPromiseResolve = resolve; 94 + }); 95 + 96 + worker.onmessage = (e) => { 97 + const { id, type, payload } = e.data; 98 + 99 + // console.log("Received message:", id, type, payload); 100 + 101 + if (type === "initialized") { 102 + isWorkerReady = true; 103 + readyPromiseResolve(); 104 + } 105 + 106 + if (type === "console") { 107 + const safeMsg = payload.msg.replace(/\n/g, "\r\n"); 108 + 109 + if (!payload.isCmd) { 110 + // If we are sitting at a prompt, clear it to show the message 111 + term.write("\r\x1b[2K"); // Clear line 112 + term.write(safeMsg + "\r\n"); 113 + refreshPrompt(); 114 + } else { 115 + term.write(safeMsg + "\r\n"); 116 + } 117 + return; 118 + } 119 + 120 + if (type === "task_count") { 121 + activeTasks = payload; 122 + if (!isRunningCommand) { 123 + refreshPrompt(); 124 + } 125 + return; 126 + } 127 + 128 + if (pending.has(id)) { 129 + const resolver = pending.get(id)!; 130 + pending.delete(id); 131 + if (type === "error") { 132 + resolver.reject(payload); 133 + } else { 134 + resolver.resolve(payload); 135 + } 136 + } 137 + }; 138 + 139 + const getPrompt = () => { 140 + const indicator = 141 + activeTasks > 0 ? `\x1b[33m(${activeTasks} bg)\x1b[0m ` : ""; 142 + 143 + let modeIndicator = ""; 144 + if (searchState === "history") { 145 + modeIndicator = "\x1b[7m\x1b[34m(h-search)\x1b[0m "; 146 + } else if (searchState === "completion") { 147 + modeIndicator = "\x1b[7m\x1b[35m(c-search)\x1b[0m "; 148 + } 149 + 150 + const pathColor = isWorkerReady ? "\x1b[33m" : "\x1b[30;1m"; // Yellow (ready) vs Dark Gray (loading) 151 + return `${indicator}${pathColor}${cachedPwd}\x1b[32m/\x1b[0m ${modeIndicator}`; 152 + }; 153 + 154 + // Async Refresh Prompt 155 + const refreshPrompt = async () => { 156 + // If we are running a command (blocking), don't redraw prompt 157 + if (isRunningCommand) return; 158 + 159 + let output = ""; 160 + output += "\r"; 161 + output += "\x1b[2K"; // Clear current line 162 + output += "\x1b[J"; // Clear everything below 163 + 164 + output += getPrompt(); 165 + 166 + try { 167 + if (currentLine.length > 0 && isWorkerReady) { 168 + const highlighted = await callWorker("highlight", currentLine); 169 + output += highlighted; 170 + } else { 171 + output += currentLine; 172 + } 173 + } catch (e) { 174 + output += currentLine; 175 + } 176 + 177 + if (completionCandidates.length > 0) { 178 + output += "\x1b7"; // Save cursor position 179 + output += "\r\n"; 180 + 181 + const MAX_VISIBLE = 10; 182 + const total = completionCandidates.length; 183 + let start = 0; 184 + let end = total; 185 + 186 + if (total > MAX_VISIBLE) { 187 + const half = Math.floor(MAX_VISIBLE / 2); 188 + if (completionIndex < half) { 189 + start = 0; 190 + end = MAX_VISIBLE; 191 + } else if (completionIndex >= total - half) { 192 + start = total - MAX_VISIBLE; 193 + end = total; 194 + } else { 195 + start = completionIndex - half; 196 + end = start + MAX_VISIBLE; 197 + } 198 + } 199 + 200 + if (start > 0) { 201 + output += `\x1b[2m... ${start} more\x1b[0m\x1b[K\r\n`; 202 + } 203 + 204 + for (let i = start; i < end; i++) { 205 + const cand = completionCandidates[i]; 206 + const isSelected = i === completionIndex; 207 + let rendered = cand.rendered; 208 + 209 + if (isSelected) { 210 + rendered = rendered.replace(/\x1b\[0m/g, "\x1b[0m\x1b[7m"); 211 + output += `\x1b[7m${rendered}\x1b[K\x1b[0m\r\n`; 212 + } else { 213 + output += `${rendered}\x1b[K\r\n`; 214 + } 215 + } 216 + 217 + if (end < total) { 218 + output += `\x1b[2m... ${total - end} more\x1b[0m\x1b[K\r\n`; 219 + } 220 + 221 + output += "\x1b8"; // Restore cursor position 222 + } 223 + 224 + // Move cursor back to correct position 225 + const distance = currentLine.length - cursorPos; 226 + if (distance > 0) { 227 + output += `\x1b[${distance}D`; 228 + } 229 + 230 + // We write the whole block at once to minimize flicker 231 + term.write(output); 232 + }; 233 + 234 + const getLineWithCompletion = (baseLine: string, candidate: Candidate) => { 235 + const before = baseLine.slice(0, candidate.span_start); 236 + const after = baseLine.slice(candidate.span_end); 237 + return before + candidate.name + after; 238 + }; 239 + 240 + const applyCompletion = (candidate: Candidate) => { 241 + currentLine = getLineWithCompletion(currentLine, candidate); 242 + const before = currentLine.slice(0, candidate.span_start); 243 + cursorPos = (before + candidate.name).length; 244 + }; 245 + 246 + const updateCompletionCandidates = async () => { 247 + // Don't try to get completion if worker isn't loaded 248 + if (!isWorkerReady) return; 249 + 250 + try { 251 + const json = await callWorker("completion", { 252 + line: currentLine, 253 + cursor: cursorPos, 254 + }); 255 + const candidates: Candidate[] = JSON.parse(json); 256 + completionCandidates = candidates; 257 + completionBaseLine = currentLine; 258 + 259 + if (completionCandidates.length > 0) { 260 + if (completionIndex >= completionCandidates.length) { 261 + completionIndex = 0; 262 + } 263 + if (completionIndex < 0) { 264 + completionIndex = 0; 265 + } 266 + } else { 267 + completionIndex = -1; 268 + } 269 + } catch (err) { 270 + completionCandidates = []; 271 + completionIndex = -1; 272 + } 273 + }; 274 + 275 + const updateHistoryCandidates = () => { 276 + const query = currentLine.toLowerCase(); 277 + const matches = history.filter((cmd) => { 278 + let i = 0, 279 + j = 0; 280 + const cmdLower = cmd.toLowerCase(); 281 + while (i < query.length && j < cmdLower.length) { 282 + if (query[i] === cmdLower[j]) i++; 283 + j++; 284 + } 285 + return i === query.length; 286 + }); 287 + 288 + matches.reverse(); 289 + 290 + completionCandidates = matches.map((cmd) => ({ 291 + name: cmd, 292 + description: "", 293 + is_command: true, 294 + rendered: cmd, 295 + span_start: 0, 296 + span_end: currentLine.length, 297 + })); 298 + 299 + completionBaseLine = currentLine; 300 + 301 + if (completionCandidates.length > 0) { 302 + completionIndex = 0; 303 + } else { 304 + completionIndex = -1; 305 + } 306 + }; 307 + 308 + // 1. Setup Input Handler immediately so terminal isn't blocked 309 + term.onData(async (e) => { 310 + // SEARCH MODE INPUT 311 + if (searchState !== "none" && e >= " " && e <= "~") { 312 + if (cursorPos === currentLine.length) { 313 + currentLine += e; 314 + cursorPos++; 315 + } else { 316 + currentLine = 317 + currentLine.slice(0, cursorPos) + e + currentLine.slice(cursorPos); 318 + cursorPos++; 319 + } 320 + term.write(e); 321 + 322 + if (searchState === "history") updateHistoryCandidates(); 323 + if (searchState === "completion") await updateCompletionCandidates(); 324 + 325 + await refreshPrompt(); 326 + return; 327 + } 328 + 329 + // SEARCH MODE BACKSPACE 330 + if (searchState !== "none" && e === "\u007F") { 331 + if (cursorPos > 0) { 332 + currentLine = 333 + currentLine.slice(0, cursorPos - 1) + currentLine.slice(cursorPos); 334 + cursorPos--; 335 + 336 + if (searchState === "history") updateHistoryCandidates(); 337 + if (searchState === "completion") await updateCompletionCandidates(); 338 + 339 + await refreshPrompt(); 340 + } 341 + return; 342 + } 343 + 344 + // EXIT SEARCH MODE (on non-nav keys) 345 + const isTab = e === "\t" || e === "\x1b[Z"; 346 + const isArrow = e === "\x1b[A" || e === "\x1b[B"; 347 + 348 + if ( 349 + !isTab && 350 + !isArrow && 351 + (completionCandidates.length > 0 || searchState !== "none") 352 + ) { 353 + if (e !== "\r") { 354 + completionCandidates = []; 355 + completionIndex = -1; 356 + searchState = "none"; 357 + await refreshPrompt(); 358 + } 359 + } 360 + 361 + switch (e) { 362 + case "\r": { 363 + // ENTER 364 + 365 + // 1. Accept Completion/Search Selection 366 + if (completionCandidates.length > 0) { 367 + const cand = completionCandidates[completionIndex]; 368 + if (cand) { 369 + currentLine = getLineWithCompletion(completionBaseLine, cand); 370 + cursorPos = currentLine.length; 371 + } 372 + } 373 + 374 + const wasInMode = 375 + searchState != "none" || completionCandidates.length > 0; 376 + 377 + completionCandidates = []; 378 + searchState = "none"; 379 + 380 + if (wasInMode) { 381 + await refreshPrompt(); 382 + break; 383 + } 384 + 385 + // 2. Execute Command 386 + await refreshPrompt(); // Ensure clean line 387 + term.write("\r\n"); 388 + const trimmed = currentLine.trim(); 389 + 390 + if (trimmed.length > 0) { 391 + currentLine = ""; 392 + isRunningCommand = true; 393 + try { 394 + // Check readiness before executing 395 + if (!isWorkerReady) { 396 + term.write( 397 + "\x1b[33mengine is still loading, please wait (_ _ )zZ...\x1b[0m\r\n", 398 + ); 399 + } else { 400 + // ASYNC execution 401 + const output: string | undefined = await callWorker( 402 + "run", 403 + trimmed, 404 + ); 405 + if (output) { 406 + term.write(output.replace(/\n/g, "\r\n")); 407 + if (output && !output.endsWith("\n")) { 408 + term.write("\r\n"); 409 + } 410 + } 411 + 412 + // Update cached PWD after command execution (cd, etc) 413 + cachedPwd = await callWorker("get_pwd"); 414 + 415 + // Update History 416 + const idx = history.indexOf(trimmed); 417 + if (idx >= 0) history.splice(idx, 1); 418 + history.push(trimmed); 419 + historyIndex = history.length; 420 + } 421 + } catch (err) { 422 + term.write(`\x1b[31mfatal: ${err}\x1b[0m\r\n`); 423 + } finally { 424 + isRunningCommand = false; 425 + } 426 + } 427 + 428 + term.write(getPrompt()); 429 + cursorPos = 0; 430 + break; 431 + } 432 + 433 + case "\u007F": // Backspace 434 + if (cursorPos > 0) { 435 + currentLine = 436 + currentLine.slice(0, cursorPos - 1) + currentLine.slice(cursorPos); 437 + cursorPos--; 438 + await refreshPrompt(); 439 + } 440 + break; 441 + 442 + case "\x1b[3~": // Delete 443 + if (cursorPos < currentLine.length) { 444 + currentLine = 445 + currentLine.slice(0, cursorPos) + currentLine.slice(cursorPos + 1); 446 + await refreshPrompt(); 447 + } 448 + break; 449 + 450 + case "\u0003": // Ctrl+C 451 + currentLine = ""; 452 + cursorPos = 0; 453 + completionCandidates = []; 454 + searchState = "none"; 455 + term.write("^C\r\n" + getPrompt()); 456 + break; 457 + 458 + case "\u000C": // Ctrl+L 459 + term.clear(); 460 + break; 461 + 462 + case "\u0012": // Ctrl+R 463 + searchState = "history"; 464 + updateHistoryCandidates(); 465 + await refreshPrompt(); 466 + break; 467 + 468 + // NAVIGATION 469 + 470 + case "\x1b[D": // Left Arrow 471 + if (cursorPos > 0) { 472 + cursorPos--; 473 + term.write(e); // Local echo is fine for navigation 474 + } 475 + break; 476 + 477 + case "\x1b[C": // Right Arrow 478 + if (cursorPos < currentLine.length) { 479 + cursorPos++; 480 + term.write(e); 481 + } 482 + break; 483 + 484 + case "\x1b[1;5D": // Ctrl+Left 485 + case "\x1b\x1b[D": // Alt+Left 486 + { 487 + let p = cursorPos; 488 + while (p > 0 && currentLine[p - 1] === " ") p--; 489 + while (p > 0 && currentLine[p - 1] !== " ") p--; 490 + cursorPos = p; 491 + await refreshPrompt(); 492 + } 493 + break; 494 + 495 + case "\x1b[1;5C": // Ctrl+Right 496 + case "\x1b\x1b[C": // Alt+Right 497 + { 498 + let p = cursorPos; 499 + while (p < currentLine.length && currentLine[p] !== " ") p++; 500 + while (p < currentLine.length && currentLine[p] === " ") p++; 501 + cursorPos = p; 502 + await refreshPrompt(); 503 + } 504 + break; 505 + 506 + case "\x1b[A": // Up Arrow 507 + case "\x1b[1;5A": // Ctrl+Up 508 + // Cycle Completion 509 + if (completionCandidates.length > 0 && e === "\x1b[A") { 510 + completionIndex = 511 + (completionIndex - 1 + completionCandidates.length) % 512 + completionCandidates.length; 513 + const candidate = completionCandidates[completionIndex]; 514 + currentLine = getLineWithCompletion(completionBaseLine, candidate); 515 + cursorPos = currentLine.length; 516 + await refreshPrompt(); 517 + break; 518 + } 519 + 520 + // History 521 + if (e === "\x1b[A" || currentLine.length === 0) { 522 + if (historyIndex > 0) { 523 + historyIndex--; 524 + currentLine = history[historyIndex]; 525 + cursorPos = currentLine.length; 526 + await refreshPrompt(); 527 + } 528 + } else { 529 + cursorPos = 0; 530 + await refreshPrompt(); 531 + } 532 + break; 533 + 534 + case "\x1b[H": // Home 535 + cursorPos = 0; 536 + await refreshPrompt(); 537 + break; 538 + 539 + case "\x1b[B": // Down Arrow 540 + case "\x1b[1;5B": // Ctrl+Down 541 + // Cycle Completion 542 + if (completionCandidates.length > 0 && e === "\x1b[B") { 543 + completionIndex = (completionIndex + 1) % completionCandidates.length; 544 + const candidate = completionCandidates[completionIndex]; 545 + currentLine = getLineWithCompletion(completionBaseLine, candidate); 546 + cursorPos = currentLine.length; 547 + await refreshPrompt(); 548 + break; 549 + } 550 + 551 + // History 552 + if (e === "\x1b[B" || currentLine.length === 0) { 553 + if (historyIndex < history.length) { 554 + historyIndex++; 555 + if (historyIndex === history.length) { 556 + currentLine = ""; 557 + } else { 558 + currentLine = history[historyIndex]; 559 + } 560 + cursorPos = currentLine.length; 561 + await refreshPrompt(); 562 + } 563 + } else { 564 + cursorPos = currentLine.length; 565 + await refreshPrompt(); 566 + } 567 + break; 568 + 569 + case "\x1b[F": // End 570 + cursorPos = currentLine.length; 571 + await refreshPrompt(); 572 + break; 573 + 574 + case "\t": // Tab 575 + try { 576 + if (completionCandidates.length > 0) { 577 + completionIndex = 578 + (completionIndex + 1) % completionCandidates.length; 579 + 580 + const candidate = completionCandidates[completionIndex]; 581 + currentLine = getLineWithCompletion(completionBaseLine, candidate); 582 + await refreshPrompt(); 583 + } else { 584 + // Guard: ensure worker is ready 585 + if (!isWorkerReady) return; 586 + 587 + const json = await callWorker("completion", { 588 + line: currentLine, 589 + cursor: cursorPos, 590 + }); 591 + const candidates: Candidate[] = JSON.parse(json); 592 + 593 + if (candidates.length === 1) { 594 + const candidate = candidates[0]; 595 + applyCompletion(candidate); 596 + await refreshPrompt(); 597 + } else if (candidates.length > 1) { 598 + completionCandidates = candidates; 599 + completionIndex = 0; 600 + searchState = "completion"; 601 + completionBaseLine = currentLine; 602 + await refreshPrompt(); 603 + } 604 + } 605 + } catch (err) { 606 + // ignore 607 + } 608 + break; 609 + 610 + case "\x1b[Z": // Shift+Tab 611 + if (completionCandidates.length > 0) { 612 + completionIndex = 613 + (completionIndex - 1 + completionCandidates.length) % 614 + completionCandidates.length; 615 + const candidate = completionCandidates[completionIndex]; 616 + currentLine = getLineWithCompletion(completionBaseLine, candidate); 617 + cursorPos = currentLine.length; 618 + await refreshPrompt(); 619 + } 620 + break; 621 + 622 + default: 623 + // Typing 624 + if (e >= " " && e <= "~") { 625 + if (cursorPos === currentLine.length) { 626 + currentLine += e; 627 + cursorPos++; 628 + } else { 629 + currentLine = 630 + currentLine.slice(0, cursorPos) + 631 + e + 632 + currentLine.slice(cursorPos); 633 + cursorPos++; 634 + } 635 + await refreshPrompt(); 636 + } 637 + } 638 + }); 639 + 640 + window.addEventListener("resize", () => fitAddon.fit()); 641 + 642 + await readyPromise; 643 + 644 + await callWorker("run", "open welcome.txt"); 645 + 646 + term.write(getPrompt()); 647 + 648 + callWorker("get_pwd") 649 + .then((pwd) => { 650 + cachedPwd = pwd; 651 + // Re-render prompt to show "ready" state (yellow path) and enable highlighting 652 + refreshPrompt(); 653 + }) 654 + .catch((e) => { 655 + term.write(`\r\n\x1b[31mfatal: failed to load engine: ${e}\x1b[0m\r\n`); 656 + }); 657 + } 658 + 659 + bootstrap().catch(console.error);
+13
dysnomia/www/src/style.css
··· 1 + body { 2 + margin: 0; 3 + padding: 0; 4 + background-color: #000000; 5 + height: 100vh; 6 + width: 100vw; 7 + overflow: hidden; 8 + } 9 + 10 + #terminal { 11 + height: 100vh; 12 + width: 100vw; 13 + }
+54
dysnomia/www/src/worker.ts
··· 1 + import init, { 2 + init_engine, 3 + run_command, 4 + completion, 5 + highlight, 6 + get_pwd_string, 7 + register_console_callback, 8 + register_task_count_callback, 9 + } from "../../pkg"; 10 + 11 + // Initialize WASM 12 + await init(); 13 + init_engine(); 14 + 15 + // Setup Callbacks to proxy messages back to Main Thread 16 + register_console_callback((msg: string, isCmd: boolean) => { 17 + self.postMessage({ type: "console", payload: { msg, isCmd } }); 18 + }); 19 + 20 + register_task_count_callback((count: number) => { 21 + self.postMessage({ type: "task_count", payload: count }); 22 + }); 23 + 24 + // Handle messages from Main Thread 25 + self.onmessage = (e) => { 26 + const { id, type, payload } = e.data; 27 + 28 + // console.log("Received message:", id, type, payload); 29 + 30 + try { 31 + let result; 32 + switch (type) { 33 + case "run": 34 + result = run_command(payload); 35 + break; 36 + case "completion": 37 + result = completion(payload.line, payload.cursor); 38 + break; 39 + case "highlight": 40 + result = highlight(payload); 41 + break; 42 + case "get_pwd": 43 + result = get_pwd_string(); 44 + break; 45 + default: 46 + throw new Error(`Unknown message type: ${type}`); 47 + } 48 + self.postMessage({ id, type: `${type}_result`, payload: result }); 49 + } catch (err) { 50 + self.postMessage({ id, type: "error", payload: String(err) }); 51 + } 52 + }; 53 + 54 + self.postMessage({ type: "initialized", payload: true });
+26
dysnomia/www/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ES2022", 4 + "useDefineForClassFields": true, 5 + "module": "ESNext", 6 + "lib": ["ES2022", "DOM", "DOM.Iterable"], 7 + "types": ["vite/client"], 8 + "skipLibCheck": true, 9 + 10 + /* Bundler mode */ 11 + "moduleResolution": "bundler", 12 + "allowImportingTsExtensions": true, 13 + "verbatimModuleSyntax": true, 14 + "moduleDetection": "force", 15 + "noEmit": true, 16 + 17 + /* Linting */ 18 + "strict": true, 19 + "noUnusedLocals": true, 20 + "noUnusedParameters": true, 21 + "erasableSyntaxOnly": true, 22 + "noFallthroughCasesInSwitch": true, 23 + "noUncheckedSideEffectImports": true 24 + }, 25 + "include": ["src"] 26 + }
+16
dysnomia/www/vite.config.ts
··· 1 + import { defineConfig } from "vite"; 2 + import wasm from "vite-plugin-wasm"; 3 + import topLevelAwait from "vite-plugin-top-level-await"; 4 + 5 + export default defineConfig({ 6 + plugins: [wasm(), topLevelAwait()], 7 + worker: { 8 + format: "es", 9 + plugins: () => [wasm(), topLevelAwait()], 10 + }, 11 + server: { 12 + fs: { 13 + allow: [".."], 14 + }, 15 + }, 16 + });
eunomia/.npmrc .npmrc
+242 -11
flake.lock
··· 1 1 { 2 2 "nodes": { 3 + "crane": { 4 + "flake": false, 5 + "locked": { 6 + "lastModified": 1758758545, 7 + "narHash": "sha256-NU5WaEdfwF6i8faJ2Yh+jcK9vVFrofLcwlD/mP65JrI=", 8 + "owner": "ipetkov", 9 + "repo": "crane", 10 + "rev": "95d528a5f54eaba0d12102249ce42f4d01f4e364", 11 + "type": "github" 12 + }, 13 + "original": { 14 + "owner": "ipetkov", 15 + "ref": "v0.21.1", 16 + "repo": "crane", 17 + "type": "github" 18 + } 19 + }, 20 + "dream2nix": { 21 + "inputs": { 22 + "nixpkgs": [ 23 + "nci", 24 + "nixpkgs" 25 + ], 26 + "purescript-overlay": "purescript-overlay", 27 + "pyproject-nix": "pyproject-nix" 28 + }, 29 + "locked": { 30 + "lastModified": 1765228272, 31 + "narHash": "sha256-duTz4J4NP1edl/ZBdwZPduPM8j6g0yzjb8YH91T9vU0=", 32 + "owner": "nix-community", 33 + "repo": "dream2nix", 34 + "rev": "83c430ce6b6aedf149c5259f066bfff808722dbd", 35 + "type": "github" 36 + }, 37 + "original": { 38 + "owner": "nix-community", 39 + "repo": "dream2nix", 40 + "type": "github" 41 + } 42 + }, 43 + "flake-compat": { 44 + "flake": false, 45 + "locked": { 46 + "lastModified": 1696426674, 47 + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", 48 + "owner": "edolstra", 49 + "repo": "flake-compat", 50 + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", 51 + "type": "github" 52 + }, 53 + "original": { 54 + "owner": "edolstra", 55 + "repo": "flake-compat", 56 + "type": "github" 57 + } 58 + }, 59 + "mk-naked-shell": { 60 + "flake": false, 61 + "locked": { 62 + "lastModified": 1681286841, 63 + "narHash": "sha256-3XlJrwlR0nBiREnuogoa5i1b4+w/XPe0z8bbrJASw0g=", 64 + "owner": "90-008", 65 + "repo": "mk-naked-shell", 66 + "rev": "7612f828dd6f22b7fb332cc69440e839d7ffe6bd", 67 + "type": "github" 68 + }, 69 + "original": { 70 + "owner": "90-008", 71 + "repo": "mk-naked-shell", 72 + "type": "github" 73 + } 74 + }, 3 75 "naked-shell": { 4 76 "locked": { 5 77 "lastModified": 1681286841, ··· 15 87 "type": "github" 16 88 } 17 89 }, 90 + "nci": { 91 + "inputs": { 92 + "crane": "crane", 93 + "dream2nix": "dream2nix", 94 + "mk-naked-shell": "mk-naked-shell", 95 + "nixpkgs": [ 96 + "nixpkgs" 97 + ], 98 + "parts": "parts", 99 + "rust-overlay": "rust-overlay", 100 + "treefmt": "treefmt" 101 + }, 102 + "locked": { 103 + "lastModified": 1765347705, 104 + "narHash": "sha256-pp5ru9CvZz0n1UBvRzp41othwARTUBmK1Es8iAqgepc=", 105 + "owner": "90-008", 106 + "repo": "nix-cargo-integration", 107 + "rev": "c573f9ec80416fd09964a3e3892f14d9012a03e2", 108 + "type": "github" 109 + }, 110 + "original": { 111 + "owner": "90-008", 112 + "repo": "nix-cargo-integration", 113 + "type": "github" 114 + } 115 + }, 18 116 "nixpkgs": { 19 117 "locked": { 20 - "lastModified": 1752950548, 21 - "narHash": "sha256-NS6BLD0lxOrnCiEOcvQCDVPXafX1/ek1dfJHX1nUIzc=", 118 + "lastModified": 1765270179, 119 + "narHash": "sha256-g2a4MhRKu4ymR4xwo+I+auTknXt/+j37Lnf0Mvfl1rE=", 22 120 "owner": "nixos", 23 121 "repo": "nixpkgs", 24 - "rev": "c87b95e25065c028d31a94f06a62927d18763fdf", 122 + "rev": "677fbe97984e7af3175b6c121f3c39ee5c8d62c9", 25 123 "type": "github" 26 124 }, 27 125 "original": { 28 126 "owner": "nixos", 29 - "ref": "nixos-unstable", 127 + "ref": "nixpkgs-unstable", 30 128 "repo": "nixpkgs", 31 129 "type": "github" 32 130 } 33 131 }, 34 132 "nixpkgs-lib": { 35 133 "locked": { 36 - "lastModified": 1751159883, 37 - "narHash": "sha256-urW/Ylk9FIfvXfliA1ywh75yszAbiTEVgpPeinFyVZo=", 134 + "lastModified": 1761765539, 135 + "narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=", 38 136 "owner": "nix-community", 39 137 "repo": "nixpkgs.lib", 40 - "rev": "14a40a1d7fb9afa4739275ac642ed7301a9ba1ab", 138 + "rev": "719359f4562934ae99f5443f20aa06c2ffff91fc", 41 139 "type": "github" 42 140 }, 43 141 "original": { ··· 48 146 }, 49 147 "parts": { 50 148 "inputs": { 149 + "nixpkgs-lib": [ 150 + "nci", 151 + "nixpkgs" 152 + ] 153 + }, 154 + "locked": { 155 + "lastModified": 1763759067, 156 + "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", 157 + "owner": "hercules-ci", 158 + "repo": "flake-parts", 159 + "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", 160 + "type": "github" 161 + }, 162 + "original": { 163 + "owner": "hercules-ci", 164 + "repo": "flake-parts", 165 + "type": "github" 166 + } 167 + }, 168 + "parts_2": { 169 + "inputs": { 51 170 "nixpkgs-lib": "nixpkgs-lib" 52 171 }, 53 172 "locked": { 54 - "lastModified": 1753121425, 55 - "narHash": "sha256-TVcTNvOeWWk1DXljFxVRp+E0tzG1LhrVjOGGoMHuXio=", 173 + "lastModified": 1763759067, 174 + "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", 56 175 "owner": "hercules-ci", 57 176 "repo": "flake-parts", 58 - "rev": "644e0fc48951a860279da645ba77fe4a6e814c5e", 177 + "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", 59 178 "type": "github" 60 179 }, 61 180 "original": { ··· 64 183 "type": "github" 65 184 } 66 185 }, 186 + "purescript-overlay": { 187 + "inputs": { 188 + "flake-compat": "flake-compat", 189 + "nixpkgs": [ 190 + "nci", 191 + "dream2nix", 192 + "nixpkgs" 193 + ], 194 + "slimlock": "slimlock" 195 + }, 196 + "locked": { 197 + "lastModified": 1728546539, 198 + "narHash": "sha256-Sws7w0tlnjD+Bjck1nv29NjC5DbL6nH5auL9Ex9Iz2A=", 199 + "owner": "thomashoneyman", 200 + "repo": "purescript-overlay", 201 + "rev": "4ad4c15d07bd899d7346b331f377606631eb0ee4", 202 + "type": "github" 203 + }, 204 + "original": { 205 + "owner": "thomashoneyman", 206 + "repo": "purescript-overlay", 207 + "type": "github" 208 + } 209 + }, 210 + "pyproject-nix": { 211 + "inputs": { 212 + "nixpkgs": [ 213 + "nci", 214 + "dream2nix", 215 + "nixpkgs" 216 + ] 217 + }, 218 + "locked": { 219 + "lastModified": 1752481895, 220 + "narHash": "sha256-luVj97hIMpCbwhx3hWiRwjP2YvljWy8FM+4W9njDhLA=", 221 + "owner": "pyproject-nix", 222 + "repo": "pyproject.nix", 223 + "rev": "16ee295c25107a94e59a7fc7f2e5322851781162", 224 + "type": "github" 225 + }, 226 + "original": { 227 + "owner": "pyproject-nix", 228 + "repo": "pyproject.nix", 229 + "type": "github" 230 + } 231 + }, 67 232 "root": { 68 233 "inputs": { 69 234 "naked-shell": "naked-shell", 235 + "nci": "nci", 70 236 "nixpkgs": "nixpkgs", 71 - "parts": "parts" 237 + "parts": "parts_2" 238 + } 239 + }, 240 + "rust-overlay": { 241 + "inputs": { 242 + "nixpkgs": [ 243 + "nci", 244 + "nixpkgs" 245 + ] 246 + }, 247 + "locked": { 248 + "lastModified": 1765334520, 249 + "narHash": "sha256-jTof2+ir9UPmv4lWksYO6WbaXCC0nsDExrB9KZj7Dz4=", 250 + "owner": "oxalica", 251 + "repo": "rust-overlay", 252 + "rev": "db61f666aea93b28f644861fbddd37f235cc5983", 253 + "type": "github" 254 + }, 255 + "original": { 256 + "owner": "oxalica", 257 + "repo": "rust-overlay", 258 + "type": "github" 259 + } 260 + }, 261 + "slimlock": { 262 + "inputs": { 263 + "nixpkgs": [ 264 + "nci", 265 + "dream2nix", 266 + "purescript-overlay", 267 + "nixpkgs" 268 + ] 269 + }, 270 + "locked": { 271 + "lastModified": 1688756706, 272 + "narHash": "sha256-xzkkMv3neJJJ89zo3o2ojp7nFeaZc2G0fYwNXNJRFlo=", 273 + "owner": "thomashoneyman", 274 + "repo": "slimlock", 275 + "rev": "cf72723f59e2340d24881fd7bf61cb113b4c407c", 276 + "type": "github" 277 + }, 278 + "original": { 279 + "owner": "thomashoneyman", 280 + "repo": "slimlock", 281 + "type": "github" 282 + } 283 + }, 284 + "treefmt": { 285 + "inputs": { 286 + "nixpkgs": [ 287 + "nci", 288 + "nixpkgs" 289 + ] 290 + }, 291 + "locked": { 292 + "lastModified": 1762938485, 293 + "narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=", 294 + "owner": "numtide", 295 + "repo": "treefmt-nix", 296 + "rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4", 297 + "type": "github" 298 + }, 299 + "original": { 300 + "owner": "numtide", 301 + "repo": "treefmt-nix", 302 + "type": "github" 72 303 } 73 304 } 74 305 },
+8 -6
flake.nix
··· 1 1 { 2 2 inputs.parts.url = "github:hercules-ci/flake-parts"; 3 - inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; 3 + inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; 4 4 inputs.naked-shell.url = "github:90-008/mk-naked-shell"; 5 + inputs.nci.url = "github:90-008/nix-cargo-integration"; 6 + inputs.nci.inputs.nixpkgs.follows = "nixpkgs"; 5 7 6 8 outputs = inp: 7 9 inp.parts.lib.mkFlake {inputs = inp;} { 8 10 systems = ["x86_64-linux"]; 9 11 imports = [ 10 12 inp.naked-shell.flakeModule 13 + # inp.nci.flakeModule 11 14 ]; 12 15 perSystem = { 13 16 config, 14 - system, 17 + pkgs, 15 18 ... 16 - }: let 17 - pkgs = inp.nixpkgs.legacyPackages.${system}; 18 - in { 19 - devShells.default = config.mk-naked-shell.lib.mkNakedShell { 19 + }: { 20 + devShells.default = pkgs.mkShell { 20 21 name = "eunomia-devshell"; 21 22 packages = with pkgs; [ 22 23 nodejs-slim_latest deno 23 24 nodePackages.svelte-language-server 24 25 nodePackages.typescript-language-server 26 + rustc rust-analyzer cargo wasm-pack wasm-bindgen-cli lld rustfmt binaryen 25 27 ]; 26 28 shellHook = '' 27 29 export PATH="$PATH:$PWD/node_modules/.bin"