diff --git a/.mise.toml b/.mise.toml index 0d10500..3db8aed 100644 --- a/.mise.toml +++ b/.mise.toml @@ -21,6 +21,7 @@ gemini-cli = "latest" java = "latest" maven = "latest" mprocs = "latest" +node = "22" "npm:onnxruntime-web" = "latest" "npm:pyodide" = "0.29.3" ollama = "latest" @@ -32,7 +33,7 @@ protoc = "latest" rclone = "latest" ruff = "latest" rust = [ - { version = "latest", components = "clippy", targets = "wasm32-unknown-unknown" }, + { version = "latest", components = "clippy,rust-analyzer", targets = "wasm32-unknown-unknown" }, { version = "nightly", components = "rust-src,rustfmt", targets = "wasm32-unknown-unknown" }, ] typos = "latest" @@ -102,10 +103,10 @@ run = "cargo +nightly fmt" run = "cargo +nightly fmt -- --check" [tasks.cargo-clippy] -run = "cargo clippy --workspace" +run = "cargo clippy --workspace --tests" [tasks.cargo-clippy-fix] -run = "cargo clippy --fix --allow-dirty --allow-staged --workspace" +run = "cargo clippy --fix --allow-dirty --allow-staged --workspace --tests" [tasks.taplo-fmt] run = "taplo format" @@ -139,6 +140,11 @@ run = "cargo run" OTLP_AUTH_PASSWORD = "1234" OTLP_AUTH_USERNAME = "root@example.com" +[tasks.ws-worker] +description = "Run the WebSocket worker (set WORKER_MODULE to select module, default: pydata1)" +dir = "services/ws-worker" +run = "cargo run" + [tasks.build-ws-wasm-agent] description = "Build the WebSocket WASM client" dir = "services/ws-wasm-agent" diff --git a/CLAUDE.md b/CLAUDE.md index 8505c38..2d8de7f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -73,6 +73,23 @@ Languages: - **edge-toolkit** — Common utilities, config, serialization (shared across services) - **web** — WASM web helpers (Canvas, MediaStream, WebSocket bindings for browser modules) +### Worker (`services/ws-worker/`) + +`et-ws-worker` — runs any ws-module outside a browser. It fetches the module's JS package from the +running ws-server, patches it for Node.js compatibility (redirects the WASM agent import to a +pure-JS shim, fixes `import.meta.url` to an HTTP URL so Pyodide wheel fetches work), then +executes it via Node.js. + +Two patches are applied to every downloaded module JS before execution: + +- `"/modules/et-ws-wasm-agent/et_ws_wasm_agent.js"` → `"./ws_client.mjs"` (pure-JS `WsClient` + in `runner/ws_client.mjs`) +- `import.meta.url` → the server's HTTP URL for that file (so `new URL(...)` resolves wheel and + package.json via HTTP) + +`WORKER_MODULE` selects the module (default: `pydata1`). `WS_SERVER_URL` sets the server +(default: `ws://localhost:8080/ws`). + ### Utilities (`utilities/`) - **cli** (`et-cli`) — Scenario and module tooling. Reads scenario YAML and outputs `mise.toml` or `compose.yaml`; diff --git a/Cargo.lock b/Cargo.lock index 04f3c1c..b57a3cc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,16 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + [[package]] name = "actix" version = "0.13.5" @@ -11,7 +21,7 @@ dependencies = [ "actix-macros", "actix-rt", "actix_derive", - "bitflags", + "bitflags 2.9.4", "bytes", "crossbeam-channel", "futures-core", @@ -33,7 +43,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" dependencies = [ - "bitflags", + "bitflags 2.9.4", "bytes", "futures-core", "futures-sink", @@ -54,7 +64,7 @@ dependencies = [ "actix-service", "actix-utils", "actix-web", - "bitflags", + "bitflags 2.9.4", "bytes", "derive_more", "futures-core", @@ -78,8 +88,8 @@ dependencies = [ "actix-service", "actix-tls", "actix-utils", - "base64", - "bitflags", + "base64 0.22.1", + "bitflags 2.9.4", "brotli", "bytes", "bytestring", @@ -88,7 +98,7 @@ dependencies = [ "flate2", "foldhash", "futures-core", - "h2", + "h2 0.3.27", "http 0.2.12", "httparse", "httpdate", @@ -99,7 +109,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rand 0.10.1", - "sha1", + "sha1 0.11.0", "smallvec", "tokio", "tokio-util", @@ -290,6 +300,62 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common 0.1.7", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures 0.2.17", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "aes-kw" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69fa2b352dcefb5f7f3a5fb840e02665d311d878955380515e4fd50095dd3d8c" +dependencies = [ + "aes", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.4" @@ -314,6 +380,12 @@ 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 = "android_system_properties" version = "0.1.5" @@ -379,6 +451,39 @@ version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +[[package]] +name = "ar_archive_writer" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb93bbb63b9c227414f6eb3a0adfddca591a8ce1e9b60661bb08969b87e340b" +dependencies = [ + "object", +] + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +dependencies = [ + "serde", +] + +[[package]] +name = "ascii" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" + +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + [[package]] name = "asn1-rs" version = "0.7.1" @@ -391,7 +496,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 2.0.18", "time", ] @@ -418,6 +523,63 @@ dependencies = [ "syn", ] +[[package]] +name = "ast_node" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fb5864e2f5bf9fd9797b94b2dfd1554d4c3092b535008b27d7e15c86675a2f" +dependencies = [ + "proc-macro2", + "quote", + "swc_macros_common 1.0.0", + "syn", +] + +[[package]] +name = "async-compression" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79b3f8a79cccc2898f31920fc69f304859b3bd567490f75ebf51ae1c792a9ac" +dependencies = [ + "compression-codecs", + "compression-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "async-trait" version = "0.1.89" @@ -448,6 +610,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ec6fb3fe69024a75fa7e1bfb48aa6cf59706a101658ea01bfd33b2b248a038f" dependencies = [ "aws-lc-sys", + "untrusted 0.7.1", "zeroize", ] @@ -463,17 +626,193 @@ dependencies = [ "fs_extra", ] +[[package]] +name = "axum" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +dependencies = [ + "async-trait", + "axum-core", + "bytes", + "futures-util", + "http 1.4.0", + "http-body", + "http-body-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower 0.5.3", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.4.0", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper", + "tower-layer", + "tower-service", +] + +[[package]] +name = "az" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be5eb007b7cacc6c660343e96f650fedf4b5a77512399eb952ca6642cf8d13f7" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base32" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022dfe9eb35f19ebbcb51e0b40a5ab759f46ad60cadf7297e0bd085afb50e076" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] + +[[package]] +name = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + +[[package]] +name = "better_scoped_tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd228125315b132eed175bf47619ac79b945b26e56b848ba203ae4ea8603609" +dependencies = [ + "scoped-tls", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.71.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" +dependencies = [ + "bitflags 2.9.4", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 2.1.2", + "shlex", + "syn", +] + +[[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.11.1" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] [[package]] name = "block-buffer" @@ -484,6 +823,25 @@ dependencies = [ "hybrid-array", ] +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + +[[package]] +name = "boxed_error" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17d4f95e880cfd28c4ca5a006cf7f6af52b4bcb7b5866f573b2faa126fb7affb" +dependencies = [ + "quote", + "syn", +] + [[package]] name = "brotli" version = "8.0.2" @@ -510,6 +868,29 @@ name = "bumpalo" version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +dependencies = [ + "allocator-api2", +] + +[[package]] +name = "bytemuck" +version = "1.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "byteorder" @@ -533,10 +914,48 @@ dependencies = [ ] [[package]] -name = "cast" -version = "0.3.0" +name = "capacity_builder" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" +checksum = "8f2d24a6dcf0cd402a21b65d35340f3a49ff3475dc5fdac91d22d2733e6641c6" +dependencies = [ + "capacity_builder_macros", + "itoa", +] + +[[package]] +name = "capacity_builder_macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b4a6cae9efc04cc6cbb8faf338d2c497c165c83e74509cf4dbedea948bbf6e5" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "castaway" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" +dependencies = [ + "rustversion", +] + +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", +] [[package]] name = "cc" @@ -550,12 +969,27 @@ dependencies = [ "shlex", ] +[[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 = "chacha20" version = "0.10.0" @@ -581,6 +1015,27 @@ dependencies = [ "windows-link", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common 0.1.7", + "inout", +] + +[[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.6.1" @@ -630,24 +1085,72 @@ dependencies = [ "cc", ] +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width 0.1.14", +] + [[package]] name = "colorchoice" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" +[[package]] +name = "compact_str" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "ryu", + "static_assertions", +] + +[[package]] +name = "compression-codecs" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce2548391e9c1929c21bf6aa2680af86fe4c1b33e6cea9ac1cfeec0bd11218cf" +dependencies = [ + "brotli", + "compression-core", + "flate2", + "memchr", +] + +[[package]] +name = "compression-core" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc14f565cf027a105f7a44ccf9e5b424348421a1d8952a8fc9d499d313107789" + [[package]] name = "const-hex" -version = "1.18.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531185e432bb31db1ecda541e9e7ab21468d4d844ad7505e0546a49b4945d49b" +checksum = "dccd746bf9b1038c0507b7cec21eb2b11222db96a2902c96e8c185d6d20fb9c4" dependencies = [ "cfg-if", "cpufeatures 0.2.17", + "hex", "proptest", - "serde_core", + "serde", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "const-oid" version = "0.10.2" @@ -663,6 +1166,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "cooked-waker" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147be55d677052dabc6b22252d5dd0fd4c29c8c27aa4f2fbef0f94aa003b406f" + [[package]] name = "cookie" version = "0.16.2" @@ -674,12 +1183,33 @@ dependencies = [ "version_check", ] +[[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 = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + [[package]] name = "cpufeatures" version = "0.2.17" @@ -716,6 +1246,25 @@ 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" @@ -728,7 +1277,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ - "bitflags", + "bitflags 2.9.4", "crossterm_winapi", "parking_lot", "rustix 0.38.44", @@ -744,6 +1293,29 @@ dependencies = [ "winapi", ] +[[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.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "typenum", +] + [[package]] name = "crypto-common" version = "0.2.1" @@ -753,6 +1325,41 @@ dependencies = [ "hybrid-array", ] +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "curve25519-dalek-derive", + "fiat-crypto 0.2.9", + "rustc_version 0.4.1", + "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", +] + [[package]] name = "darling" version = "0.20.11" @@ -788,6 +1395,19 @@ dependencies = [ "syn", ] +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + [[package]] name = "data-encoding" version = "2.11.0" @@ -795,98 +1415,176 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" [[package]] -name = "der-parser" -version = "10.0.0" +name = "data-url" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" -dependencies = [ - "asn1-rs", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" [[package]] -name = "deranged" -version = "0.5.8" +name = "debugid" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" dependencies = [ - "powerfmt", + "serde", + "uuid", ] [[package]] -name = "derive_builder" -version = "0.20.2" +name = "deno_ast" +version = "0.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +checksum = "24158ccf7def38c00fd253fd1b48c8c6207214078fe499f47168763fa2445bf2" dependencies = [ - "derive_builder_macro", + "base64 0.22.1", + "capacity_builder", + "deno_error", + "deno_media_type", + "deno_terminal", + "dprint-swc-ext", + "percent-encoding", + "serde", + "sourcemap", + "swc_atoms", + "swc_common", + "swc_config", + "swc_config_macro", + "swc_ecma_ast", + "swc_ecma_codegen", + "swc_ecma_codegen_macros", + "swc_ecma_loader", + "swc_ecma_parser", + "swc_ecma_transforms_base", + "swc_ecma_transforms_classes", + "swc_ecma_transforms_macros", + "swc_ecma_transforms_proposal", + "swc_ecma_transforms_react", + "swc_ecma_transforms_typescript", + "swc_ecma_utils", + "swc_ecma_visit", + "swc_eq_ignore_macros", + "swc_macros_common 1.0.0", + "swc_visit", + "swc_visit_macros", + "text_lines", + "thiserror 2.0.18", + "unicode-width 0.2.2", + "url", ] [[package]] -name = "derive_builder_core" -version = "0.20.2" +name = "deno_console" +version = "0.213.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +checksum = "5c53d2fbfe68ff0d39dcbffb869bfa30019da2db5d0efbfb4b3fcc04bd1aed0e" dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", + "deno_core", ] [[package]] -name = "derive_builder_macro" -version = "0.20.2" +name = "deno_core" +version = "0.355.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +checksum = "775d2fde80a2ec3116d179703b38346a931bb9626f4a826148d5fe8631cab29f" dependencies = [ - "derive_builder_core", - "syn", + "anyhow", + "az", + "bincode", + "bit-set", + "bit-vec", + "boxed_error", + "bytes", + "capacity_builder", + "cooked-waker", + "deno_core_icudata", + "deno_error", + "deno_ops", + "deno_path_util", + "deno_unsync", + "futures", + "indexmap 2.11.1", + "libc", + "parking_lot", + "percent-encoding", + "pin-project", + "serde", + "serde_json", + "serde_v8", + "smallvec", + "sourcemap", + "static_assertions", + "thiserror 2.0.18", + "tokio", + "url", + "v8", + "wasm_dep_analyzer", ] [[package]] -name = "derive_more" -version = "2.1.1" +name = "deno_core_icudata" +version = "0.74.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" -dependencies = [ - "derive_more-impl", -] +checksum = "fe4dccb6147bb3f3ba0c7a48e993bfeb999d2c2e47a81badee80e2b370c8d695" [[package]] -name = "derive_more-impl" -version = "2.1.1" +name = "deno_crypto" +version = "0.227.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +checksum = "c0f8afd2869b8cefa809e912ba73242485ac69009b6195581eea8a75bc1b89c7" dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn", - "unicode-xid", + "aes", + "aes-gcm", + "aes-kw", + "aws-lc-rs", + "base64 0.22.1", + "cbc", + "const-oid 0.9.6", + "ctr", + "curve25519-dalek", + "deno_core", + "deno_error", + "deno_web", + "ecdsa", + "ed448-goldilocks", + "elliptic-curve", + "num-traits", + "once_cell", + "p256", + "p384", + "p521", + "rand 0.8.5", + "rsa", + "serde", + "serde_bytes", + "sha1 0.10.6", + "sha2", + "signature", + "spki", + "thiserror 2.0.18", + "tokio", + "uuid", + "x25519-dalek", ] [[package]] -name = "digest" -version = "0.11.2" +name = "deno_error" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" +checksum = "dde60bd153886964234c5012d3d9caf788287f28d81fb24a884436904101ef10" dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", + "deno_error_macro", + "libc", + "serde", + "serde_json", + "tokio", + "url", ] [[package]] -name = "displaydoc" -version = "0.2.5" +name = "deno_error_macro" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "409f265785bd946d3006756955aaf40b0e4deb25752eae6a990afe54a31cfd83" dependencies = [ "proc-macro2", "quote", @@ -894,2160 +1592,5073 @@ dependencies = [ ] [[package]] -name = "dunce" -version = "1.0.5" +name = "deno_features" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +checksum = "e73252505f94efc5be0e5c8255b8d2b7e4c1b6361a36c033486ae83d2cddbd37" +dependencies = [ + "deno_core", + "serde", + "serde_json", +] [[package]] -name = "edge-toolkit" -version = "0.1.0" +name = "deno_fetch" +version = "0.237.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f05820261bcc82d377f79878625d61ac70b58c886345e5b1d68f6b012ae4765" dependencies = [ - "base64", - "lets_find_up", - "log", - "rstest", - "secrecy", + "base64 0.22.1", + "bytes", + "data-url", + "deno_core", + "deno_error", + "deno_fs", + "deno_path_util", + "deno_permissions", + "deno_tls", + "dyn-clone", + "error_reporter", + "h2 0.4.14", + "hickory-resolver", + "http 1.4.0", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "ipnet", + "percent-encoding", + "rustls-webpki 0.102.8", "serde", - "serde-env", - "serde-inline-default", - "serde_default", "serde_json", - "serde_yaml", + "thiserror 2.0.18", + "tokio", + "tokio-rustls", + "tokio-socks", + "tokio-util", + "tokio-vsock", + "tower 0.5.3", + "tower-http", + "tower-service", ] [[package]] -name = "either" -version = "1.15.0" +name = "deno_fs" +version = "0.123.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "0b670b3bbceb5aee7e840a4e960e0e0def8f3cf5554f191035b209f38f555638" +dependencies = [ + "async-trait", + "base32", + "boxed_error", + "deno_core", + "deno_error", + "deno_io", + "deno_path_util", + "deno_permissions", + "filetime", + "junction", + "libc", + "nix 0.27.1", + "rand 0.8.5", + "rayon", + "serde", + "thiserror 2.0.18", + "winapi", + "windows-sys 0.59.0", +] [[package]] -name = "encoding_rs" -version = "0.8.35" +name = "deno_io" +version = "0.123.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +checksum = "b5ed7012795555df1a65441c416e1a699d596c8ccf26c346fe6db6d35cd60336" dependencies = [ - "cfg-if", + "async-trait", + "deno_core", + "deno_error", + "deno_permissions", + "deno_subprocess_windows", + "filetime", + "fs3", + "libc", + "log", + "nix 0.27.1", + "once_cell", + "os_pipe", + "parking_lot", + "pin-project", + "rand 0.8.5", + "tokio", + "uuid", + "winapi", + "windows-sys 0.59.0", ] [[package]] -name = "equivalent" -version = "1.0.2" +name = "deno_media_type" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "f0ec0dada9dc5ac4733b4175d36f6a150b7dd68fab46db35cb1ef00dd7366acb" +dependencies = [ + "data-url", + "serde", + "url", +] [[package]] -name = "errno" -version = "0.3.14" +name = "deno_native_certs" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +checksum = "86bc737e098a45aa5742d51ce694ac7236a1e69fb0d9df8c862e9b4c9583c5f9" dependencies = [ - "libc", - "windows-sys 0.61.2", + "dlopen2", + "dlopen2_derive", + "once_cell", + "rustls-native-certs", + "rustls-pemfile", ] [[package]] -name = "et-cli" -version = "0.1.0" +name = "deno_net" +version = "0.205.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5fcbc6f531c0ee8e7be34bc877aef1ed20c94b7d2215929ea176280259fc7a" dependencies = [ - "anyhow", - "clap", - "edge-toolkit", + "deno_core", + "deno_error", + "deno_features", + "deno_permissions", + "deno_signals", + "deno_tls", + "deno_tunnel", + "hickory-proto", + "hickory-resolver", + "log", + "pin-project", + "quinn", + "rustls-tokio-stream", "serde", - "serde_json", - "serde_yaml", - "tempfile", - "toml", + "sha2", + "socket2 0.5.10", + "thiserror 2.0.18", + "tokio", + "tokio-vsock", + "url", + "web-transport-proto", ] [[package]] -name = "et-modules-service" -version = "0.1.0" +name = "deno_ops" +version = "0.231.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca530772bbcbc9ad389ad7bcd86623b2ec555f68a2d062d23cc008915cbe781" dependencies = [ - "actix-files", - "actix-rt", - "actix-web", - "edge-toolkit", - "serde", - "serde-inline-default", - "serde_default", - "serde_json", - "tracing", + "indexmap 2.11.1", + "proc-macro-rules", + "proc-macro2", + "quote", + "stringcase", + "strum 0.27.2", + "strum_macros 0.27.2", + "syn", + "thiserror 2.0.18", ] [[package]] -name = "et-onnx" -version = "0.1.0" +name = "deno_path_util" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfe02936964b2910719bd488841f6e884349360113c7abf6f4c6b28ca9cd7a19" dependencies = [ - "clap", - "onnx-extractor", + "deno_error", + "percent-encoding", + "sys_traits", + "thiserror 2.0.18", + "url", ] [[package]] -name = "et-storage-service" -version = "0.1.0" +name = "deno_permissions" +version = "0.72.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e08943b9430d1e78b7ddae254666aadfe5d8b3ee5cb253f1dff872ef5b22f10" dependencies = [ - "actix-files", - "actix-web", - "edge-toolkit", - "futures-util", + "capacity_builder", + "deno_error", + "deno_path_util", + "deno_terminal", + "deno_unsync", + "fqdn", + "ipnetwork", + "libc", + "log", + "nix 0.27.1", + "once_cell", + "parking_lot", + "percent-encoding", "serde", - "serde-inline-default", - "serde_default", - "tokio", - "tracing", + "serde_json", + "sys_traits", + "thiserror 2.0.18", + "url", + "which 8.0.2", + "winapi", + "windows-sys 0.59.0", ] [[package]] -name = "et-web" -version = "0.1.0" +name = "deno_signals" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3edcc759556d2d3170bcb5f430c2a3b2ed873211af3c360cc77523ea79b09ffa" dependencies = [ - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "deno_error", + "libc", + "signal-hook", + "thiserror 2.0.18", + "tokio", + "winapi", ] [[package]] -name = "et-ws-audio1" -version = "0.1.0" +name = "deno_subprocess_windows" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63a79fb81598d64bd3adc801fae8f9f6930f4a790f50ff0196e0fe20c92fab46" dependencies = [ - "et-web", - "et-ws-wasm-agent", - "js-sys", - "serde", - "serde-wasm-bindgen", - "serde_json", - "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "web-sys", + "fastrand", + "futures-channel", + "libc", + "windows-sys 0.59.0", ] [[package]] -name = "et-ws-bluetooth" -version = "0.1.0" +name = "deno_telemetry" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80894b874df0ade53b85fd094ff948d645cfe05b5319761f922391b260b111de" dependencies = [ - "et-ws-wasm-agent", - "js-sys", + "async-trait", + "deno_core", + "deno_error", + "deno_net", + "deno_signals", + "deno_tls", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "log", + "once_cell", + "opentelemetry 0.27.1", + "opentelemetry-http 0.27.0", + "opentelemetry-otlp 0.27.0", + "opentelemetry-semantic-conventions", + "opentelemetry_sdk 0.27.1", + "pin-project", "serde", - "serde-wasm-bindgen", - "serde_json", - "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "web-sys", + "thiserror 2.0.18", + "tokio", + "tokio-vsock", + "tower-service", ] [[package]] -name = "et-ws-comm1" -version = "0.1.0" +name = "deno_terminal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23f71c27009e0141dedd315f1dfa3ebb0a6ca4acce7c080fac576ea415a465f6" dependencies = [ - "edge-toolkit", - "et-ws-wasm-agent", - "js-sys", - "serde", - "serde-wasm-bindgen", - "serde_json", - "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "web-sys", + "once_cell", + "termcolor", ] [[package]] -name = "et-ws-data1" -version = "0.1.0" +name = "deno_tls" +version = "0.200.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30245c362adc1e6b74b28c0a4687950c2f0f8729fc62e05f11db29f31d2dd37b" dependencies = [ - "edge-toolkit", - "et-ws-wasm-agent", - "js-sys", + "deno_core", + "deno_error", + "deno_native_certs", + "rustls", + "rustls-pemfile", + "rustls-tokio-stream", + "rustls-webpki 0.102.8", "serde", - "serde-wasm-bindgen", - "serde_json", - "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "web-sys", + "thiserror 2.0.18", + "tokio", + "webpki-roots 0.26.11", ] [[package]] -name = "et-ws-face-detection" -version = "0.1.0" +name = "deno_tunnel" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e432929e0c167f2a003b963ee406c714fcd947a87d4f9edc7b3255e87be9881d" dependencies = [ - "et-web", - "et-ws-wasm-agent", - "js-sys", + "pin-project", + "quinn", "serde", - "serde-wasm-bindgen", "serde_json", + "socket2 0.6.3", + "thiserror 2.0.18", + "tokio", "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "web-sys", ] [[package]] -name = "et-ws-geolocation" -version = "0.1.0" +name = "deno_unsync" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6742a724e8becb372a74c650a1aefb8924a5b8107f7d75b3848763ea24b27a87" dependencies = [ - "et-ws-wasm-agent", - "js-sys", - "serde", - "serde-wasm-bindgen", - "serde_json", - "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "web-sys", + "futures-util", + "parking_lot", + "tokio", ] [[package]] -name = "et-ws-graphics-info" -version = "0.1.0" +name = "deno_url" +version = "0.213.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ebe63615f18221afbdcf0dd97f128af21529c6a4d012a7b9b4a0223c91359b2" dependencies = [ - "et-ws-wasm-agent", - "js-sys", - "serde", - "serde-wasm-bindgen", - "serde_json", - "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "web-sys", + "deno_core", + "deno_error", + "urlpattern", ] [[package]] -name = "et-ws-har1" -version = "0.1.0" +name = "deno_web" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55a863aae15f3dbccb11b3776e9dea399f510a9b1d4dac22a4dcfff96bcff9d7" dependencies = [ - "et-web", - "et-ws-wasm-agent", - "js-sys", + "async-trait", + "base64-simd", + "bytes", + "deno_core", + "deno_error", + "deno_permissions", + "encoding_rs", + "flate2", + "futures", + "serde", + "thiserror 2.0.18", + "tokio", + "uuid", +] + +[[package]] +name = "deno_webgpu" +version = "0.180.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "becd03f8f02cda17d3a94e6acdf4e64224564ccc77b03159d9e0b83c8828c615" +dependencies = [ + "deno_core", + "deno_error", + "deno_unsync", + "indexmap 2.11.1", + "raw-window-handle", "serde", - "serde-wasm-bindgen", "serde_json", - "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "web-sys", + "thiserror 2.0.18", + "tokio", + "wgpu-core", + "wgpu-types", +] + +[[package]] +name = "deno_webidl" +version = "0.213.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68682e535768112593274795b70f4dee5d31d6d973f4be14d660c0a8954e0abb" +dependencies = [ + "deno_core", +] + +[[package]] +name = "deno_websocket" +version = "0.218.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62497c70af5f4e4ea4027f88a80cb295294bc9a032988bb092085aef07b3208" +dependencies = [ + "bytes", + "deno_core", + "deno_error", + "deno_net", + "deno_permissions", + "deno_tls", + "fastwebsockets", + "h2 0.4.14", + "http 1.4.0", + "http-body-util", + "hyper", + "hyper-util", + "once_cell", + "rustls-tokio-stream", + "serde", + "thiserror 2.0.18", + "tokio", +] + +[[package]] +name = "deno_webstorage" +version = "0.208.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "517bc591568d2382b2288bfb581cd6630070ec800ba98d55ca299fff193861a4" +dependencies = [ + "deno_core", + "deno_error", + "rusqlite", + "thiserror 2.0.18", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid 0.9.6", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "der-parser" +version = "10.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" +dependencies = [ + "asn1-rs", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derive-io" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58cc7f4740088458993d183a200fe56e62378736f94bf0e2dd45807407e7bb94" +dependencies = [ + "derive-io-macros", + "tokio", +] + +[[package]] +name = "derive-io-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d0a1bd7eeab72097740967d03d53db5fbaf8e3c0dd471ebdefa43ce445a20a6" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version 0.4.1", + "syn", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid 0.9.6", + "crypto-common 0.1.7", + "subtle", +] + +[[package]] +name = "digest" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" +dependencies = [ + "block-buffer 0.12.0", + "const-oid 0.10.2", + "crypto-common 0.2.1", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dlopen2" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "dprint-swc-ext" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a09827d6db1a3af25e105553d674ee9019be58fa3d6745c2a2803f8ce8e3eb8" +dependencies = [ + "num-bigint", + "rustc-hash 2.1.2", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_parser", + "text_lines", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed448-goldilocks" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06924531e9e90130842b012e447f85bdaf9161bc8a0f8092be8cb70b01ebe092" +dependencies = [ + "fiat-crypto 0.1.20", + "hex", + "subtle", + "zeroize", +] + +[[package]] +name = "edge-toolkit" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "lets_find_up", + "log", + "rstest", + "secrecy", + "serde", + "serde-env", + "serde-inline-default", + "serde_default", + "serde_json", + "serde_yaml", +] + +[[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", + "base64ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "serde_json", + "serdect", + "subtle", + "zeroize", +] + +[[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 = "enum-as-inner" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[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 = "error_reporter" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ae425815400e5ed474178a7a22e275a9687086a12ca63ec793ff292d8fdae8" + +[[package]] +name = "et-cli" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "edge-toolkit", + "serde", + "serde_json", + "serde_yaml", + "tempfile", + "toml", +] + +[[package]] +name = "et-modules-service" +version = "0.1.0" +dependencies = [ + "actix-files", + "actix-rt", + "actix-web", + "edge-toolkit", + "serde", + "serde-inline-default", + "serde_default", + "serde_json", + "tracing", +] + +[[package]] +name = "et-onnx" +version = "0.1.0" +dependencies = [ + "clap", + "onnx-extractor", +] + +[[package]] +name = "et-storage-service" +version = "0.1.0" +dependencies = [ + "actix-files", + "actix-web", + "edge-toolkit", + "futures-util", + "serde", + "serde-inline-default", + "serde_default", + "tokio", + "tracing", +] + +[[package]] +name = "et-web" +version = "0.1.0" +dependencies = [ + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "et-ws-audio1" +version = "0.1.0" +dependencies = [ + "et-web", + "et-ws-wasm-agent", + "js-sys", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-bluetooth" +version = "0.1.0" +dependencies = [ + "et-ws-wasm-agent", + "js-sys", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-comm1" +version = "0.1.0" +dependencies = [ + "edge-toolkit", + "et-ws-wasm-agent", + "js-sys", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-data1" +version = "0.1.0" +dependencies = [ + "edge-toolkit", + "et-ws-wasm-agent", + "js-sys", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-face-detection" +version = "0.1.0" +dependencies = [ + "et-web", + "et-ws-wasm-agent", + "js-sys", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-geolocation" +version = "0.1.0" +dependencies = [ + "et-ws-wasm-agent", + "js-sys", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-graphics-info" +version = "0.1.0" +dependencies = [ + "et-ws-wasm-agent", + "js-sys", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-har1" +version = "0.1.0" +dependencies = [ + "et-web", + "et-ws-wasm-agent", + "js-sys", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-nfc" +version = "0.1.0" +dependencies = [ + "et-ws-wasm-agent", + "js-sys", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-sensor1" +version = "0.1.0" +dependencies = [ + "et-web", + "et-ws-wasm-agent", + "js-sys", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-server" +version = "0.1.0" +dependencies = [ + "actix", + "actix-rt", + "actix-web", + "chrono", + "clap", + "edge-toolkit", + "et-modules-service", + "et-storage-service", + "et-ws-service", + "futures-util", + "hostname", + "local-ip-address", + "log", + "opentelemetry 0.31.0", + "opentelemetry-appender-tracing", + "opentelemetry-otlp 0.31.1", + "opentelemetry_sdk 0.31.0", + "qr2term", + "rcgen", + "regex", + "rustls", + "secrecy", + "serde", + "serde-env", + "serde-inline-default", + "serde_default", + "serde_json", + "serde_yaml", + "tokio", + "tracing", + "tracing-actix-web", + "tracing-log", + "tracing-opentelemetry", + "tracing-subscriber", + "uuid", +] + +[[package]] +name = "et-ws-service" +version = "0.1.0" +dependencies = [ + "actix", + "actix-web", + "actix-web-actors", + "chrono", + "edge-toolkit", + "opentelemetry 0.31.0", + "serde", + "serde_json", + "serde_yaml", + "tracing", + "uuid", +] + +[[package]] +name = "et-ws-speech-recognition" +version = "0.1.0" +dependencies = [ + "et-ws-wasm-agent", + "js-sys", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-test-server" +version = "0.1.0" +dependencies = [ + "actix", + "actix-rt", + "actix-web", + "et-modules-service", + "et-storage-service", + "et-ws-service", + "tempfile", +] + +[[package]] +name = "et-ws-video1" +version = "0.1.0" +dependencies = [ + "et-web", + "et-ws-wasm-agent", + "js-sys", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-wasm-agent" +version = "0.1.0" +dependencies = [ + "chrono", + "edge-toolkit", + "js-sys", + "serde", + "serde_json", + "tracing", + "tracing-wasm", + "wasm-bindgen", + "wasm-bindgen-test", + "web-sys", +] + +[[package]] +name = "et-ws-worker" +version = "0.1.0" +dependencies = [ + "anyhow", + "edge-toolkit", + "et-ws-test-server", + "reqwest", + "rstest", + "rustyscript", + "serde_json", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "fastbloom" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7f34442dbe69c60fe8eaf58a8cafff81a1f278816d8ab4db255b3bef4ac3c4" +dependencies = [ + "getrandom 0.3.4", + "libm", + "rand 0.9.4", + "siphasher 1.0.3", +] + +[[package]] +name = "fastrand" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[package]] +name = "fastwebsockets" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dac026e15fb7e44d768880b868a0fd5bd30ffdee272e88b3060f657a5a72947" +dependencies = [ + "base64 0.21.7", + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "pin-project", + "rand 0.8.5", + "sha1 0.10.6", + "simdutf8", + "thiserror 1.0.69", + "tokio", + "utf-8", +] + +[[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.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "filetime" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" +dependencies = [ + "cfg-if", + "libc", + "libredox", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[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 = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fqdn" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb540cf7bc4fe6df9d8f7f0c974cfd0dce8ed4e9e8884e73433b503ee78b4e7d" + +[[package]] +name = "from_variant" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d7ccf961415e7aa17ef93dcb6c2441faaa8e768abe09e659b908089546f74c5" +dependencies = [ + "proc-macro2", + "swc_macros_common 1.0.0", + "syn", +] + +[[package]] +name = "fs3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb17cf6ed704f72485332f6ab65257460c4f9f3083934cf402bf9f5b3b600a90" +dependencies = [ + "libc", + "rustc_version 0.2.3", + "winapi", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "fslock" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-executor" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +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 5.3.0", + "wasip2", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "rand_core 0.10.1", + "wasip2", + "wasip3", +] + +[[package]] +name = "getset" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" +dependencies = [ + "proc-macro-error2", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "glow" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.9.4", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.9.4", +] + +[[package]] +name = "gpu-allocator" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" +dependencies = [ + "log", + "presser", + "thiserror 1.0.69", + "windows", +] + +[[package]] +name = "gpu-descriptor" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" +dependencies = [ + "bitflags 2.9.4", + "gpu-descriptor-types", + "hashbrown 0.15.5", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.9.4", +] + +[[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 = "gzip-header" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86848f4fd157d91041a62c78046fb7b248bcc2dce78376d436a1756e9a038577" +dependencies = [ + "crc32fast", +] + +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.11.1", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.4.0", + "indexmap 2.11.1", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[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" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash", +] + +[[package]] +name = "hashlink" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.5", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + +[[package]] +name = "hickory-proto" +version = "0.25.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d00147af6310f4392a31680db52a3ed45a2e0f68eb18e8c3fe5537ecc96d9e2" +dependencies = [ + "async-recursion", + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna", + "ipnet", + "once_cell", + "rand 0.9.4", + "serde", + "thiserror 2.0.18", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.25.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5762f69ebdbd4ddb2e975cd24690bf21fe6b2604039189c26acddbc427f12887" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "moka", + "once_cell", + "parking_lot", + "rand 0.9.4", + "resolv-conf", + "serde", + "smallvec", + "thiserror 2.0.18", + "tokio", + "tracing", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "hostname" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd" +dependencies = [ + "cfg-if", + "libc", + "windows-link", +] + +[[package]] +name = "hstr" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b85186bc48d3c611ead052cc3f907748e40b63d73a99e4ed34d18063e2baaf1b" +dependencies = [ + "hashbrown 0.14.5", + "new_debug_unreachable", + "once_cell", + "rustc-hash 2.1.2", + "triomphe", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.4.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 1.4.0", +] + +[[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 1.4.0", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "http-range" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hybrid-array" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d46837a0ed51fe95bd3b05de33cd64a1ee88fc797477ca48446872504507c5" +dependencies = [ + "typenum", +] + +[[package]] +name = "hyper" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2 0.4.14", + "http 1.4.0", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http 1.4.0", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots 1.0.7", +] + +[[package]] +name = "hyper-timeout" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" +dependencies = [ + "hyper", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.4.0", + "http-body", + "hyper", + "libc", + "pin-project-lite", + "socket2 0.6.3", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +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.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "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 = "if_chain" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd62e6b5e86ea8eeeb8db1de02880a6abc01a397b2ebb64b5d74ac255318f5cb" + +[[package]] +name = "impl-more" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" + +[[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", +] + +[[package]] +name = "indexmap" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" +dependencies = [ + "equivalent", + "hashbrown 0.15.5", + "serde", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "ipconfig" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" +dependencies = [ + "socket2 0.6.3", + "widestring", + "windows-registry 0.6.1", + "windows-result 0.4.1", + "windows-sys 0.61.2", +] + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "ipnetwork" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" +dependencies = [ + "serde", +] + +[[package]] +name = "is-macro" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57a3e447e24c22647738e4607f1df1e0ec6f72e16182c4cd199f647cdfb0e4" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[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.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.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" +dependencies = [ + "cfg-if", + "futures-util", + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "junction" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72bbdfd737a243da3dfc1f99ee8d6e166480f17ab4ac84d7c34aacd73fc7bd16" +dependencies = [ + "scopeguard", + "windows-sys 0.52.0", +] + +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading", + "pkg-config", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "language-tags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "lets_find_up" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8052b3d5cfa8bae8af3b44aae11a43e9fa48ce0ae477c4a39733a8deff34059" + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "libredox" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" +dependencies = [ + "bitflags 2.9.4", + "libc", + "plain", + "redox_syscall 0.7.5", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb8270bb4060bd76c6e96f20c52d80620f1d82a3470885694e41e0f81ef6fe7" +dependencies = [ + "bindgen", + "cc", + "pkg-config", + "vcpkg", +] + +[[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.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + +[[package]] +name = "local-channel" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" +dependencies = [ + "futures-core", + "futures-sink", + "local-waker", +] + +[[package]] +name = "local-ip-address" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7b0187df4e614e42405b49511b82ff7a1774fbd9a816060ee465067847cac22" +dependencies = [ + "libc", + "neli", + "windows-sys 0.61.2", +] + +[[package]] +name = "local-waker" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" + +[[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 = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "maybe_path" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9c9329bd78af28f0d589085c383e5af47a24fbe070bc282cc7aa54a021c285b" +dependencies = [ + "serde", +] + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "memmap2" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "metal" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" +dependencies = [ + "bitflags 2.9.4", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + +[[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 = "minicov" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4869b6a491569605d66d3952bcdf03df789e5b536e5f0cf7758a7f08a55ae24d" +dependencies = [ + "cc", + "walkdir", +] + +[[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.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "moka" +version = "0.12.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" +dependencies = [ + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "equivalent", + "parking_lot", + "portable-atomic", + "smallvec", + "tagptr", + "uuid", +] + +[[package]] +name = "multimap" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" + +[[package]] +name = "mutually_exclusive_features" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94e1e6445d314f972ff7395df2de295fe51b71821694f0b0e1e79c4f12c8577" + +[[package]] +name = "naga" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags 2.9.4", + "cfg_aliases", + "codespan-reporting", + "hexf-parse", + "indexmap 2.11.1", + "log", + "rustc-hash 1.1.0", + "serde", + "spirv", + "strum 0.26.3", + "termcolor", + "thiserror 2.0.18", + "unicode-xid", +] + +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys 0.3.1", +] + +[[package]] +name = "neli" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f9786d56d972959e1408b6a93be6af13b9c1392036c5c1fafa08a1b0c6ee87" +dependencies = [ + "bitflags 2.9.4", + "byteorder", + "derive_builder", + "getset", + "libc", + "log", + "neli-proc-macros", + "parking_lot", +] + +[[package]] +name = "neli-proc-macros" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d8d08c6e98f20a62417478ebf7be8e1425ec9acecc6f63e22da633f6b71609" +dependencies = [ + "either", + "proc-macro2", + "quote", + "serde", + "syn", +] + +[[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.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "libc", +] + +[[package]] +name = "nix" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[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 = "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 = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", + "rand 0.8.5", + "serde", +] + +[[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-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 = "et-ws-nfc" -version = "0.1.0" +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "et-ws-wasm-agent", + "hermit-abi", + "libc", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "object" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" +dependencies = [ + "asn1-rs", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "onnx-extractor" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dcef162d82101e4b8a54631b983d5aee84f7657a113c62a322b4e5de46a417c" +dependencies = [ + "memmap2", + "prost 0.14.3", + "prost-build", +] + +[[package]] +name = "oorandom" +version = "11.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "opentelemetry" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab70038c28ed37b97d8ed414b6429d343a8bbf44c9f79ec854f3a643029ba6d7" +dependencies = [ + "futures-core", + "futures-sink", "js-sys", - "serde", - "serde-wasm-bindgen", - "serde_json", + "pin-project-lite", + "thiserror 1.0.69", "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "web-sys", ] [[package]] -name = "et-ws-sensor1" -version = "0.1.0" +name = "opentelemetry" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84bcd6ae87133e903af7ef497404dda70c60d0ea14895fc8a5e6722754fc2a0" dependencies = [ - "et-web", - "et-ws-wasm-agent", + "futures-core", + "futures-sink", "js-sys", - "serde", - "serde-wasm-bindgen", - "serde_json", + "pin-project-lite", + "thiserror 2.0.18", "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "web-sys", ] [[package]] -name = "et-ws-server" -version = "0.1.0" +name = "opentelemetry-appender-tracing" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef6a1ac5ca3accf562b8c306fa8483c85f4390f768185ab775f242f7fe8fdcc2" dependencies = [ - "actix", - "actix-rt", - "actix-web", - "chrono", - "clap", - "edge-toolkit", - "et-modules-service", - "et-storage-service", - "et-ws-service", - "futures-util", - "hostname", - "local-ip-address", - "log", - "opentelemetry", - "opentelemetry-appender-tracing", - "opentelemetry-otlp", - "opentelemetry_sdk", - "qr2term", - "rcgen", - "regex", - "rustls", - "secrecy", - "serde", - "serde-env", - "serde-inline-default", - "serde_default", - "serde_json", - "serde_yaml", - "tokio", + "opentelemetry 0.31.0", "tracing", - "tracing-actix-web", - "tracing-log", - "tracing-opentelemetry", + "tracing-core", "tracing-subscriber", - "uuid", ] [[package]] -name = "et-ws-service" -version = "0.1.0" +name = "opentelemetry-http" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a8a7f5f6ba7c1b286c2fbca0454eaba116f63bbe69ed250b642d36fbb04d80" dependencies = [ - "actix", - "actix-web", - "actix-web-actors", - "chrono", - "edge-toolkit", - "opentelemetry", - "serde", + "async-trait", + "bytes", + "http 1.4.0", + "opentelemetry 0.27.1", +] + +[[package]] +name = "opentelemetry-http" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7a6d09a73194e6b66df7c8f1b680f156d916a1a942abf2de06823dd02b7855d" +dependencies = [ + "async-trait", + "bytes", + "http 1.4.0", + "opentelemetry 0.31.0", + "reqwest", +] + +[[package]] +name = "opentelemetry-otlp" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cf61a1868dacc576bf2b2a1c3e9ab150af7272909e80085c3173384fe11f76" +dependencies = [ + "async-trait", + "futures-core", + "http 1.4.0", + "opentelemetry 0.27.1", + "opentelemetry-http 0.27.0", + "opentelemetry-proto 0.27.0", + "opentelemetry_sdk 0.27.1", + "prost 0.13.5", "serde_json", - "serde_yaml", + "thiserror 1.0.69", + "tokio", + "tonic 0.12.3", "tracing", - "uuid", ] [[package]] -name = "et-ws-speech-recognition" -version = "0.1.0" +name = "opentelemetry-otlp" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f69cd6acbb9af919df949cd1ec9e5e7fdc2ef15d234b6b795aaa525cc02f71f" dependencies = [ - "et-ws-wasm-agent", - "js-sys", - "serde", - "serde-wasm-bindgen", + "http 1.4.0", + "opentelemetry 0.31.0", + "opentelemetry-http 0.31.0", + "opentelemetry-proto 0.31.0", + "opentelemetry_sdk 0.31.0", + "prost 0.14.3", + "reqwest", "serde_json", - "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "web-sys", + "thiserror 2.0.18", ] [[package]] -name = "et-ws-video1" -version = "0.1.0" +name = "opentelemetry-proto" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6e05acbfada5ec79023c85368af14abd0b307c015e9064d249b2a950ef459a6" dependencies = [ - "et-web", - "et-ws-wasm-agent", - "js-sys", + "hex", + "opentelemetry 0.27.1", + "opentelemetry_sdk 0.27.1", + "prost 0.13.5", "serde", - "serde-wasm-bindgen", - "serde_json", - "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test", - "web-sys", + "tonic 0.12.3", ] [[package]] -name = "et-ws-wasm-agent" -version = "0.1.0" +name = "opentelemetry-proto" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7175df06de5eaee9909d4805a3d07e28bb752c34cab57fa9cff549da596b30f" dependencies = [ - "chrono", - "edge-toolkit", - "js-sys", + "base64 0.22.1", + "const-hex", + "opentelemetry 0.31.0", + "opentelemetry_sdk 0.31.0", + "prost 0.14.3", "serde", "serde_json", - "tracing", - "tracing-wasm", - "wasm-bindgen", - "wasm-bindgen-test", - "web-sys", + "tonic 0.14.5", + "tonic-prost", ] [[package]] -name = "fastrand" -version = "2.4.1" +name = "opentelemetry-semantic-conventions" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "bc1b6902ff63b32ef6c489e8048c5e253e2e4a803ea3ea7e783914536eb15c52" [[package]] -name = "find-msvc-tools" -version = "0.1.9" +name = "opentelemetry_sdk" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "231e9d6ceef9b0b2546ddf52335785ce41252bc7474ee8ba05bfad277be13ab8" +dependencies = [ + "async-trait", + "futures-channel", + "futures-executor", + "futures-util", + "glob", + "opentelemetry 0.27.1", + "percent-encoding", + "rand 0.8.5", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tracing", +] [[package]] -name = "fixedbitset" -version = "0.5.7" +name = "opentelemetry_sdk" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" +checksum = "e14ae4f5991976fd48df6d843de219ca6d31b01daaab2dad5af2badeded372bd" +dependencies = [ + "futures-channel", + "futures-executor", + "futures-util", + "opentelemetry 0.31.0", + "percent-encoding", + "rand 0.9.4", + "thiserror 2.0.18", +] [[package]] -name = "flate2" -version = "1.1.9" +name = "ordered-float" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" dependencies = [ - "crc32fast", - "miniz_oxide", + "num-traits", ] [[package]] -name = "fnv" -version = "1.0.7" +name = "os_pipe" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] [[package]] -name = "foldhash" -version = "0.1.5" +name = "outref" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" [[package]] -name = "form_urlencoded" -version = "1.2.2" +name = "p256" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" dependencies = [ - "percent-encoding", + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", ] [[package]] -name = "fs_extra" -version = "1.3.0" +name = "p384" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] [[package]] -name = "futures-channel" -version = "0.3.32" +name = "p521" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "0fc9e2161f1f215afdfce23677034ae137bbd45016a880c2eb3ba8eb95f085b2" dependencies = [ - "futures-core", - "futures-sink", + "base16ct", + "ecdsa", + "elliptic-curve", + "primeorder", + "rand_core 0.6.4", + "sha2", ] [[package]] -name = "futures-core" -version = "0.3.32" +name = "par-core" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "757892557993c69e82f9de0f9051e87144278aa342f03bf53617bbf044554484" +dependencies = [ + "once_cell", +] [[package]] -name = "futures-executor" -version = "0.3.32" +name = "par-iter" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "8a5b20f31e9ba82bfcbbb54a67aa40be6cebec9f668ba5753be138f9523c531a" dependencies = [ - "futures-core", - "futures-task", - "futures-util", + "either", + "par-core", ] [[package]] -name = "futures-io" -version = "0.3.32" +name = "parking_lot" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] [[package]] -name = "futures-macro" -version = "0.3.32" +name = "parking_lot_core" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ - "proc-macro2", - "quote", - "syn", + "cfg-if", + "libc", + "redox_syscall 0.5.18", + "smallvec", + "windows-link", ] [[package]] -name = "futures-sink" -version = "0.3.32" +name = "paste" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] -name = "futures-task" -version = "0.3.32" +name = "pathdiff" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] -name = "futures-timer" -version = "3.0.3" +name = "pem" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" +dependencies = [ + "base64 0.22.1", + "serde", +] [[package]] -name = "futures-util" -version = "0.3.32" +name = "pem-rfc7468" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" dependencies = [ - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "slab", + "base64ct", ] [[package]] -name = "getrandom" -version = "0.2.17" +name = "percent-encoding" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "petgraph" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ - "cfg-if", - "libc", - "wasi", + "fixedbitset", + "hashbrown 0.15.5", + "indexmap 2.11.1", ] [[package]] -name = "getrandom" -version = "0.3.4" +name = "phf" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ - "cfg-if", - "libc", - "r-efi 5.3.0", - "wasip2", + "phf_macros", + "phf_shared", ] [[package]] -name = "getrandom" -version = "0.4.2" +name = "phf_generator" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "cfg-if", - "libc", - "r-efi 6.0.0", - "rand_core 0.10.1", - "wasip2", - "wasip3", + "phf_shared", + "rand 0.8.5", ] [[package]] -name = "getset" -version = "0.1.6" +name = "phf_macros" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" dependencies = [ - "proc-macro-error2", + "phf_generator", + "phf_shared", "proc-macro2", "quote", "syn", ] [[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - -[[package]] -name = "h2" -version = "0.3.27" +name = "phf_shared" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", + "siphasher 1.0.3", ] [[package]] -name = "hashbrown" -version = "0.15.5" +name = "pin-project" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ - "foldhash", + "pin-project-internal", ] [[package]] -name = "hashbrown" -version = "0.17.0" +name = "pin-project-internal" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "heck" -version = "0.5.0" +name = "pin-project-lite" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] -name = "hostname" -version = "0.4.2" +name = "pkcs1" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" dependencies = [ - "cfg-if", - "libc", - "windows-link", + "der", + "pkcs8", + "spki", ] [[package]] -name = "http" -version = "0.2.12" +name = "pkcs8" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "bytes", - "fnv", - "itoa", + "der", + "spki", ] [[package]] -name = "http" -version = "1.4.0" +name = "pkg-config" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" -dependencies = [ - "bytes", - "itoa", -] +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] -name = "http-body" -version = "1.0.1" +name = "plain" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http 1.4.0", -] +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] -name = "http-body-util" -version = "0.1.3" +name = "polyval" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ - "bytes", - "futures-core", - "http 1.4.0", - "http-body", - "pin-project-lite", + "cfg-if", + "cpufeatures 0.2.17", + "opaque-debug", + "universal-hash", ] [[package]] -name = "http-range" -version = "0.1.5" +name = "portable-atomic" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] -name = "httparse" -version = "1.10.1" +name = "potential_utf" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "powerfmt" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] -name = "hybrid-array" -version = "0.4.11" +name = "ppv-lite86" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d46837a0ed51fe95bd3b05de33cd64a1ee88fc797477ca48446872504507c5" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "typenum", + "zerocopy", ] [[package]] -name = "hyper" -version = "1.9.0" +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "prettyplease" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "http 1.4.0", - "http-body", - "httparse", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", + "proc-macro2", + "syn", ] [[package]] -name = "hyper-util" -version = "0.1.20" +name = "primeorder" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" dependencies = [ - "base64", - "bytes", - "futures-channel", - "futures-util", - "http 1.4.0", - "http-body", - "hyper", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2 0.6.3", - "tokio", - "tower-service", - "tracing", + "elliptic-curve", ] [[package]] -name = "iana-time-zone" -version = "0.1.65" +name = "proc-macro-crate" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", + "toml_edit 0.23.4", ] [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "proc-macro-error-attr2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ - "cc", + "proc-macro2", + "quote", ] [[package]] -name = "icu_collections" -version = "2.2.0" +name = "proc-macro-error2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ - "displaydoc", - "potential_utf", - "utf8_iter", - "yoke", - "zerofrom", - "zerovec", + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "icu_locale_core" -version = "2.2.0" +name = "proc-macro-rules" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "07c277e4e643ef00c1233393c673f655e3672cf7eb3ba08a00bdd0ea59139b5f" dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", + "proc-macro-rules-macros", + "proc-macro2", + "syn", ] [[package]] -name = "icu_normalizer" -version = "2.2.0" +name = "proc-macro-rules-macros" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "207fffb0fe655d1d47f6af98cc2793405e85929bdbc420d685554ff07be27ac7" dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", + "once_cell", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "icu_normalizer_data" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" - -[[package]] -name = "icu_properties" -version = "2.2.0" +name = "proc-macro2" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", + "unicode-ident", ] [[package]] -name = "icu_properties_data" -version = "2.2.0" +name = "profiling" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" +checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" [[package]] -name = "icu_provider" -version = "2.2.0" +name = "proptest" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "bee689443a2bd0a16ab0348b52ee43e3b2d1b1f931c8aa5c9f8de4c86fbe8c40" dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", + "bitflags 2.9.4", + "num-traits", + "rand 0.9.4", + "rand_chacha 0.9.0", + "rand_xorshift", + "regex-syntax", + "unarray", ] [[package]] -name = "id-arena" -version = "2.3.0" +name = "prost" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive 0.13.5", +] [[package]] -name = "ident_case" -version = "1.0.1" +name = "prost" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" +dependencies = [ + "bytes", + "prost-derive 0.14.3", +] [[package]] -name = "idna" -version = "1.1.0" +name = "prost-build" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", + "heck", + "itertools 0.14.0", + "log", + "multimap", + "petgraph", + "prettyplease", + "prost 0.14.3", + "prost-types", + "regex", + "syn", + "tempfile", ] [[package]] -name = "idna_adapter" -version = "1.2.1" +name = "prost-derive" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ - "icu_normalizer", - "icu_properties", + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "impl-more" -version = "0.1.9" +name = "prost-derive" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" +checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "indexmap" -version = "2.14.0" +name = "prost-types" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" dependencies = [ - "equivalent", - "hashbrown 0.17.0", - "serde", - "serde_core", + "prost 0.14.3", ] [[package]] -name = "ipnet" -version = "2.12.0" +name = "psm" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +checksum = "645dbe486e346d9b5de3ef16ede18c26e6c70ad97418f4874b8b1889d6e761ea" +dependencies = [ + "ar_archive_writer", + "cc", +] [[package]] -name = "iri-string" -version = "0.7.12" +name = "qr2term" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" +checksum = "6867c60b38e9747a079a19614dbb5981a53f21b9a56c265f3bfdf6011a50a957" dependencies = [ - "memchr", - "serde", + "crossterm", + "qrcode", ] [[package]] -name = "is_terminal_polyfill" -version = "1.70.2" +name = "qrcode" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" +checksum = "d68782463e408eb1e668cf6152704bd856c78c5b6417adaee3203d8f4c1fc9ec" [[package]] -name = "itertools" -version = "0.14.0" +name = "quinn" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ - "either", + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.2", + "rustls", + "socket2 0.6.3", + "thiserror 2.0.18", + "tokio", + "tracing", + "web-time", ] [[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - -[[package]] -name = "jobserver" -version = "0.1.34" +name = "quinn-proto" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ + "aws-lc-rs", + "bytes", + "fastbloom", "getrandom 0.3.4", - "libc", + "lru-slab", + "rand 0.9.4", + "ring", + "rustc-hash 2.1.2", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "web-time", ] [[package]] -name = "js-sys" -version = "0.3.95" +name = "quinn-udp" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ - "cfg-if", - "futures-util", + "cfg_aliases", + "libc", "once_cell", - "wasm-bindgen", + "socket2 0.6.3", + "tracing", + "windows-sys 0.59.0", ] [[package]] -name = "language-tags" -version = "0.3.2" +name = "quote" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] [[package]] -name = "lazy_static" -version = "1.5.0" +name = "r-efi" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] -name = "leb128fmt" -version = "0.1.0" +name = "r-efi" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] -name = "lets_find_up" -version = "0.0.4" +name = "radium" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8052b3d5cfa8bae8af3b44aae11a43e9fa48ce0ae477c4a39733a8deff34059" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] -name = "libc" -version = "0.2.186" +name = "rand" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] [[package]] -name = "libm" -version = "0.2.16" +name = "rand" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] [[package]] -name = "linux-raw-sys" -version = "0.4.15" +name = "rand" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +dependencies = [ + "chacha20", + "getrandom 0.4.2", + "rand_core 0.10.1", +] [[package]] -name = "linux-raw-sys" -version = "0.12.1" +name = "rand_chacha" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] [[package]] -name = "litemap" -version = "0.8.2" +name = "rand_chacha" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", +] [[package]] -name = "local-channel" -version = "0.1.5" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "futures-core", - "futures-sink", - "local-waker", + "getrandom 0.2.17", ] [[package]] -name = "local-ip-address" -version = "0.6.12" +name = "rand_core" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7b0187df4e614e42405b49511b82ff7a1774fbd9a816060ee465067847cac22" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "libc", - "neli", - "windows-sys 0.61.2", + "getrandom 0.3.4", ] [[package]] -name = "local-waker" -version = "0.1.4" +name = "rand_core" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] -name = "lock_api" -version = "0.4.14" +name = "rand_xorshift" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "scopeguard", + "rand_core 0.9.5", ] [[package]] -name = "log" -version = "0.4.29" +name = "range-alloc" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08" [[package]] -name = "matchers" -version = "0.2.0" +name = "raw-window-handle" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" -dependencies = [ - "regex-automata", -] +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] -name = "memchr" -version = "2.8.0" +name = "rayon" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" +dependencies = [ + "either", + "rayon-core", +] [[package]] -name = "memmap2" -version = "0.9.10" +name = "rayon-core" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ - "libc", + "crossbeam-deque", + "crossbeam-utils", ] [[package]] -name = "mime" -version = "0.3.17" +name = "rcgen" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +checksum = "10b99e0098aa4082912d4c649628623db6aba77335e4f4569ff5083a6448b32e" +dependencies = [ + "pem", + "ring", + "rustls-pki-types", + "time", + "x509-parser", + "yasna", +] [[package]] -name = "mime_guess" -version = "2.0.5" +name = "redox_syscall" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "mime", - "unicase", + "bitflags 2.9.4", ] [[package]] -name = "minicov" -version = "0.3.8" +name = "redox_syscall" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4869b6a491569605d66d3952bcdf03df789e5b536e5f0cf7758a7f08a55ae24d" +checksum = "4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1b" dependencies = [ - "cc", - "walkdir", + "bitflags 2.9.4", ] [[package]] -name = "minimal-lexical" -version = "0.2.1" +name = "regex" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] [[package]] -name = "miniz_oxide" -version = "0.8.9" +name = "regex-automata" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ - "adler2", - "simd-adler32", + "aho-corasick", + "memchr", + "regex-syntax", ] [[package]] -name = "mio" -version = "1.2.0" +name = "regex-lite" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.61.2", -] +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] -name = "multimap" -version = "0.10.1" +name = "regex-syntax" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] -name = "mutually_exclusive_features" -version = "0.1.0" +name = "relative-path" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94e1e6445d314f972ff7395df2de295fe51b71821694f0b0e1e79c4f12c8577" +checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] -name = "neli" -version = "0.7.4" +name = "reqwest" +version = "0.12.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f9786d56d972959e1408b6a93be6af13b9c1392036c5c1fafa08a1b0c6ee87" +checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" dependencies = [ - "bitflags", - "byteorder", - "derive_builder", - "getset", - "libc", + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http 1.4.0", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "ipnet", + "js-sys", "log", - "neli-proc-macros", - "parking_lot", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 0.26.11", + "windows-registry 0.2.0", ] [[package]] -name = "neli-proc-macros" -version = "0.2.2" +name = "resolv-conf" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d8d08c6e98f20a62417478ebf7be8e1425ec9acecc6f63e22da633f6b71609" +checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "either", - "proc-macro2", - "quote", - "serde", - "syn", + "hmac", + "subtle", ] [[package]] -name = "nom" -version = "7.1.3" +name = "ring" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ - "memchr", - "minimal-lexical", + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted 0.9.0", + "windows-sys 0.52.0", ] [[package]] -name = "nu-ansi-term" -version = "0.50.3" +name = "ron" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ - "windows-sys 0.61.2", + "base64 0.21.7", + "bitflags 2.9.4", + "serde", + "serde_derive", ] [[package]] -name = "num-bigint" -version = "0.4.6" +name = "rsa" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" dependencies = [ + "const-oid 0.9.6", + "digest 0.10.7", + "num-bigint-dig", "num-integer", "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "signature", + "spki", + "subtle", + "zeroize", ] [[package]] -name = "num-conv" -version = "0.2.1" +name = "rstest" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" +dependencies = [ + "futures-timer", + "futures-util", + "rstest_macros", +] [[package]] -name = "num-integer" -version = "0.1.46" +name = "rstest_macros" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" dependencies = [ - "num-traits", + "cfg-if", + "glob", + "proc-macro-crate", + "proc-macro2", + "quote", + "regex", + "relative-path", + "rustc_version 0.4.1", + "syn", + "unicode-ident", ] [[package]] -name = "num-traits" -version = "0.2.19" +name = "rusqlite" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "37e34486da88d8e051c7c0e23c3f15fd806ea8546260aa2fec247e97242ec143" dependencies = [ - "autocfg", - "libm", + "bitflags 2.9.4", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", ] [[package]] -name = "oid-registry" -version = "0.8.1" +name = "rustc-hash" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" -dependencies = [ - "asn1-rs", -] +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] -name = "once_cell" -version = "1.21.4" +name = "rustc-hash" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" [[package]] -name = "once_cell_polyfill" -version = "1.70.2" +name = "rustc_version" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] [[package]] -name = "onnx-extractor" -version = "0.3.5" +name = "rustc_version" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dcef162d82101e4b8a54631b983d5aee84f7657a113c62a322b4e5de46a417c" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "memmap2", - "prost", - "prost-build", + "semver 1.0.28", ] [[package]] -name = "oorandom" -version = "11.1.5" +name = "rusticata-macros" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] [[package]] -name = "opentelemetry" -version = "0.31.0" +name = "rustix" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84bcd6ae87133e903af7ef497404dda70c60d0ea14895fc8a5e6722754fc2a0" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "futures-core", - "futures-sink", - "js-sys", - "pin-project-lite", - "thiserror", - "tracing", + "bitflags 2.9.4", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", ] [[package]] -name = "opentelemetry-appender-tracing" -version = "0.31.1" +name = "rustix" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef6a1ac5ca3accf562b8c306fa8483c85f4390f768185ab775f242f7fe8fdcc2" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "opentelemetry", - "tracing", - "tracing-core", - "tracing-subscriber", + "bitflags 2.9.4", + "errno", + "libc", + "linux-raw-sys 0.12.1", + "windows-sys 0.61.2", ] [[package]] -name = "opentelemetry-http" -version = "0.31.0" +name = "rustls" +version = "0.23.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a6d09a73194e6b66df7c8f1b680f156d916a1a942abf2de06823dd02b7855d" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" dependencies = [ - "async-trait", - "bytes", - "http 1.4.0", - "opentelemetry", - "reqwest", + "aws-lc-rs", + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.103.13", + "subtle", + "zeroize", ] [[package]] -name = "opentelemetry-otlp" -version = "0.31.1" +name = "rustls-native-certs" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f69cd6acbb9af919df949cd1ec9e5e7fdc2ef15d234b6b795aaa525cc02f71f" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" dependencies = [ - "http 1.4.0", - "opentelemetry", - "opentelemetry-http", - "opentelemetry-proto", - "opentelemetry_sdk", - "prost", - "reqwest", - "serde_json", - "thiserror", + "openssl-probe", + "rustls-pemfile", + "rustls-pki-types", + "schannel", + "security-framework", ] [[package]] -name = "opentelemetry-proto" -version = "0.31.0" +name = "rustls-pemfile" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7175df06de5eaee9909d4805a3d07e28bb752c34cab57fa9cff549da596b30f" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", - "const-hex", - "opentelemetry", - "opentelemetry_sdk", - "prost", - "serde", - "serde_json", - "tonic", - "tonic-prost", + "rustls-pki-types", ] [[package]] -name = "opentelemetry_sdk" -version = "0.31.0" +name = "rustls-pki-types" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ae4f5991976fd48df6d843de219ca6d31b01daaab2dad5af2badeded372bd" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" dependencies = [ - "futures-channel", - "futures-executor", - "futures-util", - "opentelemetry", - "percent-encoding", - "rand 0.9.4", - "thiserror", + "web-time", + "zeroize", ] [[package]] -name = "parking_lot" -version = "0.12.5" +name = "rustls-tokio-stream" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +checksum = "0560d12c0d8c672f849197de91b9ee61f5bf9aa024c97aaeeb112ec2f6c347fd" dependencies = [ - "lock_api", - "parking_lot_core", + "derive-io", + "futures", + "rustls", + "socket2 0.5.10", + "tokio", ] [[package]] -name = "parking_lot_core" -version = "0.9.12" +name = "rustls-webpki" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", + "ring", + "rustls-pki-types", + "untrusted 0.9.0", ] [[package]] -name = "pem" -version = "3.0.6" +name = "rustls-webpki" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ - "base64", - "serde_core", + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted 0.9.0", ] [[package]] -name = "percent-encoding" -version = "2.3.2" +name = "rustversion" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] -name = "petgraph" -version = "0.8.3" +name = "rustyscript" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" +checksum = "d7022cabe11c65c8a34a3b0e92ca1d55a0add1f873cec4def14c5b82938003d6" dependencies = [ - "fixedbitset", - "hashbrown 0.15.5", - "indexmap", + "async-trait", + "base64-simd", + "deno_ast", + "deno_console", + "deno_core", + "deno_crypto", + "deno_error", + "deno_features", + "deno_fetch", + "deno_fs", + "deno_media_type", + "deno_net", + "deno_permissions", + "deno_telemetry", + "deno_terminal", + "deno_tls", + "deno_url", + "deno_web", + "deno_webgpu", + "deno_webidl", + "deno_websocket", + "deno_webstorage", + "http 1.4.0", + "hyper-util", + "maybe_path", + "paste", + "reqwest", + "rustls", + "serde", + "thiserror 2.0.18", + "tokio", + "tokio-util", ] [[package]] -name = "pin-project" -version = "1.1.11" +name = "ryu" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "ryu-js" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd29631678d6fb0903b69223673e122c32e9ae559d0960a38d574695ebc0ea15" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ - "pin-project-internal", + "winapi-util", ] [[package]] -name = "pin-project-internal" -version = "1.1.11" +name = "schannel" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ - "proc-macro2", - "quote", - "syn", + "windows-sys 0.61.2", ] [[package]] -name = "pin-project-lite" -version = "0.2.17" +name = "scoped-tls" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] -name = "pkg-config" -version = "0.3.33" +name = "scopeguard" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "potential_utf" -version = "0.1.5" +name = "sec1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ - "zerovec", + "base16ct", + "der", + "generic-array", + "pkcs8", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "secrecy" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" +dependencies = [ + "serde", + "zeroize", ] [[package]] -name = "powerfmt" -version = "0.2.0" +name = "security-framework" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.9.4", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] [[package]] -name = "ppv-lite86" -version = "0.2.21" +name = "security-framework-sys" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ - "zerocopy", + "core-foundation-sys", + "libc", ] [[package]] -name = "prettyplease" -version = "0.2.37" +name = "semver" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "proc-macro2", - "syn", + "semver-parser", ] [[package]] -name = "proc-macro-crate" -version = "3.5.0" +name = "semver" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" -dependencies = [ - "toml_edit 0.25.11+spec-1.1.0", -] +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" +name = "semver-parser" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ - "proc-macro2", - "quote", + "serde_derive", ] [[package]] -name = "proc-macro-error2" -version = "2.0.1" +name = "serde-env" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +checksum = "f9d29a4f822b7a7e7eada47da087a9d29d9b266dba45edc375fdc700965860d7" dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn", + "serde", ] [[package]] -name = "proc-macro2" -version = "1.0.106" +name = "serde-inline-default" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "2bf03b7a5281cfd4013bc788d057b0f09fc634397d83bc8973c955bd4f32727a" dependencies = [ - "unicode-ident", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "proptest" -version = "1.11.0" +name = "serde-wasm-bindgen" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" dependencies = [ - "bitflags", - "num-traits", - "rand 0.9.4", - "rand_chacha", - "rand_xorshift", - "regex-syntax", - "unarray", + "js-sys", + "serde", + "wasm-bindgen", ] [[package]] -name = "prost" -version = "0.14.3" +name = "serde_bytes" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" dependencies = [ - "bytes", - "prost-derive", + "serde", ] [[package]] -name = "prost-build" -version = "0.14.3" +name = "serde_default" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7" +checksum = "486b028b311aaaea83e0ba65a3e6e3cbef381e74e9d0bd6263faefd1fb503c1d" dependencies = [ - "heck", - "itertools", - "log", - "multimap", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", + "darling", + "proc-macro2", + "quote", "syn", - "tempfile", ] [[package]] -name = "prost-derive" -version = "0.14.3" +name = "serde_derive" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ - "anyhow", - "itertools", "proc-macro2", "quote", "syn", ] [[package]] -name = "prost-types" -version = "0.14.3" +name = "serde_json" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ - "prost", + "indexmap 2.11.1", + "itoa", + "memchr", + "ryu", + "serde", ] [[package]] -name = "qr2term" -version = "0.3.3" +name = "serde_spanned" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6867c60b38e9747a079a19614dbb5981a53f21b9a56c265f3bfdf6011a50a957" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ - "crossterm", - "qrcode", + "serde", ] [[package]] -name = "qrcode" -version = "0.14.1" +name = "serde_urlencoded" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68782463e408eb1e668cf6152704bd856c78c5b6417adaee3203d8f4c1fc9ec" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] [[package]] -name = "quote" -version = "1.0.45" +name = "serde_v8" +version = "0.264.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "c34707712f3815e73e1c8319bba06e5bc105bb65fe812ea2e7279ffb905f6312" dependencies = [ - "proc-macro2", + "deno_error", + "num-bigint", + "serde", + "smallvec", + "thiserror 2.0.18", + "v8", ] [[package]] -name = "r-efi" -version = "5.3.0" +name = "serde_yaml" +version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.11.1", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] [[package]] -name = "r-efi" -version = "6.0.0" +name = "serdect" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] [[package]] -name = "rand" -version = "0.9.4" +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ - "rand_chacha", - "rand_core 0.9.5", + "cfg-if", + "cpufeatures 0.2.17", + "digest 0.10.7", ] [[package]] -name = "rand" -version = "0.10.1" +name = "sha1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" dependencies = [ - "chacha20", - "getrandom 0.4.2", - "rand_core 0.10.1", + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.2", ] [[package]] -name = "rand_chacha" -version = "0.9.0" +name = "sha2" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ - "ppv-lite86", - "rand_core 0.9.5", + "cfg-if", + "cpufeatures 0.2.17", + "digest 0.10.7", ] [[package]] -name = "rand_core" -version = "0.9.5" +name = "sharded-slab" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ - "getrandom 0.3.4", + "lazy_static", ] [[package]] -name = "rand_core" -version = "0.10.1" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "rand_xorshift" -version = "0.4.0" +name = "signal-hook" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" dependencies = [ - "rand_core 0.9.5", + "libc", + "signal-hook-registry", ] [[package]] -name = "rcgen" -version = "0.14.7" +name = "signal-hook-registry" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10b99e0098aa4082912d4c649628623db6aba77335e4f4569ff5083a6448b32e" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ - "pem", - "ring", - "rustls-pki-types", - "time", - "x509-parser", - "yasna", + "errno", + "libc", ] [[package]] -name = "redox_syscall" -version = "0.5.18" +name = "signature" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "bitflags", + "digest 0.10.7", + "rand_core 0.6.4", ] [[package]] -name = "regex" -version = "1.12.3" +name = "simd-adler32" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" [[package]] -name = "regex-automata" -version = "0.4.14" +name = "simdutf8" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] -name = "regex-lite" -version = "0.1.9" +name = "siphasher" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] -name = "regex-syntax" -version = "0.8.10" +name = "siphasher" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "slotmap" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" +dependencies = [ + "version_check", +] [[package]] -name = "relative-path" -version = "1.9.3" +name = "smallvec" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] -name = "reqwest" -version = "0.12.28" +name = "smartstring" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" dependencies = [ - "base64", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http 1.4.0", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "js-sys", - "log", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "autocfg", + "static_assertions", + "version_check", ] [[package]] -name = "ring" -version = "0.17.14" +name = "socket2" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.17", "libc", - "untrusted", "windows-sys 0.52.0", ] [[package]] -name = "rstest" -version = "0.26.1" +name = "socket2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ - "futures-timer", - "futures-util", - "rstest_macros", + "libc", + "windows-sys 0.61.2", ] [[package]] -name = "rstest_macros" -version = "0.26.1" +name = "sourcemap" +version = "9.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" +checksum = "314d62a489431668f719ada776ca1d49b924db951b7450f8974c9ae51ab05ad7" dependencies = [ - "cfg-if", - "glob", - "proc-macro-crate", - "proc-macro2", - "quote", - "regex", - "relative-path", - "rustc_version", - "syn", - "unicode-ident", + "base64-simd", + "bitvec", + "data-encoding", + "debugid", + "if_chain", + "rustc-hash 2.1.2", + "serde", + "serde_json", + "unicode-id-start", + "url", ] [[package]] -name = "rustc_version" -version = "0.4.1" +name = "spin" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] -name = "rusticata-macros" -version = "4.1.0" +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "nom", + "bitflags 2.9.4", ] [[package]] -name = "rustix" -version = "0.38.44" +name = "spki" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", + "base64ct", + "der", ] [[package]] -name = "rustix" -version = "1.1.4" +name = "stable_deref_trait" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "stacker" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "640c8cdd92b6b12f5bcb1803ca3bbf5ab96e5e6b6b96b9ab77dabe9e880b3190" dependencies = [ - "bitflags", - "errno", + "cc", + "cfg-if", "libc", - "linux-raw-sys 0.12.1", + "psm", "windows-sys 0.61.2", ] [[package]] -name = "rustls" -version = "0.23.39" +name = "static_assertions" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74e60e" -dependencies = [ - "aws-lc-rs", - "log", - "once_cell", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] -name = "rustls-pki-types" -version = "1.14.1" +name = "string_enum" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +checksum = "c9fe66b8ee349846ce2f9557a26b8f1e74843c4a13fb381f9a3d73617a5f956a" dependencies = [ - "zeroize", + "proc-macro2", + "quote", + "swc_macros_common 1.0.0", + "syn", ] [[package]] -name = "rustls-webpki" -version = "0.103.13" +name = "stringcase" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" -dependencies = [ - "aws-lc-rs", - "ring", - "rustls-pki-types", - "untrusted", -] +checksum = "72abeda133c49d7bddece6c154728f83eec8172380c80ab7096da9487e20d27c" [[package]] -name = "rustversion" -version = "1.0.22" +name = "strsim" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] -name = "ryu" -version = "1.0.23" +name = "strum" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", +] [[package]] -name = "same-file" -version = "1.0.6" +name = "strum" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" dependencies = [ - "winapi-util", + "strum_macros 0.27.2", ] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "strum_macros" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] [[package]] -name = "secrecy" -version = "0.10.3" +name = "strum_macros" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ - "serde", - "zeroize", + "heck", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "semver" -version = "1.0.28" +name = "subtle" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] -name = "serde" -version = "1.0.228" +name = "swc_allocator" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "9d7eefd2c8b228a8c73056482b2ae4b3a1071fbe07638e3b55ceca8570cc48bb" dependencies = [ - "serde_core", - "serde_derive", + "allocator-api2", + "bumpalo", + "hashbrown 0.14.5", + "rustc-hash 2.1.2", ] [[package]] -name = "serde-env" -version = "0.3.0" +name = "swc_atoms" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d29a4f822b7a7e7eada47da087a9d29d9b266dba45edc375fdc700965860d7" +checksum = "9d7077ba879f95406459bc0c81f3141c529b34580bc64d7ab7bd15e7118a0391" dependencies = [ + "hstr", + "once_cell", + "rustc-hash 2.1.2", "serde", ] [[package]] -name = "serde-inline-default" -version = "1.0.1" +name = "swc_common" +version = "9.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf03b7a5281cfd4013bc788d057b0f09fc634397d83bc8973c955bd4f32727a" +checksum = "a56b6f5a8e5affa271b56757a93badee6f44defcd28f3ba106bb2603afe40d3d" dependencies = [ - "proc-macro2", - "quote", - "syn", + "anyhow", + "ast_node", + "better_scoped_tls", + "cfg-if", + "either", + "from_variant", + "new_debug_unreachable", + "num-bigint", + "once_cell", + "rustc-hash 2.1.2", + "serde", + "siphasher 0.3.11", + "sourcemap", + "swc_allocator", + "swc_atoms", + "swc_eq_ignore_macros", + "swc_visit", + "tracing", + "unicode-width 0.1.14", + "url", ] [[package]] -name = "serde-wasm-bindgen" -version = "0.6.5" +name = "swc_config" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +checksum = "a01bfcbbdea182bdda93713aeecd997749ae324686bf7944f54d128e56be4ea9" dependencies = [ - "js-sys", + "anyhow", + "indexmap 2.11.1", "serde", - "wasm-bindgen", + "serde_json", + "swc_config_macro", ] [[package]] -name = "serde_core" -version = "1.0.228" +name = "swc_config_macro" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "7f2ebd37ef52a8555c8c9be78b694d64adcb5e3bc16c928f030d82f1d65fac57" dependencies = [ - "serde_derive", + "proc-macro2", + "quote", + "swc_macros_common 1.0.0", + "syn", ] [[package]] -name = "serde_default" -version = "0.2.0" +name = "swc_ecma_ast" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486b028b311aaaea83e0ba65a3e6e3cbef381e74e9d0bd6263faefd1fb503c1d" +checksum = "0613d84468a6bb6d45d13c5a3368b37bd21f3067a089f69adac630dcb462a018" dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", + "bitflags 2.9.4", + "is-macro", + "num-bigint", + "once_cell", + "phf", + "rustc-hash 2.1.2", + "scoped-tls", + "serde", + "string_enum", + "swc_atoms", + "swc_common", + "swc_visit", + "unicode-id-start", ] [[package]] -name = "serde_derive" -version = "1.0.228" +name = "swc_ecma_codegen" +version = "11.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b01b3de365a86b8f982cc162f257c82f84bda31d61084174a3be37e8ab15c0f4" +dependencies = [ + "ascii", + "compact_str", + "memchr", + "num-bigint", + "once_cell", + "regex", + "rustc-hash 2.1.2", + "serde", + "sourcemap", + "swc_allocator", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_codegen_macros", + "tracing", +] + +[[package]] +name = "swc_ecma_codegen_macros" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e99e1931669a67c83e2c2b4375674f6901d1480994a76aa75b23f1389e6c5076" dependencies = [ "proc-macro2", "quote", + "swc_macros_common 1.0.0", "syn", ] [[package]] -name = "serde_json" -version = "1.0.149" +name = "swc_ecma_lexer" +version = "12.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "0d11c8e71901401b9aae2ece4946eeb7674b14b8301a53768afbbeeb0e48b599" dependencies = [ - "itoa", - "memchr", + "arrayvec", + "bitflags 2.9.4", + "either", + "new_debug_unreachable", + "num-bigint", + "num-traits", + "phf", + "rustc-hash 2.1.2", "serde", - "serde_core", - "zmij", + "smallvec", + "smartstring", + "stacker", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "tracing", + "typed-arena", ] [[package]] -name = "serde_spanned" -version = "0.6.9" +name = "swc_ecma_loader" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +checksum = "8eb574d660c05f3483c984107452b386e45b95531bdb1253794077edc986f413" dependencies = [ + "anyhow", + "pathdiff", + "rustc-hash 2.1.2", "serde", + "swc_atoms", + "swc_common", + "tracing", ] [[package]] -name = "serde_urlencoded" -version = "0.7.1" +name = "swc_ecma_parser" +version = "12.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +checksum = "250786944fbc05f6484eda9213df129ccfe17226ae9ad51b62fce2f72135dbee" dependencies = [ - "form_urlencoded", - "itoa", - "ryu", + "arrayvec", + "bitflags 2.9.4", + "either", + "new_debug_unreachable", + "num-bigint", + "num-traits", + "phf", + "rustc-hash 2.1.2", "serde", + "smallvec", + "smartstring", + "stacker", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_lexer", + "tracing", + "typed-arena", ] [[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" +name = "swc_ecma_transforms_base" +version = "13.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +checksum = "6856da3da598f4da001b7e4ce225ee8970bc9d5cbaafcaf580190cf0a6031ec5" dependencies = [ - "indexmap", - "itoa", - "ryu", + "better_scoped_tls", + "bitflags 2.9.4", + "indexmap 2.11.1", + "once_cell", + "par-core", + "phf", + "rustc-hash 2.1.2", "serde", - "unsafe-libyaml", + "smallvec", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_parser", + "swc_ecma_utils", + "swc_ecma_visit", + "tracing", ] [[package]] -name = "sha1" -version = "0.11.0" +name = "swc_ecma_transforms_classes" +version = "13.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" +checksum = "0f84248f82bad599d250bbcd52cb4db6ff6409f48267fd6f001302a2e9716f80" dependencies = [ - "cfg-if", - "cpufeatures 0.3.0", - "digest", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_utils", + "swc_ecma_visit", ] [[package]] -name = "sharded-slab" -version = "0.1.7" +name = "swc_ecma_transforms_macros" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +checksum = "6845dfb88569f3e8cd05901505916a8ebe98be3922f94769ca49f84e8ccec8f7" dependencies = [ - "lazy_static", + "proc-macro2", + "quote", + "swc_macros_common 1.0.0", + "syn", ] [[package]] -name = "shlex" -version = "1.3.0" +name = "swc_ecma_transforms_proposal" +version = "13.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "193237e318421ef621c2b3958b4db174770c5280ef999f1878f2df93a2837ca6" +dependencies = [ + "either", + "rustc-hash 2.1.2", + "serde", + "smallvec", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_transforms_classes", + "swc_ecma_transforms_macros", + "swc_ecma_utils", + "swc_ecma_visit", +] [[package]] -name = "signal-hook-registry" -version = "1.4.8" +name = "swc_ecma_transforms_react" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +checksum = "baae39c70229103a72090119887922fc5e32f934f5ca45c0423a5e65dac7e549" dependencies = [ - "errno", - "libc", + "base64 0.22.1", + "dashmap", + "indexmap 2.11.1", + "once_cell", + "rustc-hash 2.1.2", + "serde", + "sha1 0.10.6", + "string_enum", + "swc_allocator", + "swc_atoms", + "swc_common", + "swc_config", + "swc_ecma_ast", + "swc_ecma_parser", + "swc_ecma_transforms_base", + "swc_ecma_transforms_macros", + "swc_ecma_utils", + "swc_ecma_visit", ] [[package]] -name = "simd-adler32" -version = "0.3.9" +name = "swc_ecma_transforms_typescript" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "a3c65e0b49f7e2a2bd92f1d89c9a404de27232ce00f6a4053f04bda446d50e5c" +dependencies = [ + "once_cell", + "rustc-hash 2.1.2", + "ryu-js", + "serde", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_transforms_react", + "swc_ecma_utils", + "swc_ecma_visit", +] [[package]] -name = "slab" -version = "0.4.12" +name = "swc_ecma_utils" +version = "13.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" +checksum = "7ed837406d5dbbfbf5792b1dc90964245a0cf659753d4745fe177ffebe8598b9" +dependencies = [ + "indexmap 2.11.1", + "num_cpus", + "once_cell", + "par-core", + "par-iter", + "rustc-hash 2.1.2", + "ryu-js", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_visit", + "tracing", + "unicode-id", +] [[package]] -name = "smallvec" -version = "1.15.1" +name = "swc_ecma_visit" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "249dc9eede1a4ad59a038f9cfd61ce67845bd2c1392ade3586d714e7181f3c1a" +dependencies = [ + "new_debug_unreachable", + "num-bigint", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_visit", + "tracing", +] [[package]] -name = "socket2" -version = "0.5.10" +name = "swc_eq_ignore_macros" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +checksum = "e96e15288bf385ab85eb83cff7f9e2d834348da58d0a31b33bdb572e66ee413e" dependencies = [ - "libc", - "windows-sys 0.52.0", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "socket2" -version = "0.6.3" +name = "swc_macros_common" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "27e18fbfe83811ffae2bb23727e45829a0d19c6870bced7c0f545cc99ad248dd" dependencies = [ - "libc", - "windows-sys 0.61.2", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "stable_deref_trait" -version = "1.2.1" +name = "swc_macros_common" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +checksum = "a509f56fca05b39ba6c15f3e58636c3924c78347d63853632ed2ffcb6f5a0ac7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "strsim" -version = "0.11.1" +name = "swc_visit" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "9138b6a36bbe76dd6753c4c0794f7e26480ea757bee499738bedbbb3ae3ec5f3" +dependencies = [ + "either", + "new_debug_unreachable", +] [[package]] -name = "subtle" -version = "2.6.1" +name = "swc_visit_macros" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "92807d840959f39c60ce8a774a3f83e8193c658068e6d270dbe0a05e40e90b41" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "swc_macros_common 0.3.14", + "syn", +] [[package]] name = "syn" @@ -3080,6 +6691,38 @@ dependencies = [ "syn", ] +[[package]] +name = "sys_traits" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f74a2c95f72e36fa6bd04a40d15623a9904bab1cc2fa6c6135b09d774a65088" +dependencies = [ + "sys_traits_macros", +] + +[[package]] +name = "sys_traits_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "181f22127402abcf8ee5c83ccd5b408933fec36a6095cf82cda545634692657e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "tempfile" version = "3.27.0" @@ -3093,13 +6736,51 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "text_lines" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd5828de7deaa782e1dd713006ae96b3bee32d3279b79eb67ecf8072c059bcf" +dependencies = [ + "serde", +] + +[[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.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.18", +] + +[[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", ] [[package]] @@ -3124,30 +6805,30 @@ dependencies = [ [[package]] name = "time" -version = "0.3.47" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", "num-conv", "powerfmt", - "serde_core", + "serde", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -3163,6 +6844,21 @@ dependencies = [ "zerovec", ] +[[package]] +name = "tinyvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +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 = "tokio" version = "1.52.1" @@ -3201,6 +6897,18 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-socks" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" +dependencies = [ + "either", + "futures-util", + "thiserror 1.0.69", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.18" @@ -3225,6 +6933,19 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-vsock" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b319ef9394889dab2e1b4f0085b45ba11d0c79dc9d1a9d1afc057d009d0f1c7" +dependencies = [ + "bytes", + "futures", + "libc", + "tokio", + "vsock", +] + [[package]] name = "toml" version = "0.8.23" @@ -3248,11 +6969,11 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.1.1+spec-1.1.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" dependencies = [ - "serde_core", + "serde", ] [[package]] @@ -3261,7 +6982,7 @@ version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap", + "indexmap 2.11.1", "serde", "serde_spanned", "toml_datetime 0.6.11", @@ -3271,14 +6992,14 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.11+spec-1.1.0" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +checksum = "7211ff1b8f0d3adae1663b7da9ffe396eabe1ca25f0b0bee42b0da29a9ddce93" dependencies = [ - "indexmap", - "toml_datetime 1.1.1+spec-1.1.0", + "indexmap 2.11.1", + "toml_datetime 0.7.0", "toml_parser", - "winnow 1.0.2", + "winnow 0.7.15", ] [[package]] @@ -3296,6 +7017,36 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +[[package]] +name = "tonic" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.22.1", + "bytes", + "h2 0.4.14", + "http 1.4.0", + "http-body", + "http-body-util", + "hyper", + "hyper-timeout", + "hyper-util", + "percent-encoding", + "pin-project", + "prost 0.13.5", + "socket2 0.5.10", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tonic" version = "0.14.5" @@ -3303,7 +7054,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fec7c61a0695dc1887c1b53952990f3ad2e3a31453e1f49f10e75424943a93ec" dependencies = [ "async-trait", - "base64", + "base64 0.22.1", "bytes", "http 1.4.0", "http-body", @@ -3324,8 +7075,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a55376a0bbaa4975a3f10d009ad763d8f4108f067c7c2e74f3001fb49778d309" dependencies = [ "bytes", - "prost", - "tonic", + "prost 0.14.3", + "tonic 0.14.5", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", ] [[package]] @@ -3349,14 +7120,16 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags", + "async-compression", + "bitflags 2.9.4", "bytes", - "futures-util", + "futures-core", "http 1.4.0", "http-body", - "iri-string", + "http-body-util", "pin-project-lite", - "tower", + "tokio", + "tokio-util", "tower-layer", "tower-service", ] @@ -3393,7 +7166,7 @@ checksum = "1ca6b15407f9bfcb35f82d0e79e603e1629ece4e91cc6d9e58f890c184dd20af" dependencies = [ "actix-web", "mutually_exclusive_features", - "opentelemetry", + "opentelemetry 0.31.0", "pin-project", "tracing", "tracing-opentelemetry", @@ -3439,7 +7212,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ac28f2d093c6c477eaa76b23525478f38de514fa9aeb1285738d4b97a9552fc" dependencies = [ "js-sys", - "opentelemetry", + "opentelemetry 0.31.0", "smallvec", "tracing", "tracing-core", @@ -3470,30 +7243,87 @@ dependencies = [ name = "tracing-wasm" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + +[[package]] +name = "triomphe" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" +dependencies = [ + "serde", + "stable_deref_trait", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + +[[package]] +name = "typenum" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" dependencies = [ - "tracing", - "tracing-subscriber", - "wasm-bindgen", + "unic-char-range", ] [[package]] -name = "try-lock" -version = "0.2.5" +name = "unic-char-range" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" [[package]] -name = "typenum" -version = "1.20.0" +name = "unic-common" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" [[package]] -name = "unarray" -version = "0.1.4" +name = "unic-ucd-ident" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] [[package]] name = "unicase" @@ -3501,6 +7331,18 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" +[[package]] +name = "unicode-id" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ba288e709927c043cbe476718d37be306be53fb1fafecd0dbe36d072be2580" + +[[package]] +name = "unicode-id-start" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81b79ad29b5e19de4260020f8919b443b2ef0277d242ce532ec7b7a2cc8b6007" + [[package]] name = "unicode-ident" version = "1.0.24" @@ -3513,18 +7355,46 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +[[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 = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common 0.1.7", + "subtle", +] + [[package]] name = "unsafe-libyaml" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "untrusted" version = "0.9.0" @@ -3541,8 +7411,27 @@ dependencies = [ "idna", "percent-encoding", "serde", + "serde_derive", +] + +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", ] +[[package]] +name = "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" @@ -3557,16 +7446,32 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.1" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.3.4", "js-sys", - "serde_core", + "serde", "wasm-bindgen", ] +[[package]] +name = "v8" +version = "137.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33995a1fee055ff743281cde33a41f0d618ee0bdbe8bdf6859e11864499c2595" +dependencies = [ + "bindgen", + "bitflags 2.9.4", + "fslock", + "gzip-header", + "home", + "miniz_oxide", + "paste", + "which 6.0.3", +] + [[package]] name = "v_htmlescape" version = "0.15.8" @@ -3579,12 +7484,34 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + +[[package]] +name = "vsock" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba782755fc073877e567c2253c0be48e4aa9a254c232d36d3985dfae0bd5205" +dependencies = [ + "libc", + "nix 0.31.2", +] + [[package]] name = "walkdir" version = "2.5.0" @@ -3739,21 +7666,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" dependencies = [ "anyhow", - "indexmap", + "indexmap 2.11.1", "wasm-encoder", "wasmparser", ] +[[package]] +name = "wasm_dep_analyzer" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a10e6b67c951a84de7029487e0e0a496860dae49f6699edd279d5ff35b8fbf54" +dependencies = [ + "deno_error", + "thiserror 2.0.18", +] + [[package]] name = "wasmparser" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags", + "bitflags 2.9.4", "hashbrown 0.15.5", - "indexmap", - "semver", + "indexmap 2.11.1", + "semver 1.0.28", ] [[package]] @@ -3776,6 +7713,145 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-transport-proto" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "974fa1e325e6cc5327de8887f189a441fcff4f8eedcd31ec87f0ef0cc5283fbc" +dependencies = [ + "bytes", + "http 1.4.0", + "thiserror 2.0.18", + "url", +] + +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.7", +] + +[[package]] +name = "webpki-roots" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "wgpu-core" +version = "24.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f0aa306497a238d169b9dc70659105b4a096859a34894544ca81719242e1499" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags 2.9.4", + "cfg_aliases", + "document-features", + "indexmap 2.11.1", + "log", + "naga", + "once_cell", + "parking_lot", + "profiling", + "raw-window-handle", + "ron", + "rustc-hash 1.1.0", + "serde", + "smallvec", + "thiserror 2.0.18", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "24.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.9.4", + "block", + "bytemuck", + "cfg_aliases", + "core-graphics-types", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "js-sys", + "khronos-egl", + "libc", + "libloading", + "log", + "metal", + "naga", + "ndk-sys", + "objc", + "once_cell", + "ordered-float", + "parking_lot", + "profiling", + "range-alloc", + "raw-window-handle", + "rustc-hash 1.1.0", + "smallvec", + "thiserror 2.0.18", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "windows", + "windows-core 0.58.0", +] + +[[package]] +name = "wgpu-types" +version = "24.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" +dependencies = [ + "bitflags 2.9.4", + "js-sys", + "log", + "serde", + "web-sys", +] + +[[package]] +name = "which" +version = "6.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" +dependencies = [ + "either", + "home", + "rustix 0.38.44", + "winsafe", +] + +[[package]] +name = "which" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81995fafaaaf6ae47a7d0cc83c67caf92aeb7e5331650ae6ff856f7c0c60c459" + +[[package]] +name = "widestring" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" + [[package]] name = "winapi" version = "0.3.9" @@ -3807,17 +7883,51 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets", +] + +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement 0.58.0", + "windows-interface 0.58.0", + "windows-result 0.2.0", + "windows-strings 0.1.0", + "windows-targets", +] + [[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-implement 0.60.2", + "windows-interface 0.59.3", "windows-link", - "windows-result", - "windows-strings", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -3831,6 +7941,17 @@ dependencies = [ "syn", ] +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-interface" version = "0.59.3" @@ -3848,6 +7969,37 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result 0.2.0", + "windows-strings 0.1.0", + "windows-targets", +] + +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-result" version = "0.4.1" @@ -3857,6 +8009,16 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets", +] + [[package]] name = "windows-strings" version = "0.5.1" @@ -3971,9 +8133,12 @@ name = "winnow" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" -dependencies = [ - "memchr", -] + +[[package]] +name = "winsafe" +version = "0.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" [[package]] name = "wit-bindgen" @@ -4009,7 +8174,7 @@ checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" dependencies = [ "anyhow", "heck", - "indexmap", + "indexmap 2.11.1", "prettyplease", "syn", "wasm-metadata", @@ -4039,8 +8204,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags", - "indexmap", + "bitflags 2.9.4", + "indexmap 2.11.1", "log", "serde", "serde_derive", @@ -4059,9 +8224,9 @@ checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" dependencies = [ "anyhow", "id-arena", - "indexmap", + "indexmap 2.11.1", "log", - "semver", + "semver 1.0.28", "serde", "serde_derive", "serde_json", @@ -4075,6 +8240,27 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core 0.6.4", + "serde", + "zeroize", +] + [[package]] name = "x509-parser" version = "0.18.1" @@ -4089,10 +8275,16 @@ dependencies = [ "oid-registry", "ring", "rusticata-macros", - "thiserror", + "thiserror 2.0.18", "time", ] +[[package]] +name = "xml-rs" +version = "0.8.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" + [[package]] name = "yasna" version = "0.5.2" @@ -4171,6 +8363,20 @@ name = "zeroize" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "zerotrie" @@ -4205,12 +8411,6 @@ dependencies = [ "syn", ] -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" - [[package]] name = "zstd" version = "0.13.3" diff --git a/Cargo.toml b/Cargo.toml index 8fa54a9..68b4306 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,28 +25,35 @@ members = [ "services/ws", "services/ws-server", "services/ws-wasm-agent", + "services/ws-worker", + "services/ws-test-server", "utilities/cli", "utilities/onnx", ] resolver = "2" [workspace.dependencies] +actix = "0.13" +actix-rt = "2" +actix-web = { version = "4", features = ["rustls-0_23"] } anyhow = "1.0" base64 = "0.22.1" chrono = { version = "0.4", features = ["serde"] } clap = { version = "4.4", features = ["derive"] } +edge-toolkit = { path = "libs/edge-toolkit" } et-web = { path = "libs/web" } lets_find_up = "0.0.4" log = "0.4" onnx-extractor = "0.3" rstest = "0.26" secrecy = { version = "0.10.3", features = ["serde"] } -serde = { version = "1", features = ["derive"] } +serde = { version = "=1.0.219", features = ["derive"] } serde-env = "0.3" serde-inline-default = "1.0" serde_default = "0.2" serde_json = "1" serde_yaml = "0.9" +tempfile = "3" toml = "0.8" tracing = "0.1" uuid = { version = "1", features = ["serde", "v4", "v7"] } diff --git a/services/modules/Cargo.toml b/services/modules/Cargo.toml index 7ab854f..04d52ee 100644 --- a/services/modules/Cargo.toml +++ b/services/modules/Cargo.toml @@ -8,7 +8,7 @@ repository.workspace = true [dependencies] actix-files = "0.6" actix-web = "4" -edge-toolkit = { path = "../../libs/edge-toolkit" } +edge-toolkit.workspace = true serde.workspace = true serde-inline-default.workspace = true serde_default.workspace = true diff --git a/services/storage/Cargo.toml b/services/storage/Cargo.toml index d0d4c7b..22b8d14 100644 --- a/services/storage/Cargo.toml +++ b/services/storage/Cargo.toml @@ -8,7 +8,7 @@ repository.workspace = true [dependencies] actix-files = "0.6" actix-web = "4" -edge-toolkit = { path = "../../libs/edge-toolkit" } +edge-toolkit.workspace = true futures-util = "0.3" serde.workspace = true serde-inline-default.workspace = true diff --git a/services/ws-modules/pydata1/pkg/et_ws_pydata1.js b/services/ws-modules/pydata1/pkg/et_ws_pydata1.js index 006e9a4..5b33320 100644 --- a/services/ws-modules/pydata1/pkg/et_ws_pydata1.js +++ b/services/ws-modules/pydata1/pkg/et_ws_pydata1.js @@ -41,7 +41,9 @@ export async function run() { const wsProtocol = window.location.protocol === "https:" ? "wss:" : "ws:"; const wsUrl = `${wsProtocol}//${window.location.host}/ws`; - const { WsClient, WsClientConfig } = await import("/modules/et-ws-wasm-agent/et_ws_wasm_agent.js"); + const wasmAgent = await import("/modules/et-ws-wasm-agent/et_ws_wasm_agent.js"); + await wasmAgent.default(); + const { WsClient, WsClientConfig } = wasmAgent; const client = new WsClient(new WsClientConfig(wsUrl)); let responseResolvers = []; diff --git a/services/ws-server/Cargo.toml b/services/ws-server/Cargo.toml index 10fd6dd..02bcd90 100644 --- a/services/ws-server/Cargo.toml +++ b/services/ws-server/Cargo.toml @@ -6,12 +6,12 @@ license.workspace = true repository.workspace = true [dependencies] -actix = "0.13" -actix-rt = "2" -actix-web = { version = "4", features = ["rustls-0_23"] } +actix.workspace = true +actix-rt.workspace = true +actix-web.workspace = true chrono.workspace = true clap.workspace = true -edge-toolkit = { path = "../../libs/edge-toolkit" } +edge-toolkit.workspace = true et-modules-service = { path = "../modules" } et-storage-service = { path = "../storage" } et-ws-service = { path = "../ws" } diff --git a/services/ws-test-server/Cargo.toml b/services/ws-test-server/Cargo.toml new file mode 100644 index 0000000..f0da3f3 --- /dev/null +++ b/services/ws-test-server/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "et-ws-test-server" +description = "In-process ws-server for integration tests" +version = "0.1.0" +edition.workspace = true +license.workspace = true +repository.workspace = true + +[dependencies] +actix.workspace = true +actix-rt.workspace = true +actix-web.workspace = true +et-modules-service = { path = "../modules" } +et-storage-service = { path = "../storage" } +et-ws-service = { path = "../ws" } +tempfile.workspace = true diff --git a/services/ws-test-server/src/lib.rs b/services/ws-test-server/src/lib.rs new file mode 100644 index 0000000..2b7f617 --- /dev/null +++ b/services/ws-test-server/src/lib.rs @@ -0,0 +1,62 @@ +use std::net::TcpListener; + +use actix_web::{App, HttpServer, web}; +use et_modules_service::{ModulesConfig, configure as configure_modules}; +use et_storage_service::{StorageConfig, configure as configure_storage}; +use et_ws_service::{WebSocketActor, WsAgentRegistry, configure as configure_ws}; +use tempfile::TempDir; + +/// A running test server. The temporary storage directory is cleaned up on drop. +pub struct TestServer { + pub base_url: String, + pub ws_url: String, + pub storage_dir: TempDir, +} + +/// Start an in-process ws-server on a free port with a temporary storage directory. +/// +/// Serves modules from the default module paths (same as production). +pub fn start() -> TestServer { + let storage_dir = TempDir::new().expect("failed to create temp storage dir"); + let storage_path = storage_dir.path().to_path_buf(); + + // Bind to port 0 to get a free port, then drop the listener so the server can bind it. + let port = TcpListener::bind("127.0.0.1:0").unwrap().local_addr().unwrap().port(); + + let storage_config = StorageConfig { path: storage_path }; + let modules_config = ModulesConfig::default(); + let addr = format!("127.0.0.1:{port}"); + + std::thread::spawn(move || { + actix_rt::System::new().block_on(async move { + let registry = web::Data::new(WsAgentRegistry::default()); + let storage = web::Data::new(storage_config); + let modules = modules_config; + HttpServer::new(move || { + App::new() + .app_data(registry.clone()) + .app_data(storage.clone()) + .configure(configure_ws) + .configure(|cfg| configure_storage::>(cfg, &storage)) + .configure(|cfg| configure_modules(cfg, &modules)) + }) + .bind(&addr) + .unwrap() + .run() + .await + .unwrap(); + }); + }); + + for _ in 0..50 { + if std::net::TcpStream::connect(format!("127.0.0.1:{port}")).is_ok() { + return TestServer { + base_url: format!("http://127.0.0.1:{port}"), + ws_url: format!("ws://127.0.0.1:{port}/ws"), + storage_dir, + }; + } + std::thread::sleep(std::time::Duration::from_millis(100)); + } + panic!("test ws-server did not start within 5 seconds on port {port}"); +} diff --git a/services/ws-wasm-agent/Cargo.toml b/services/ws-wasm-agent/Cargo.toml index 21bdd8c..31646e8 100644 --- a/services/ws-wasm-agent/Cargo.toml +++ b/services/ws-wasm-agent/Cargo.toml @@ -11,7 +11,7 @@ crate-type = ["cdylib", "rlib"] [dependencies] chrono.workspace = true -edge-toolkit = { path = "../../libs/edge-toolkit" } +edge-toolkit.workspace = true js-sys = "0.3" serde.workspace = true serde_json.workspace = true diff --git a/services/ws-worker/Cargo.toml b/services/ws-worker/Cargo.toml new file mode 100644 index 0000000..8b9f90a --- /dev/null +++ b/services/ws-worker/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "et-ws-worker" +description = "Native agent that fetches a ws-module from the server and runs it via embedded V8" +version = "0.1.0" +edition.workspace = true +license.workspace = true +repository.workspace = true + +[lib] +name = "et_ws_worker" +path = "src/lib.rs" + +[[bin]] +name = "et-ws-worker" +path = "src/main.rs" + +[dependencies] +anyhow.workspace = true +edge-toolkit.workspace = true +reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] } +rustyscript = { version = "0.12", features = ["web", "webgpu", "websocket", "webstorage"] } +serde_json.workspace = true +tracing.workspace = true +tracing-subscriber = { version = "0.3", features = ["env-filter"] } + +[dev-dependencies] +et-ws-test-server = { path = "../ws-test-server" } +rstest.workspace = true diff --git a/services/ws-worker/src/lib.rs b/services/ws-worker/src/lib.rs new file mode 100644 index 0000000..234273a --- /dev/null +++ b/services/ws-worker/src/lib.rs @@ -0,0 +1,230 @@ +use std::time::Duration; + +use rustyscript::deno_core::error::ModuleLoaderError; +use rustyscript::deno_core::{ModuleSource, ModuleSourceCode, ModuleSpecifier}; +use rustyscript::module_loader::ImportProvider; +use rustyscript::{ExtensionOptions, Runtime, RuntimeOptions, WebOptions}; + +pub fn derive_http_base(ws_url: &str) -> Option { + let (scheme, rest) = if let Some(r) = ws_url.strip_prefix("wss://") { + ("https", r) + } else if let Some(r) = ws_url.strip_prefix("ws://") { + ("http", r) + } else { + return None; + }; + let host_port = rest.strip_suffix("/ws").unwrap_or(rest); + Some(format!("{scheme}://{host_port}")) +} + +/// Prepends a `Request` shim to every JS module fetched from the server so that +/// relative URLs are resolved against the server base before reaching Deno's native +/// fetch. Also rewrites the wasm-bindgen `arg0.fetch(getStringFromWasm0(...))` call +/// site, since `globalThis.fetch` is a non-writable native binding that cannot be +/// intercepted via property assignment. +pub struct RelativeUrlFixup { + pub http_base: String, +} + +impl ImportProvider for RelativeUrlFixup { + fn post_process( + &mut self, + specifier: &ModuleSpecifier, + mut source: ModuleSource, + ) -> Result { + if specifier.scheme() != "http" && specifier.scheme() != "https" { + return Ok(source); + } + let base = &self.http_base; + let original = String::from_utf8_lossy(source.code.as_bytes()).into_owned(); + + // `var` (not `const`/`let`) avoids TDZ; `globalThis.Request`/`globalThis.fetch` + // reference the native binding even after these declarations shadow the + // free-variable name. `globalThis.fetch` is non-writable AND non-configurable, + // so we can't replace it globally — module-scope shadowing is the only way to + // intercept `fetch('/path')` calls that originate from module code. + let request_shim = format!( + r#" + var Request = function(input, init) {{ + if (typeof input === 'string' && input[0] === '/') {{ + input = {base:?} + input; + }} + return new globalThis.Request(input, init); + }}; + var fetch = function(input, init) {{ + if (typeof input === 'string' && input[0] === '/') {{ + input = {base:?} + input; + }} + return globalThis.fetch(input, init); + }}; + "# + ); + + let patched = original.replace( + "const ret = arg0.fetch(getStringFromWasm0(arg1, arg2));", + &format!( + r#" + let __u = getStringFromWasm0(arg1, arg2); + if (__u[0] === '/') __u = {base:?} + __u; + const ret = arg0.fetch(__u); + "# + ), + ); + + // Patch `loadPyodideScript()` in pyodide-based modules: replace the + // `document.createElement("script")` approach with fetch+eval. + // We use fetch+eval (not import()) because: + // 1. import() bypasses ImportProvider.post_process, so we can't patch pyodide.js + // 2. eval() runs in the global scope, making loadPyodide available as a global + // 3. pyodide.js is a UMD script that sets globalThis.loadPyodide directly + // Also pass `indexURL` to `loadPyodide()` so it fetches pyodide assets from the server. + let patched = patched.replace( + r#"function loadPyodideScript() { + return new Promise((resolve, reject) => { + if (globalThis.loadPyodide) return resolve(); + const s = document.createElement("script"); + s.src = PYODIDE_CDN; + s.onload = resolve; + s.onerror = reject; + document.head.appendChild(s); + }); +}"#, + r#"async function loadPyodideScript() { + if (globalThis.loadPyodide) return; + const url = new URL(PYODIDE_CDN, import.meta.url).href; + const text = await fetch(url).then(r => r.text()); + // Hide Deno from pyodide so its env detection reports IN_DENO=false, + // leaving IN_BROWSER=true as the active code path. The Deno code path + // skips creating a MessageChannel that pyproxy bootstrap later requires. + // Pyodide captures env at load-time, so Deno is restored after eval — + // Deno.core.* must remain available for rustyscript's ops afterwards. + // With Deno hidden and no `process`/`document`, none of pyodide's + // loadScript branches match, so we still need the throw fallback. + // The loadScript variable's minified name differs between pyodide.js (k) and + // pyodide.asm.js (Fe). We capture it from the preceding `IN_SHELL` branch, + // so the throw fallback assigns to the correct local variable instead of + // clobbering an unrelated `k` (which in pyodide.asm.js is the PyContainsMethods class). + const patch = (s) => s + .replace(/J\.runInThisContext\(/g, '(0,eval)(') + .replace( + new RegExp( + 'else if\\(([a-zA-Z_$][\\w$]*)\\.IN_SHELL\\)([a-zA-Z_$][\\w$]*)=load;' + + 'else throw new Error\\("Cannot determine runtime environment"\\)', + 'g'), + 'else if($1.IN_SHELL)$2=load;else $2=async function(u){return globalThis.__pyEval(u)}' + ); + globalThis.__pyEval = async function(e) { + const t = patch(await (await fetch(e)).text()); + const sd = globalThis.Deno; + globalThis.Deno = undefined; + try { (0, eval)(t); } finally { globalThis.Deno = sd; } + }; + const patched = patch(text); + const sd = globalThis.Deno; + globalThis.Deno = undefined; + try { (0, eval)(patched); } finally { globalThis.Deno = sd; } +}"#, + ); + let patched = patched.replace( + "pyodide = await globalThis.loadPyodide();", + concat!( + "pyodide = await globalThis.loadPyodide({ ", + "indexURL: new URL(PYODIDE_CDN, import.meta.url)", + ".href.replace(/pyodide\\.js$/, '') });", + ), + ); + + source.code = ModuleSourceCode::String(format!("{request_shim}{patched}").into()); + Ok(source) + } +} + +/// Injects browser polyfills into a rustyscript `Runtime` so that WASM modules +/// compiled for the browser can run in the native Deno-based V8 context. +/// +/// Specifically: +/// - Defines a `Window` class with `Symbol.hasInstance` so that +/// `globalThis instanceof Window` passes (required by `web_sys::window()`) +/// without modifying the prototype chain (which would break pyodide). +/// - Sets `globalThis.window = globalThis` and `globalThis.location` so that +/// `websocket_url()` can derive the WS URL from `location.{protocol,host}`. +/// - Wraps `globalThis.fetch` to resolve root-relative URLs against `http_base` +/// (only effective for calls made via `globalThis.fetch`; native module-scope +/// `fetch` calls are handled by `RelativeUrlFixup`). +pub fn apply_browser_polyfills(runtime: &mut Runtime, http_base: &str) -> Result<(), rustyscript::Error> { + let ws_protocol = if http_base.starts_with("https://") { + "wss:" + } else { + "ws:" + }; + let host = http_base.trim_start_matches("https://").trim_start_matches("http://"); + runtime.eval::<()>(format!( + r#" + globalThis.Window = function Window() {{}}; + Object.defineProperty(Window, Symbol.hasInstance, {{ + value: (inst) => inst === globalThis + }}); + globalThis.WorkerGlobalScope = function WorkerGlobalScope() {{}}; + Object.defineProperty(WorkerGlobalScope, Symbol.hasInstance, {{ + value: (inst) => inst === globalThis + }}); + globalThis.window = globalThis; + globalThis.self = globalThis; + globalThis.location = {{ protocol: "{ws_protocol}", host: "{host}", href: "{http_base}/", + toString() {{ return this.href; }} }}; + // Stub document for modules that update DOM-like targets (e.g. log/output panels). + // getElementById returns null so callers' `if (el) ...` guards work as written. + // createElement('canvas') must return an HTMLCanvasElement instance so that + // wasm-bindgen's `dyn_into::()` cast succeeds. The canvas + // has a getContext method that returns null for unsupported context types, + // letting WebGL/WebGL2 probes report "not supported" rather than crash. + globalThis.HTMLCanvasElement = function HTMLCanvasElement() {{}}; + HTMLCanvasElement.prototype.getContext = function(_type) {{ return null; }}; + HTMLCanvasElement.prototype.width = 0; + HTMLCanvasElement.prototype.height = 0; + // navigator stub. rustyscript's `webgpu` feature loads deno_webgpu's Rust ops + // but its init_webgpu.js leaves the JS-side wiring (navigator.gpu, GPU classes) + // commented out, so navigator is undefined. Modules that probe `navigator.gpu` + // see undefined and gracefully report "no WebGPU support". Real WebGPU wiring + // would require a custom rustyscript extension that imports + // `ext:deno_webgpu/01_webgpu.js` and assigns its `gpu` export to navigator.gpu. + globalThis.navigator = globalThis.navigator || {{ + userAgent: "et-ws-worker/0.1 (rustyscript/deno_core)", + gpu: null, + }}; + globalThis.document = {{ + getElementById: () => null, + createElement: (tag) => {{ + if (String(tag).toLowerCase() === "canvas") {{ + return Object.create(HTMLCanvasElement.prototype); + }} + return {{ src: "", onload: null, onerror: null }}; + }}, + head: {{ appendChild: () => {{}} }}, + }}; + // globalThis.fetch is non-writable and non-configurable in deno_fetch, so we + // can't replace it here. Module-scope shadowing (in RelativeUrlFixup) handles + // relative-URL rewriting for `fetch('/path')` calls inside fetched modules. + "# + )) +} + +/// Creates a `Runtime` configured for running browser-targeted WASM modules: +/// - `RelativeUrlFixup` as the import provider to patch relative URLs in fetched JS +/// - 60-second timeout +pub fn create_runtime(http_base: &str) -> Result { + Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(60), + import_provider: Some(Box::new(RelativeUrlFixup { + http_base: http_base.to_string(), + })), + extension_options: ExtensionOptions { + web: WebOptions { + base_url: rustyscript::deno_core::ModuleSpecifier::parse(http_base).ok(), + ..Default::default() + }, + ..Default::default() + }, + ..Default::default() + }) +} diff --git a/services/ws-worker/src/main.rs b/services/ws-worker/src/main.rs new file mode 100644 index 0000000..9789a5f --- /dev/null +++ b/services/ws-worker/src/main.rs @@ -0,0 +1,59 @@ +use anyhow::Context; +use et_ws_worker::{apply_browser_polyfills, create_runtime, derive_http_base}; +use rustyscript::{Module, Undefined, json_args}; +use tracing::info; + +fn main() -> anyhow::Result<()> { + tracing_subscriber::fmt() + .with_env_filter(tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| "info".into())) + .init(); + + let module_name = std::env::var("WORKER_MODULE").context("WORKER_MODULE not set")?; + let ws_url = std::env::var("WS_SERVER_URL").unwrap_or_else(|_| { + format!( + "ws://localhost:{}/ws", + edge_toolkit::ports::Services::InsecureWebSocketServer.port() + ) + }); + let http_base = derive_http_base(&ws_url).context("could not derive HTTP base URL from WS_SERVER_URL")?; + + info!("et-ws-worker: module={module_name} server={http_base}"); + + let mut runtime = create_runtime(&http_base)?; + let tokio_runtime = runtime.tokio_runtime(); + + let pkg_url = format!("{http_base}/modules/{module_name}/package.json"); + let pkg: serde_json::Value = tokio_runtime.block_on(async { + reqwest::Client::new() + .get(&pkg_url) + .send() + .await? + .error_for_status()? + .json() + .await + })?; + let main_file = pkg["main"] + .as_str() + .with_context(|| format!("module {module_name} package.json missing 'main'"))?; + + let entry_url = format!("{http_base}/modules/{module_name}/{main_file}"); + info!("loading entry: {entry_url}"); + + apply_browser_polyfills(&mut runtime, &http_base)?; + + let stub = Module::new("entry.js", format!(r#"export {{ default, run }} from {entry_url:?};"#)); + let handle = runtime.load_module(&stub)?; + + tokio_runtime.block_on(async { + runtime + .call_function_async::(Some(&handle), "default", json_args!()) + .await?; + runtime + .call_function_async::(Some(&handle), "run", json_args!()) + .await?; + Ok::<(), rustyscript::Error>(()) + })?; + + info!("module {module_name} completed successfully"); + Ok(()) +} diff --git a/services/ws-worker/tests/browser_polyfills.rs b/services/ws-worker/tests/browser_polyfills.rs new file mode 100644 index 0000000..fb4c298 --- /dev/null +++ b/services/ws-worker/tests/browser_polyfills.rs @@ -0,0 +1,1069 @@ +//! Tests for the browser polyfill infrastructure in et_ws_worker. +//! +//! - `apply_browser_polyfills` (globalThis/Window/location/fetch setup) +//! - `RelativeUrlFixup` (ImportProvider that patches fetched JS modules) +//! - `create_runtime` (factory that wires both together) +//! +//! Several tests also document known Deno/rustyscript limitations that motivated +//! the post_process approach over globalThis property assignment. + +#![cfg(test)] + +use std::time::Duration; + +use et_ws_worker::{RelativeUrlFixup, apply_browser_polyfills, create_runtime}; +use rustyscript::module_loader::ImportProvider; +use rustyscript::{Module, Runtime, RuntimeOptions, json_args}; + +fn default_runtime() -> Runtime { + Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(10), + ..Default::default() + }) + .unwrap() +} + +// ── apply_browser_polyfills ──────────────────────────── + +#[test] +fn polyfills_make_window_visible_as_free_variable() { + let mut rt = default_runtime(); + apply_browser_polyfills(&mut rt, "http://localhost:8080").unwrap(); + + let m = Module::new("t.js", "export const t = typeof window;"); + let h = rt.load_module(&m).unwrap(); + let t: String = rt.get_value(Some(&h), "t").unwrap(); + assert_eq!(t, "object"); +} + +#[test] +fn polyfills_set_location_protocol_and_host() { + let mut rt = default_runtime(); + apply_browser_polyfills(&mut rt, "http://localhost:8080").unwrap(); + + let m = Module::new( + "t.js", + "export const proto = location.protocol; export const host = location.host;", + ); + let h = rt.load_module(&m).unwrap(); + let proto: String = rt.get_value(Some(&h), "proto").unwrap(); + let host: String = rt.get_value(Some(&h), "host").unwrap(); + assert_eq!(proto, "ws:"); + assert_eq!(host, "localhost:8080"); +} + +#[test] +fn polyfills_set_location_wss_for_https_base() { + let mut rt = default_runtime(); + apply_browser_polyfills(&mut rt, "https://example.com").unwrap(); + + let m = Module::new("t.js", "export const proto = location.protocol;"); + let h = rt.load_module(&m).unwrap(); + let proto: String = rt.get_value(Some(&h), "proto").unwrap(); + assert_eq!(proto, "wss:"); +} + +#[test] +fn polyfills_make_globalthis_instanceof_window() { + let mut rt = default_runtime(); + apply_browser_polyfills(&mut rt, "http://localhost:8080").unwrap(); + + let m = Module::new("t.js", "export const ok = globalThis instanceof Window;"); + let h = rt.load_module(&m).unwrap(); + let ok: bool = rt.get_value(Some(&h), "ok").unwrap(); + assert!(ok, "globalThis instanceof Window must be true for web_sys::window()"); +} + +#[test] +fn polyfills_preserve_existing_globalthis_methods() { + let mut rt = default_runtime(); + apply_browser_polyfills(&mut rt, "http://localhost:8080").unwrap(); + + // dispatchEvent is provided by deno_web; must survive the prototype swap. + let m = Module::new( + "t.js", + "export const ok = typeof globalThis.dispatchEvent === 'function';", + ); + let h = rt.load_module(&m).unwrap(); + let ok: bool = rt.get_value(Some(&h), "ok").unwrap(); + assert!(ok, "dispatchEvent must still be available after Window polyfill"); +} + +#[test] +fn polyfills_persist_into_async_block_on() { + let mut rt = default_runtime(); + apply_browser_polyfills(&mut rt, "http://localhost:8080").unwrap(); + + let m = Module::new("t.js", r#"export async function check() { return location.host; }"#); + let h = rt.load_module(&m).unwrap(); + let tokio = rt.tokio_runtime(); + let host: String = tokio + .block_on(async { rt.call_function_async(Some(&h), "check", json_args!()).await }) + .unwrap(); + assert_eq!(host, "localhost:8080"); +} + +// ── RelativeUrlFixup (post_process) ───────────────────────── + +#[test] +fn relative_url_fixup_skips_non_http_modules() { + use rustyscript::deno_core::{ModuleSource, ModuleSourceCode, ModuleType}; + + let mut fixup = RelativeUrlFixup { + http_base: "http://localhost:8080".to_string(), + }; + let specifier = rustyscript::deno_core::ModuleSpecifier::parse("file:///local.js").unwrap(); + let source = ModuleSource::new( + ModuleType::JavaScript, + ModuleSourceCode::String("export const x = 1;".to_string().into()), + &specifier, + None, + ); + let result = fixup.post_process(&specifier, source).unwrap(); + let code = String::from_utf8_lossy(result.code.as_bytes()).into_owned(); + assert!(!code.contains("var Request"), "non-http modules must not be patched"); +} + +#[test] +fn relative_url_fixup_prepends_request_shim_to_http_modules() { + use rustyscript::deno_core::{ModuleSource, ModuleSourceCode, ModuleType}; + + let mut fixup = RelativeUrlFixup { + http_base: "http://localhost:8080".to_string(), + }; + let specifier = rustyscript::deno_core::ModuleSpecifier::parse("http://localhost:8080/mod.js").unwrap(); + let source = ModuleSource::new( + ModuleType::JavaScript, + ModuleSourceCode::String("export const x = 1;".to_string().into()), + &specifier, + None, + ); + let result = fixup.post_process(&specifier, source).unwrap(); + let code = String::from_utf8_lossy(result.code.as_bytes()).into_owned(); + assert!(code.trim().starts_with("var Request"), "shim must be prepended"); + assert!(code.contains("http://localhost:8080"), "base URL must appear in shim"); + assert!( + code.contains("export const x = 1;"), + "original source must be preserved" + ); +} + +#[test] +fn relative_url_fixup_rewrites_wasm_fetch_call_site() { + use rustyscript::deno_core::{ModuleSource, ModuleSourceCode, ModuleType}; + + let mut fixup = RelativeUrlFixup { + http_base: "http://localhost:8080".to_string(), + }; + let specifier = rustyscript::deno_core::ModuleSpecifier::parse("http://localhost:8080/mod.js").unwrap(); + let wasm_glue = "const ret = arg0.fetch(getStringFromWasm0(arg1, arg2));"; + let source = ModuleSource::new( + ModuleType::JavaScript, + ModuleSourceCode::String(wasm_glue.to_string().into()), + &specifier, + None, + ); + let result = fixup.post_process(&specifier, source).unwrap(); + let code = String::from_utf8_lossy(result.code.as_bytes()).into_owned(); + assert!( + !code.contains("const ret = arg0.fetch(getStringFromWasm0(arg1, arg2));"), + "original fetch call site must be replaced" + ); + assert!( + code.contains("__u[0] === '/'"), + "patched code must include relative-URL check" + ); +} + +// ── create_runtime ─────────────────────────────── + +#[test] +fn create_runtime_returns_working_runtime() { + let mut rt = create_runtime("http://localhost:8080").unwrap(); + let val: i32 = rt.eval("2 + 2").unwrap(); + assert_eq!(val, 4); +} + +// ── Known Deno/rustyscript limitations (documented) ────────────── + +/// Native `Request` binding in ES module scope cannot be overridden via +/// `globalThis.Request` — the fix is `RelativeUrlFixup::post_process`. +#[test] +fn request_native_binding_cannot_be_overridden_via_globalthis() { + let mut rt = default_runtime(); + rt.eval::<()>( + r#" + const _O = globalThis.Request; + globalThis.Request = function(i,n){ return new _O(i,n); }; + "#, + ) + .unwrap(); + + let m = Module::new( + "t.js", + r#"export async function f() { + const r = new Request('/x', { method: 'PUT' }); + return r.url; + }"#, + ); + let h = rt.load_module(&m).unwrap(); + let tokio = rt.tokio_runtime(); + let result: Result = tokio.block_on(async { rt.call_function_async(Some(&h), "f", json_args!()).await }); + assert!(result.is_err(), "native Request binding bypasses globalThis override"); +} + +/// Native `fetch` binding is non-writable; `globalThis.fetch` assignment is silently +/// ignored. The fix is source-rewriting in `RelativeUrlFixup::post_process`. +#[test] +fn fetch_native_binding_cannot_be_overridden_via_globalthis() { + let mut rt = default_runtime(); + rt.eval::<()>( + r#" + const _f = globalThis.fetch; + globalThis._log = []; + globalThis.fetch = function(i,n){ globalThis._log.push(i); return _f(i,n); }; + "#, + ) + .unwrap(); + + let m = Module::new( + "t.js", + r#"export async function f() { + try { await window.fetch('/test'); } catch(_) {} + return globalThis._log; + }"#, + ); + let h = rt.load_module(&m).unwrap(); + let tokio = rt.tokio_runtime(); + let log: Vec = tokio + .block_on(async { rt.call_function_async(Some(&h), "f", json_args!()).await }) + .unwrap(); + assert!( + log.is_empty(), + "native fetch binding bypasses globalThis.fetch override" + ); +} + +#[test] +fn polyfills_make_self_instanceof_worker_global_scope() { + use std::time::Duration; + + use rustyscript::{Module, Runtime, RuntimeOptions}; + let mut rt = Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(5), + ..Default::default() + }) + .unwrap(); + apply_browser_polyfills(&mut rt, "http://localhost:8080").unwrap(); + let m = Module::new( + "t.js", + r#" + export const inWorker = ( + typeof globalThis.WorkerGlobalScope !== 'undefined' && + typeof globalThis.self !== 'undefined' && + globalThis.self instanceof globalThis.WorkerGlobalScope + ); + "#, + ); + let h = rt.load_module(&m).unwrap(); + let v: bool = rt.get_value(Some(&h), "inWorker").unwrap(); + assert!( + v, + "self instanceof WorkerGlobalScope must be true for pyodide IN_BROWSER_WEB_WORKER" + ); +} + +#[test] +fn polyfills_visible_in_dynamically_imported_module() { + use std::time::Duration; + + use rustyscript::{Module, Runtime, RuntimeOptions, json_args}; + let mut rt = Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(5), + ..Default::default() + }) + .unwrap(); + apply_browser_polyfills(&mut rt, "http://localhost:8080").unwrap(); + // inner.js checks the polyfills + let inner = Module::new( + "inner.js", + r#" + export const inWorker = ( + typeof globalThis.WorkerGlobalScope !== 'undefined' && + globalThis.self instanceof globalThis.WorkerGlobalScope + ); + "#, + ); + // outer.js dynamically imports inner.js + let outer = Module::new( + "outer.js", + r#" + export async function check() { + const m = await import("./inner.js"); + return m.inWorker; + } + "#, + ); + let h = rt.load_modules(&outer, vec![&inner]).unwrap(); + let tokio = rt.tokio_runtime(); + let v: bool = tokio + .block_on(async { rt.call_function_async(Some(&h), "check", json_args!()).await }) + .unwrap(); + assert!( + v, + "WorkerGlobalScope polyfill must be visible in dynamically imported modules" + ); +} + +#[test] +fn deno_global_not_exposed_in_rustyscript() { + use std::time::Duration; + + use rustyscript::{Module, Runtime, RuntimeOptions}; + let mut rt = Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(5), + ..Default::default() + }) + .unwrap(); + let m = Module::new("t.js", "export const hasDeno = typeof Deno !== 'undefined';"); + let h = rt.load_module(&m).unwrap(); + let v: bool = rt.get_value(Some(&h), "hasDeno").unwrap(); + // If Deno IS exposed, pyodide will try to use Deno-specific APIs and fail. + println!("Deno exposed: {v}"); +} + +/// Verify that post_process is called for modules loaded via dynamic import(). +#[test] +fn post_process_called_for_dynamic_imports() { + use std::sync::{Arc, Mutex}; + use std::time::Duration; + + + use rustyscript::module_loader::ImportProvider; + use rustyscript::{Module, Runtime, RuntimeOptions, json_args}; + + // Track which specifiers post_process is called for + let visited = Arc::new(Mutex::new(vec![])); + let visited_clone = visited.clone(); + + struct TrackingProvider { + visited: Arc>>, + } + impl ImportProvider for TrackingProvider { + fn post_process( + &mut self, + specifier: &rustyscript::deno_core::ModuleSpecifier, + source: rustyscript::deno_core::ModuleSource, + ) -> Result { + self.visited.lock().unwrap().push(specifier.to_string()); + Ok(source) + } + } + + let mut rt = Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(5), + import_provider: Some(Box::new(TrackingProvider { visited: visited_clone })), + ..Default::default() + }) + .unwrap(); + + let inner = Module::new("inner.js", "export const x = 42;"); + let outer = Module::new( + "outer.js", + r#" + export async function load() { + const m = await import("./inner.js"); + return m.x; + } + "#, + ); + let h = rt.load_modules(&outer, vec![&inner]).unwrap(); + let tokio = rt.tokio_runtime(); + let _: i32 = tokio + .block_on(async { rt.call_function_async(Some(&h), "load", json_args!()).await }) + .unwrap(); + + let seen = visited.lock().unwrap().clone(); + println!("post_process called for: {:?}", seen); + // post_process is NOT called for dynamic imports — only for load_module/load_modules. + // This is a known rustyscript limitation: pyodide.js loaded via import() inside + // loadPyodideScript cannot be patched via post_process; instead we patch the + // loadPyodideScript source itself (via post_process on et_ws_pydata1.js) to apply + // the pyodide patches inline using fetch+eval. + assert!( + !seen.iter().any(|s| s.contains("inner.js")), + "post_process must NOT be called for dynamically imported modules (known limitation), got: {:?}", + seen + ); +} + +/// Verify the loadPyodideScript pattern we're patching actually exists in et_ws_pydata1.js. +#[test] +fn pydata1_js_contains_load_pyodide_script_pattern() { + let path = concat!( + env!("CARGO_MANIFEST_DIR"), + "/../../services/ws-modules/pydata1/pkg/et_ws_pydata1.js" + ); + let content = std::fs::read_to_string(path).expect("et_ws_pydata1.js not found"); + assert!( + content.contains("document.createElement"), + "loadPyodideScript uses document.createElement" + ); + assert!( + content.contains("loadPyodideScript"), + "function loadPyodideScript exists" + ); +} + +/// Verify RelativeUrlFixup patches et_ws_pydata1.js to replace loadPyodideScript. +#[test] +fn relative_url_fixup_patches_load_pyodide_script() { + use et_ws_worker::RelativeUrlFixup; + use rustyscript::deno_core::{ModuleSource, ModuleSourceCode, ModuleType}; + use rustyscript::module_loader::ImportProvider; + + let path = concat!( + env!("CARGO_MANIFEST_DIR"), + "/../../services/ws-modules/pydata1/pkg/et_ws_pydata1.js" + ); + let content = std::fs::read_to_string(path).expect("et_ws_pydata1.js not found"); + + let mut fixup = RelativeUrlFixup { + http_base: "http://localhost:8080".to_string(), + }; + let specifier = + rustyscript::deno_core::ModuleSpecifier::parse("http://localhost:8080/modules/et-ws-pydata1/et_ws_pydata1.js") + .unwrap(); + let source = ModuleSource::new( + ModuleType::JavaScript, + ModuleSourceCode::String(content.into()), + &specifier, + None, + ); + let result = fixup.post_process(&specifier, source).unwrap(); + let code = String::from_utf8_lossy(result.code.as_bytes()).into_owned(); + + assert!( + !code.contains("document.createElement"), + "document.createElement must be removed" + ); + assert!(code.contains("fetch(url)"), "patched version must use fetch"); + assert!(code.contains("(0, eval)(patched)"), "patched version must use eval"); +} + +/// Verify the pyodide.js patch string exists in the actual pyodide.js file. +#[test] +fn pyodide_js_contains_cannot_determine_runtime_env_string() { + // Find pyodide.js via mise + let output = std::process::Command::new("mise") + .args(["where", "npm:pyodide"]) + .output() + .expect("mise not found"); + let base = String::from_utf8_lossy(&output.stdout).trim().to_string(); + let pyodide_js = format!("{base}/lib/node_modules/pyodide/pyodide.js"); + let content = + std::fs::read_to_string(&pyodide_js).unwrap_or_else(|_| panic!("pyodide.js not found at {pyodide_js}")); + + let target = concat!( + r#"else if(f.IN_NODE)k=Ne;else if(f.IN_SHELL)k=load;"#, + r#"else throw new Error("Cannot determine runtime environment")"#, + ); + assert!( + content.contains(target), + "pyodide.js must contain the patch target string" + ); +} + +/// Verify that fetch+eval of pyodide.js (with the loadScript patch applied inline) +/// successfully sets globalThis.loadPyodide. +#[test] +fn fetch_eval_pyodide_js_with_inline_patch_sets_load_pyodide() { + use std::time::Duration; + + use rustyscript::{Module, Runtime, RuntimeOptions}; + + // Find pyodide.js + let output = std::process::Command::new("mise") + .args(["where", "npm:pyodide"]) + .output() + .expect("mise not found"); + let base = String::from_utf8_lossy(&output.stdout).trim().to_string(); + let pyodide_js = format!("{base}/lib/node_modules/pyodide/pyodide.js"); + let content = + std::fs::read_to_string(&pyodide_js).unwrap_or_else(|_| panic!("pyodide.js not found at {pyodide_js}")); + + // Apply the same patch we do in loadPyodideScript + let target = concat!( + r#"else if(f.IN_NODE)k=Ne;else if(f.IN_SHELL)k=load;"#, + r#"else throw new Error("Cannot determine runtime environment")"#, + ); + let replacement = concat!( + r#"else if(f.IN_NODE)k=Ne;else if(f.IN_SHELL)k=load;"#, + r#"else k=async function(e){const t=await(await fetch(e)).text();(0,eval)(t)}"#, + ); + let patched = content.replace(target, replacement); + assert!(patched.contains(replacement), "patch must be applied"); + + let mut rt = Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(10), + ..Default::default() + }) + .unwrap(); + + // Eval the patched pyodide.js directly + rt.eval::<()>(patched).unwrap(); + + // Check that loadPyodide is now set + let m = Module::new( + "t.js", + "export const has = typeof globalThis.loadPyodide === 'function';", + ); + let h = rt.load_module(&m).unwrap(); + let has: bool = rt.get_value(Some(&h), "has").unwrap(); + assert!( + has, + "globalThis.loadPyodide must be set after evaling patched pyodide.js" + ); +} + +/// Verify the inline JS string replacement in the patched loadPyodideScript +/// correctly patches pyodide.js before eval-ing it. +#[test] +fn patched_load_pyodide_script_inline_replacement_works() { + use et_ws_worker::{apply_browser_polyfills, create_runtime}; + use rustyscript::Module; + + // Find pyodide.js path via mise + let output = std::process::Command::new("mise") + .args(["where", "npm:pyodide"]) + .output() + .expect("mise not found"); + let base = String::from_utf8_lossy(&output.stdout).trim().to_string(); + let _pyodide_url = "http://localhost:9999/modules/pyodide/pyodide.js".to_string(); + + // Read and serve pyodide.js content directly (simulate what the server would serve) + let pyodide_path = format!("{base}/lib/node_modules/pyodide/pyodide.js"); + let pyodide_content = std::fs::read_to_string(&pyodide_path).unwrap(); + + let mut rt = create_runtime("http://localhost:9999").unwrap(); + apply_browser_polyfills(&mut rt, "http://localhost:9999").unwrap(); + + // Simulate what the patched loadPyodideScript does: + // 1. fetch pyodide.js text (we inject it directly) + // 2. apply the inline string replacement + // 3. eval the result + let target = concat!( + r#"else if(f.IN_NODE)k=Ne;else if(f.IN_SHELL)k=load;"#, + r#"else throw new Error("Cannot determine runtime environment")"#, + ); + let replacement = concat!( + r#"else if(f.IN_NODE)k=Ne;else if(f.IN_SHELL)k=load;"#, + r#"else k=async function(e){const t=await(await fetch(e)).text();(0,eval)(t)}"#, + ); + let patched_pyodide = pyodide_content.replace(target, replacement); + + // Inject the patched pyodide.js text as a global, then eval it + rt.eval::<()>(format!( + "globalThis.__pyodideText = {};", + serde_json::to_string(&patched_pyodide).unwrap() + )) + .unwrap(); + rt.eval::<()>("(0, eval)(globalThis.__pyodideText);").unwrap(); + + // Check loadPyodide is now available + let m = Module::new( + "t.js", + "export const has = typeof globalThis.loadPyodide === 'function';", + ); + let h = rt.load_module(&m).unwrap(); + let has: bool = rt.get_value(Some(&h), "has").unwrap(); + assert!(has, "globalThis.loadPyodide must be set after inline-patched eval"); +} + +/// Print the actual patched loadPyodideScript to inspect the generated JS. +#[test] +fn inspect_patched_load_pyodide_script_js() { + use et_ws_worker::RelativeUrlFixup; + use rustyscript::deno_core::{ModuleSource, ModuleSourceCode, ModuleType}; + use rustyscript::module_loader::ImportProvider; + + let path = concat!( + env!("CARGO_MANIFEST_DIR"), + "/../../services/ws-modules/pydata1/pkg/et_ws_pydata1.js" + ); + let content = std::fs::read_to_string(path).unwrap(); + let mut fixup = RelativeUrlFixup { + http_base: "http://localhost:8080".to_string(), + }; + let specifier = + rustyscript::deno_core::ModuleSpecifier::parse("http://localhost:8080/modules/et-ws-pydata1/et_ws_pydata1.js") + .unwrap(); + let source = ModuleSource::new( + ModuleType::JavaScript, + ModuleSourceCode::String(content.into()), + &specifier, + None, + ); + let result = fixup.post_process(&specifier, source).unwrap(); + let code = String::from_utf8_lossy(result.code.as_bytes()).into_owned(); + + // Print the loadPyodideScript function from the patched code + if let Some(start) = code.find("async function loadPyodideScript") { + let end = code[start..].find("\n}").map(|i| start + i + 2).unwrap_or(start + 500); + println!("Patched loadPyodideScript:\n{}", &code[start..end.min(code.len())]); + } +} + +/// End-to-end test: run the patched loadPyodideScript against a real HTTP server +/// serving pyodide.js, and verify globalThis.loadPyodide is set. +#[test] +#[ignore] +fn patched_load_pyodide_script_runs_against_http_server() { + use et_ws_test_server::start; + use et_ws_worker::{apply_browser_polyfills, create_runtime}; + + + use rustyscript::{Module, json_args}; + + let server = start(); + let base = &server.base_url; + + let mut rt = create_runtime(base).unwrap(); + apply_browser_polyfills(&mut rt, base).unwrap(); + + // Load the patched et_ws_pydata1.js (post_process will patch it) + let entry_url = format!("{base}/modules/et-ws-pydata1/et_ws_pydata1.js"); + let stub = rustyscript::Module::new("entry.js", format!(r#"export {{ default }} from {entry_url:?};"#)); + let handle = rt.load_module(&stub).unwrap(); + + // Call default() which runs loadPyodideScript() then loadPyodide() + let tokio = rt.tokio_runtime(); + let result: Result = tokio.block_on(async { + rt.call_function_async::(Some(&handle), "default", json_args!()) + .await + }); + + match &result { + Ok(_) => println!("default() succeeded"), + Err(e) => println!("default() failed: {e}"), + } + + // Check if loadPyodide was set (even if init failed partway through) + let m = Module::new( + "check.js", + "export const has = typeof globalThis.loadPyodide === 'function';", + ); + let h = rt.load_module(&m).unwrap(); + let has: bool = rt.get_value(Some(&h), "has").unwrap(); + assert!(has, "globalThis.loadPyodide must be set after loadPyodideScript runs"); +} + +/// Check if _createPyodideModule is set after pyodide.asm.js is loaded. +#[test] +#[ignore] +fn pyodide_asm_js_sets_create_pyodide_module() { + use et_ws_test_server::start; + use et_ws_worker::{apply_browser_polyfills, create_runtime}; + use rustyscript::{Module, json_args}; + + let server = start(); + let base = &server.base_url; + let mut rt = create_runtime(base).unwrap(); + apply_browser_polyfills(&mut rt, base).unwrap(); + + let entry_url = format!("{base}/modules/et-ws-pydata1/et_ws_pydata1.js"); + let stub = rustyscript::Module::new("entry.js", format!(r#"export {{ default }} from {entry_url:?};"#)); + let handle = rt.load_module(&stub).unwrap(); + + let tokio = rt.tokio_runtime(); + let _ = tokio.block_on(async { + rt.call_function_async::(Some(&handle), "default", json_args!()) + .await + }); + + let m = Module::new( + "check.js", + r#" + export const hasCreate = typeof globalThis._createPyodideModule === 'function'; + export const hasLoadPyodide = typeof globalThis.loadPyodide === 'function'; + "#, + ); + let h = rt.load_module(&m).unwrap(); + let has_create: bool = rt.get_value(Some(&h), "hasCreate").unwrap(); + let has_load: bool = rt.get_value(Some(&h), "hasLoadPyodide").unwrap(); + println!("_createPyodideModule: {has_create}, loadPyodide: {has_load}"); + assert!(has_load, "loadPyodide must be set"); + // _createPyodideModule may or may not be set depending on how pyodide.asm.js loads +} + +/// Check if Symbol.hasInstance can make globalThis instanceof Window work +/// without modifying the prototype chain (which breaks pyodide). +#[test] +fn window_instanceof_via_symbol_has_instance() { + use std::time::Duration; + + use rustyscript::{Module, Runtime, RuntimeOptions}; + let mut rt = Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(5), + ..Default::default() + }) + .unwrap(); + rt.eval::<()>(r#" + globalThis.Window = function Window() {}; + Object.defineProperty(Window, Symbol.hasInstance, { + value: function(instance) { return instance === globalThis; } + }); + globalThis.window = globalThis; + globalThis.location = { protocol: "ws:", host: "localhost:8080", + href: "http://localhost:8080/", toString() { return this.href; } }; + globalThis.self = globalThis; + "#).unwrap(); + let m = Module::new( + "t.js", + r#" + export const isWindow = globalThis instanceof Window; + export const protoOk = Object.getPrototypeOf(globalThis) !== null; + "#, + ); + let h = rt.load_module(&m).unwrap(); + let is_window: bool = rt.get_value(Some(&h), "isWindow").unwrap(); + let proto_ok: bool = rt.get_value(Some(&h), "protoOk").unwrap(); + println!("instanceof Window: {is_window}, prototype chain intact: {proto_ok}"); + assert!(is_window, "globalThis instanceof Window must be true"); + assert!(proto_ok, "prototype chain must remain intact"); +} + +/// Run loadPyodide() fully and report the exact error. +#[test] +fn load_pyodide_full_run() { + use et_ws_test_server::start; + use et_ws_worker::{apply_browser_polyfills, create_runtime}; + use rustyscript::json_args; + + let server = start(); + let base = &server.base_url; + let mut rt = create_runtime(base).unwrap(); + apply_browser_polyfills(&mut rt, base).unwrap(); + + let entry_url = format!("{base}/modules/et-ws-pydata1/et_ws_pydata1.js"); + let stub = rustyscript::Module::new("entry.js", format!(r#"export {{ default }} from {entry_url:?};"#)); + let handle = rt.load_module(&stub).unwrap(); + + let tokio = rt.tokio_runtime(); + let result = tokio.block_on(async { + rt.call_function_async::(Some(&handle), "default", json_args!()) + .await + }); + match result { + Ok(_) => println!("loadPyodide succeeded!"), + Err(e) => println!("loadPyodide failed: {e}"), + } +} + +/// Test pyodide loading by directly eval-ing pyodide.js and pyodide.asm.js +/// without going through the HTTP server, to isolate the issue. +#[test] +#[ignore] +fn pyodide_loads_via_direct_eval() { + use et_ws_test_server::start; + use et_ws_worker::{apply_browser_polyfills, create_runtime}; + use rustyscript::{Module, json_args}; + + let server = start(); + let base = &server.base_url; + + // Find pyodide files + let output = std::process::Command::new("mise") + .args(["where", "npm:pyodide"]) + .output() + .unwrap(); + let mise_base = String::from_utf8_lossy(&output.stdout).trim().to_string(); + let pyodide_dir = format!("{mise_base}/lib/node_modules/pyodide"); + + let pyodide_js = std::fs::read_to_string(format!("{pyodide_dir}/pyodide.js")).unwrap(); + let pyodide_asm_js = std::fs::read_to_string(format!("{pyodide_dir}/pyodide.asm.js")).unwrap(); + + let patch = |src: &str| -> String { + src.replace( + r#"else throw new Error("Cannot determine runtime environment")"#, + r#"else k=async function(e){const t=await(await fetch(e)).text();(0,eval)(globalThis.__patchScript(t))}"#, + ) + }; + + let mut rt = create_runtime(base).unwrap(); + apply_browser_polyfills(&mut rt, base).unwrap(); + + // Set up __patchScript globally + rt.eval::<()>( + r#"globalThis.__patchScript = (src) => src.replace( + /else throw new Error\("Cannot determine runtime environment"\)/g, + 'else k=async function(e){const t=await(await fetch(e)).text();(0,eval)(globalThis.__patchScript(t))}' + );"#, + ) + .unwrap(); + + // Eval patched pyodide.js directly (no HTTP) + rt.eval::<()>(patch(&pyodide_js)).unwrap(); + + // Eval patched pyodide.asm.js directly (no HTTP) + rt.eval::<()>(patch(&pyodide_asm_js)).unwrap(); + + // Now try loadPyodide with the indexURL pointing to the server + let index_url = format!("{base}/modules/pyodide/"); + let m = Module::new( + "t.js", + format!( + r#" + export async function go() {{ + return await globalThis.loadPyodide({{ indexURL: {index_url:?} }}); + }} + "# + ), + ); + let h = rt.load_module(&m).unwrap(); + let tokio = rt.tokio_runtime(); + let result = tokio.block_on(async { + rt.call_function_async::(Some(&h), "go", json_args!()) + .await + }); + match result { + Ok(_) => println!("loadPyodide via direct eval succeeded!"), + Err(e) => println!( + "loadPyodide via direct eval failed: {}", + &e.to_string()[..e.to_string().len().min(300)] + ), + } +} + +/// Minimal pyodide test: load pyodide and run a trivial Python expression. +#[test] +#[ignore] +fn pyodide_runs_python() { + use et_ws_test_server::start; + use et_ws_worker::{apply_browser_polyfills, create_runtime}; + use rustyscript::{Module, json_args}; + + let server = start(); + let base = &server.base_url; + + let output = std::process::Command::new("mise") + .args(["where", "npm:pyodide"]) + .output() + .unwrap(); + let mise_base = String::from_utf8_lossy(&output.stdout).trim().to_string(); + let pyodide_dir = format!("{mise_base}/lib/node_modules/pyodide"); + let pyodide_js = std::fs::read_to_string(format!("{pyodide_dir}/pyodide.js")).unwrap(); + let pyodide_asm_js = std::fs::read_to_string(format!("{pyodide_dir}/pyodide.asm.js")).unwrap(); + + let patch = |src: &str| { + src.replace( + r#"else throw new Error("Cannot determine runtime environment")"#, + r#"else k=async function(e){const t=await(await fetch(e)).text();(0,eval)(globalThis.__patchScript(t))}"#, + ) + }; + + let mut rt = create_runtime(base).unwrap(); + apply_browser_polyfills(&mut rt, base).unwrap(); + rt.eval::<()>( + r#"globalThis.__patchScript = (src) => src.replace( + /else throw new Error\("Cannot determine runtime environment"\)/g, + 'else k=async function(e){const t=await(await fetch(e)).text();(0,eval)(globalThis.__patchScript(t))}' + );"#, + ) + .unwrap(); + rt.eval::<()>(patch(&pyodide_js)).unwrap(); + rt.eval::<()>(patch(&pyodide_asm_js)).unwrap(); + + let index_url = format!("{base}/modules/pyodide/"); + let m = Module::new( + "t.js", + format!( + r#" + export async function go() {{ + const py = await globalThis.loadPyodide({{ indexURL: {index_url:?} }}); + return py.runPython("1 + 1"); + }} + "# + ), + ); + let h = rt.load_module(&m).unwrap(); + let tokio = rt.tokio_runtime(); + let result = tokio.block_on(async { rt.call_function_async::(Some(&h), "go", json_args!()).await }); + match result { + Ok(v) => { + println!("Python 1+1 = {v}"); + assert_eq!(v, 2); + } + Err(e) => { + let msg = e.to_string(); + println!("Failed: {}", &msg[..msg.len().min(500)]); + panic!("pyodide failed"); + } + } +} + +/// Test if polyfilling node:vm.runInThisContext makes pyodide use the Deno path successfully. +#[ignore] +#[test] +fn pyodide_with_node_vm_polyfill() { + use et_ws_test_server::start; + use et_ws_worker::{apply_browser_polyfills, create_runtime}; + use rustyscript::{Module, json_args}; + + let server = start(); + let base = &server.base_url; + + let output = std::process::Command::new("mise") + .args(["where", "npm:pyodide"]) + .output() + .unwrap(); + let mise_base = String::from_utf8_lossy(&output.stdout).trim().to_string(); + let pyodide_dir = format!("{mise_base}/lib/node_modules/pyodide"); + let pyodide_js = std::fs::read_to_string(format!("{pyodide_dir}/pyodide.js")).unwrap(); + + let mut rt = create_runtime(base).unwrap(); + apply_browser_polyfills(&mut rt, base).unwrap(); + + // Polyfill node:vm so pyodide's Deno/Node path works. + // pyodide uses J.runInThisContext(code) to load pyodide.asm.js. + // We implement it as (0, eval)(code). + rt.eval::<()>( + r#" + globalThis.__nodeVm = { runInThisContext: (code) => (0, eval)(code) }; + "#, + ) + .unwrap(); + + // Patch pyodide.js: replace the node:vm import with our polyfill, + // and replace the Deno loadScript (Ne) to use fetch + runInThisContext. + let node_imports_pattern = r#"J=(await import(/* webpackIgnore */"node:url")).default, +V=await import(/* webpackIgnore */"node:fs"),U=await import(/* webpackIgnore */"node:fs/promises"), +J=(await import(/* webpackIgnore */"node:vm")).default"#; + let patched_pyodide = pyodide_js + // Replace: J=(await import("node:vm")).default -> J=globalThis.__nodeVm + .replace( + node_imports_pattern, + r#"J=globalThis.__nodeVm,V={},U={readFile:async()=>{throw new Error("no fs")}}"#, + ); + + rt.eval::<()>(patched_pyodide).unwrap(); + + let index_url = format!("{base}/modules/pyodide/"); + let m = Module::new( + "t.js", + format!( + r#" + export async function go() {{ + const py = await globalThis.loadPyodide({{ indexURL: {index_url:?} }}); + return py.runPython("1 + 1"); + }} + "# + ), + ); + let h = rt.load_module(&m).unwrap(); + let tokio = rt.tokio_runtime(); + let result = tokio.block_on(async { rt.call_function_async::(Some(&h), "go", json_args!()).await }); + match result { + Ok(v) => { + println!("Python 1+1 = {v}"); + assert_eq!(v, 2); + } + Err(e) => { + let msg = e.to_string(); + println!("Failed: {}", &msg[..msg.len().min(400)]); + panic!("pyodide with node:vm polyfill failed"); + } + } +} + +/// Test pyodide without any Window polyfill to isolate the getPyProxyClass failure. +#[ignore] +#[test] +fn pyodide_without_window_polyfill() { + use et_ws_test_server::start; + use et_ws_worker::create_runtime; + use rustyscript::{Module, json_args}; + + let server = start(); + let base = &server.base_url; + + let output = std::process::Command::new("mise") + .args(["where", "npm:pyodide"]) + .output() + .unwrap(); + let mise_base = String::from_utf8_lossy(&output.stdout).trim().to_string(); + let pyodide_dir = format!("{mise_base}/lib/node_modules/pyodide"); + let pyodide_js = std::fs::read_to_string(format!("{pyodide_dir}/pyodide.js")).unwrap(); + + let mut rt = create_runtime(base).unwrap(); + // Only set location, no Window polyfill + rt.eval::<()>(&format!(r#" + globalThis.location = {{ protocol: "ws:", host: "127.0.0.1", + href: "{base}/", toString() {{ return this.href; }} }}; + globalThis.__pyEval = async function(e) {{ + const t = await (await fetch(e)).text(); + const p = t + .replace(/J\.runInThisContext\(/g, '(0,eval)(') + .replace( + /else throw new Error\("Cannot determine runtime environment"\)/g, + 'else k=async function(u){{return globalThis.__pyEval(u)}}' + ); + (0, eval)(p); + }}; + "#)).unwrap(); + + let patched_pyodide = pyodide_js.replace("J.runInThisContext(", "(0,eval)(").replace( + r#"else throw new Error("Cannot determine runtime environment")"#, + "else k=async function(u){return globalThis.__pyEval(u)}", + ); + rt.eval::<()>(&patched_pyodide).unwrap(); + + let index_url = format!("{base}/modules/pyodide/"); + let m = Module::new( + "t.js", + format!( + r#" + export async function go() {{ + const py = await globalThis.loadPyodide({{ indexURL: {index_url:?} }}); + return py.runPython("1 + 1"); + }} + "# + ), + ); + let h = rt.load_module(&m).unwrap(); + let tokio = rt.tokio_runtime(); + let result = tokio.block_on(async { rt.call_function_async::(Some(&h), "go", json_args!()).await }); + match result { + Ok(v) => { + println!("Python 1+1 = {v}"); + assert_eq!(v, 2); + } + Err(e) => println!( + "Failed (no Window polyfill): {}", + &e.to_string()[..e.to_string().len().min(200)] + ), + } +} + +/// Probe what rustyscript provides without polyfills (with the `web` + `webgpu` +/// features enabled). Used to determine whether navigator/navigator.gpu need +/// polyfilling for graphics-info. +#[test] +fn navigator_and_webgpu_globals_present_with_features() { + let mut rt = default_runtime(); + let m = Module::new( + "p.js", + r#" + export const navType = typeof globalThis.navigator; + export const gpuType = typeof globalThis.navigator?.gpu; + export const ua = globalThis.navigator?.userAgent ?? null; + export const requestAdapter = typeof globalThis.navigator?.gpu?.requestAdapter; + "#, + ); + let h = rt.load_module(&m).unwrap(); + let nav: String = rt.get_value(Some(&h), "navType").unwrap(); + let gpu: String = rt.get_value(Some(&h), "gpuType").unwrap(); + let ua: serde_json::Value = rt.get_value(Some(&h), "ua").unwrap(); + let req: String = rt.get_value(Some(&h), "requestAdapter").unwrap(); + println!("navigator: {nav}\nnavigator.gpu: {gpu}\nuserAgent: {ua}\nrequestAdapter: {req}"); +} diff --git a/services/ws-worker/tests/data1_load.rs b/services/ws-worker/tests/data1_load.rs new file mode 100644 index 0000000..cf2261a --- /dev/null +++ b/services/ws-worker/tests/data1_load.rs @@ -0,0 +1,146 @@ +/// Bisect the data1 stack overflow: load the module without polyfills/run. +/// +/// Run with the local ws-server already up on :8080 (mise run ws-server): +/// cargo test -p et-ws-worker --test data1_load -- --ignored --nocapture +use et_ws_worker::{apply_browser_polyfills, create_runtime}; +use rustyscript::deno_core::error::ModuleLoaderError; +use rustyscript::deno_core::{ModuleSource, ModuleSpecifier}; +use rustyscript::module_loader::ImportProvider; +use rustyscript::{Module, Runtime, RuntimeOptions}; +use std::time::Duration; + +/// Identity import provider — touches every fetched module but rewrites nothing. +struct PassThroughProvider; +impl ImportProvider for PassThroughProvider { + fn post_process( + &mut self, + _specifier: &ModuleSpecifier, + source: ModuleSource, + ) -> Result { + Ok(source) + } +} + +const HTTP_BASE: &str = "http://localhost:8080"; +const ENTRY_URL: &str = "http://localhost:8080/modules/et-ws-data1/et_ws_data1.js"; + +#[test] +#[ignore] +fn create_runtime_only() { + let _runtime = create_runtime(HTTP_BASE).unwrap(); + println!("create_runtime ok"); +} + +#[test] +#[ignore] +fn create_runtime_and_polyfills() { + let mut runtime = create_runtime(HTTP_BASE).unwrap(); + apply_browser_polyfills(&mut runtime, HTTP_BASE).unwrap(); + println!("polyfills ok"); +} + +#[test] +#[ignore] +fn load_module_without_polyfills() { + let mut runtime = create_runtime(HTTP_BASE).unwrap(); + let stub = Module::new("entry.js", format!(r#"export {{ default, run }} from {ENTRY_URL:?};"#)); + let _handle = runtime.load_module(&stub).unwrap(); + println!("load_module ok"); +} + +#[test] +#[ignore] +fn load_module_default_runtime() { + // No custom import_provider — does the bare rustyscript Runtime crash too? + let mut runtime = Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(60), + ..Default::default() + }) + .unwrap(); + let stub = Module::new("entry.js", format!(r#"export {{ default, run }} from {ENTRY_URL:?};"#)); + let _handle = runtime.load_module(&stub).unwrap(); + println!("load_module ok"); +} + +#[test] +#[ignore] +fn load_with_import_provider_only() { + // Custom import_provider but no WebOptions.base_url — isolate which one crashes. + use rustyscript::ExtensionOptions; + let mut runtime = Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(60), + import_provider: Some(Box::new(et_ws_worker::RelativeUrlFixup { + http_base: HTTP_BASE.to_string(), + })), + extension_options: ExtensionOptions::default(), + ..Default::default() + }) + .unwrap(); + let stub = Module::new("entry.js", format!(r#"export {{ default, run }} from {ENTRY_URL:?};"#)); + let _handle = runtime.load_module(&stub).unwrap(); + println!("load_module ok"); +} + +#[test] +#[ignore] +fn load_with_passthrough_provider() { + // Identity provider — does merely registering an ImportProvider trigger the crash, + // or is it the patching the source with var-shadowing that does it? + let mut runtime = Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(60), + import_provider: Some(Box::new(PassThroughProvider)), + ..Default::default() + }) + .unwrap(); + let stub = Module::new("entry.js", format!(r#"export {{ default, run }} from {ENTRY_URL:?};"#)); + let _handle = runtime.load_module(&stub).unwrap(); + println!("load_module ok"); +} + +#[test] +#[ignore] +fn load_trivial_remote_with_provider() { + // Tiny remote JS + ImportProvider — does post_process by itself crash, or only on data1.js? + let mut runtime = Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(60), + import_provider: Some(Box::new(PassThroughProvider)), + ..Default::default() + }) + .unwrap(); + // Use a tiny file that the server happens to serve. package.json is JSON — try the .d.ts. + // Fall back to a data: URL via inline import if needed. + let stub = Module::new( + "entry.js", + r#"export const x = 1;"#.to_string(), + ); + let _handle = runtime.load_module(&stub).unwrap(); + println!("inline ok"); +} + +#[test] +#[ignore] +fn load_trivial_remote_module() { + // Load any tiny remote JS file: is the crash module-specific or any HTTP import? + let mut runtime = Runtime::new(RuntimeOptions { + timeout: Duration::from_secs(60), + ..Default::default() + }) + .unwrap(); + let trivial = "http://localhost:8080/modules/et-ws-data1/package.json"; + let stub = Module::new( + "entry.js", + format!(r#"const r = await fetch({trivial:?}); console.log("got", await r.text());"#), + ); + let _handle = runtime.load_module(&stub).unwrap(); + println!("trivial load ok"); +} + +#[test] +#[ignore] +fn load_module_with_polyfills() { + let mut runtime = create_runtime(HTTP_BASE).unwrap(); + apply_browser_polyfills(&mut runtime, HTTP_BASE).unwrap(); + let stub = Module::new("entry.js", format!(r#"export {{ default, run }} from {ENTRY_URL:?};"#)); + let _handle = runtime.load_module(&stub).unwrap(); + println!("load_module ok"); +} diff --git a/services/ws-worker/tests/modules.rs b/services/ws-worker/tests/modules.rs new file mode 100644 index 0000000..e77882c --- /dev/null +++ b/services/ws-worker/tests/modules.rs @@ -0,0 +1,19 @@ +/// Integration tests: start a ws-server in-process and run each module via et-ws-worker. +use rstest::rstest; + +#[rstest] +#[case::data1("et-ws-data1")] +#[case::graphics_info("et-ws-graphics-info")] +#[case::pydata1("et-ws-pydata1")] +fn module_runs_successfully(#[case] module: &str) { + let server = et_ws_test_server::start(); + + let bin = env!("CARGO_BIN_EXE_et-ws-worker"); + let status = std::process::Command::new(bin) + .env("WORKER_MODULE", module) + .env("WS_SERVER_URL", &server.ws_url) + .status() + .expect("failed to spawn et-ws-worker"); + + assert!(status.success(), "{module} exited with code {:?}", status.code()); +} diff --git a/services/ws/Cargo.toml b/services/ws/Cargo.toml index fa65fa7..5d020bb 100644 --- a/services/ws/Cargo.toml +++ b/services/ws/Cargo.toml @@ -10,7 +10,7 @@ actix = "0.13" actix-web = "4" actix-web-actors = "4" chrono = { version = "0.4", features = ["serde"] } -edge-toolkit = { path = "../../libs/edge-toolkit" } +edge-toolkit.workspace = true opentelemetry = "0.31" serde.workspace = true serde_json.workspace = true diff --git a/utilities/cli/Cargo.toml b/utilities/cli/Cargo.toml index f649b67..7676cf9 100644 --- a/utilities/cli/Cargo.toml +++ b/utilities/cli/Cargo.toml @@ -9,7 +9,7 @@ repository.workspace = true [dependencies] anyhow.workspace = true clap.workspace = true -edge-toolkit = { path = "../../libs/edge-toolkit" } +edge-toolkit.workspace = true serde.workspace = true serde_json.workspace = true serde_yaml.workspace = true