From 79b9c3fab3ae2f0d9e2d5d6683748f2d1497a957 Mon Sep 17 00:00:00 2001 From: tangxiangyan <1813932938@qq.com> Date: Thu, 16 Apr 2026 14:56:25 +0800 Subject: [PATCH 01/37] feat: Upgrade the wp-motor version to v1.20.2 --- .gitignore | 1 - Cargo.lock | 7549 +++++++++++++++++ Cargo.toml | 10 +- .../tree-sitter/queries/wpl-highlights.scm | 15 +- web/dist/tree-sitter/tree-sitter-wpl.wasm | Bin 25358 -> 39440 bytes 5 files changed, 7562 insertions(+), 13 deletions(-) create mode 100644 Cargo.lock diff --git a/.gitignore b/.gitignore index 4d74159..943942d 100644 --- a/.gitignore +++ b/.gitignore @@ -32,7 +32,6 @@ pnpm-debug.log* # cache .eslintcache .stylelintcache -Cargo.lock # package-lock.json *.log out diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..f21417a --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7549 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "actix-codec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" +dependencies = [ + "bitflags 2.11.1", + "bytes", + "futures-core", + "futures-sink", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-files" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8c4f30e3272d7c345f88ae0aac3848507ef5ba871f9cc2a41c8085a0f0523b" +dependencies = [ + "actix-http", + "actix-service", + "actix-utils", + "actix-web", + "bitflags 2.11.1", + "bytes", + "derive_more 2.1.1", + "futures-core", + "http-range", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "v_htmlescape", +] + +[[package]] +name = "actix-http" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f860ee6746d0c5b682147b2f7f8ef036d4f92fe518251a3a35ffa3650eafdf0e" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "base64 0.22.1", + "bitflags 2.11.1", + "brotli", + "bytes", + "bytestring", + "derive_more 2.1.1", + "encoding_rs", + "flate2", + "foldhash 0.1.5", + "futures-core", + "h2", + "http", + "httparse", + "httpdate", + "itoa", + "language-tags", + "local-channel", + "mime", + "percent-encoding", + "pin-project-lite", + "rand 0.9.4", + "sha1", + "smallvec", + "tokio", + "tokio-util", + "tracing", + "zstd 0.13.3", +] + +[[package]] +name = "actix-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" +dependencies = [ + "quote", + "syn 2.0.117", +] + +[[package]] +name = "actix-multipart" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5118a26dee7e34e894f7e85aa0ee5080ae4c18bf03c0e30d49a80e418f00a53" +dependencies = [ + "actix-multipart-derive", + "actix-utils", + "actix-web", + "derive_more 0.99.20", + "futures-core", + "futures-util", + "httparse", + "local-waker", + "log", + "memchr", + "mime", + "rand 0.8.5", + "serde", + "serde_json", + "serde_plain", + "tempfile", + "tokio", +] + +[[package]] +name = "actix-multipart-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11eb847f49a700678ea2fa73daeb3208061afa2b9d1a8527c03390f4c4a1c6b" +dependencies = [ + "darling", + "parse-size", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "actix-router" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f8c75c51892f18d9c46150c5ac7beb81c95f78c8b83a634d49f4ca32551fe7" +dependencies = [ + "bytestring", + "cfg-if", + "http", + "regex", + "regex-lite", + "serde", + "tracing", +] + +[[package]] +name = "actix-rt" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92589714878ca59a7626ea19734f0e07a6a875197eec751bb5d3f99e64998c63" +dependencies = [ + "futures-core", + "tokio", +] + +[[package]] +name = "actix-server" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65064ea4a457eaf07f2fba30b4c695bf43b721790e9530d26cb6f9019ff7502" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "futures-util", + "mio", + "socket2 0.5.10", + "tokio", + "tracing", +] + +[[package]] +name = "actix-service" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e46f36bf0e5af44bdc4bdb36fbbd421aa98c79a9bce724e1edeb3894e10dc7f" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "actix-utils" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff87453bc3b56e9b2b23c1cc0b1be8797184accf51d2abe0f8a33ec275d316bf" +dependencies = [ + "actix-codec", + "actix-http", + "actix-macros", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-utils", + "actix-web-codegen", + "bytes", + "bytestring", + "cfg-if", + "cookie", + "derive_more 2.1.1", + "encoding_rs", + "foldhash 0.1.5", + "futures-core", + "futures-util", + "impl-more", + "itoa", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex", + "regex-lite", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "socket2 0.6.3", + "time", + "tracing", + "url", +] + +[[package]] +name = "actix-web-codegen" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" +dependencies = [ + "actix-router", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "actix-web-prom" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7eb266b4c692a4a7e68429fcbe4eb3bd55c053f6d84c0522dc83df22395edf6" +dependencies = [ + "actix-web", + "futures-core", + "log", + "pin-project-lite", + "prometheus", + "regex", + "strfmt", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures 0.2.17", +] + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.17", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "const-random", + "getrandom 0.3.4", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anstyle-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.61.2", +] + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "arc-swap" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +dependencies = [ + "rustversion", +] + +[[package]] +name = "arcstr" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03918c3dbd7701a85c6b9887732e2921175f26c350b4563841d0958c21d57e6d" + +[[package]] +name = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "arrow" +version = "54.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5ec52ba94edeed950e4a41f75d35376df196e8cb04437f7280a5aa49f20f796" +dependencies = [ + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-ipc", + "arrow-ord", + "arrow-row", + "arrow-schema", + "arrow-select", + "arrow-string", +] + +[[package]] +name = "arrow-arith" +version = "54.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc766fdacaf804cb10c7c70580254fcdb5d55cdfda2bc57b02baf5223a3af9e" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "num", +] + +[[package]] +name = "arrow-array" +version = "54.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12fcdb3f1d03f69d3ec26ac67645a8fe3f878d77b5ebb0b15d64a116c212985" +dependencies = [ + "ahash 0.8.12", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "hashbrown 0.15.5", + "num", +] + +[[package]] +name = "arrow-buffer" +version = "54.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "263f4801ff1839ef53ebd06f99a56cecd1dbaf314ec893d93168e2e860e0291c" +dependencies = [ + "bytes", + "half", + "num", +] + +[[package]] +name = "arrow-cast" +version = "54.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ede6175fbc039dfc946a61c1b6d42fd682fcecf5ab5d148fbe7667705798cac9" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "atoi", + "base64 0.22.1", + "chrono", + "half", + "lexical-core", + "num", + "ryu", +] + +[[package]] +name = "arrow-data" +version = "54.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61cfdd7d99b4ff618f167e548b2411e5dd2c98c0ddebedd7df433d34c20a4429" +dependencies = [ + "arrow-buffer", + "arrow-schema", + "half", + "num", +] + +[[package]] +name = "arrow-ipc" +version = "54.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62ff528658b521e33905334723b795ee56b393dbe9cf76c8b1f64b648c65a60c" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "flatbuffers", +] + +[[package]] +name = "arrow-ord" +version = "54.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0a3334a743bd2a1479dbc635540617a3923b4b2f6870f37357339e6b5363c21" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", +] + +[[package]] +name = "arrow-row" +version = "54.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d1d7a7291d2c5107e92140f75257a99343956871f3d3ab33a7b41532f79cb68" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half", +] + +[[package]] +name = "arrow-schema" +version = "54.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cfaf5e440be44db5413b75b72c2a87c1f8f0627117d110264048f2969b99e9" + +[[package]] +name = "arrow-select" +version = "54.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69efcd706420e52cd44f5c4358d279801993846d1c2a8e52111853d61d55a619" +dependencies = [ + "ahash 0.8.12", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num", +] + +[[package]] +name = "arrow-string" +version = "54.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21546b337ab304a32cfc0770f671db7411787586b45b78b4593ae78e64e2b03" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "memchr", + "num", + "regex", + "regex-syntax", +] + +[[package]] +name = "ascii_utils" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a" + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-signal" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.61.2", +] + +[[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 2.0.117", +] + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "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 = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + +[[package]] +name = "bigdecimal" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695" +dependencies = [ + "autocfg", + "libm", + "num-bigint", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +dependencies = [ + "serde_core", +] + +[[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-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "borsh" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" +dependencies = [ + "borsh-derive", + "bytes", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfcfdc083699101d5a7965e49925975f2f55060f94f9a05e7187be95d530ca59" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "brotli" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "btoi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad" +dependencies = [ + "num-traits", +] + +[[package]] +name = "btoi" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b5ab9db53bcda568284df0fd39f6eac24ad6f7ba7ff1168b9e76eba6576b976" +dependencies = [ + "num-traits", +] + +[[package]] +name = "bufstream" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" + +[[package]] +name = "bumpalo" +version = "3.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" + +[[package]] +name = "bytestring" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "113b4343b5f6617e7ad401ced8de3cc8b012e73a594347c307b90db3e9271289" +dependencies = [ + "bytes", +] + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.13+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "camino" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84982c6c0ae343635a3a4ee6dedef965513735c8b183caa7289fa6e27399ebd4" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-util-schemas" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63d2780ac94487eb9f1fea7b0d56300abc9eb488800854ca217f102f5caccca" +dependencies = [ + "semver", + "serde", + "serde-untagged", + "serde-value", + "thiserror 1.0.69", + "toml 0.8.23", + "unicode-xid", + "url", +] + +[[package]] +name = "cargo_metadata" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f7835cfc6135093070e95eb2b53e5d9b5c403dc3a6be6040ee026270aa82502" +dependencies = [ + "camino", + "cargo-platform", + "cargo-util-schemas", + "semver", + "serde", + "serde_json", + "thiserror 2.0.18", +] + +[[package]] +name = "cc" +version = "1.2.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cedarwood" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d910bedd62c24733263d0bed247460853c9d22e8956bd4cd964302095e04e90" +dependencies = [ + "smallvec", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.1", +] + +[[package]] +name = "chrono" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "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 = "clap" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "cmov" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" + +[[package]] +name = "colorchoice" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" + +[[package]] +name = "comfy-table" +version = "7.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958c5d6ecf1f214b4c2bbbbf6ab9523a864bd136dcf71a7e8904799acfe1ad47" +dependencies = [ + "crossterm", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "config" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" +dependencies = [ + "async-trait", + "convert_case 0.6.0", + "json5", + "nom", + "pathdiff", + "ron", + "rust-ini", + "serde", + "serde_json", + "toml 0.8.23", + "yaml-rust2", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.17", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "const_format" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "contracts" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "008eb94d541da40512913ef5e0707c3fb0e7280ba1af13f062461e46dd96ef7e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags 2.11.1", + "crossterm_winapi", + "document-features", + "parking_lot", + "rustix", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "crypto-common" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77727bb15fa921304124b128af125e7e3b968275d1b108b379190264f4423710" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "csv" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde_core", +] + +[[package]] +name = "csv-core" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +dependencies = [ + "memchr", +] + +[[package]] +name = "ctor" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1c888a2a4f677017373fb6c01e13e318dd9e78758445ed5eb985e355d3f8281" +dependencies = [ + "ctor-proc-macro", + "dtor", + "link-section", +] + +[[package]] +name = "ctor-proc-macro" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ab264ea985f1bd27887d7b21ea2bb046728e05d11909ca138d700c494730db" + +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.117", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "dary_heap" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06d2e3287df1c007e74221c49ca10a95d557349e54b3a75dc2fb14712c751f04" + +[[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 = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derive-getters" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74ef43543e701c01ad77d3a5922755c6a1d71b22d942cb8042be4994b380caff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[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 2.0.117", +] + +[[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 2.0.117", +] + +[[package]] +name = "derive_more" +version = "0.99.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.117", +] + +[[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 0.10.0", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.117", + "unicode-xid", +] + +[[package]] +name = "derive_utils" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "362f47930db19fe7735f527e6595e4900316b893ebf6d48ad3d31be928d57dd6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "destructure_traitobject" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c877555693c14d2f84191cfd3ad8582790fc52b5e2274b40b59cf5f5cea25c7" + +[[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", + "ctutils", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.11.1", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "dlv-list" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "downcast" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" + +[[package]] +name = "dtor" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30e4690622ab6700ced40fc370a3f07b7d111f0154bb6fb08f73b4c8834f75b6" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c98b077c7463d01d22dde8a24378ddf1ca7263dc687cffbed38819ea6c21131" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +dependencies = [ + "serde", +] + +[[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-ordinalize" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a1091a7bb1f8f2c4b28f1fe2cef4980ca2d410a3d727d67ecc3178c9b0800f0" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "enum_dispatch" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" +dependencies = [ + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "escape8259" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5692dd7b5a1978a5aeb0ce83b7655c58ca8efdcb79d21036ea249da95afec2c6" + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[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 = "fast_chemail" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "495a39d30d624c2caabe6312bfead73e7717692b44e0b32df168c275a2e8e9e4" +dependencies = [ + "ascii_utils", +] + +[[package]] +name = "fastrand" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "flatbuffers" +version = "24.12.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f1baf0dbf96932ec9a3038d57900329c015b0bfb7b63d904f3bc27e2b02a096" +dependencies = [ + "bitflags 1.3.2", + "rustc_version", +] + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "libz-sys", + "miniz_oxide", +] + +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin", +] + +[[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 = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[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 = "fragile" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8878864ba14bb86e818a412bfd6f18f9eabd4ec0f008a28e8f7eb61db532fcf9" +dependencies = [ + "futures-core", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[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-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-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[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-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "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", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[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 2.0.117", +] + +[[package]] +name = "git2" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" +dependencies = [ + "bitflags 2.11.1", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "num-traits", + "zerocopy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.12", + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", +] + +[[package]] +name = "hashbrown" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + +[[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.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "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 = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac 0.12.1", +] + +[[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 = "hmac" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" +dependencies = [ + "digest 0.11.2", +] + +[[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 = "html-escape" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476" +dependencies = [ + "utf8-width", +] + +[[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-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 = "humantime" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" + +[[package]] +name = "hybrid-array" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" +dependencies = [ + "typenum", +] + +[[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", +] + +[[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 = "imap-types" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a799ec6e315b75b5e5d72b0b1403f8c05c625b98b860bbdf19a5a4e189ae061" +dependencies = [ + "base64 0.21.7", + "chrono", + "thiserror 1.0.69", +] + +[[package]] +name = "impl-more" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" + +[[package]] +name = "include-flate" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e233413926ef735f7d87024466cfda5a4b87467730846bd82ea7d504121347" +dependencies = [ + "include-flate-codegen", + "include-flate-compress", +] + +[[package]] +name = "include-flate-codegen" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e7148f24ef8922cc0e5574ebb908729ccdd3a110c440a45165733fedadd9969" +dependencies = [ + "include-flate-compress", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "include-flate-compress" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74783a9ed407e844e99d5e7a57bd650acbfa124cf6e97ffd790ba59d8ab8e7ff" +dependencies = [ + "libflate", + "zstd 0.13.3", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.0", + "serde", + "serde_core", +] + +[[package]] +name = "inherent" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c727f80bfa4a6c6e2508d2f05b6f4bfce242030bd88ed15ae5331c5b5d30fba7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + +[[package]] +name = "io-enum" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7de9008599afe8527a8c9d70423437363b321649161e98473f433de802d76107" +dependencies = [ + "derive_utils", +] + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +dependencies = [ + "schemars", + "serde", +] + +[[package]] +name = "is_debug" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fe266d2e243c931d8190177f20bf7f24eed45e96f39e87dc49a27b32d12d407" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "jieba-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348294e44ee7e3c42685da656490f8febc7359632544019621588902216da95c" +dependencies = [ + "phf_codegen", +] + +[[package]] +name = "jieba-rs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "766bd7012aa5ba49411ebdf4e93bddd59b182d2918e085d58dec5bb9b54b7105" +dependencies = [ + "cedarwood", + "include-flate", + "jieba-macros", + "phf", + "regex", + "rustc-hash", +] + +[[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 = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + +[[package]] +name = "keyed_priority_queue" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee7893dab2e44ae5f9d0173f26ff4aa327c10b01b06a72b52dd9405b628640d" +dependencies = [ + "indexmap", +] + +[[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 = "lexical-core" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56" +dependencies = [ + "lexical-parse-integer", + "lexical-util", +] + +[[package]] +name = "lexical-parse-integer" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34" +dependencies = [ + "lexical-util", +] + +[[package]] +name = "lexical-util" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17" + +[[package]] +name = "lexical-write-float" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c438c87c013188d415fbabbb1dceb44249ab81664efbd31b14ae55dabb6361" +dependencies = [ + "lexical-util", + "lexical-write-integer", +] + +[[package]] +name = "lexical-write-integer" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "409851a618475d2d5796377cad353802345cba92c867d9fbcde9cf4eac4e14df" +dependencies = [ + "lexical-util", +] + +[[package]] +name = "libc" +version = "0.2.185" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f" + +[[package]] +name = "libflate" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd96e993e5f3368b0cb8497dae6c860c22af8ff18388c61c6c0b86c58d86b5df" +dependencies = [ + "adler32", + "crc32fast", + "dary_heap", + "libflate_lz77", + "no_std_io2", +] + +[[package]] +name = "libflate_lz77" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff7a10e427698aef6eef269482776debfef63384d30f13aad39a1a95e0e098fd" +dependencies = [ + "hashbrown 0.16.1", + "no_std_io2", + "rle-decode-fast", +] + +[[package]] +name = "libgit2-sys" +version = "0.18.3+1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9b3acc4b91781bb0b3386669d325163746af5f6e4f73e6d2d630e09a35f3487" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[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.11.1", + "libc", + "plain", + "redox_syscall 0.7.4", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc3a226e576f50782b3305c5ccf458698f92798987f551c6a02efe8276721e22" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "link-section" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52437d47b0358721ec869cc7374b2a21f7b2237af9b439c0391341a1fbfbf1b" + +[[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-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" +dependencies = [ + "serde_core", +] + +[[package]] +name = "log-mdc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a94d21414c1f4a51209ad204c1776a3d0765002c76c6abcb602a6f09f1e881c7" + +[[package]] +name = "log4rs" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e947bb896e702c711fccc2bf02ab2abb6072910693818d1d6b07ee2b9dfd86c" +dependencies = [ + "anyhow", + "arc-swap", + "chrono", + "derive_more 2.1.1", + "flate2", + "fnv", + "humantime", + "libc", + "log", + "log-mdc", + "mock_instant", + "parking_lot", + "rand 0.9.4", + "serde", + "serde-value", + "serde_json", + "serde_yaml", + "thiserror 2.0.18", + "thread-id", + "typemap-ors", + "unicode-segmentation", + "winapi", +] + +[[package]] +name = "lru" +version = "0.16.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39" +dependencies = [ + "hashbrown 0.16.1", +] + +[[package]] +name = "mac_address" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" +dependencies = [ + "nix 0.29.0", + "serde", + "winapi", +] + +[[package]] +name = "mailchecker" +version = "6.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e32897aec7dd28fa9a39f02a0a08e434f50e2761214e40cec745eb7c411cdb48" +dependencies = [ + "fast_chemail", + "once_cell", +] + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "md-5" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" +dependencies = [ + "cfg-if", + "digest 0.11.2", +] + +[[package]] +name = "md5" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[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 = "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 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.61.2", +] + +[[package]] +name = "mock_instant" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce6dd36094cac388f119d2e9dc82dc730ef91c32a6222170d630e5414b956e6" + +[[package]] +name = "mockall" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58d964098a5f9c6b63d0798e5372fd04708193510a7af313c22e9f29b7b620b" +dependencies = [ + "cfg-if", + "downcast", + "fragile", + "mockall_derive", + "predicates", + "predicates-tree", +] + +[[package]] +name = "mockall_derive" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca41ce716dda6a9be188b385aa78ee5260fc25cd3802cb2a8afdc6afbe6b6dbf" +dependencies = [ + "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "mysql" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a732193888328fc060ab901c0ed1355521267a51ffbfd9a0b3786434c6b8e7f" +dependencies = [ + "bufstream", + "bytes", + "crossbeam-queue", + "crossbeam-utils", + "flate2", + "io-enum", + "libc", + "lru", + "mysql_common 0.37.1", + "named_pipe", + "pem", + "percent-encoding", + "socket2 0.6.3", + "twox-hash", + "url", +] + +[[package]] +name = "mysql-common-derive" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66f62cad7623a9cb6f8f64037f0c4f69c8db8e82914334a83c9788201c2c1bfa" +dependencies = [ + "darling", + "heck 0.5.0", + "num-bigint", + "proc-macro-crate", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.117", + "termcolor", + "thiserror 2.0.18", +] + +[[package]] +name = "mysql_async" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1d9585dc9058886ff3a1f48a23024dd1d054264dee7c5ae0e4bd640c953bee5" +dependencies = [ + "bytes", + "crossbeam-queue", + "flate2", + "futures-core", + "futures-sink", + "futures-util", + "keyed_priority_queue", + "lru", + "mysql_common 0.35.5", + "pem", + "percent-encoding", + "rand 0.9.4", + "serde", + "serde_json", + "socket2 0.5.10", + "thiserror 2.0.18", + "tokio", + "tokio-util", + "twox-hash", + "url", +] + +[[package]] +name = "mysql_common" +version = "0.35.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb9f371618ce723f095c61fbcdc36e8936956d2b62832f9c7648689b338e052" +dependencies = [ + "base64 0.22.1", + "bitflags 2.11.1", + "btoi 0.4.3", + "byteorder", + "bytes", + "crc32fast", + "flate2", + "getrandom 0.3.4", + "mysql-common-derive", + "num-bigint", + "num-traits", + "regex", + "saturating", + "serde", + "serde_json", + "sha1", + "sha2 0.10.9", + "thiserror 2.0.18", + "uuid", +] + +[[package]] +name = "mysql_common" +version = "0.37.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bffc2127d4035fa5a614935c663a15a4468e64e798473e0cc21c8df40a607588" +dependencies = [ + "base64 0.22.1", + "bitflags 2.11.1", + "btoi 0.5.0", + "byteorder", + "bytes", + "crc32fast", + "flate2", + "getrandom 0.3.4", + "mysql-common-derive", + "num-bigint", + "num-traits", + "regex", + "saturating", + "serde", + "serde_json", + "sha1", + "sha2 0.10.9", + "thiserror 2.0.18", + "uuid", +] + +[[package]] +name = "named_pipe" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9c443cce91fc3e12f017290db75dde490d685cdaaf508d7159d7cf41f0eb2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.11.1", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +dependencies = [ + "bitflags 2.11.1", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "no_std_io2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b51ed7824b6e07d354605f4abb3d9d300350701299da96642ee084f5ce631550" +dependencies = [ + "memchr", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "ntapi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae" +dependencies = [ + "winapi", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[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", +] + +[[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-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" + +[[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-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.11.1", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.11.1", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-core-image" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-location" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.11.1", + "block2", + "libc", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" +dependencies = [ + "libc", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-system-configuration" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396" +dependencies = [ + "objc2-core-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.11.1", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-location", + "objc2-core-text", + "objc2-foundation", + "objc2-quartz-core", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[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 = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ordered-float" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ordered-multimap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" +dependencies = [ + "dlv-list", + "hashbrown 0.14.5", +] + +[[package]] +name = "orion-error" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef458e2a9e42afdf025deffffa2ecfa2619a8242be4c9e02cdb60b868a6d945f" +dependencies = [ + "derive_more 2.1.1", + "log", + "serde", + "thiserror 2.0.18", +] + +[[package]] +name = "orion-sec" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfcff2ede38d9e802abc3c998cc73a353ea1022702d3892f4ed55b97eb4c1ed2" +dependencies = [ + "chrono", + "contracts", + "derive_more 2.1.1", + "fs_extra", + "getset", + "indexmap", + "log", + "once_cell", + "orion-error", + "orion-variate", + "orion_conf", + "serde", + "serde_derive", + "serde_yaml", + "thiserror 2.0.18", + "unicase", + "url", +] + +[[package]] +name = "orion-variate" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd80ca6e997116f470d139f90437a1c6dc090dfeb78eb9360439ada5c36e0c03" +dependencies = [ + "contracts", + "derive-getters", + "derive_more 2.1.1", + "getset", + "indexmap", + "log", + "orion-error", + "os_info", + "serde", + "serde_derive", + "serde_ini", + "serde_json", + "serde_yaml", + "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", + "winnow 1.0.1", +] + +[[package]] +name = "orion_conf" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61f9daa1383db51b6620614bfb3c462b535fcc7e5ac033826fae2b732e35db35" +dependencies = [ + "derive-getters", + "derive_more 2.1.1", + "log", + "orion-error", + "orion-variate", + "serde", + "serde_derive", + "serde_yaml", + "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", +] + +[[package]] +name = "orion_exp" +version = "1.20.2" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +dependencies = [ + "arcstr", + "chrono", + "derive-getters", + "ipnet", + "smol_str", + "wildmatch", +] + +[[package]] +name = "orion_overload" +version = "1.20.2" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +dependencies = [ + "anyhow", + "derive-getters", + "serde", + "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", +] + +[[package]] +name = "os_info" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4022a17595a00d6a369236fdae483f0de7f0a339960a53118b818238e132224" +dependencies = [ + "android_system_properties", + "log", + "nix 0.30.1", + "objc2", + "objc2-foundation", + "objc2-ui-kit", + "serde", + "windows-sys 0.61.2", +] + +[[package]] +name = "ouroboros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59" +dependencies = [ + "aliasable", + "ouroboros_macro", + "static_assertions", +] + +[[package]] +name = "ouroboros_macro" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.18", + "smallvec", + "windows-link", +] + +[[package]] +name = "parse-display" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287d8d3ebdce117b8539f59411e4ed9ec226e0a4153c7f55495c6070d68e6f72" +dependencies = [ + "parse-display-derive", + "regex", + "regex-syntax", +] + +[[package]] +name = "parse-display-derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc048687be30d79502dea2f623d052f3a074012c6eac41726b7ab17213616b1" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "regex-syntax", + "structmeta", + "syn 2.0.117", +] + +[[package]] +name = "parse-size" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487f2ccd1e17ce8c1bfab3a65c89525af41cfad4c8659021a1e9a2aacd73b89b" + +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", + "hmac 0.12.1", + "password-hash", + "sha2 0.10.9", +] + +[[package]] +name = "pem" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +dependencies = [ + "base64 0.22.1", + "serde_core", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pest" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "pest_meta" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" +dependencies = [ + "pest", + "sha2 0.10.9", +] + +[[package]] +name = "pgvector" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc58e2d255979a31caa7cabfa7aac654af0354220719ab7a68520ae7a91e8c0b" +dependencies = [ + "serde", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_shared", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phone" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b089a5f2407e758aa7a8bf2b1c33e1f4232b3f654640ab478f671577e1dbfc2" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "postgres-protocol" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56201207dac53e2f38e848e31b4b91616a6bb6e0c7205b77718994a7f49e70fc" +dependencies = [ + "base64 0.22.1", + "byteorder", + "bytes", + "fallible-iterator 0.2.0", + "hmac 0.13.0", + "md-5 0.11.0", + "memchr", + "rand 0.10.1", + "sha2 0.11.0", + "stringprep", +] + +[[package]] +name = "postgres-types" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dc729a129e682e8d24170cd30ae1aa01b336b096cbb56df6d534ffec133d186" +dependencies = [ + "bytes", + "chrono", + "fallible-iterator 0.2.0", + "postgres-protocol", + "serde_core", + "serde_json", +] + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "predicates" +version = "3.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" +dependencies = [ + "anstyle", + "predicates-core", +] + +[[package]] +name = "predicates-core" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" + +[[package]] +name = "predicates-tree" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" +dependencies = [ + "predicates-core", + "termtree", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.117", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit 0.25.11+spec-1.1.0", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "version_check", + "yansi", +] + +[[package]] +name = "prometheus" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ca5326d8d0b950a9acd87e6a3f94745394f62e4dae1b1ee22b2bc0c394af43a" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "thiserror 2.0.18", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "r2d2" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93" +dependencies = [ + "log", + "parking_lot", + "scheduled-thread-pool", +] + +[[package]] +name = "r2d2_sqlite" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb14dba8247a6a15b7fdbc7d389e2e6f03ee9f184f87117706d509c092dfe846" +dependencies = [ + "r2d2", + "rusqlite", + "uuid", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + +[[package]] +name = "rand" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +dependencies = [ + "chacha20", + "getrandom 0.4.2", + "rand_core 0.10.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.11.1", +] + +[[package]] +name = "redox_syscall" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" +dependencies = [ + "bitflags 2.11.1", +] + +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-lite" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "result" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194d8e591e405d1eecf28819740abed6d719d1a2db87fc0bcdedee9a26d55560" + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rkyv" +version = "0.7.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rle-decode-fast" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" + +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64 0.21.7", + "bitflags 2.11.1", + "serde", + "serde_derive", +] + +[[package]] +name = "rsa" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +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 = "rusqlite" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" +dependencies = [ + "bitflags 2.11.1", + "fallible-iterator 0.3.0", + "fallible-streaming-iterator", + "hashlink 0.9.1", + "libsqlite3-sys", + "smallvec", +] + +[[package]] +name = "rust-embed" +version = "8.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04113cb9355a377d83f06ef1f0a45b8ab8cd7d8b1288160717d66df5c7988d27" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0902e4c7c8e997159ab384e6d0fc91c221375f6894346ae107f47dd0f3ccaa" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn 2.0.117", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bcdef0be6fe7f6fa333b1073c949729274b05f123a0ad7efcb8efd878e5c3b1" +dependencies = [ + "sha2 0.10.9", + "walkdir", +] + +[[package]] +name = "rust-ini" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a" +dependencies = [ + "cfg-if", + "ordered-multimap", +] + +[[package]] +name = "rust_decimal" +version = "1.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ce901f9a19d251159075a4c37af514c3b8ef99c22e02dd8c19161cf397ee94a" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand 0.8.5", + "rkyv", + "serde", + "serde_json", + "wasm-bindgen", +] + +[[package]] +name = "rustc-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.11.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f9466fb2c14ea04357e91413efb882e2a6d4a406e625449bc0a5d360d53a21" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8279bb85272c9f10811ae6a6c547ff594d6a7f3c6c6b02ee9726d1d0dcfcdd06" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "saturating" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" + +[[package]] +name = "scheduled-thread-pool" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" +dependencies = [ + "parking_lot", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "serde", + "serde_json", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sea-bae" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f694a6ab48f14bc063cfadff30ab551d3c7e46d8f81836c51989d548f44a2a25" +dependencies = [ + "heck 0.4.1", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "sea-orm" +version = "1.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dc312fedd460a47ea563911761d254a84e7b51d8cc73ec92c929e78f33fa957" +dependencies = [ + "async-stream", + "async-trait", + "bigdecimal", + "chrono", + "derive_more 2.1.1", + "futures-util", + "log", + "mac_address", + "ouroboros", + "pgvector", + "rust_decimal", + "sea-orm-macros", + "sea-query", + "sea-query-binder", + "serde", + "serde_json", + "sqlx", + "strum 0.26.3", + "thiserror 2.0.18", + "time", + "tracing", + "url", + "uuid", +] + +[[package]] +name = "sea-orm-cli" +version = "1.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da80ebcdb44571e86f03a2bdcb5532136a87397f366f38bbce64673fc5e6a450" +dependencies = [ + "chrono", + "glob", + "regex", + "sea-schema", + "sqlx", + "tokio", + "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "sea-orm-macros" +version = "1.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b9a3f90e336ec74803e8eb98c61bc98754c1adfba3b4f84d946237b752b1c88" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "sea-bae", + "syn 2.0.117", + "unicode-ident", +] + +[[package]] +name = "sea-orm-migration" +version = "1.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07c577f2959277e936c1d08109acd1e08fc36a95ef29ec028190ba82cad8f96e" +dependencies = [ + "async-trait", + "sea-orm", + "sea-orm-cli", + "sea-schema", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "sea-query" +version = "0.32.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a5d1c518eaf5eda38e5773f902b26ab6d5e9e9e2bb2349ca6c64cf96f80448c" +dependencies = [ + "bigdecimal", + "chrono", + "inherent", + "ordered-float 4.6.0", + "rust_decimal", + "sea-query-derive", + "serde_json", + "time", + "uuid", +] + +[[package]] +name = "sea-query-binder" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0019f47430f7995af63deda77e238c17323359af241233ec768aba1faea7608" +dependencies = [ + "bigdecimal", + "chrono", + "rust_decimal", + "sea-query", + "serde_json", + "sqlx", + "time", + "uuid", +] + +[[package]] +name = "sea-query-derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bae0cbad6ab996955664982739354128c58d16e126114fe88c2a493642502aab" +dependencies = [ + "darling", + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.117", + "thiserror 2.0.18", +] + +[[package]] +name = "sea-schema" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2239ff574c04858ca77485f112afea1a15e53135d3097d0c86509cef1def1338" +dependencies = [ + "futures", + "sea-query", + "sea-query-binder", + "sea-schema-derive", + "sqlx", +] + +[[package]] +name = "sea-schema-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "debdc8729c37fdbf88472f97fd470393089f997a909e535ff67c544d18cfccf0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" +dependencies = [ + "erased-serde", + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float 2.10.1", + "serde", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serde_ini" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb236687e2bb073a7521c021949be944641e671b8505a94069ca37b656c81139" +dependencies = [ + "result", + "serde", + "void", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "indexmap", + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_plain" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.2", +] + +[[package]] +name = "shadow-rs" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c798acfc78a69c7b038adde44084d8df875555b091da42c90ae46257cdcc41a" +dependencies = [ + "const_format", + "git2", + "is_debug", + "time", + "tzdb", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simd-adler32" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "simple-log" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f8030713cfe4aa369ef3c8cbf5e391cc18d7f6fba1f2a68ec959c5504413e51" +dependencies = [ + "log", + "log4rs", + "once_cell", + "serde", + "winnow 0.7.15", +] + +[[package]] +name = "siphasher" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "small_ctor" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88414a5ca1f85d82cc34471e975f0f74f6aa54c40f062efa42c0080e7f763f81" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +dependencies = [ + "serde", +] + +[[package]] +name = "smol_str" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aaa7368fcf4852a4c2dd92df0cace6a71f2091ca0a23391ce7f3a31833f1523" +dependencies = [ + "borsh", + "serde_core", +] + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "sqlx" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" +dependencies = [ + "base64 0.22.1", + "bigdecimal", + "bytes", + "chrono", + "crc", + "crossbeam-queue", + "either", + "event-listener", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.15.5", + "hashlink 0.10.0", + "indexmap", + "log", + "memchr", + "once_cell", + "percent-encoding", + "rust_decimal", + "rustls", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "thiserror 2.0.18", + "time", + "tokio", + "tokio-stream", + "tracing", + "url", + "uuid", + "webpki-roots 0.26.11", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.117", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" +dependencies = [ + "dotenvy", + "either", + "heck 0.5.0", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.9", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.117", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" +dependencies = [ + "atoi", + "base64 0.22.1", + "bigdecimal", + "bitflags 2.11.1", + "byteorder", + "bytes", + "chrono", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac 0.12.1", + "itoa", + "log", + "md-5 0.10.6", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa", + "rust_decimal", + "serde", + "sha1", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.18", + "time", + "tracing", + "uuid", + "whoami 1.6.1", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" +dependencies = [ + "atoi", + "base64 0.22.1", + "bigdecimal", + "bitflags 2.11.1", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-util", + "hex", + "hkdf", + "hmac 0.12.1", + "home", + "itoa", + "log", + "md-5 0.10.6", + "memchr", + "num-bigint", + "once_cell", + "rand 0.8.5", + "rust_decimal", + "serde", + "serde_json", + "sha2 0.10.9", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror 2.0.18", + "time", + "tracing", + "uuid", + "whoami 1.6.1", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" +dependencies = [ + "atoi", + "chrono", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "thiserror 2.0.18", + "time", + "tracing", + "url", + "uuid", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" + +[[package]] +name = "strfmt" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29fdc163db75f7b5ffa3daf0c5a7136fb0d4b2f35523cd1769da05e034159feb" + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "structmeta" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e1575d8d40908d70f6fd05537266b90ae71b15dbbe7a8b7dffa2b759306d329" +dependencies = [ + "proc-macro2", + "quote", + "structmeta-derive", + "syn 2.0.117", +] + +[[package]] +name = "structmeta-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", +] + +[[package]] +name = "strum" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.117", +] + +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "sysinfo" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ab6a2f8bfe508deb3c6406578252e491d299cbbf3bc0529ecc3313aee4a52f" +dependencies = [ + "libc", + "memchr", + "ntapi", + "objc2-core-foundation", + "objc2-io-kit", + "windows", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.2", + "once_cell", + "rustix", + "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 = "termtree" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" + +[[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 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 2.0.117", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "thread-id" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2010d27add3f3240c1fef7959f46c814487b216baee662af53be645ba7831c07" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "time" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" + +[[package]] +name = "time-macros" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a91135f59b1cbf38c91e73cf3386fca9bb77915c45ce2771460c9d92f0f3d776" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.6.3", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-async-drop" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e57fbf1da3f18c8a95469f8973c138b0a99f4ae761885c3646b0c61139b0522" + +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "tokio-postgres" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dd8df5ef180f6364759a6f00f7aadda4fbbac86cdee37480826a6ff9f3574ce" +dependencies = [ + "async-trait", + "byteorder", + "bytes", + "fallible-iterator 0.2.0", + "futures-channel", + "futures-util", + "log", + "parking_lot", + "percent-encoding", + "phf", + "pin-project-lite", + "postgres-protocol", + "postgres-types", + "rand 0.10.1", + "socket2 0.6.3", + "tokio", + "tokio-util", + "whoami 2.1.1", +] + +[[package]] +name = "tokio-stream" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", +] + +[[package]] +name = "toml" +version = "0.9.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +dependencies = [ + "indexmap", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +dependencies = [ + "indexmap", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.1", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", + "toml_write", + "winnow 0.7.15", +] + +[[package]] +name = "toml_edit" +version = "0.25.11+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +dependencies = [ + "indexmap", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.1", +] + +[[package]] +name = "toml_parser" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +dependencies = [ + "winnow 1.0.1", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "toml_writer" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +dependencies = [ + "matchers", + "once_cell", + "regex-automata", + "sharded-slab", + "thread_local", + "tracing", + "tracing-core", +] + +[[package]] +name = "tree-sitter" +version = "0.26.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "887bd495d0582c5e3e0d8ece2233666169fa56a9644d172fc22ad179ab2d0538" +dependencies = [ + "cc", + "regex", + "regex-syntax", + "serde_json", + "streaming-iterator", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-language" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "009994f150cc0cd50ff54917d5bc8bffe8cad10ca10d81c34da2ec421ae61782" + +[[package]] +name = "tree-sitter-wpl" +version = "0.0.1" +source = "git+https://github.com/wp-labs/tree-sitter-wpl.git?branch=main#44689663cd7e5d8a783baa2d405080cc47331cb0" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "twox-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typemap-ors" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a68c24b707f02dd18f1e4ccceb9d49f2058c2fb86384ef9972592904d7a28867" +dependencies = [ + "unsafe-any-ors", +] + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "tz-rs" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fc6c929ffa10fb34f4a3c7e9a73620a83ef2e85e47f9ec3381b8289e6762f42" + +[[package]] +name = "tzdb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d4e985b6dda743ae7fd4140c28105316ffd75bc58258ee6cc12934e3eb7a0c" +dependencies = [ + "iana-time-zone", + "tz-rs", + "tzdb_data", +] + +[[package]] +name = "tzdb_data" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "125a0a63c4bd75c73f61863463cb400db4b1aa5039b203b0ee1d628a7e3dabb2" +dependencies = [ + "tz-rs", +] + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-normalization" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" + +[[package]] +name = "unicode-segmentation" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" + +[[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 = "unsafe-any-ors" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a303d30665362d9680d7d91d78b23f5f899504d4f08b3c4cf08d055d87c0ad" +dependencies = [ + "destructure_traitobject", +] + +[[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.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1292c0d970b54115d14f2492fe0170adf21d68a1de108eebc51c1df4f346a091" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +dependencies = [ + "getrandom 0.4.2", + "js-sys", + "rand 0.10.1", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "v_htmlescape" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e8257fbc510f0a46eb602c10215901938b5c2a7d5e70fc11483b1d3c9b5b18c" + +[[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 = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.7+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasite" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fe902b4a6b8028a753d5424909b764ccf79b7a209eac9bf97e59cda9f71a42" +dependencies = [ + "wasi 0.14.7+wasi-0.2.4", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "serde", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.117", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.1", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + +[[package]] +name = "web-sys" +version = "0.3.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[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.6", +] + +[[package]] +name = "webpki-roots" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "whoami" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" +dependencies = [ + "libredox", + "wasite 0.1.0", +] + +[[package]] +name = "whoami" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6a5b12f9df4f978d2cfdb1bd3bac52433f44393342d7ee9c25f5a1c14c0f45d" +dependencies = [ + "libc", + "libredox", + "objc2-system-configuration", + "wasite 1.0.2", + "web-sys", +] + +[[package]] +name = "wildmatch" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29333c3ea1ba8b17211763463ff24ee84e41c78224c16b001cd907e663a38c68" +dependencies = [ + "serde", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core", + "windows-link", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.1", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + +[[package]] +name = "wp-arrow" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f91eca86bceecc5704ed916f6e2d42e46070688908564449392d325c409c244" +dependencies = [ + "arrow", + "chrono", + "wp-model-core", +] + +[[package]] +name = "wp-cli-core" +version = "1.20.2" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +dependencies = [ + "anyhow", + "chrono", + "comfy-table", + "glob", + "orion-error", + "orion-variate", + "orion_conf", + "serde", + "serde_json", + "toml 1.1.2+spec-1.1.0", + "walkdir", + "wp-config", + "wp-knowledge", +] + +[[package]] +name = "wp-condition" +version = "1.20.2" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +dependencies = [ + "orion_exp", + "winnow 1.0.1", + "wp-primitives", +] + +[[package]] +name = "wp-conf-base" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b3728590c8546e8212f659145b07f064bde39ca74ee240cbf1ff69ab11f8fd" +dependencies = [ + "anyhow", + "log", + "orion-variate", + "orion_conf", + "serde", + "wp-connector-api", + "wp-model-core", +] + +[[package]] +name = "wp-config" +version = "1.20.2" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +dependencies = [ + "anyhow", + "async-trait", + "chrono", + "derive-getters", + "derive_more 2.1.1", + "educe", + "getset", + "glob", + "log", + "once_cell", + "orion-error", + "orion-variate", + "orion_conf", + "orion_exp", + "orion_overload", + "serde", + "serde_derive", + "serde_json", + "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", + "wildmatch", + "winnow 1.0.1", + "wp-condition", + "wp-conf-base", + "wp-connector-api", + "wp-data-utils", + "wp-error", + "wp-knowledge", + "wp-lang", + "wp-log", + "wp-model-core", + "wp-primitives", + "wp-specs", +] + +[[package]] +name = "wp-connector-api" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4392f7c4de3e59c9e385d2e83f262713dcc34547a66654369ff3468560d357e9" +dependencies = [ + "anyhow", + "async-broadcast", + "async-trait", + "derive_more 2.1.1", + "once_cell", + "orion-error", + "serde", + "serde_derive", + "serde_json", + "smallvec", + "smol_str", + "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", + "wp-model-core", +] + +[[package]] +name = "wp-core-connectors" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90b77ee4f1645e451a1a09fb482fe5177f9bba5df6ad48a77b4d20fa2e8c60b4" +dependencies = [ + "anyhow", + "arrow", + "async-trait", + "base64 0.22.1", + "bytes", + "chrono", + "glob", + "hex", + "hostname", + "libc", + "log", + "memchr", + "once_cell", + "orion-error", + "orion_conf", + "serde_json", + "socket2 0.6.3", + "thiserror 2.0.18", + "tokio", + "toml 1.1.2+spec-1.1.0", + "wp-arrow", + "wp-conf-base", + "wp-connector-api", + "wp-data-fmt", + "wp-log", + "wp-model-core", +] + +[[package]] +name = "wp-ctrl-api" +version = "0.1.0" +source = "git+https://github.com/wp-labs/wp-advanced-api?tag=v0.1.0#9ed1d5c9f7c5fde300e6d9b6306bf0607095181b" +dependencies = [ + "serde", +] + +[[package]] +name = "wp-data-fmt" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa95e159e9214f5cc4d7895996515d48a0987e163e9387cb191bc3489bd2aba3" +dependencies = [ + "chrono", + "serde", + "serde_json", + "thiserror 2.0.18", + "wp-model-core", +] + +[[package]] +name = "wp-data-utils" +version = "1.20.2" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +dependencies = [ + "arcstr", + "chrono", + "derive_builder", + "lru", + "orion-error", + "orion_exp", + "serde", + "serde_derive", + "serde_json", + "smol_str", + "wp-model-core", +] + +[[package]] +name = "wp-editor" +version = "1.15.4" +dependencies = [ + "actix-files", + "actix-multipart", + "actix-web", + "actix-web-prom", + "base64 0.22.1", + "cargo_metadata", + "chrono", + "clap", + "config", + "futures-util", + "mime_guess", + "orion-error", + "regex", + "rust-embed", + "sea-orm", + "semver", + "serde", + "serde_json", + "simple-log", + "small_ctor", + "strum 0.26.3", + "tempfile", + "thiserror 2.0.18", + "tokio", + "tokio-util", + "toml 0.9.12+spec-1.1.0", + "tracing", + "tree-sitter", + "tree-sitter-wpl", + "wp-conf-base", + "wp-config", + "wp-connector-api", + "wp-data-fmt", + "wp-data-utils", + "wp-editor-migrations", + "wp-engine", + "wp-error", + "wp-knowledge", + "wp-lang", + "wp-log", + "wp-model-core", + "wp-oml", + "wp-proj", + "wp-specs", + "zip", + "zip-extract", +] + +[[package]] +name = "wp-editor-migrations" +version = "0.1.0" +dependencies = [ + "async-trait", + "sea-orm", + "sea-orm-migration", + "serde", +] + +[[package]] +name = "wp-engine" +version = "1.20.2" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +dependencies = [ + "anyhow", + "async-broadcast", + "async-signal", + "async-trait", + "base64 0.22.1", + "bytes", + "chrono", + "clap", + "comfy-table", + "contracts", + "ctor", + "derive-getters", + "derive_builder", + "derive_more 2.1.1", + "educe", + "enum_dispatch", + "futures-lite", + "futures-util", + "getset", + "glob", + "hex", + "ipnet", + "lazy_static", + "libc", + "log", + "lru", + "memchr", + "mockall", + "once_cell", + "orion-error", + "orion-sec", + "orion-variate", + "orion_conf", + "orion_exp", + "orion_overload", + "rand 0.10.1", + "regex", + "serde", + "serde_derive", + "serde_json", + "shadow-rs", + "smol_str", + "socket2 0.6.3", + "strfmt", + "sysinfo", + "thiserror 2.0.18", + "time", + "tokio", + "tokio-async-drop", + "toml 1.1.2+spec-1.1.0", + "uuid", + "walkdir", + "wildmatch", + "winnow 1.0.1", + "wp-arrow", + "wp-cli-core", + "wp-conf-base", + "wp-config", + "wp-connector-api", + "wp-core-connectors", + "wp-ctrl-api", + "wp-data-fmt", + "wp-data-utils", + "wp-enrich-api", + "wp-error", + "wp-knowledge", + "wp-lang", + "wp-log", + "wp-model-core", + "wp-oml", + "wp-parse-api", + "wp-primitives", + "wp-specs", + "wp-stats", +] + +[[package]] +name = "wp-enrich-api" +version = "0.1.0" +source = "git+https://github.com/wp-labs/wp-advanced-api?tag=v0.1.0#9ed1d5c9f7c5fde300e6d9b6306bf0607095181b" +dependencies = [ + "wp-model-core", +] + +[[package]] +name = "wp-error" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80f1cc521f4ea17d26679d355d5da35278559dc4a1358575f7a0d21639284980" +dependencies = [ + "derive_more 2.1.1", + "orion-error", + "orion-sec", + "orion_conf", + "serde", + "serde_json", + "thiserror 2.0.18", + "unicode-segmentation", + "wp-connector-api", + "wp-log", +] + +[[package]] +name = "wp-knowledge" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4377c50ff485c70740ce1a93d95c041f31fc8ebd56e576f2209c2dbd584afab1" +dependencies = [ + "anyhow", + "async-trait", + "chrono", + "csv", + "enum_dispatch", + "lazy_static", + "log", + "lru", + "mysql", + "mysql_async", + "orion-error", + "orion-variate", + "orion_conf", + "r2d2", + "r2d2_sqlite", + "rusqlite", + "serde", + "serde_json", + "tokio", + "tokio-postgres", + "wp-error", + "wp-log", + "wp-model-core", +] + +[[package]] +name = "wp-lang" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3f3705f22626950b7d0aaf7d3206b9a9363eea98ce45146788e0376ea427aea" +dependencies = [ + "ahash 0.8.12", + "anyhow", + "base64 0.22.1", + "bytes", + "chrono", + "contracts", + "derive-getters", + "derive_more 2.1.1", + "glob", + "hex", + "ipnet", + "log", + "mailchecker", + "once_cell", + "orion-error", + "phone", + "rand 0.10.1", + "regex", + "serde", + "serde_json", + "smol_str", + "strfmt", + "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", + "unicode-segmentation", + "url", + "wildmatch", + "winnow 1.0.1", + "wp-connector-api", + "wp-data-fmt", + "wp-error", + "wp-log", + "wp-model-core", + "wp-parse-api", + "wp-primitives", + "wp-specs", +] + +[[package]] +name = "wp-log" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e867a8c80d4b365bf772e6f693bc5de71ce976a493d9bc5bdccb64108761586c" +dependencies = [ + "anyhow", + "chrono", + "derive_more 2.1.1", + "getset", + "log", + "log4rs", + "orion-error", + "orion-variate", + "orion_conf", + "serde", + "serde_json", + "strum_macros 0.27.2", + "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", + "unicode-segmentation", +] + +[[package]] +name = "wp-model-core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c0c153df58a2c0e1cf0ec9023608ca30dcf932c5e0a262b365f7e00d643ade" +dependencies = [ + "bytes", + "chrono", + "ipnet", + "serde", + "serde_derive", + "serde_json", + "smallvec", + "smol_str", + "thiserror 2.0.18", + "wildmatch", +] + +[[package]] +name = "wp-oml" +version = "1.20.2" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +dependencies = [ + "anyhow", + "arcstr", + "async-trait", + "base64 0.22.1", + "chrono", + "contracts", + "derive-getters", + "derive_builder", + "encoding_rs", + "enum_dispatch", + "escape8259", + "html-escape", + "imap-types", + "ipnet", + "jieba-rs", + "lazy_static", + "log", + "md5", + "once_cell", + "orion-error", + "orion_conf", + "orion_exp", + "parse-display", + "parse-display-derive", + "regex", + "serde", + "serde_derive", + "serde_json", + "smallvec", + "strfmt", + "strum 0.28.0", + "strum_macros 0.27.2", + "thiserror 2.0.18", + "tokio", + "toml 1.1.2+spec-1.1.0", + "url", + "wildmatch", + "winnow 1.0.1", + "wp-condition", + "wp-data-fmt", + "wp-data-utils", + "wp-error", + "wp-knowledge", + "wp-lang", + "wp-log", + "wp-model-core", + "wp-primitives", + "wp-specs", +] + +[[package]] +name = "wp-parse-api" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9108cdcb3f90e5b4f986ec7a1403f85e967916a21e660089b12690e5ecf72c32" +dependencies = [ + "bytes", + "derive_more 2.1.1", + "orion-error", + "serde", + "serde_derive", + "thiserror 2.0.18", + "wp-model-core", +] + +[[package]] +name = "wp-primitives" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1baa39359b6c063ff60bf4d3c866636b890e0077aedc6fd14963b3bd7673fab9" +dependencies = [ + "winnow 1.0.1", +] + +[[package]] +name = "wp-proj" +version = "1.20.2" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +dependencies = [ + "anyhow", + "comfy-table", + "glob", + "orion-error", + "orion-variate", + "orion_conf", + "serde", + "serde_json", + "toml 1.1.2+spec-1.1.0", + "wildmatch", + "wp-cli-core", + "wp-config", + "wp-connector-api", + "wp-core-connectors", + "wp-data-utils", + "wp-engine", + "wp-error", + "wp-knowledge", + "wp-lang", + "wp-log", + "wp-oml", +] + +[[package]] +name = "wp-specs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efaa11920f7fd004e99ecaedab1d87261dadfb24129bccb4385885d0ff4c209b" +dependencies = [ + "serde", + "wildmatch", + "wp-connector-api", +] + +[[package]] +name = "wp-stats" +version = "1.20.2" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +dependencies = [ + "anyhow", + "chrono", + "contracts", + "derive-getters", + "derive_builder", + "ipnet", + "log", + "lru", + "mockall", + "orion_overload", + "serde", + "serde_derive", + "serde_json", + "smallvec", + "smol_str", + "strum_macros 0.27.2", + "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", + "wildmatch", + "wp-log", + "wp-model-core", +] + +[[package]] +name = "writeable" +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 = "yaml-rust2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" +dependencies = [ + "arraydeque", + "encoding_rs", + "hashlink 0.8.4", +] + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "zerofrom" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes", + "byteorder", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac 0.12.1", + "pbkdf2", + "sha1", + "time", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "zip-extract" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e109e5a291403b4c1e514d39f8a22d3f98d257e691a52bb1f16051bb1ffed63e" +dependencies = [ + "log", + "thiserror 1.0.69", + "zip", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe 5.0.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe 7.2.4", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml index 81acf0a..e869439 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -63,11 +63,11 @@ wp-editor-migrations = { path = "crates/migrations" } wp-lang = "0.1" wp_knowledge = { package = "wp-knowledge", version = "0.11"} -wp-engine = { git = "https://github.com/wp-labs/wp-motor", tag = "v1.19.16" } -wp-config = { package = "wp-config", git = "https://github.com/wp-labs/wp-motor", tag = "v1.19.16" } -wp_oml = { package = "wp-oml", git = "https://github.com/wp-labs/wp-motor", tag = "v1.19.16" } -wp_data_utils = { package = "wp-data-utils", git = "https://github.com/wp-labs/wp-motor", tag = "v1.19.16" } -wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/wp-motor", tag = "v1.19.16" } +wp-engine = { git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.2" } +wp-config = { package = "wp-config", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.2" } +wp_oml = { package = "wp-oml", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.2" } +wp_data_utils = { package = "wp-data-utils", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.2" } +wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.2" } #wp-engine = { path = "../wp-motor" } #wp-config = { path = "../wp-motor/crates/wp-config" } diff --git a/web/dist/tree-sitter/queries/wpl-highlights.scm b/web/dist/tree-sitter/queries/wpl-highlights.scm index 3e15b6a..5b4a144 100644 --- a/web/dist/tree-sitter/queries/wpl-highlights.scm +++ b/web/dist/tree-sitter/queries/wpl-highlights.scm @@ -27,6 +27,7 @@ ; ── String literals ── (quoted_string) @string (raw_string) @string +(single_quoted_raw) @string ; ── Number literals ── (number) @number @@ -46,25 +47,25 @@ (rule_decl name: (path_name) @function.definition) ; ── Type names ── -(type_name (identifier) @type) -(ns_type namespace: (identifier) @type name: (identifier) @type) +(meta_token) @type +(subfield_meta) @type ; ── Variable binding ── (field binding: (var_name) @variable) (subfield binding: (var_name) @variable) ; ── Subfield @ref ── -(subfield ref: (ref_path) @variable.special) +(subfield ref: (ref_path_or_quoted) @variable.special) ; ── Preprocessor ── -(preproc_path ns: (identifier) @function.builtin name: (identifier) @function.builtin) +(preproc_step) @function.builtin +(plg_pipe_step name: (key) @function) ; ── Function calls ── -(fun_call function: (identifier) @function) -(fun_call function: "not" @function) +(fun_call function: (function_name) @function) ; ── Annotation tag key ── -(tag_kv key: (identifier) @property) +(tag_kv key: (key) @property) ; ── Plain identifiers (fallback) ── (identifier) @variable diff --git a/web/dist/tree-sitter/tree-sitter-wpl.wasm b/web/dist/tree-sitter/tree-sitter-wpl.wasm index b04ddc85ae85314f763791638c2d00d822958f47..8e558e44c69923983694798abd8757bb6c68d569 100755 GIT binary patch literal 39440 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 literal 25358 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 From 4a81040fe80307f301153c827c2b11b328210dd1 Mon Sep 17 00:00:00 2001 From: tangxiangyan <1813932938@qq.com> Date: Thu, 16 Apr 2026 18:10:31 +0800 Subject: [PATCH 02/37] ci v1.17.0-alpha --- CHANGELOG.en.md | 191 +++++++++++++++++++++++++++++++ CHANGELOG.md | 191 +++++++++++++++++++++++++++++++ Cargo.lock | 52 ++++----- Cargo.toml | 12 +- dist/install-manifest-alpha.json | 8 +- version.txt | 2 +- 6 files changed, 419 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.en.md b/CHANGELOG.en.md index 0383667..0c4b077 100644 --- a/CHANGELOG.en.md +++ b/CHANGELOG.en.md @@ -5,6 +5,197 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.17.0-alpha] - 2026-04-16 + +### Changed + +- Upgrade wp-motor dependency to v1.20.3 +- Synchronize wp-motor-related dependency versions and source references in `Cargo.lock` +- Bump the locked `wp-lang` version to `0.1.10` + +## [1.16.0-beta] - 2026-04-16 + +### Added + +- Add a Prometheus metrics endpoint at `/metrics` + +### Changed + +- Merge changes from the `alpha` branch into `beta` +- Upgrade wp-motor dependency to v1.19.16 +- Restore `Cargo.lock` and synchronize the dependency lock state for the beta release +- Update beta release manifest `dist/install-manifest-beta.json`, changing the release version to `v1.16.0-beta` +- Update WPL Tree-sitter highlight queries and `tree-sitter-wpl.wasm` assets to support the new syntax nodes +- Convert the OML transformation and example loading pipeline to async implementations, covering `debug_transform`, `debug_examples`, `oml_examples`, and `convert_record` + +### Fixed + +- Adapt to upstream API changes for `OMLCodeError`, `WparseReason`, `FieldQueryCache`, and related interfaces +- Fix recursive OML example loading and error propagation issues +- Fix `/metrics` log filtering to avoid polluting normal request logs + +## [1.15.4-alpha] - 2026-04-08 + +### Changed + +- Unified version identifiers to `1.15.4` / `v1.15.4-alpha` (synchronized in `Cargo.toml`, `version.txt`, and `dist/install-manifest-alpha.json`) +- Restore `web/package-lock.json` and adjust ignore rules so frontend dependency lock results are shipped with the release + +## [1.15.3-alpha] - 2026-04-08 + +### Added + +- Add a Prometheus metrics endpoint at `/metrics` + +### Changed + +- Assign stable metric names for Actix HTTP metrics +- Update access log filtering rules to exclude `/metrics` +- Adjust lockfile commit strategy by removing `Cargo.lock` and `web/package-lock.json` + +## [1.15.2-alpha] - 2026-04-07 + +### Changed + +- Unified version identifiers to `1.15.2` / `v1.15.2-alpha` (synchronized in `Cargo.toml`, `Cargo.lock`, `version.txt`, and `dist/install-manifest-alpha.json`) +- Refactor the README and update release process documentation, consolidating into a single bilingual document +- Optimize frontend chunk splitting and dev-time dependency pre-bundling to reduce fragmented requests during refresh +- Add tiered caching rules for static assets, distinguishing the entry page, hashed assets, and other static files + +### Fixed + +- Make unmatched `/api/*` routes return JSON 404 responses instead of falling back to the frontend page + +### Performance + +- Enable gzip/deflate compression by default to reduce frontend asset transfer size + +### Removed + +- Remove the standalone `README.en.md` + +## [1.15.1-alpha] - 2026-04-03 + +### Changed + +- Unified version identifiers to `1.15.1` / `v1.15.1-alpha` (synchronized in `Cargo.toml`, `Cargo.lock`, `version.txt`, and `dist/install-manifest-alpha.json`) + +### Fixed + +- Update `Cargo.lock` to synchronize the dependency lock state + +## [1.15.0-alpha] - 2026-04-03 + +### Changed + +- Unified version identifiers to `1.15.0` / `v1.15.0-alpha` (synchronized in `Cargo.toml`, `Cargo.lock`, `version.txt`, and `dist/install-manifest-alpha.json`) +- Upgrade wp-motor dependency to v1.19.16 +- Switch `wp-lang` and `wp-knowledge` to standalone versioned dependencies to adapt to upstream package splitting +- Convert the OML transformation and example loading pipeline to async implementations, covering `debug_transform`, `debug_examples`, `oml_examples`, and `convert_record` + +### Fixed + +- Fix error propagation and `Future` handling in recursive OML example loading +- Adapt to import path changes for `OMLCodeError`, `WparseReason`, and related types +- Convert related integration tests and example tests to async and add the missing `await` + +## [1.14.2] - 2026-04-07 + +### Changed + +- Version update to 1.14.2 +- Refactor the README and update release process documentation, consolidating into a single bilingual document +- Optimize frontend chunk splitting and dev-time dependency pre-bundling to reduce fragmented requests during refresh +- Add tiered caching rules for static assets, distinguishing the entry page, hashed assets, and other static files + +### Fixed + +- Make unmatched `/api/*` routes return JSON 404 responses instead of falling back to the frontend page + +### Performance + +- Enable gzip/deflate compression by default to reduce frontend asset transfer size + +### Removed + +- Remove the standalone `README.en.md` + +## [1.14.2-beta] - 2026-04-07 + +### Changed + +- Unified version identifiers to `1.14.2` / `v1.14.2-beta` (synchronized in `Cargo.toml`, `Cargo.lock`, `version.txt`, and `dist/install-manifest-beta.json`) +- Refactor the README and update release process documentation, consolidating into a single bilingual document +- Optimize frontend chunk splitting and dev-time dependency pre-bundling to reduce fragmented requests during refresh +- Add tiered caching rules for static assets, distinguishing the entry page, hashed assets, and other static files + +### Fixed + +- Make unmatched `/api/*` routes return JSON 404 responses instead of falling back to the frontend page + +### Performance + +- Enable gzip/deflate compression by default to reduce frontend asset transfer size + +### Removed + +- Remove the standalone `README.en.md` + +## [1.14.1] - 2026-04-03 + +### Changed + +- Version update to 1.14.1 +- Fine-tune copy in `README.md` and `README.en.md` +- Update the stable release manifest `dist/install-manifest.json` + +### Fixed + +- Update `Cargo.lock` to synchronize the dependency lock state + +## [1.14.1-beta] - 2026-04-03 + +### Changed + +- Unified version identifiers to `1.14.1` / `v1.14.1-beta` (synchronized in `Cargo.toml`, `Cargo.lock`, `version.txt`, and `dist/install-manifest-beta.json`) + +### Fixed + +- Update `Cargo.lock` to synchronize the dependency lock state + +## [1.14.0] - 2026-04-03 + +### Added + +- Add `CONTRIBUTING.md` with contribution guidelines and collaboration instructions + +### Changed + +- Version update to 1.14.0 +- Change the license from Elastic License 2.0 to Apache 2.0 +- Refactor the README, add bilingual documentation, and align Chinese and English content +- Update the stable release manifest `dist/install-manifest.json` + +### Removed + +- Remove the Test Coverage badge and the usage guide and API documentation sections from the README + +## [1.14.0-beta] - 2026-04-01 + +### Added + +- Add one-click copy/paste support to the code editor + +### Changed + +- Unified version identifiers to `1.14.0` / `v1.14.0-beta` (synchronized in `Cargo.toml`, `Cargo.lock`, `version.txt`, and `dist/install-manifest-beta.json`) +- Upgrade wp-motor dependency to v1.18.3 + +### Fixed + +- Fix abnormal `Tab` key behavior in the editor +- Add `Shift+Tab` support for reverse indentation + ## [1.13.0-alpha] - 2026-03-12 ### Changed diff --git a/CHANGELOG.md b/CHANGELOG.md index 93c39e3..65d7dd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,197 @@ 本文件记录所有重要变更,格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/), 版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。 +## [1.17.0-alpha] - 2026-04-16 + +### Changed + +- 升级 wp-motor 依赖至 v1.20.3 +- 同步 `Cargo.lock` 中 wp-motor 相关依赖的版本与源码引用 +- 同步 `wp-lang` 锁定版本至 `0.1.10` + +## [1.16.0-beta] - 2026-04-16 + +### Added + +- 新增 `/metrics` Prometheus 指标暴露端点 + +### Changed + +- 合并 `alpha` 分支变更到 `beta` +- 升级 wp-motor 依赖至 v1.19.16 +- 恢复 `Cargo.lock` 并同步 beta 版本的依赖锁定结果 +- 更新 beta 发布清单 `dist/install-manifest-beta.json`,发布版本调整为 `v1.16.0-beta` +- 更新 WPL Tree-sitter 高亮查询与 `tree-sitter-wpl.wasm` 资源,适配新的语法节点 +- 将 OML 转换与示例加载链路调整为异步实现,覆盖 `debug_transform`、`debug_examples`、`oml_examples` 与 `convert_record` + +### Fixed + +- 适配 `OMLCodeError`、`WparseReason`、`FieldQueryCache` 等上游 API 变更 +- 修复 OML 示例目录递归加载与错误透传问题 +- 修复 `/metrics` 请求日志过滤,避免干扰常规接口日志 + +## [1.15.4-alpha] - 2026-04-08 + +### Changed + +- 版本号统一为 `1.15.4` / `v1.15.4-alpha`(同步更新 `Cargo.toml`、`version.txt`、`dist/install-manifest-alpha.json`) +- 恢复 `web/package-lock.json` 并调整忽略规则,确保前端依赖锁定结果随版本发布 + +## [1.15.3-alpha] - 2026-04-08 + +### Added + +- 新增 `/metrics` Prometheus 指标暴露端点 + +### Changed + +- 为 Actix HTTP 指标设置稳定的指标名称 +- 调整访问日志过滤规则,排除 `/metrics` +- 调整锁文件提交策略,移除 `Cargo.lock` 与 `web/package-lock.json` + +## [1.15.2-alpha] - 2026-04-07 + +### Changed + +- 版本号统一为 `1.15.2` / `v1.15.2-alpha`(同步更新 `Cargo.toml`、`Cargo.lock`、`version.txt`、`dist/install-manifest-alpha.json`) +- 重构 README 并更新发布流程说明,收敛为单文件双语文档 +- 优化前端构建拆包与开发态依赖预构建策略,减少刷新时碎片化请求 +- 为静态资源补充分级缓存策略,区分入口页、哈希资源与其他静态文件 + +### Fixed + +- `/api/*` 未匹配路由改为返回 JSON 404,避免回退到前端页面 + +### Performance + +- 自动启用 gzip/deflate 压缩,降低前端资源传输体积 + +### Removed + +- 移除独立 `README.en.md` + +## [1.15.1-alpha] - 2026-04-03 + +### Changed + +- 版本号统一为 `1.15.1` / `v1.15.1-alpha`(同步更新 `Cargo.toml`、`Cargo.lock`、`version.txt`、`dist/install-manifest-alpha.json`) + +### Fixed + +- 更新 `Cargo.lock`,同步依赖锁定结果 + +## [1.15.0-alpha] - 2026-04-03 + +### Changed + +- 版本号统一为 `1.15.0` / `v1.15.0-alpha`(同步更新 `Cargo.toml`、`Cargo.lock`、`version.txt`、`dist/install-manifest-alpha.json`) +- 升级 wp-motor 依赖至 v1.19.16 +- `wp-lang`、`wp-knowledge` 改为独立版本依赖,适配上游包拆分 +- 将 OML 转换与示例加载链路调整为异步实现,覆盖 `debug_transform`、`debug_examples`、`oml_examples` 与 `convert_record` + +### Fixed + +- 修复 OML 示例目录递归加载时的错误透传与 `Future` 处理问题 +- 适配 `OMLCodeError`、`WparseReason` 等导入路径变化 +- 将相关集成测试与示例测试切换为异步用例并补齐 `await` + +## [1.14.2] - 2026-04-07 + +### Changed + +- 版本更新至 1.14.2 +- 重构 README 并更新发布流程说明,收敛为单文件双语文档 +- 优化前端构建拆包与开发态依赖预构建策略,减少刷新时碎片化请求 +- 为静态资源补充分级缓存策略,区分入口页、哈希资源与其他静态文件 + +### Fixed + +- `/api/*` 未匹配路由改为返回 JSON 404,避免回退到前端页面 + +### Performance + +- 自动启用 gzip/deflate 压缩,降低前端资源传输体积 + +### Removed + +- 移除独立 `README.en.md` + +## [1.14.2-beta] - 2026-04-07 + +### Changed + +- 版本号统一为 `1.14.2` / `v1.14.2-beta`(同步更新 `Cargo.toml`、`Cargo.lock`、`version.txt`、`dist/install-manifest-beta.json`) +- 重构 README 并更新发布流程说明,收敛为单文件双语文档 +- 优化前端构建拆包与开发态依赖预构建策略,减少刷新时碎片化请求 +- 为静态资源补充分级缓存策略,区分入口页、哈希资源与其他静态文件 + +### Fixed + +- `/api/*` 未匹配路由改为返回 JSON 404,避免回退到前端页面 + +### Performance + +- 自动启用 gzip/deflate 压缩,降低前端资源传输体积 + +### Removed + +- 移除独立 `README.en.md` + +## [1.14.1] - 2026-04-03 + +### Changed + +- 版本更新至 1.14.1 +- 微调 `README.md` 与 `README.en.md` 文案 +- 更新正式发布清单 `dist/install-manifest.json` + +### Fixed + +- 更新 `Cargo.lock`,同步依赖锁定结果 + +## [1.14.1-beta] - 2026-04-03 + +### Changed + +- 版本号统一为 `1.14.1` / `v1.14.1-beta`(同步更新 `Cargo.toml`、`Cargo.lock`、`version.txt`、`dist/install-manifest-beta.json`) + +### Fixed + +- 更新 `Cargo.lock`,同步依赖锁定结果 + +## [1.14.0] - 2026-04-03 + +### Added + +- 新增 `CONTRIBUTING.md`,补充贡献指南与协作说明 + +### Changed + +- 版本更新至 1.14.0 +- 许可证由 Elastic License 2.0 调整为 Apache 2.0 +- 重构 README,补充双语说明并对齐中英文内容 +- 更新正式发布清单 `dist/install-manifest.json` + +### Removed + +- 删除 README 中的 Test Coverage badge、使用指南与 API 文档章节 + +## [1.14.0-beta] - 2026-04-01 + +### Added + +- 代码编辑器新增一键复制/粘贴能力 + +### Changed + +- 版本号统一为 `1.14.0` / `v1.14.0-beta`(同步更新 `Cargo.toml`、`Cargo.lock`、`version.txt`、`dist/install-manifest-beta.json`) +- 升级 wp-motor 依赖至 v1.18.3 + +### Fixed + +- 修复编辑器 `Tab` 键行为异常 +- 新增 `Shift+Tab` 反向缩进支持 + ## [1.13.0-alpha] - 2026-03-12 ### Changed diff --git a/Cargo.lock b/Cargo.lock index f21417a..085e96f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3655,8 +3655,8 @@ dependencies = [ [[package]] name = "orion_exp" -version = "1.20.2" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +version = "1.20.3" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" dependencies = [ "arcstr", "chrono", @@ -3668,8 +3668,8 @@ dependencies = [ [[package]] name = "orion_overload" -version = "1.20.2" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +version = "1.20.3" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" dependencies = [ "anyhow", "derive-getters", @@ -6268,14 +6268,14 @@ version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.6", + "webpki-roots 1.0.7", ] [[package]] name = "webpki-roots" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" +checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" dependencies = [ "rustls-pki-types", ] @@ -6720,8 +6720,8 @@ dependencies = [ [[package]] name = "wp-cli-core" -version = "1.20.2" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +version = "1.20.3" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" dependencies = [ "anyhow", "chrono", @@ -6740,8 +6740,8 @@ dependencies = [ [[package]] name = "wp-condition" -version = "1.20.2" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +version = "1.20.3" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" dependencies = [ "orion_exp", "winnow 1.0.1", @@ -6765,8 +6765,8 @@ dependencies = [ [[package]] name = "wp-config" -version = "1.20.2" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +version = "1.20.3" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" dependencies = [ "anyhow", "async-trait", @@ -6882,8 +6882,8 @@ dependencies = [ [[package]] name = "wp-data-utils" -version = "1.20.2" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +version = "1.20.3" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" dependencies = [ "arcstr", "chrono", @@ -6900,7 +6900,7 @@ dependencies = [ [[package]] name = "wp-editor" -version = "1.15.4" +version = "1.17.0" dependencies = [ "actix-files", "actix-multipart", @@ -6962,8 +6962,8 @@ dependencies = [ [[package]] name = "wp-engine" -version = "1.20.2" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +version = "1.20.3" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" dependencies = [ "anyhow", "async-broadcast", @@ -7100,9 +7100,9 @@ dependencies = [ [[package]] name = "wp-lang" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3f3705f22626950b7d0aaf7d3206b9a9363eea98ce45146788e0376ea427aea" +checksum = "848aed1a98f61e8fcb3be5a76a8753e603ed72ee64999fcdceaa8146be1a62d2" dependencies = [ "ahash 0.8.12", "anyhow", @@ -7185,8 +7185,8 @@ dependencies = [ [[package]] name = "wp-oml" -version = "1.20.2" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +version = "1.20.3" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" dependencies = [ "anyhow", "arcstr", @@ -7264,8 +7264,8 @@ dependencies = [ [[package]] name = "wp-proj" -version = "1.20.2" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +version = "1.20.3" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" dependencies = [ "anyhow", "comfy-table", @@ -7303,8 +7303,8 @@ dependencies = [ [[package]] name = "wp-stats" -version = "1.20.2" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.2#fdb486cfb9b30cfc980c37da96e4a7d7c8dc75c8" +version = "1.20.3" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index e869439..55d02b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wp-editor" -version = "1.15.4" +version = "1.17.0" edition = "2024" build = "build.rs" @@ -63,11 +63,11 @@ wp-editor-migrations = { path = "crates/migrations" } wp-lang = "0.1" wp_knowledge = { package = "wp-knowledge", version = "0.11"} -wp-engine = { git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.2" } -wp-config = { package = "wp-config", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.2" } -wp_oml = { package = "wp-oml", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.2" } -wp_data_utils = { package = "wp-data-utils", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.2" } -wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.2" } +wp-engine = { git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.3" } +wp-config = { package = "wp-config", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.3" } +wp_oml = { package = "wp-oml", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.3" } +wp_data_utils = { package = "wp-data-utils", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.3" } +wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.3" } #wp-engine = { path = "../wp-motor" } #wp-config = { path = "../wp-motor/crates/wp-config" } diff --git a/dist/install-manifest-alpha.json b/dist/install-manifest-alpha.json index 703ff8d..6b3a77a 100644 --- a/dist/install-manifest-alpha.json +++ b/dist/install-manifest-alpha.json @@ -1,11 +1,11 @@ { "releases": [ { - "version": "v1.15.4-alpha", + "version": "v1.17.0-alpha", "artifacts": { - "darwin-arm64": "wp-editor-v1.15.4-alpha-aarch64-apple-darwin.tar.gz", - "linux-arm64": "wp-editor-v1.15.4-alpha-aarch64-unknown-linux-gnu.tar.gz", - "linux-x86_64": "wp-editor-v1.15.4-alpha-x86_64-unknown-linux-gnu.tar.gz" + "darwin-arm64": "wp-editor-v1.17.0-alpha-aarch64-apple-darwin.tar.gz", + "linux-arm64": "wp-editor-v1.17.0-alpha-aarch64-unknown-linux-gnu.tar.gz", + "linux-x86_64": "wp-editor-v1.17.0-alpha-x86_64-unknown-linux-gnu.tar.gz" } } ] diff --git a/version.txt b/version.txt index 66dd6a2..73d7467 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.15.4 \ No newline at end of file +1.17.0 \ No newline at end of file From afe52e8a0688cd0f2156d60f06ad194c8ac126cd Mon Sep 17 00:00:00 2001 From: tangxiangyan <1813932938@qq.com> Date: Mon, 20 Apr 2026 11:57:55 +0800 Subject: [PATCH 03/37] ci v1.17.1-alpha --- Cargo.lock | 2 +- Cargo.toml | 2 +- dist/install-manifest-alpha.json | 8 ++++---- version.txt | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d92d202..40ab949 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6933,7 +6933,7 @@ dependencies = [ [[package]] name = "wp-editor" -version = "1.17.0" +version = "1.17.1" dependencies = [ "actix-files", "actix-multipart", diff --git a/Cargo.toml b/Cargo.toml index 55d02b6..af5cfe0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wp-editor" -version = "1.17.0" +version = "1.17.1" edition = "2024" build = "build.rs" diff --git a/dist/install-manifest-alpha.json b/dist/install-manifest-alpha.json index 6b3a77a..f98972a 100644 --- a/dist/install-manifest-alpha.json +++ b/dist/install-manifest-alpha.json @@ -1,11 +1,11 @@ { "releases": [ { - "version": "v1.17.0-alpha", + "version": "v1.17.1-alpha", "artifacts": { - "darwin-arm64": "wp-editor-v1.17.0-alpha-aarch64-apple-darwin.tar.gz", - "linux-arm64": "wp-editor-v1.17.0-alpha-aarch64-unknown-linux-gnu.tar.gz", - "linux-x86_64": "wp-editor-v1.17.0-alpha-x86_64-unknown-linux-gnu.tar.gz" + "darwin-arm64": "wp-editor-v1.17.1-alpha-aarch64-apple-darwin.tar.gz", + "linux-arm64": "wp-editor-v1.17.1-alpha-aarch64-unknown-linux-gnu.tar.gz", + "linux-x86_64": "wp-editor-v1.17.1-alpha-x86_64-unknown-linux-gnu.tar.gz" } } ] diff --git a/version.txt b/version.txt index 73d7467..507266b 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.17.0 \ No newline at end of file +1.17.1 \ No newline at end of file From c9c347f101573313834e5bf5107c9eaf8fee05ec Mon Sep 17 00:00:00 2001 From: tangxiangyan <1813932938@qq.com> Date: Thu, 23 Apr 2026 17:54:36 +0800 Subject: [PATCH 04/37] feat: update wp-monitor version to v1.21.4 --- Cargo.lock | 134 +++++++++++++++++++++++++++++------------------------ Cargo.toml | 10 ++-- 2 files changed, 79 insertions(+), 65 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 40ab949..a437dd5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1395,9 +1395,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1c888a2a4f677017373fb6c01e13e318dd9e78758445ed5eb985e355d3f8281" +checksum = "83cf0d42651b16c6dfe68685716d18480d18a9c39c62d76e8cf3eb6ed5d8bcbf" dependencies = [ "ctor-proc-macro", "dtor", @@ -1406,9 +1406,9 @@ dependencies = [ [[package]] name = "ctor-proc-macro" -version = "0.0.12" +version = "0.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ab264ea985f1bd27887d7b21ea2bb046728e05d11909ca138d700c494730db" +checksum = "7a949c44fcacbbbb7ada007dc7acb34603dd97cd47de5d054f2b6493ecebb483" [[package]] name = "ctutils" @@ -1653,18 +1653,18 @@ checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] name = "dtor" -version = "0.6.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e4690622ab6700ced40fc370a3f07b7d111f0154bb6fb08f73b4c8834f75b6" +checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b" dependencies = [ "dtor-proc-macro", ] [[package]] name = "dtor-proc-macro" -version = "0.0.12" +version = "0.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c98b077c7463d01d22dde8a24378ddf1ca7263dc687cffbed38819ea6c21131" +checksum = "2647271c92754afcb174e758003cfd1cbf1e43e5a7853d7b1813e63e19e39a73" [[package]] name = "dyn-clone" @@ -2183,6 +2183,11 @@ name = "hashbrown" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", +] [[package]] name = "hashlink" @@ -2595,18 +2600,18 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jieba-macros" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "348294e44ee7e3c42685da656490f8febc7359632544019621588902216da95c" +checksum = "a29cfc5dcd898604c6f80363411fa6b6b08e27d1d253d6225b9cb6702ea02fc0" dependencies = [ "phf_codegen", ] [[package]] name = "jieba-rs" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "766bd7012aa5ba49411ebdf4e93bddd59b182d2918e085d58dec5bb9b54b7105" +checksum = "3245d6e9d1d5facbd6a23848d6b67e3439738ccbb4fa5a3d65da315ba1a910a2" dependencies = [ "cedarwood", "include-flate", @@ -2833,9 +2838,9 @@ dependencies = [ [[package]] name = "link-section" -version = "0.0.12" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52437d47b0358721ec869cc7374b2a21f7b2237af9b439c0391341a1fbfbf1b" +checksum = "b685d66585d646efe09fec763d796c291049c8b6bf84e04954bffc8748341f0d" [[package]] name = "linux-raw-sys" @@ -2935,6 +2940,15 @@ dependencies = [ "hashbrown 0.16.1", ] +[[package]] +name = "lru" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0b564323a0fb6d54b864f625ae139de9612e27edb944dda37c109f05aac531" +dependencies = [ + "hashbrown 0.17.0", +] + [[package]] name = "mac_address" version = "1.1.8" @@ -3095,7 +3109,7 @@ dependencies = [ "flate2", "io-enum", "libc", - "lru", + "lru 0.16.4", "mysql_common 0.37.1", "named_pipe", "pem", @@ -3136,7 +3150,7 @@ dependencies = [ "futures-sink", "futures-util", "keyed_priority_queue", - "lru", + "lru 0.16.4", "mysql_common 0.35.5", "pem", "percent-encoding", @@ -3592,9 +3606,9 @@ dependencies = [ [[package]] name = "orion-error" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b99ac4824671056dc14e4100292e28d7f4921c65be54d1bb99048d770a4552a2" +checksum = "6719d23a898c158da039ec98dd111f209dd1d578290a1ef219b3e70b8a5f3861" dependencies = [ "derive_more 2.1.1", "log", @@ -3648,7 +3662,7 @@ dependencies = [ "serde_yaml", "thiserror 2.0.18", "toml 1.1.2+spec-1.1.0", - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] @@ -3671,8 +3685,8 @@ dependencies = [ [[package]] name = "orion_exp" -version = "1.20.3" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" +version = "1.21.4" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" dependencies = [ "arcstr", "chrono", @@ -3684,8 +3698,8 @@ dependencies = [ [[package]] name = "orion_overload" -version = "1.20.3" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" +version = "1.21.4" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" dependencies = [ "anyhow", "derive-getters", @@ -4556,9 +4570,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.38" +version = "0.23.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f9466fb2c14ea04357e91413efb882e2a6d4a406e625449bc0a5d360d53a21" +checksum = "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74e60e" dependencies = [ "once_cell", "ring", @@ -4579,9 +4593,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.12" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8279bb85272c9f10811ae6a6c547ff594d6a7f3c6c6b02ee9726d1d0dcfcdd06" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ "ring", "rustls-pki-types", @@ -5790,7 +5804,7 @@ dependencies = [ "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] @@ -5843,7 +5857,7 @@ dependencies = [ "indexmap", "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] @@ -5852,7 +5866,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] @@ -6639,9 +6653,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" +checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" dependencies = [ "memchr", ] @@ -6753,8 +6767,8 @@ dependencies = [ [[package]] name = "wp-cli-core" -version = "1.20.3" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" +version = "1.21.4" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" dependencies = [ "anyhow", "chrono", @@ -6773,11 +6787,11 @@ dependencies = [ [[package]] name = "wp-condition" -version = "1.20.3" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" +version = "1.21.4" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" dependencies = [ "orion_exp", - "winnow 1.0.1", + "winnow 1.0.2", "wp-primitives", ] @@ -6798,8 +6812,8 @@ dependencies = [ [[package]] name = "wp-config" -version = "1.20.3" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" +version = "1.21.4" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" dependencies = [ "anyhow", "async-trait", @@ -6822,7 +6836,7 @@ dependencies = [ "thiserror 2.0.18", "toml 1.1.2+spec-1.1.0", "wildmatch", - "winnow 1.0.1", + "winnow 1.0.2", "wp-condition", "wp-conf-base", "wp-connector-api", @@ -6915,13 +6929,13 @@ dependencies = [ [[package]] name = "wp-data-utils" -version = "1.20.3" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" +version = "1.21.4" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" dependencies = [ "arcstr", "chrono", "derive_builder", - "lru", + "lru 0.17.0", "orion-error", "orion_exp", "serde", @@ -6995,8 +7009,8 @@ dependencies = [ [[package]] name = "wp-engine" -version = "1.20.3" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" +version = "1.21.4" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" dependencies = [ "anyhow", "async-broadcast", @@ -7023,7 +7037,7 @@ dependencies = [ "lazy_static", "libc", "log", - "lru", + "lru 0.17.0", "memchr", "mockall", "once_cell", @@ -7051,7 +7065,7 @@ dependencies = [ "uuid", "walkdir", "wildmatch", - "winnow 1.0.1", + "winnow 1.0.2", "wp-arrow", "wp-cli-core", "wp-conf-base", @@ -7084,9 +7098,9 @@ dependencies = [ [[package]] name = "wp-error" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f1cc521f4ea17d26679d355d5da35278559dc4a1358575f7a0d21639284980" +checksum = "96619c8b1bf018e7cca7e492e594996ff2fcb0be3b18e6a78b6b51dff7259230" dependencies = [ "derive_more 2.1.1", "orion-error", @@ -7113,7 +7127,7 @@ dependencies = [ "enum_dispatch", "lazy_static", "log", - "lru", + "lru 0.16.4", "mysql", "mysql_async", "orion-error", @@ -7164,7 +7178,7 @@ dependencies = [ "unicode-segmentation", "url", "wildmatch", - "winnow 1.0.1", + "winnow 1.0.2", "wp-connector-api", "wp-data-fmt", "wp-error", @@ -7218,8 +7232,8 @@ dependencies = [ [[package]] name = "wp-oml" -version = "1.20.3" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" +version = "1.21.4" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" dependencies = [ "anyhow", "arcstr", @@ -7258,7 +7272,7 @@ dependencies = [ "toml 1.1.2+spec-1.1.0", "url", "wildmatch", - "winnow 1.0.1", + "winnow 1.0.2", "wp-condition", "wp-data-fmt", "wp-data-utils", @@ -7292,13 +7306,13 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1baa39359b6c063ff60bf4d3c866636b890e0077aedc6fd14963b3bd7673fab9" dependencies = [ - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] name = "wp-proj" -version = "1.20.3" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" +version = "1.21.4" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" dependencies = [ "anyhow", "comfy-table", @@ -7336,8 +7350,8 @@ dependencies = [ [[package]] name = "wp-stats" -version = "1.20.3" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.20.3#42f0c2f6392194255a0b022dab2f1b4db40d00c6" +version = "1.21.4" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" dependencies = [ "anyhow", "chrono", @@ -7346,7 +7360,7 @@ dependencies = [ "derive_builder", "ipnet", "log", - "lru", + "lru 0.17.0", "mockall", "orion_overload", "serde", diff --git a/Cargo.toml b/Cargo.toml index af5cfe0..2212bf4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -63,11 +63,11 @@ wp-editor-migrations = { path = "crates/migrations" } wp-lang = "0.1" wp_knowledge = { package = "wp-knowledge", version = "0.11"} -wp-engine = { git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.3" } -wp-config = { package = "wp-config", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.3" } -wp_oml = { package = "wp-oml", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.3" } -wp_data_utils = { package = "wp-data-utils", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.3" } -wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/wp-motor", tag = "v1.20.3" } +wp-engine = { git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.4" } +wp-config = { package = "wp-config", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.4" } +wp_oml = { package = "wp-oml", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.4" } +wp_data_utils = { package = "wp-data-utils", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.4" } +wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.4" } #wp-engine = { path = "../wp-motor" } #wp-config = { path = "../wp-motor/crates/wp-config" } From b63d3ce46a48948588b809ded95fa37469c362e2 Mon Sep 17 00:00:00 2001 From: tangxiangyan <1813932938@qq.com> Date: Thu, 23 Apr 2026 19:39:52 +0800 Subject: [PATCH 05/37] ci v1.17.2-alpha --- CHANGELOG.en.md | 9 +++++++++ CHANGELOG.md | 8 ++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- dist/install-manifest-alpha.json | 8 ++++---- version.txt | 2 +- 6 files changed, 24 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.en.md b/CHANGELOG.en.md index 0c4b077..9d8b6ba 100644 --- a/CHANGELOG.en.md +++ b/CHANGELOG.en.md @@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.17.2-alpha] - 2026-04-23 + +### Changed + +- Unified version identifiers to `1.17.2` / `v1.17.2-alpha` (synchronized in `Cargo.toml`, `Cargo.lock`, `version.txt`, and `dist/install-manifest-alpha.json`) +- Upgrade wp-motor-related dependencies to v1.21.4 +- Add the Chinese and English changelog entries for `1.17.2-alpha` +- Fix the grammatical errors caused by the oml formatting. + ## [1.17.0-alpha] - 2026-04-16 ### Changed diff --git a/CHANGELOG.md b/CHANGELOG.md index 65d7dd2..6f256bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,14 @@ 本文件记录所有重要变更,格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/), 版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。 +## [1.17.2-alpha] - 2026-04-23 + +### Changed + +- 版本号统一为 `1.17.2` / `v1.17.2-alpha`(同步更新 `Cargo.toml`、`Cargo.lock`、`version.txt`、`dist/install-manifest-alpha.json`) +- 升级 wp-motor 相关依赖至 v1.21.4 +- 补齐 `1.17.2-alpha` 的中英文变更记录 + ## [1.17.0-alpha] - 2026-04-16 ### Changed diff --git a/Cargo.lock b/Cargo.lock index a437dd5..6ecc072 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6947,7 +6947,7 @@ dependencies = [ [[package]] name = "wp-editor" -version = "1.17.1" +version = "1.17.2" dependencies = [ "actix-files", "actix-multipart", diff --git a/Cargo.toml b/Cargo.toml index 2212bf4..582c490 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wp-editor" -version = "1.17.1" +version = "1.17.2" edition = "2024" build = "build.rs" diff --git a/dist/install-manifest-alpha.json b/dist/install-manifest-alpha.json index f98972a..6a8732b 100644 --- a/dist/install-manifest-alpha.json +++ b/dist/install-manifest-alpha.json @@ -1,11 +1,11 @@ { "releases": [ { - "version": "v1.17.1-alpha", + "version": "v1.17.2-alpha", "artifacts": { - "darwin-arm64": "wp-editor-v1.17.1-alpha-aarch64-apple-darwin.tar.gz", - "linux-arm64": "wp-editor-v1.17.1-alpha-aarch64-unknown-linux-gnu.tar.gz", - "linux-x86_64": "wp-editor-v1.17.1-alpha-x86_64-unknown-linux-gnu.tar.gz" + "darwin-arm64": "wp-editor-v1.17.2-alpha-aarch64-apple-darwin.tar.gz", + "linux-arm64": "wp-editor-v1.17.2-alpha-aarch64-unknown-linux-gnu.tar.gz", + "linux-x86_64": "wp-editor-v1.17.2-alpha-x86_64-unknown-linux-gnu.tar.gz" } } ] diff --git a/version.txt b/version.txt index 507266b..0e1f39b 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.17.1 \ No newline at end of file +1.17.2 \ No newline at end of file From 9b84dfedabebd071ef57bc6581653b1a9b7da467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=96=87=E5=BA=B7?= <1903215403@qq.com> Date: Thu, 30 Apr 2026 11:46:14 +0800 Subject: [PATCH 06/37] cd --- dev-ops/alpha/config/config.toml | 12 ++++++++++++ dev-ops/alpha/wp-editor.service | 15 +++++++++++++++ dev-ops/alpha/wp-rule | 1 + 3 files changed, 28 insertions(+) create mode 100644 dev-ops/alpha/config/config.toml create mode 100644 dev-ops/alpha/wp-editor.service create mode 160000 dev-ops/alpha/wp-rule diff --git a/dev-ops/alpha/config/config.toml b/dev-ops/alpha/config/config.toml new file mode 100644 index 0000000..1cd71bf --- /dev/null +++ b/dev-ops/alpha/config/config.toml @@ -0,0 +1,12 @@ +[log] +level = "debug" +output = "Console" +output_path = "./logs/" + +[web] +host = "0.0.0.0" +port = 8081 + +[repo] +wpl_rule_repo = "wp-rule/models/wpl" +oml_rule_repo = "wp-rule/models/oml" diff --git a/dev-ops/alpha/wp-editor.service b/dev-ops/alpha/wp-editor.service new file mode 100644 index 0000000..a9bffaa --- /dev/null +++ b/dev-ops/alpha/wp-editor.service @@ -0,0 +1,15 @@ +[Unit] +Description=wp-editor +After=network.target + +[Service] +Type=simple +ExecStart=${WORK_DIR}/alpha/wp-editor +WorkingDirectory=${WORK_DIR}/alpha +Restart=on-failure +User=root +Environment=PATH=/usr/bin:/usr/local/bin + + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/dev-ops/alpha/wp-rule b/dev-ops/alpha/wp-rule new file mode 160000 index 0000000..fcfc9e5 --- /dev/null +++ b/dev-ops/alpha/wp-rule @@ -0,0 +1 @@ +Subproject commit fcfc9e5e1f2b28c6988ec151a8ead7bcc4c68f97 From a288a70e5202403b4aef039d08b3b13af857cf99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=96=87=E5=BA=B7?= <1903215403@qq.com> Date: Thu, 30 Apr 2026 11:46:26 +0800 Subject: [PATCH 07/37] cd --- .github/workflows/release.yml | 128 ++++++++++++++++++++++++++++++++++ web/package-lock.json | 57 ++++++--------- 2 files changed, 148 insertions(+), 37 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 19c40a6..386adc7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -274,3 +274,131 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} prerelease: ${{ contains(github.ref, '-alpha') || contains(github.ref, '-beta') }} files: artifacts/* + + + deploy: + needs: [build-matrix] + runs-on: ubuntu-22.04 + permissions: + contents: read + env: + SYSTEMD_DIR: /etc/systemd/system + WORK_DIR: ${{vars.WORK_DIR}} + HOST_IP: ${{ secrets.HOST_IP }} + HOST_USER: ${{ secrets.HOST_USER }} + HOST_SSH: ${{ secrets.HOST_SSH }} + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Determine deploy target + id: deploy_target + shell: bash + run: | + set -euo pipefail + + TAG_NAME="${GITHUB_REF_NAME}" + DEPLOY_VARIANT="main" + SERVICE_SUFFIX="" + + if [[ "$TAG_NAME" == *-alpha ]]; then + DEPLOY_VARIANT="alpha" + SERVICE_SUFFIX="-alpha" + elif [[ "$TAG_NAME" == *-beta ]]; then + DEPLOY_VARIANT="beta" + SERVICE_SUFFIX="-beta" + fi + + echo "deploy_variant=$DEPLOY_VARIANT" >> "$GITHUB_OUTPUT" + echo "remote_work_dir=${WORK_DIR}/${DEPLOY_VARIANT}" >> "$GITHUB_OUTPUT" + echo "service_suffix=$SERVICE_SUFFIX" >> "$GITHUB_OUTPUT" + echo "service_name=wp-editor${SERVICE_SUFFIX}.service" >> "$GITHUB_OUTPUT" + + - name: Download Linux amd64 artifact + uses: actions/download-artifact@v7 + with: + name: ${{ github.event.repository.name }}-${{ github.ref_name }}-x86_64-unknown-linux-gnu + path: deploy-artifact + + - name: Prepare deploy bundle + shell: bash + env: + DEPLOY_VARIANT: ${{ steps.deploy_target.outputs.deploy_variant }} + run: | + set -euo pipefail + + rm -rf deploy-bundle + mkdir -p deploy-bundle + + tar -xzf deploy-artifact/*.tar.gz -C deploy-artifact + cp -a "dev-ops/${DEPLOY_VARIANT}/." deploy-bundle/ + rm -f deploy-bundle/wp-editor.service + cp deploy-artifact/artifacts/wp-editor deploy-bundle/wp-editor + chmod +x deploy-bundle/wp-editor + + - name: Configure SSH + shell: bash + run: | + set -euo pipefail + + mkdir -p ~/.ssh + chmod 700 ~/.ssh + printf '%s\n' "$HOST_SSH" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H "$HOST_IP" >> ~/.ssh/known_hosts + chmod 644 ~/.ssh/known_hosts + + - name: Render service file + shell: bash + env: + REMOTE_WORK_DIR: ${{ steps.deploy_target.outputs.remote_work_dir }} + run: | + set -euo pipefail + + sed "s|\${WORK_DIR}|${REMOTE_WORK_DIR}|g" dev-ops/alpha/wp-editor.service > service.rendered + + - name: Stop service and clean remote directory + shell: bash + env: + SERVICE_NAME: ${{ steps.deploy_target.outputs.service_name }} + REMOTE_WORK_DIR: ${{ steps.deploy_target.outputs.remote_work_dir }} + run: | + set -euo pipefail + + ssh "$HOST_USER@$HOST_IP" "SERVICE_NAME='$SERVICE_NAME' WORK_DIR='$REMOTE_WORK_DIR' bash -s" <<'EOF' + set -euo pipefail + sudo systemctl stop "$SERVICE_NAME" || true + sudo mkdir -p "$WORK_DIR" + sudo chown -R "$USER":"$USER" "$WORK_DIR" + shopt -s dotglob nullglob + files=("$WORK_DIR"/*) + if [ ${#files[@]} -gt 0 ]; then + rm -rf "${files[@]}" + fi + EOF + + - name: Upload deploy bundle + shell: bash + env: + REMOTE_WORK_DIR: ${{ steps.deploy_target.outputs.remote_work_dir }} + run: | + set -euo pipefail + + scp -r deploy-bundle/. "$HOST_USER@$HOST_IP:$REMOTE_WORK_DIR/" + scp service.rendered "$HOST_USER@$HOST_IP:/tmp/service.rendered" + + - name: Install service and restart + shell: bash + env: + SERVICE_NAME: ${{ steps.deploy_target.outputs.service_name }} + SYSTEMD_TARGET: ${{ env.SYSTEMD_DIR }}/${{ steps.deploy_target.outputs.service_name }} + run: | + set -euo pipefail + + ssh "$HOST_USER@$HOST_IP" "SERVICE_NAME='$SERVICE_NAME' SYSTEMD_TARGET='$SYSTEMD_TARGET' bash -s" <<'EOF' + set -euo pipefail + sudo install -m 0644 /tmp/service.rendered "$SYSTEMD_TARGET" + rm -f /tmp/service.rendered + sudo systemctl daemon-reload + sudo systemctl start "$SERVICE_NAME" + EOF diff --git a/web/package-lock.json b/web/package-lock.json index 9c6b49f..ee61589 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -215,7 +215,6 @@ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", @@ -231,7 +230,6 @@ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.9.0" } @@ -440,6 +438,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -483,6 +482,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2012,8 +2012,7 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/chai": { "version": "5.2.3", @@ -2230,6 +2229,7 @@ "integrity": "sha512-rkoPH+RqWopVxDnCBE/ysIdfQ2A7j1eDmW8tCxxrR9nnFBa9jKf86VgsSAzxBd1x+ny0GC4JgiD3SNfRHv3pOg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/utils": "4.0.16", "fflate": "^0.8.2", @@ -2266,6 +2266,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2363,6 +2364,7 @@ "resolved": "https://registry.npmjs.org/antd/-/antd-5.29.3.tgz", "integrity": "sha512-3DdbGCa9tWAJGcCJ6rzR8EJFsv2CtyEbkVabZE14pfgUHfCicWCj0/QzQVLDYg8CPfQk9BH7fHCoTXHTy7MP/A==", "license": "MIT", + "peer": true, "dependencies": { "@ant-design/colors": "^7.2.1", "@ant-design/cssinjs": "^1.23.0", @@ -2454,8 +2456,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/axios": { "version": "1.13.2", @@ -2512,7 +2513,6 @@ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", - "peer": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -2639,7 +2639,6 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", - "peer": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2812,7 +2811,6 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.4.0" } @@ -2866,15 +2864,13 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", - "peer": true, "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -2902,7 +2898,6 @@ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4" } @@ -2912,7 +2907,6 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4" } @@ -2929,7 +2923,6 @@ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", - "peer": true, "dependencies": { "es-errors": "^1.3.0" }, @@ -2942,7 +2935,6 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", - "peer": true, "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -3012,6 +3004,7 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -3337,7 +3330,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=4.0" }, @@ -3352,7 +3344,6 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "license": "MIT", - "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -3399,7 +3390,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3409,7 +3399,6 @@ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", - "peer": true, "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -3434,7 +3423,6 @@ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", - "peer": true, "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -3511,7 +3499,6 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4" }, @@ -3541,7 +3528,6 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4" }, @@ -3554,7 +3540,6 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", - "peer": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -3570,7 +3555,6 @@ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", - "peer": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -3712,6 +3696,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.28.4" }, @@ -3920,8 +3905,7 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.1", @@ -3942,6 +3926,7 @@ "integrity": "sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@acemir/cssom": "^0.9.28", "@asamuzakjp/dom-selector": "^6.7.6", @@ -4112,7 +4097,6 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -4142,7 +4126,6 @@ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4" } @@ -5004,7 +4987,6 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -5014,7 +4996,6 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", - "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -5259,6 +5240,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5311,7 +5293,6 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -5327,7 +5308,6 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10" }, @@ -5358,8 +5338,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", @@ -6009,6 +5988,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -6018,6 +5998,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -6063,8 +6044,7 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/react-markdown": { "version": "10.1.0", @@ -7092,6 +7072,7 @@ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -7152,6 +7133,7 @@ "integrity": "sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.0.16", "@vitest/mocker": "4.0.16", @@ -7690,6 +7672,7 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", From a4abb84e428f7bfcb3b9807c0c3fa46af6f078a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=96=87=E5=BA=B7?= <1903215403@qq.com> Date: Thu, 30 Apr 2026 14:06:31 +0800 Subject: [PATCH 08/37] cd --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 386adc7..72141f4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -384,7 +384,7 @@ jobs: run: | set -euo pipefail - scp -r deploy-bundle/. "$HOST_USER@$HOST_IP:$REMOTE_WORK_DIR/" + tar -C deploy-bundle -cf - . | ssh "$HOST_USER@$HOST_IP" "tar -C '$REMOTE_WORK_DIR' -xf -" scp service.rendered "$HOST_USER@$HOST_IP:/tmp/service.rendered" - name: Install service and restart From 064699141d99cbc892e7543cde91652c2c9b9752 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=96=87=E5=BA=B7?= <1903215403@qq.com> Date: Thu, 30 Apr 2026 14:25:27 +0800 Subject: [PATCH 09/37] cd --- dev-ops/alpha/wp-editor.service | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-ops/alpha/wp-editor.service b/dev-ops/alpha/wp-editor.service index a9bffaa..a6c2bd7 100644 --- a/dev-ops/alpha/wp-editor.service +++ b/dev-ops/alpha/wp-editor.service @@ -4,8 +4,8 @@ After=network.target [Service] Type=simple -ExecStart=${WORK_DIR}/alpha/wp-editor -WorkingDirectory=${WORK_DIR}/alpha +ExecStart=${WORK_DIR}/wp-editor +WorkingDirectory=${WORK_DIR} Restart=on-failure User=root Environment=PATH=/usr/bin:/usr/local/bin From 792917aa2d8d47eb04d10206a4ad40f880128c38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=96=87=E5=BA=B7?= <1903215403@qq.com> Date: Thu, 30 Apr 2026 16:27:27 +0800 Subject: [PATCH 10/37] beta,stable --- dev-ops/beta/config/config.toml | 12 ++++++++++++ dev-ops/beta/wp-editor.service | 15 +++++++++++++++ dev-ops/beta/wp-rule | 1 + dev-ops/main/config/config.toml | 12 ++++++++++++ dev-ops/main/wp-editor.service | 15 +++++++++++++++ dev-ops/main/wp-rule | 1 + 6 files changed, 56 insertions(+) create mode 100644 dev-ops/beta/config/config.toml create mode 100644 dev-ops/beta/wp-editor.service create mode 160000 dev-ops/beta/wp-rule create mode 100644 dev-ops/main/config/config.toml create mode 100644 dev-ops/main/wp-editor.service create mode 160000 dev-ops/main/wp-rule diff --git a/dev-ops/beta/config/config.toml b/dev-ops/beta/config/config.toml new file mode 100644 index 0000000..7885893 --- /dev/null +++ b/dev-ops/beta/config/config.toml @@ -0,0 +1,12 @@ +[log] +level = "debug" +output = "Console" +output_path = "./logs/" + +[web] +host = "0.0.0.0" +port = 8082 + +[repo] +wpl_rule_repo = "wp-rule/models/wpl" +oml_rule_repo = "wp-rule/models/oml" diff --git a/dev-ops/beta/wp-editor.service b/dev-ops/beta/wp-editor.service new file mode 100644 index 0000000..a6c2bd7 --- /dev/null +++ b/dev-ops/beta/wp-editor.service @@ -0,0 +1,15 @@ +[Unit] +Description=wp-editor +After=network.target + +[Service] +Type=simple +ExecStart=${WORK_DIR}/wp-editor +WorkingDirectory=${WORK_DIR} +Restart=on-failure +User=root +Environment=PATH=/usr/bin:/usr/local/bin + + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/dev-ops/beta/wp-rule b/dev-ops/beta/wp-rule new file mode 160000 index 0000000..fcfc9e5 --- /dev/null +++ b/dev-ops/beta/wp-rule @@ -0,0 +1 @@ +Subproject commit fcfc9e5e1f2b28c6988ec151a8ead7bcc4c68f97 diff --git a/dev-ops/main/config/config.toml b/dev-ops/main/config/config.toml new file mode 100644 index 0000000..64b55b9 --- /dev/null +++ b/dev-ops/main/config/config.toml @@ -0,0 +1,12 @@ +[log] +level = "debug" +output = "Console" +output_path = "./logs/" + +[web] +host = "0.0.0.0" +port = 8083 + +[repo] +wpl_rule_repo = "wp-rule/models/wpl" +oml_rule_repo = "wp-rule/models/oml" diff --git a/dev-ops/main/wp-editor.service b/dev-ops/main/wp-editor.service new file mode 100644 index 0000000..a6c2bd7 --- /dev/null +++ b/dev-ops/main/wp-editor.service @@ -0,0 +1,15 @@ +[Unit] +Description=wp-editor +After=network.target + +[Service] +Type=simple +ExecStart=${WORK_DIR}/wp-editor +WorkingDirectory=${WORK_DIR} +Restart=on-failure +User=root +Environment=PATH=/usr/bin:/usr/local/bin + + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/dev-ops/main/wp-rule b/dev-ops/main/wp-rule new file mode 160000 index 0000000..fcfc9e5 --- /dev/null +++ b/dev-ops/main/wp-rule @@ -0,0 +1 @@ +Subproject commit fcfc9e5e1f2b28c6988ec151a8ead7bcc4c68f97 From f41867215d91ccca9409107148d57b93aa390ac8 Mon Sep 17 00:00:00 2001 From: tangxiangyan <1813932938@qq.com> Date: Thu, 30 Apr 2026 17:16:19 +0800 Subject: [PATCH 11/37] ci v1.19.0-alpha --- CHANGELOG.en.md | 7 + CHANGELOG.md | 7 + Cargo.lock | 530 +++++-------------------------- Cargo.toml | 12 +- dist/install-manifest-alpha.json | 8 +- version.txt | 2 +- web/package-lock.json | 57 ++-- 7 files changed, 139 insertions(+), 484 deletions(-) diff --git a/CHANGELOG.en.md b/CHANGELOG.en.md index 9d8b6ba..d1f680d 100644 --- a/CHANGELOG.en.md +++ b/CHANGELOG.en.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.19.2-alpha] - 2026-04-30 + +### Changed + +- Upgrade wp-motor-related dependencies to v1.21.7 and synchronize the related dependency versions and source references in `Cargo.lock` +- Update the alpha `systemd` service configuration so `ExecStart` and `WorkingDirectory` point directly to `${WORK_DIR}/wp-editor` and `${WORK_DIR}`, simplifying the deployment path layout + ## [1.17.2-alpha] - 2026-04-23 ### Changed diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f256bd..c53f07d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ 本文件记录所有重要变更,格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/), 版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。 +## [1.19.2-alpha] - 2026-04-30 + +### Changed + +- 升级 wp-motor 相关依赖至 v1.21.7,并同步 `Cargo.lock` 中相关依赖版本与源码引用 +- 调整 alpha 环境 `systemd` 服务配置,`ExecStart` 与 `WorkingDirectory` 改为直接指向 `${WORK_DIR}` 下的 `wp-editor` 与工作目录,简化部署路径约束 + ## [1.17.2-alpha] - 2026-04-23 ### Changed diff --git a/Cargo.lock b/Cargo.lock index 6ecc072..088a822 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -855,30 +855,6 @@ dependencies = [ "alloc-stdlib", ] -[[package]] -name = "btoi" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad" -dependencies = [ - "num-traits", -] - -[[package]] -name = "btoi" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b5ab9db53bcda568284df0fd39f6eac24ad6f7ba7ff1168b9e76eba6576b976" -dependencies = [ - "num-traits", -] - -[[package]] -name = "bufstream" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" - [[package]] name = "bumpalo" version = "3.20.2" @@ -999,9 +975,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.60" +version = "1.2.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20" +checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" dependencies = [ "find-msvc-tools", "jobserver", @@ -1105,12 +1081,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" -[[package]] -name = "cmov" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" - [[package]] name = "colorchoice" version = "1.0.5" @@ -1296,9 +1266,9 @@ dependencies = [ [[package]] name = "crc-catalog" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" +checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853" [[package]] name = "crc32fast" @@ -1410,15 +1380,6 @@ version = "0.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a949c44fcacbbbb7ada007dc7acb34603dd97cd47de5d054f2b6493ecebb483" -[[package]] -name = "ctutils" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" -dependencies = [ - "cmov", -] - [[package]] name = "darling" version = "0.20.11" @@ -1559,17 +1520,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "derive_utils" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "362f47930db19fe7735f527e6595e4900316b893ebf6d48ad3d31be928d57dd6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "destructure_traitobject" version = "0.2.0" @@ -1597,7 +1547,6 @@ dependencies = [ "block-buffer 0.12.0", "const-oid 0.10.2", "crypto-common 0.2.1", - "ctutils", ] [[package]] @@ -1799,12 +1748,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - [[package]] name = "fallible-iterator" version = "0.3.0" @@ -1855,7 +1798,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", - "libz-sys", "miniz_oxide", ] @@ -1926,6 +1868,7 @@ checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", + "futures-executor", "futures-io", "futures-sink", "futures-task", @@ -2018,6 +1961,7 @@ 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", @@ -2046,7 +1990,7 @@ checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", ] [[package]] @@ -2246,7 +2190,7 @@ version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ - "hmac 0.12.1", + "hmac", ] [[package]] @@ -2258,15 +2202,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "hmac" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" -dependencies = [ - "digest 0.11.2", -] - [[package]] name = "home" version = "0.5.12" @@ -2333,9 +2268,9 @@ checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "hybrid-array" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" +checksum = "08d46837a0ed51fe95bd3b05de33cd64a1ee88fc797477ca48446872504507c5" dependencies = [ "typenum", ] @@ -2471,9 +2406,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -2561,15 +2496,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "io-enum" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de9008599afe8527a8c9d70423437363b321649161e98473f433de802d76107" -dependencies = [ - "derive_utils", -] - [[package]] name = "ipnet" version = "2.12.0" @@ -2633,10 +2559,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.95" +version = "0.3.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" +checksum = "a1840c94c045fbcf8ba2812c95db44499f7c64910a912551aaaa541decebcacf" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] @@ -2652,15 +2580,6 @@ dependencies = [ "serde", ] -[[package]] -name = "keyed_priority_queue" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee7893dab2e44ae5f9d0173f26ff4aa327c10b01b06a72b52dd9405b628640d" -dependencies = [ - "indexmap", -] - [[package]] name = "konst" version = "0.2.20" @@ -2756,9 +2675,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.185" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libflate" @@ -2989,16 +2908,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "md-5" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" -dependencies = [ - "cfg-if", - "digest 0.11.2", -] - [[package]] name = "md5" version = "0.8.0" @@ -3060,7 +2969,7 @@ checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", "log", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "windows-sys 0.61.2", ] @@ -3096,138 +3005,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "mysql" -version = "28.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a732193888328fc060ab901c0ed1355521267a51ffbfd9a0b3786434c6b8e7f" -dependencies = [ - "bufstream", - "bytes", - "crossbeam-queue", - "crossbeam-utils", - "flate2", - "io-enum", - "libc", - "lru 0.16.4", - "mysql_common 0.37.1", - "named_pipe", - "pem", - "percent-encoding", - "socket2 0.6.3", - "twox-hash", - "url", -] - -[[package]] -name = "mysql-common-derive" -version = "0.32.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66f62cad7623a9cb6f8f64037f0c4f69c8db8e82914334a83c9788201c2c1bfa" -dependencies = [ - "darling", - "heck 0.5.0", - "num-bigint", - "proc-macro-crate", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn 2.0.117", - "termcolor", - "thiserror 2.0.18", -] - -[[package]] -name = "mysql_async" -version = "0.36.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1d9585dc9058886ff3a1f48a23024dd1d054264dee7c5ae0e4bd640c953bee5" -dependencies = [ - "bytes", - "crossbeam-queue", - "flate2", - "futures-core", - "futures-sink", - "futures-util", - "keyed_priority_queue", - "lru 0.16.4", - "mysql_common 0.35.5", - "pem", - "percent-encoding", - "rand 0.9.4", - "serde", - "serde_json", - "socket2 0.5.10", - "thiserror 2.0.18", - "tokio", - "tokio-util", - "twox-hash", - "url", -] - -[[package]] -name = "mysql_common" -version = "0.35.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb9f371618ce723f095c61fbcdc36e8936956d2b62832f9c7648689b338e052" -dependencies = [ - "base64 0.22.1", - "bitflags 2.11.1", - "btoi 0.4.3", - "byteorder", - "bytes", - "crc32fast", - "flate2", - "getrandom 0.3.4", - "mysql-common-derive", - "num-bigint", - "num-traits", - "regex", - "saturating", - "serde", - "serde_json", - "sha1 0.10.6", - "sha2 0.10.9", - "thiserror 2.0.18", - "uuid", -] - -[[package]] -name = "mysql_common" -version = "0.37.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bffc2127d4035fa5a614935c663a15a4468e64e798473e0cc21c8df40a607588" -dependencies = [ - "base64 0.22.1", - "bitflags 2.11.1", - "btoi 0.5.0", - "byteorder", - "bytes", - "crc32fast", - "flate2", - "getrandom 0.3.4", - "mysql-common-derive", - "num-bigint", - "num-traits", - "regex", - "saturating", - "serde", - "serde_json", - "sha1 0.10.6", - "sha2 0.10.9", - "thiserror 2.0.18", - "uuid", -] - -[[package]] -name = "named_pipe" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad9c443cce91fc3e12f017290db75dde490d685cdaaf508d7159d7cf41f0eb2b" -dependencies = [ - "winapi", -] - [[package]] name = "nix" version = "0.29.0" @@ -3524,15 +3301,6 @@ dependencies = [ "objc2-foundation", ] -[[package]] -name = "objc2-system-configuration" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396" -dependencies = [ - "objc2-core-foundation", -] - [[package]] name = "objc2-ui-kit" version = "0.3.2" @@ -3685,8 +3453,8 @@ dependencies = [ [[package]] name = "orion_exp" -version = "1.21.4" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" +version = "1.21.7" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" dependencies = [ "arcstr", "chrono", @@ -3698,8 +3466,8 @@ dependencies = [ [[package]] name = "orion_overload" -version = "1.21.4" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" +version = "1.21.7" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" dependencies = [ "anyhow", "derive-getters", @@ -3832,19 +3600,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ "digest 0.10.7", - "hmac 0.12.1", + "hmac", "password-hash", - "sha2 0.10.9", -] - -[[package]] -name = "pem" -version = "3.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" -dependencies = [ - "base64 0.22.1", - "serde_core", + "sha2", ] [[package]] @@ -3902,7 +3660,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" dependencies = [ "pest", - "sha2 0.10.9", + "sha2", ] [[package]] @@ -4012,38 +3770,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "postgres-protocol" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56201207dac53e2f38e848e31b4b91616a6bb6e0c7205b77718994a7f49e70fc" -dependencies = [ - "base64 0.22.1", - "byteorder", - "bytes", - "fallible-iterator 0.2.0", - "hmac 0.13.0", - "md-5 0.11.0", - "memchr", - "rand 0.10.1", - "sha2 0.11.0", - "stringprep", -] - -[[package]] -name = "postgres-types" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dc729a129e682e8d24170cd30ae1aa01b336b096cbb56df6d534ffec133d186" -dependencies = [ - "bytes", - "chrono", - "fallible-iterator 0.2.0", - "postgres-protocol", - "serde_core", - "serde_json", -] - [[package]] name = "potential_utf" version = "0.1.5" @@ -4472,7 +4198,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" dependencies = [ "bitflags 2.11.1", - "fallible-iterator 0.3.0", + "fallible-iterator", "fallible-streaming-iterator", "hashlink 0.9.1", "libsqlite3-sys", @@ -4509,7 +4235,7 @@ version = "8.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bcdef0be6fe7f6fa333b1073c949729274b05f123a0ad7efcb8efd878e5c3b1" dependencies = [ - "sha2 0.10.9", + "sha2", "walkdir", ] @@ -4570,9 +4296,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.39" +version = "0.23.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74e60e" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ "once_cell", "ring", @@ -4584,9 +4310,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" dependencies = [ "zeroize", ] @@ -4623,12 +4349,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "saturating" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" - [[package]] name = "scheduled-thread-pool" version = "0.2.7" @@ -4994,17 +4714,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "sha2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" -dependencies = [ - "cfg-if", - "cpufeatures 0.3.0", - "digest 0.11.2", -] - [[package]] name = "shadow-rs" version = "1.7.1" @@ -5188,6 +4897,7 @@ dependencies = [ "hashbrown 0.15.5", "hashlink 0.10.0", "indexmap", + "ipnet", "log", "memchr", "once_cell", @@ -5196,7 +4906,7 @@ dependencies = [ "rustls", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "smallvec", "thiserror 2.0.18", "time", @@ -5236,7 +4946,7 @@ dependencies = [ "quote", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "sqlx-core", "sqlx-mysql", "sqlx-postgres", @@ -5270,10 +4980,10 @@ dependencies = [ "generic-array", "hex", "hkdf", - "hmac 0.12.1", + "hmac", "itoa", "log", - "md-5 0.10.6", + "md-5", "memchr", "once_cell", "percent-encoding", @@ -5282,7 +4992,7 @@ dependencies = [ "rust_decimal", "serde", "sha1 0.10.6", - "sha2 0.10.9", + "sha2", "smallvec", "sqlx-core", "stringprep", @@ -5290,7 +5000,7 @@ dependencies = [ "time", "tracing", "uuid", - "whoami 1.6.1", + "whoami", ] [[package]] @@ -5313,11 +5023,12 @@ dependencies = [ "futures-util", "hex", "hkdf", - "hmac 0.12.1", + "hmac", "home", + "ipnet", "itoa", "log", - "md-5 0.10.6", + "md-5", "memchr", "num-bigint", "once_cell", @@ -5325,7 +5036,7 @@ dependencies = [ "rust_decimal", "serde", "serde_json", - "sha2 0.10.9", + "sha2", "smallvec", "sqlx-core", "stringprep", @@ -5333,7 +5044,7 @@ dependencies = [ "time", "tracing", "uuid", - "whoami 1.6.1", + "whoami", ] [[package]] @@ -5539,15 +5250,6 @@ 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 = "termtree" version = "0.5.1" @@ -5714,32 +5416,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "tokio-postgres" -version = "0.7.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd8df5ef180f6364759a6f00f7aadda4fbbac86cdee37480826a6ff9f3574ce" -dependencies = [ - "async-trait", - "byteorder", - "bytes", - "fallible-iterator 0.2.0", - "futures-channel", - "futures-util", - "log", - "parking_lot", - "percent-encoding", - "phf", - "pin-project-lite", - "postgres-protocol", - "postgres-types", - "rand 0.10.1", - "socket2 0.6.3", - "tokio", - "tokio-util", - "whoami 2.1.1", -] - [[package]] name = "tokio-stream" version = "0.1.18" @@ -5957,12 +5633,6 @@ dependencies = [ "tree-sitter", ] -[[package]] -name = "twox-hash" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" - [[package]] name = "typeid" version = "1.0.3" @@ -6171,15 +5841,6 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasi" -version = "0.14.7+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" -dependencies = [ - "wasip2", -] - [[package]] name = "wasip2" version = "1.0.3+wasi-0.2.9" @@ -6204,20 +5865,11 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" -[[package]] -name = "wasite" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66fe902b4a6b8028a753d5424909b764ccf79b7a209eac9bf97e59cda9f71a42" -dependencies = [ - "wasi 0.14.7+wasi-0.2.4", -] - [[package]] name = "wasm-bindgen" -version = "0.2.118" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" +checksum = "df52b6d9b87e0c74c9edfa1eb2d9bf85e5d63515474513aa50fa181b3c4f5db1" dependencies = [ "cfg-if", "once_cell", @@ -6229,9 +5881,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.118" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" +checksum = "78b1041f495fb322e64aca85f5756b2172e35cd459376e67f2a6c9dffcedb103" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6239,9 +5891,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.118" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" +checksum = "9dcd0ff20416988a18ac686d4d4d0f6aae9ebf08a389ff5d29012b05af2a1b41" dependencies = [ "bumpalo", "proc-macro2", @@ -6252,9 +5904,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.118" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" +checksum = "49757b3c82ebf16c57d69365a142940b384176c24df52a087fb748e2085359ea" dependencies = [ "unicode-ident", ] @@ -6293,16 +5945,6 @@ dependencies = [ "semver", ] -[[package]] -name = "web-sys" -version = "0.3.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "webpki-roots" version = "0.26.11" @@ -6328,20 +5970,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" dependencies = [ "libredox", - "wasite 0.1.0", -] - -[[package]] -name = "whoami" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6a5b12f9df4f978d2cfdb1bd3bac52433f44393342d7ee9c25f5a1c14c0f45d" -dependencies = [ - "libc", - "libredox", - "objc2-system-configuration", - "wasite 1.0.2", - "web-sys", + "wasite", ] [[package]] @@ -6767,8 +6396,8 @@ dependencies = [ [[package]] name = "wp-cli-core" -version = "1.21.4" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" +version = "1.21.7" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" dependencies = [ "anyhow", "chrono", @@ -6787,8 +6416,8 @@ dependencies = [ [[package]] name = "wp-condition" -version = "1.21.4" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" +version = "1.21.7" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" dependencies = [ "orion_exp", "winnow 1.0.2", @@ -6812,8 +6441,8 @@ dependencies = [ [[package]] name = "wp-config" -version = "1.21.4" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" +version = "1.21.7" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" dependencies = [ "anyhow", "async-trait", @@ -6929,8 +6558,8 @@ dependencies = [ [[package]] name = "wp-data-utils" -version = "1.21.4" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" +version = "1.21.7" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" dependencies = [ "arcstr", "chrono", @@ -6947,7 +6576,7 @@ dependencies = [ [[package]] name = "wp-editor" -version = "1.17.2" +version = "1.19.0" dependencies = [ "actix-files", "actix-multipart", @@ -7009,8 +6638,8 @@ dependencies = [ [[package]] name = "wp-engine" -version = "1.21.4" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" +version = "1.21.7" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" dependencies = [ "anyhow", "async-broadcast", @@ -7116,20 +6745,19 @@ dependencies = [ [[package]] name = "wp-knowledge" -version = "0.11.4" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4377c50ff485c70740ce1a93d95c041f31fc8ebd56e576f2209c2dbd584afab1" +checksum = "6f4b6ca94fc9b0323ff52693897e17d256ec4e348421b337d0e6dc909d1223f5" dependencies = [ "anyhow", "async-trait", "chrono", "csv", "enum_dispatch", + "futures", "lazy_static", "log", "lru 0.16.4", - "mysql", - "mysql_async", "orion-error", "orion-variate", "orion_conf", @@ -7138,8 +6766,8 @@ dependencies = [ "rusqlite", "serde", "serde_json", + "sqlx", "tokio", - "tokio-postgres", "wp-error", "wp-log", "wp-model-core", @@ -7214,26 +6842,22 @@ dependencies = [ [[package]] name = "wp-model-core" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c0c153df58a2c0e1cf0ec9023608ca30dcf932c5e0a262b365f7e00d643ade" +checksum = "5c07a682d766cee0c376f63d3f6abbbe67cbf27b3fb9b6a1d0ebf40250e76524" dependencies = [ "bytes", "chrono", - "ipnet", "serde", "serde_derive", - "serde_json", - "smallvec", "smol_str", "thiserror 2.0.18", - "wildmatch", ] [[package]] name = "wp-oml" -version = "1.21.4" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" +version = "1.21.7" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" dependencies = [ "anyhow", "arcstr", @@ -7311,8 +6935,8 @@ dependencies = [ [[package]] name = "wp-proj" -version = "1.21.4" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" +version = "1.21.7" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" dependencies = [ "anyhow", "comfy-table", @@ -7350,8 +6974,8 @@ dependencies = [ [[package]] name = "wp-stats" -version = "1.21.4" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.4#12010366b3e430baeec0a549b3799f660364fc66" +version = "1.21.7" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" dependencies = [ "anyhow", "chrono", @@ -7524,7 +7148,7 @@ dependencies = [ "crc32fast", "crossbeam-utils", "flate2", - "hmac 0.12.1", + "hmac", "pbkdf2", "sha1 0.10.6", "time", diff --git a/Cargo.toml b/Cargo.toml index 582c490..502c497 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wp-editor" -version = "1.17.2" +version = "1.19.0" edition = "2024" build = "build.rs" @@ -63,11 +63,11 @@ wp-editor-migrations = { path = "crates/migrations" } wp-lang = "0.1" wp_knowledge = { package = "wp-knowledge", version = "0.11"} -wp-engine = { git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.4" } -wp-config = { package = "wp-config", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.4" } -wp_oml = { package = "wp-oml", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.4" } -wp_data_utils = { package = "wp-data-utils", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.4" } -wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.4" } +wp-engine = { git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.7" } +wp-config = { package = "wp-config", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.7" } +wp_oml = { package = "wp-oml", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.7" } +wp_data_utils = { package = "wp-data-utils", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.7" } +wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.7" } #wp-engine = { path = "../wp-motor" } #wp-config = { path = "../wp-motor/crates/wp-config" } diff --git a/dist/install-manifest-alpha.json b/dist/install-manifest-alpha.json index 6a8732b..541dadc 100644 --- a/dist/install-manifest-alpha.json +++ b/dist/install-manifest-alpha.json @@ -1,11 +1,11 @@ { "releases": [ { - "version": "v1.17.2-alpha", + "version": "v1.19.0-alpha", "artifacts": { - "darwin-arm64": "wp-editor-v1.17.2-alpha-aarch64-apple-darwin.tar.gz", - "linux-arm64": "wp-editor-v1.17.2-alpha-aarch64-unknown-linux-gnu.tar.gz", - "linux-x86_64": "wp-editor-v1.17.2-alpha-x86_64-unknown-linux-gnu.tar.gz" + "darwin-arm64": "wp-editor-v1.19.0-alpha-aarch64-apple-darwin.tar.gz", + "linux-arm64": "wp-editor-v1.19.0-alpha-aarch64-unknown-linux-gnu.tar.gz", + "linux-x86_64": "wp-editor-v1.19.0-alpha-x86_64-unknown-linux-gnu.tar.gz" } } ] diff --git a/version.txt b/version.txt index 0e1f39b..c1af674 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.17.2 \ No newline at end of file +1.19.0 \ No newline at end of file diff --git a/web/package-lock.json b/web/package-lock.json index ee61589..9c6b49f 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -215,6 +215,7 @@ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", @@ -230,6 +231,7 @@ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } @@ -438,7 +440,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -482,7 +483,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -2012,7 +2012,8 @@ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/chai": { "version": "5.2.3", @@ -2229,7 +2230,6 @@ "integrity": "sha512-rkoPH+RqWopVxDnCBE/ysIdfQ2A7j1eDmW8tCxxrR9nnFBa9jKf86VgsSAzxBd1x+ny0GC4JgiD3SNfRHv3pOg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/utils": "4.0.16", "fflate": "^0.8.2", @@ -2266,7 +2266,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2364,7 +2363,6 @@ "resolved": "https://registry.npmjs.org/antd/-/antd-5.29.3.tgz", "integrity": "sha512-3DdbGCa9tWAJGcCJ6rzR8EJFsv2CtyEbkVabZE14pfgUHfCicWCj0/QzQVLDYg8CPfQk9BH7fHCoTXHTy7MP/A==", "license": "MIT", - "peer": true, "dependencies": { "@ant-design/colors": "^7.2.1", "@ant-design/cssinjs": "^1.23.0", @@ -2456,7 +2454,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/axios": { "version": "1.13.2", @@ -2513,6 +2512,7 @@ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", + "peer": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -2639,6 +2639,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", + "peer": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2811,6 +2812,7 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.4.0" } @@ -2864,13 +2866,15 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", + "peer": true, "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -2898,6 +2902,7 @@ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" } @@ -2907,6 +2912,7 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" } @@ -2923,6 +2929,7 @@ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", + "peer": true, "dependencies": { "es-errors": "^1.3.0" }, @@ -2935,6 +2942,7 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", + "peer": true, "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -3004,7 +3012,6 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -3330,6 +3337,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=4.0" }, @@ -3344,6 +3352,7 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "license": "MIT", + "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -3390,6 +3399,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3399,6 +3409,7 @@ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", + "peer": true, "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -3423,6 +3434,7 @@ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", + "peer": true, "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -3499,6 +3511,7 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" }, @@ -3528,6 +3541,7 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" }, @@ -3540,6 +3554,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", + "peer": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -3555,6 +3570,7 @@ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", + "peer": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -3696,7 +3712,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4" }, @@ -3905,7 +3920,8 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/js-yaml": { "version": "4.1.1", @@ -3926,7 +3942,6 @@ "integrity": "sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@acemir/cssom": "^0.9.28", "@asamuzakjp/dom-selector": "^6.7.6", @@ -4097,6 +4112,7 @@ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -4126,6 +4142,7 @@ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" } @@ -4987,6 +5004,7 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -4996,6 +5014,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", + "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -5240,7 +5259,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -5293,6 +5311,7 @@ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -5308,6 +5327,7 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -5338,7 +5358,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/punycode": { "version": "2.3.1", @@ -5988,7 +6009,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -5998,7 +6018,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -6044,7 +6063,8 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/react-markdown": { "version": "10.1.0", @@ -7072,7 +7092,6 @@ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -7133,7 +7152,6 @@ "integrity": "sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.0.16", "@vitest/mocker": "4.0.16", @@ -7672,7 +7690,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", From 847e97aa7b9f835f5983e3e4107e284468cd09d0 Mon Sep 17 00:00:00 2001 From: unknow Date: Sun, 3 May 2026 15:53:56 +0800 Subject: [PATCH 12/37] =?UTF-8?q?refactor:=20=E9=94=99=E8=AF=AF=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E9=87=8D=E6=9E=84=E4=B8=BA=20orion-error=200.7=20?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E5=8C=96=E4=BD=93=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AppError 从 thiserror 枚举重构为 StructError 的 newtype 包装, 上游结构化错误通过 conv() 保留完整 source chain,消除 .to_string() 拍平。 同步升级 orion-error 0.6→0.7 及相关依赖至 v1.21.9。 --- CHANGELOG.md | 12 ++ Cargo.lock | 138 +++++++++--------- Cargo.toml | 28 ++-- src/error.rs | 312 +++++++++++++++++++++++++---------------- src/server/examples.rs | 7 +- src/utils/knowledge.rs | 4 +- src/utils/wpl.rs | 6 +- tests/error_test.rs | 128 +++++++++-------- version.txt | 2 +- 9 files changed, 359 insertions(+), 278 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c53f07d..01c9a75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,18 @@ 本文件记录所有重要变更,格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/), 版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。 +## [Unreleased] + +### Changed + +- **错误系统重构为 orion-error 0.7 结构化体系** + - `AppError` 从 `thiserror` 派生枚举重构为 `StructError` 的 newtype 包装,配合 `#[derive(OrionError)]` 生成稳定的机器可读身份码(`{category}.{snake_case}` 格式) + - 上游结构化错误(`WplCodeError`、`WparseError`、`OMLCodeError`)通过 `ConvStructError::conv()` 转换,完整保留 source chain、detail、context + - `internal()` 和 `oml_transform()` 构造器通过 `attach_source()` 保留底层 `std::error::Error` 源链 + - `AppReason::Uvs(UvsReason)` 透明变体委托 `UvsReason` 的所有基础设施分类和子类构造器 + - `wpl.rs` 中 `.map_err(AppError::wpl_parse)` 改为直接 `?`,错误转换由 `From` 实现自动处理 + - 升级 `orion-error` 0.6 → 0.7,以及 wp-motor 相关依赖至 v1.21.9 + ## [1.19.2-alpha] - 2026-04-30 ### Changed diff --git a/Cargo.lock b/Cargo.lock index 088a822..92eff89 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -897,9 +897,9 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "bytestring" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "113b4343b5f6617e7ad401ced8de3cc8b012e73a594347c307b90db3e9271289" +checksum = "86566c496f2f47d9b8147a4c8b02ffdb69c919fe0c2b2e7195d22cbba0e635c9" dependencies = [ "bytes", ] @@ -3374,21 +3374,33 @@ dependencies = [ [[package]] name = "orion-error" -version = "0.6.3" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6719d23a898c158da039ec98dd111f209dd1d578290a1ef219b3e70b8a5f3861" +checksum = "fb80edb5308a8db52f47ec6f4b34a1c2b1066f15f8ac5c8ee42b5f2cfc4af3ea" dependencies = [ "derive_more 2.1.1", "log", + "orion-error-derive", "serde", "thiserror 2.0.18", ] +[[package]] +name = "orion-error-derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5979f4f7aae9b0ebb0f4130660e5fb94be1fac2bc9dade32f3a6f24ea703cff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "orion-sec" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfcff2ede38d9e802abc3c998cc73a353ea1022702d3892f4ed55b97eb4c1ed2" +checksum = "e55c59c3c72d715a92029f3fec8139e6667a244408eb9a958476cdacec8d1c80" dependencies = [ "chrono", "contracts", @@ -3411,9 +3423,9 @@ dependencies = [ [[package]] name = "orion-variate" -version = "0.11.2" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd80ca6e997116f470d139f90437a1c6dc090dfeb78eb9360439ada5c36e0c03" +checksum = "22f6f2196bb828c6ac65252e87d733a36377960d1c512282a4eea8f1a1c6b826" dependencies = [ "contracts", "derive-getters", @@ -3435,9 +3447,9 @@ dependencies = [ [[package]] name = "orion_conf" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61f9daa1383db51b6620614bfb3c462b535fcc7e5ac033826fae2b732e35db35" +checksum = "f33a50c04142ea6065269348eb2df6fb93c30e0848fa74631cae658df60c2ef7" dependencies = [ "derive-getters", "derive_more 2.1.1", @@ -3453,8 +3465,8 @@ dependencies = [ [[package]] name = "orion_exp" -version = "1.21.7" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" +version = "1.21.9" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" dependencies = [ "arcstr", "chrono", @@ -3466,8 +3478,8 @@ dependencies = [ [[package]] name = "orion_overload" -version = "1.21.7" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" +version = "1.21.9" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" dependencies = [ "anyhow", "derive-getters", @@ -6396,8 +6408,8 @@ dependencies = [ [[package]] name = "wp-cli-core" -version = "1.21.7" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" +version = "1.21.9" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" dependencies = [ "anyhow", "chrono", @@ -6416,8 +6428,8 @@ dependencies = [ [[package]] name = "wp-condition" -version = "1.21.7" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" +version = "1.21.9" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" dependencies = [ "orion_exp", "winnow 1.0.2", @@ -6426,23 +6438,27 @@ dependencies = [ [[package]] name = "wp-conf-base" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b3728590c8546e8212f659145b07f064bde39ca74ee240cbf1ff69ab11f8fd" +checksum = "54f21436bf227bd6a08544a2df036e03e4a661ed5fbfe31305f3e16956800ac9" dependencies = [ "anyhow", + "derive_more 2.1.1", "log", + "orion-error", "orion-variate", "orion_conf", "serde", + "toml 1.1.2+spec-1.1.0", + "winnow 1.0.2", "wp-connector-api", "wp-model-core", ] [[package]] name = "wp-config" -version = "1.21.7" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" +version = "1.21.9" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" dependencies = [ "anyhow", "async-trait", @@ -6481,9 +6497,9 @@ dependencies = [ [[package]] name = "wp-connector-api" -version = "0.8.2" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b4cf401c324390f8f45912e4b83f81ac61888621f1f705850b50b171c7e162f" +checksum = "d4100180cc9d3af7f2a1ca55a659f0a80887d202bdbf4e8b39b3ad5e8d831884" dependencies = [ "anyhow", "async-broadcast", @@ -6496,16 +6512,15 @@ dependencies = [ "serde_json", "smallvec", "smol_str", - "thiserror 2.0.18", "toml 1.1.2+spec-1.1.0", "wp-model-core", ] [[package]] name = "wp-core-connectors" -version = "0.1.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a86ee3574bad929ca0c94b0fa11a7126ad232c737843a282d3ea188f8423e7c9" +checksum = "56bd7e4a1d38fab912c692f4d825875b1c4e51d616fadaf88161d83411ab1200" dependencies = [ "anyhow", "arrow", @@ -6535,14 +6550,6 @@ dependencies = [ "wp-model-core", ] -[[package]] -name = "wp-ctrl-api" -version = "0.1.0" -source = "git+https://github.com/wp-labs/wp-advanced-api?tag=v0.1.0#9ed1d5c9f7c5fde300e6d9b6306bf0607095181b" -dependencies = [ - "serde", -] - [[package]] name = "wp-data-fmt" version = "0.2.4" @@ -6558,8 +6565,8 @@ dependencies = [ [[package]] name = "wp-data-utils" -version = "1.21.7" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" +version = "1.21.9" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" dependencies = [ "arcstr", "chrono", @@ -6576,7 +6583,7 @@ dependencies = [ [[package]] name = "wp-editor" -version = "1.19.0" +version = "1.19.1" dependencies = [ "actix-files", "actix-multipart", @@ -6638,8 +6645,8 @@ dependencies = [ [[package]] name = "wp-engine" -version = "1.21.7" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" +version = "1.21.9" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" dependencies = [ "anyhow", "async-broadcast", @@ -6696,15 +6703,12 @@ dependencies = [ "wildmatch", "winnow 1.0.2", "wp-arrow", - "wp-cli-core", "wp-conf-base", "wp-config", "wp-connector-api", "wp-core-connectors", - "wp-ctrl-api", "wp-data-fmt", "wp-data-utils", - "wp-enrich-api", "wp-error", "wp-knowledge", "wp-lang", @@ -6717,19 +6721,11 @@ dependencies = [ "wp-stats", ] -[[package]] -name = "wp-enrich-api" -version = "0.1.0" -source = "git+https://github.com/wp-labs/wp-advanced-api?tag=v0.1.0#9ed1d5c9f7c5fde300e6d9b6306bf0607095181b" -dependencies = [ - "wp-model-core", -] - [[package]] name = "wp-error" -version = "0.8.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96619c8b1bf018e7cca7e492e594996ff2fcb0be3b18e6a78b6b51dff7259230" +checksum = "19c068cfb9d0a741cc35a2220cf2f1f528beb87ad231abf8dfad51f328521d2a" dependencies = [ "derive_more 2.1.1", "orion-error", @@ -6745,14 +6741,15 @@ dependencies = [ [[package]] name = "wp-knowledge" -version = "0.11.6" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f4b6ca94fc9b0323ff52693897e17d256ec4e348421b337d0e6dc909d1223f5" +checksum = "58233801bdb3adbb223b3b47c9e4a36f71717621180aadcae6ca2a5c87121eba" dependencies = [ "anyhow", "async-trait", "chrono", "csv", + "derive_more 2.1.1", "enum_dispatch", "futures", "lazy_static", @@ -6768,19 +6765,17 @@ dependencies = [ "serde_json", "sqlx", "tokio", - "wp-error", "wp-log", "wp-model-core", ] [[package]] name = "wp-lang" -version = "0.1.10" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "848aed1a98f61e8fcb3be5a76a8753e603ed72ee64999fcdceaa8146be1a62d2" +checksum = "b83089df6f012fa7f20b730e2f1efe04bf0e6bbd997631197b1ca64279f02096" dependencies = [ "ahash 0.8.12", - "anyhow", "base64 0.22.1", "bytes", "chrono", @@ -6819,9 +6814,9 @@ dependencies = [ [[package]] name = "wp-log" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e867a8c80d4b365bf772e6f693bc5de71ce976a493d9bc5bdccb64108761586c" +checksum = "5d0079b116107506944cde01f86e5a52eb5f85eee7b89bf0651c7533141e0236" dependencies = [ "anyhow", "chrono", @@ -6856,8 +6851,8 @@ dependencies = [ [[package]] name = "wp-oml" -version = "1.21.7" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" +version = "1.21.9" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" dependencies = [ "anyhow", "arcstr", @@ -6867,6 +6862,7 @@ dependencies = [ "contracts", "derive-getters", "derive_builder", + "derive_more 2.1.1", "encoding_rs", "enum_dispatch", "escape8259", @@ -6911,9 +6907,9 @@ dependencies = [ [[package]] name = "wp-parse-api" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9108cdcb3f90e5b4f986ec7a1403f85e967916a21e660089b12690e5ecf72c32" +checksum = "ebd7abf02a829db858f9899a5c476ec77798d926a4517e5ed2d7bf96a7c6d4c0" dependencies = [ "bytes", "derive_more 2.1.1", @@ -6935,8 +6931,8 @@ dependencies = [ [[package]] name = "wp-proj" -version = "1.21.7" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" +version = "1.21.9" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" dependencies = [ "anyhow", "comfy-table", @@ -6963,9 +6959,9 @@ dependencies = [ [[package]] name = "wp-specs" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efaa11920f7fd004e99ecaedab1d87261dadfb24129bccb4385885d0ff4c209b" +checksum = "f349e7502371cc7e87b5d3e4ef9d28886fe52310d13a1d0ebd3b874858fc17e6" dependencies = [ "serde", "wildmatch", @@ -6974,8 +6970,8 @@ dependencies = [ [[package]] name = "wp-stats" -version = "1.21.7" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.7#fd5a836950968ee4954c0d89c695526f08be1d84" +version = "1.21.9" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 502c497..651eaa0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wp-editor" -version = "1.19.0" +version = "1.19.1" edition = "2024" build = "build.rs" @@ -36,7 +36,7 @@ thiserror = "2.0" strum = { version = "0.26", features = ["derive"] } regex = "1.12" base64 = "0.22" -orion-error = "0.6" +orion-error = "0.7" tempfile = "3.24" tree-sitter = "0.26.6" tree-sitter-wpl = { package = "tree-sitter-wpl", git = "https://github.com/wp-labs/tree-sitter-wpl.git", branch = "main" } @@ -49,25 +49,25 @@ sea-orm = { version = "1.1", features = [ "with-chrono", ] }# --- External: Open API (Public Interfaces) --- -wp-connector-api = "0.8" +wp-connector-api = "0.9" #wp-parse-api = "0.8" wp-model-core = "0.8" # --- External: Infrastructure Libraries --- -wp-log = "0.2" -wp-error = "0.8" -wp-specs = "0.8" -wp-conf-base = "0.2" +wp-log = "0.3" +wp-error = "0.9" +wp-specs = "0.9" +wp-conf-base = "0.3" wp-data-fmt = "0.2" wp-editor-migrations = { path = "crates/migrations" } -wp-lang = "0.1" -wp_knowledge = { package = "wp-knowledge", version = "0.11"} +wp-lang = "0.2.1" +wp_knowledge = { package = "wp-knowledge", version = "0.12"} -wp-engine = { git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.7" } -wp-config = { package = "wp-config", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.7" } -wp_oml = { package = "wp-oml", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.7" } -wp_data_utils = { package = "wp-data-utils", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.7" } -wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.7" } +wp-engine = { git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.9" } +wp-config = { package = "wp-config", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.9" } +wp_oml = { package = "wp-oml", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.9" } +wp_data_utils = { package = "wp-data-utils", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.9" } +wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.9" } #wp-engine = { path = "../wp-motor" } #wp-config = { path = "../wp-motor/crates/wp-config" } diff --git a/src/error.rs b/src/error.rs index c898b3b..7cae01d 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,196 +1,258 @@ use actix_web::{HttpResponse, ResponseError}; +use orion_error::conversion_ext::ConvStructError; +use orion_error::{ErrorIdentityProvider, OrionError, StructError, UvsReason}; use serde::Serialize; -use std::fmt::Display; -use wp_error::parse_error::OMLCodeError; +use std::fmt; +use wp_error::parse_error::OMLCodeReason; +use wpl::parser::error::WplCodeReason; use wpl::WparseReason; -#[derive(Debug, Serialize)] -pub struct ErrorBody { - pub success: bool, - pub error: ErrorDetail, -} +// ── Domain Reason ────────────────────────────────────────────────────────── -#[derive(Debug, Serialize)] -pub struct ErrorDetail { - pub code: &'static str, - pub message: String, - #[serde(skip_serializing_if = "Option::is_none")] - pub details: Option, -} - -#[derive(Debug, thiserror::Error)] -pub enum AppError { - #[error("连接 ID {connection_id} 不存在或已删除")] +#[derive(Debug, Clone, PartialEq, OrionError)] +pub enum AppReason { + #[orion_error(identity = "biz.invalid_connection", message = "连接 ID 不存在或已删除")] InvalidConnection { connection_id: i32 }, - #[error("该资源不属于指定连接")] + #[orion_error(identity = "biz.connection_mismatch", message = "该资源不属于指定连接")] ConnectionMismatch { resource_id: i32, resource_connection_id: i32, requested_connection_id: i32, }, - #[error("资源不存在: {0}")] + #[orion_error(identity = "biz.not_found", message = "资源不存在")] NotFound(String), - #[error("参数验证失败: {0}")] + #[orion_error(identity = "biz.validation_error", message = "参数验证失败")] Validation(String), - #[error("服务器内部错误: {0}")] + #[orion_error(identity = "sys.internal_error", message = "服务器内部错误")] Internal(String), - // Git/Gitea 相关错误 - #[error("Git 操作失败: {0}")] + #[orion_error(identity = "sys.git_error", message = "Git 操作失败")] Git(String), - // WPL 解析相关错误 - #[error("WPL 解析失败: {0}")] + #[orion_error(identity = "biz.wpl_parse_error", message = "WPL 解析失败")] WplParse(String), - #[error("Wpl 解析失败: {0}")] - WplParseOrion(#[from] orion_error::StructError), - - // OML 转换相关错误 - #[error("OML 转换失败: {0}")] + #[orion_error(identity = "biz.oml_transform_error", message = "OML 转换失败")] OmlTransform(String), - //OmlTransform(anyhow::Error), - #[error("OML 解析失败: {0}")] - OmlParseOrion(#[from] OMLCodeError), - // 调试相关错误 - #[error("未找到解析结果,请先执行日志解析")] + #[orion_error(identity = "biz.no_parse_result", message = "未找到解析结果")] NoParseResult, - // 连接测试相关错误 - #[error("端口 {addr} 不可达: {reason}")] + #[orion_error(identity = "sys.port_unreachable", message = "端口不可达")] PortUnreachable { addr: String, reason: String }, - #[error("Git Token 无效: {reason}")] - InvalidGitToken { reason: String }, + #[orion_error(identity = "biz.invalid_git_token", message = "Git Token 无效")] + InvalidGitToken(String), - #[error("Base64 解码失败: {0}")] + #[orion_error(identity = "biz.invalid_base64", message = "Base64 解码失败")] InvalidBase64(String), + + #[orion_error(transparent)] + Uvs(UvsReason), +} + +// ── From for AppReason ───────────────────────────────────── + +impl From for AppReason { + fn from(r: WplCodeReason) -> Self { + match r { + WplCodeReason::Plugin(s) => AppReason::WplParse(s), + WplCodeReason::Syntax(s) => AppReason::WplParse(s), + WplCodeReason::Empty(s) => AppReason::WplParse(s), + WplCodeReason::UnSupport(s) => AppReason::WplParse(s), + WplCodeReason::Uvs(uvs) => AppReason::Uvs(uvs), + } + } } +impl From for AppReason { + fn from(r: WparseReason) -> Self { + match r { + WparseReason::Plugin(s) => AppReason::WplParse(s), + WparseReason::NotMatch => AppReason::WplParse("规则不匹配".into()), + WparseReason::LineProc(s) => AppReason::WplParse(s), + WparseReason::Uvs(uvs) => AppReason::Uvs(uvs), + } + } +} + +impl From for AppReason { + fn from(r: OMLCodeReason) -> Self { + match r { + OMLCodeReason::Syntax(s) => AppReason::OmlTransform(s), + OMLCodeReason::NotFound(s) => AppReason::NotFound(s), + OMLCodeReason::Uvs(uvs) => AppReason::Uvs(uvs), + } + } +} + +// ── AppError newtype ─────────────────────────────────────────────────────── + +#[derive(Debug)] +pub struct AppError(StructError); + impl AppError { pub fn invalid_connection(connection_id: i32) -> Self { - AppError::InvalidConnection { connection_id } + AppError(StructError::from(AppReason::InvalidConnection { connection_id })) } - pub fn internal(e: E) -> Self { - AppError::Internal(e.to_string()) + pub fn internal(e: E) -> Self { + AppError( + StructError::builder(AppReason::Internal(e.to_string())) + .attach_source(e) + .finish(), + ) } - pub fn git(e: E) -> Self { - AppError::Git(e.to_string()) + pub fn internal_msg(msg: impl Into) -> Self { + AppError(StructError::from(AppReason::Internal(msg.into()))) } - pub fn wpl_parse(e: E) -> Self - where - E: Display, - { - AppError::WplParse(e.to_string()) + pub fn git(msg: impl Into) -> Self { + AppError(StructError::from(AppReason::Git(msg.into()))) + } + + pub fn wpl_parse_msg(msg: impl Into) -> Self { + let msg = msg.into(); + AppError(StructError::from(AppReason::WplParse(msg.clone())).with_detail(msg)) } pub fn wpl_best_error(depth: usize, hint: impl Into) -> Self { let hint_str = hint.into(); let err_msg = format!("解析深度: {depth}\n{hint_str}"); - AppError::WplParse(err_msg) - } - - pub fn wpl_parse_msg(msg: impl Into) -> Self { - AppError::WplParse(msg.into()) + AppError(StructError::from(AppReason::WplParse(err_msg.clone())).with_detail(err_msg)) } - pub fn oml_transform(e: E) -> Self - where - E: std::error::Error + Send + Sync + Display + 'static, - { - AppError::OmlTransform(e.to_string()) + pub fn oml_transform(e: E) -> Self { + AppError( + StructError::builder(AppReason::OmlTransform(e.to_string())) + .attach_source(e) + .finish(), + ) } pub fn oml_transform_msg(msg: impl Into) -> Self { - AppError::OmlTransform(msg.into()) + AppError(StructError::from(AppReason::OmlTransform(msg.into()))) } - /// 创建 NotFound 错误 + pub fn not_found(msg: impl Into) -> Self { - AppError::NotFound(msg.into()) + let msg = msg.into(); + AppError(StructError::from(AppReason::NotFound(msg.clone())).with_detail(msg)) } - /// 创建 Validation 错误 pub fn validation(msg: impl Into) -> Self { - AppError::Validation(msg.into()) + let msg = msg.into(); + AppError(StructError::from(AppReason::Validation(msg.clone())).with_detail(msg)) } - /// 创建 PortUnreachable 错误 - pub fn port_unreachable(addr: impl Into, reason: impl Display) -> Self { - AppError::PortUnreachable { + pub fn port_unreachable(addr: impl Into, reason: impl fmt::Display) -> Self { + AppError(StructError::from(AppReason::PortUnreachable { addr: addr.into(), reason: reason.to_string(), - } + })) } - /// 创建 InvalidGitToken 错误 pub fn invalid_git_token(reason: impl Into) -> Self { - AppError::InvalidGitToken { - reason: reason.into(), - } + AppError(StructError::from(AppReason::InvalidGitToken(reason.into()))) } - fn code(&self) -> &'static str { - match self { - AppError::InvalidConnection { .. } => "INVALID_CONNECTION", - AppError::ConnectionMismatch { .. } => "CONNECTION_MISMATCH", - AppError::NotFound(_) => "NOT_FOUND", - AppError::Validation(_) => "VALIDATION_ERROR", - AppError::Internal(_) => "INTERNAL_ERROR", - AppError::Git(_) => "GIT_ERROR", - AppError::WplParse(_) => "WPL_PARSE_ERROR", - AppError::OmlTransform(_) => "OML_TRANSFORM_ERROR", - AppError::NoParseResult => "NO_PARSE_RESULT", - AppError::PortUnreachable { .. } => "PORT_UNREACHABLE", - AppError::InvalidGitToken { .. } => "INVALID_GIT_TOKEN", - AppError::InvalidBase64(_) => "INVALID_BASE64", - AppError::WplParseOrion(_) => "WPL_PARSE_ORION_ERROR", - AppError::OmlParseOrion(_) => "OML_PARSE_ORION_ERROR", - } + pub fn reason(&self) -> &AppReason { + self.0.reason() + } + + pub fn stable_code(&self) -> &'static str { + self.0.stable_code() + } +} + +impl fmt::Display for AppError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Display::fmt(&self.0, f) } } +// ── From impls ───────────────────────────────────────────────────────────── + +impl From for AppError { + fn from(reason: AppReason) -> Self { + AppError(StructError::from(reason)) + } +} + +impl From> for AppError { + fn from(e: StructError) -> Self { + AppError(e.conv()) + } +} + +impl From> for AppError { + fn from(e: StructError) -> Self { + AppError(e.conv()) + } +} + +impl From> for AppError { + fn from(e: StructError) -> Self { + AppError(e.conv()) + } +} + +// ── ResponseError ────────────────────────────────────────────────────────── + +#[derive(Debug, Serialize)] +pub struct ErrorBody { + pub success: bool, + pub error: ErrorDetail, +} + +#[derive(Debug, Serialize)] +pub struct ErrorDetail { + pub code: &'static str, + pub message: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub details: Option, +} + impl ResponseError for AppError { fn error_response(&self) -> HttpResponse { use actix_web::http::StatusCode; - let status = match self { - // 400 Bad Request - 客户端输入错误 - AppError::InvalidConnection { .. } - | AppError::Validation(_) - | AppError::WplParse(_) - | AppError::OmlTransform(_) - | AppError::NoParseResult - | AppError::PortUnreachable { .. } - | AppError::OmlParseOrion(_) - | AppError::WplParseOrion(_) - | AppError::InvalidGitToken { .. } => StatusCode::BAD_REQUEST, - - // 403 Forbidden - 权限/关联错误 - AppError::ConnectionMismatch { .. } => StatusCode::FORBIDDEN, - - // 404 Not Found - 资源不存在 - AppError::NotFound(_) => StatusCode::NOT_FOUND, - - // 500 Internal Server Error - 服务器内部错误 - AppError::Internal(_) | AppError::Git(_) => StatusCode::INTERNAL_SERVER_ERROR, - - // 500 Bad Request - Base64 解码错误 - AppError::InvalidBase64(_) => StatusCode::INTERNAL_SERVER_ERROR, + let reason = self.reason(); + + let status = match reason { + AppReason::InvalidConnection { .. } + | AppReason::Validation(_) + | AppReason::WplParse(_) + | AppReason::OmlTransform(_) + | AppReason::NoParseResult + | AppReason::PortUnreachable { .. } + | AppReason::InvalidGitToken(_) => StatusCode::BAD_REQUEST, + + AppReason::ConnectionMismatch { .. } => StatusCode::FORBIDDEN, + + AppReason::NotFound(_) => StatusCode::NOT_FOUND, + + AppReason::Internal(_) + | AppReason::Git(_) + | AppReason::InvalidBase64(_) => StatusCode::INTERNAL_SERVER_ERROR, + + AppReason::Uvs(uvs) => match uvs { + UvsReason::NotFoundError => StatusCode::NOT_FOUND, + UvsReason::ValidationError => StatusCode::BAD_REQUEST, + UvsReason::PermissionError => StatusCode::FORBIDDEN, + _ => StatusCode::INTERNAL_SERVER_ERROR, + }, }; - let details = match self { - AppError::InvalidConnection { connection_id } => { + let details = match reason { + AppReason::InvalidConnection { connection_id } => { Some(serde_json::json!({ "connection_id": connection_id })) } - AppError::ConnectionMismatch { + AppReason::ConnectionMismatch { resource_id, resource_connection_id, requested_connection_id, @@ -199,17 +261,19 @@ impl ResponseError for AppError { "resource_connection_id": resource_connection_id, "requested_connection_id": requested_connection_id, })), - AppError::PortUnreachable { addr, reason } => { - Some(serde_json::json!({ "addr": addr, "reason": reason })) + AppReason::PortUnreachable { addr, reason: msg } => { + Some(serde_json::json!({ "addr": addr, "reason": msg })) + } + AppReason::InvalidGitToken(reason) => { + Some(serde_json::json!({ "reason": reason })) } - AppError::InvalidGitToken { reason } => Some(serde_json::json!({ "reason": reason })), _ => None, }; let body = ErrorBody { success: false, error: ErrorDetail { - code: self.code(), + code: self.stable_code(), message: self.to_string(), details, }, @@ -219,7 +283,8 @@ impl ResponseError for AppError { } } -/// 通用数据库错误,供所有仓储层复用 +// ── DbError ──────────────────────────────────────────────────────────────── + #[derive(Debug, thiserror::Error)] pub enum DbError { #[error("{entity} 不存在")] @@ -237,12 +302,11 @@ impl DbError { } } -/// 自动转换 DbError 为 AppError impl From for AppError { fn from(e: DbError) -> Self { match e { DbError::NotFound { entity } => { - AppError::NotFound(format!("{} 不存在或已删除", entity)) + AppError::not_found(format!("{} 不存在或已删除", entity)) } DbError::Db(db_err) => AppError::internal(db_err), } diff --git a/src/server/examples.rs b/src/server/examples.rs index c495322..cec292e 100644 --- a/src/server/examples.rs +++ b/src/server/examples.rs @@ -41,9 +41,10 @@ pub fn wpl_examples( } example.sample_data = sample_data.clone(); - let code = WplCode::build(wpl_path.clone(), &contents)?; + let code = WplCode::build(wpl_path.clone(), &contents) + .map_err(|e| e.into_std())?; - let pkg = code.parse_pkg()?; + let pkg = code.parse_pkg().map_err(|e| e.into_std())?; let pkg_name_raw = pkg.name().to_string(); let mut pkg_name = pkg_name_raw.trim(); pkg_name = pkg_name.strip_suffix('/').unwrap_or(pkg_name); @@ -95,7 +96,7 @@ pub async fn oml_examples( // 去除注释 contents = remove_annotations(&contents); let mut parse_input = contents.as_str(); - let code = oml_parse(&mut parse_input, "").await?; + let code = oml_parse(&mut parse_input, "").await.map_err(|e| e.into_std())?; results.push((code.rules().clone(), oml_fmt)); return Ok(results); } diff --git a/src/utils/knowledge.rs b/src/utils/knowledge.rs index 75efddd..f5487b0 100644 --- a/src/utils/knowledge.rs +++ b/src/utils/knowledge.rs @@ -50,7 +50,7 @@ pub fn sql_knowdb_list(_connection_id: i32) -> AnyResult> { pub fn load_knowledge(project_dir: &str) -> AnyResult<()> { let root = PathBuf::from(&project_dir).canonicalize().map_err(|e| { error!("无法解析项目目录路径: {}", e); - AppError::internal(e) + AppError::internal(e).into_std() })?; let knowdb_path = root.join("models/knowledge/knowdb.toml"); @@ -66,7 +66,7 @@ pub fn load_knowledge(project_dir: &str) -> AnyResult<()> { ); if let Err(e) = facade::init_thread_cloned_from_knowdb(&root, &knowdb_path, &auth_uri) { error!("初始化知识库失败:{:?}", e); - return Err(AppError::internal(e).into()); + return Err(AppError::internal(e).into_std().into()); } Ok(()) } diff --git a/src/utils/wpl.rs b/src/utils/wpl.rs index 831836d..7f21c6b 100644 --- a/src/utils/wpl.rs +++ b/src/utils/wpl.rs @@ -38,8 +38,8 @@ pub fn record_to_fields(record: &DataRecord) -> Vec { // 内部/其他模块使用:返回原始 DataRecord,供 OML 等后续处理 pub fn warp_check_record(wpl: &str, data: &str) -> Result { // 保留解析错误中的换行与指示符,避免转义 - let code = WplCode::build(PathBuf::from(""), wpl).map_err(AppError::wpl_parse)?; - let wpl_package = code.parse_pkg().map_err(AppError::wpl_parse)?; + let code = WplCode::build(PathBuf::from(""), wpl)?; + let wpl_package = code.parse_pkg()?; // let wpl_package = parse_wpl_package(wpl)?; let rule_items = extract_rule_items(&wpl_package); @@ -54,7 +54,7 @@ fn try_parse_with_rules(rule_items: Vec, data: &str) -> Result { diff --git a/tests/error_test.rs b/tests/error_test.rs index 40c49b7..e02bba9 100644 --- a/tests/error_test.rs +++ b/tests/error_test.rs @@ -1,76 +1,92 @@ use actix_web::{ResponseError, http::StatusCode}; use serde_json::Value; -use wp_editor::error::AppError; +use wp_editor::error::{AppError, AppReason, DbError}; -/// 测试AppError的各种创建方法 -/// 验证所有错误类型都能正确创建,包括参数传递和类型匹配 #[actix_web::test] async fn test_app_error_creation() { - // 测试各种错误创建方法 let conn_err = AppError::invalid_connection(123); - assert!(matches!( - conn_err, - AppError::InvalidConnection { connection_id: 123 } - )); + assert_eq!( + conn_err.reason(), + &AppReason::InvalidConnection { connection_id: 123 } + ); - let internal_err = AppError::internal("test error"); - assert!(matches!(internal_err, AppError::Internal(_))); + let internal_err = AppError::internal_msg("test error"); + assert_eq!( + internal_err.reason(), + &AppReason::Internal("test error".into()) + ); let git_err = AppError::git("git failed"); - assert!(matches!(git_err, AppError::Git(_))); + assert_eq!(git_err.reason(), &AppReason::Git("git failed".into())); - let wpl_err = AppError::wpl_parse("parse failed"); - assert!(matches!(wpl_err, AppError::WplParse(_))); + let wpl_msg_err = AppError::wpl_parse_msg("parse failed"); + assert_eq!( + wpl_msg_err.reason(), + &AppReason::WplParse("parse failed".into()) + ); let oml_err = AppError::oml_transform_msg("transform failed"); - assert!(matches!(oml_err, AppError::OmlTransform(_))); + assert_eq!( + oml_err.reason(), + &AppReason::OmlTransform("transform failed".into()) + ); let not_found_err = AppError::not_found("resource not found"); - assert!(matches!(not_found_err, AppError::NotFound(_))); + assert_eq!( + not_found_err.reason(), + &AppReason::NotFound("resource not found".into()) + ); let validation_err = AppError::validation("invalid input"); - assert!(matches!(validation_err, AppError::Validation(_))); + assert_eq!( + validation_err.reason(), + &AppReason::Validation("invalid input".into()) + ); let port_err = AppError::port_unreachable("localhost:8080", "connection refused"); - assert!(matches!(port_err, AppError::PortUnreachable { .. })); + assert_eq!( + port_err.reason(), + &AppReason::PortUnreachable { + addr: "localhost:8080".into(), + reason: "connection refused".into() + } + ); let token_err = AppError::invalid_git_token("invalid token"); - assert!(matches!(token_err, AppError::InvalidGitToken { .. })); + assert_eq!( + token_err.reason(), + &AppReason::InvalidGitToken("invalid token".into()) + ); } -/// 测试AppError的Display trait实现 -/// 验证错误消息能够正确格式化和显示,包含必要的上下文信息 #[actix_web::test] async fn test_app_error_display() { let conn_err = AppError::invalid_connection(123); let display_str = format!("{}", conn_err); - assert!(display_str.contains("123")); - assert!(display_str.contains("连接 ID")); + assert!(display_str.contains("连接 ID 不存在或已删除")); let validation_err = AppError::validation("test validation"); let display_str = format!("{}", validation_err); + assert!(display_str.contains("参数验证失败")); assert!(display_str.contains("test validation")); } -/// 测试AppError的HTTP响应错误转换 -/// 验证错误能够正确转换为HTTP响应,包括状态码和响应体格式 #[actix_web::test] async fn test_app_error_response_error() { - // 测试不同错误的HTTP响应 let test_cases = vec![ (AppError::invalid_connection(123), StatusCode::BAD_REQUEST), (AppError::validation("test"), StatusCode::BAD_REQUEST), (AppError::not_found("test"), StatusCode::NOT_FOUND), ( - AppError::internal("test"), + AppError::internal_msg("test"), StatusCode::INTERNAL_SERVER_ERROR, ), ( - AppError::ConnectionMismatch { + AppError::from(AppReason::ConnectionMismatch { resource_id: 1, resource_connection_id: 2, requested_connection_id: 3, - }, + }), StatusCode::FORBIDDEN, ), ]; @@ -79,7 +95,6 @@ async fn test_app_error_response_error() { let response = error.error_response(); assert_eq!(response.status(), expected_status); - // 验证响应体结构 let body = actix_web::body::to_bytes(response.into_body()) .await .unwrap(); @@ -91,58 +106,51 @@ async fn test_app_error_response_error() { } } -/// 测试DbError的完整功能 -/// 验证DbError的创建、显示和到AppError的转换功能 #[actix_web::test] async fn test_db_error_complete() { - use wp_editor::error::DbError; - - // 测试DbError创建和显示 let not_found_err = DbError::not_found("user"); - assert!(matches!( - not_found_err, - DbError::NotFound { entity: "user" } - )); - let display_str = format!("{}", not_found_err); assert!(display_str.contains("user")); assert!(display_str.contains("不存在")); - // 测试DbError到AppError的转换 let db_not_found = DbError::not_found("connection"); let app_error: AppError = db_not_found.into(); - - assert!(matches!(app_error, AppError::NotFound(_))); - let display_str = format!("{}", app_error); - assert!(display_str.contains("connection")); + assert_eq!( + app_error.reason(), + &AppReason::NotFound("connection 不存在或已删除".into()) + ); + assert_eq!(app_error.stable_code(), "biz.not_found"); } -/// 测试错误代码映射的完整性 -/// 验证所有错误类型都有正确的错误代码映射,用于API响应 #[actix_web::test] async fn test_error_codes() { - // 测试错误代码映射 - let test_cases = vec![ - (AppError::invalid_connection(1), "INVALID_CONNECTION"), - (AppError::not_found("test"), "NOT_FOUND"), - (AppError::validation("test"), "VALIDATION_ERROR"), - (AppError::internal("test"), "INTERNAL_ERROR"), - (AppError::git("test"), "GIT_ERROR"), - (AppError::wpl_parse("test"), "WPL_PARSE_ERROR"), - (AppError::oml_transform_msg("test"), "OML_TRANSFORM_ERROR"), - (AppError::NoParseResult, "NO_PARSE_RESULT"), + let test_cases: Vec<(AppError, &str)> = vec![ + (AppError::invalid_connection(1), "biz.invalid_connection"), + (AppError::not_found("test"), "biz.not_found"), + (AppError::validation("test"), "biz.validation_error"), + (AppError::internal_msg("test"), "sys.internal_error"), + (AppError::git("test"), "sys.git_error"), + (AppError::wpl_parse_msg("test"), "biz.wpl_parse_error"), + (AppError::oml_transform_msg("test"), "biz.oml_transform_error"), + (AppError::from(AppReason::NoParseResult), "biz.no_parse_result"), ( AppError::port_unreachable("addr", "reason"), - "PORT_UNREACHABLE", + "sys.port_unreachable", ), - (AppError::invalid_git_token("reason"), "INVALID_GIT_TOKEN"), ( - AppError::InvalidBase64("test".to_string()), - "INVALID_BASE64", + AppError::invalid_git_token("reason"), + "biz.invalid_git_token", ), ]; for (error, expected_code) in test_cases { + assert_eq!( + error.stable_code(), + expected_code, + "expected code '{expected_code}' but got '{}'", + error.stable_code() + ); + let response = error.error_response(); let body = actix_web::body::to_bytes(response.into_body()) .await diff --git a/version.txt b/version.txt index c1af674..7df3a13 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.19.0 \ No newline at end of file +1.19.1 \ No newline at end of file From fca4c50b923d60d78bb13a33fc8811568a089c72 Mon Sep 17 00:00:00 2001 From: unknow Date: Tue, 5 May 2026 14:53:30 +0800 Subject: [PATCH 13/37] up orion-error 0.8 --- CHANGELOG.en.md | 5 +- CHANGELOG.md | 17 +---- Cargo.lock | 159 +++++++++++++++++++---------------------------- Cargo.toml | 28 ++++----- src/error.rs | 85 ++++++++++++++++--------- src/utils/wpl.rs | 6 +- version.txt | 2 +- 7 files changed, 144 insertions(+), 158 deletions(-) diff --git a/CHANGELOG.en.md b/CHANGELOG.en.md index d1f680d..f024e94 100644 --- a/CHANGELOG.en.md +++ b/CHANGELOG.en.md @@ -5,11 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [1.19.2-alpha] - 2026-04-30 +## [1.19.2] - 2026-05-05 ### Changed -- Upgrade wp-motor-related dependencies to v1.21.7 and synchronize the related dependency versions and source references in `Cargo.lock` +- Upgrade the error and WP dependency line: `orion-error 0.8`, `wp-motor v1.21.11`, and `wp-lang 0.3`. - Update the alpha `systemd` service configuration so `ExecStart` and `WorkingDirectory` point directly to `${WORK_DIR}/wp-editor` and `${WORK_DIR}`, simplifying the deployment path layout ## [1.17.2-alpha] - 2026-04-23 @@ -19,7 +19,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Unified version identifiers to `1.17.2` / `v1.17.2-alpha` (synchronized in `Cargo.toml`, `Cargo.lock`, `version.txt`, and `dist/install-manifest-alpha.json`) - Upgrade wp-motor-related dependencies to v1.21.4 - Add the Chinese and English changelog entries for `1.17.2-alpha` -- Fix the grammatical errors caused by the oml formatting. ## [1.17.0-alpha] - 2026-04-16 diff --git a/CHANGELOG.md b/CHANGELOG.md index 01c9a75..ace8d1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,25 +3,14 @@ 本文件记录所有重要变更,格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/), 版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。 -## [Unreleased] +## [1.19.2] - 2026-05-05 ### Changed -- **错误系统重构为 orion-error 0.7 结构化体系** - - `AppError` 从 `thiserror` 派生枚举重构为 `StructError` 的 newtype 包装,配合 `#[derive(OrionError)]` 生成稳定的机器可读身份码(`{category}.{snake_case}` 格式) - - 上游结构化错误(`WplCodeError`、`WparseError`、`OMLCodeError`)通过 `ConvStructError::conv()` 转换,完整保留 source chain、detail、context - - `internal()` 和 `oml_transform()` 构造器通过 `attach_source()` 保留底层 `std::error::Error` 源链 - - `AppReason::Uvs(UvsReason)` 透明变体委托 `UvsReason` 的所有基础设施分类和子类构造器 - - `wpl.rs` 中 `.map_err(AppError::wpl_parse)` 改为直接 `?`,错误转换由 `From` 实现自动处理 - - 升级 `orion-error` 0.6 → 0.7,以及 wp-motor 相关依赖至 v1.21.9 - -## [1.19.2-alpha] - 2026-04-30 - -### Changed - -- 升级 wp-motor 相关依赖至 v1.21.7,并同步 `Cargo.lock` 中相关依赖版本与源码引用 +- 升级错误与 WP 依赖主线:`orion-error 0.8`、`wp-motor v1.21.11`、`wp-lang 0.3`。 - 调整 alpha 环境 `systemd` 服务配置,`ExecStart` 与 `WorkingDirectory` 改为直接指向 `${WORK_DIR}` 下的 `wp-editor` 与工作目录,简化部署路径约束 + ## [1.17.2-alpha] - 2026-04-23 ### Changed diff --git a/Cargo.lock b/Cargo.lock index 92eff89..407d622 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1540,9 +1540,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer 0.12.0", "const-oid 0.10.2", @@ -2730,7 +2730,7 @@ dependencies = [ "bitflags 2.11.1", "libc", "plain", - "redox_syscall 0.7.4", + "redox_syscall 0.7.5", ] [[package]] @@ -3032,9 +3032,9 @@ dependencies = [ [[package]] name = "no_std_io2" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b51ed7824b6e07d354605f4abb3d9d300350701299da96642ee084f5ce631550" +checksum = "418abd1b6d34fbf6cae440dc874771b0525a604428704c76e48b29a5e67b8003" dependencies = [ "memchr", ] @@ -3374,22 +3374,25 @@ dependencies = [ [[package]] name = "orion-error" -version = "0.7.2" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb80edb5308a8db52f47ec6f4b34a1c2b1066f15f8ac5c8ee42b5f2cfc4af3ea" +checksum = "d6fb344e4055f4f9507d475314c22e085ee3e6cc68643d48e3657f76abf88d01" dependencies = [ - "derive_more 2.1.1", + "anyhow", "log", "orion-error-derive", "serde", + "serde_json", + "smol_str", "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", ] [[package]] name = "orion-error-derive" -version = "0.7.2" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5979f4f7aae9b0ebb0f4130660e5fb94be1fac2bc9dade32f3a6f24ea703cff" +checksum = "7a191ed7c746d0bf64a6400b3e37b4c4bdd7a2ad82d260693424dd92a5d4d3eb" dependencies = [ "proc-macro2", "quote", @@ -3398,9 +3401,9 @@ dependencies = [ [[package]] name = "orion-sec" -version = "0.5.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55c59c3c72d715a92029f3fec8139e6667a244408eb9a958476cdacec8d1c80" +checksum = "cb5aec268fc9385600b5f7995fc01eb2cb421a8cc9c5788db9ebf9d0fc8bbf2e" dependencies = [ "chrono", "contracts", @@ -3423,11 +3426,10 @@ dependencies = [ [[package]] name = "orion-variate" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f6f2196bb828c6ac65252e87d733a36377960d1c512282a4eea8f1a1c6b826" +checksum = "03645f3e8e91eaf412d288f5806c4208ae9e98d0820f677973cb52aed5a6a1a5" dependencies = [ - "contracts", "derive-getters", "derive_more 2.1.1", "getset", @@ -3437,19 +3439,14 @@ dependencies = [ "os_info", "serde", "serde_derive", - "serde_ini", - "serde_json", - "serde_yaml", - "thiserror 2.0.18", - "toml 1.1.2+spec-1.1.0", "winnow 1.0.2", ] [[package]] name = "orion_conf" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f33a50c04142ea6065269348eb2df6fb93c30e0848fa74631cae658df60c2ef7" +checksum = "088ee58d7784c683ca4b73f0c2f1c2c32f884b8cd5fddb49644fe4f1667a7145" dependencies = [ "derive-getters", "derive_more 2.1.1", @@ -3459,14 +3456,13 @@ dependencies = [ "serde", "serde_derive", "serde_yaml", - "thiserror 2.0.18", "toml 1.1.2+spec-1.1.0", ] [[package]] name = "orion_exp" -version = "1.21.9" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" +version = "1.21.11" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.11#214a373a51e37d6520e0827fb24e30110cc7ed2c" dependencies = [ "arcstr", "chrono", @@ -3478,8 +3474,8 @@ dependencies = [ [[package]] name = "orion_overload" -version = "1.21.9" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" +version = "1.21.11" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.11#214a373a51e37d6520e0827fb24e30110cc7ed2c" dependencies = [ "anyhow", "derive-getters", @@ -4065,9 +4061,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" +checksum = "4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1b" dependencies = [ "bitflags 2.11.1", ] @@ -4116,12 +4112,6 @@ dependencies = [ "bytecheck", ] -[[package]] -name = "result" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194d8e591e405d1eecf28819740abed6d719d1a2db87fc0bcdedee9a26d55560" - [[package]] name = "ring" version = "0.17.14" @@ -4616,17 +4606,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "serde_ini" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb236687e2bb073a7521c021949be944641e671b8505a94069ca37b656c81139" -dependencies = [ - "result", - "serde", - "void", -] - [[package]] name = "serde_json" version = "1.0.149" @@ -4712,7 +4691,7 @@ checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" dependencies = [ "cfg-if", "cpufeatures 0.3.0", - "digest 0.11.2", + "digest 0.11.3", ] [[package]] @@ -4801,9 +4780,9 @@ dependencies = [ [[package]] name = "siphasher" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "slab" @@ -5396,9 +5375,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.1" +version = "1.52.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" +checksum = "110a78583f19d5cdb2c5ccf321d1290344e71313c6c37d43520d386027d18386" dependencies = [ "bytes", "libc", @@ -5831,12 +5810,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "void" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" - [[package]] name = "walkdir" version = "2.5.0" @@ -6408,8 +6381,8 @@ dependencies = [ [[package]] name = "wp-cli-core" -version = "1.21.9" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" +version = "1.21.11" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.11#214a373a51e37d6520e0827fb24e30110cc7ed2c" dependencies = [ "anyhow", "chrono", @@ -6428,8 +6401,8 @@ dependencies = [ [[package]] name = "wp-condition" -version = "1.21.9" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" +version = "1.21.11" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.11#214a373a51e37d6520e0827fb24e30110cc7ed2c" dependencies = [ "orion_exp", "winnow 1.0.2", @@ -6438,9 +6411,9 @@ dependencies = [ [[package]] name = "wp-conf-base" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54f21436bf227bd6a08544a2df036e03e4a661ed5fbfe31305f3e16956800ac9" +checksum = "986422571fa73ccef4a929a447aa3460961f6dd7f4cb973cf4ceaeb4ac0ac6a9" dependencies = [ "anyhow", "derive_more 2.1.1", @@ -6457,8 +6430,8 @@ dependencies = [ [[package]] name = "wp-config" -version = "1.21.9" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" +version = "1.21.11" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.11#214a373a51e37d6520e0827fb24e30110cc7ed2c" dependencies = [ "anyhow", "async-trait", @@ -6497,15 +6470,13 @@ dependencies = [ [[package]] name = "wp-connector-api" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4100180cc9d3af7f2a1ca55a659f0a80887d202bdbf4e8b39b3ad5e8d831884" +checksum = "7679ff66d428626c693b1f58d644215b421506e1a8610250a862335e25596bf9" dependencies = [ - "anyhow", "async-broadcast", "async-trait", "derive_more 2.1.1", - "once_cell", "orion-error", "serde", "serde_derive", @@ -6518,9 +6489,9 @@ dependencies = [ [[package]] name = "wp-core-connectors" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56bd7e4a1d38fab912c692f4d825875b1c4e51d616fadaf88161d83411ab1200" +checksum = "85956e2b6b0d921ea24e7c961b7170cad9a717a42734d5219a4672d7a03ccef6" dependencies = [ "anyhow", "arrow", @@ -6565,8 +6536,8 @@ dependencies = [ [[package]] name = "wp-data-utils" -version = "1.21.9" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" +version = "1.21.11" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.11#214a373a51e37d6520e0827fb24e30110cc7ed2c" dependencies = [ "arcstr", "chrono", @@ -6583,7 +6554,7 @@ dependencies = [ [[package]] name = "wp-editor" -version = "1.19.1" +version = "1.19.2" dependencies = [ "actix-files", "actix-multipart", @@ -6645,8 +6616,8 @@ dependencies = [ [[package]] name = "wp-engine" -version = "1.21.9" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" +version = "1.21.11" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.11#214a373a51e37d6520e0827fb24e30110cc7ed2c" dependencies = [ "anyhow", "async-broadcast", @@ -6723,9 +6694,9 @@ dependencies = [ [[package]] name = "wp-error" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19c068cfb9d0a741cc35a2220cf2f1f528beb87ad231abf8dfad51f328521d2a" +checksum = "a09d058cbc360fc0b27e225ea7f01cc831c90173fa721eebcd0c661b7af023ff" dependencies = [ "derive_more 2.1.1", "orion-error", @@ -6741,9 +6712,9 @@ dependencies = [ [[package]] name = "wp-knowledge" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58233801bdb3adbb223b3b47c9e4a36f71717621180aadcae6ca2a5c87121eba" +checksum = "3782a15672c57b3c6a721948d33ff21722d95254ca8aa9926f44e5641859ed3d" dependencies = [ "anyhow", "async-trait", @@ -6771,9 +6742,9 @@ dependencies = [ [[package]] name = "wp-lang" -version = "0.2.1" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b83089df6f012fa7f20b730e2f1efe04bf0e6bbd997631197b1ca64279f02096" +checksum = "2393db63848eee8093888282be18a94ea4c50e6c57f14ae28b55540162f7b96e" dependencies = [ "ahash 0.8.12", "base64 0.22.1", @@ -6814,9 +6785,9 @@ dependencies = [ [[package]] name = "wp-log" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0079b116107506944cde01f86e5a52eb5f85eee7b89bf0651c7533141e0236" +checksum = "28c6bc038604182c1cff7a9837ba48fbde0c7a5d2be64f1f29c97a85d8aa1897" dependencies = [ "anyhow", "chrono", @@ -6851,8 +6822,8 @@ dependencies = [ [[package]] name = "wp-oml" -version = "1.21.9" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" +version = "1.21.11" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.11#214a373a51e37d6520e0827fb24e30110cc7ed2c" dependencies = [ "anyhow", "arcstr", @@ -6907,9 +6878,9 @@ dependencies = [ [[package]] name = "wp-parse-api" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd7abf02a829db858f9899a5c476ec77798d926a4517e5ed2d7bf96a7c6d4c0" +checksum = "b0f2b84c367dc690a0859402cdcb553338942cf4badb40028cbf76efb735131b" dependencies = [ "bytes", "derive_more 2.1.1", @@ -6931,8 +6902,8 @@ dependencies = [ [[package]] name = "wp-proj" -version = "1.21.9" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" +version = "1.21.11" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.11#214a373a51e37d6520e0827fb24e30110cc7ed2c" dependencies = [ "anyhow", "comfy-table", @@ -6959,9 +6930,9 @@ dependencies = [ [[package]] name = "wp-specs" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f349e7502371cc7e87b5d3e4ef9d28886fe52310d13a1d0ebd3b874858fc17e6" +checksum = "4f18c33a4568a8400cca073df1e981214eded9cbe61b6b68fa5c331d9d8535c8" dependencies = [ "serde", "wildmatch", @@ -6970,8 +6941,8 @@ dependencies = [ [[package]] name = "wp-stats" -version = "1.21.9" -source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.9#42c130da98ee3c2a9f120c85e191538ca9c37217" +version = "1.21.11" +source = "git+https://github.com/wp-labs/wp-motor?tag=v1.21.11#214a373a51e37d6520e0827fb24e30110cc7ed2c" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 651eaa0..6f06a42 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wp-editor" -version = "1.19.1" +version = "1.19.2" edition = "2024" build = "build.rs" @@ -36,7 +36,7 @@ thiserror = "2.0" strum = { version = "0.26", features = ["derive"] } regex = "1.12" base64 = "0.22" -orion-error = "0.7" +orion-error = "0.8" tempfile = "3.24" tree-sitter = "0.26.6" tree-sitter-wpl = { package = "tree-sitter-wpl", git = "https://github.com/wp-labs/tree-sitter-wpl.git", branch = "main" } @@ -49,25 +49,25 @@ sea-orm = { version = "1.1", features = [ "with-chrono", ] }# --- External: Open API (Public Interfaces) --- -wp-connector-api = "0.9" +wp-connector-api = "0.10" #wp-parse-api = "0.8" wp-model-core = "0.8" # --- External: Infrastructure Libraries --- -wp-log = "0.3" -wp-error = "0.9" -wp-specs = "0.9" -wp-conf-base = "0.3" +wp-log = "0.4" +wp-error = "0.10" +wp-specs = "0.10" +wp-conf-base = "0.4" wp-data-fmt = "0.2" wp-editor-migrations = { path = "crates/migrations" } -wp-lang = "0.2.1" -wp_knowledge = { package = "wp-knowledge", version = "0.12"} +wp-lang = "0.3" +wp_knowledge = { package = "wp-knowledge", version = "0.13"} -wp-engine = { git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.9" } -wp-config = { package = "wp-config", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.9" } -wp_oml = { package = "wp-oml", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.9" } -wp_data_utils = { package = "wp-data-utils", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.9" } -wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.9" } +wp-engine = { git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.11" } +wp-config = { package = "wp-config", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.11" } +wp_oml = { package = "wp-oml", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.11" } +wp_data_utils = { package = "wp-data-utils", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.11" } +wp-proj = { package = "wp-proj", git = "https://github.com/wp-labs/wp-motor", tag = "v1.21.11" } #wp-engine = { path = "../wp-motor" } #wp-config = { path = "../wp-motor/crates/wp-config" } diff --git a/src/error.rs b/src/error.rs index 7cae01d..f52dfe8 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,17 +1,19 @@ use actix_web::{HttpResponse, ResponseError}; -use orion_error::conversion_ext::ConvStructError; -use orion_error::{ErrorIdentityProvider, OrionError, StructError, UvsReason}; +use orion_error::{OrionError, StructError, UnifiedReason, reason::ErrorIdentityProvider}; use serde::Serialize; use std::fmt; use wp_error::parse_error::OMLCodeReason; -use wpl::parser::error::WplCodeReason; use wpl::WparseReason; +use wpl::parser::error::WplCodeReason; // ── Domain Reason ────────────────────────────────────────────────────────── #[derive(Debug, Clone, PartialEq, OrionError)] pub enum AppReason { - #[orion_error(identity = "biz.invalid_connection", message = "连接 ID 不存在或已删除")] + #[orion_error( + identity = "biz.invalid_connection", + message = "连接 ID 不存在或已删除" + )] InvalidConnection { connection_id: i32 }, #[orion_error(identity = "biz.connection_mismatch", message = "该资源不属于指定连接")] @@ -52,7 +54,7 @@ pub enum AppReason { InvalidBase64(String), #[orion_error(transparent)] - Uvs(UvsReason), + Uvs(UnifiedReason), } // ── From for AppReason ───────────────────────────────────── @@ -60,10 +62,10 @@ pub enum AppReason { impl From for AppReason { fn from(r: WplCodeReason) -> Self { match r { - WplCodeReason::Plugin(s) => AppReason::WplParse(s), - WplCodeReason::Syntax(s) => AppReason::WplParse(s), - WplCodeReason::Empty(s) => AppReason::WplParse(s), - WplCodeReason::UnSupport(s) => AppReason::WplParse(s), + WplCodeReason::Plugin + | WplCodeReason::Syntax + | WplCodeReason::Empty + | WplCodeReason::UnSupport => AppReason::WplParse(String::new()), WplCodeReason::Uvs(uvs) => AppReason::Uvs(uvs), } } @@ -97,23 +99,27 @@ pub struct AppError(StructError); impl AppError { pub fn invalid_connection(connection_id: i32) -> Self { - AppError(StructError::from(AppReason::InvalidConnection { connection_id })) + AppError(StructError::from(AppReason::InvalidConnection { + connection_id, + })) } pub fn internal(e: E) -> Self { AppError( StructError::builder(AppReason::Internal(e.to_string())) - .attach_source(e) + .source(e) .finish(), ) } pub fn internal_msg(msg: impl Into) -> Self { - AppError(StructError::from(AppReason::Internal(msg.into()))) + let msg = msg.into(); + AppError(StructError::from(AppReason::Internal(msg.clone())).with_detail(msg)) } pub fn git(msg: impl Into) -> Self { - AppError(StructError::from(AppReason::Git(msg.into()))) + let msg = msg.into(); + AppError(StructError::from(AppReason::Git(msg.clone())).with_detail(msg)) } pub fn wpl_parse_msg(msg: impl Into) -> Self { @@ -130,13 +136,14 @@ impl AppError { pub fn oml_transform(e: E) -> Self { AppError( StructError::builder(AppReason::OmlTransform(e.to_string())) - .attach_source(e) + .source(e) .finish(), ) } pub fn oml_transform_msg(msg: impl Into) -> Self { - AppError(StructError::from(AppReason::OmlTransform(msg.into()))) + let msg = msg.into(); + AppError(StructError::from(AppReason::OmlTransform(msg.clone())).with_detail(msg)) } pub fn not_found(msg: impl Into) -> Self { @@ -167,6 +174,10 @@ impl AppError { pub fn stable_code(&self) -> &'static str { self.0.stable_code() } + + pub fn display_chain(&self) -> String { + self.0.display_chain() + } } impl fmt::Display for AppError { @@ -179,25 +190,43 @@ impl fmt::Display for AppError { impl From for AppError { fn from(reason: AppReason) -> Self { - AppError(StructError::from(reason)) + let detail = match &reason { + AppReason::NotFound(s) + | AppReason::Validation(s) + | AppReason::Internal(s) + | AppReason::Git(s) + | AppReason::WplParse(s) + | AppReason::OmlTransform(s) + | AppReason::InvalidGitToken(s) + | AppReason::InvalidBase64(s) => s.clone(), + _ => String::new(), + }; + let mut err = StructError::from(reason); + if !detail.is_empty() { + err = err.with_detail(detail); + } + AppError(err) } } impl From> for AppError { fn from(e: StructError) -> Self { - AppError(e.conv()) + let reason: AppReason = e.reason().clone().into(); + AppError(StructError::builder(reason).source(e).finish()) } } impl From> for AppError { fn from(e: StructError) -> Self { - AppError(e.conv()) + let reason: AppReason = e.reason().clone().into(); + AppError(StructError::builder(reason).source(e).finish()) } } impl From> for AppError { fn from(e: StructError) -> Self { - AppError(e.conv()) + let reason: AppReason = e.reason().clone().into(); + AppError(StructError::builder(reason).source(e).finish()) } } @@ -236,14 +265,14 @@ impl ResponseError for AppError { AppReason::NotFound(_) => StatusCode::NOT_FOUND, - AppReason::Internal(_) - | AppReason::Git(_) - | AppReason::InvalidBase64(_) => StatusCode::INTERNAL_SERVER_ERROR, + AppReason::Internal(_) | AppReason::Git(_) | AppReason::InvalidBase64(_) => { + StatusCode::INTERNAL_SERVER_ERROR + } AppReason::Uvs(uvs) => match uvs { - UvsReason::NotFoundError => StatusCode::NOT_FOUND, - UvsReason::ValidationError => StatusCode::BAD_REQUEST, - UvsReason::PermissionError => StatusCode::FORBIDDEN, + UnifiedReason::NotFoundError => StatusCode::NOT_FOUND, + UnifiedReason::ValidationError => StatusCode::BAD_REQUEST, + UnifiedReason::PermissionError => StatusCode::FORBIDDEN, _ => StatusCode::INTERNAL_SERVER_ERROR, }, }; @@ -264,9 +293,7 @@ impl ResponseError for AppError { AppReason::PortUnreachable { addr, reason: msg } => { Some(serde_json::json!({ "addr": addr, "reason": msg })) } - AppReason::InvalidGitToken(reason) => { - Some(serde_json::json!({ "reason": reason })) - } + AppReason::InvalidGitToken(reason) => Some(serde_json::json!({ "reason": reason })), _ => None, }; @@ -274,7 +301,7 @@ impl ResponseError for AppError { success: false, error: ErrorDetail { code: self.stable_code(), - message: self.to_string(), + message: self.display_chain(), details, }, }; diff --git a/src/utils/wpl.rs b/src/utils/wpl.rs index 7f21c6b..570fbf2 100644 --- a/src/utils/wpl.rs +++ b/src/utils/wpl.rs @@ -1,7 +1,7 @@ use std::path::PathBuf; use crate::error::AppError; -use orion_error::UvsReason; +use orion_error::UnifiedReason; use serde::{Deserialize, Serialize}; use wp_engine::sources::event_id::next_event_id; use wp_model_core::model::{DataField, DataRecord, DataType}; @@ -71,8 +71,8 @@ fn try_parse_with_rules(rule_items: Vec, data: &str) -> Result { // 记录解析深度最高的错误 best_wpl = index + 1; - if matches!(e.reason(), WparseReason::Uvs(UvsReason::DataError)) { - // 新版 UvsReason::DataError 不再携带位置参数,保底记为 1 表示已进入规则解析。 + if matches!(e.reason(), WparseReason::Uvs(UnifiedReason::DataError)) { + // UnifiedReason::DataError 不再携带位置参数,保底记为 1 表示已进入规则解析。 if max_depth == 0 { max_depth = 1; } diff --git a/version.txt b/version.txt index 7df3a13..ac25b2c 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.19.1 \ No newline at end of file +1.19.2 \ No newline at end of file From 1a8c671ca2b71901d2e6a5a67c0e76cff390082e Mon Sep 17 00:00:00 2001 From: unknow Date: Tue, 5 May 2026 14:54:07 +0800 Subject: [PATCH 14/37] ci v1.19.2-alpha --- dist/install-manifest-alpha.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/install-manifest-alpha.json b/dist/install-manifest-alpha.json index 541dadc..f947337 100644 --- a/dist/install-manifest-alpha.json +++ b/dist/install-manifest-alpha.json @@ -1,11 +1,11 @@ { "releases": [ { - "version": "v1.19.0-alpha", + "version": "v1.19.2-alpha", "artifacts": { - "darwin-arm64": "wp-editor-v1.19.0-alpha-aarch64-apple-darwin.tar.gz", - "linux-arm64": "wp-editor-v1.19.0-alpha-aarch64-unknown-linux-gnu.tar.gz", - "linux-x86_64": "wp-editor-v1.19.0-alpha-x86_64-unknown-linux-gnu.tar.gz" + "darwin-arm64": "wp-editor-v1.19.2-alpha-aarch64-apple-darwin.tar.gz", + "linux-arm64": "wp-editor-v1.19.2-alpha-aarch64-unknown-linux-gnu.tar.gz", + "linux-x86_64": "wp-editor-v1.19.2-alpha-x86_64-unknown-linux-gnu.tar.gz" } } ] From 44706d8bb1161570772a1c50ea9370c9b6fd813d Mon Sep 17 00:00:00 2001 From: tangxiangyan <1813932938@qq.com> Date: Thu, 7 May 2026 10:51:18 +0800 Subject: [PATCH 15/37] feat: Change the logo --- web/dist/assets/images/favicon.png | Bin 61000 -> 10831 bytes web/dist/assets/images/home.png | Bin 148636 -> 59347 bytes web/dist/assets/images/index.png | Bin 109326 -> 45303 bytes web/public/assets/images/favicon.png | Bin 61000 -> 10831 bytes web/public/assets/images/home.png | Bin 148636 -> 59347 bytes web/public/assets/images/index.png | Bin 109326 -> 45303 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/web/dist/assets/images/favicon.png b/web/dist/assets/images/favicon.png index e37599b99ccc70fe260f2ffb81ed9cdd561ad8c4..364839be2ba607440242eec991ff39237e8ec971 100644 GIT binary patch literal 10831 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

K}! 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 diff --git a/web/dist/assets/images/home.png b/web/dist/assets/images/home.png index 69f4cf876c8954f819bd65b3ddb89e1808e40e8c..8c68bc9599890804e2ca59f1d7585c9ffd87baba 100644 GIT binary patch literal 59347 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 literal 148636 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
+b!MR>-2V1X_F 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 diff --git a/web/dist/assets/images/index.png b/web/dist/assets/images/index.png index ba21c086a0d1a37ed6e8e08f7de562f5cbd66e3c..163d5a037adf4bc8aed7dc998a8d8de6cecad250 100644 GIT binary patch literal 45303 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 z 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