data endpoint for entity 90008 (aka. a website)

add dysnomia

ptr.pet 6f5313bc 16d0e032

verified
0/0
Waiting for spindle ...
+1 -1
deno.json
···
{
-
"workspace": ["./eunomia"],
+
"workspace": ["./eunomia", "./dysnomia/www"],
"nodeModulesDir": "auto"
}
+392
deno.lock
···
"npm:@types/eslint@^9.6.1": "9.6.1",
"npm:@types/node-schedule@^2.1.8": "2.1.8",
"npm:@types/node@^24.10.1": "24.10.1",
+
"npm:@xterm/addon-canvas@0.7": "0.7.0_@xterm+xterm@5.5.0",
+
"npm:@xterm/addon-fit@0.10": "0.10.0_@xterm+xterm@5.5.0",
+
"npm:@xterm/addon-web-links@0.11": "0.11.0_@xterm+xterm@5.5.0",
+
"npm:@xterm/addon-webgl@0.18": "0.18.0_@xterm+xterm@5.5.0",
+
"npm:@xterm/xterm@^5.5.0": "5.5.0",
"npm:autoprefixer@^10.4.22": "10.4.22_postcss@8.5.6",
"npm:eslint-config-prettier@^10.1.8": "10.1.8_eslint@9.39.1",
"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",
···
"npm:prettier@^3.7.1": "3.7.1",
"npm:prometheus-remote-write@~0.5.1": "0.5.1_node-fetch@3.3.2",
"npm:robots-parser@^3.0.1": "3.0.1",
+
"npm:rolldown-vite@7.2.5": "7.2.5_@types+node@24.10.1_picomatch@4.0.3",
"npm:steamgriddb@^2.2.0": "2.2.1",
"npm:svelte-check@^4.3.4": "4.3.4_svelte@5.45.2__acorn@8.15.0_typescript@5.9.3",
"npm:svelte@^5.45.2": "5.45.2_acorn@8.15.0",
···
"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",
"npm:typescript-svelte-plugin@~0.3.50": "0.3.50_svelte@5.45.2__acorn@8.15.0_typescript@5.9.3",
"npm:typescript@^5.9.2": "5.9.3",
+
"npm:typescript@~5.9.3": "5.9.3",
+
"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",
+
"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",
"npm:vite@^7.2.4": "7.2.4_@types+node@24.10.1_picomatch@4.0.3"
},
"npm": {
···
},
"@badrap/valita@0.4.6": {
"integrity": "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg=="
+
},
+
"@emnapi/core@1.7.1": {
+
"integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==",
+
"dependencies": [
+
"@emnapi/wasi-threads",
+
"tslib"
+
]
+
},
+
"@emnapi/runtime@1.7.1": {
+
"integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==",
+
"dependencies": [
+
"tslib"
+
]
+
},
+
"@emnapi/wasi-threads@1.1.0": {
+
"integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
+
"dependencies": [
+
"tslib"
+
]
},
"@esbuild/aix-ppc64@0.25.12": {
"integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
···
],
"tarball": "https://npm.jsr.io/~/11/@jsr/std__toml/1.0.11.tgz"
},
+
"@napi-rs/wasm-runtime@1.1.0": {
+
"integrity": "sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==",
+
"dependencies": [
+
"@emnapi/core",
+
"@emnapi/runtime",
+
"@tybys/wasm-util"
+
]
+
},
"@neodrag/svelte@2.3.3_svelte@5.45.2__acorn@8.15.0": {
"integrity": "sha512-avXzhrilsBsnMFljhVAQ7h+6hbSIrvRCJ61GCiGbGISkC1QOhjDCNvPZo2+7KVwiYrnUBx4NRH0kTIqrcxv9Lg==",
"dependencies": [
···
"fastq"
]
},
+
"@oxc-project/runtime@0.97.0": {
+
"integrity": "sha512-yH0zw7z+jEws4dZ4IUKoix5Lh3yhqIJWF9Dc8PWvhpo7U7O+lJrv7ZZL4BeRO0la8LBQFwcCewtLBnVV7hPe/w=="
+
},
+
"@oxc-project/types@0.97.0": {
+
"integrity": "sha512-lxmZK4xFrdvU0yZiDwgVQTCvh2gHWBJCBk5ALsrtsBWhs0uDIi+FTOnXRQeQfs304imdvTdaakT/lqwQ8hkOXQ=="
+
},
"@polka/url@1.0.0-next.29": {
"integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="
},
···
"@protobufjs/utf8@1.1.0": {
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
},
+
"@rolldown/binding-android-arm64@1.0.0-beta.50": {
+
"integrity": "sha512-XlEkrOIHLyGT3avOgzfTFSjG+f+dZMw+/qd+Y3HLN86wlndrB/gSimrJCk4gOhr1XtRtEKfszpadI3Md4Z4/Ag==",
+
"os": ["android"],
+
"cpu": ["arm64"]
+
},
+
"@rolldown/binding-darwin-arm64@1.0.0-beta.50": {
+
"integrity": "sha512-+JRqKJhoFlt5r9q+DecAGPLZ5PxeLva+wCMtAuoFMWPoZzgcYrr599KQ+Ix0jwll4B4HGP43avu9My8KtSOR+w==",
+
"os": ["darwin"],
+
"cpu": ["arm64"]
+
},
+
"@rolldown/binding-darwin-x64@1.0.0-beta.50": {
+
"integrity": "sha512-fFXDjXnuX7/gQZQm/1FoivVtRcyAzdjSik7Eo+9iwPQ9EgtA5/nB2+jmbzaKtMGG3q+BnZbdKHCtOacmNrkIDA==",
+
"os": ["darwin"],
+
"cpu": ["x64"]
+
},
+
"@rolldown/binding-freebsd-x64@1.0.0-beta.50": {
+
"integrity": "sha512-F1b6vARy49tjmT/hbloplzgJS7GIvwWZqt+tAHEstCh0JIh9sa8FAMVqEmYxDviqKBaAI8iVvUREm/Kh/PD26Q==",
+
"os": ["freebsd"],
+
"cpu": ["x64"]
+
},
+
"@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.50": {
+
"integrity": "sha512-U6cR76N8T8M6lHj7EZrQ3xunLPxSvYYxA8vJsBKZiFZkT8YV4kjgCO3KwMJL0NOjQCPGKyiXO07U+KmJzdPGRw==",
+
"os": ["linux"],
+
"cpu": ["arm"]
+
},
+
"@rolldown/binding-linux-arm64-gnu@1.0.0-beta.50": {
+
"integrity": "sha512-ONgyjofCrrE3bnh5GZb8EINSFyR/hmwTzZ7oVuyUB170lboza1VMCnb8jgE6MsyyRgHYmN8Lb59i3NKGrxrYjw==",
+
"os": ["linux"],
+
"cpu": ["arm64"]
+
},
+
"@rolldown/binding-linux-arm64-musl@1.0.0-beta.50": {
+
"integrity": "sha512-L0zRdH2oDPkmB+wvuTl+dJbXCsx62SkqcEqdM+79LOcB+PxbAxxjzHU14BuZIQdXcAVDzfpMfaHWzZuwhhBTcw==",
+
"os": ["linux"],
+
"cpu": ["arm64"]
+
},
+
"@rolldown/binding-linux-x64-gnu@1.0.0-beta.50": {
+
"integrity": "sha512-gyoI8o/TGpQd3OzkJnh1M2kxy1Bisg8qJ5Gci0sXm9yLFzEXIFdtc4EAzepxGvrT2ri99ar5rdsmNG0zP0SbIg==",
+
"os": ["linux"],
+
"cpu": ["x64"]
+
},
+
"@rolldown/binding-linux-x64-musl@1.0.0-beta.50": {
+
"integrity": "sha512-zti8A7M+xFDpKlghpcCAzyOi+e5nfUl3QhU023ce5NCgUxRG5zGP2GR9LTydQ1rnIPwZUVBWd4o7NjZDaQxaXA==",
+
"os": ["linux"],
+
"cpu": ["x64"]
+
},
+
"@rolldown/binding-openharmony-arm64@1.0.0-beta.50": {
+
"integrity": "sha512-eZUssog7qljrrRU9Mi0eqYEPm3Ch0UwB+qlWPMKSUXHNqhm3TvDZarJQdTevGEfu3EHAXJvBIe0YFYr0TPVaMA==",
+
"os": ["openharmony"],
+
"cpu": ["arm64"]
+
},
+
"@rolldown/binding-wasm32-wasi@1.0.0-beta.50": {
+
"integrity": "sha512-nmCN0nIdeUnmgeDXiQ+2HU6FT162o+rxnF7WMkBm4M5Ds8qTU7Dzv2Wrf22bo4ftnlrb2hKK6FSwAJSAe2FWLg==",
+
"dependencies": [
+
"@napi-rs/wasm-runtime"
+
],
+
"cpu": ["wasm32"]
+
},
+
"@rolldown/binding-win32-arm64-msvc@1.0.0-beta.50": {
+
"integrity": "sha512-7kcNLi7Ua59JTTLvbe1dYb028QEPaJPJQHqkmSZ5q3tJueUeb6yjRtx8mw4uIqgWZcnQHAR3PrLN4XRJxvgIkA==",
+
"os": ["win32"],
+
"cpu": ["arm64"]
+
},
+
"@rolldown/binding-win32-ia32-msvc@1.0.0-beta.50": {
+
"integrity": "sha512-lL70VTNvSCdSZkDPPVMwWn/M2yQiYvSoXw9hTLgdIWdUfC3g72UaruezusR6ceRuwHCY1Ayu2LtKqXkBO5LIwg==",
+
"os": ["win32"],
+
"cpu": ["ia32"]
+
},
+
"@rolldown/binding-win32-x64-msvc@1.0.0-beta.50": {
+
"integrity": "sha512-4qU4x5DXWB4JPjyTne/wBNPqkbQU8J45bl21geERBKtEittleonioACBL1R0PsBu0Aq21SwMK5a9zdBkWSlQtQ==",
+
"os": ["win32"],
+
"cpu": ["x64"]
+
},
+
"@rolldown/pluginutils@1.0.0-beta.50": {
+
"integrity": "sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA=="
+
},
"@rollup/plugin-commonjs@28.0.9_rollup@4.53.3_picomatch@4.0.3": {
"integrity": "sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==",
"dependencies": [
···
"optionalPeers": [
"rollup"
]
+
},
+
"@rollup/plugin-virtual@3.0.2": {
+
"integrity": "sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A=="
},
"@rollup/pluginutils@5.3.0_rollup@4.53.3": {
"integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
···
"vitefu"
]
},
+
"@swc/core-darwin-arm64@1.15.3": {
+
"integrity": "sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==",
+
"os": ["darwin"],
+
"cpu": ["arm64"]
+
},
+
"@swc/core-darwin-x64@1.15.3": {
+
"integrity": "sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==",
+
"os": ["darwin"],
+
"cpu": ["x64"]
+
},
+
"@swc/core-linux-arm-gnueabihf@1.15.3": {
+
"integrity": "sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==",
+
"os": ["linux"],
+
"cpu": ["arm"]
+
},
+
"@swc/core-linux-arm64-gnu@1.15.3": {
+
"integrity": "sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==",
+
"os": ["linux"],
+
"cpu": ["arm64"]
+
},
+
"@swc/core-linux-arm64-musl@1.15.3": {
+
"integrity": "sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==",
+
"os": ["linux"],
+
"cpu": ["arm64"]
+
},
+
"@swc/core-linux-x64-gnu@1.15.3": {
+
"integrity": "sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==",
+
"os": ["linux"],
+
"cpu": ["x64"]
+
},
+
"@swc/core-linux-x64-musl@1.15.3": {
+
"integrity": "sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==",
+
"os": ["linux"],
+
"cpu": ["x64"]
+
},
+
"@swc/core-win32-arm64-msvc@1.15.3": {
+
"integrity": "sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==",
+
"os": ["win32"],
+
"cpu": ["arm64"]
+
},
+
"@swc/core-win32-ia32-msvc@1.15.3": {
+
"integrity": "sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==",
+
"os": ["win32"],
+
"cpu": ["ia32"]
+
},
+
"@swc/core-win32-x64-msvc@1.15.3": {
+
"integrity": "sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==",
+
"os": ["win32"],
+
"cpu": ["x64"]
+
},
+
"@swc/core@1.15.3": {
+
"integrity": "sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==",
+
"dependencies": [
+
"@swc/counter",
+
"@swc/types"
+
],
+
"optionalDependencies": [
+
"@swc/core-darwin-arm64",
+
"@swc/core-darwin-x64",
+
"@swc/core-linux-arm-gnueabihf",
+
"@swc/core-linux-arm64-gnu",
+
"@swc/core-linux-arm64-musl",
+
"@swc/core-linux-x64-gnu",
+
"@swc/core-linux-x64-musl",
+
"@swc/core-win32-arm64-msvc",
+
"@swc/core-win32-ia32-msvc",
+
"@swc/core-win32-x64-msvc"
+
],
+
"scripts": true
+
},
+
"@swc/counter@0.1.3": {
+
"integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
+
},
+
"@swc/types@0.1.25": {
+
"integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==",
+
"dependencies": [
+
"@swc/counter"
+
]
+
},
+
"@swc/wasm@1.15.3": {
+
"integrity": "sha512-NrjGmAplk+v4wokIaLxp1oLoCMVqdQcWoBXopQg57QqyPRcJXLKe+kg5ehhW6z8XaU4Bu5cRkDxUTDY5P0Zy9Q=="
+
},
"@tailwindcss/forms@0.5.10_tailwindcss@3.4.18__postcss@8.5.6__jiti@1.21.7": {
"integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==",
"dependencies": [
···
"dependencies": [
"postcss-selector-parser@6.0.10",
"tailwindcss"
+
]
+
},
+
"@tybys/wasm-util@0.10.1": {
+
"integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
+
"dependencies": [
+
"tslib"
]
},
"@types/cookie@0.6.0": {
···
"@typescript-eslint/types",
"eslint-visitor-keys@4.2.1"
]
+
},
+
"@xterm/addon-canvas@0.7.0_@xterm+xterm@5.5.0": {
+
"integrity": "sha512-LF5LYcfvefJuJ7QotNRdRSPc9YASAVDeoT5uyXS/nZshZXjYplGXRECBGiznwvhNL2I8bq1Lf5MzRwstsYQ2Iw==",
+
"dependencies": [
+
"@xterm/xterm"
+
]
+
},
+
"@xterm/addon-fit@0.10.0_@xterm+xterm@5.5.0": {
+
"integrity": "sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==",
+
"dependencies": [
+
"@xterm/xterm"
+
]
+
},
+
"@xterm/addon-web-links@0.11.0_@xterm+xterm@5.5.0": {
+
"integrity": "sha512-nIHQ38pQI+a5kXnRaTgwqSHnX7KE6+4SVoceompgHL26unAxdfP6IPqUTSYPQgSwM56hsElfoNrrW5V7BUED/Q==",
+
"dependencies": [
+
"@xterm/xterm"
+
]
+
},
+
"@xterm/addon-webgl@0.18.0_@xterm+xterm@5.5.0": {
+
"integrity": "sha512-xCnfMBTI+/HKPdRnSOHaJDRqEpq2Ugy8LEj9GiY4J3zJObo3joylIFaMvzBwbYRg8zLtkO0KQaStCeSfoaI2/w==",
+
"dependencies": [
+
"@xterm/xterm"
+
]
+
},
+
"@xterm/xterm@5.5.0": {
+
"integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A=="
},
"acorn-jsx@5.3.2_acorn@8.15.0": {
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
···
},
"delayed-stream@1.0.0": {
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+
},
+
"detect-libc@2.1.2": {
+
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="
},
"devalue@5.5.0": {
"integrity": "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w=="
···
"type-check"
},
+
"lightningcss-android-arm64@1.30.2": {
+
"integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==",
+
"os": ["android"],
+
"cpu": ["arm64"]
+
},
+
"lightningcss-darwin-arm64@1.30.2": {
+
"integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==",
+
"os": ["darwin"],
+
"cpu": ["arm64"]
+
},
+
"lightningcss-darwin-x64@1.30.2": {
+
"integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==",
+
"os": ["darwin"],
+
"cpu": ["x64"]
+
},
+
"lightningcss-freebsd-x64@1.30.2": {
+
"integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==",
+
"os": ["freebsd"],
+
"cpu": ["x64"]
+
},
+
"lightningcss-linux-arm-gnueabihf@1.30.2": {
+
"integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==",
+
"os": ["linux"],
+
"cpu": ["arm"]
+
},
+
"lightningcss-linux-arm64-gnu@1.30.2": {
+
"integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==",
+
"os": ["linux"],
+
"cpu": ["arm64"]
+
},
+
"lightningcss-linux-arm64-musl@1.30.2": {
+
"integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==",
+
"os": ["linux"],
+
"cpu": ["arm64"]
+
},
+
"lightningcss-linux-x64-gnu@1.30.2": {
+
"integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==",
+
"os": ["linux"],
+
"cpu": ["x64"]
+
},
+
"lightningcss-linux-x64-musl@1.30.2": {
+
"integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==",
+
"os": ["linux"],
+
"cpu": ["x64"]
+
},
+
"lightningcss-win32-arm64-msvc@1.30.2": {
+
"integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==",
+
"os": ["win32"],
+
"cpu": ["arm64"]
+
},
+
"lightningcss-win32-x64-msvc@1.30.2": {
+
"integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==",
+
"os": ["win32"],
+
"cpu": ["x64"]
+
},
+
"lightningcss@1.30.2": {
+
"integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==",
+
"dependencies": [
+
"detect-libc"
+
],
+
"optionalDependencies": [
+
"lightningcss-android-arm64",
+
"lightningcss-darwin-arm64",
+
"lightningcss-darwin-x64",
+
"lightningcss-freebsd-x64",
+
"lightningcss-linux-arm-gnueabihf",
+
"lightningcss-linux-arm64-gnu",
+
"lightningcss-linux-arm64-musl",
+
"lightningcss-linux-x64-gnu",
+
"lightningcss-linux-x64-musl",
+
"lightningcss-win32-arm64-msvc",
+
"lightningcss-win32-x64-msvc"
+
]
+
},
"lilconfig@2.1.0": {
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
},
···
"robots-parser@3.0.1": {
"integrity": "sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ=="
},
+
"rolldown-vite@7.2.5_@types+node@24.10.1_picomatch@4.0.3": {
+
"integrity": "sha512-u09tdk/huMiN8xwoiBbig197jKdCamQTtOruSalOzbqGje3jdHiV0njQlAW0YvzoahkirFePNQ4RYlfnRQpXZA==",
+
"dependencies": [
+
"@oxc-project/runtime",
+
"@types/node@24.10.1",
+
"fdir",
+
"lightningcss",
+
"picomatch@4.0.3",
+
"postcss",
+
"rolldown",
+
"tinyglobby"
+
],
+
"optionalDependencies": [
+
"fsevents"
+
],
+
"optionalPeers": [
+
"@types/node@24.10.1"
+
],
+
"bin": true
+
},
+
"rolldown@1.0.0-beta.50": {
+
"integrity": "sha512-JFULvCNl/anKn99eKjOSEubi0lLmNqQDAjyEMME2T4CwezUDL0i6t1O9xZsu2OMehPnV2caNefWpGF+8TnzB6A==",
+
"dependencies": [
+
"@oxc-project/types",
+
"@rolldown/pluginutils"
+
],
+
"optionalDependencies": [
+
"@rolldown/binding-android-arm64",
+
"@rolldown/binding-darwin-arm64",
+
"@rolldown/binding-darwin-x64",
+
"@rolldown/binding-freebsd-x64",
+
"@rolldown/binding-linux-arm-gnueabihf",
+
"@rolldown/binding-linux-arm64-gnu",
+
"@rolldown/binding-linux-arm64-musl",
+
"@rolldown/binding-linux-x64-gnu",
+
"@rolldown/binding-linux-x64-musl",
+
"@rolldown/binding-openharmony-arm64",
+
"@rolldown/binding-wasm32-wasi",
+
"@rolldown/binding-win32-arm64-msvc",
+
"@rolldown/binding-win32-ia32-msvc",
+
"@rolldown/binding-win32-x64-msvc"
+
],
+
"bin": true
+
},
"rollup@4.53.3": {
"integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==",
"dependencies": [
···
"util-deprecate@1.0.2": {
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
+
"uuid@10.0.0": {
+
"integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+
"bin": true
+
},
"vfile-message@2.0.4": {
"integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
"dependencies": [
"@types/unist",
"unist-util-stringify-position"
+
]
+
},
+
"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": {
+
"integrity": "sha512-bNhUreLamTIkoulCR9aDXbTbhLk6n1YE8NJUTTxl5RYskNRtzOR0ASzSjBVRtNdjIfngDXo11qOsybGLNsrdww==",
+
"dependencies": [
+
"@rollup/plugin-virtual",
+
"@swc/core",
+
"@swc/wasm",
+
"uuid",
+
"vite"
+
]
+
},
+
"vite-plugin-wasm@3.5.0_vite@7.2.4__@types+node@24.10.1__picomatch@4.0.3_@types+node@24.10.1": {
+
"integrity": "sha512-X5VWgCnqiQEGb+omhlBVsvTfxikKtoOgAzQ95+BZ8gQ+VfMHIjSHr0wyvXFQCa0eKQ0fKyaL0kWcEnYqBac4lQ==",
+
"dependencies": [
+
"vite"
},
"vite@7.2.4_@types+node@24.10.1_picomatch@4.0.3": {
···
},
"workspace": {
"members": {
+
"dysnomia/www": {
+
"packageJson": {
+
"dependencies": [
+
"npm:@jsr/std__toml@*",
+
"npm:@xterm/addon-canvas@0.7",
+
"npm:@xterm/addon-fit@0.10",
+
"npm:@xterm/addon-web-links@0.11",
+
"npm:@xterm/addon-webgl@0.18",
+
"npm:@xterm/xterm@^5.5.0",
+
"npm:rolldown-vite@7.2.5",
+
"npm:typescript@~5.9.3",
+
"npm:vite-plugin-top-level-await@^1.6.0",
+
"npm:vite-plugin-wasm@^3.5.0"
+
]
+
}
+
},
"eunomia": {
"packageJson": {
"dependencies": [
+2
dysnomia/.cargo/config.toml
···
+
[target.wasm32-unknown-unknown]
+
rustflags = ["-C", "target-feature=+atomics,+bulk-memory,+mutable-globals,+simd128"]
+6632
dysnomia/Cargo.lock
···
+
# This file is automatically @generated by Cargo.
+
# It is not intended for manual editing.
+
version = 4
+
+
[[package]]
+
name = "abnf"
+
version = "0.13.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "087113bd50d9adce24850eed5d0476c7d199d532fce8fab5173650331e09033a"
+
dependencies = [
+
"abnf-core",
+
"nom",
+
]
+
+
[[package]]
+
name = "abnf-core"
+
version = "0.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c44e09c43ae1c368fb91a03a566472d0087c26cf7e1b9e8e289c14ede681dd7d"
+
dependencies = [
+
"nom",
+
]
+
+
[[package]]
+
name = "addr2line"
+
version = "0.25.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b"
+
dependencies = [
+
"gimli",
+
]
+
+
[[package]]
+
name = "adler2"
+
version = "2.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
+
+
[[package]]
+
name = "aho-corasick"
+
version = "1.1.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
+
dependencies = [
+
"memchr",
+
]
+
+
[[package]]
+
name = "aliasable"
+
version = "0.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
+
+
[[package]]
+
name = "alloc-no-stdlib"
+
version = "2.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+
[[package]]
+
name = "alloc-stdlib"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+
dependencies = [
+
"alloc-no-stdlib",
+
]
+
+
[[package]]
+
name = "allocator-api2"
+
version = "0.2.21"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
+
+
[[package]]
+
name = "alphanumeric-sort"
+
version = "1.5.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ab31f79a61d3c25cae1d6734a386662e5cf1b6ba5a9720c135b609273c058c15"
+
+
[[package]]
+
name = "android_system_properties"
+
version = "0.1.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+
dependencies = [
+
"libc",
+
]
+
+
[[package]]
+
name = "ansi-str"
+
version = "0.9.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "060de1453b69f46304b28274f382132f4e72c55637cf362920926a70d090890d"
+
dependencies = [
+
"ansitok",
+
]
+
+
[[package]]
+
name = "ansi_term"
+
version = "0.12.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+
dependencies = [
+
"winapi",
+
]
+
+
[[package]]
+
name = "ansitok"
+
version = "0.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c0a8acea8c2f1c60f0a92a8cd26bf96ca97db56f10bbcab238bbe0cceba659ee"
+
dependencies = [
+
"nom",
+
"vte",
+
]
+
+
[[package]]
+
name = "anstream"
+
version = "0.6.21"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
+
dependencies = [
+
"anstyle",
+
"anstyle-parse",
+
"anstyle-query",
+
"anstyle-wincon",
+
"colorchoice",
+
"is_terminal_polyfill",
+
"utf8parse",
+
]
+
+
[[package]]
+
name = "anstyle"
+
version = "1.0.13"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
+
+
[[package]]
+
name = "anstyle-parse"
+
version = "0.2.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
+
dependencies = [
+
"utf8parse",
+
]
+
+
[[package]]
+
name = "anstyle-query"
+
version = "1.1.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
+
dependencies = [
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "anstyle-wincon"
+
version = "3.0.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
+
dependencies = [
+
"anstyle",
+
"once_cell_polyfill",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "anyhow"
+
version = "1.0.100"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
+
+
[[package]]
+
name = "arbitrary"
+
version = "1.4.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
+
dependencies = [
+
"derive_arbitrary",
+
]
+
+
[[package]]
+
name = "arrayvec"
+
version = "0.7.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
+
+
[[package]]
+
name = "async-compression"
+
version = "0.4.36"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "98ec5f6c2f8bc326c994cb9e241cc257ddaba9afa8555a43cffbb5dd86efaa37"
+
dependencies = [
+
"compression-codecs",
+
"compression-core",
+
"futures-core",
+
"pin-project-lite",
+
"tokio",
+
]
+
+
[[package]]
+
name = "atoi_simd"
+
version = "0.16.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c2a49e05797ca52e312a0c658938b7d00693ef037799ef7187678f212d7684cf"
+
dependencies = [
+
"debug_unsafe",
+
]
+
+
[[package]]
+
name = "atomic-polyfill"
+
version = "1.0.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4"
+
dependencies = [
+
"critical-section",
+
]
+
+
[[package]]
+
name = "atomic-waker"
+
version = "1.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+
[[package]]
+
name = "autocfg"
+
version = "1.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
+
+
[[package]]
+
name = "backtrace"
+
version = "0.3.76"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6"
+
dependencies = [
+
"addr2line",
+
"cfg-if",
+
"libc",
+
"miniz_oxide",
+
"object",
+
"rustc-demangle",
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "backtrace-ext"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50"
+
dependencies = [
+
"backtrace",
+
]
+
+
[[package]]
+
name = "base-x"
+
version = "0.2.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270"
+
+
[[package]]
+
name = "base16ct"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+
+
[[package]]
+
name = "base256emoji"
+
version = "1.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c"
+
dependencies = [
+
"const-str",
+
"match-lookup",
+
]
+
+
[[package]]
+
name = "base64"
+
version = "0.22.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+
+
[[package]]
+
name = "base64ct"
+
version = "1.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a"
+
+
[[package]]
+
name = "bindgen"
+
version = "0.72.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895"
+
dependencies = [
+
"bitflags",
+
"cexpr",
+
"clang-sys",
+
"itertools 0.13.0",
+
"proc-macro2",
+
"quote",
+
"regex",
+
"rustc-hash",
+
"shlex",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "bit-set"
+
version = "0.8.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
+
dependencies = [
+
"bit-vec",
+
]
+
+
[[package]]
+
name = "bit-vec"
+
version = "0.8.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
+
+
[[package]]
+
name = "bitflags"
+
version = "2.10.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
+
+
[[package]]
+
name = "block-buffer"
+
version = "0.10.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+
dependencies = [
+
"generic-array",
+
]
+
+
[[package]]
+
name = "bon"
+
version = "3.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ebeb9aaf9329dff6ceb65c689ca3db33dbf15f324909c60e4e5eef5701ce31b1"
+
dependencies = [
+
"bon-macros",
+
"rustversion",
+
]
+
+
[[package]]
+
name = "bon-macros"
+
version = "3.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "77e9d642a7e3a318e37c2c9427b5a6a48aa1ad55dcd986f3034ab2239045a645"
+
dependencies = [
+
"darling",
+
"ident_case",
+
"prettyplease",
+
"proc-macro2",
+
"quote",
+
"rustversion",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "borsh"
+
version = "1.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f"
+
dependencies = [
+
"cfg_aliases",
+
]
+
+
[[package]]
+
name = "bracoxide"
+
version = "0.1.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f5a4d25760c1b6f53db7257292236bc20da1215a1004ee330b37976eeac3af31"
+
+
[[package]]
+
name = "brotli"
+
version = "8.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560"
+
dependencies = [
+
"alloc-no-stdlib",
+
"alloc-stdlib",
+
"brotli-decompressor",
+
]
+
+
[[package]]
+
name = "brotli-decompressor"
+
version = "5.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03"
+
dependencies = [
+
"alloc-no-stdlib",
+
"alloc-stdlib",
+
]
+
+
[[package]]
+
name = "bstr"
+
version = "1.12.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab"
+
dependencies = [
+
"memchr",
+
"regex-automata",
+
"serde",
+
]
+
+
[[package]]
+
name = "btree-range-map"
+
version = "0.7.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1be5c9672446d3800bcbcaabaeba121fe22f1fb25700c4562b22faf76d377c33"
+
dependencies = [
+
"btree-slab",
+
"cc-traits",
+
"range-traits",
+
"serde",
+
"slab",
+
]
+
+
[[package]]
+
name = "btree-slab"
+
version = "0.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7a2b56d3029f075c4fa892428a098425b86cef5c89ae54073137ece416aef13c"
+
dependencies = [
+
"cc-traits",
+
"slab",
+
"smallvec",
+
]
+
+
[[package]]
+
name = "buf-trait"
+
version = "0.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "21eaafc770e8c073d6c3facafe7617e774305d4954aa6351b9c452eb37ee17b4"
+
dependencies = [
+
"zerocopy 0.7.35",
+
]
+
+
[[package]]
+
name = "bumpalo"
+
version = "3.19.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
+
+
[[package]]
+
name = "bytecount"
+
version = "0.6.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e"
+
+
[[package]]
+
name = "byteorder"
+
version = "1.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+
[[package]]
+
name = "bytes"
+
version = "1.11.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "bytesize"
+
version = "2.3.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6bd91ee7b2422bcb158d90ef4d14f75ef67f340943fc4149891dcce8f8b972a3"
+
+
[[package]]
+
name = "byteyarn"
+
version = "0.5.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b93e51d26468a15ea59f8525e0c13dc405db43e644a0b1e6d44346c72cf4cf7b"
+
dependencies = [
+
"buf-trait",
+
]
+
+
[[package]]
+
name = "calamine"
+
version = "0.28.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "15e02a18e79de779a78b0a6ec84a3deed1ff0607dd970a11369f993263f99f1a"
+
dependencies = [
+
"atoi_simd",
+
"byteorder",
+
"chrono",
+
"codepage",
+
"encoding_rs",
+
"fast-float2",
+
"log",
+
"quick-xml 0.37.5",
+
"serde",
+
"zip",
+
]
+
+
[[package]]
+
name = "castaway"
+
version = "0.2.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a"
+
dependencies = [
+
"rustversion",
+
]
+
+
[[package]]
+
name = "cbor4ii"
+
version = "0.2.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b544cf8c89359205f4f990d0e6f3828db42df85b5dac95d09157a250eb0749c4"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "cc"
+
version = "1.2.49"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215"
+
dependencies = [
+
"find-msvc-tools",
+
"shlex",
+
]
+
+
[[package]]
+
name = "cc-traits"
+
version = "2.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "060303ef31ef4a522737e1b1ab68c67916f2a787bb2f4f54f383279adba962b5"
+
dependencies = [
+
"slab",
+
]
+
+
[[package]]
+
name = "cexpr"
+
version = "0.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+
dependencies = [
+
"nom",
+
]
+
+
[[package]]
+
name = "cfg-if"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
+
+
[[package]]
+
name = "cfg_aliases"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+
+
[[package]]
+
name = "chardetng"
+
version = "0.1.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "14b8f0b65b7b08ae3c8187e8d77174de20cb6777864c6b832d8ad365999cf1ea"
+
dependencies = [
+
"cfg-if",
+
"encoding_rs",
+
"memchr",
+
]
+
+
[[package]]
+
name = "chrono"
+
version = "0.4.42"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
+
dependencies = [
+
"iana-time-zone",
+
"js-sys",
+
"num-traits",
+
"pure-rust-locales",
+
"serde",
+
"wasm-bindgen",
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "chrono-humanize"
+
version = "0.2.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "799627e6b4d27827a814e837b9d8a504832086081806d45b1afa34dc982b023b"
+
dependencies = [
+
"chrono",
+
]
+
+
[[package]]
+
name = "chrono-tz"
+
version = "0.10.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3"
+
dependencies = [
+
"chrono",
+
"phf 0.12.1",
+
]
+
+
[[package]]
+
name = "ciborium"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e"
+
dependencies = [
+
"ciborium-io",
+
"ciborium-ll",
+
"serde",
+
]
+
+
[[package]]
+
name = "ciborium-io"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757"
+
+
[[package]]
+
name = "ciborium-ll"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9"
+
dependencies = [
+
"ciborium-io",
+
"half",
+
]
+
+
[[package]]
+
name = "cid"
+
version = "0.11.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a"
+
dependencies = [
+
"core2",
+
"multibase",
+
"multihash",
+
"serde",
+
"serde_bytes",
+
"unsigned-varint 0.8.0",
+
]
+
+
[[package]]
+
name = "clang-sys"
+
version = "1.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
+
dependencies = [
+
"glob",
+
"libc",
+
"libloading",
+
]
+
+
[[package]]
+
name = "clap"
+
version = "4.5.53"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8"
+
dependencies = [
+
"clap_builder",
+
]
+
+
[[package]]
+
name = "clap_builder"
+
version = "4.5.53"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00"
+
dependencies = [
+
"anstream",
+
"anstyle",
+
"clap_lex",
+
"strsim",
+
"terminal_size",
+
]
+
+
[[package]]
+
name = "clap_lex"
+
version = "0.7.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d"
+
+
[[package]]
+
name = "cobs"
+
version = "0.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1"
+
dependencies = [
+
"thiserror 2.0.17",
+
]
+
+
[[package]]
+
name = "codepage"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "48f68d061bc2828ae826206326e61251aca94c1e4a5305cf52d9138639c918b4"
+
dependencies = [
+
"encoding_rs",
+
]
+
+
[[package]]
+
name = "colorchoice"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
+
+
[[package]]
+
name = "compression-codecs"
+
version = "0.4.35"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b0f7ac3e5b97fdce45e8922fb05cae2c37f7bbd63d30dd94821dacfd8f3f2bf2"
+
dependencies = [
+
"compression-core",
+
"flate2",
+
"memchr",
+
]
+
+
[[package]]
+
name = "compression-core"
+
version = "0.4.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d"
+
+
[[package]]
+
name = "console"
+
version = "0.15.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
+
dependencies = [
+
"encode_unicode",
+
"libc",
+
"once_cell",
+
"unicode-width 0.2.2",
+
"windows-sys 0.59.0",
+
]
+
+
[[package]]
+
name = "console"
+
version = "0.16.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4"
+
dependencies = [
+
"encode_unicode",
+
"libc",
+
"once_cell",
+
"unicode-width 0.2.2",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "console_error_panic_hook"
+
version = "0.1.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
+
dependencies = [
+
"cfg-if",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "const-oid"
+
version = "0.9.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
+
+
[[package]]
+
name = "const-str"
+
version = "0.4.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3"
+
+
[[package]]
+
name = "const_format"
+
version = "0.2.35"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad"
+
dependencies = [
+
"const_format_proc_macros",
+
]
+
+
[[package]]
+
name = "const_format_proc_macros"
+
version = "0.2.34"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"unicode-xid",
+
]
+
+
[[package]]
+
name = "cordyceps"
+
version = "0.3.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a"
+
dependencies = [
+
"loom",
+
"tracing",
+
]
+
+
[[package]]
+
name = "core-foundation"
+
version = "0.9.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+
dependencies = [
+
"core-foundation-sys",
+
"libc",
+
]
+
+
[[package]]
+
name = "core-foundation-sys"
+
version = "0.8.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+
[[package]]
+
name = "core2"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
+
dependencies = [
+
"memchr",
+
]
+
+
[[package]]
+
name = "cpufeatures"
+
version = "0.2.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+
dependencies = [
+
"libc",
+
]
+
+
[[package]]
+
name = "crc32fast"
+
version = "1.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
+
dependencies = [
+
"cfg-if",
+
]
+
+
[[package]]
+
name = "critical-section"
+
version = "1.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
+
+
[[package]]
+
name = "crossbeam-channel"
+
version = "0.5.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
+
dependencies = [
+
"crossbeam-utils",
+
]
+
+
[[package]]
+
name = "crossbeam-deque"
+
version = "0.8.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
+
dependencies = [
+
"crossbeam-epoch",
+
"crossbeam-utils",
+
]
+
+
[[package]]
+
name = "crossbeam-epoch"
+
version = "0.9.18"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+
dependencies = [
+
"crossbeam-utils",
+
]
+
+
[[package]]
+
name = "crossbeam-utils"
+
version = "0.8.21"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
+
+
[[package]]
+
name = "crossterm_winapi"
+
version = "0.9.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+
dependencies = [
+
"winapi",
+
]
+
+
[[package]]
+
name = "crunchy"
+
version = "0.2.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
+
+
[[package]]
+
name = "crypto-bigint"
+
version = "0.5.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
+
dependencies = [
+
"generic-array",
+
"rand_core 0.6.4",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "crypto-common"
+
version = "0.1.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+
dependencies = [
+
"generic-array",
+
"typenum",
+
]
+
+
[[package]]
+
name = "csv"
+
version = "1.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938"
+
dependencies = [
+
"csv-core",
+
"itoa",
+
"ryu",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "csv-core"
+
version = "0.1.13"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782"
+
dependencies = [
+
"memchr",
+
]
+
+
[[package]]
+
name = "curve25519-dalek"
+
version = "4.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be"
+
dependencies = [
+
"cfg-if",
+
"cpufeatures",
+
"curve25519-dalek-derive",
+
"digest",
+
"fiat-crypto",
+
"rustc_version",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "curve25519-dalek-derive"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "darling"
+
version = "0.21.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0"
+
dependencies = [
+
"darling_core",
+
"darling_macro",
+
]
+
+
[[package]]
+
name = "darling_core"
+
version = "0.21.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
+
dependencies = [
+
"fnv",
+
"ident_case",
+
"proc-macro2",
+
"quote",
+
"strsim",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "darling_macro"
+
version = "0.21.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
+
dependencies = [
+
"darling_core",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "dashmap"
+
version = "6.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf"
+
dependencies = [
+
"cfg-if",
+
"crossbeam-utils",
+
"hashbrown 0.14.5",
+
"lock_api",
+
"once_cell",
+
"parking_lot_core",
+
]
+
+
[[package]]
+
name = "data-encoding"
+
version = "2.9.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
+
+
[[package]]
+
name = "data-encoding-macro"
+
version = "0.1.18"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d"
+
dependencies = [
+
"data-encoding",
+
"data-encoding-macro-internal",
+
]
+
+
[[package]]
+
name = "data-encoding-macro-internal"
+
version = "0.1.16"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976"
+
dependencies = [
+
"data-encoding",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "debug_unsafe"
+
version = "0.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "85d3cef41d236720ed453e102153a53e4cc3d2fde848c0078a50cf249e8e3e5b"
+
+
[[package]]
+
name = "der"
+
version = "0.7.10"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
+
dependencies = [
+
"const-oid",
+
"pem-rfc7468",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "deranged"
+
version = "0.5.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
+
dependencies = [
+
"powerfmt",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "derive_arbitrary"
+
version = "1.4.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "derive_more"
+
version = "1.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
+
dependencies = [
+
"derive_more-impl",
+
]
+
+
[[package]]
+
name = "derive_more-impl"
+
version = "1.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
"unicode-xid",
+
]
+
+
[[package]]
+
name = "devicons"
+
version = "0.6.12"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "830e47e2f330cf4fdd5a958dcef921b9523ffc21ab6713aa5e77ba2cce03904b"
+
dependencies = [
+
"lazy_static",
+
]
+
+
[[package]]
+
name = "dialoguer"
+
version = "0.11.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de"
+
dependencies = [
+
"console 0.15.11",
+
"fuzzy-matcher",
+
"shell-words",
+
"thiserror 1.0.69",
+
]
+
+
[[package]]
+
name = "diatomic-waker"
+
version = "0.2.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c"
+
+
[[package]]
+
name = "digest"
+
version = "0.10.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+
dependencies = [
+
"block-buffer",
+
"const-oid",
+
"crypto-common",
+
"subtle",
+
]
+
+
[[package]]
+
name = "dirs"
+
version = "6.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
+
dependencies = [
+
"dirs-sys",
+
]
+
+
[[package]]
+
name = "dirs-sys"
+
version = "0.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
+
dependencies = [
+
"libc",
+
"option-ext",
+
"redox_users",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "displaydoc"
+
version = "0.2.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "dtparse"
+
version = "2.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "23fb403c0926d35af2cc54d961bc2696a10d40725c08360ef69db04a4c201fd7"
+
dependencies = [
+
"chrono",
+
"lazy_static",
+
"num-traits",
+
"rust_decimal",
+
]
+
+
[[package]]
+
name = "dyn-clone"
+
version = "1.0.20"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
+
+
[[package]]
+
name = "dysnomia-sh"
+
version = "0.1.0"
+
dependencies = [
+
"ansi_term",
+
"anyhow",
+
"console_error_panic_hook",
+
"futures",
+
"getrandom 0.3.4",
+
"jacquard",
+
"jacquard-repo",
+
"js-sys",
+
"miette",
+
"nu-cmd-extra",
+
"nu-cmd-lang",
+
"nu-command",
+
"nu-engine",
+
"nu-parser",
+
"nu-protocol",
+
"rapidhash",
+
"reqwest",
+
"scc",
+
"serde",
+
"serde_ipld_dagcbor",
+
"serde_json",
+
"url",
+
"vfs",
+
"wasm-bindgen",
+
"wasm-bindgen-futures",
+
"web-sys",
+
]
+
+
[[package]]
+
name = "ecdsa"
+
version = "0.16.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
+
dependencies = [
+
"der",
+
"digest",
+
"elliptic-curve",
+
"rfc6979",
+
"signature",
+
"spki",
+
]
+
+
[[package]]
+
name = "ed25519"
+
version = "2.2.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
+
dependencies = [
+
"pkcs8",
+
"signature",
+
]
+
+
[[package]]
+
name = "ed25519-dalek"
+
version = "2.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9"
+
dependencies = [
+
"curve25519-dalek",
+
"ed25519",
+
"rand_core 0.6.4",
+
"serde",
+
"sha2",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "either"
+
version = "1.15.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
+
+
[[package]]
+
name = "elliptic-curve"
+
version = "0.13.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
+
dependencies = [
+
"base16ct",
+
"crypto-bigint",
+
"digest",
+
"ff",
+
"generic-array",
+
"group",
+
"pem-rfc7468",
+
"pkcs8",
+
"rand_core 0.6.4",
+
"sec1",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "embedded-io"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"
+
+
[[package]]
+
name = "embedded-io"
+
version = "0.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d"
+
+
[[package]]
+
name = "encode_unicode"
+
version = "1.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
+
+
[[package]]
+
name = "encoding_rs"
+
version = "0.8.35"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
+
dependencies = [
+
"cfg-if",
+
]
+
+
[[package]]
+
name = "equivalent"
+
version = "1.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+
+
[[package]]
+
name = "erased-serde"
+
version = "0.4.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3"
+
dependencies = [
+
"serde",
+
"serde_core",
+
"typeid",
+
]
+
+
[[package]]
+
name = "errno"
+
version = "0.3.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
+
dependencies = [
+
"libc",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "fancy-regex"
+
version = "0.16.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "998b056554fbe42e03ae0e152895cd1a7e1002aec800fdc6635d20270260c46f"
+
dependencies = [
+
"bit-set",
+
"regex-automata",
+
"regex-syntax",
+
]
+
+
[[package]]
+
name = "fast-float2"
+
version = "0.2.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55"
+
+
[[package]]
+
name = "fastrand"
+
version = "2.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
+
+
[[package]]
+
name = "ff"
+
version = "0.13.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393"
+
dependencies = [
+
"rand_core 0.6.4",
+
"subtle",
+
]
+
+
[[package]]
+
name = "fiat-crypto"
+
version = "0.2.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d"
+
+
[[package]]
+
name = "filesize"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "12d741e2415d4e2e5bd1c1d00409d1a8865a57892c2d689b504365655d237d43"
+
dependencies = [
+
"winapi",
+
]
+
+
[[package]]
+
name = "filetime"
+
version = "0.2.26"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed"
+
dependencies = [
+
"cfg-if",
+
"libc",
+
"libredox",
+
"windows-sys 0.60.2",
+
]
+
+
[[package]]
+
name = "find-msvc-tools"
+
version = "0.1.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
+
+
[[package]]
+
name = "flate2"
+
version = "1.1.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb"
+
dependencies = [
+
"crc32fast",
+
"libz-rs-sys",
+
"miniz_oxide",
+
]
+
+
[[package]]
+
name = "fluent"
+
version = "0.17.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8137a6d5a2c50d6b0ebfcb9aaa91a28154e0a70605f112d30cb0cd4a78670477"
+
dependencies = [
+
"fluent-bundle",
+
"unic-langid",
+
]
+
+
[[package]]
+
name = "fluent-bundle"
+
version = "0.16.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4"
+
dependencies = [
+
"fluent-langneg",
+
"fluent-syntax",
+
"intl-memoizer",
+
"intl_pluralrules",
+
"rustc-hash",
+
"self_cell",
+
"smallvec",
+
"unic-langid",
+
]
+
+
[[package]]
+
name = "fluent-langneg"
+
version = "0.13.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7eebbe59450baee8282d71676f3bfed5689aeab00b27545e83e5f14b1195e8b0"
+
dependencies = [
+
"unic-langid",
+
]
+
+
[[package]]
+
name = "fluent-syntax"
+
version = "0.12.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198"
+
dependencies = [
+
"memchr",
+
"thiserror 2.0.17",
+
]
+
+
[[package]]
+
name = "fnv"
+
version = "1.0.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+
[[package]]
+
name = "foldhash"
+
version = "0.1.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+
+
[[package]]
+
name = "form_urlencoded"
+
version = "1.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
+
dependencies = [
+
"percent-encoding",
+
]
+
+
[[package]]
+
name = "futf"
+
version = "0.1.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+
dependencies = [
+
"mac",
+
"new_debug_unreachable",
+
]
+
+
[[package]]
+
name = "futures"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
+
dependencies = [
+
"futures-channel",
+
"futures-core",
+
"futures-executor",
+
"futures-io",
+
"futures-sink",
+
"futures-task",
+
"futures-util",
+
]
+
+
[[package]]
+
name = "futures-buffered"
+
version = "0.2.12"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a8e0e1f38ec07ba4abbde21eed377082f17ccb988be9d988a5adbf4bafc118fd"
+
dependencies = [
+
"cordyceps",
+
"diatomic-waker",
+
"futures-core",
+
"pin-project-lite",
+
"spin 0.10.0",
+
]
+
+
[[package]]
+
name = "futures-channel"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
+
dependencies = [
+
"futures-core",
+
"futures-sink",
+
]
+
+
[[package]]
+
name = "futures-core"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
+
+
[[package]]
+
name = "futures-executor"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
+
dependencies = [
+
"futures-core",
+
"futures-task",
+
"futures-util",
+
]
+
+
[[package]]
+
name = "futures-io"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
+
+
[[package]]
+
name = "futures-lite"
+
version = "2.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
+
dependencies = [
+
"fastrand",
+
"futures-core",
+
"futures-io",
+
"parking",
+
"pin-project-lite",
+
]
+
+
[[package]]
+
name = "futures-macro"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "futures-sink"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
+
+
[[package]]
+
name = "futures-task"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
+
+
[[package]]
+
name = "futures-util"
+
version = "0.3.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
+
dependencies = [
+
"futures-channel",
+
"futures-core",
+
"futures-io",
+
"futures-macro",
+
"futures-sink",
+
"futures-task",
+
"memchr",
+
"pin-project-lite",
+
"pin-utils",
+
"slab",
+
]
+
+
[[package]]
+
name = "fuzzy-matcher"
+
version = "0.3.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94"
+
dependencies = [
+
"thread_local",
+
]
+
+
[[package]]
+
name = "generator"
+
version = "0.8.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2"
+
dependencies = [
+
"cc",
+
"cfg-if",
+
"libc",
+
"log",
+
"rustversion",
+
"windows 0.61.3",
+
]
+
+
[[package]]
+
name = "generic-array"
+
version = "0.14.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
+
dependencies = [
+
"typenum",
+
"version_check",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "getrandom"
+
version = "0.2.16"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
+
dependencies = [
+
"cfg-if",
+
"js-sys",
+
"libc",
+
"wasi",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "getrandom"
+
version = "0.3.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
+
dependencies = [
+
"cfg-if",
+
"js-sys",
+
"libc",
+
"r-efi",
+
"wasip2",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "gimli"
+
version = "0.32.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
+
+
[[package]]
+
name = "glob"
+
version = "0.3.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
+
+
[[package]]
+
name = "gloo-storage"
+
version = "0.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a"
+
dependencies = [
+
"gloo-utils",
+
"js-sys",
+
"serde",
+
"serde_json",
+
"thiserror 1.0.69",
+
"wasm-bindgen",
+
"web-sys",
+
]
+
+
[[package]]
+
name = "gloo-utils"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa"
+
dependencies = [
+
"js-sys",
+
"serde",
+
"serde_json",
+
"wasm-bindgen",
+
"web-sys",
+
]
+
+
[[package]]
+
name = "group"
+
version = "0.13.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
+
dependencies = [
+
"ff",
+
"rand_core 0.6.4",
+
"subtle",
+
]
+
+
[[package]]
+
name = "h2"
+
version = "0.4.12"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
+
dependencies = [
+
"atomic-waker",
+
"bytes",
+
"fnv",
+
"futures-core",
+
"futures-sink",
+
"http",
+
"indexmap 2.12.1",
+
"slab",
+
"tokio",
+
"tokio-util",
+
"tracing",
+
]
+
+
[[package]]
+
name = "half"
+
version = "2.7.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
+
dependencies = [
+
"cfg-if",
+
"crunchy",
+
"zerocopy 0.8.31",
+
]
+
+
[[package]]
+
name = "hash32"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
+
dependencies = [
+
"byteorder",
+
]
+
+
[[package]]
+
name = "hashbrown"
+
version = "0.12.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+
[[package]]
+
name = "hashbrown"
+
version = "0.14.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+
+
[[package]]
+
name = "hashbrown"
+
version = "0.15.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
+
dependencies = [
+
"allocator-api2",
+
"equivalent",
+
"foldhash",
+
]
+
+
[[package]]
+
name = "hashbrown"
+
version = "0.16.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
+
+
[[package]]
+
name = "heapless"
+
version = "0.7.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f"
+
dependencies = [
+
"atomic-polyfill",
+
"hash32",
+
"rustc_version",
+
"serde",
+
"spin 0.9.8",
+
"stable_deref_trait",
+
]
+
+
[[package]]
+
name = "heck"
+
version = "0.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+
[[package]]
+
name = "heck"
+
version = "0.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+
[[package]]
+
name = "hex"
+
version = "0.4.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+
[[package]]
+
name = "hex_fmt"
+
version = "0.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f"
+
+
[[package]]
+
name = "hmac"
+
version = "0.12.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+
dependencies = [
+
"digest",
+
]
+
+
[[package]]
+
name = "html5ever"
+
version = "0.27.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4"
+
dependencies = [
+
"log",
+
"mac",
+
"markup5ever",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "http"
+
version = "1.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
+
dependencies = [
+
"bytes",
+
"itoa",
+
]
+
+
[[package]]
+
name = "http-body"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
+
dependencies = [
+
"bytes",
+
"http",
+
]
+
+
[[package]]
+
name = "http-body-util"
+
version = "0.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
+
dependencies = [
+
"bytes",
+
"futures-core",
+
"http",
+
"http-body",
+
"pin-project-lite",
+
]
+
+
[[package]]
+
name = "httparse"
+
version = "1.10.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
+
+
[[package]]
+
name = "human-date-parser"
+
version = "0.3.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "406f83c56de4b2c9183be52ae9a4fefa22c0e0c3d3d7ef80be26eaee11c7110e"
+
dependencies = [
+
"chrono",
+
"pest",
+
"pest_consume",
+
"pest_derive",
+
"thiserror 1.0.69",
+
]
+
+
[[package]]
+
name = "hyper"
+
version = "1.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11"
+
dependencies = [
+
"atomic-waker",
+
"bytes",
+
"futures-channel",
+
"futures-core",
+
"h2",
+
"http",
+
"http-body",
+
"httparse",
+
"itoa",
+
"pin-project-lite",
+
"pin-utils",
+
"smallvec",
+
"tokio",
+
"want",
+
]
+
+
[[package]]
+
name = "hyper-rustls"
+
version = "0.27.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
+
dependencies = [
+
"http",
+
"hyper",
+
"hyper-util",
+
"rustls",
+
"rustls-pki-types",
+
"tokio",
+
"tokio-rustls",
+
"tower-service",
+
"webpki-roots",
+
]
+
+
[[package]]
+
name = "hyper-util"
+
version = "0.1.19"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f"
+
dependencies = [
+
"base64",
+
"bytes",
+
"futures-channel",
+
"futures-core",
+
"futures-util",
+
"http",
+
"http-body",
+
"hyper",
+
"ipnet",
+
"libc",
+
"percent-encoding",
+
"pin-project-lite",
+
"socket2",
+
"system-configuration",
+
"tokio",
+
"tower-service",
+
"tracing",
+
"windows-registry",
+
]
+
+
[[package]]
+
name = "iana-time-zone"
+
version = "0.1.64"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
+
dependencies = [
+
"android_system_properties",
+
"core-foundation-sys",
+
"iana-time-zone-haiku",
+
"js-sys",
+
"log",
+
"wasm-bindgen",
+
"windows-core 0.62.2",
+
]
+
+
[[package]]
+
name = "iana-time-zone-haiku"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+
dependencies = [
+
"cc",
+
]
+
+
[[package]]
+
name = "icu_collections"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
+
dependencies = [
+
"displaydoc",
+
"potential_utf",
+
"yoke",
+
"zerofrom",
+
"zerovec",
+
]
+
+
[[package]]
+
name = "icu_locale_core"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
+
dependencies = [
+
"displaydoc",
+
"litemap",
+
"tinystr",
+
"writeable",
+
"zerovec",
+
]
+
+
[[package]]
+
name = "icu_normalizer"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
+
dependencies = [
+
"icu_collections",
+
"icu_normalizer_data",
+
"icu_properties",
+
"icu_provider",
+
"smallvec",
+
"zerovec",
+
]
+
+
[[package]]
+
name = "icu_normalizer_data"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
+
+
[[package]]
+
name = "icu_properties"
+
version = "2.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec"
+
dependencies = [
+
"icu_collections",
+
"icu_locale_core",
+
"icu_properties_data",
+
"icu_provider",
+
"zerotrie",
+
"zerovec",
+
]
+
+
[[package]]
+
name = "icu_properties_data"
+
version = "2.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af"
+
+
[[package]]
+
name = "icu_provider"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
+
dependencies = [
+
"displaydoc",
+
"icu_locale_core",
+
"writeable",
+
"yoke",
+
"zerofrom",
+
"zerotrie",
+
"zerovec",
+
]
+
+
[[package]]
+
name = "ident_case"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+
[[package]]
+
name = "idna"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
+
dependencies = [
+
"idna_adapter",
+
"smallvec",
+
"utf8_iter",
+
]
+
+
[[package]]
+
name = "idna_adapter"
+
version = "1.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
+
dependencies = [
+
"icu_normalizer",
+
"icu_properties",
+
]
+
+
[[package]]
+
name = "indexmap"
+
version = "1.9.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+
dependencies = [
+
"autocfg",
+
"hashbrown 0.12.3",
+
"serde",
+
]
+
+
[[package]]
+
name = "indexmap"
+
version = "2.12.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2"
+
dependencies = [
+
"equivalent",
+
"hashbrown 0.16.1",
+
"serde",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "indicatif"
+
version = "0.18.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9375e112e4b463ec1b1c6c011953545c65a30164fbab5b581df32b3abf0dcb88"
+
dependencies = [
+
"console 0.16.1",
+
"portable-atomic",
+
"unicode-width 0.2.2",
+
"unit-prefix",
+
"web-time",
+
]
+
+
[[package]]
+
name = "indoc"
+
version = "2.0.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
+
dependencies = [
+
"rustversion",
+
]
+
+
[[package]]
+
name = "intl-memoizer"
+
version = "0.5.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f"
+
dependencies = [
+
"type-map",
+
"unic-langid",
+
]
+
+
[[package]]
+
name = "intl_pluralrules"
+
version = "7.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972"
+
dependencies = [
+
"unic-langid",
+
]
+
+
[[package]]
+
name = "inventory"
+
version = "0.3.21"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e"
+
dependencies = [
+
"rustversion",
+
]
+
+
[[package]]
+
name = "ipld-core"
+
version = "0.4.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db"
+
dependencies = [
+
"cid",
+
"serde",
+
"serde_bytes",
+
]
+
+
[[package]]
+
name = "ipnet"
+
version = "2.11.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
+
+
[[package]]
+
name = "iri-string"
+
version = "0.7.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397"
+
dependencies = [
+
"memchr",
+
"serde",
+
]
+
+
[[package]]
+
name = "iroh-car"
+
version = "0.5.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cb7f8cd4cb9aa083fba8b52e921764252d0b4dcb1cd6d120b809dbfe1106e81a"
+
dependencies = [
+
"anyhow",
+
"cid",
+
"futures",
+
"serde",
+
"serde_ipld_dagcbor",
+
"thiserror 1.0.69",
+
"tokio",
+
"unsigned-varint 0.7.2",
+
]
+
+
[[package]]
+
name = "is_ci"
+
version = "1.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45"
+
+
[[package]]
+
name = "is_debug"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1fe266d2e243c931d8190177f20bf7f24eed45e96f39e87dc49a27b32d12d407"
+
+
[[package]]
+
name = "is_terminal_polyfill"
+
version = "1.70.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
+
+
[[package]]
+
name = "itertools"
+
version = "0.11.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+
dependencies = [
+
"either",
+
]
+
+
[[package]]
+
name = "itertools"
+
version = "0.13.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
+
dependencies = [
+
"either",
+
]
+
+
[[package]]
+
name = "itertools"
+
version = "0.14.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
+
dependencies = [
+
"either",
+
]
+
+
[[package]]
+
name = "itoa"
+
version = "1.0.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+
+
[[package]]
+
name = "jacquard"
+
version = "0.9.4"
+
dependencies = [
+
"bytes",
+
"getrandom 0.2.16",
+
"gloo-storage",
+
"http",
+
"jacquard-api",
+
"jacquard-common",
+
"jacquard-identity",
+
"jacquard-oauth",
+
"jose-jwk",
+
"miette",
+
"regex",
+
"regex-lite",
+
"reqwest",
+
"ring",
+
"serde",
+
"serde_html_form",
+
"serde_json",
+
"smol_str",
+
"thiserror 2.0.17",
+
"tokio",
+
"trait-variant",
+
"url",
+
"webpage",
+
]
+
+
[[package]]
+
name = "jacquard-api"
+
version = "0.9.2"
+
dependencies = [
+
"bon",
+
"bytes",
+
"jacquard-common",
+
"jacquard-derive",
+
"jacquard-lexicon",
+
"miette",
+
"rustversion",
+
"serde",
+
"serde_bytes",
+
"serde_ipld_dagcbor",
+
"thiserror 2.0.17",
+
"unicode-segmentation",
+
]
+
+
[[package]]
+
name = "jacquard-common"
+
version = "0.9.2"
+
dependencies = [
+
"base64",
+
"bon",
+
"bytes",
+
"chrono",
+
"cid",
+
"ed25519-dalek",
+
"getrandom 0.2.16",
+
"getrandom 0.3.4",
+
"http",
+
"ipld-core",
+
"k256",
+
"langtag",
+
"miette",
+
"multibase",
+
"multihash",
+
"ouroboros",
+
"p256",
+
"postcard",
+
"rand 0.9.2",
+
"regex",
+
"regex-lite",
+
"reqwest",
+
"ring",
+
"serde",
+
"serde_bytes",
+
"serde_html_form",
+
"serde_ipld_dagcbor",
+
"serde_json",
+
"signature",
+
"smol_str",
+
"thiserror 2.0.17",
+
"tokio",
+
"tokio-util",
+
"trait-variant",
+
"url",
+
]
+
+
[[package]]
+
name = "jacquard-derive"
+
version = "0.9.4"
+
dependencies = [
+
"heck 0.5.0",
+
"jacquard-lexicon",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "jacquard-identity"
+
version = "0.9.2"
+
dependencies = [
+
"bon",
+
"bytes",
+
"http",
+
"jacquard-api",
+
"jacquard-common",
+
"jacquard-lexicon",
+
"miette",
+
"mini-moka",
+
"n0-future",
+
"percent-encoding",
+
"reqwest",
+
"ring",
+
"serde",
+
"serde_html_form",
+
"serde_json",
+
"thiserror 2.0.17",
+
"tokio",
+
"trait-variant",
+
"url",
+
"urlencoding",
+
]
+
+
[[package]]
+
name = "jacquard-lexicon"
+
version = "0.9.2"
+
dependencies = [
+
"cid",
+
"dashmap",
+
"heck 0.5.0",
+
"inventory",
+
"jacquard-common",
+
"miette",
+
"multihash",
+
"prettyplease",
+
"proc-macro2",
+
"quote",
+
"serde",
+
"serde_ipld_dagcbor",
+
"serde_json",
+
"serde_repr",
+
"serde_with",
+
"sha2",
+
"syn 2.0.111",
+
"thiserror 2.0.17",
+
"unicode-segmentation",
+
]
+
+
[[package]]
+
name = "jacquard-oauth"
+
version = "0.9.2"
+
dependencies = [
+
"base64",
+
"bytes",
+
"chrono",
+
"dashmap",
+
"elliptic-curve",
+
"http",
+
"jacquard-common",
+
"jacquard-identity",
+
"jose-jwa",
+
"jose-jwk",
+
"miette",
+
"p256",
+
"rand 0.8.5",
+
"ring",
+
"serde",
+
"serde_html_form",
+
"serde_json",
+
"sha2",
+
"smol_str",
+
"thiserror 2.0.17",
+
"tokio",
+
"trait-variant",
+
"url",
+
]
+
+
[[package]]
+
name = "jacquard-repo"
+
version = "0.9.4"
+
dependencies = [
+
"bytes",
+
"cid",
+
"ed25519-dalek",
+
"iroh-car",
+
"jacquard-common",
+
"jacquard-derive",
+
"k256",
+
"miette",
+
"multihash",
+
"n0-future",
+
"p256",
+
"serde",
+
"serde_bytes",
+
"serde_ipld_dagcbor",
+
"sha2",
+
"smol_str",
+
"thiserror 2.0.17",
+
"tokio",
+
"trait-variant",
+
]
+
+
[[package]]
+
name = "jose-b64"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bec69375368709666b21c76965ce67549f2d2db7605f1f8707d17c9656801b56"
+
dependencies = [
+
"base64ct",
+
"serde",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "jose-jwa"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9ab78e053fe886a351d67cf0d194c000f9d0dcb92906eb34d853d7e758a4b3a7"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "jose-jwk"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "280fa263807fe0782ecb6f2baadc28dffc04e00558a58e33bfdb801d11fd58e7"
+
dependencies = [
+
"jose-b64",
+
"jose-jwa",
+
"p256",
+
"p384",
+
"rsa",
+
"serde",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "js-sys"
+
version = "0.3.83"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8"
+
dependencies = [
+
"once_cell",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "k256"
+
version = "0.13.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b"
+
dependencies = [
+
"cfg-if",
+
"ecdsa",
+
"elliptic-curve",
+
"once_cell",
+
"sha2",
+
"signature",
+
]
+
+
[[package]]
+
name = "langtag"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9ecb4c689a30e48ebeaa14237f34037e300dd072e6ad21a9ec72e810ff3c6600"
+
dependencies = [
+
"serde",
+
"static-regular-grammar",
+
"thiserror 1.0.69",
+
]
+
+
[[package]]
+
name = "lazy_static"
+
version = "1.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
dependencies = [
+
"spin 0.9.8",
+
]
+
+
[[package]]
+
name = "lean_string"
+
version = "0.5.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "962df00ba70ac8d5ca5c064e17e5c3d090c087fd8d21aa45096c716b169da514"
+
dependencies = [
+
"castaway",
+
"itoa",
+
"ryu",
+
"serde",
+
]
+
+
[[package]]
+
name = "libc"
+
version = "0.2.178"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091"
+
+
[[package]]
+
name = "libloading"
+
version = "0.8.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
+
dependencies = [
+
"cfg-if",
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "libm"
+
version = "0.2.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
+
+
[[package]]
+
name = "libproc"
+
version = "0.14.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a54ad7278b8bc5301d5ffd2a94251c004feb971feba96c971ea4063645990757"
+
dependencies = [
+
"bindgen",
+
"errno",
+
"libc",
+
]
+
+
[[package]]
+
name = "libredox"
+
version = "0.1.10"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
+
dependencies = [
+
"bitflags",
+
"libc",
+
"redox_syscall",
+
]
+
+
[[package]]
+
name = "libz-rs-sys"
+
version = "0.5.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "15413ef615ad868d4d65dce091cb233b229419c7c0c4bcaa746c0901c49ff39c"
+
dependencies = [
+
"zlib-rs",
+
]
+
+
[[package]]
+
name = "linked-hash-map"
+
version = "0.5.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "linux-raw-sys"
+
version = "0.4.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
+
+
[[package]]
+
name = "linux-raw-sys"
+
version = "0.11.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
+
+
[[package]]
+
name = "litemap"
+
version = "0.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
+
+
[[package]]
+
name = "lock_api"
+
version = "0.4.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
+
dependencies = [
+
"scopeguard",
+
]
+
+
[[package]]
+
name = "log"
+
version = "0.4.29"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+
+
[[package]]
+
name = "loom"
+
version = "0.7.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca"
+
dependencies = [
+
"cfg-if",
+
"generator",
+
"scoped-tls",
+
"tracing",
+
"tracing-subscriber",
+
]
+
+
[[package]]
+
name = "lru"
+
version = "0.12.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
+
dependencies = [
+
"hashbrown 0.15.5",
+
]
+
+
[[package]]
+
name = "lru-slab"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
+
+
[[package]]
+
name = "lscolors"
+
version = "0.20.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "61183da5de8ba09a58e330d55e5ea796539d8443bd00fdeb863eac39724aa4ab"
+
dependencies = [
+
"aho-corasick",
+
"nu-ansi-term",
+
]
+
+
[[package]]
+
name = "mac"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+
[[package]]
+
name = "mach2"
+
version = "0.4.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44"
+
dependencies = [
+
"libc",
+
]
+
+
[[package]]
+
name = "markup5ever"
+
version = "0.12.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45"
+
dependencies = [
+
"log",
+
"phf 0.11.3",
+
"phf_codegen",
+
"string_cache",
+
"string_cache_codegen",
+
"tendril",
+
]
+
+
[[package]]
+
name = "markup5ever_rcdom"
+
version = "0.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "edaa21ab3701bfee5099ade5f7e1f84553fd19228cf332f13cd6e964bf59be18"
+
dependencies = [
+
"html5ever",
+
"markup5ever",
+
"tendril",
+
"xml5ever",
+
]
+
+
[[package]]
+
name = "match-lookup"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 1.0.109",
+
]
+
+
[[package]]
+
name = "matchers"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
+
dependencies = [
+
"regex-automata",
+
]
+
+
[[package]]
+
name = "md-5"
+
version = "0.10.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+
dependencies = [
+
"cfg-if",
+
"digest",
+
]
+
+
[[package]]
+
name = "memchr"
+
version = "2.7.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
+
+
[[package]]
+
name = "memoffset"
+
version = "0.9.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
+
dependencies = [
+
"autocfg",
+
]
+
+
[[package]]
+
name = "miette"
+
version = "7.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7"
+
dependencies = [
+
"backtrace",
+
"backtrace-ext",
+
"cfg-if",
+
"miette-derive",
+
"owo-colors",
+
"supports-color",
+
"supports-hyperlinks",
+
"supports-unicode",
+
"terminal_size",
+
"textwrap",
+
"unicode-width 0.1.14",
+
]
+
+
[[package]]
+
name = "miette-derive"
+
version = "7.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "mime"
+
version = "0.3.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+
[[package]]
+
name = "mime_guess"
+
version = "2.0.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
+
dependencies = [
+
"mime",
+
"unicase",
+
]
+
+
[[package]]
+
name = "mini-moka"
+
version = "0.10.99"
+
dependencies = [
+
"crossbeam-channel",
+
"crossbeam-utils",
+
"dashmap",
+
"smallvec",
+
"tagptr",
+
"triomphe",
+
"web-time",
+
]
+
+
[[package]]
+
name = "minimal-lexical"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+
[[package]]
+
name = "miniz_oxide"
+
version = "0.8.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
+
dependencies = [
+
"adler2",
+
"simd-adler32",
+
]
+
+
[[package]]
+
name = "mio"
+
version = "1.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc"
+
dependencies = [
+
"libc",
+
"wasi",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "multibase"
+
version = "0.9.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77"
+
dependencies = [
+
"base-x",
+
"base256emoji",
+
"data-encoding",
+
"data-encoding-macro",
+
]
+
+
[[package]]
+
name = "multihash"
+
version = "0.19.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d"
+
dependencies = [
+
"core2",
+
"serde",
+
"unsigned-varint 0.8.0",
+
]
+
+
[[package]]
+
name = "n0-future"
+
version = "0.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7bb0e5d99e681ab3c938842b96fcb41bf8a7bb4bfdb11ccbd653a7e83e06c794"
+
dependencies = [
+
"cfg_aliases",
+
"derive_more",
+
"futures-buffered",
+
"futures-lite",
+
"futures-util",
+
"js-sys",
+
"pin-project",
+
"send_wrapper",
+
"tokio",
+
"tokio-util",
+
"wasm-bindgen",
+
"wasm-bindgen-futures",
+
"web-time",
+
]
+
+
[[package]]
+
name = "new_debug_unreachable"
+
version = "1.0.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
+
+
[[package]]
+
name = "nix"
+
version = "0.30.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
+
dependencies = [
+
"bitflags",
+
"cfg-if",
+
"cfg_aliases",
+
"libc",
+
]
+
+
[[package]]
+
name = "nom"
+
version = "7.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+
dependencies = [
+
"memchr",
+
"minimal-lexical",
+
]
+
+
[[package]]
+
name = "ntapi"
+
version = "0.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
+
dependencies = [
+
"winapi",
+
]
+
+
[[package]]
+
name = "nu-ansi-term"
+
version = "0.50.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
+
dependencies = [
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "nu-cmd-base"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2460ee389a43b935aa18ef5ed9fa8275bdf617e8c05eba7c2b82f92effd2132b"
+
dependencies = [
+
"indexmap 2.12.1",
+
"miette",
+
"nu-engine",
+
"nu-parser",
+
"nu-path",
+
"nu-protocol",
+
]
+
+
[[package]]
+
name = "nu-cmd-extra"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "96f1ac416cd5182ca427a1007c9d0193feaa746aeb54b5320251faad41481cfe"
+
dependencies = [
+
"fancy-regex",
+
"heck 0.5.0",
+
"itertools 0.14.0",
+
"mime",
+
"nu-ansi-term",
+
"nu-cmd-base",
+
"nu-engine",
+
"nu-json",
+
"nu-parser",
+
"nu-pretty-hex",
+
"nu-protocol",
+
"nu-utils",
+
"num-traits",
+
"rust-embed",
+
"serde",
+
"serde_urlencoded",
+
"v_htmlescape",
+
]
+
+
[[package]]
+
name = "nu-cmd-lang"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5b266674d87b816264f6aff8cca351e6ebb156f34faab45d7d728c2aba005495"
+
dependencies = [
+
"itertools 0.14.0",
+
"nu-cmd-base",
+
"nu-engine",
+
"nu-experimental",
+
"nu-parser",
+
"nu-protocol",
+
"nu-utils",
+
"shadow-rs",
+
]
+
+
[[package]]
+
name = "nu-color-config"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "440a59265caf5468af6ff186e656bc6e6d349c08662ee959b116375597864206"
+
dependencies = [
+
"nu-ansi-term",
+
"nu-engine",
+
"nu-json",
+
"nu-protocol",
+
"serde",
+
]
+
+
[[package]]
+
name = "nu-command"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5380a9cf6ef0f482280b71d6e78fa8d4bc1b2b43aa8f0b1fa786f96087c2d500"
+
dependencies = [
+
"alphanumeric-sort",
+
"base64",
+
"bracoxide",
+
"brotli",
+
"byteorder",
+
"bytesize",
+
"calamine",
+
"chardetng",
+
"chrono",
+
"chrono-humanize",
+
"chrono-tz",
+
"csv",
+
"data-encoding",
+
"devicons",
+
"dialoguer",
+
"digest",
+
"dtparse",
+
"encoding_rs",
+
"fancy-regex",
+
"filesize",
+
"filetime",
+
"fuzzy-matcher",
+
"http",
+
"human-date-parser",
+
"indexmap 2.12.1",
+
"indicatif",
+
"itertools 0.14.0",
+
"log",
+
"lscolors",
+
"md-5",
+
"mime",
+
"mime_guess",
+
"nix",
+
"nu-ansi-term",
+
"nu-cmd-base",
+
"nu-color-config",
+
"nu-engine",
+
"nu-experimental",
+
"nu-glob",
+
"nu-json",
+
"nu-parser",
+
"nu-path",
+
"nu-pretty-hex",
+
"nu-protocol",
+
"nu-system",
+
"nu-table",
+
"nu-term-grid",
+
"nu-utils",
+
"num-format",
+
"num-traits",
+
"nuon",
+
"oem_cp",
+
"pathdiff",
+
"percent-encoding",
+
"print-positions",
+
"procfs 0.17.0",
+
"quick-xml 0.38.4",
+
"rayon",
+
"rmp",
+
"roxmltree",
+
"scopeguard",
+
"serde",
+
"serde_json",
+
"serde_urlencoded",
+
"serde_yaml",
+
"sha2",
+
"strum",
+
"sysinfo",
+
"tabled",
+
"titlecase",
+
"toml",
+
"uds_windows",
+
"umask",
+
"unicode-segmentation",
+
"unicode-width 0.2.2",
+
"url",
+
"uucore",
+
"v_htmlescape",
+
"wax",
+
"web-time",
+
"windows 0.62.2",
+
"winreg",
+
]
+
+
[[package]]
+
name = "nu-derive-value"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1465d2d3ada6004cb6689f269a08c70ba81056231e2b5392d1e0ccf5825f81cb"
+
dependencies = [
+
"heck 0.5.0",
+
"proc-macro-error2",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "nu-engine"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b3b777faf7c5180fe5d7f67d83c44fd14138d91f2938a36494ed6ac66b7160f3"
+
dependencies = [
+
"fancy-regex",
+
"log",
+
"nu-experimental",
+
"nu-glob",
+
"nu-path",
+
"nu-protocol",
+
"nu-utils",
+
]
+
+
[[package]]
+
name = "nu-experimental"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "73dd212a1afdad646a38c00579a0988264880aeb97fee820b349a28cdcc04df2"
+
dependencies = [
+
"itertools 0.14.0",
+
"thiserror 2.0.17",
+
]
+
+
[[package]]
+
name = "nu-glob"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "15aa2c17078926f14e393b4b708e69f228cb6fd4c81136839bde82772bdde1b5"
+
+
[[package]]
+
name = "nu-json"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7ca63927a3c1c4fb889e80dc5cfbe754daed822a7b503cc74e600627c2aa8435"
+
dependencies = [
+
"linked-hash-map",
+
"nu-utils",
+
"num-traits",
+
"serde",
+
"serde_json",
+
]
+
+
[[package]]
+
name = "nu-parser"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "237172636312c3566272511a00c1dc355202406c376e1546a45a33c65e81babe"
+
dependencies = [
+
"bytesize",
+
"chrono",
+
"itertools 0.14.0",
+
"log",
+
"nu-engine",
+
"nu-path",
+
"nu-protocol",
+
"nu-utils",
+
"serde_json",
+
]
+
+
[[package]]
+
name = "nu-path"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dde9d8ba26f62c07176c0237a36f38ce964ab3a0dcfb6aab1feea7515d1c6594"
+
dependencies = [
+
"dirs",
+
"omnipath",
+
"pwd",
+
"ref-cast",
+
]
+
+
[[package]]
+
name = "nu-pretty-hex"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "02561546604ac4c443bad65d9485ab3965154cad0873340e2e9ebe72d4a18aef"
+
dependencies = [
+
"nu-ansi-term",
+
]
+
+
[[package]]
+
name = "nu-protocol"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "038943300ca9de0924fef1c795a7dd16ffc67105629477cf163e8ee6bad95ea6"
+
dependencies = [
+
"bytes",
+
"chrono",
+
"chrono-humanize",
+
"dirs",
+
"dirs-sys",
+
"fancy-regex",
+
"heck 0.5.0",
+
"indexmap 2.12.1",
+
"log",
+
"lru",
+
"memchr",
+
"miette",
+
"nix",
+
"nu-derive-value",
+
"nu-experimental",
+
"nu-glob",
+
"nu-path",
+
"nu-system",
+
"nu-utils",
+
"num-format",
+
"serde",
+
"serde_json",
+
"strum",
+
"strum_macros",
+
"thiserror 2.0.17",
+
"typetag",
+
"web-time",
+
"windows 0.62.2",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "nu-system"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "46be734cc9b19e09a9665769e14360e13e6978490056ba5c8bfad7dd0537ea83"
+
dependencies = [
+
"chrono",
+
"itertools 0.14.0",
+
"libc",
+
"libproc",
+
"log",
+
"mach2",
+
"nix",
+
"ntapi",
+
"procfs 0.17.0",
+
"sysinfo",
+
"web-time",
+
"windows 0.62.2",
+
]
+
+
[[package]]
+
name = "nu-table"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "aa96502adbb69c838d8469715327ba2dacf2c4f5254a4cdee7536e2c6849de1d"
+
dependencies = [
+
"fancy-regex",
+
"nu-ansi-term",
+
"nu-color-config",
+
"nu-engine",
+
"nu-protocol",
+
"nu-utils",
+
"tabled",
+
]
+
+
[[package]]
+
name = "nu-term-grid"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2b6545b361413e88bea37c4b9c7aa97a7fd7a11d84a5d330a72242367fd1d2df"
+
dependencies = [
+
"nu-utils",
+
"unicode-width 0.2.2",
+
]
+
+
[[package]]
+
name = "nu-utils"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3f8eb43c29cc5bce85f87defdadc2cca964fa434d808af37036a7cb78f3c68e9"
+
dependencies = [
+
"byteyarn",
+
"crossterm_winapi",
+
"fancy-regex",
+
"lean_string",
+
"log",
+
"lscolors",
+
"memchr",
+
"nix",
+
"num-format",
+
"serde",
+
"serde_json",
+
"strip-ansi-escapes",
+
"sys-locale",
+
"unicase",
+
]
+
+
[[package]]
+
name = "num-bigint-dig"
+
version = "0.8.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7"
+
dependencies = [
+
"lazy_static",
+
"libm",
+
"num-integer",
+
"num-iter",
+
"num-traits",
+
"rand 0.8.5",
+
"smallvec",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "num-conv"
+
version = "0.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
+
[[package]]
+
name = "num-format"
+
version = "0.4.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3"
+
dependencies = [
+
"arrayvec",
+
"itoa",
+
]
+
+
[[package]]
+
name = "num-integer"
+
version = "0.1.46"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
+
dependencies = [
+
"num-traits",
+
]
+
+
[[package]]
+
name = "num-iter"
+
version = "0.1.45"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
+
dependencies = [
+
"autocfg",
+
"num-integer",
+
"num-traits",
+
]
+
+
[[package]]
+
name = "num-traits"
+
version = "0.2.19"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+
dependencies = [
+
"autocfg",
+
"libm",
+
]
+
+
[[package]]
+
name = "num_threads"
+
version = "0.1.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
+
dependencies = [
+
"libc",
+
]
+
+
[[package]]
+
name = "number_prefix"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+
[[package]]
+
name = "nuon"
+
version = "0.109.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f8c4f2e4460a6cf00e50cddf0840f954874d645be3af5196c5858c70c069d8c0"
+
dependencies = [
+
"nu-engine",
+
"nu-parser",
+
"nu-protocol",
+
"nu-utils",
+
]
+
+
[[package]]
+
name = "objc2-core-foundation"
+
version = "0.3.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
+
dependencies = [
+
"bitflags",
+
]
+
+
[[package]]
+
name = "objc2-io-kit"
+
version = "0.3.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15"
+
dependencies = [
+
"libc",
+
"objc2-core-foundation",
+
]
+
+
[[package]]
+
name = "object"
+
version = "0.37.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe"
+
dependencies = [
+
"memchr",
+
]
+
+
[[package]]
+
name = "oem_cp"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a4b91a3be3b523e58bd7a9d839b0bf65720331db50ddfba5ace0680f8c6f58a1"
+
dependencies = [
+
"phf 0.11.3",
+
]
+
+
[[package]]
+
name = "omnipath"
+
version = "0.1.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "80adb31078122c880307e9cdfd4e3361e6545c319f9b9dcafcb03acd3b51a575"
+
+
[[package]]
+
name = "once_cell"
+
version = "1.21.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+
+
[[package]]
+
name = "once_cell_polyfill"
+
version = "1.70.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
+
+
[[package]]
+
name = "option-ext"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+
[[package]]
+
name = "os_display"
+
version = "0.1.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ad5fd71b79026fb918650dde6d125000a233764f1c2f1659a1c71118e33ea08f"
+
dependencies = [
+
"unicode-width 0.2.2",
+
]
+
+
[[package]]
+
name = "ouroboros"
+
version = "0.18.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59"
+
dependencies = [
+
"aliasable",
+
"ouroboros_macro",
+
"static_assertions",
+
]
+
+
[[package]]
+
name = "ouroboros_macro"
+
version = "0.18.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0"
+
dependencies = [
+
"heck 0.4.1",
+
"proc-macro2",
+
"proc-macro2-diagnostics",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "owo-colors"
+
version = "4.2.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52"
+
+
[[package]]
+
name = "p256"
+
version = "0.13.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
+
dependencies = [
+
"ecdsa",
+
"elliptic-curve",
+
"primeorder",
+
"sha2",
+
]
+
+
[[package]]
+
name = "p384"
+
version = "0.13.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6"
+
dependencies = [
+
"elliptic-curve",
+
"primeorder",
+
]
+
+
[[package]]
+
name = "papergrid"
+
version = "0.17.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6978128c8b51d8f4080631ceb2302ab51e32cc6e8615f735ee2f83fd269ae3f1"
+
dependencies = [
+
"ansi-str",
+
"ansitok",
+
"bytecount",
+
"fnv",
+
"unicode-width 0.2.2",
+
]
+
+
[[package]]
+
name = "parking"
+
version = "2.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
+
+
[[package]]
+
name = "parking_lot"
+
version = "0.12.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
+
dependencies = [
+
"lock_api",
+
"parking_lot_core",
+
]
+
+
[[package]]
+
name = "parking_lot_core"
+
version = "0.9.12"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
+
dependencies = [
+
"cfg-if",
+
"libc",
+
"redox_syscall",
+
"smallvec",
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "paste"
+
version = "1.0.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+
+
[[package]]
+
name = "pathdiff"
+
version = "0.2.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
+
+
[[package]]
+
name = "pem-rfc7468"
+
version = "0.7.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+
dependencies = [
+
"base64ct",
+
]
+
+
[[package]]
+
name = "percent-encoding"
+
version = "2.3.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
+
+
[[package]]
+
name = "pest"
+
version = "2.8.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22"
+
dependencies = [
+
"memchr",
+
"ucd-trie",
+
]
+
+
[[package]]
+
name = "pest_consume"
+
version = "1.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "79447402d15d18e7142e14c72f2e63fa3d155be1bc5b70b3ccbb610ac55f536b"
+
dependencies = [
+
"pest",
+
"pest_consume_macros",
+
"pest_derive",
+
]
+
+
[[package]]
+
name = "pest_consume_macros"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9d8630a7a899cb344ec1c16ba0a6b24240029af34bdc0a21f84e411d7f793f29"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 1.0.109",
+
]
+
+
[[package]]
+
name = "pest_derive"
+
version = "2.8.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "51f72981ade67b1ca6adc26ec221be9f463f2b5839c7508998daa17c23d94d7f"
+
dependencies = [
+
"pest",
+
"pest_generator",
+
]
+
+
[[package]]
+
name = "pest_generator"
+
version = "2.8.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dee9efd8cdb50d719a80088b76f81aec7c41ed6d522ee750178f83883d271625"
+
dependencies = [
+
"pest",
+
"pest_meta",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "pest_meta"
+
version = "2.8.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bf1d70880e76bdc13ba52eafa6239ce793d85c8e43896507e43dd8984ff05b82"
+
dependencies = [
+
"pest",
+
"sha2",
+
]
+
+
[[package]]
+
name = "phf"
+
version = "0.11.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
+
dependencies = [
+
"phf_shared 0.11.3",
+
]
+
+
[[package]]
+
name = "phf"
+
version = "0.12.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7"
+
dependencies = [
+
"phf_shared 0.12.1",
+
]
+
+
[[package]]
+
name = "phf"
+
version = "0.13.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
+
dependencies = [
+
"phf_shared 0.13.1",
+
"serde",
+
]
+
+
[[package]]
+
name = "phf_codegen"
+
version = "0.11.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
+
dependencies = [
+
"phf_generator",
+
"phf_shared 0.11.3",
+
]
+
+
[[package]]
+
name = "phf_generator"
+
version = "0.11.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
+
dependencies = [
+
"phf_shared 0.11.3",
+
"rand 0.8.5",
+
]
+
+
[[package]]
+
name = "phf_shared"
+
version = "0.11.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
+
dependencies = [
+
"siphasher",
+
]
+
+
[[package]]
+
name = "phf_shared"
+
version = "0.12.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981"
+
dependencies = [
+
"siphasher",
+
]
+
+
[[package]]
+
name = "phf_shared"
+
version = "0.13.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
+
dependencies = [
+
"siphasher",
+
]
+
+
[[package]]
+
name = "pin-project"
+
version = "1.1.10"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
+
dependencies = [
+
"pin-project-internal",
+
]
+
+
[[package]]
+
name = "pin-project-internal"
+
version = "1.1.10"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "pin-project-lite"
+
version = "0.2.16"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
+
+
[[package]]
+
name = "pin-utils"
+
version = "0.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+
[[package]]
+
name = "pkcs1"
+
version = "0.7.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
+
dependencies = [
+
"der",
+
"pkcs8",
+
"spki",
+
]
+
+
[[package]]
+
name = "pkcs8"
+
version = "0.10.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+
dependencies = [
+
"der",
+
"spki",
+
]
+
+
[[package]]
+
name = "pori"
+
version = "0.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a4a63d338dec139f56dacc692ca63ad35a6be6a797442479b55acd611d79e906"
+
dependencies = [
+
"nom",
+
]
+
+
[[package]]
+
name = "portable-atomic"
+
version = "1.11.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
+
+
[[package]]
+
name = "postcard"
+
version = "1.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24"
+
dependencies = [
+
"cobs",
+
"embedded-io 0.4.0",
+
"embedded-io 0.6.1",
+
"heapless",
+
"serde",
+
]
+
+
[[package]]
+
name = "potential_utf"
+
version = "0.1.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
+
dependencies = [
+
"zerovec",
+
]
+
+
[[package]]
+
name = "powerfmt"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+
[[package]]
+
name = "ppv-lite86"
+
version = "0.2.21"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+
dependencies = [
+
"zerocopy 0.8.31",
+
]
+
+
[[package]]
+
name = "precomputed-hash"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+
[[package]]
+
name = "prettyplease"
+
version = "0.2.37"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
+
dependencies = [
+
"proc-macro2",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "primeorder"
+
version = "0.13.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
+
dependencies = [
+
"elliptic-curve",
+
]
+
+
[[package]]
+
name = "print-positions"
+
version = "0.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1df593470e3ef502e48cb0cfc9a3a61e5f61e967b78e1ed35a67ac615cfbd208"
+
dependencies = [
+
"unicode-segmentation",
+
]
+
+
[[package]]
+
name = "proc-macro-error"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+
dependencies = [
+
"proc-macro-error-attr",
+
"proc-macro2",
+
"quote",
+
"syn 1.0.109",
+
"version_check",
+
]
+
+
[[package]]
+
name = "proc-macro-error-attr"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"version_check",
+
]
+
+
[[package]]
+
name = "proc-macro-error-attr2"
+
version = "2.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
]
+
+
[[package]]
+
name = "proc-macro-error2"
+
version = "2.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802"
+
dependencies = [
+
"proc-macro-error-attr2",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "proc-macro2"
+
version = "1.0.103"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
+
dependencies = [
+
"unicode-ident",
+
]
+
+
[[package]]
+
name = "proc-macro2-diagnostics"
+
version = "0.10.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
"version_check",
+
"yansi",
+
]
+
+
[[package]]
+
name = "procfs"
+
version = "0.17.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f"
+
dependencies = [
+
"bitflags",
+
"chrono",
+
"flate2",
+
"hex",
+
"procfs-core 0.17.0",
+
"rustix 0.38.44",
+
]
+
+
[[package]]
+
name = "procfs"
+
version = "0.18.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7"
+
dependencies = [
+
"bitflags",
+
"chrono",
+
"flate2",
+
"procfs-core 0.18.0",
+
"rustix 1.1.2",
+
]
+
+
[[package]]
+
name = "procfs-core"
+
version = "0.17.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec"
+
dependencies = [
+
"bitflags",
+
"chrono",
+
"hex",
+
]
+
+
[[package]]
+
name = "procfs-core"
+
version = "0.18.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e6401bf7b6af22f78b563665d15a22e9aef27775b79b149a66ca022468a4e405"
+
dependencies = [
+
"bitflags",
+
"chrono",
+
"hex",
+
]
+
+
[[package]]
+
name = "pure-rust-locales"
+
version = "0.8.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "869675ad2d7541aea90c6d88c81f46a7f4ea9af8cd0395d38f11a95126998a0d"
+
+
[[package]]
+
name = "pwd"
+
version = "1.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "72c71c0c79b9701efe4e1e4b563b2016dd4ee789eb99badcb09d61ac4b92e4a2"
+
dependencies = [
+
"libc",
+
"thiserror 1.0.69",
+
]
+
+
[[package]]
+
name = "quick-xml"
+
version = "0.37.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb"
+
dependencies = [
+
"encoding_rs",
+
"memchr",
+
]
+
+
[[package]]
+
name = "quick-xml"
+
version = "0.38.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c"
+
dependencies = [
+
"memchr",
+
]
+
+
[[package]]
+
name = "quinn"
+
version = "0.11.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
+
dependencies = [
+
"bytes",
+
"cfg_aliases",
+
"pin-project-lite",
+
"quinn-proto",
+
"quinn-udp",
+
"rustc-hash",
+
"rustls",
+
"socket2",
+
"thiserror 2.0.17",
+
"tokio",
+
"tracing",
+
"web-time",
+
]
+
+
[[package]]
+
name = "quinn-proto"
+
version = "0.11.13"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
+
dependencies = [
+
"bytes",
+
"getrandom 0.3.4",
+
"lru-slab",
+
"rand 0.9.2",
+
"ring",
+
"rustc-hash",
+
"rustls",
+
"rustls-pki-types",
+
"slab",
+
"thiserror 2.0.17",
+
"tinyvec",
+
"tracing",
+
"web-time",
+
]
+
+
[[package]]
+
name = "quinn-udp"
+
version = "0.5.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd"
+
dependencies = [
+
"cfg_aliases",
+
"libc",
+
"once_cell",
+
"socket2",
+
"tracing",
+
"windows-sys 0.60.2",
+
]
+
+
[[package]]
+
name = "quote"
+
version = "1.0.42"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
+
dependencies = [
+
"proc-macro2",
+
]
+
+
[[package]]
+
name = "r-efi"
+
version = "5.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
+
+
[[package]]
+
name = "rand"
+
version = "0.8.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+
dependencies = [
+
"libc",
+
"rand_chacha 0.3.1",
+
"rand_core 0.6.4",
+
]
+
+
[[package]]
+
name = "rand"
+
version = "0.9.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
+
dependencies = [
+
"rand_chacha 0.9.0",
+
"rand_core 0.9.3",
+
]
+
+
[[package]]
+
name = "rand_chacha"
+
version = "0.3.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+
dependencies = [
+
"ppv-lite86",
+
"rand_core 0.6.4",
+
]
+
+
[[package]]
+
name = "rand_chacha"
+
version = "0.9.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+
dependencies = [
+
"ppv-lite86",
+
"rand_core 0.9.3",
+
]
+
+
[[package]]
+
name = "rand_core"
+
version = "0.6.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+
dependencies = [
+
"getrandom 0.2.16",
+
]
+
+
[[package]]
+
name = "rand_core"
+
version = "0.9.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
+
dependencies = [
+
"getrandom 0.3.4",
+
]
+
+
[[package]]
+
name = "range-traits"
+
version = "0.3.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d20581732dd76fa913c7dff1a2412b714afe3573e94d41c34719de73337cc8ab"
+
+
[[package]]
+
name = "rapidhash"
+
version = "4.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d8e65c75143ce5d47c55b510297eeb1182f3c739b6043c537670e9fc18612dae"
+
dependencies = [
+
"rustversion",
+
]
+
+
[[package]]
+
name = "rayon"
+
version = "1.11.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
+
dependencies = [
+
"either",
+
"rayon-core",
+
]
+
+
[[package]]
+
name = "rayon-core"
+
version = "1.13.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
+
dependencies = [
+
"crossbeam-deque",
+
"crossbeam-utils",
+
]
+
+
[[package]]
+
name = "redox_syscall"
+
version = "0.5.18"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
+
dependencies = [
+
"bitflags",
+
]
+
+
[[package]]
+
name = "redox_users"
+
version = "0.5.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
+
dependencies = [
+
"getrandom 0.2.16",
+
"libredox",
+
"thiserror 2.0.17",
+
]
+
+
[[package]]
+
name = "ref-cast"
+
version = "1.0.25"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
+
dependencies = [
+
"ref-cast-impl",
+
]
+
+
[[package]]
+
name = "ref-cast-impl"
+
version = "1.0.25"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "regex"
+
version = "1.12.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
+
dependencies = [
+
"aho-corasick",
+
"memchr",
+
"regex-automata",
+
"regex-syntax",
+
]
+
+
[[package]]
+
name = "regex-automata"
+
version = "0.4.13"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
+
dependencies = [
+
"aho-corasick",
+
"memchr",
+
"regex-syntax",
+
]
+
+
[[package]]
+
name = "regex-lite"
+
version = "0.1.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8d942b98df5e658f56f20d592c7f868833fe38115e65c33003d8cd224b0155da"
+
+
[[package]]
+
name = "regex-syntax"
+
version = "0.8.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
+
+
[[package]]
+
name = "reqwest"
+
version = "0.12.25"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b6eff9328d40131d43bd911d42d79eb6a47312002a4daefc9e37f17e74a7701a"
+
dependencies = [
+
"base64",
+
"bytes",
+
"encoding_rs",
+
"futures-core",
+
"h2",
+
"http",
+
"http-body",
+
"http-body-util",
+
"hyper",
+
"hyper-rustls",
+
"hyper-util",
+
"js-sys",
+
"log",
+
"mime",
+
"percent-encoding",
+
"pin-project-lite",
+
"quinn",
+
"rustls",
+
"rustls-pki-types",
+
"serde",
+
"serde_json",
+
"serde_urlencoded",
+
"sync_wrapper",
+
"tokio",
+
"tokio-rustls",
+
"tower",
+
"tower-http",
+
"tower-service",
+
"url",
+
"wasm-bindgen",
+
"wasm-bindgen-futures",
+
"web-sys",
+
"webpki-roots",
+
]
+
+
[[package]]
+
name = "rfc6979"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
+
dependencies = [
+
"hmac",
+
"subtle",
+
]
+
+
[[package]]
+
name = "ring"
+
version = "0.17.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
+
dependencies = [
+
"cc",
+
"cfg-if",
+
"getrandom 0.2.16",
+
"libc",
+
"untrusted",
+
"windows-sys 0.52.0",
+
]
+
+
[[package]]
+
name = "rmp"
+
version = "0.8.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4"
+
dependencies = [
+
"byteorder",
+
"num-traits",
+
"paste",
+
]
+
+
[[package]]
+
name = "roxmltree"
+
version = "0.20.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
+
+
[[package]]
+
name = "rsa"
+
version = "0.9.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "40a0376c50d0358279d9d643e4bf7b7be212f1f4ff1da9070a7b54d22ef75c88"
+
dependencies = [
+
"const-oid",
+
"digest",
+
"num-bigint-dig",
+
"num-integer",
+
"num-traits",
+
"pkcs1",
+
"pkcs8",
+
"rand_core 0.6.4",
+
"signature",
+
"spki",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "rust-embed"
+
version = "8.9.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "947d7f3fad52b283d261c4c99a084937e2fe492248cb9a68a8435a861b8798ca"
+
dependencies = [
+
"rust-embed-impl",
+
"rust-embed-utils",
+
"walkdir",
+
]
+
+
[[package]]
+
name = "rust-embed-impl"
+
version = "8.9.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5fa2c8c9e8711e10f9c4fd2d64317ef13feaab820a4c51541f1a8c8e2e851ab2"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"rust-embed-utils",
+
"syn 2.0.111",
+
"walkdir",
+
]
+
+
[[package]]
+
name = "rust-embed-utils"
+
version = "8.9.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "60b161f275cb337fe0a44d924a5f4df0ed69c2c39519858f931ce61c779d3475"
+
dependencies = [
+
"sha2",
+
"walkdir",
+
]
+
+
[[package]]
+
name = "rust_decimal"
+
version = "1.39.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "35affe401787a9bd846712274d97654355d21b2a2c092a3139aabe31e9022282"
+
dependencies = [
+
"arrayvec",
+
"num-traits",
+
]
+
+
[[package]]
+
name = "rustc-demangle"
+
version = "0.1.26"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
+
+
[[package]]
+
name = "rustc-hash"
+
version = "2.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
+
+
[[package]]
+
name = "rustc_version"
+
version = "0.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
+
dependencies = [
+
"semver",
+
]
+
+
[[package]]
+
name = "rustix"
+
version = "0.38.44"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
+
dependencies = [
+
"bitflags",
+
"errno",
+
"libc",
+
"linux-raw-sys 0.4.15",
+
"windows-sys 0.59.0",
+
]
+
+
[[package]]
+
name = "rustix"
+
version = "1.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
+
dependencies = [
+
"bitflags",
+
"errno",
+
"libc",
+
"linux-raw-sys 0.11.0",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "rustls"
+
version = "0.23.28"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643"
+
dependencies = [
+
"once_cell",
+
"ring",
+
"rustls-pki-types",
+
"rustls-webpki",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "rustls-pki-types"
+
version = "1.13.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c"
+
dependencies = [
+
"web-time",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "rustls-webpki"
+
version = "0.103.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52"
+
dependencies = [
+
"ring",
+
"rustls-pki-types",
+
"untrusted",
+
]
+
+
[[package]]
+
name = "rustversion"
+
version = "1.0.22"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
+
+
[[package]]
+
name = "ryu"
+
version = "1.0.20"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
+
+
[[package]]
+
name = "saa"
+
version = "5.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3192d99ee2f69effeacef86c9fa80e75b6604e2a5d3ade6856d206b519521e53"
+
+
[[package]]
+
name = "same-file"
+
version = "1.0.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+
dependencies = [
+
"winapi-util",
+
]
+
+
[[package]]
+
name = "scc"
+
version = "3.4.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0b6f8686af8563182fc6b63ab7bd7b5cad8f40fbe660675627caedc6c073eca8"
+
dependencies = [
+
"saa",
+
"sdd",
+
]
+
+
[[package]]
+
name = "schemars"
+
version = "0.9.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f"
+
dependencies = [
+
"dyn-clone",
+
"ref-cast",
+
"serde",
+
"serde_json",
+
]
+
+
[[package]]
+
name = "schemars"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289"
+
dependencies = [
+
"dyn-clone",
+
"ref-cast",
+
"serde",
+
"serde_json",
+
]
+
+
[[package]]
+
name = "scoped-tls"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+
[[package]]
+
name = "scopeguard"
+
version = "1.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+
[[package]]
+
name = "sdd"
+
version = "4.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7168ecf885fdd3920ade15d50189593b076e1d060b60406a745766380195d65a"
+
+
[[package]]
+
name = "sec1"
+
version = "0.7.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
+
dependencies = [
+
"base16ct",
+
"der",
+
"generic-array",
+
"pkcs8",
+
"subtle",
+
"zeroize",
+
]
+
+
[[package]]
+
name = "self_cell"
+
version = "1.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33"
+
+
[[package]]
+
name = "semver"
+
version = "1.0.27"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
+
+
[[package]]
+
name = "send_wrapper"
+
version = "0.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
+
+
[[package]]
+
name = "serde"
+
version = "1.0.228"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
+
dependencies = [
+
"serde_core",
+
"serde_derive",
+
]
+
+
[[package]]
+
name = "serde_bytes"
+
version = "0.11.19"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8"
+
dependencies = [
+
"serde",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "serde_core"
+
version = "1.0.228"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
+
dependencies = [
+
"serde_derive",
+
]
+
+
[[package]]
+
name = "serde_derive"
+
version = "1.0.228"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "serde_html_form"
+
version = "0.2.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f"
+
dependencies = [
+
"form_urlencoded",
+
"indexmap 2.12.1",
+
"itoa",
+
"ryu",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "serde_ipld_dagcbor"
+
version = "0.6.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "46182f4f08349a02b45c998ba3215d3f9de826246ba02bb9dddfe9a2a2100778"
+
dependencies = [
+
"cbor4ii",
+
"ipld-core",
+
"scopeguard",
+
"serde",
+
]
+
+
[[package]]
+
name = "serde_json"
+
version = "1.0.145"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
+
dependencies = [
+
"indexmap 2.12.1",
+
"itoa",
+
"memchr",
+
"ryu",
+
"serde",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "serde_repr"
+
version = "0.1.20"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "serde_spanned"
+
version = "0.6.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "serde_urlencoded"
+
version = "0.7.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+
dependencies = [
+
"form_urlencoded",
+
"itoa",
+
"ryu",
+
"serde",
+
]
+
+
[[package]]
+
name = "serde_with"
+
version = "3.16.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7"
+
dependencies = [
+
"base64",
+
"chrono",
+
"hex",
+
"indexmap 1.9.3",
+
"indexmap 2.12.1",
+
"schemars 0.9.0",
+
"schemars 1.1.0",
+
"serde_core",
+
"serde_json",
+
"serde_with_macros",
+
"time",
+
]
+
+
[[package]]
+
name = "serde_with_macros"
+
version = "3.16.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c"
+
dependencies = [
+
"darling",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "serde_yaml"
+
version = "0.9.34+deprecated"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
+
dependencies = [
+
"indexmap 2.12.1",
+
"itoa",
+
"ryu",
+
"serde",
+
"unsafe-libyaml",
+
]
+
+
[[package]]
+
name = "sha2"
+
version = "0.10.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
+
dependencies = [
+
"cfg-if",
+
"cpufeatures",
+
"digest",
+
]
+
+
[[package]]
+
name = "shadow-rs"
+
version = "1.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "72d18183cef626bce22836103349c7050d73db799be0171386b80947d157ae32"
+
dependencies = [
+
"const_format",
+
"is_debug",
+
"time",
+
"tzdb",
+
]
+
+
[[package]]
+
name = "sharded-slab"
+
version = "0.1.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+
dependencies = [
+
"lazy_static",
+
]
+
+
[[package]]
+
name = "shell-words"
+
version = "1.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77"
+
+
[[package]]
+
name = "shlex"
+
version = "1.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+
[[package]]
+
name = "signature"
+
version = "2.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
+
dependencies = [
+
"digest",
+
"rand_core 0.6.4",
+
]
+
+
[[package]]
+
name = "simd-adler32"
+
version = "0.3.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2"
+
+
[[package]]
+
name = "siphasher"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
+
+
[[package]]
+
name = "slab"
+
version = "0.4.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
+
+
[[package]]
+
name = "smallvec"
+
version = "1.15.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+
+
[[package]]
+
name = "smol_str"
+
version = "0.3.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3498b0a27f93ef1402f20eefacfaa1691272ac4eca1cdc8c596cb0a245d6cbf5"
+
dependencies = [
+
"borsh",
+
"serde_core",
+
]
+
+
[[package]]
+
name = "socket2"
+
version = "0.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
+
dependencies = [
+
"libc",
+
"windows-sys 0.60.2",
+
]
+
+
[[package]]
+
name = "spin"
+
version = "0.9.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
dependencies = [
+
"lock_api",
+
]
+
+
[[package]]
+
name = "spin"
+
version = "0.10.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591"
+
+
[[package]]
+
name = "spki"
+
version = "0.7.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
+
dependencies = [
+
"base64ct",
+
"der",
+
]
+
+
[[package]]
+
name = "stable_deref_trait"
+
version = "1.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
+
+
[[package]]
+
name = "static-regular-grammar"
+
version = "2.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4f4a6c40247579acfbb138c3cd7de3dab113ab4ac6227f1b7de7d626ee667957"
+
dependencies = [
+
"abnf",
+
"btree-range-map",
+
"ciborium",
+
"hex_fmt",
+
"indoc",
+
"proc-macro-error",
+
"proc-macro2",
+
"quote",
+
"serde",
+
"sha2",
+
"syn 2.0.111",
+
"thiserror 1.0.69",
+
]
+
+
[[package]]
+
name = "static_assertions"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+
[[package]]
+
name = "string_cache"
+
version = "0.8.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f"
+
dependencies = [
+
"new_debug_unreachable",
+
"parking_lot",
+
"phf_shared 0.11.3",
+
"precomputed-hash",
+
"serde",
+
]
+
+
[[package]]
+
name = "string_cache_codegen"
+
version = "0.5.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0"
+
dependencies = [
+
"phf_generator",
+
"phf_shared 0.11.3",
+
"proc-macro2",
+
"quote",
+
]
+
+
[[package]]
+
name = "strip-ansi-escapes"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025"
+
dependencies = [
+
"vte",
+
]
+
+
[[package]]
+
name = "strsim"
+
version = "0.11.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+
[[package]]
+
name = "strum"
+
version = "0.26.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06"
+
+
[[package]]
+
name = "strum_macros"
+
version = "0.27.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
+
dependencies = [
+
"heck 0.5.0",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "subtle"
+
version = "2.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+
+
[[package]]
+
name = "supports-color"
+
version = "3.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6"
+
dependencies = [
+
"is_ci",
+
]
+
+
[[package]]
+
name = "supports-hyperlinks"
+
version = "3.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "804f44ed3c63152de6a9f90acbea1a110441de43006ea51bcce8f436196a288b"
+
+
[[package]]
+
name = "supports-unicode"
+
version = "3.0.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2"
+
+
[[package]]
+
name = "syn"
+
version = "1.0.109"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"unicode-ident",
+
]
+
+
[[package]]
+
name = "syn"
+
version = "2.0.111"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"unicode-ident",
+
]
+
+
[[package]]
+
name = "sync_wrapper"
+
version = "1.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
+
dependencies = [
+
"futures-core",
+
]
+
+
[[package]]
+
name = "synstructure"
+
version = "0.13.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "sys-locale"
+
version = "0.3.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4"
+
dependencies = [
+
"libc",
+
]
+
+
[[package]]
+
name = "sysinfo"
+
version = "0.37.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f"
+
dependencies = [
+
"libc",
+
"memchr",
+
"ntapi",
+
"objc2-core-foundation",
+
"objc2-io-kit",
+
"windows 0.61.3",
+
]
+
+
[[package]]
+
name = "system-configuration"
+
version = "0.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
+
dependencies = [
+
"bitflags",
+
"core-foundation",
+
"system-configuration-sys",
+
]
+
+
[[package]]
+
name = "system-configuration-sys"
+
version = "0.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
+
dependencies = [
+
"core-foundation-sys",
+
"libc",
+
]
+
+
[[package]]
+
name = "tabled"
+
version = "0.20.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e39a2ee1fbcd360805a771e1b300f78cc88fec7b8d3e2f71cd37bbf23e725c7d"
+
dependencies = [
+
"ansi-str",
+
"ansitok",
+
"papergrid",
+
"testing_table",
+
]
+
+
[[package]]
+
name = "tagptr"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417"
+
+
[[package]]
+
name = "tempfile"
+
version = "3.23.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
+
dependencies = [
+
"fastrand",
+
"getrandom 0.3.4",
+
"once_cell",
+
"rustix 1.1.2",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "tendril"
+
version = "0.4.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+
dependencies = [
+
"futf",
+
"mac",
+
"utf-8",
+
]
+
+
[[package]]
+
name = "terminal_size"
+
version = "0.4.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0"
+
dependencies = [
+
"rustix 1.1.2",
+
"windows-sys 0.60.2",
+
]
+
+
[[package]]
+
name = "testing_table"
+
version = "0.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0f8daae29995a24f65619e19d8d31dea5b389f3d853d8bf297bbf607cd0014cc"
+
dependencies = [
+
"ansitok",
+
"unicode-width 0.2.2",
+
]
+
+
[[package]]
+
name = "textwrap"
+
version = "0.16.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057"
+
dependencies = [
+
"unicode-linebreak",
+
"unicode-width 0.2.2",
+
]
+
+
[[package]]
+
name = "thiserror"
+
version = "1.0.69"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+
dependencies = [
+
"thiserror-impl 1.0.69",
+
]
+
+
[[package]]
+
name = "thiserror"
+
version = "2.0.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
+
dependencies = [
+
"thiserror-impl 2.0.17",
+
]
+
+
[[package]]
+
name = "thiserror-impl"
+
version = "1.0.69"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "thiserror-impl"
+
version = "2.0.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "thread_local"
+
version = "1.1.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185"
+
dependencies = [
+
"cfg-if",
+
]
+
+
[[package]]
+
name = "time"
+
version = "0.3.44"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
+
dependencies = [
+
"deranged",
+
"itoa",
+
"libc",
+
"num-conv",
+
"num_threads",
+
"powerfmt",
+
"serde",
+
"time-core",
+
"time-macros",
+
]
+
+
[[package]]
+
name = "time-core"
+
version = "0.1.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
+
+
[[package]]
+
name = "time-macros"
+
version = "0.2.24"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
+
dependencies = [
+
"num-conv",
+
"time-core",
+
]
+
+
[[package]]
+
name = "tinystr"
+
version = "0.8.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
+
dependencies = [
+
"displaydoc",
+
"serde_core",
+
"zerovec",
+
]
+
+
[[package]]
+
name = "tinyvec"
+
version = "1.10.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa"
+
dependencies = [
+
"tinyvec_macros",
+
]
+
+
[[package]]
+
name = "tinyvec_macros"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+
[[package]]
+
name = "titlecase"
+
version = "3.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "eb567088a91d59b492520c8149e2be5ce10d5deb2d9a383f3378df3259679d40"
+
dependencies = [
+
"regex",
+
]
+
+
[[package]]
+
name = "tokio"
+
version = "1.48.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
+
dependencies = [
+
"bytes",
+
"libc",
+
"mio",
+
"pin-project-lite",
+
"socket2",
+
"tokio-macros",
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "tokio-macros"
+
version = "2.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "tokio-rustls"
+
version = "0.26.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
+
dependencies = [
+
"rustls",
+
"tokio",
+
]
+
+
[[package]]
+
name = "tokio-util"
+
version = "0.7.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594"
+
dependencies = [
+
"bytes",
+
"futures-core",
+
"futures-sink",
+
"futures-util",
+
"pin-project-lite",
+
"tokio",
+
]
+
+
[[package]]
+
name = "toml"
+
version = "0.8.23"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
+
dependencies = [
+
"indexmap 2.12.1",
+
"serde",
+
"serde_spanned",
+
"toml_datetime",
+
"toml_edit",
+
]
+
+
[[package]]
+
name = "toml_datetime"
+
version = "0.6.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "toml_edit"
+
version = "0.22.27"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
+
dependencies = [
+
"indexmap 2.12.1",
+
"serde",
+
"serde_spanned",
+
"toml_datetime",
+
"toml_write",
+
"winnow",
+
]
+
+
[[package]]
+
name = "toml_write"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
+
+
[[package]]
+
name = "tower"
+
version = "0.5.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
+
dependencies = [
+
"futures-core",
+
"futures-util",
+
"pin-project-lite",
+
"sync_wrapper",
+
"tokio",
+
"tower-layer",
+
"tower-service",
+
]
+
+
[[package]]
+
name = "tower-http"
+
version = "0.6.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
+
dependencies = [
+
"async-compression",
+
"bitflags",
+
"bytes",
+
"futures-core",
+
"futures-util",
+
"http",
+
"http-body",
+
"http-body-util",
+
"iri-string",
+
"pin-project-lite",
+
"tokio",
+
"tokio-util",
+
"tower",
+
"tower-layer",
+
"tower-service",
+
]
+
+
[[package]]
+
name = "tower-layer"
+
version = "0.3.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
+
[[package]]
+
name = "tower-service"
+
version = "0.3.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+
+
[[package]]
+
name = "tracing"
+
version = "0.1.43"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647"
+
dependencies = [
+
"pin-project-lite",
+
"tracing-attributes",
+
"tracing-core",
+
]
+
+
[[package]]
+
name = "tracing-attributes"
+
version = "0.1.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "tracing-core"
+
version = "0.1.35"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c"
+
dependencies = [
+
"once_cell",
+
"valuable",
+
]
+
+
[[package]]
+
name = "tracing-log"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+
dependencies = [
+
"log",
+
"once_cell",
+
"tracing-core",
+
]
+
+
[[package]]
+
name = "tracing-subscriber"
+
version = "0.3.22"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e"
+
dependencies = [
+
"matchers",
+
"nu-ansi-term",
+
"once_cell",
+
"regex-automata",
+
"sharded-slab",
+
"smallvec",
+
"thread_local",
+
"tracing",
+
"tracing-core",
+
"tracing-log",
+
]
+
+
[[package]]
+
name = "trait-variant"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "triomphe"
+
version = "0.1.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39"
+
+
[[package]]
+
name = "try-lock"
+
version = "0.2.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+
+
[[package]]
+
name = "type-map"
+
version = "0.5.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90"
+
dependencies = [
+
"rustc-hash",
+
]
+
+
[[package]]
+
name = "typeid"
+
version = "1.0.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
+
+
[[package]]
+
name = "typenum"
+
version = "1.19.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
+
+
[[package]]
+
name = "typetag"
+
version = "0.2.21"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "be2212c8a9b9bcfca32024de14998494cf9a5dfa59ea1b829de98bac374b86bf"
+
dependencies = [
+
"erased-serde",
+
"inventory",
+
"once_cell",
+
"serde",
+
"typetag-impl",
+
]
+
+
[[package]]
+
name = "typetag-impl"
+
version = "0.2.21"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "27a7a9b72ba121f6f1f6c3632b85604cac41aedb5ddc70accbebb6cac83de846"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "tz-rs"
+
version = "0.7.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "14eff19b8dc1ace5bf7e4d920b2628ae3837f422ff42210cb1567cbf68b5accf"
+
+
[[package]]
+
name = "tzdb"
+
version = "0.7.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "56d4e985b6dda743ae7fd4140c28105316ffd75bc58258ee6cc12934e3eb7a0c"
+
dependencies = [
+
"iana-time-zone",
+
"tz-rs",
+
"tzdb_data",
+
]
+
+
[[package]]
+
name = "tzdb_data"
+
version = "0.2.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "42302a846dea7ab786f42dc5f519387069045acff793e1178d9368414168fe95"
+
dependencies = [
+
"tz-rs",
+
]
+
+
[[package]]
+
name = "ucd-trie"
+
version = "0.1.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
+
+
[[package]]
+
name = "uds_windows"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9"
+
dependencies = [
+
"memoffset",
+
"tempfile",
+
"winapi",
+
]
+
+
[[package]]
+
name = "umask"
+
version = "2.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ec9a46c2549e35c054e0ffe281a3a6ec0007793db4df106604d37ed3f4d73d1c"
+
dependencies = [
+
"thiserror 1.0.69",
+
]
+
+
[[package]]
+
name = "unic-langid"
+
version = "0.9.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05"
+
dependencies = [
+
"unic-langid-impl",
+
]
+
+
[[package]]
+
name = "unic-langid-impl"
+
version = "0.9.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658"
+
dependencies = [
+
"tinystr",
+
]
+
+
[[package]]
+
name = "unicase"
+
version = "2.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
+
+
[[package]]
+
name = "unicode-ident"
+
version = "1.0.22"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
+
+
[[package]]
+
name = "unicode-linebreak"
+
version = "0.1.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
+
+
[[package]]
+
name = "unicode-segmentation"
+
version = "1.12.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
+
+
[[package]]
+
name = "unicode-width"
+
version = "0.1.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
+
+
[[package]]
+
name = "unicode-width"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
+
+
[[package]]
+
name = "unicode-xid"
+
version = "0.2.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
+
+
[[package]]
+
name = "unit-prefix"
+
version = "0.5.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3"
+
+
[[package]]
+
name = "unsafe-libyaml"
+
version = "0.2.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
+
+
[[package]]
+
name = "unsigned-varint"
+
version = "0.7.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105"
+
+
[[package]]
+
name = "unsigned-varint"
+
version = "0.8.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06"
+
+
[[package]]
+
name = "untrusted"
+
version = "0.9.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+
[[package]]
+
name = "url"
+
version = "2.5.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
+
dependencies = [
+
"form_urlencoded",
+
"idna",
+
"percent-encoding",
+
"serde",
+
]
+
+
[[package]]
+
name = "urlencoding"
+
version = "2.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+
[[package]]
+
name = "utf-8"
+
version = "0.7.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+
[[package]]
+
name = "utf8_iter"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
+
[[package]]
+
name = "utf8parse"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
+
+
[[package]]
+
name = "uucore"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2003164a38a7f39da1de103a70fa66b745f572f0045ec261481539516c0a8a0e"
+
dependencies = [
+
"bstr",
+
"clap",
+
"fluent",
+
"fluent-bundle",
+
"fluent-syntax",
+
"libc",
+
"nix",
+
"number_prefix",
+
"os_display",
+
"phf 0.13.1",
+
"procfs 0.18.0",
+
"thiserror 2.0.17",
+
"unic-langid",
+
"uucore_procs",
+
"wild",
+
]
+
+
[[package]]
+
name = "uucore_procs"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c76f0308f7810d915246a39748e7f5d64e43e6bb9d6c8107224f9d741aefc375"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
]
+
+
[[package]]
+
name = "v_htmlescape"
+
version = "0.15.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4e8257fbc510f0a46eb602c10215901938b5c2a7d5e70fc11483b1d3c9b5b18c"
+
+
[[package]]
+
name = "valuable"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
+
+
[[package]]
+
name = "version_check"
+
version = "0.9.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+
[[package]]
+
name = "vfs"
+
version = "0.12.1"
+
source = "git+https://github.com/landaire/rust-vfs?branch=fix%2Fwasm#c4341e8e7c16a019c1a1415fc8a413bf883a08d5"
+
dependencies = [
+
"filetime",
+
]
+
+
[[package]]
+
name = "vte"
+
version = "0.14.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077"
+
dependencies = [
+
"arrayvec",
+
"memchr",
+
]
+
+
[[package]]
+
name = "walkdir"
+
version = "2.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+
dependencies = [
+
"same-file",
+
"winapi-util",
+
]
+
+
[[package]]
+
name = "want"
+
version = "0.3.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+
dependencies = [
+
"try-lock",
+
]
+
+
[[package]]
+
name = "wasi"
+
version = "0.11.1+wasi-snapshot-preview1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
+
+
[[package]]
+
name = "wasip2"
+
version = "1.0.1+wasi-0.2.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
+
dependencies = [
+
"wit-bindgen",
+
]
+
+
[[package]]
+
name = "wasm-bindgen"
+
version = "0.2.106"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd"
+
dependencies = [
+
"cfg-if",
+
"once_cell",
+
"rustversion",
+
"wasm-bindgen-macro",
+
"wasm-bindgen-shared",
+
]
+
+
[[package]]
+
name = "wasm-bindgen-futures"
+
version = "0.4.56"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c"
+
dependencies = [
+
"cfg-if",
+
"js-sys",
+
"once_cell",
+
"wasm-bindgen",
+
"web-sys",
+
]
+
+
[[package]]
+
name = "wasm-bindgen-macro"
+
version = "0.2.106"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3"
+
dependencies = [
+
"quote",
+
"wasm-bindgen-macro-support",
+
]
+
+
[[package]]
+
name = "wasm-bindgen-macro-support"
+
version = "0.2.106"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40"
+
dependencies = [
+
"bumpalo",
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
"wasm-bindgen-shared",
+
]
+
+
[[package]]
+
name = "wasm-bindgen-shared"
+
version = "0.2.106"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4"
+
dependencies = [
+
"unicode-ident",
+
]
+
+
[[package]]
+
name = "wax"
+
version = "0.6.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8d12a78aa0bab22d2f26ed1a96df7ab58e8a93506a3e20adb47c51a93b4e1357"
+
dependencies = [
+
"const_format",
+
"itertools 0.11.0",
+
"nom",
+
"pori",
+
"regex",
+
"thiserror 1.0.69",
+
"walkdir",
+
]
+
+
[[package]]
+
name = "web-sys"
+
version = "0.3.83"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac"
+
dependencies = [
+
"js-sys",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "web-time"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
+
dependencies = [
+
"js-sys",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "webpage"
+
version = "2.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "70862efc041d46e6bbaa82bb9c34ae0596d090e86cbd14bd9e93b36ee6802eac"
+
dependencies = [
+
"html5ever",
+
"markup5ever_rcdom",
+
"serde_json",
+
"url",
+
]
+
+
[[package]]
+
name = "webpki-roots"
+
version = "1.0.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e"
+
dependencies = [
+
"rustls-pki-types",
+
]
+
+
[[package]]
+
name = "wild"
+
version = "2.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a3131afc8c575281e1e80f36ed6a092aa502c08b18ed7524e86fbbb12bb410e1"
+
dependencies = [
+
"glob",
+
]
+
+
[[package]]
+
name = "winapi"
+
version = "0.3.9"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+
dependencies = [
+
"winapi-i686-pc-windows-gnu",
+
"winapi-x86_64-pc-windows-gnu",
+
]
+
+
[[package]]
+
name = "winapi-i686-pc-windows-gnu"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+
[[package]]
+
name = "winapi-util"
+
version = "0.1.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
+
dependencies = [
+
"windows-sys 0.61.2",
+
]
+
+
[[package]]
+
name = "winapi-x86_64-pc-windows-gnu"
+
version = "0.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+
[[package]]
+
name = "windows"
+
version = "0.61.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
+
dependencies = [
+
"windows-collections 0.2.0",
+
"windows-core 0.61.2",
+
"windows-future 0.2.1",
+
"windows-link 0.1.3",
+
"windows-numerics 0.2.0",
+
]
+
+
[[package]]
+
name = "windows"
+
version = "0.62.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
+
dependencies = [
+
"windows-collections 0.3.2",
+
"windows-core 0.62.2",
+
"windows-future 0.3.2",
+
"windows-numerics 0.3.1",
+
]
+
+
[[package]]
+
name = "windows-collections"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
+
dependencies = [
+
"windows-core 0.61.2",
+
]
+
+
[[package]]
+
name = "windows-collections"
+
version = "0.3.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
+
dependencies = [
+
"windows-core 0.62.2",
+
]
+
+
[[package]]
+
name = "windows-core"
+
version = "0.61.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
+
dependencies = [
+
"windows-implement",
+
"windows-interface",
+
"windows-link 0.1.3",
+
"windows-result 0.3.4",
+
"windows-strings 0.4.2",
+
]
+
+
[[package]]
+
name = "windows-core"
+
version = "0.62.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
+
dependencies = [
+
"windows-implement",
+
"windows-interface",
+
"windows-link 0.2.1",
+
"windows-result 0.4.1",
+
"windows-strings 0.5.1",
+
]
+
+
[[package]]
+
name = "windows-future"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
+
dependencies = [
+
"windows-core 0.61.2",
+
"windows-link 0.1.3",
+
"windows-threading 0.1.0",
+
]
+
+
[[package]]
+
name = "windows-future"
+
version = "0.3.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
+
dependencies = [
+
"windows-core 0.62.2",
+
"windows-link 0.2.1",
+
"windows-threading 0.2.1",
+
]
+
+
[[package]]
+
name = "windows-implement"
+
version = "0.60.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "windows-interface"
+
version = "0.59.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "windows-link"
+
version = "0.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
+
+
[[package]]
+
name = "windows-link"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+
+
[[package]]
+
name = "windows-numerics"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
+
dependencies = [
+
"windows-core 0.61.2",
+
"windows-link 0.1.3",
+
]
+
+
[[package]]
+
name = "windows-numerics"
+
version = "0.3.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
+
dependencies = [
+
"windows-core 0.62.2",
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "windows-registry"
+
version = "0.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
+
dependencies = [
+
"windows-link 0.2.1",
+
"windows-result 0.4.1",
+
"windows-strings 0.5.1",
+
]
+
+
[[package]]
+
name = "windows-result"
+
version = "0.3.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
+
dependencies = [
+
"windows-link 0.1.3",
+
]
+
+
[[package]]
+
name = "windows-result"
+
version = "0.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
+
dependencies = [
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "windows-strings"
+
version = "0.4.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
+
dependencies = [
+
"windows-link 0.1.3",
+
]
+
+
[[package]]
+
name = "windows-strings"
+
version = "0.5.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
+
dependencies = [
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "windows-sys"
+
version = "0.48.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+
dependencies = [
+
"windows-targets 0.48.5",
+
]
+
+
[[package]]
+
name = "windows-sys"
+
version = "0.52.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+
dependencies = [
+
"windows-targets 0.52.6",
+
]
+
+
[[package]]
+
name = "windows-sys"
+
version = "0.59.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+
dependencies = [
+
"windows-targets 0.52.6",
+
]
+
+
[[package]]
+
name = "windows-sys"
+
version = "0.60.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
+
dependencies = [
+
"windows-targets 0.53.5",
+
]
+
+
[[package]]
+
name = "windows-sys"
+
version = "0.61.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+
dependencies = [
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "windows-targets"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+
dependencies = [
+
"windows_aarch64_gnullvm 0.48.5",
+
"windows_aarch64_msvc 0.48.5",
+
"windows_i686_gnu 0.48.5",
+
"windows_i686_msvc 0.48.5",
+
"windows_x86_64_gnu 0.48.5",
+
"windows_x86_64_gnullvm 0.48.5",
+
"windows_x86_64_msvc 0.48.5",
+
]
+
+
[[package]]
+
name = "windows-targets"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+
dependencies = [
+
"windows_aarch64_gnullvm 0.52.6",
+
"windows_aarch64_msvc 0.52.6",
+
"windows_i686_gnu 0.52.6",
+
"windows_i686_gnullvm 0.52.6",
+
"windows_i686_msvc 0.52.6",
+
"windows_x86_64_gnu 0.52.6",
+
"windows_x86_64_gnullvm 0.52.6",
+
"windows_x86_64_msvc 0.52.6",
+
]
+
+
[[package]]
+
name = "windows-targets"
+
version = "0.53.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
+
dependencies = [
+
"windows-link 0.2.1",
+
"windows_aarch64_gnullvm 0.53.1",
+
"windows_aarch64_msvc 0.53.1",
+
"windows_i686_gnu 0.53.1",
+
"windows_i686_gnullvm 0.53.1",
+
"windows_i686_msvc 0.53.1",
+
"windows_x86_64_gnu 0.53.1",
+
"windows_x86_64_gnullvm 0.53.1",
+
"windows_x86_64_msvc 0.53.1",
+
]
+
+
[[package]]
+
name = "windows-threading"
+
version = "0.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
+
dependencies = [
+
"windows-link 0.1.3",
+
]
+
+
[[package]]
+
name = "windows-threading"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
+
dependencies = [
+
"windows-link 0.2.1",
+
]
+
+
[[package]]
+
name = "windows_aarch64_gnullvm"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+
[[package]]
+
name = "windows_aarch64_gnullvm"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+
[[package]]
+
name = "windows_aarch64_gnullvm"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
+
+
[[package]]
+
name = "windows_aarch64_msvc"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+
[[package]]
+
name = "windows_aarch64_msvc"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+
[[package]]
+
name = "windows_aarch64_msvc"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
+
+
[[package]]
+
name = "windows_i686_gnu"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+
[[package]]
+
name = "windows_i686_gnu"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+
[[package]]
+
name = "windows_i686_gnu"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
+
+
[[package]]
+
name = "windows_i686_gnullvm"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+
[[package]]
+
name = "windows_i686_gnullvm"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
+
+
[[package]]
+
name = "windows_i686_msvc"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+
[[package]]
+
name = "windows_i686_msvc"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+
[[package]]
+
name = "windows_i686_msvc"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
+
+
[[package]]
+
name = "windows_x86_64_gnu"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+
[[package]]
+
name = "windows_x86_64_gnu"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+
[[package]]
+
name = "windows_x86_64_gnu"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
+
+
[[package]]
+
name = "windows_x86_64_gnullvm"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+
[[package]]
+
name = "windows_x86_64_gnullvm"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+
[[package]]
+
name = "windows_x86_64_gnullvm"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
+
+
[[package]]
+
name = "windows_x86_64_msvc"
+
version = "0.48.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+
[[package]]
+
name = "windows_x86_64_msvc"
+
version = "0.52.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+
[[package]]
+
name = "windows_x86_64_msvc"
+
version = "0.53.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
+
+
[[package]]
+
name = "winnow"
+
version = "0.7.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829"
+
dependencies = [
+
"memchr",
+
]
+
+
[[package]]
+
name = "winreg"
+
version = "0.52.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5"
+
dependencies = [
+
"cfg-if",
+
"windows-sys 0.48.0",
+
]
+
+
[[package]]
+
name = "wit-bindgen"
+
version = "0.46.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
+
+
[[package]]
+
name = "writeable"
+
version = "0.6.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
+
+
[[package]]
+
name = "xml5ever"
+
version = "0.18.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9bbb26405d8e919bc1547a5aa9abc95cbfa438f04844f5fdd9dc7596b748bf69"
+
dependencies = [
+
"log",
+
"mac",
+
"markup5ever",
+
]
+
+
[[package]]
+
name = "yansi"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049"
+
+
[[package]]
+
name = "yoke"
+
version = "0.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
+
dependencies = [
+
"stable_deref_trait",
+
"yoke-derive",
+
"zerofrom",
+
]
+
+
[[package]]
+
name = "yoke-derive"
+
version = "0.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
"synstructure",
+
]
+
+
[[package]]
+
name = "zerocopy"
+
version = "0.7.35"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+
dependencies = [
+
"byteorder",
+
"zerocopy-derive 0.7.35",
+
]
+
+
[[package]]
+
name = "zerocopy"
+
version = "0.8.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3"
+
dependencies = [
+
"zerocopy-derive 0.8.31",
+
]
+
+
[[package]]
+
name = "zerocopy-derive"
+
version = "0.7.35"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "zerocopy-derive"
+
version = "0.8.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "zerofrom"
+
version = "0.1.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
+
dependencies = [
+
"zerofrom-derive",
+
]
+
+
[[package]]
+
name = "zerofrom-derive"
+
version = "0.1.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
"synstructure",
+
]
+
+
[[package]]
+
name = "zeroize"
+
version = "1.8.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "zerotrie"
+
version = "0.2.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
+
dependencies = [
+
"displaydoc",
+
"yoke",
+
"zerofrom",
+
]
+
+
[[package]]
+
name = "zerovec"
+
version = "0.11.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
+
dependencies = [
+
"serde",
+
"yoke",
+
"zerofrom",
+
"zerovec-derive",
+
]
+
+
[[package]]
+
name = "zerovec-derive"
+
version = "0.11.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn 2.0.111",
+
]
+
+
[[package]]
+
name = "zip"
+
version = "4.6.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1"
+
dependencies = [
+
"arbitrary",
+
"crc32fast",
+
"flate2",
+
"indexmap 2.12.1",
+
"memchr",
+
"zopfli",
+
]
+
+
[[package]]
+
name = "zlib-rs"
+
version = "0.5.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "51f936044d677be1a1168fae1d03b583a285a5dd9d8cbf7b24c23aa1fc775235"
+
+
[[package]]
+
name = "zopfli"
+
version = "0.8.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249"
+
dependencies = [
+
"bumpalo",
+
"crc32fast",
+
"log",
+
"simd-adler32",
+
]
+46
dysnomia/Cargo.toml
···
+
[package]
+
name = "dysnomia-sh"
+
version = "0.1.0"
+
edition = "2024"
+
+
[lib]
+
crate-type = ["cdylib"]
+
+
[dependencies]
+
wasm-bindgen = "0.2"
+
wasm-bindgen-futures = "0.4"
+
getrandom = { version = "0.3", features = ["wasm_js"] }
+
web-sys = { version = "0.3", features = ["console", "Window"] }
+
vfs = { version = "0.12" }
+
nu-cmd-lang = { version = "0.109.1", default-features = false }
+
nu-command = { version = "0.109.1", default-features = false }
+
nu-engine = { version = "0.109.1", default-features = false }
+
nu-parser = { version = "0.109.1", default-features = false }
+
nu-protocol = { version = "0.109.1", default-features = false }
+
nu-cmd-extra = { version = "0.109.1", default-features = false }
+
serde = { version = "1.0", features = ["derive"] }
+
serde_json = "1"
+
miette = { version = "7.6", features = ["fancy"] }
+
ansi_term = "0.12.1"
+
+
anyhow = "1"
+
jacquard = { path = "../../jacquard/crates/jacquard", default-features = false, features = ["api", "cache"] }
+
jacquard-repo = { path = "../../jacquard/crates/jacquard-repo" }
+
url = "2"
+
futures = "0.3.31"
+
js-sys = "0.3.83"
+
serde_ipld_dagcbor = "0.6.4"
+
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] }
+
console_error_panic_hook = "0.1.7"
+
+
scc = "3"
+
rapidhash = { version = "4", features = ["unsafe"] }
+
+
[patch.crates-io]
+
vfs = { git = "https://github.com/landaire/rust-vfs", branch = "fix/wasm" }
+
+
[profile.release]
+
opt-level = 3
+
lto = true
+
codegen-units = 1
+
strip = true
+64
dysnomia/src/cmd/cd.rs
···
+
use crate::globals::{get_pwd, get_vfs, set_pwd, to_shell_err};
+
use nu_engine::CallExt;
+
use nu_protocol::{
+
Category, PipelineData, ShellError, Signature, SyntaxShape,
+
engine::{Command, EngineState, Stack},
+
};
+
use std::sync::Arc;
+
use vfs::VfsFileType;
+
+
#[derive(Clone)]
+
pub struct Cd;
+
+
impl Command for Cd {
+
fn name(&self) -> &str {
+
"cd"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build("cd")
+
.optional("path", SyntaxShape::String, "the path to change into")
+
.category(Category::FileSystem)
+
}
+
+
fn description(&self) -> &str {
+
"change the current directory in the virtual filesystem."
+
}
+
+
fn run(
+
&self,
+
engine_state: &EngineState,
+
_stack: &mut Stack,
+
call: &nu_protocol::engine::Call,
+
_input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let path_arg: Option<String> = call.opt(engine_state, _stack, 0)?;
+
let path = path_arg.unwrap_or_else(|| "/".to_string());
+
+
let base: Arc<vfs::VfsPath> = if path.starts_with('/') {
+
get_vfs()
+
} else {
+
get_pwd().clone()
+
};
+
+
let target = base
+
.join(path.trim_end_matches('/'))
+
.map_err(to_shell_err(call.head))?;
+
+
// Ensure target exists and is a directory
+
let metadata = target.metadata().map_err(to_shell_err(call.head))?;
+
match metadata.file_type {
+
VfsFileType::Directory => {
+
set_pwd(Arc::new(target));
+
Ok(PipelineData::Empty)
+
}
+
VfsFileType::File => Err(ShellError::GenericError {
+
error: "not a directory".to_string(),
+
msg: format!("'{}' is not a directory", path),
+
span: Some(call.head),
+
help: None,
+
inner: vec![],
+
}),
+
}
+
}
+
}
+338
dysnomia/src/cmd/fetch.rs
···
+
use crate::globals::{get_pwd, print_to_console, register_task, remove_task, to_shell_err};
+
use anyhow::{Result, anyhow};
+
use futures::future::{AbortHandle, Abortable};
+
use jacquard::types::aturi::AtUri;
+
use jacquard::types::ident::AtIdentifier;
+
use jacquard::types::string::Rkey;
+
use jacquard::{
+
api::com_atproto::{
+
repo::{get_record::GetRecord, list_records::ListRecords},
+
sync::get_repo::GetRepo,
+
},
+
client::{Agent, MemorySessionStore, credential_session::CredentialSession},
+
identity::{resolver::IdentityResolver, slingshot_resolver_default},
+
prelude::*,
+
types::{did::Did, nsid::Nsid},
+
};
+
use jacquard_repo::{
+
Repository,
+
car::parse_car_bytes,
+
storage::{BlockStore, MemoryBlockStore},
+
};
+
use nu_engine::CallExt;
+
use nu_protocol::IntoPipelineData;
+
use nu_protocol::{
+
Category, PipelineData, ShellError, Signature, SyntaxShape, Value,
+
engine::{Command, EngineState, Stack},
+
};
+
use std::io::Write;
+
use std::str::FromStr;
+
use std::sync::Arc;
+
use url::Url;
+
use wasm_bindgen_futures::spawn_local;
+
+
#[derive(Clone)]
+
pub struct Fetch;
+
+
impl Command for Fetch {
+
fn name(&self) -> &str {
+
"fetch"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build(self.name())
+
.required(
+
"uri",
+
SyntaxShape::String,
+
"HTTP URI or AT URI (at://identifier[/collection[/rkey]])",
+
)
+
.named("output", SyntaxShape::Filepath, "output path", Some('o'))
+
.category(Category::Network)
+
}
+
+
fn description(&self) -> &str {
+
"fetch files using HTTP or fetch records from an AT Protocol repository.\nsupports full repo (CAR), collection, or a single record."
+
}
+
+
fn run(
+
&self,
+
engine_state: &EngineState,
+
stack: &mut Stack,
+
call: &nu_protocol::engine::Call,
+
_input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let uri_arg: String = call.req(engine_state, stack, 0)?;
+
let output_arg: Option<String> = call.get_flag(engine_state, stack, "output")?;
+
let output_span = call.get_flag_span(stack, "output");
+
+
let at_uri = uri_arg
+
.starts_with("at://")
+
.then(|| {
+
AtUri::from_str(&uri_arg).map_err(|err| ShellError::GenericError {
+
error: "invalid AT URI format".into(),
+
msg: err.to_string(),
+
span: Some(call.arguments_span()),
+
help: None,
+
inner: vec![],
+
})
+
})
+
.transpose()?;
+
let uri = at_uri
+
.is_none()
+
.then(|| {
+
Url::from_str(&uri_arg).map_err(|err| ShellError::GenericError {
+
error: "invalid URI format".into(),
+
msg: err.to_string(),
+
span: Some(call.arguments_span()),
+
help: None,
+
inner: vec![],
+
})
+
})
+
.transpose()?;
+
+
// Determine target directory
+
let pwd = get_pwd();
+
let base_dir = if let Some(out) = output_arg.as_ref() {
+
pwd.join(out.trim_end_matches('/'))
+
.map_err(to_shell_err(output_span.unwrap()))?
+
} else {
+
pwd.join("").unwrap()
+
};
+
+
let final_path = if let Some(at_uri) = at_uri.as_ref() {
+
match (at_uri.collection(), at_uri.rkey()) {
+
(None, _) => base_dir
+
.join(at_uri.authority())
+
.map_err(to_shell_err(call.span()))?,
+
(Some(collection), None) => base_dir
+
.join(collection)
+
.map_err(to_shell_err(call.span()))?,
+
// use rkey as file name
+
(Some(_), Some(rkey)) => output_arg
+
.is_some()
+
.then(|| Ok(base_dir.clone()))
+
.unwrap_or_else(|| base_dir.join(&rkey.0).map_err(to_shell_err(call.span())))?,
+
}
+
} else if let Some(uri) = uri.as_ref() {
+
// choose file name from uri
+
output_arg
+
.is_some()
+
.then(|| Ok(base_dir.clone()))
+
.unwrap_or_else(|| {
+
base_dir
+
.join(
+
uri.path()
+
.split('/')
+
.rfind(|a| !a.is_empty())
+
.unwrap_or("index"),
+
)
+
.map_err(to_shell_err(call.span()))
+
})?
+
} else {
+
// todo: make these into an enum so we dont need this
+
unreachable!("either of at_uri or uri should be set")
+
};
+
+
if !final_path.exists().map_err(to_shell_err(call.span()))? {
+
// if http uri or at uri with rkey, we create parent dir since we'll
+
// write just a single file, otherwise we create this path as directory
+
if at_uri.as_ref().map_or(true, |at| at.rkey().is_some()) {
+
final_path
+
.parent()
+
.create_dir_all()
+
.map_err(to_shell_err(call.span()))?;
+
} else {
+
final_path
+
.create_dir_all()
+
.map_err(to_shell_err(call.span()))?;
+
}
+
}
+
+
let (abort_handle, abort_registration) = AbortHandle::new_pair();
+
let task_desc = format!("{name} {uri_arg}", name = self.name());
+
let task_id = register_task(task_desc.clone(), abort_handle);
+
+
spawn_local(async move {
+
let task_future = async {
+
if let Some(at_uri) = at_uri {
+
let identifier = at_uri.authority().clone();
+
match (at_uri.collection(), at_uri.rkey()) {
+
(Some(coll), Some(key)) => {
+
fetch_record(identifier, coll.clone(), key.0.clone(), final_path).await
+
}
+
(Some(coll), None) => {
+
fetch_collection(identifier, coll.clone(), final_path).await
+
}
+
_ => fetch_repo(identifier, final_path).await,
+
}
+
} else if let Some(uri) = uri {
+
fetch_file(uri, final_path).await
+
} else {
+
Ok(())
+
}
+
};
+
+
let abortable = Abortable::new(task_future, abort_registration);
+
+
match abortable.await {
+
Ok(result) => {
+
remove_task(task_id);
+
match result {
+
Ok(_) => {}
+
Err(e) => {
+
print_to_console(
+
&format!("\x1b[31m✖\x1b[0m ({task_desc}) error: {e}"),
+
false,
+
);
+
}
+
}
+
}
+
Err(_) => {
+
remove_task(task_id);
+
}
+
}
+
});
+
+
Ok(Value::nothing(call.head).into_pipeline_data())
+
}
+
}
+
+
async fn fetch_file(uri: Url, target_path: vfs::VfsPath) -> Result<()> {
+
let response = reqwest::get(uri).await?;
+
let content = response.bytes().await?;
+
target_path.create_file()?.write_all(&content)?;
+
Ok(())
+
}
+
+
async fn resolve_did(identifier: AtIdentifier<'_>) -> Result<Did<'_>> {
+
match identifier {
+
AtIdentifier::Did(did) => Ok(did),
+
AtIdentifier::Handle(handle) => {
+
let did = slingshot_resolver_default().resolve_handle(&handle).await?;
+
Ok(did)
+
}
+
}
+
}
+
+
async fn resolve_pds(did: &Did<'_>) -> Result<Url> {
+
slingshot_resolver_default()
+
.resolve_did_doc(did)
+
.await?
+
.parse()?
+
.pds_endpoint()
+
.ok_or_else(|| anyhow!("no pds endpoint in did doc"))
+
}
+
+
async fn create_agent(pds: Url) -> BasicClient {
+
let store = MemorySessionStore::default();
+
let session = CredentialSession::new(Arc::new(store), Arc::new(slingshot_resolver_default()));
+
session.set_endpoint(pds).await;
+
Agent::new(session)
+
}
+
+
async fn fetch_record(
+
identifier: AtIdentifier<'_>,
+
collection: Nsid<'_>,
+
rkey: Rkey<'_>,
+
target_path: vfs::VfsPath,
+
) -> anyhow::Result<()> {
+
let did = resolve_did(identifier).await?;
+
let pds = resolve_pds(&did).await?;
+
let client = create_agent(pds).await;
+
+
let nsid = Nsid::new(&collection)?;
+
+
let request = GetRecord::new()
+
.repo(did)
+
.collection(nsid)
+
.rkey(rkey.clone());
+
+
let output = client.send(request.build()).await?.into_output()?;
+
let file = target_path.create_file()?;
+
serde_json::to_writer_pretty(file, &output.value)?;
+
+
Ok(())
+
}
+
+
async fn fetch_collection(
+
identifier: AtIdentifier<'_>,
+
collection: Nsid<'_>,
+
target_path: vfs::VfsPath,
+
) -> anyhow::Result<()> {
+
let did = resolve_did(identifier).await?;
+
let pds = resolve_pds(&did).await?;
+
let client = create_agent(pds).await;
+
+
let mut cursor: Option<String> = None;
+
+
loop {
+
let request = ListRecords::new()
+
.repo(did.clone())
+
.collection(collection.clone())
+
.limit(100)
+
.cursor(cursor.map(Into::into));
+
+
let response = client.send(request.build()).await?;
+
+
let output = response.into_output()?;
+
+
for rec in output.records {
+
if let Some(rkey) = rec.uri.rkey() {
+
let file = target_path.join(&rkey.0)?.create_file()?;
+
serde_json::to_writer_pretty(file, &rec.value)?;
+
}
+
}
+
+
if let Some(c) = output.cursor {
+
cursor = Some(c.into());
+
} else {
+
break;
+
}
+
}
+
+
Ok(())
+
}
+
+
async fn fetch_repo(identifier: AtIdentifier<'_>, target_path: vfs::VfsPath) -> Result<()> {
+
let did = resolve_did(identifier).await?;
+
let pds = resolve_pds(&did).await?;
+
let client = create_agent(pds).await;
+
+
let response = client.send(GetRepo::new().did(did).build()).await?;
+
+
// parse the car and create the repo
+
let car_bytes = response.into_output()?.body;
+
let parsed = parse_car_bytes(&car_bytes).await?;
+
let storage = Arc::new(MemoryBlockStore::new_from_blocks(parsed.blocks));
+
let repo = Repository::from_commit(storage, &parsed.root).await?;
+
+
// Iterate over all leaves in the MST
+
// repo.mst() gives us the Mst<S>
+
// mst.leaves() returns Vec<(SmolStr, IpldCid)>
+
let leaves = repo.mst().leaves_sequential().await?;
+
+
for (key, cid) in leaves {
+
// key format: collection/rkey
+
let key_str = key.as_str();
+
+
if let Some((collection, rkey)) = key_str.split_once('/') {
+
// Get the record block from storage
+
// The record data is just a CBOR block. We need to convert it to JSON for readability.
+
if let Some(block_bytes) = repo.storage().get(&cid).await? {
+
// Deserialize DAG-CBOR to generic JSON Value
+
let json_val: jacquard::RawData = serde_ipld_dagcbor::from_slice(&block_bytes)
+
.map_err(|e| anyhow!("failed to deserialize record {}: {}", key, e))?;
+
+
let coll_dir = target_path.join(collection)?;
+
if !coll_dir.exists()? {
+
coll_dir.create_dir_all()?;
+
}
+
let file = coll_dir.join(rkey)?.create_file()?;
+
+
serde_json::to_writer_pretty(file, &json_val)?;
+
}
+
}
+
}
+
+
Ok(())
+
}
+39
dysnomia/src/cmd/job.rs
···
+
use nu_engine::{command_prelude::*, get_full_help};
+
use nu_protocol::{
+
Category, IntoPipelineData, PipelineData, ShellError, Signature, Value,
+
engine::{Command, EngineState, Stack},
+
};
+
+
#[derive(Clone)]
+
pub struct Job;
+
+
// Top-level `job` command that just prints help (like nu stdlib style)
+
impl Command for Job {
+
fn name(&self) -> &str {
+
"job"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build("job")
+
.category(Category::System)
+
.input_output_types(vec![(Type::Nothing, Type::String)])
+
}
+
+
fn description(&self) -> &str {
+
"Various commands for working with background jobs."
+
}
+
+
fn extra_description(&self) -> &str {
+
"You must use one of the following subcommands. Using this command as-is will only produce this help message."
+
}
+
+
fn run(
+
&self,
+
engine_state: &EngineState,
+
stack: &mut Stack,
+
call: &Call,
+
_input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
Ok(Value::string(get_full_help(self, engine_state, stack), call.head).into_pipeline_data())
+
}
+
}
+49
dysnomia/src/cmd/job_kill.rs
···
+
use crate::globals::kill_task_by_id;
+
use nu_engine::CallExt;
+
use nu_protocol::{
+
Category, IntoPipelineData, PipelineData, ShellError, Signature, SyntaxShape, Value,
+
engine::{Call, Command, EngineState, Stack},
+
};
+
+
#[derive(Clone)]
+
pub struct JobKill;
+
+
impl Command for JobKill {
+
fn name(&self) -> &str {
+
"job kill"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build("job kill")
+
.required("id", SyntaxShape::Int, "id of job to kill")
+
.category(Category::System)
+
}
+
+
fn description(&self) -> &str {
+
"Kill a background job by ID."
+
}
+
+
fn run(
+
&self,
+
engine_state: &EngineState,
+
stack: &mut Stack,
+
call: &Call,
+
_input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let id: i64 = call.req(engine_state, stack, 0)?;
+
if id < 0 {
+
return Err(ShellError::GenericError {
+
error: "invalid id".to_string(),
+
msg: format!("task id must be non-negative, got {}", id),
+
span: Some(call.head),
+
help: None,
+
inner: vec![],
+
});
+
}
+
+
let killed = kill_task_by_id(id as usize);
+
+
// Return a boolean indicating whether a task was found & killed.
+
Ok(Value::bool(killed, call.head).into_pipeline_data())
+
}
+
}
+43
dysnomia/src/cmd/job_list.rs
···
+
use crate::globals::get_all_tasks;
+
use nu_protocol::{
+
Category, ListStream, PipelineData, Record, ShellError, Signature, Value,
+
engine::{Call, Command, EngineState, Stack},
+
};
+
+
#[derive(Clone)]
+
pub struct JobList;
+
+
impl Command for JobList {
+
fn name(&self) -> &str {
+
"job list"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build("job list").category(Category::System)
+
}
+
+
fn description(&self) -> &str {
+
"List background jobs."
+
}
+
+
fn run(
+
&self,
+
engine_state: &EngineState,
+
_stack: &mut Stack,
+
call: &Call,
+
_input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let tasks = get_all_tasks();
+
let span = call.head;
+
let iter = tasks.into_iter().map(move |(id, desc)| {
+
let mut rec = Record::new();
+
rec.push("id", Value::int(id as i64, span));
+
rec.push("description", Value::string(desc, span));
+
Value::record(rec, span)
+
});
+
Ok(PipelineData::list_stream(
+
ListStream::new(iter, span, engine_state.signals().clone()),
+
None,
+
))
+
}
+
}
+139
dysnomia/src/cmd/ls.rs
···
+
use std::{
+
sync::Arc,
+
time::{SystemTime, UNIX_EPOCH},
+
};
+
+
use crate::globals::{get_pwd, to_shell_err};
+
use jacquard::chrono;
+
use nu_engine::CallExt;
+
use nu_protocol::{
+
Category, ListStream, PipelineData, Record, ShellError, Signature, SyntaxShape, Value,
+
engine::{Command, EngineState, Stack},
+
};
+
+
#[derive(Clone)]
+
pub struct Ls;
+
+
impl Command for Ls {
+
fn name(&self) -> &str {
+
"ls"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build("ls")
+
.optional("path", SyntaxShape::String, "the path to list")
+
.switch(
+
"all",
+
"include hidden paths (that start with a dot)",
+
Some('a'),
+
)
+
.switch(
+
"long",
+
"show detailed information about each file",
+
Some('l'),
+
)
+
.category(Category::FileSystem)
+
}
+
+
fn description(&self) -> &str {
+
"list the files in the virtual filesystem."
+
}
+
+
fn run(
+
&self,
+
engine_state: &EngineState,
+
stack: &mut Stack,
+
call: &nu_protocol::engine::Call,
+
_input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let path_arg: Option<String> = call.opt(engine_state, stack, 0)?;
+
let all = call.has_flag(engine_state, stack, "all")?;
+
let long = call.has_flag(engine_state, stack, "long")?;
+
+
let mut target_dir = get_pwd();
+
if let Some(path) = path_arg {
+
target_dir = Arc::new(
+
target_dir
+
.join(path.trim_end_matches('/'))
+
.map_err(to_shell_err(call.arguments_span()))?,
+
);
+
}
+
+
let span = call.head;
+
let entries = target_dir.read_dir().map_err(to_shell_err(span))?;
+
+
let make_record = move |name: &str, metadata: &vfs::VfsMetadata| {
+
let type_str = match metadata.file_type {
+
vfs::VfsFileType::Directory => "dir",
+
vfs::VfsFileType::File => "file",
+
};
+
+
let mut record = Record::new();
+
record.push("name", Value::string(name, span));
+
record.push("type", Value::string(type_str, span));
+
record.push("size", Value::filesize(metadata.len as i64, span));
+
let mut add_timestamp = |field: &str, timestamp: Option<SystemTime>| {
+
if let Some(dur) = timestamp.and_then(|s| s.duration_since(UNIX_EPOCH).ok()) {
+
record.push(
+
field,
+
Value::date(
+
chrono::DateTime::from_timestamp_nanos(dur.as_nanos() as i64)
+
.fixed_offset(),
+
span,
+
),
+
);
+
} else {
+
record.push(field, Value::nothing(span));
+
}
+
};
+
add_timestamp("modified", metadata.modified);
+
if long {
+
add_timestamp("created", metadata.created);
+
add_timestamp("accessed", metadata.accessed);
+
}
+
Value::record(record, span)
+
};
+
const DIR_METADATA: vfs::VfsMetadata = vfs::VfsMetadata {
+
file_type: vfs::VfsFileType::Directory,
+
len: 0,
+
modified: None,
+
created: None,
+
accessed: None,
+
};
+
+
let dots = if all {
+
vec![
+
make_record(".", &DIR_METADATA),
+
make_record("..", &DIR_METADATA),
+
]
+
} else {
+
Vec::new()
+
};
+
let entries = dots
+
.into_iter()
+
.chain(entries.into_iter().flat_map(move |entry| {
+
let do_map = move || {
+
let name = entry.filename();
+
if name.starts_with('.') && !all {
+
return Ok(None);
+
}
+
let metadata = entry.metadata().map_err(to_shell_err(span))?;
+
+
Ok(Some(make_record(&name, &metadata)))
+
};
+
do_map()
+
.transpose()
+
.map(|res| res.unwrap_or_else(|err| Value::error(err, span)))
+
}));
+
+
let signals = engine_state.signals().clone();
+
Ok(PipelineData::list_stream(
+
ListStream::new(entries, span, signals.clone()),
+
Some(nu_protocol::PipelineMetadata {
+
data_source: nu_protocol::DataSource::Ls,
+
content_type: None,
+
custom: Record::new(),
+
}),
+
))
+
}
+
}
+46
dysnomia/src/cmd/mkdir.rs
···
+
use crate::globals::{get_pwd, to_shell_err};
+
use nu_engine::CallExt;
+
use nu_protocol::{
+
Category, PipelineData, ShellError, Signature, SyntaxShape,
+
engine::{Command, EngineState, Stack},
+
};
+
+
#[derive(Clone)]
+
pub struct Mkdir;
+
+
impl Command for Mkdir {
+
fn name(&self) -> &str {
+
"mkdir"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build("mkdir")
+
.required(
+
"path",
+
SyntaxShape::String,
+
"path of the directory(s) to create",
+
)
+
.category(Category::FileSystem)
+
}
+
+
fn description(&self) -> &str {
+
"create a directory in the virtual filesystem."
+
}
+
+
fn run(
+
&self,
+
engine_state: &EngineState,
+
stack: &mut Stack,
+
call: &nu_protocol::engine::Call,
+
_: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let path: String = call.req(engine_state, stack, 0)?;
+
let new_dir = get_pwd()
+
.join(path.trim_end_matches('/'))
+
.map_err(to_shell_err(call.head))?;
+
new_dir
+
.create_dir_all()
+
.map_err(to_shell_err(call.head))
+
.map(|_| PipelineData::Empty)
+
}
+
}
+31
dysnomia/src/cmd/mod.rs
···
+
pub mod cd;
+
pub mod fetch;
+
pub mod job;
+
pub mod job_kill;
+
pub mod job_list;
+
pub mod ls;
+
pub mod mkdir;
+
pub mod open;
+
pub mod pwd;
+
pub mod random;
+
pub mod rm;
+
pub mod save;
+
pub mod source;
+
pub mod sys;
+
pub mod version;
+
+
pub use cd::Cd;
+
pub use fetch::Fetch;
+
pub use job::Job;
+
pub use job_kill::JobKill;
+
pub use job_list::JobList;
+
pub use ls::Ls;
+
pub use mkdir::Mkdir;
+
pub use open::Open;
+
pub use pwd::Pwd;
+
pub use random::Random;
+
pub use rm::Rm;
+
pub use save::Save;
+
pub use source::Source;
+
pub use sys::Sys;
+
pub use version::Version;
+88
dysnomia/src/cmd/open.rs
···
+
use std::ops::Not;
+
+
use crate::globals::{get_pwd, to_shell_err};
+
use nu_command::{FromCsv, FromJson, FromOds, FromToml, FromTsv, FromXlsx, FromXml, FromYaml};
+
use nu_engine::CallExt;
+
use nu_protocol::{
+
ByteStream, Category, PipelineData, ShellError, Signature, SyntaxShape,
+
engine::{Command, EngineState, Stack},
+
};
+
+
#[derive(Clone)]
+
pub struct Open;
+
+
impl Command for Open {
+
fn name(&self) -> &str {
+
"open"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build("open")
+
.required("path", SyntaxShape::String, "path to the file")
+
.switch(
+
"raw",
+
"output content as raw string/binary without parsing",
+
Some('r'),
+
)
+
.category(Category::FileSystem)
+
}
+
+
fn description(&self) -> &str {
+
"open a file from the virtual filesystem."
+
}
+
+
fn run(
+
&self,
+
engine_state: &EngineState,
+
stack: &mut Stack,
+
call: &nu_protocol::engine::Call,
+
_input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let path: String = call.req(engine_state, stack, 0)?;
+
let raw_flag = call.has_flag(engine_state, stack, "raw")?;
+
+
let target_file = get_pwd().join(&path).map_err(to_shell_err(call.head))?;
+
+
let parse_cmd = raw_flag
+
.not()
+
.then(|| {
+
target_file
+
.extension()
+
.and_then(|ext| get_cmd_for_ext(&ext))
+
})
+
.flatten();
+
+
target_file
+
.open_file()
+
.map_err(to_shell_err(call.head))
+
.and_then(|f| {
+
let data = PipelineData::ByteStream(
+
ByteStream::read(
+
f,
+
call.head,
+
engine_state.signals().clone(),
+
nu_protocol::ByteStreamType::String,
+
),
+
None,
+
);
+
if let Some(cmd) = parse_cmd {
+
return cmd.run(engine_state, stack, call, data);
+
}
+
Ok(data)
+
})
+
}
+
}
+
+
fn get_cmd_for_ext(ext: &str) -> Option<Box<dyn Command>> {
+
Some(match ext {
+
"json" => Box::new(FromJson),
+
"yaml" | "yml" => Box::new(FromYaml),
+
"toml" => Box::new(FromToml),
+
"csv" => Box::new(FromCsv),
+
"ods" => Box::new(FromOds),
+
"tsv" => Box::new(FromTsv),
+
"xml" => Box::new(FromXml),
+
"xlsx" => Box::new(FromXlsx),
+
_ => return None,
+
})
+
}
+37
dysnomia/src/cmd/pwd.rs
···
+
use crate::globals::get_pwd;
+
use nu_protocol::engine::Call;
+
use nu_protocol::{
+
Category, IntoPipelineData, PipelineData, ShellError, Signature, Value,
+
engine::{Command, EngineState, Stack},
+
};
+
+
#[derive(Clone)]
+
pub struct Pwd;
+
+
impl Command for Pwd {
+
fn name(&self) -> &str {
+
"pwd"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build("pwd").category(Category::FileSystem)
+
}
+
+
fn description(&self) -> &str {
+
"print the current working directory in the virtual filesystem."
+
}
+
+
fn run(
+
&self,
+
_engine_state: &EngineState,
+
_stack: &mut Stack,
+
call: &Call,
+
_input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let mut pwd = get_pwd().as_str().to_string();
+
if pwd.is_empty() {
+
pwd.push('/');
+
}
+
Ok(Value::string(pwd, call.head).into_pipeline_data())
+
}
+
}
+37
dysnomia/src/cmd/random.rs
···
+
use js_sys::Math;
+
use nu_protocol::Type;
+
use nu_protocol::engine::Call;
+
use nu_protocol::{
+
Category, IntoPipelineData, PipelineData, ShellError, Signature, Value,
+
engine::{Command, EngineState, Stack},
+
};
+
+
#[derive(Clone)]
+
pub struct Random;
+
+
impl Command for Random {
+
fn name(&self) -> &str {
+
"random"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build("random")
+
.category(Category::Math)
+
.input_output_type(Type::Nothing, Type::Float)
+
}
+
+
fn description(&self) -> &str {
+
"returns a random float between 0 and 1."
+
}
+
+
fn run(
+
&self,
+
_engine_state: &EngineState,
+
_stack: &mut Stack,
+
call: &Call,
+
_input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let v: f64 = Math::random();
+
Ok(Value::float(v, call.head).into_pipeline_data())
+
}
+
}
+80
dysnomia/src/cmd/rm.rs
···
+
use crate::globals::{get_pwd, to_shell_err};
+
use nu_engine::CallExt;
+
use nu_protocol::{
+
Category, PipelineData, ShellError, Signature, SyntaxShape,
+
engine::{Command, EngineState, Stack},
+
};
+
use vfs::VfsFileType;
+
+
#[derive(Clone)]
+
pub struct Rm;
+
+
impl Command for Rm {
+
fn name(&self) -> &str {
+
"rm"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build("rm")
+
.required(
+
"path",
+
SyntaxShape::String,
+
"path to file or directory to remove",
+
)
+
.switch(
+
"recursive",
+
"remove directories and their contents recursively",
+
Some('r'),
+
)
+
.category(Category::FileSystem)
+
}
+
+
fn description(&self) -> &str {
+
"remove a file or directory from the virtual filesystem."
+
}
+
+
fn run(
+
&self,
+
engine_state: &EngineState,
+
stack: &mut Stack,
+
call: &nu_protocol::engine::Call,
+
_input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let path: String = call.req(engine_state, stack, 0)?;
+
let recursive = call.has_flag(engine_state, stack, "recursive")?;
+
+
// Prevent removing root
+
if path == "/" {
+
return Err(ShellError::GenericError {
+
error: "cannot remove root".to_string(),
+
msg: "refusing to remove root directory".to_string(),
+
span: Some(call.head),
+
help: None,
+
inner: vec![],
+
});
+
}
+
+
// Resolve target relative to PWD (or absolute if path starts with '/')
+
let target = get_pwd()
+
.join(path.trim_end_matches('/'))
+
.map_err(to_shell_err(call.head))?;
+
+
let meta = target.metadata().map_err(to_shell_err(call.head))?;
+
match meta.file_type {
+
VfsFileType::File => {
+
target.remove_file().map_err(to_shell_err(call.head))?;
+
Ok(PipelineData::Empty)
+
}
+
VfsFileType::Directory => {
+
(if recursive {
+
target.remove_dir_all()
+
} else {
+
// non-recursive: attempt to remove directory (will fail if not empty)
+
target.remove_dir()
+
})
+
.map_err(to_shell_err(call.head))
+
.map(|_| PipelineData::Empty)
+
}
+
}
+
}
+
}
+67
dysnomia/src/cmd/save.rs
···
+
use crate::globals::{get_pwd, to_shell_err};
+
use nu_engine::CallExt;
+
use nu_protocol::{
+
Category, PipelineData, ShellError, Signature, SyntaxShape, Type, Value,
+
engine::{Command, EngineState, Stack},
+
};
+
use vfs::VfsError;
+
+
#[derive(Clone)]
+
pub struct Save;
+
+
impl Command for Save {
+
fn name(&self) -> &str {
+
"save"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build("save")
+
.required("path", SyntaxShape::String, "path to write the data to")
+
.input_output_types(vec![(Type::Any, Type::Nothing)])
+
.category(Category::FileSystem)
+
}
+
+
fn description(&self) -> &str {
+
"save content to a file in the virtual filesystem."
+
}
+
+
fn run(
+
&self,
+
engine_state: &EngineState,
+
stack: &mut Stack,
+
call: &nu_protocol::engine::Call,
+
input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let path: String = call.req(engine_state, stack, 0)?;
+
+
let value = input.into_value(call.head)?;
+
let contents = match value {
+
Value::String { val, .. } => val.into_bytes(),
+
Value::Binary { val, .. } => val,
+
Value::Bool { val, .. } => val.to_string().into_bytes(),
+
Value::Float { val, .. } => val.to_string().into_bytes(),
+
Value::Int { val, .. } => val.to_string().into_bytes(),
+
Value::Date { val, .. } => val.to_string().into_bytes(),
+
_ => {
+
return Err(ShellError::CantConvert {
+
to_type: "string".to_string(),
+
from_type: value.get_type().to_string(),
+
span: value.span(),
+
help: None,
+
});
+
}
+
};
+
+
let target_file = get_pwd().join(&path).map_err(to_shell_err(call.head))?;
+
+
target_file
+
.create_file()
+
.map_err(to_shell_err(call.head))
+
.and_then(|mut f| {
+
f.write_all(&contents)
+
.map_err(VfsError::from)
+
.map_err(to_shell_err(call.head))
+
})
+
.map(|_| PipelineData::Empty)
+
}
+
}
+89
dysnomia/src/cmd/source.rs
···
+
use crate::globals::{get_pwd, queue_delta, to_shell_err};
+
use nu_engine::{CallExt, command_prelude::IoError, eval_block};
+
use nu_parser::parse;
+
use nu_protocol::{
+
Category, PipelineData, ShellError, Signature, SyntaxShape,
+
debugger::WithoutDebug,
+
engine::{Command, EngineState, Stack, StateWorkingSet},
+
};
+
use std::{io::Read, path::PathBuf, str::FromStr};
+
+
#[derive(Clone)]
+
pub struct Source;
+
+
impl Command for Source {
+
fn name(&self) -> &str {
+
"source"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build(self.name())
+
.required("filename", SyntaxShape::String, "the file to source")
+
.category(Category::Core)
+
}
+
+
fn description(&self) -> &str {
+
"source a file from the virtual filesystem."
+
}
+
+
fn run(
+
&self,
+
engine_state: &EngineState,
+
stack: &mut Stack,
+
call: &nu_protocol::engine::Call,
+
input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let filename: String = call.req(engine_state, stack, 0)?;
+
+
// 1. Read file from VFS
+
let path = get_pwd().join(&filename).map_err(to_shell_err(call.head))?;
+
let mut file = path.open_file().map_err(to_shell_err(call.head))?;
+
let mut contents = String::new();
+
file.read_to_string(&mut contents).map_err(|e| {
+
ShellError::Io(IoError::new(
+
e,
+
call.head,
+
PathBuf::from_str(path.as_str()).unwrap(),
+
))
+
})?;
+
+
// 2. Parse the content
+
// We create a new working set based on the CURRENT engine state.
+
let mut working_set = StateWorkingSet::new(engine_state);
+
+
// We must add the file to the working set so the parser can track spans correctly
+
let _file_id = working_set.add_file(filename.clone(), contents.as_bytes());
+
+
// Parse the block
+
let block = parse(
+
&mut working_set,
+
Some(&filename),
+
contents.as_bytes(),
+
false,
+
);
+
+
if let Some(err) = working_set.parse_errors.first() {
+
return Err(ShellError::GenericError {
+
error: "Parse error".into(),
+
msg: err.to_string(),
+
span: Some(call.head),
+
help: None,
+
inner: vec![],
+
});
+
}
+
+
// 3. Prepare execution context
+
// We clone the engine state to merge the new definitions (delta) locally.
+
// This ensures the script can call its own defined functions immediately.
+
let mut local_state = engine_state.clone();
+
local_state.merge_delta(working_set.delta.clone())?;
+
+
// 4. Queue the delta for the global engine state
+
// This allows definitions to be available in the next command execution cycle (REPL behavior).
+
queue_delta(working_set.delta);
+
+
// 5. Evaluate the block
+
// We pass the MUTABLE stack, so environment variable changes (PWD, load-env) WILL persist.
+
eval_block::<WithoutDebug>(&local_state, stack, &block, input).map(|data| data.body)
+
}
+
}
+182
dysnomia/src/cmd/sys.rs
···
+
use js_sys::Reflect;
+
use js_sys::global;
+
use nu_protocol::{
+
Category, IntoPipelineData, PipelineData, Record, ShellError, Signature, Value,
+
engine::{Command, EngineState, Stack},
+
};
+
use wasm_bindgen::JsValue;
+
+
#[derive(Clone)]
+
pub struct Sys;
+
+
impl Command for Sys {
+
fn name(&self) -> &str {
+
"sys"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build("sys").category(Category::System)
+
}
+
+
fn description(&self) -> &str {
+
"return information about the browser environment (when running in wasm)"
+
}
+
+
fn run(
+
&self,
+
_engine_state: &EngineState,
+
_stack: &mut Stack,
+
call: &nu_protocol::engine::Call,
+
_input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
let head = call.head;
+
let mut rec = Record::new();
+
+
let g = global();
+
+
// navigator-derived fields
+
if let Ok(nav) = Reflect::get(&g, &JsValue::from_str("navigator")) {
+
if !nav.is_undefined() && !nav.is_null() {
+
let ua = Reflect::get(&nav, &JsValue::from_str("userAgent"))
+
.ok()
+
.and_then(|v| v.as_string())
+
.unwrap_or_default();
+
rec.push("user_agent", Value::string(ua, head));
+
+
let platform = Reflect::get(&nav, &JsValue::from_str("platform"))
+
.ok()
+
.and_then(|v| v.as_string())
+
.unwrap_or_default();
+
rec.push("platform", Value::string(platform, head));
+
+
let vendor = Reflect::get(&nav, &JsValue::from_str("vendor"))
+
.ok()
+
.and_then(|v| v.as_string())
+
.unwrap_or_default();
+
rec.push("vendor", Value::string(vendor, head));
+
+
let product = Reflect::get(&nav, &JsValue::from_str("product"))
+
.ok()
+
.and_then(|v| v.as_string())
+
.unwrap_or_default();
+
rec.push("product", Value::string(product, head));
+
+
let app_name = Reflect::get(&nav, &JsValue::from_str("appName"))
+
.ok()
+
.and_then(|v| v.as_string())
+
.unwrap_or_default();
+
rec.push("app_name", Value::string(app_name, head));
+
+
let language = Reflect::get(&nav, &JsValue::from_str("language"))
+
.ok()
+
.and_then(|v| v.as_string())
+
.unwrap_or_default();
+
rec.push("language", Value::string(language, head));
+
+
// booleans now use Value::bool
+
let online = Reflect::get(&nav, &JsValue::from_str("onLine"))
+
.ok()
+
.and_then(|v| v.as_bool())
+
.unwrap_or(false);
+
rec.push("online", Value::bool(online, head));
+
+
let cookie_enabled = Reflect::get(&nav, &JsValue::from_str("cookieEnabled"))
+
.ok()
+
.and_then(|v| v.as_bool())
+
.unwrap_or(false);
+
rec.push("cookie_enabled", Value::bool(cookie_enabled, head));
+
+
// numeric-ish fields
+
let hardware_concurrency =
+
Reflect::get(&nav, &JsValue::from_str("hardwareConcurrency"))
+
.ok()
+
.and_then(|v| v.as_f64())
+
.map(|f| f as i64);
+
if let Some(hc) = hardware_concurrency {
+
rec.push("hardware_concurrency", Value::int(hc, head));
+
}
+
+
let device_memory = Reflect::get(&nav, &JsValue::from_str("deviceMemory"))
+
.ok()
+
.and_then(|v| v.as_f64())
+
.map(|f| f as i64);
+
if let Some(dm) = device_memory {
+
rec.push("device_memory_gb", Value::int(dm, head));
+
}
+
+
let max_touch_points = Reflect::get(&nav, &JsValue::from_str("maxTouchPoints"))
+
.ok()
+
.and_then(|v| v.as_f64())
+
.map(|f| f as i64);
+
if let Some(tp) = max_touch_points {
+
rec.push("max_touch_points", Value::int(tp, head));
+
}
+
+
let dnt = Reflect::get(&nav, &JsValue::from_str("doNotTrack"))
+
.ok()
+
.and_then(|v| v.as_string())
+
.unwrap_or_default();
+
if !dnt.is_empty() {
+
rec.push("do_not_track", Value::string(dnt, head));
+
}
+
}
+
}
+
+
// screen dimensions (if available)
+
if let Ok(screen) = Reflect::get(&g, &JsValue::from_str("screen")) {
+
if !screen.is_undefined() && !screen.is_null() {
+
let width = Reflect::get(&screen, &JsValue::from_str("width"))
+
.ok()
+
.and_then(|v| v.as_f64())
+
.map(|f| f as i64);
+
let height = Reflect::get(&screen, &JsValue::from_str("height"))
+
.ok()
+
.and_then(|v| v.as_f64())
+
.map(|f| f as i64);
+
if let Some(w) = width {
+
rec.push("screen_width", Value::int(w, head));
+
}
+
if let Some(h) = height {
+
rec.push("screen_height", Value::int(h, head));
+
}
+
}
+
}
+
+
// performance.memory (optional)
+
if let Ok(perf) = Reflect::get(&g, &JsValue::from_str("performance")) {
+
if !perf.is_undefined() && !perf.is_null() {
+
if let Ok(mem) = Reflect::get(&perf, &JsValue::from_str("memory")) {
+
if !mem.is_undefined() && !mem.is_null() {
+
let used = Reflect::get(&mem, &JsValue::from_str("usedJSHeapSize"))
+
.ok()
+
.and_then(|v| v.as_f64())
+
.map(|f| f as i64);
+
let limit = Reflect::get(&mem, &JsValue::from_str("jsHeapSizeLimit"))
+
.ok()
+
.and_then(|v| v.as_f64())
+
.map(|f| f as i64);
+
let mut mrec = Record::new();
+
if let Some(u) = used {
+
mrec.push("used_js_heap_size", Value::filesize(u, head));
+
}
+
if let Some(l) = limit {
+
mrec.push("js_heap_size_limit", Value::filesize(l, head));
+
}
+
if !mrec.is_empty() {
+
rec.push("performance_memory", Value::record(mrec, head));
+
}
+
}
+
}
+
}
+
}
+
+
if rec.is_empty() {
+
rec.push(
+
"error",
+
Value::string("not running in a browser environment", head),
+
);
+
}
+
+
Ok(Value::record(rec, head).into_pipeline_data())
+
}
+
}
+32
dysnomia/src/cmd/version.rs
···
+
use nu_protocol::engine::Call;
+
use nu_protocol::{
+
Category, IntoPipelineData, PipelineData, ShellError, Signature, Value,
+
engine::{Command, EngineState, Stack},
+
};
+
+
#[derive(Clone)]
+
pub struct Version;
+
+
impl Command for Version {
+
fn name(&self) -> &str {
+
"version"
+
}
+
+
fn signature(&self) -> Signature {
+
Signature::build(self.name()).category(Category::System)
+
}
+
+
fn description(&self) -> &str {
+
"print the version of dysnomia."
+
}
+
+
fn run(
+
&self,
+
_engine_state: &EngineState,
+
_stack: &mut Stack,
+
call: &Call,
+
_input: PipelineData,
+
) -> Result<PipelineData, ShellError> {
+
Ok(Value::string("dysnomia.v099.t1765660500", call.head).into_pipeline_data())
+
}
+
}
+213
dysnomia/src/completion.rs
···
+
use super::*;
+
+
#[derive(Debug, Serialize)]
+
struct Suggestion {
+
name: String,
+
description: Option<String>,
+
is_command: bool,
+
rendered: String,
+
span_start: usize, // char index (not byte)
+
span_end: usize, // char index (not byte)
+
}
+
+
impl PartialEq for Suggestion {
+
fn eq(&self, other: &Self) -> bool {
+
self.name == other.name
+
}
+
}
+
impl Eq for Suggestion {}
+
impl PartialOrd for Suggestion {
+
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
+
self.name.partial_cmp(&other.name)
+
}
+
}
+
impl Ord for Suggestion {
+
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
+
self.name.cmp(&other.name)
+
}
+
}
+
+
#[wasm_bindgen]
+
pub fn completion(input: &str, js_cursor_pos: usize) -> String {
+
let engine_guard = ENGINE_STATE
+
.get()
+
.unwrap()
+
.lock()
+
.expect("engine state initialized");
+
let root = get_pwd();
+
+
// Map UTF-16 cursor position (from JS) to Byte index (for Rust)
+
let byte_pos = input
+
.char_indices()
+
.map(|(i, _)| i)
+
.nth(js_cursor_pos)
+
.unwrap_or(input.len());
+
+
// 1. Parse & Flatten
+
let mut working_set = StateWorkingSet::new(&engine_guard);
+
// CRITICAL: Capture the start offset so we can normalize spans later
+
let global_offset = working_set.next_span_start();
+
let block = parse(&mut working_set, None, input.as_bytes(), false);
+
let shapes = flatten_block(&working_set, &block);
+
+
// 2. Identify context
+
let mut is_command_pos = false;
+
let mut current_span = Span::new(byte_pos, byte_pos);
+
let mut prefix = "".to_string();
+
let mut found_shape = false;
+
+
// Check if cursor is inside or touching a shape
+
for (span, shape) in &shapes {
+
// Convert global span to local indices
+
let local_start = span.start.saturating_sub(global_offset);
+
let local_end = span.end.saturating_sub(global_offset);
+
let local_span = Span::new(local_start, local_end);
+
+
if local_span.contains(byte_pos) || local_span.end == byte_pos {
+
current_span = local_span;
+
found_shape = true;
+
let safe_end = std::cmp::min(local_span.end, byte_pos);
+
if local_span.start < input.len() {
+
prefix = input[local_span.start..safe_end].to_string();
+
}
+
+
match shape {
+
FlatShape::External(_) | FlatShape::InternalCall(_) | FlatShape::Keyword => {
+
is_command_pos = true;
+
}
+
FlatShape::Garbage => {
+
// Check if it looks like a flag
+
if prefix.starts_with('-') {
+
is_command_pos = false;
+
} else {
+
// Assume command if it's garbage but not a flag (e.g. typing a new command)
+
is_command_pos = true;
+
}
+
}
+
_ => {
+
is_command_pos = false;
+
}
+
}
+
break;
+
}
+
}
+
+
// Fallback to Lexer if in whitespace
+
if !found_shape {
+
let (tokens, _err) = lex(input.as_bytes(), 0, &[], &[], true);
+
let last_token = tokens.iter().filter(|t| t.span.end <= byte_pos).last();
+
+
if let Some(token) = last_token {
+
match token.contents {
+
TokenContents::Pipe
+
| TokenContents::PipePipe
+
| TokenContents::Semicolon
+
| TokenContents::Eol => {
+
is_command_pos = true;
+
}
+
_ => {
+
let text = &input[token.span.start..token.span.end];
+
if text == "{" || text == "(" || text == ";" || text == "&&" || text == "||" {
+
is_command_pos = true;
+
} else {
+
is_command_pos = false;
+
}
+
}
+
}
+
} else {
+
is_command_pos = true; // Start of input
+
}
+
}
+
+
let mut suggestions: Vec<Suggestion> = Vec::new();
+
+
// Convert byte-spans back to char-spans for JS
+
let to_char_span = |start: usize, end: usize| -> (usize, usize) {
+
let char_start = input[..start].chars().count();
+
let char_end = input[..end].chars().count();
+
(char_start, char_end)
+
};
+
+
let (span_start, span_end) = to_char_span(current_span.start, current_span.end);
+
+
let mut add_cmd_suggestion = |name: Vec<u8>, desc: Option<String>| {
+
let name = String::from_utf8_lossy(&name).to_string();
+
suggestions.push(Suggestion {
+
rendered: {
+
let name = ansi_term::Color::Green.bold().paint(&name);
+
let desc = desc.as_deref().unwrap_or("<no description>");
+
format!("{name} {desc}")
+
},
+
name: name.clone(), // Replacement text is just the name
+
description: desc,
+
is_command: true,
+
span_start,
+
span_end,
+
});
+
};
+
+
let working_set = StateWorkingSet::new(&engine_guard);
+
+
if is_command_pos {
+
for (_, name, desc, _) in working_set
+
.find_commands_by_predicate(|value| value.starts_with(prefix.as_bytes()), true)
+
{
+
add_cmd_suggestion(name, desc);
+
}
+
} else {
+
// File completion
+
// Split prefix into directory and file part
+
let (dir, file_prefix) = if let Some(idx) = prefix.rfind('/') {
+
(&prefix[..idx + 1], &prefix[idx + 1..])
+
} else {
+
("", prefix.as_str())
+
};
+
+
// Fix: Clean up the directory path before joining.
+
// VFS often fails if 'join' is called with a trailing slash (e.g. "a/") because it interprets it as "a" + ""
+
let dir_to_join = if dir.len() > 1 && dir.ends_with('/') {
+
&dir[..dir.len() - 1]
+
} else {
+
dir
+
};
+
+
let target_dir = if !dir.is_empty() {
+
match root.join(dir_to_join) {
+
Ok(d) => {
+
if let Ok(true) = d.is_dir() {
+
Some(d)
+
} else {
+
None
+
}
+
}
+
Err(_) => None,
+
}
+
} else {
+
// If prefix is empty, list current directory
+
Some(root.join("").unwrap())
+
};
+
+
if let Some(d) = target_dir {
+
if let Ok(iterator) = d.read_dir() {
+
for entry in iterator {
+
let name = entry.filename();
+
if name.starts_with(file_prefix) {
+
let full_completion = format!("{}{}", dir, name);
+
suggestions.push(Suggestion {
+
name: full_completion.clone(),
+
description: None,
+
is_command: false,
+
rendered: full_completion,
+
span_start,
+
span_end,
+
})
+
}
+
}
+
}
+
}
+
}
+
+
suggestions.sort();
+
+
serde_json::to_string(&suggestions).unwrap_or_else(|_| "[]".to_string())
+
}
+370
dysnomia/src/default_context.rs
···
+
use nu_command::*;
+
use nu_protocol::engine::{EngineState, StateWorkingSet};
+
+
pub fn add_shell_command_context(mut engine_state: EngineState) -> EngineState {
+
let delta = {
+
let mut working_set = StateWorkingSet::new(&engine_state);
+
+
macro_rules! bind_command {
+
( $( $command:expr ),* $(,)? ) => {
+
$( working_set.add_decl(Box::new($command)); )*
+
};
+
}
+
+
// If there are commands that have the same name as default declarations,
+
// they have to be registered before the main declarations. This helps to make
+
// them only accessible if the correct input value category is used with the
+
// declaration
+
+
// Database-related
+
// Adds all related commands to query databases
+
// add_database_decls(&mut working_set);
+
+
// Charts
+
bind_command! {
+
Histogram
+
}
+
+
// Filters
+
bind_command! {
+
All,
+
Any,
+
Append,
+
Chunks,
+
Columns,
+
Compact,
+
Default,
+
Drop,
+
DropColumn,
+
DropNth,
+
Each,
+
Enumerate,
+
Every,
+
Filter,
+
Find,
+
First,
+
Flatten,
+
Get,
+
GroupBy,
+
Headers,
+
Insert,
+
IsEmpty,
+
IsNotEmpty,
+
Interleave,
+
Items,
+
Join,
+
Take,
+
Merge,
+
MergeDeep,
+
Move,
+
TakeWhile,
+
TakeUntil,
+
Last,
+
Length,
+
Lines,
+
ParEach,
+
ChunkBy,
+
Prepend,
+
Reduce,
+
Reject,
+
Rename,
+
Reverse,
+
Select,
+
Skip,
+
SkipUntil,
+
SkipWhile,
+
Slice,
+
Sort,
+
SortBy,
+
SplitList,
+
Tee,
+
Transpose,
+
Uniq,
+
UniqBy,
+
Upsert,
+
Update,
+
Values,
+
Where,
+
Window,
+
Wrap,
+
Zip,
+
};
+
+
// Misc
+
bind_command! {
+
Panic,
+
};
+
+
// Path
+
bind_command! {
+
Path,
+
PathBasename,
+
PathSelf,
+
PathDirname,
+
PathExists,
+
PathExpand,
+
PathJoin,
+
PathParse,
+
PathRelativeTo,
+
PathSplit,
+
PathType,
+
};
+
+
// Help
+
bind_command! {
+
Help,
+
HelpAliases,
+
HelpExterns,
+
HelpCommands,
+
HelpModules,
+
HelpOperators,
+
HelpPipeAndRedirect,
+
HelpEscapes,
+
};
+
+
// Debug
+
bind_command! {
+
Ast,
+
Debug,
+
DebugEnv,
+
DebugExperimentalOptions,
+
DebugInfo,
+
DebugProfile,
+
Explain,
+
Inspect,
+
Metadata,
+
MetadataAccess,
+
MetadataSet,
+
TimeIt,
+
View,
+
ViewBlocks,
+
ViewFiles,
+
ViewIr,
+
ViewSource,
+
ViewSpan,
+
};
+
+
// Strings
+
bind_command! {
+
Ansi,
+
AnsiLink,
+
AnsiStrip,
+
Char,
+
Decode,
+
Encode,
+
DecodeHex,
+
EncodeHex,
+
DecodeBase32,
+
EncodeBase32,
+
DecodeBase32Hex,
+
EncodeBase32Hex,
+
DecodeBase64,
+
EncodeBase64,
+
Detect,
+
DetectColumns,
+
DetectType,
+
Parse,
+
Split,
+
SplitChars,
+
SplitColumn,
+
SplitRow,
+
SplitWords,
+
Str,
+
StrCapitalize,
+
StrContains,
+
StrDistance,
+
StrDowncase,
+
StrEndswith,
+
StrExpand,
+
StrJoin,
+
StrReplace,
+
StrIndexOf,
+
StrLength,
+
StrReverse,
+
StrStats,
+
StrStartsWith,
+
StrSubstring,
+
StrTrim,
+
StrUpcase,
+
Format,
+
FormatDate,
+
FormatDuration,
+
FormatFilesize,
+
};
+
+
// Date
+
bind_command! {
+
Date,
+
DateFromHuman,
+
DateHumanize,
+
DateListTimezones,
+
DateNow,
+
DateToTimezone,
+
};
+
+
// Formats
+
bind_command! {
+
From,
+
FromCsv,
+
FromJson,
+
FromMsgpack,
+
FromMsgpackz,
+
FromNuon,
+
FromOds,
+
FromSsv,
+
FromToml,
+
FromTsv,
+
FromXlsx,
+
FromXml,
+
FromYaml,
+
FromYml,
+
To,
+
ToCsv,
+
ToJson,
+
ToMd,
+
ToMsgpack,
+
ToMsgpackz,
+
ToNuon,
+
ToText,
+
ToToml,
+
ToTsv,
+
Upsert,
+
Where,
+
ToXml,
+
ToYaml,
+
ToYml,
+
};
+
+
// Viewers
+
bind_command! {
+
Griddle,
+
Table,
+
};
+
+
// Conversions
+
bind_command! {
+
Fill,
+
Into,
+
IntoBool,
+
IntoBinary,
+
IntoCellPath,
+
IntoDatetime,
+
IntoDuration,
+
IntoFloat,
+
IntoFilesize,
+
IntoInt,
+
IntoRecord,
+
IntoString,
+
IntoGlob,
+
IntoValue,
+
SplitCellPath,
+
};
+
+
// Env
+
bind_command! {
+
ExportEnv,
+
LoadEnv,
+
SourceEnv,
+
WithEnv,
+
ConfigNu,
+
ConfigEnv,
+
ConfigFlatten,
+
ConfigMeta,
+
ConfigReset,
+
ConfigUseColors,
+
};
+
+
// Math
+
bind_command! {
+
Math,
+
MathAbs,
+
MathAvg,
+
MathCeil,
+
MathFloor,
+
MathMax,
+
MathMedian,
+
MathMin,
+
MathMode,
+
MathProduct,
+
MathRound,
+
MathSqrt,
+
MathStddev,
+
MathSum,
+
MathVariance,
+
MathLog,
+
};
+
+
// Bytes
+
bind_command! {
+
Bytes,
+
BytesLen,
+
BytesSplit,
+
BytesStartsWith,
+
BytesEndsWith,
+
BytesReverse,
+
BytesReplace,
+
BytesAdd,
+
BytesAt,
+
BytesIndexOf,
+
BytesCollect,
+
BytesRemove,
+
BytesBuild
+
}
+
+
bind_command! {
+
Url,
+
UrlBuildQuery,
+
UrlSplitQuery,
+
UrlDecode,
+
UrlEncode,
+
UrlJoin,
+
UrlParse,
+
}
+
+
// Generators
+
bind_command! {
+
Cal,
+
Seq,
+
SeqDate,
+
SeqChar,
+
Generate,
+
};
+
+
// Hash
+
bind_command! {
+
Hash,
+
HashMd5::default(),
+
HashSha256::default(),
+
};
+
+
// Removed
+
bind_command! {
+
LetEnv,
+
DateFormat,
+
};
+
+
// bind_command! {
+
// Stor,
+
// StorCreate,
+
// StorDelete,
+
// StorExport,
+
// StorImport,
+
// StorInsert,
+
// StorOpen,
+
// StorReset,
+
// StorUpdate,
+
// };
+
+
working_set.render()
+
};
+
+
if let Err(err) = engine_state.merge_delta(delta) {
+
eprintln!("Error creating default context: {err:?}");
+
}
+
+
// Cache the table decl id so we don't have to look it up later
+
let table_decl_id = engine_state.find_decl("table".as_bytes(), &[]);
+
engine_state.table_decl_id = table_decl_id;
+
+
engine_state
+
}
+78
dysnomia/src/error.rs
···
+
use miette::{GraphicalReportHandler, Report, SourceCode, SourceSpan, SpanContents};
+
+
pub struct CommandError {
+
pub error: Report,
+
pub start_offset: usize,
+
}
+
+
pub struct OffsetSource {
+
pub source: String,
+
pub start_offset: usize,
+
}
+
+
pub struct OffsetSpanContents<'a> {
+
inner: Box<dyn SpanContents<'a> + 'a>,
+
global_span: SourceSpan,
+
}
+
+
impl<'a> SpanContents<'a> for OffsetSpanContents<'a> {
+
fn data(&self) -> &'a [u8] {
+
self.inner.data()
+
}
+
fn span(&self) -> &SourceSpan {
+
&self.global_span
+
}
+
fn line(&self) -> usize {
+
self.inner.line()
+
}
+
fn column(&self) -> usize {
+
self.inner.column()
+
}
+
fn line_count(&self) -> usize {
+
self.inner.line_count()
+
}
+
}
+
+
impl SourceCode for OffsetSource {
+
fn read_span<'b>(
+
&'b self,
+
span: &SourceSpan,
+
context_lines_before: usize,
+
context_lines_after: usize,
+
) -> Result<Box<dyn miette::SpanContents<'b> + 'b>, miette::MietteError> {
+
let local_start = span.offset().saturating_sub(self.start_offset);
+
let local_len = std::cmp::min(span.len(), self.source.len().saturating_sub(local_start));
+
let local_span = SourceSpan::new(local_start.into(), local_len);
+
+
let local_contents =
+
self.source
+
.read_span(&local_span, context_lines_before, context_lines_after)?;
+
+
let content_local_span = local_contents.span();
+
let global_start = content_local_span.offset() + self.start_offset;
+
let global_span = SourceSpan::new(global_start.into(), content_local_span.len());
+
+
Ok(Box::new(OffsetSpanContents {
+
inner: local_contents,
+
global_span,
+
}))
+
}
+
}
+
+
pub fn format_error(error: Report, input: String, start_offset: usize) -> String {
+
let handler = GraphicalReportHandler::new()
+
.with_theme(miette::GraphicalTheme::unicode())
+
.with_cause_chain();
+
+
let source = OffsetSource {
+
source: input,
+
start_offset,
+
};
+
+
let report_with_source = error.with_source_code(source);
+
let mut output = String::new();
+
handler
+
.render_report(&mut output, report_with_source.as_ref())
+
.unwrap();
+
output
+
}
+189
dysnomia/src/globals.rs
···
+
use futures::stream::AbortHandle;
+
use nu_protocol::{
+
ShellError, Span,
+
engine::{EngineState, StateDelta},
+
};
+
use std::{
+
collections::HashMap,
+
sync::{
+
Arc, Mutex, OnceLock, RwLock,
+
atomic::{AtomicUsize, Ordering},
+
},
+
time::{Duration, SystemTime, UNIX_EPOCH},
+
};
+
use vfs::{VfsError, VfsPath, error::VfsErrorKind};
+
use wasm_bindgen::prelude::*;
+
+
use crate::memory_fs::MemoryFS;
+
+
static ROOT: OnceLock<Arc<VfsPath>> = OnceLock::new();
+
+
pub fn get_vfs() -> Arc<VfsPath> {
+
ROOT.get_or_init(|| Arc::new(VfsPath::new(MemoryFS::new())))
+
.clone()
+
}
+
+
static PWD: OnceLock<RwLock<Arc<VfsPath>>> = OnceLock::new();
+
+
pub fn get_pwd() -> Arc<VfsPath> {
+
PWD.get_or_init(|| RwLock::new(get_vfs()))
+
.read()
+
.unwrap()
+
.clone()
+
}
+
+
pub fn set_pwd(path: Arc<VfsPath>) {
+
*PWD.get_or_init(|| RwLock::new(get_vfs())).write().unwrap() = path;
+
}
+
+
pub fn to_shell_err(span: Span) -> impl Fn(VfsError) -> ShellError {
+
move |vfs_error: VfsError| ShellError::GenericError {
+
error: (match vfs_error.kind() {
+
VfsErrorKind::DirectoryExists
+
| VfsErrorKind::FileExists
+
| VfsErrorKind::FileNotFound
+
| VfsErrorKind::InvalidPath => "path error",
+
_ => "io error",
+
})
+
.to_string(),
+
msg: vfs_error.to_string(),
+
span: Some(span),
+
help: None,
+
inner: vec![],
+
}
+
}
+
+
pub struct TaskInfo {
+
pub id: usize,
+
pub description: String,
+
pub handle: AbortHandle,
+
}
+
+
pub struct CallbackWrapper(js_sys::Function);
+
unsafe impl Send for CallbackWrapper {}
+
unsafe impl Sync for CallbackWrapper {}
+
+
static NEXT_TASK_ID: AtomicUsize = AtomicUsize::new(1);
+
static TASK_REGISTRY: OnceLock<Mutex<HashMap<usize, TaskInfo>>> = OnceLock::new();
+
static TASK_CALLBACK: OnceLock<Mutex<Option<CallbackWrapper>>> = OnceLock::new();
+
+
pub fn get_registry() -> &'static Mutex<HashMap<usize, TaskInfo>> {
+
TASK_REGISTRY.get_or_init(|| Mutex::new(HashMap::new()))
+
}
+
+
#[wasm_bindgen]
+
pub fn register_task_count_callback(f: js_sys::Function) {
+
let _ = TASK_CALLBACK.get_or_init(|| Mutex::new(None));
+
if let Ok(mut guard) = TASK_CALLBACK.get().unwrap().lock() {
+
*guard = Some(CallbackWrapper(f));
+
}
+
}
+
+
pub fn notify_task_count() {
+
if let Some(mutex) = TASK_CALLBACK.get() {
+
if let Ok(guard) = mutex.lock() {
+
if let Some(cb) = guard.as_ref() {
+
let count = if let Ok(reg) = get_registry().lock() {
+
reg.len()
+
} else {
+
0
+
};
+
let this = JsValue::NULL;
+
let arg = JsValue::from(count as u32);
+
let _ = cb.0.call1(&this, &arg);
+
}
+
}
+
}
+
}
+
+
pub fn register_task(description: String, handle: AbortHandle) -> usize {
+
let id = NEXT_TASK_ID.fetch_add(1, Ordering::Relaxed);
+
if let Ok(mut reg) = get_registry().lock() {
+
reg.insert(
+
id,
+
TaskInfo {
+
id,
+
description,
+
handle,
+
},
+
);
+
}
+
notify_task_count();
+
id
+
}
+
+
pub fn remove_task(id: usize) {
+
if let Ok(mut reg) = get_registry().lock() {
+
reg.remove(&id);
+
}
+
notify_task_count();
+
}
+
+
pub fn get_all_tasks() -> Vec<(usize, String)> {
+
if let Ok(reg) = get_registry().lock() {
+
reg.values()
+
.map(|t| (t.id, t.description.clone()))
+
.collect()
+
} else {
+
vec![]
+
}
+
}
+
+
pub fn kill_task_by_id(id: usize) -> bool {
+
if let Ok(mut reg) = get_registry().lock() {
+
if let Some(task) = reg.remove(&id) {
+
task.handle.abort();
+
drop(reg);
+
notify_task_count();
+
return true;
+
}
+
}
+
false
+
}
+
+
static PENDING_DELTAS: OnceLock<Mutex<Vec<StateDelta>>> = OnceLock::new();
+
+
pub fn queue_delta(delta: StateDelta) {
+
let _ = PENDING_DELTAS.get_or_init(|| Mutex::new(Vec::new()));
+
if let Ok(mut guard) = PENDING_DELTAS.get().unwrap().lock() {
+
guard.push(delta);
+
}
+
}
+
+
pub fn apply_pending_deltas(engine_state: &mut EngineState) -> Result<(), ShellError> {
+
if let Some(mutex) = PENDING_DELTAS.get() {
+
if let Ok(mut guard) = mutex.lock() {
+
for delta in guard.drain(..) {
+
engine_state.merge_delta(delta)?;
+
}
+
}
+
}
+
Ok(())
+
}
+
+
pub static CONSOLE_CALLBACK: OnceLock<Mutex<Option<CallbackWrapper>>> = OnceLock::new();
+
+
#[wasm_bindgen]
+
pub fn register_console_callback(f: js_sys::Function) {
+
let _ = CONSOLE_CALLBACK.get_or_init(|| Mutex::new(None));
+
if let Ok(mut guard) = CONSOLE_CALLBACK.get().unwrap().lock() {
+
*guard = Some(CallbackWrapper(f));
+
}
+
}
+
+
pub fn print_to_console(msg: &str, is_cmd: bool) {
+
if let Some(mutex) = CONSOLE_CALLBACK.get() {
+
if let Ok(guard) = mutex.lock() {
+
if let Some(cb) = guard.as_ref() {
+
let this = JsValue::NULL;
+
let arg = JsValue::from_str(msg);
+
let arg2 = JsValue::from_bool(is_cmd);
+
let _ = cb.0.call2(&this, &arg, &arg2);
+
}
+
}
+
}
+
}
+
+
pub fn current_time() -> Option<SystemTime> {
+
UNIX_EPOCH.checked_add(Duration::from_millis(js_sys::Date::now() as u64))
+
}
+72
dysnomia/src/highlight.rs
···
+
use super::*;
+
+
#[wasm_bindgen]
+
pub fn highlight(input: &str) -> String {
+
let engine_guard = ENGINE_STATE
+
.get()
+
.unwrap()
+
.lock()
+
.expect("engine state initialized");
+
let mut working_set = StateWorkingSet::new(&engine_guard);
+
+
// Capture the global offset before parsing, as parse will generate spans relative to this
+
let global_offset = working_set.next_span_start();
+
+
// Parse the input block using Nushell's full parser
+
let block = parse(&mut working_set, None, input.as_bytes(), false);
+
+
// Flatten the block to get shapes (semantic tokens)
+
let shapes = flatten_block(&working_set, &block);
+
+
let mut output = String::new();
+
let mut last_end = 0;
+
+
for (span, shape) in shapes {
+
// Adjust global span to local byte indices
+
let local_start = span.start.saturating_sub(global_offset);
+
let local_end = span.end.saturating_sub(global_offset);
+
+
if local_start >= input.len() {
+
continue;
+
}
+
let safe_end = std::cmp::min(local_end, input.len());
+
+
if local_start > last_end {
+
output.push_str(&input[last_end..local_start]);
+
}
+
+
let start_index = std::cmp::max(local_start, last_end);
+
if start_index >= safe_end {
+
continue;
+
}
+
+
// Colors corresponding to standard Nushell/Ansi map
+
let color = match shape {
+
FlatShape::Pipe | FlatShape::Redirection => "\x1b[35m", // Magenta
+
FlatShape::Bool | FlatShape::Int | FlatShape::Float => "\x1b[35;1m", // Light Magenta (Numbers/Bool)
+
FlatShape::External(_) | FlatShape::InternalCall(_) | FlatShape::Keyword => {
+
"\x1b[32;1m"
+
} // Green Bold
+
FlatShape::String | FlatShape::StringInterpolation | FlatShape::RawString => "\x1b[36m", // Cyan
+
FlatShape::Variable(_) | FlatShape::Flag => "\x1b[34m", // Blue
+
FlatShape::Garbage => "\x1b[31;1m\x1b[47m", // Red on White
+
FlatShape::Signature => "\x1b[33;1m", // Yellow Bold
+
// Closures, blocks, punctuation often fall here
+
FlatShape::Block => "\x1b[37m", // White
+
FlatShape::Closure => "\x1b[36;1m", // Light Cyan
+
_ => "\x1b[0m",
+
};
+
+
output.push_str(color);
+
output.push_str(&input[start_index..safe_end]);
+
output.push_str("\x1b[0m");
+
+
last_end = safe_end;
+
}
+
+
if last_end < input.len() {
+
output.push_str(&input[last_end..]);
+
}
+
+
output
+
}
+249
dysnomia/src/lib.rs
···
+
use jacquard::chrono;
+
use miette::Report;
+
use nu_cmd_extra::add_extra_command_context;
+
use nu_cmd_lang::create_default_context;
+
use nu_engine::{command_prelude::*, eval_block};
+
use nu_parser::{FlatShape, TokenContents, flatten_block, lex, parse};
+
use nu_protocol::{
+
Config, PipelineData, Span,
+
engine::{Call, EngineState, Stack, StateWorkingSet},
+
};
+
use serde::Serialize;
+
use std::{
+
sync::{Arc, Mutex, OnceLock},
+
time::UNIX_EPOCH,
+
};
+
use vfs::VfsError;
+
use wasm_bindgen::prelude::*;
+
+
pub mod cmd;
+
pub mod completion;
+
pub mod default_context;
+
pub mod error;
+
pub mod globals;
+
pub mod highlight;
+
pub mod memory_fs;
+
+
use crate::{
+
cmd::{
+
Cd, Fetch, Job, JobKill, JobList, Ls, Mkdir, Open, Pwd, Random, Rm, Save, Source, Sys,
+
Version,
+
},
+
default_context::add_shell_command_context,
+
error::format_error,
+
globals::{apply_pending_deltas, current_time, get_pwd, print_to_console},
+
};
+
use error::CommandError;
+
use globals::get_vfs;
+
+
static ENGINE_STATE: OnceLock<Mutex<EngineState>> = OnceLock::new();
+
static STACK: OnceLock<Mutex<Stack>> = OnceLock::new();
+
+
fn init_engine_internal() -> Result<(), Report> {
+
let mut engine_state = create_default_context();
+
engine_state = add_shell_command_context(engine_state);
+
engine_state = add_extra_command_context(engine_state);
+
+
let write_file = |name: &str, contents: &str| {
+
get_vfs()
+
.join(name)
+
.and_then(|p| p.create_file())
+
.and_then(|mut f| f.write_all(contents.as_bytes()).map_err(VfsError::from))
+
.map_err(|e| miette::miette!(e.to_string()))
+
};
+
+
let access_log = format!(
+
r#"/dysnomia.v000 /user: 90008/ /ip: [REDACTED]/ /time: [REDACTED]//
+
/dysnomia.v002 /user: 90008/ /ip: [REDACTED]/ /time: [REDACTED]//
+
/dysnomia.v011 /user: 90008/ /ip: [REDACTED]/ /time: [REDACTED]//
+
[...ENTRIES TRUNCATED...]
+
/dysnomia.v099 /user: anonymous/ /ip: [REDACTED]/ /time: {time}//"#,
+
time = current_time()
+
.and_then(|t| t.duration_since(UNIX_EPOCH).ok())
+
.map_or_else(
+
|| "unknown".to_string(),
+
|time| chrono::DateTime::from_timestamp_nanos(time.as_nanos() as i64)
+
.format("%Y-%m-%dT%H:%M:%SZ")
+
.to_string()
+
)
+
);
+
write_file(".access.log", &access_log)?;
+
+
let welcome_txt = r#"welcome anonymous !
+
+
+
you are interfacing with dysnomia.v099
+
using the nu shell.
+
+
+
a few commands you can try:
+
+
"hello, user!" | save message.txt
+
fetch at://ptr.pet
+
ls --help"#;
+
write_file("welcome.txt", &welcome_txt)?;
+
+
let mut working_set = StateWorkingSet::new(&engine_state);
+
let decls: [Box<dyn Command>; 15] = [
+
Box::new(Ls),
+
Box::new(Open),
+
Box::new(Save),
+
Box::new(Mkdir),
+
Box::new(Pwd),
+
Box::new(Cd),
+
Box::new(Rm),
+
Box::new(Fetch),
+
Box::new(Source),
+
Box::new(Job),
+
Box::new(JobList),
+
Box::new(JobKill),
+
Box::new(Sys),
+
Box::new(Random),
+
Box::new(Version),
+
];
+
for decl in decls {
+
working_set.add_decl(decl);
+
}
+
engine_state.merge_delta(working_set.delta)?;
+
+
let mut config = Config::default();
+
config.use_ansi_coloring = true.into();
+
config.show_banner = nu_protocol::BannerKind::Full;
+
engine_state.config = Arc::new(config);
+
+
ENGINE_STATE
+
.set(Mutex::new(engine_state))
+
.map_err(|_| miette::miette!("ENGINE_STATE was already set!?"))?;
+
STACK
+
.set(Mutex::new(Stack::new()))
+
.map_err(|_| miette::miette!("STACK was already set!?"))?;
+
+
// web_sys::console::log_1(&"Hello, World!".into());
+
+
Ok(())
+
}
+
+
#[wasm_bindgen]
+
pub fn init_engine() -> String {
+
console_error_panic_hook::set_once();
+
init_engine_internal().map_or_else(|err| format!("error: {err}"), |_| String::new())
+
}
+
+
fn run_command_internal(
+
engine_state: &mut EngineState,
+
stack: &mut Stack,
+
input: &str,
+
) -> Result<(), CommandError> {
+
// apply any pending deltas from previous commands (like `source`)
+
apply_pending_deltas(engine_state).map_err(|e| CommandError {
+
error: Report::new(e),
+
start_offset: 0,
+
})?;
+
// set PWD
+
engine_state.add_env_var(
+
"PWD".to_string(),
+
get_pwd_string().into_value(Span::unknown()),
+
);
+
+
let mut working_set = StateWorkingSet::new(engine_state);
+
+
// Capture the start offset *before* adding the file, as this is the global offset
+
// where our file begins.
+
let start_offset = working_set.next_span_start();
+
let block = parse(&mut working_set, Some("entry"), input.as_bytes(), false);
+
+
let cmd_err = |err: ShellError| CommandError {
+
error: Report::new(err),
+
start_offset,
+
};
+
+
if let Some(err) = working_set.parse_errors.into_iter().next() {
+
return Err(CommandError {
+
error: Report::new(err),
+
start_offset,
+
});
+
}
+
if let Some(err) = working_set.compile_errors.into_iter().next() {
+
return Err(CommandError {
+
error: Report::new(err),
+
start_offset,
+
});
+
}
+
+
engine_state
+
.merge_delta(working_set.delta)
+
.map_err(cmd_err)?;
+
let result = eval_block::<nu_protocol::debugger::WithoutDebug>(
+
engine_state,
+
stack,
+
&block,
+
PipelineData::Empty,
+
);
+
+
let pipeline_data = result.map_err(cmd_err)?;
+
let table_command = nu_command::Table;
+
let call = Call::new(pipeline_data.span().unwrap_or_else(Span::unknown));
+
+
let res = table_command
+
.run(engine_state, stack, &call, pipeline_data.body)
+
.map_err(cmd_err)?;
+
+
match res {
+
PipelineData::Empty => {}
+
PipelineData::Value(v, _) => {
+
print_to_console(&v.to_expanded_string("\n", &engine_state.config), true)
+
}
+
PipelineData::ByteStream(s, _) => {
+
for line in s.lines().into_iter().flatten() {
+
let out = line.map_err(|e| CommandError {
+
error: Report::new(e),
+
start_offset,
+
})?;
+
print_to_console(&out, true);
+
}
+
}
+
PipelineData::ListStream(s, _) => {
+
for item in s.into_iter() {
+
let out = item.to_expanded_string("\n", &engine_state.config);
+
print_to_console(&out, true);
+
}
+
}
+
}
+
+
Ok(())
+
}
+
+
#[wasm_bindgen]
+
pub fn run_command(input: &str) -> Option<String> {
+
let (mut engine_guard, mut stack_guard) = (
+
ENGINE_STATE
+
.get()
+
.unwrap()
+
.lock()
+
.expect("engine state initialized"),
+
STACK.get().unwrap().lock().expect("stack initialized"),
+
);
+
+
let result = std::panic::catch_unwind(move || {
+
match run_command_internal(&mut engine_guard, &mut stack_guard, input) {
+
Ok(_) => None,
+
Err(cmd_err) => Some(format_error(
+
cmd_err.error,
+
input.to_owned(),
+
cmd_err.start_offset,
+
)),
+
}
+
});
+
result.unwrap_or_else(|err| Some(format!("panicked: {err:?}")))
+
}
+
+
#[wasm_bindgen]
+
pub fn get_pwd_string() -> String {
+
// web_sys::console::log_1(&"before pwd".into());
+
let pwd = get_pwd();
+
// web_sys::console::log_1(&"after pwd".into());
+
if pwd.is_root() {
+
return "/".to_string();
+
}
+
pwd.as_str().to_string()
+
}
+390
dysnomia/src/memory_fs.rs
···
+
//! An ephemeral in-memory file system, intended mainly for unit tests
+
+
use core::cmp;
+
use std::fmt;
+
use std::fmt::{Debug, Formatter};
+
use std::io::{Cursor, Read, Seek, SeekFrom, Write};
+
use std::mem::swap;
+
use std::sync::Arc;
+
use std::time::SystemTime;
+
use vfs::error::VfsErrorKind;
+
use vfs::{FileSystem, VfsFileType};
+
use vfs::{SeekAndRead, VfsMetadata};
+
use vfs::{SeekAndWrite, VfsResult};
+
+
use crate::globals::current_time;
+
+
type MemoryFsHandle = Arc<MemoryFsImpl>;
+
+
/// An ephemeral in-memory file system, intended mainly for unit tests
+
pub struct MemoryFS {
+
handle: MemoryFsHandle,
+
}
+
+
impl Debug for MemoryFS {
+
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
+
f.write_str("In Memory File System")
+
}
+
}
+
+
impl MemoryFS {
+
/// Create a new in-memory filesystem
+
pub fn new() -> Self {
+
MemoryFS {
+
handle: Arc::new(MemoryFsImpl::new()),
+
}
+
}
+
+
fn ensure_has_parent(&self, path: &str) -> VfsResult<()> {
+
let separator = path.rfind('/');
+
if let Some(index) = separator {
+
if self.exists(&path[..index])? {
+
return Ok(());
+
}
+
}
+
Err(VfsErrorKind::Other("Parent path does not exist".into()).into())
+
}
+
}
+
+
impl Default for MemoryFS {
+
fn default() -> Self {
+
Self::new()
+
}
+
}
+
+
struct WritableFile {
+
content: Cursor<Vec<u8>>,
+
destination: String,
+
fs: MemoryFsHandle,
+
}
+
+
impl Seek for WritableFile {
+
fn seek(&mut self, pos: SeekFrom) -> std::io::Result<u64> {
+
self.content.seek(pos)
+
}
+
}
+
+
impl Write for WritableFile {
+
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
+
self.content.write(buf)
+
}
+
+
fn flush(&mut self) -> std::io::Result<()> {
+
self.content.flush()?;
+
let mut content = self.content.get_ref().clone();
+
swap(&mut content, self.content.get_mut());
+
let content = Arc::new(content);
+
+
let new_file = self
+
.fs
+
.files
+
.peek_with(&self.destination, |_, previous_file| MemoryFile {
+
file_type: VfsFileType::File,
+
content: content.clone(),
+
created: previous_file.created,
+
modified: current_time(),
+
accessed: previous_file.accessed,
+
})
+
.unwrap_or_else(|| {
+
let time = current_time();
+
MemoryFile {
+
file_type: VfsFileType::File,
+
content,
+
created: time,
+
modified: time,
+
accessed: None,
+
}
+
});
+
+
// Remove old entry if it exists, then insert new one
+
self.fs.files.remove_sync(&self.destination);
+
let _ = self
+
.fs
+
.files
+
.insert_sync(self.destination.clone(), new_file);
+
Ok(())
+
}
+
}
+
+
impl Drop for WritableFile {
+
fn drop(&mut self) {
+
self.flush()
+
.expect("Flush failed while dropping in-memory file");
+
}
+
}
+
+
struct ReadableFile {
+
#[allow(clippy::rc_buffer)] // to allow accessing the same object as writable
+
content: Arc<Vec<u8>>,
+
position: u64,
+
}
+
+
impl ReadableFile {
+
fn len(&self) -> u64 {
+
self.content.len() as u64 - self.position
+
}
+
}
+
+
impl Read for ReadableFile {
+
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
+
let amt = cmp::min(buf.len(), self.len() as usize);
+
+
if amt == 1 {
+
buf[0] = self.content[self.position as usize];
+
} else {
+
buf[..amt].copy_from_slice(
+
&self.content.as_slice()[self.position as usize..self.position as usize + amt],
+
);
+
}
+
self.position += amt as u64;
+
Ok(amt)
+
}
+
}
+
+
impl Seek for ReadableFile {
+
fn seek(&mut self, pos: SeekFrom) -> std::io::Result<u64> {
+
match pos {
+
SeekFrom::Start(offset) => self.position = offset,
+
SeekFrom::Current(offset) => self.position = (self.position as i64 + offset) as u64,
+
SeekFrom::End(offset) => self.position = (self.content.len() as i64 + offset) as u64,
+
}
+
Ok(self.position)
+
}
+
}
+
+
impl FileSystem for MemoryFS {
+
fn read_dir(&self, path: &str) -> VfsResult<Box<dyn Iterator<Item = String> + Send>> {
+
let prefix = format!("{}/", path);
+
+
// Ensure the directory exists
+
if !self.handle.files.contains(path) {
+
return Err(VfsErrorKind::FileNotFound.into());
+
}
+
+
let guard = scc::Guard::new();
+
let mut entries = Vec::new();
+
+
let range_start = prefix.clone();
+
for (candidate_path, _) in self.handle.files.range(range_start.., &guard) {
+
if candidate_path.starts_with(&prefix) {
+
let rest = &candidate_path[prefix.len()..];
+
if !rest.contains('/') {
+
entries.push(rest.to_string());
+
}
+
} else {
+
// we are in a different directory if the prefix doesnt match
+
break;
+
}
+
}
+
+
Ok(Box::new(entries.into_iter()))
+
}
+
+
fn create_dir(&self, path: &str) -> VfsResult<()> {
+
self.ensure_has_parent(path)?;
+
+
// Check if path already exists and return appropriate error
+
if let Some(result) = self
+
.handle
+
.files
+
.peek_with(path, |_, file| match file.file_type {
+
VfsFileType::File => Err(VfsErrorKind::FileExists.into()),
+
VfsFileType::Directory => Err(VfsErrorKind::DirectoryExists.into()),
+
})
+
{
+
return result;
+
}
+
+
let new_dir = MemoryFile {
+
file_type: VfsFileType::Directory,
+
content: Default::default(),
+
created: current_time(),
+
modified: current_time(),
+
accessed: current_time(),
+
};
+
+
self.handle
+
.files
+
.insert_sync(path.to_string(), new_dir)
+
.map_err(|_| VfsErrorKind::DirectoryExists.into())
+
}
+
+
fn open_file(&self, path: &str) -> VfsResult<Box<dyn SeekAndRead + Send>> {
+
if let Some(time) = current_time() {
+
let _ = self.set_access_time(path, time);
+
}
+
+
let content = self
+
.handle
+
.files
+
.peek_with(path, |_, file| {
+
ensure_file(file)?;
+
VfsResult::Ok(file.content.clone())
+
})
+
.ok_or(VfsErrorKind::FileNotFound)??;
+
+
Ok(Box::new(ReadableFile {
+
content,
+
position: 0,
+
}))
+
}
+
+
fn create_file(&self, path: &str) -> VfsResult<Box<dyn SeekAndWrite + Send>> {
+
self.ensure_has_parent(path)?;
+
let content = Arc::new(Vec::<u8>::new());
+
let new_file = MemoryFile {
+
file_type: VfsFileType::File,
+
content,
+
created: current_time(),
+
modified: current_time(),
+
accessed: current_time(),
+
};
+
+
// Remove old entry if it exists, then insert new one
+
self.handle.files.remove_sync(path);
+
let _ = self.handle.files.insert_sync(path.to_string(), new_file);
+
+
let writer = WritableFile {
+
content: Cursor::new(vec![]),
+
destination: path.to_string(),
+
fs: self.handle.clone(),
+
};
+
Ok(Box::new(writer))
+
}
+
+
fn append_file(&self, path: &str) -> VfsResult<Box<dyn SeekAndWrite + Send>> {
+
let content = self
+
.handle
+
.files
+
.peek_with(path, |_, file| file.content.clone())
+
.ok_or(VfsErrorKind::FileNotFound)?;
+
let mut content = Cursor::new(content.as_slice().to_vec());
+
content.seek(SeekFrom::End(0))?;
+
let writer = WritableFile {
+
content,
+
destination: path.to_string(),
+
fs: self.handle.clone(),
+
};
+
Ok(Box::new(writer))
+
}
+
+
fn metadata(&self, path: &str) -> VfsResult<VfsMetadata> {
+
self.handle
+
.files
+
.peek_with(path, |_, file| VfsMetadata {
+
file_type: file.file_type,
+
len: file.content.len() as u64,
+
modified: file.modified,
+
created: file.created,
+
accessed: file.accessed,
+
})
+
.ok_or(VfsErrorKind::FileNotFound.into())
+
}
+
+
fn set_creation_time(&self, path: &str, time: SystemTime) -> VfsResult<()> {
+
let updated = self
+
.handle
+
.files
+
.peek_with(path, |_, file| MemoryFile {
+
created: Some(time),
+
..file.clone()
+
})
+
.ok_or(VfsErrorKind::FileNotFound)?;
+
+
self.handle.files.remove_sync(path);
+
let _ = self.handle.files.insert_sync(path.to_string(), updated);
+
Ok(())
+
}
+
+
fn set_modification_time(&self, path: &str, time: SystemTime) -> VfsResult<()> {
+
let updated = self
+
.handle
+
.files
+
.peek_with(path, |_, file| MemoryFile {
+
modified: Some(time),
+
..file.clone()
+
})
+
.ok_or(VfsErrorKind::FileNotFound)?;
+
+
self.handle.files.remove_sync(path);
+
let _ = self.handle.files.insert_sync(path.to_string(), updated);
+
Ok(())
+
}
+
+
fn set_access_time(&self, path: &str, time: SystemTime) -> VfsResult<()> {
+
let updated = self
+
.handle
+
.files
+
.peek_with(path, |_, file| MemoryFile {
+
accessed: Some(time),
+
..file.clone()
+
})
+
.ok_or(VfsErrorKind::FileNotFound)?;
+
+
self.handle.files.remove_sync(path);
+
let _ = self.handle.files.insert_sync(path.to_string(), updated);
+
Ok(())
+
}
+
+
fn exists(&self, path: &str) -> VfsResult<bool> {
+
Ok(self.handle.files.contains(path))
+
}
+
+
fn remove_file(&self, path: &str) -> VfsResult<()> {
+
self.handle
+
.files
+
.remove_sync(path)
+
.then_some(Ok(()))
+
.unwrap_or_else(|| Err(VfsErrorKind::FileNotFound.into()))
+
}
+
+
fn remove_dir(&self, path: &str) -> VfsResult<()> {
+
if self.read_dir(path)?.next().is_some() {
+
return Err(VfsErrorKind::Other("Directory to remove is not empty".into()).into());
+
}
+
self.handle
+
.files
+
.remove_sync(path)
+
.then_some(Ok(()))
+
.unwrap_or_else(|| Err(VfsErrorKind::FileNotFound.into()))
+
}
+
}
+
+
struct MemoryFsImpl {
+
files: scc::TreeIndex<String, MemoryFile>,
+
}
+
+
impl MemoryFsImpl {
+
pub fn new() -> Self {
+
let files = scc::TreeIndex::new();
+
// Add root directory
+
let _ = files.insert_sync(
+
"".to_string(),
+
MemoryFile {
+
file_type: VfsFileType::Directory,
+
content: Arc::new(vec![]),
+
created: current_time(),
+
modified: None,
+
accessed: None,
+
},
+
);
+
Self { files }
+
}
+
}
+
+
#[derive(Clone)]
+
struct MemoryFile {
+
file_type: VfsFileType,
+
content: Arc<Vec<u8>>,
+
+
created: Option<SystemTime>,
+
modified: Option<SystemTime>,
+
accessed: Option<SystemTime>,
+
}
+
+
fn ensure_file(file: &MemoryFile) -> VfsResult<()> {
+
if file.file_type != VfsFileType::File {
+
return Err(VfsErrorKind::Other("Not a file".into()).into());
+
}
+
Ok(())
+
}
+24
dysnomia/www/.gitignore
···
+
# Logs
+
logs
+
*.log
+
npm-debug.log*
+
yarn-debug.log*
+
yarn-error.log*
+
pnpm-debug.log*
+
lerna-debug.log*
+
+
node_modules
+
dist
+
dist-ssr
+
*.local
+
+
# Editor directories and files
+
.vscode/*
+
!.vscode/extensions.json
+
.idea
+
.DS_Store
+
*.suo
+
*.ntvs*
+
*.njsproj
+
*.sln
+
*.sw?
+13
dysnomia/www/index.html
···
+
<!doctype html>
+
<html lang="en">
+
<head>
+
<meta charset="UTF-8" />
+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+
<title>dysnomia</title>
+
</head>
+
<body>
+
<div id="app"></div>
+
<script type="module" src="/src/main.ts"></script>
+
</body>
+
</html>
+25
dysnomia/www/package.json
···
+
{
+
"name": "dysnomia",
+
"private": true,
+
"version": "0.0.0",
+
"type": "module",
+
"scripts": {
+
"dev": "vite",
+
"build": "tsc && vite build",
+
"preview": "vite preview"
+
},
+
"devDependencies": {
+
"typescript": "~5.9.3",
+
"vite": "npm:rolldown-vite@7.2.5",
+
"vite-plugin-top-level-await": "^1.6.0",
+
"vite-plugin-wasm": "^3.5.0"
+
},
+
"dependencies": {
+
"@std/toml": "npm:@jsr/std__toml",
+
"@xterm/addon-canvas": "^0.7.0",
+
"@xterm/addon-fit": "^0.10.0",
+
"@xterm/addon-web-links": "^0.11.0",
+
"@xterm/addon-webgl": "^0.18.0",
+
"@xterm/xterm": "^5.5.0"
+
}
+
}
+1
dysnomia/www/public/vite.svg
···
+
<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
···
+
import { Terminal } from "@xterm/xterm";
+
import { FitAddon } from "@xterm/addon-fit";
+
import { WebLinksAddon } from "@xterm/addon-web-links";
+
import { CanvasAddon } from "@xterm/addon-canvas";
+
import { WebglAddon } from "@xterm/addon-webgl";
+
+
// Import the worker using Vite's explicit worker suffix
+
// This fixes the "disallowed MIME type" error by ensuring Vite bundles it correctly
+
import DysnomiaWorker from "./worker?worker";
+
+
import "./style.css";
+
import "@xterm/xterm/css/xterm.css";
+
+
type Candidate = {
+
name: string;
+
description: string;
+
is_command: boolean;
+
rendered: string;
+
span_start: number;
+
span_end: number;
+
};
+
+
type SearchState = "history" | "completion" | "none";
+
+
async function bootstrap() {
+
// Instantiate the worker using the imported class
+
const worker = new DysnomiaWorker();
+
+
// Communication Helpers
+
let msgId = 0;
+
const pending = new Map<
+
number,
+
{ resolve: (value: any) => void; reject: (reason: any) => void }
+
>();
+
+
// State to track if WASM is fully loaded
+
let isWorkerReady = false;
+
+
const callWorker = (type: string, payload?: any): Promise<any> => {
+
return new Promise((resolve, reject) => {
+
const id = ++msgId;
+
pending.set(id, { resolve, reject });
+
worker.postMessage({ id, type, payload });
+
});
+
};
+
+
const term = new Terminal({
+
cursorBlink: true,
+
cursorStyle: "bar",
+
cursorInactiveStyle: "block",
+
fontFamily: '"Comic Mono", monospace',
+
fontSize: 15,
+
scrollback: 100000,
+
theme: {
+
background: "#000000",
+
foreground: "#ffffff",
+
},
+
});
+
+
const fitAddon = new FitAddon();
+
term.loadAddon(fitAddon);
+
term.loadAddon(new WebLinksAddon());
+
+
document.querySelector<HTMLDivElement>("#app")!.innerHTML =
+
`<div id="terminal"></div>`;
+
term.open(document.getElementById("terminal")!);
+
try {
+
term.loadAddon(new WebglAddon());
+
} catch (err) {
+
console.error("WebGL addon failed to load:", err);
+
console.warn("falling back to canvas!");
+
term.loadAddon(new CanvasAddon());
+
}
+
fitAddon.fit();
+
+
let activeTasks = 0;
+
let currentLine = "";
+
let completionBaseLine = "";
+
let cursorPos = 0;
+
let isRunningCommand = false;
+
+
let searchState: SearchState = "none";
+
let completionCandidates: Candidate[] = [];
+
let completionIndex = -1;
+
const history: string[] = [];
+
let historyIndex = 0;
+
+
// Cache PWD to avoid flickering/excessive async calls
+
let cachedPwd = "/";
+
+
let readyPromiseResolve: () => void;
+
const readyPromise = new Promise<void>((resolve) => {
+
readyPromiseResolve = resolve;
+
});
+
+
worker.onmessage = (e) => {
+
const { id, type, payload } = e.data;
+
+
// console.log("Received message:", id, type, payload);
+
+
if (type === "initialized") {
+
isWorkerReady = true;
+
readyPromiseResolve();
+
}
+
+
if (type === "console") {
+
const safeMsg = payload.msg.replace(/\n/g, "\r\n");
+
+
if (!payload.isCmd) {
+
// If we are sitting at a prompt, clear it to show the message
+
term.write("\r\x1b[2K"); // Clear line
+
term.write(safeMsg + "\r\n");
+
refreshPrompt();
+
} else {
+
term.write(safeMsg + "\r\n");
+
}
+
return;
+
}
+
+
if (type === "task_count") {
+
activeTasks = payload;
+
if (!isRunningCommand) {
+
refreshPrompt();
+
}
+
return;
+
}
+
+
if (pending.has(id)) {
+
const resolver = pending.get(id)!;
+
pending.delete(id);
+
if (type === "error") {
+
resolver.reject(payload);
+
} else {
+
resolver.resolve(payload);
+
}
+
}
+
};
+
+
const getPrompt = () => {
+
const indicator =
+
activeTasks > 0 ? `\x1b[33m(${activeTasks} bg)\x1b[0m ` : "";
+
+
let modeIndicator = "";
+
if (searchState === "history") {
+
modeIndicator = "\x1b[7m\x1b[34m(h-search)\x1b[0m ";
+
} else if (searchState === "completion") {
+
modeIndicator = "\x1b[7m\x1b[35m(c-search)\x1b[0m ";
+
}
+
+
const pathColor = isWorkerReady ? "\x1b[33m" : "\x1b[30;1m"; // Yellow (ready) vs Dark Gray (loading)
+
return `${indicator}${pathColor}${cachedPwd}\x1b[32m/\x1b[0m ${modeIndicator}`;
+
};
+
+
// Async Refresh Prompt
+
const refreshPrompt = async () => {
+
// If we are running a command (blocking), don't redraw prompt
+
if (isRunningCommand) return;
+
+
let output = "";
+
output += "\r";
+
output += "\x1b[2K"; // Clear current line
+
output += "\x1b[J"; // Clear everything below
+
+
output += getPrompt();
+
+
try {
+
if (currentLine.length > 0 && isWorkerReady) {
+
const highlighted = await callWorker("highlight", currentLine);
+
output += highlighted;
+
} else {
+
output += currentLine;
+
}
+
} catch (e) {
+
output += currentLine;
+
}
+
+
if (completionCandidates.length > 0) {
+
output += "\x1b7"; // Save cursor position
+
output += "\r\n";
+
+
const MAX_VISIBLE = 10;
+
const total = completionCandidates.length;
+
let start = 0;
+
let end = total;
+
+
if (total > MAX_VISIBLE) {
+
const half = Math.floor(MAX_VISIBLE / 2);
+
if (completionIndex < half) {
+
start = 0;
+
end = MAX_VISIBLE;
+
} else if (completionIndex >= total - half) {
+
start = total - MAX_VISIBLE;
+
end = total;
+
} else {
+
start = completionIndex - half;
+
end = start + MAX_VISIBLE;
+
}
+
}
+
+
if (start > 0) {
+
output += `\x1b[2m... ${start} more\x1b[0m\x1b[K\r\n`;
+
}
+
+
for (let i = start; i < end; i++) {
+
const cand = completionCandidates[i];
+
const isSelected = i === completionIndex;
+
let rendered = cand.rendered;
+
+
if (isSelected) {
+
rendered = rendered.replace(/\x1b\[0m/g, "\x1b[0m\x1b[7m");
+
output += `\x1b[7m${rendered}\x1b[K\x1b[0m\r\n`;
+
} else {
+
output += `${rendered}\x1b[K\r\n`;
+
}
+
}
+
+
if (end < total) {
+
output += `\x1b[2m... ${total - end} more\x1b[0m\x1b[K\r\n`;
+
}
+
+
output += "\x1b8"; // Restore cursor position
+
}
+
+
// Move cursor back to correct position
+
const distance = currentLine.length - cursorPos;
+
if (distance > 0) {
+
output += `\x1b[${distance}D`;
+
}
+
+
// We write the whole block at once to minimize flicker
+
term.write(output);
+
};
+
+
const getLineWithCompletion = (baseLine: string, candidate: Candidate) => {
+
const before = baseLine.slice(0, candidate.span_start);
+
const after = baseLine.slice(candidate.span_end);
+
return before + candidate.name + after;
+
};
+
+
const applyCompletion = (candidate: Candidate) => {
+
currentLine = getLineWithCompletion(currentLine, candidate);
+
const before = currentLine.slice(0, candidate.span_start);
+
cursorPos = (before + candidate.name).length;
+
};
+
+
const updateCompletionCandidates = async () => {
+
// Don't try to get completion if worker isn't loaded
+
if (!isWorkerReady) return;
+
+
try {
+
const json = await callWorker("completion", {
+
line: currentLine,
+
cursor: cursorPos,
+
});
+
const candidates: Candidate[] = JSON.parse(json);
+
completionCandidates = candidates;
+
completionBaseLine = currentLine;
+
+
if (completionCandidates.length > 0) {
+
if (completionIndex >= completionCandidates.length) {
+
completionIndex = 0;
+
}
+
if (completionIndex < 0) {
+
completionIndex = 0;
+
}
+
} else {
+
completionIndex = -1;
+
}
+
} catch (err) {
+
completionCandidates = [];
+
completionIndex = -1;
+
}
+
};
+
+
const updateHistoryCandidates = () => {
+
const query = currentLine.toLowerCase();
+
const matches = history.filter((cmd) => {
+
let i = 0,
+
j = 0;
+
const cmdLower = cmd.toLowerCase();
+
while (i < query.length && j < cmdLower.length) {
+
if (query[i] === cmdLower[j]) i++;
+
j++;
+
}
+
return i === query.length;
+
});
+
+
matches.reverse();
+
+
completionCandidates = matches.map((cmd) => ({
+
name: cmd,
+
description: "",
+
is_command: true,
+
rendered: cmd,
+
span_start: 0,
+
span_end: currentLine.length,
+
}));
+
+
completionBaseLine = currentLine;
+
+
if (completionCandidates.length > 0) {
+
completionIndex = 0;
+
} else {
+
completionIndex = -1;
+
}
+
};
+
+
// 1. Setup Input Handler immediately so terminal isn't blocked
+
term.onData(async (e) => {
+
// SEARCH MODE INPUT
+
if (searchState !== "none" && e >= " " && e <= "~") {
+
if (cursorPos === currentLine.length) {
+
currentLine += e;
+
cursorPos++;
+
} else {
+
currentLine =
+
currentLine.slice(0, cursorPos) + e + currentLine.slice(cursorPos);
+
cursorPos++;
+
}
+
term.write(e);
+
+
if (searchState === "history") updateHistoryCandidates();
+
if (searchState === "completion") await updateCompletionCandidates();
+
+
await refreshPrompt();
+
return;
+
}
+
+
// SEARCH MODE BACKSPACE
+
if (searchState !== "none" && e === "\u007F") {
+
if (cursorPos > 0) {
+
currentLine =
+
currentLine.slice(0, cursorPos - 1) + currentLine.slice(cursorPos);
+
cursorPos--;
+
+
if (searchState === "history") updateHistoryCandidates();
+
if (searchState === "completion") await updateCompletionCandidates();
+
+
await refreshPrompt();
+
}
+
return;
+
}
+
+
// EXIT SEARCH MODE (on non-nav keys)
+
const isTab = e === "\t" || e === "\x1b[Z";
+
const isArrow = e === "\x1b[A" || e === "\x1b[B";
+
+
if (
+
!isTab &&
+
!isArrow &&
+
(completionCandidates.length > 0 || searchState !== "none")
+
) {
+
if (e !== "\r") {
+
completionCandidates = [];
+
completionIndex = -1;
+
searchState = "none";
+
await refreshPrompt();
+
}
+
}
+
+
switch (e) {
+
case "\r": {
+
// ENTER
+
+
// 1. Accept Completion/Search Selection
+
if (completionCandidates.length > 0) {
+
const cand = completionCandidates[completionIndex];
+
if (cand) {
+
currentLine = getLineWithCompletion(completionBaseLine, cand);
+
cursorPos = currentLine.length;
+
}
+
}
+
+
const wasInMode =
+
searchState != "none" || completionCandidates.length > 0;
+
+
completionCandidates = [];
+
searchState = "none";
+
+
if (wasInMode) {
+
await refreshPrompt();
+
break;
+
}
+
+
// 2. Execute Command
+
await refreshPrompt(); // Ensure clean line
+
term.write("\r\n");
+
const trimmed = currentLine.trim();
+
+
if (trimmed.length > 0) {
+
currentLine = "";
+
isRunningCommand = true;
+
try {
+
// Check readiness before executing
+
if (!isWorkerReady) {
+
term.write(
+
"\x1b[33mengine is still loading, please wait (_ _ )zZ...\x1b[0m\r\n",
+
);
+
} else {
+
// ASYNC execution
+
const output: string | undefined = await callWorker(
+
"run",
+
trimmed,
+
);
+
if (output) {
+
term.write(output.replace(/\n/g, "\r\n"));
+
if (output && !output.endsWith("\n")) {
+
term.write("\r\n");
+
}
+
}
+
+
// Update cached PWD after command execution (cd, etc)
+
cachedPwd = await callWorker("get_pwd");
+
+
// Update History
+
const idx = history.indexOf(trimmed);
+
if (idx >= 0) history.splice(idx, 1);
+
history.push(trimmed);
+
historyIndex = history.length;
+
}
+
} catch (err) {
+
term.write(`\x1b[31mfatal: ${err}\x1b[0m\r\n`);
+
} finally {
+
isRunningCommand = false;
+
}
+
}
+
+
term.write(getPrompt());
+
cursorPos = 0;
+
break;
+
}
+
+
case "\u007F": // Backspace
+
if (cursorPos > 0) {
+
currentLine =
+
currentLine.slice(0, cursorPos - 1) + currentLine.slice(cursorPos);
+
cursorPos--;
+
await refreshPrompt();
+
}
+
break;
+
+
case "\x1b[3~": // Delete
+
if (cursorPos < currentLine.length) {
+
currentLine =
+
currentLine.slice(0, cursorPos) + currentLine.slice(cursorPos + 1);
+
await refreshPrompt();
+
}
+
break;
+
+
case "\u0003": // Ctrl+C
+
currentLine = "";
+
cursorPos = 0;
+
completionCandidates = [];
+
searchState = "none";
+
term.write("^C\r\n" + getPrompt());
+
break;
+
+
case "\u000C": // Ctrl+L
+
term.clear();
+
break;
+
+
case "\u0012": // Ctrl+R
+
searchState = "history";
+
updateHistoryCandidates();
+
await refreshPrompt();
+
break;
+
+
// NAVIGATION
+
+
case "\x1b[D": // Left Arrow
+
if (cursorPos > 0) {
+
cursorPos--;
+
term.write(e); // Local echo is fine for navigation
+
}
+
break;
+
+
case "\x1b[C": // Right Arrow
+
if (cursorPos < currentLine.length) {
+
cursorPos++;
+
term.write(e);
+
}
+
break;
+
+
case "\x1b[1;5D": // Ctrl+Left
+
case "\x1b\x1b[D": // Alt+Left
+
{
+
let p = cursorPos;
+
while (p > 0 && currentLine[p - 1] === " ") p--;
+
while (p > 0 && currentLine[p - 1] !== " ") p--;
+
cursorPos = p;
+
await refreshPrompt();
+
}
+
break;
+
+
case "\x1b[1;5C": // Ctrl+Right
+
case "\x1b\x1b[C": // Alt+Right
+
{
+
let p = cursorPos;
+
while (p < currentLine.length && currentLine[p] !== " ") p++;
+
while (p < currentLine.length && currentLine[p] === " ") p++;
+
cursorPos = p;
+
await refreshPrompt();
+
}
+
break;
+
+
case "\x1b[A": // Up Arrow
+
case "\x1b[1;5A": // Ctrl+Up
+
// Cycle Completion
+
if (completionCandidates.length > 0 && e === "\x1b[A") {
+
completionIndex =
+
(completionIndex - 1 + completionCandidates.length) %
+
completionCandidates.length;
+
const candidate = completionCandidates[completionIndex];
+
currentLine = getLineWithCompletion(completionBaseLine, candidate);
+
cursorPos = currentLine.length;
+
await refreshPrompt();
+
break;
+
}
+
+
// History
+
if (e === "\x1b[A" || currentLine.length === 0) {
+
if (historyIndex > 0) {
+
historyIndex--;
+
currentLine = history[historyIndex];
+
cursorPos = currentLine.length;
+
await refreshPrompt();
+
}
+
} else {
+
cursorPos = 0;
+
await refreshPrompt();
+
}
+
break;
+
+
case "\x1b[H": // Home
+
cursorPos = 0;
+
await refreshPrompt();
+
break;
+
+
case "\x1b[B": // Down Arrow
+
case "\x1b[1;5B": // Ctrl+Down
+
// Cycle Completion
+
if (completionCandidates.length > 0 && e === "\x1b[B") {
+
completionIndex = (completionIndex + 1) % completionCandidates.length;
+
const candidate = completionCandidates[completionIndex];
+
currentLine = getLineWithCompletion(completionBaseLine, candidate);
+
cursorPos = currentLine.length;
+
await refreshPrompt();
+
break;
+
}
+
+
// History
+
if (e === "\x1b[B" || currentLine.length === 0) {
+
if (historyIndex < history.length) {
+
historyIndex++;
+
if (historyIndex === history.length) {
+
currentLine = "";
+
} else {
+
currentLine = history[historyIndex];
+
}
+
cursorPos = currentLine.length;
+
await refreshPrompt();
+
}
+
} else {
+
cursorPos = currentLine.length;
+
await refreshPrompt();
+
}
+
break;
+
+
case "\x1b[F": // End
+
cursorPos = currentLine.length;
+
await refreshPrompt();
+
break;
+
+
case "\t": // Tab
+
try {
+
if (completionCandidates.length > 0) {
+
completionIndex =
+
(completionIndex + 1) % completionCandidates.length;
+
+
const candidate = completionCandidates[completionIndex];
+
currentLine = getLineWithCompletion(completionBaseLine, candidate);
+
await refreshPrompt();
+
} else {
+
// Guard: ensure worker is ready
+
if (!isWorkerReady) return;
+
+
const json = await callWorker("completion", {
+
line: currentLine,
+
cursor: cursorPos,
+
});
+
const candidates: Candidate[] = JSON.parse(json);
+
+
if (candidates.length === 1) {
+
const candidate = candidates[0];
+
applyCompletion(candidate);
+
await refreshPrompt();
+
} else if (candidates.length > 1) {
+
completionCandidates = candidates;
+
completionIndex = 0;
+
searchState = "completion";
+
completionBaseLine = currentLine;
+
await refreshPrompt();
+
}
+
}
+
} catch (err) {
+
// ignore
+
}
+
break;
+
+
case "\x1b[Z": // Shift+Tab
+
if (completionCandidates.length > 0) {
+
completionIndex =
+
(completionIndex - 1 + completionCandidates.length) %
+
completionCandidates.length;
+
const candidate = completionCandidates[completionIndex];
+
currentLine = getLineWithCompletion(completionBaseLine, candidate);
+
cursorPos = currentLine.length;
+
await refreshPrompt();
+
}
+
break;
+
+
default:
+
// Typing
+
if (e >= " " && e <= "~") {
+
if (cursorPos === currentLine.length) {
+
currentLine += e;
+
cursorPos++;
+
} else {
+
currentLine =
+
currentLine.slice(0, cursorPos) +
+
e +
+
currentLine.slice(cursorPos);
+
cursorPos++;
+
}
+
await refreshPrompt();
+
}
+
}
+
});
+
+
window.addEventListener("resize", () => fitAddon.fit());
+
+
await readyPromise;
+
+
await callWorker("run", "open welcome.txt");
+
+
term.write(getPrompt());
+
+
callWorker("get_pwd")
+
.then((pwd) => {
+
cachedPwd = pwd;
+
// Re-render prompt to show "ready" state (yellow path) and enable highlighting
+
refreshPrompt();
+
})
+
.catch((e) => {
+
term.write(`\r\n\x1b[31mfatal: failed to load engine: ${e}\x1b[0m\r\n`);
+
});
+
}
+
+
bootstrap().catch(console.error);
+13
dysnomia/www/src/style.css
···
+
body {
+
margin: 0;
+
padding: 0;
+
background-color: #000000;
+
height: 100vh;
+
width: 100vw;
+
overflow: hidden;
+
}
+
+
#terminal {
+
height: 100vh;
+
width: 100vw;
+
}
+54
dysnomia/www/src/worker.ts
···
+
import init, {
+
init_engine,
+
run_command,
+
completion,
+
highlight,
+
get_pwd_string,
+
register_console_callback,
+
register_task_count_callback,
+
} from "../../pkg";
+
+
// Initialize WASM
+
await init();
+
init_engine();
+
+
// Setup Callbacks to proxy messages back to Main Thread
+
register_console_callback((msg: string, isCmd: boolean) => {
+
self.postMessage({ type: "console", payload: { msg, isCmd } });
+
});
+
+
register_task_count_callback((count: number) => {
+
self.postMessage({ type: "task_count", payload: count });
+
});
+
+
// Handle messages from Main Thread
+
self.onmessage = (e) => {
+
const { id, type, payload } = e.data;
+
+
// console.log("Received message:", id, type, payload);
+
+
try {
+
let result;
+
switch (type) {
+
case "run":
+
result = run_command(payload);
+
break;
+
case "completion":
+
result = completion(payload.line, payload.cursor);
+
break;
+
case "highlight":
+
result = highlight(payload);
+
break;
+
case "get_pwd":
+
result = get_pwd_string();
+
break;
+
default:
+
throw new Error(`Unknown message type: ${type}`);
+
}
+
self.postMessage({ id, type: `${type}_result`, payload: result });
+
} catch (err) {
+
self.postMessage({ id, type: "error", payload: String(err) });
+
}
+
};
+
+
self.postMessage({ type: "initialized", payload: true });
+26
dysnomia/www/tsconfig.json
···
+
{
+
"compilerOptions": {
+
"target": "ES2022",
+
"useDefineForClassFields": true,
+
"module": "ESNext",
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
+
"types": ["vite/client"],
+
"skipLibCheck": true,
+
+
/* Bundler mode */
+
"moduleResolution": "bundler",
+
"allowImportingTsExtensions": true,
+
"verbatimModuleSyntax": true,
+
"moduleDetection": "force",
+
"noEmit": true,
+
+
/* Linting */
+
"strict": true,
+
"noUnusedLocals": true,
+
"noUnusedParameters": true,
+
"erasableSyntaxOnly": true,
+
"noFallthroughCasesInSwitch": true,
+
"noUncheckedSideEffectImports": true
+
},
+
"include": ["src"]
+
}
+16
dysnomia/www/vite.config.ts
···
+
import { defineConfig } from "vite";
+
import wasm from "vite-plugin-wasm";
+
import topLevelAwait from "vite-plugin-top-level-await";
+
+
export default defineConfig({
+
plugins: [wasm(), topLevelAwait()],
+
worker: {
+
format: "es",
+
plugins: () => [wasm(), topLevelAwait()],
+
},
+
server: {
+
fs: {
+
allow: [".."],
+
},
+
},
+
});
eunomia/.npmrc .npmrc
+242 -11
flake.lock
···
{
"nodes": {
+
"crane": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1758758545,
+
"narHash": "sha256-NU5WaEdfwF6i8faJ2Yh+jcK9vVFrofLcwlD/mP65JrI=",
+
"owner": "ipetkov",
+
"repo": "crane",
+
"rev": "95d528a5f54eaba0d12102249ce42f4d01f4e364",
+
"type": "github"
+
},
+
"original": {
+
"owner": "ipetkov",
+
"ref": "v0.21.1",
+
"repo": "crane",
+
"type": "github"
+
}
+
},
+
"dream2nix": {
+
"inputs": {
+
"nixpkgs": [
+
"nci",
+
"nixpkgs"
+
],
+
"purescript-overlay": "purescript-overlay",
+
"pyproject-nix": "pyproject-nix"
+
},
+
"locked": {
+
"lastModified": 1765228272,
+
"narHash": "sha256-duTz4J4NP1edl/ZBdwZPduPM8j6g0yzjb8YH91T9vU0=",
+
"owner": "nix-community",
+
"repo": "dream2nix",
+
"rev": "83c430ce6b6aedf149c5259f066bfff808722dbd",
+
"type": "github"
+
},
+
"original": {
+
"owner": "nix-community",
+
"repo": "dream2nix",
+
"type": "github"
+
}
+
},
+
"flake-compat": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1696426674,
+
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+
"owner": "edolstra",
+
"repo": "flake-compat",
+
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+
"type": "github"
+
},
+
"original": {
+
"owner": "edolstra",
+
"repo": "flake-compat",
+
"type": "github"
+
}
+
},
+
"mk-naked-shell": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1681286841,
+
"narHash": "sha256-3XlJrwlR0nBiREnuogoa5i1b4+w/XPe0z8bbrJASw0g=",
+
"owner": "90-008",
+
"repo": "mk-naked-shell",
+
"rev": "7612f828dd6f22b7fb332cc69440e839d7ffe6bd",
+
"type": "github"
+
},
+
"original": {
+
"owner": "90-008",
+
"repo": "mk-naked-shell",
+
"type": "github"
+
}
+
},
"naked-shell": {
"locked": {
"lastModified": 1681286841,
···
"type": "github"
}
},
+
"nci": {
+
"inputs": {
+
"crane": "crane",
+
"dream2nix": "dream2nix",
+
"mk-naked-shell": "mk-naked-shell",
+
"nixpkgs": [
+
"nixpkgs"
+
],
+
"parts": "parts",
+
"rust-overlay": "rust-overlay",
+
"treefmt": "treefmt"
+
},
+
"locked": {
+
"lastModified": 1765347705,
+
"narHash": "sha256-pp5ru9CvZz0n1UBvRzp41othwARTUBmK1Es8iAqgepc=",
+
"owner": "90-008",
+
"repo": "nix-cargo-integration",
+
"rev": "c573f9ec80416fd09964a3e3892f14d9012a03e2",
+
"type": "github"
+
},
+
"original": {
+
"owner": "90-008",
+
"repo": "nix-cargo-integration",
+
"type": "github"
+
}
+
},
"nixpkgs": {
"locked": {
-
"lastModified": 1752950548,
-
"narHash": "sha256-NS6BLD0lxOrnCiEOcvQCDVPXafX1/ek1dfJHX1nUIzc=",
+
"lastModified": 1765270179,
+
"narHash": "sha256-g2a4MhRKu4ymR4xwo+I+auTknXt/+j37Lnf0Mvfl1rE=",
"owner": "nixos",
"repo": "nixpkgs",
-
"rev": "c87b95e25065c028d31a94f06a62927d18763fdf",
+
"rev": "677fbe97984e7af3175b6c121f3c39ee5c8d62c9",
"type": "github"
},
"original": {
"owner": "nixos",
-
"ref": "nixos-unstable",
+
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
-
"lastModified": 1751159883,
-
"narHash": "sha256-urW/Ylk9FIfvXfliA1ywh75yszAbiTEVgpPeinFyVZo=",
+
"lastModified": 1761765539,
+
"narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
-
"rev": "14a40a1d7fb9afa4739275ac642ed7301a9ba1ab",
+
"rev": "719359f4562934ae99f5443f20aa06c2ffff91fc",
"type": "github"
},
"original": {
···
},
"parts": {
"inputs": {
+
"nixpkgs-lib": [
+
"nci",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1763759067,
+
"narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=",
+
"owner": "hercules-ci",
+
"repo": "flake-parts",
+
"rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0",
+
"type": "github"
+
},
+
"original": {
+
"owner": "hercules-ci",
+
"repo": "flake-parts",
+
"type": "github"
+
}
+
},
+
"parts_2": {
+
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
-
"lastModified": 1753121425,
-
"narHash": "sha256-TVcTNvOeWWk1DXljFxVRp+E0tzG1LhrVjOGGoMHuXio=",
+
"lastModified": 1763759067,
+
"narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=",
"owner": "hercules-ci",
"repo": "flake-parts",
-
"rev": "644e0fc48951a860279da645ba77fe4a6e814c5e",
+
"rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0",
"type": "github"
},
"original": {
···
"type": "github"
}
},
+
"purescript-overlay": {
+
"inputs": {
+
"flake-compat": "flake-compat",
+
"nixpkgs": [
+
"nci",
+
"dream2nix",
+
"nixpkgs"
+
],
+
"slimlock": "slimlock"
+
},
+
"locked": {
+
"lastModified": 1728546539,
+
"narHash": "sha256-Sws7w0tlnjD+Bjck1nv29NjC5DbL6nH5auL9Ex9Iz2A=",
+
"owner": "thomashoneyman",
+
"repo": "purescript-overlay",
+
"rev": "4ad4c15d07bd899d7346b331f377606631eb0ee4",
+
"type": "github"
+
},
+
"original": {
+
"owner": "thomashoneyman",
+
"repo": "purescript-overlay",
+
"type": "github"
+
}
+
},
+
"pyproject-nix": {
+
"inputs": {
+
"nixpkgs": [
+
"nci",
+
"dream2nix",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1752481895,
+
"narHash": "sha256-luVj97hIMpCbwhx3hWiRwjP2YvljWy8FM+4W9njDhLA=",
+
"owner": "pyproject-nix",
+
"repo": "pyproject.nix",
+
"rev": "16ee295c25107a94e59a7fc7f2e5322851781162",
+
"type": "github"
+
},
+
"original": {
+
"owner": "pyproject-nix",
+
"repo": "pyproject.nix",
+
"type": "github"
+
}
+
},
"root": {
"inputs": {
"naked-shell": "naked-shell",
+
"nci": "nci",
"nixpkgs": "nixpkgs",
-
"parts": "parts"
+
"parts": "parts_2"
+
}
+
},
+
"rust-overlay": {
+
"inputs": {
+
"nixpkgs": [
+
"nci",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1765334520,
+
"narHash": "sha256-jTof2+ir9UPmv4lWksYO6WbaXCC0nsDExrB9KZj7Dz4=",
+
"owner": "oxalica",
+
"repo": "rust-overlay",
+
"rev": "db61f666aea93b28f644861fbddd37f235cc5983",
+
"type": "github"
+
},
+
"original": {
+
"owner": "oxalica",
+
"repo": "rust-overlay",
+
"type": "github"
+
}
+
},
+
"slimlock": {
+
"inputs": {
+
"nixpkgs": [
+
"nci",
+
"dream2nix",
+
"purescript-overlay",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1688756706,
+
"narHash": "sha256-xzkkMv3neJJJ89zo3o2ojp7nFeaZc2G0fYwNXNJRFlo=",
+
"owner": "thomashoneyman",
+
"repo": "slimlock",
+
"rev": "cf72723f59e2340d24881fd7bf61cb113b4c407c",
+
"type": "github"
+
},
+
"original": {
+
"owner": "thomashoneyman",
+
"repo": "slimlock",
+
"type": "github"
+
}
+
},
+
"treefmt": {
+
"inputs": {
+
"nixpkgs": [
+
"nci",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1762938485,
+
"narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=",
+
"owner": "numtide",
+
"repo": "treefmt-nix",
+
"rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4",
+
"type": "github"
+
},
+
"original": {
+
"owner": "numtide",
+
"repo": "treefmt-nix",
+
"type": "github"
}
}
},
+8 -6
flake.nix
···
{
inputs.parts.url = "github:hercules-ci/flake-parts";
-
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
inputs.naked-shell.url = "github:90-008/mk-naked-shell";
+
inputs.nci.url = "github:90-008/nix-cargo-integration";
+
inputs.nci.inputs.nixpkgs.follows = "nixpkgs";
outputs = inp:
inp.parts.lib.mkFlake {inputs = inp;} {
systems = ["x86_64-linux"];
imports = [
inp.naked-shell.flakeModule
+
# inp.nci.flakeModule
];
perSystem = {
config,
-
system,
+
pkgs,
...
-
}: let
-
pkgs = inp.nixpkgs.legacyPackages.${system};
-
in {
-
devShells.default = config.mk-naked-shell.lib.mkNakedShell {
+
}: {
+
devShells.default = pkgs.mkShell {
name = "eunomia-devshell";
packages = with pkgs; [
nodejs-slim_latest deno
nodePackages.svelte-language-server
nodePackages.typescript-language-server
+
rustc rust-analyzer cargo wasm-pack wasm-bindgen-cli lld rustfmt binaryen
];
shellHook = ''
export PATH="$PATH:$PWD/node_modules/.bin"