From 9e38fdbbebc5f18ce56802e17ce8a1448364dbd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Thu, 15 Aug 2024 15:09:09 +0200 Subject: [PATCH 01/50] chore: initialize the Dioxus project --- .gitignore | 12 + .idea/.gitignore | 5 + .idea/modules.xml | 8 + .idea/rust.xml | 6 + .idea/todo_baggins.iml | 13 + .idea/vcs.xml | 12 + Cargo.lock | 2029 ++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 14 + Dioxus.toml | 43 + README.md | 17 + assets/favicon.ico | Bin 0 -> 132770 bytes assets/header.svg | 171 ++++ assets/main.css | 40 + input.css | 3 + src/main.rs | 52 + tailwind.config.js | 9 + 16 files changed, 2434 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/modules.xml create mode 100644 .idea/rust.xml create mode 100644 .idea/todo_baggins.iml create mode 100644 .idea/vcs.xml create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 Dioxus.toml create mode 100644 README.md create mode 100644 assets/favicon.ico create mode 100644 assets/header.svg create mode 100644 assets/main.css create mode 100644 input.css create mode 100644 src/main.rs create mode 100644 tailwind.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5f0b8d2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ +/dist/ +/static/ +/.dioxus/ + +# this file will generate by tailwind: +/assets/tailwind.css + +# These are backup files generated by rustfmt +**/*.rs.bk diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..daa234f --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/todo_baggins.iml" filepath="$PROJECT_DIR$/.idea/todo_baggins.iml" /> + </modules> + </component> +</project> \ No newline at end of file diff --git a/.idea/rust.xml b/.idea/rust.xml new file mode 100644 index 0000000..7bc91ea --- /dev/null +++ b/.idea/rust.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="RsVcsConfiguration"> + <option name="rustFmt" value="true" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/todo_baggins.iml b/.idea/todo_baggins.iml new file mode 100644 index 0000000..0e0cd5b --- /dev/null +++ b/.idea/todo_baggins.iml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="EMPTY_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/backend/src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + <excludeFolder url="file://$MODULE_DIR$/backend/target" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..4c6280e --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="CommitMessageInspectionProfile"> + <profile version="1.0"> + <inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" /> + <inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" /> + </profile> + </component> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..82fc1ea --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,2029 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "anymap2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[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.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytes" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" + +[[package]] +name = "camino" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const_format" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constcat" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08" + +[[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 = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "dioxus" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e7fe217b50d43b27528b0f24c89b411f742a3e7564d1cfbf85253f967954db" +dependencies = [ + "dioxus-config-macro", + "dioxus-core", + "dioxus-core-macro", + "dioxus-fullstack", + "dioxus-hooks", + "dioxus-hot-reload", + "dioxus-html", + "dioxus-router", + "dioxus-signals", + "dioxus-web", +] + +[[package]] +name = "dioxus-cli-config" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7dffc452ed91af6ef772b0d9a5899573f6785314e97c533733ec55413c01df3" +dependencies = [ + "once_cell", + "serde", + "serde_json", + "tracing", +] + +[[package]] +name = "dioxus-config-macro" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb1a1aa34cc04c1f7fcbb7a10791ba773cc02d834fe3ec1fe05647699f3b101f" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "dioxus-core" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3730d2459ab66951cedf10b09eb84141a6eda7f403c28057cbe010495be156b7" +dependencies = [ + "futures-channel", + "futures-util", + "generational-box", + "longest-increasing-subsequence", + "rustc-hash", + "serde", + "slab", + "slotmap", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "dioxus-core-macro" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d9c0dfe0e6a46626fa716c4aa1d2ccb273441337909cfeacad5bb6fcfb947d2" +dependencies = [ + "constcat", + "convert_case", + "dioxus-rsx", + "prettyplease", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dioxus-debug-cell" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ea539174bb236e0e7dc9c12b19b88eae3cb574dedbd0252a2d43ea7e6de13e2" + +[[package]] +name = "dioxus-fullstack" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b80f0ac18166302341164e681322e0385131c08a11c3cc1c51ee8df799ab0d3d" +dependencies = [ + "async-trait", + "base64", + "bytes", + "ciborium", + "dioxus-hot-reload", + "dioxus-lib", + "dioxus-web", + "dioxus_server_macro", + "futures-util", + "once_cell", + "serde", + "serde_json", + "server_fn", + "tracing", + "web-sys", +] + +[[package]] +name = "dioxus-hooks" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa8f9c661eea82295219d25555d5c0b597e74186b029038ceb5e3700ccbd4380" +dependencies = [ + "dioxus-core", + "dioxus-debug-cell", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "slab", + "thiserror", + "tracing", +] + +[[package]] +name = "dioxus-hot-reload" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77d01246cb1b93437fb0bbd0dd11cfc66342d86b4311819e76654f2017ce1473" +dependencies = [ + "dioxus-core", + "dioxus-html", + "dioxus-rsx", + "interprocess-docfix", + "serde", + "serde_json", +] + +[[package]] +name = "dioxus-html" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f01a0826f179adad6ea8d6586746e8edde0c602cc86f4eb8e5df7a3b204c4018" +dependencies = [ + "async-trait", + "dioxus-core", + "dioxus-html-internal-macro", + "enumset", + "euclid", + "futures-channel", + "generational-box", + "keyboard-types", + "serde", + "serde-value", + "serde_json", + "serde_repr", + "tracing", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "dioxus-html-internal-macro" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b96f35a608d0ab8f4ca6f66ce1828354e4ebd41580b12454f490221a11da93c" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dioxus-interpreter-js" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "351fad098c657d14f3ac2900362d2b86e83c22c4c620a404839e1ab628f3395b" +dependencies = [ + "js-sys", + "md5", + "sledgehammer_bindgen", + "sledgehammer_utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus-lib" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bd39b2c41dd1915dcb91d914ea72d8b646f1f8995aaeff82816b862ec586ecd" +dependencies = [ + "dioxus-core", + "dioxus-core-macro", + "dioxus-hooks", + "dioxus-html", + "dioxus-rsx", + "dioxus-signals", +] + +[[package]] +name = "dioxus-logger" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe09dc9773dc1f1bb0d38529203d6555d08f67aadca5cf955ac3d1a9e69880" +dependencies = [ + "console_error_panic_hook", + "tracing", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "dioxus-router" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c235c5dbeb528c0c2b0424763da812e7500df69b82eddac54db6f4975e065c5f" +dependencies = [ + "dioxus-cli-config", + "dioxus-lib", + "dioxus-router-macro", + "gloo", + "gloo-utils 0.1.7", + "js-sys", + "tracing", + "url", + "urlencoding", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "dioxus-router-macro" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7cd1c5137ba361f2150cdea6b3bc9ddda7b1af84b22c9ee6b5499bf43e1381" +dependencies = [ + "proc-macro2", + "quote", + "slab", + "syn", +] + +[[package]] +name = "dioxus-rsx" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15c400bc8a779107d8f3a67b14375db07dbd2bc31163bf085a8e9097f36f7179" +dependencies = [ + "dioxus-core", + "internment", + "krates", + "proc-macro2", + "quote", + "syn", + "tracing", +] + +[[package]] +name = "dioxus-signals" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3e224cd3d3713f159f0199fc088c292a0f4adb94996b48120157f6a8f8342d" +dependencies = [ + "dioxus-core", + "futures-channel", + "futures-util", + "generational-box", + "once_cell", + "parking_lot", + "rustc-hash", + "tracing", +] + +[[package]] +name = "dioxus-web" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0855ac81fcc9252a0863930a7a7cbb2504fc1b6efe893489c8d0e23aaeb2cb9" +dependencies = [ + "async-trait", + "console_error_panic_hook", + "dioxus-core", + "dioxus-html", + "dioxus-interpreter-js", + "futures-channel", + "futures-util", + "generational-box", + "js-sys", + "rustc-hash", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "dioxus_server_macro" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5ef2cad17001c1155f019cb69adbacd620644566d78a77d0778807bb106a337" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "server_fn_macro", + "syn", +] + +[[package]] +name = "enumset" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "euclid" +version = "0.22.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0f0eb73b934648cd7a4a61f1b15391cd95dab0b4da6e2e66c2a072c144b4a20" +dependencies = [ + "num-traits", + "serde", +] + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generational-box" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "557cf2cbacd0504c6bf8c29f52f8071e0de1d9783346713dc6121d7fa1e5d0e0" +dependencies = [ + "parking_lot", +] + +[[package]] +name = "gloo" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28999cda5ef6916ffd33fb4a7b87e1de633c47c0dc6d97905fee1cdaa142b94d" +dependencies = [ + "gloo-console", + "gloo-dialogs", + "gloo-events", + "gloo-file", + "gloo-history", + "gloo-net 0.3.1", + "gloo-render", + "gloo-storage", + "gloo-timers", + "gloo-utils 0.1.7", + "gloo-worker", +] + +[[package]] +name = "gloo-console" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b7ce3c05debe147233596904981848862b068862e9ec3e34be446077190d3f" +dependencies = [ + "gloo-utils 0.1.7", + "js-sys", + "serde", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-dialogs" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67062364ac72d27f08445a46cab428188e2e224ec9e37efdba48ae8c289002e6" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-events" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b107f8abed8105e4182de63845afcc7b69c098b7852a813ea7462a320992fc" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-file" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d5564e570a38b43d78bdc063374a0c3098c4f0d64005b12f9bbe87e869b6d7" +dependencies = [ + "gloo-events", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-history" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85725d90bf0ed47063b3930ef28e863658a7905989e9929a8708aab74a1d5e7f" +dependencies = [ + "gloo-events", + "gloo-utils 0.1.7", + "serde", + "serde-wasm-bindgen", + "serde_urlencoded", + "thiserror", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-net" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a66b4e3c7d9ed8d315fd6b97c8b1f74a7c6ecbbc2320e65ae7ed38b7068cc620" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.1.7", + "http 0.2.12", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.2.0", + "http 1.1.0", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-render" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd9306aef67cfd4449823aadcd14e3958e0800aa2183955a309112a84ec7764" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-storage" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6ab60bf5dbfd6f0ed1f7843da31b41010515c745735c970e821945ca91e480" +dependencies = [ + "gloo-utils 0.1.7", + "js-sys", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "gloo-utils" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gloo-worker" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13471584da78061a28306d1359dd0178d8d6fc1c7c80e5e35d27260346e0516a" +dependencies = [ + "anymap2", + "bincode", + "gloo-console", + "gloo-utils 0.1.7", + "js-sys", + "serde", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "internment" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04e8e537b529b8674e97e9fb82c10ff168a290ac3867a0295f112061ffbca1ef" +dependencies = [ + "hashbrown", + "parking_lot", +] + +[[package]] +name = "interprocess-docfix" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b84ee245c606aeb0841649a9288e3eae8c61b853a8cd5c0e14450e96d53d28f" +dependencies = [ + "blocking", + "cfg-if", + "futures-core", + "futures-io", + "intmap", + "libc", + "once_cell", + "rustc_version", + "spinning", + "thiserror", + "to_method", + "winapi", +] + +[[package]] +name = "intmap" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae52f28f45ac2bc96edb7714de995cffc174a395fb0abf5bff453587c980d7b9" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "krates" +version = "0.16.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcb3baf2360eb25ad31f0ada3add63927ada6db457791979b82ac199f835cb9" +dependencies = [ + "cargo-platform", + "cargo_metadata", + "cfg-expr", + "petgraph", + "semver", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "longest-increasing-subsequence" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86" + +[[package]] +name = "lru" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" +dependencies = [ + "hashbrown", +] + +[[package]] +name = "md5" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[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 = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "prettyplease" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" +dependencies = [ + "futures-core", +] + +[[package]] +name = "serde" +version = "1.0.207" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_derive" +version = "1.0.207" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_qs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c" +dependencies = [ + "percent-encoding", + "serde", + "thiserror", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[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 = "server_fn" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "024b400db1aca5bd4188714f7bbbf7a2e1962b9a12a80b2a21e937e509086963" +dependencies = [ + "bytes", + "const_format", + "dashmap", + "futures", + "gloo-net 0.6.0", + "http 1.1.0", + "js-sys", + "once_cell", + "send_wrapper", + "serde", + "serde_json", + "serde_qs", + "server_fn_macro_default", + "thiserror", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "xxhash-rust", +] + +[[package]] +name = "server_fn_macro" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf0e6f71fc924df36e87f27dfbd447f0bedd092d365db3a5396878256d9f00c" +dependencies = [ + "const_format", + "convert_case", + "proc-macro2", + "quote", + "syn", + "xxhash-rust", +] + +[[package]] +name = "server_fn_macro_default" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556e4fd51eb9ee3e7d9fb0febec6cef486dcbc8f7f427591dfcfebee1abe1ad4" +dependencies = [ + "server_fn_macro", + "syn", +] + +[[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 = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "sledgehammer_bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcfaf791ff02f48f3518ce825d32cf419c13a43c1d8b1232f74ac89f339c46d2" +dependencies = [ + "sledgehammer_bindgen_macro", + "wasm-bindgen", +] + +[[package]] +name = "sledgehammer_bindgen_macro" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edc90d3e8623d29a664cd8dba5078b600dd203444f00b9739f744e4c6e7aeaf2" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "sledgehammer_utils" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f20798defa0e9d4eff9ca451c7f84774c7378a9c3b5a40112cfa2b3eadb97ae2" +dependencies = [ + "lru", + "once_cell", + "rustc-hash", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "serde", + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "spinning" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d4f0e86297cad2658d92a707320d87bf4e6ae1050287f51d19b67ef3f153a7b" +dependencies = [ + "lock_api", +] + +[[package]] +name = "syn" +version = "2.0.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +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 = "to_method" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8" + +[[package]] +name = "todo-baggins" +version = "0.1.0" +dependencies = [ + "dioxus", + "dioxus-logger", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "nu-ansi-term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" + +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[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-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[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.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[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.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[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.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "xxhash-rust" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..ea950f0 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "todo-baggins" +version = "0.1.0" +authors = ["Matouš Volf <66163112+matous-volf@users.noreply.github.com>"] +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] + +dioxus = { version = "0.5", features = ["web", "router"] } + +# Debug +dioxus-logger = "0.5.1" diff --git a/Dioxus.toml b/Dioxus.toml new file mode 100644 index 0000000..5f5dfa2 --- /dev/null +++ b/Dioxus.toml @@ -0,0 +1,43 @@ +[application] + +# App (Project) Name +name = "todo-baggins" + +# Dioxus App Default Platform +# web, desktop, fullstack +default_platform = "web" + +# `build` & `serve` dist path +out_dir = "dist" + +# resource (assets) file folder +asset_dir = "assets" + +[web.app] + +# HTML title tag content +title = "todo-baggins" + +[web.watcher] + +# when watcher trigger, regenerate the `index.html` +reload_html = true + +# which files or dirs will be watcher monitoring +watch_path = ["src", "assets"] + +# include `assets` in web platform +[web.resource] + +# CSS style file + +style = ["/tailwind.css"] + +# Javascript code file +script = [] + +[web.resource.dev] + +# Javascript code file +# serve: [dev-server] only +script = [] diff --git a/README.md b/README.md new file mode 100644 index 0000000..0458151 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# Development + +1. Install npm: https://docs.npmjs.com/downloading-and-installing-node-js-and-npm +2. Install the tailwind css cli: https://tailwindcss.com/docs/installation +3. Run the following command in the root of the project to start the tailwind CSS compiler: + +```bash +npx tailwindcss -i ./input.css -o ./assets/tailwind.css --watch +``` + +Run the following command in the root of the project to start the Dioxus dev server: + +```bash +dx serve --hot-reload +``` + +- Open the browser to http://localhost:8080 \ No newline at end of file diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..eed0c09735ab94e724c486a053c367cf7ee3d694 GIT binary patch literal 132770 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 literal 0 HcmV?d00001 diff --git a/assets/header.svg b/assets/header.svg new file mode 100644 index 0000000..3581419 --- /dev/null +++ b/assets/header.svg @@ -0,0 +1,171 @@ +<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1007 197"> + <style> + @keyframes a0_t { 0% { transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); } 35% { + transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); animation-timing-function: + cubic-bezier(.6,0,.4,1); } 45% { transform: translate(225px,339.9px) scale(1,1) translate(-89.5px,-24px); } 50% + { transform: translate(225px,339.9px) scale(1,1) translate(-89.5px,-24px); animation-timing-function: + cubic-bezier(.6,0,.4,1); } 60% { transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); } 100% + { transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); } } + @keyframes a1_t { 0% { transform: translate(225px,348.9px) scale(0,1) translate(-41.5px,-11px); } 20% { + transform: translate(225px,348.9px) scale(0,1) translate(-41.5px,-11px); animation-timing-function: + cubic-bezier(.6,0,.4,1); } 30% { transform: translate(225px,348.9px) scale(1,1) translate(-41.5px,-11px); } 35% + { transform: translate(225px,348.9px) scale(1,1) translate(-41.5px,-11px); } 45% { transform: + translate(225px,348.9px) scale(0,1) translate(-41.5px,-11px); } 100% { transform: translate(225px,348.9px) + scale(0,1) translate(-41.5px,-11px); } } + @keyframes a3_t { 0% { transform: translate(225px,198.9px) rotate(-90deg); } 10% { transform: + translate(225px,198.9px) rotate(-90deg); } 20% { transform: translate(225px,198.9px) rotate(-90deg); + animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { transform: translate(225px,198.9px) rotate(0deg); } + 35% { transform: translate(225px,198.9px) rotate(0deg); } 45% { transform: translate(225px,198.9px) + rotate(0deg); } 50% { transform: translate(225px,198.9px) rotate(0deg); animation-timing-function: + cubic-bezier(.6,0,.4,1); } 60% { transform: translate(225px,198.9px) rotate(-90deg); } 65% { transform: + translate(225px,198.9px) rotate(-90deg); } 75% { transform: translate(225px,198.9px) rotate(-90deg); } 100% { + transform: translate(225px,198.9px) rotate(-90deg); } } + @keyframes a2_t { 0% { transform: translate(-200px,-167px); animation-timing-function: cubic-bezier(.6,0,.4,1); + } 10% { transform: translate(-150px,-80px); } 20% { transform: translate(-150px,-80px); + animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { transform: translate(-200px,-123px); } 35% { + transform: translate(-200px,-123px); animation-timing-function: cubic-bezier(.6,0,.4,1); } 45% { transform: + translate(-150px,-100px); } 50% { transform: translate(-150px,-100px); animation-timing-function: + cubic-bezier(.6,0,.4,1); } 60% { transform: translate(-150px,-80px); } 65% { transform: translate(-150px,-80px); + animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { transform: translate(-217px,-200px); } 100% { + transform: translate(-217px,-200px); } } + @keyframes a2_o { 0% { opacity: 0; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { opacity: 1; } 65% + { opacity: 1; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { opacity: 0; } 100% { opacity: 0; } } + @keyframes a2_sw { 0% { stroke-width: 30px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { + stroke-width: 8px; } 65% { stroke-width: 8px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { + stroke-width: 30px; } 100% { stroke-width: 30px; } } + @keyframes a2_w { 0% { width: 400px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { width: 300px; } + 20% { width: 300px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { width: 400px; } 35% { width: + 400px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 45% { width: 300px; } 50% { width: 300px; } 60% { + width: 300px; } 65% { width: 300px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { width: 434px; } + 100% { width: 434px; } } + @keyframes a2_h { 0% { height: 334px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { height: 160px; + } 20% { height: 160px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { height: 246px; } 35% { + height: 246px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 45% { height: 200px; } 50% { height: 200px; + animation-timing-function: cubic-bezier(.6,0,.4,1); } 60% { height: 160px; } 65% { height: 160px; + animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { height: 400px; } 100% { height: 400px; } } + @keyframes a4_t { 0% { transform: translate(143.5px,48.9px); } 10% { transform: translate(180.5px,98.9px); } + 100% { transform: translate(180.5px,98.9px); } } + @keyframes a4_w { 0% { width: 168.5px; } 10% { width: 94.5px; } 100% { width: 94.5px; } } + @keyframes a4_h { 0% { height: 302px; } 10% { height: 202px; } 100% { height: 202px; } } + @keyframes a5_t { 0% { transform: translate(217px,324.9px); animation-timing-function: cubic-bezier(.6,0,.4,1); + } 10% { transform: translate(190px,324.9px); } 20% { transform: translate(190px,324.9px); } 30% { transform: + translate(190px,324.9px); } 100% { transform: translate(190px,324.9px); } } + @keyframes a5_o { 0% { opacity: 0; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { opacity: 1; } 20% + { opacity: 1; } 30% { opacity: 0; } 100% { opacity: 0; } } + @keyframes a5_w { 0% { width: 16px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { width: 70px; } + 20% { width: 70px; } 30% { width: 70px; } 100% { width: 70px; } } + @keyframes a6_t { 0% { transform: translate(217px,324.9px); } 50% { transform: translate(217px,324.9px); + animation-timing-function: cubic-bezier(.6,0,.4,1); } 60% { transform: translate(190px,324.9px); } 65% { + transform: translate(190px,324.9px); } 75% { transform: translate(190px,324.9px); } 100% { transform: + translate(190px,324.9px); } } + @keyframes a6_o { 0% { opacity: 0; } 50% { opacity: 0; animation-timing-function: cubic-bezier(.6,0,.4,1); } 60% + { opacity: 1; } 65% { opacity: 1; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { opacity: 0; } 100% + { opacity: 0; } } + @keyframes a6_w { 0% { width: 16px; } 50% { width: 16px; animation-timing-function: cubic-bezier(.6,0,.4,1); } + 60% { width: 70px; } 65% { width: 70px; } 75% { width: 70px; } 100% { width: 70px; } } + @keyframes a7_t { 0% { transform: translate(225px,198.9px) scale(1.5,1.5) translate(-42.3px,-93px); + animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { transform: translate(225px,198.9px) scale(1,1) + translate(-42.3px,-93px); } 20% { transform: translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); + animation-timing-function: cubic-bezier(.6,0,.4,1); } 25% { transform: translate(225px,198.9px) scale(.8,.8) + translate(-42.3px,-93px); animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { transform: + translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); } 35% { transform: translate(225px,198.9px) + scale(1,1) translate(-42.3px,-93px); animation-timing-function: cubic-bezier(.4,0,.6,1); } 45% { transform: + translate(225px,198.9px) scale(.8,.8) translate(-42.3px,-93px); } 50% { transform: translate(225px,198.9px) + scale(.8,.8) translate(-42.3px,-93px); animation-timing-function: cubic-bezier(.4,0,.6,1); } 55% { transform: + translate(225px,198.9px) scale(.7,.7) translate(-42.3px,-93px); animation-timing-function: + cubic-bezier(.4,0,.6,1); } 60% { transform: translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); } 65% + { transform: translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); animation-timing-function: + cubic-bezier(.4,0,.6,1); } 75% { transform: translate(225px,198.9px) scale(1.5,1.5) translate(-42.3px,-93px); } + 100% { transform: translate(225px,198.9px) scale(1.5,1.5) translate(-42.3px,-93px); } } + </style> + <defs> + <symbol id="Symbol-2" preserveAspectRatio="none" width="111.5" height="186" viewBox="0 0 111.5 186" + overflow="visible"> + <g transform="translate(8.5,4.5)"> + <rect x="4" width="85" height="8" fill="#d9d9d9"/> + <rect x="4" y="26" width="85" height="8" fill="#d9d9d9"/> + <rect x="25" y="56" width="43" height="8" fill="#d9d9d9"/> + <rect width="85" height="8" fill="#d9d9d9" + transform="translate(46.5,175) rotate(180) scale(-1,1) translate(-42.5,-4)"/> + <rect width="85" height="8" fill="#d9d9d9" + transform="translate(46.5,149) rotate(180) scale(-1,1) translate(-42.5,-4)"/> + <rect width="43" height="8" fill="#d9d9d9" + transform="translate(46.5,119) rotate(180) scale(-1,1) translate(-21.5,-4)"/> + <path d="M0 4c0 53 94.5 115 94.5 169" stroke="#3cc4dc" stroke-width="17" stroke-linecap="square" + fill="none"/> + <path d="M94.5 4c0 53-94.5 115-94.5 169" stroke="#fb422d" stroke-width="17" stroke-linecap="square" + fill="none"/> + </g> + </symbol> + <symbol id="Symbol-5" preserveAspectRatio="none" width="84.5" height="186" viewBox="0 0 84.5 186" + overflow="visible"> + <g transform="translate(42.3,93) scale(5.352,6.9) translate(-16,60)"> + <g transform="translate(-34.9,-125.8)"> + <g transform="translate(24,5)"> + <path d="M33 46.5c0 3.1-0.8 5.5-2.2 7.4c-1.4 1.9-3.3 3.6-5.4 5.4c-2.2 1.7-4.5 3.6-6.3 6.2c-1.8 2.5-3.1 5.5-3.1 9.5h4.7c0-3.1 .9-5.4 2.2-7.3c1.4-1.9 3.3-3.5 5.5-5.3c2.1-1.8 4.4-3.7 6.2-6.2c1.8-2.6 3.1-5.6 3.1-9.7Z" + fill="#e96020"/> + <path d="M20.4 70.7c-0.6 0-1 .5-1 1.1c0 .7 .4 1.2 1 1.2h12.9c.7 0 1.2-0.5 1.2-1.2c0-0.6-0.5-1.1-1.2-1.1Z" + fill="#2d323b"/> + <path d="M21.8 66.6c-0.7 0-1 .6-1 1.2c0 .6 .3 1 .9 1h10.3c.6 0 1.1-0.5 1.1-1.1c0-0.6-0.5-1.1-1.1-1.1Z" + fill="#2d323b"/> + <path d="M21.8 53c-0.7 0-1.2 .5-1.1 1.1c0 .6 .4 1.1 1.1 1.1h10.2c.6 0 .9-0.6 .9-1.2c0-0.6-0.3-1-0.9-1Z" + fill="#2d323b"/> + <path d="M20.4 48.8c-0.6 0-1.2 .5-1.2 1.1c0 .7 .6 1.2 1.2 1.2h12.9c.7 0 1-0.5 1-1.1c0-0.7-0.3-1.2-1-1.2Z" + fill="#2d323b"/> + <path d="M16 46.5c0 4.1 1.3 7.1 3.1 9.7c1.8 2.5 4.1 4.4 6.3 6.2c2.1 1.8 4 3.6 5.4 5.5c1.4 1.9 2.2 4 2.2 7.1h4.7c0-4-1.3-7.1-3.1-9.6c-1.8-2.5-4.1-4.4-6.2-6.2c-2.2-1.8-4.1-3.4-5.5-5.3c-1.3-1.9-2.2-4.3-2.2-7.4Z" + fill="#00a8d6"/> + </g> + </g> + </g> + </symbol> + </defs> + <rect width="1007" height="197" stroke="#0f1116" fill="#0f1116" stroke-width="0"/> + <path fill="#fff" + d="M83.3 106.1v-65.7h17c4.2 0 7.9 .8 11 2.4c3.1 1.6 5.5 3.9 7.2 6.9c1.7 2.9 2.6 6.4 2.6 10.4v26.2c0 4-0.9 7.5-2.6 10.5c-1.7 3-4.1 5.3-7.2 6.9c-3.1 1.6-6.8 2.4-11 2.4Zm8.1-7.2h8.9c4 0 7.1-1.1 9.3-3.3c2.3-2.3 3.4-5.3 3.4-9.3v-26.2c0-3.9-1.1-7-3.4-9.2c-2.2-2.2-5.3-3.3-9.3-3.3h-8.9Zm45.3 7.2v-7.4h17.5v-34.7h-15.7v-7.4h23.8v42.1h16.7v7.4Zm20.7-58.4c-2 0-3.6-0.5-4.7-1.5c-1.2-1.1-1.7-2.4-1.7-4.2c0-1.8 .5-3.2 1.7-4.3c1.1-1 2.7-1.5 4.7-1.5c1.9 0 3.5 .5 4.6 1.5c1.2 1.1 1.7 2.5 1.7 4.3c0 1.8-0.5 3.1-1.7 4.2c-1.1 1-2.7 1.5-4.6 1.5Zm52.6 59.1c-6 0-10.7-1.7-14.2-5.1c-3.4-3.4-5.1-8-5.1-13.8v-13.1c0-5.9 1.7-10.5 5.1-13.9c3.5-3.3 8.2-5 14.2-5c6 0 10.7 1.7 14.2 5c3.4 3.4 5.2 8 5.2 13.8v13.2c0 5.8-1.8 10.4-5.2 13.8c-3.5 3.4-8.2 5.1-14.2 5.1Zm0-7.2c3.5 0 6.3-1 8.3-3c2-1.9 3-4.8 3-8.7v-13.1c0-3.9-1-6.8-3-8.8c-2-1.9-4.8-2.9-8.3-2.9c-3.5 0-6.2 1-8.2 2.9c-2 2-3 4.9-3 8.8v13.1c0 3.9 1 6.8 3 8.7c2 2 4.7 3 8.2 3Zm31.5 6.5l17.6-25.5l-16.5-24h9.5l9.8 15.3c.5 .7 .9 1.4 1.2 2.2c.4 .7 .8 1.4 1 1.8c.2-0.4 .5-1.1 .8-1.8c.4-0.8 .8-1.5 1.3-2.2l9.9-15.3h9.4l-16.5 24.1l17.5 25.4h-9.5l-10.7-16.2c-0.4-0.7-0.8-1.4-1.2-2.3c-0.4-0.9-0.7-1.6-1-2.1c-0.2 .5-0.6 1.2-1 2.1c-0.5 .9-1 1.6-1.4 2.3l-10.7 16.2Zm76.4 .9c-5.7 0-10.2-1.7-13.7-5.1c-3.4-3.4-5.1-8-5.1-13.8v-31.5h8.1v31.5c0 3.7 1 6.6 2.9 8.7c1.9 2.1 4.5 3.1 7.8 3.1c3.4 0 6-1 8-3.1c1.9-2.1 2.9-5 2.9-8.7v-31.5h8.1v31.5c0 5.8-1.7 10.4-5.2 13.8c-3.5 3.4-8.1 5.1-13.8 5.1Zm52.6-0.2c-5.1 0-9.3-1.2-12.5-3.5c-3.3-2.3-4.9-5.5-4.9-9.6h8.3c0 1.8 .9 3.3 2.6 4.3c1.8 1.1 4 1.6 6.6 1.6h3.8c3.2 0 5.6-0.6 7.1-1.9c1.6-1.3 2.4-3 2.4-5.2c0-2.1-0.8-3.8-2.2-5c-1.5-1.2-3.6-2-6.4-2.5l-6.6-1c-5-0.9-8.6-2.4-10.9-4.7c-2.4-2.3-3.5-5.5-3.5-9.5c0-4.5 1.4-7.9 4.3-10.3c2.9-2.4 7.1-3.6 12.6-3.6h3.4c5 0 9.1 1.1 12.1 3.4c3 2.2 4.6 5.2 4.6 8.9h-8.3c0-1.6-0.8-2.8-2.3-3.7c-1.5-1-3.6-1.4-6.3-1.4h-3.4c-2.8 0-5 .6-6.5 1.7c-1.5 1.2-2.3 2.9-2.3 5c0 3.6 2.5 5.8 7.6 6.7l6.7 1.1c5.3 .8 9.2 2.4 11.7 4.6c2.4 2.3 3.6 5.6 3.6 9.9c0 4.6-1.5 8.2-4.4 10.8c-2.9 2.6-7.3 3.9-13.2 3.9Z"/> + <path fill="#fff" + d="M91 164c-2 0-3.6-0.6-4.7-1.7c-1.1-1.1-1.6-2.7-1.6-4.6v-15.9h2.7v15.9c0 1.2 .3 2.2 .9 2.8c.6 .7 1.5 1.1 2.7 1.1c1.2 0 2.1-0.4 2.7-1.1c.6-0.7 .9-1.6 .9-2.8v-15.9h2.7v15.9c0 2-0.5 3.5-1.6 4.6c-1.1 1.1-2.6 1.7-4.7 1.7Zm17.5-0.1c-1.7 0-3.1-0.3-4.2-1.1c-1.1-0.8-1.6-1.9-1.6-3.2h2.8c0 .6 .3 1.1 .8 1.4c.6 .4 1.4 .5 2.2 .5h1.3c1.1 0 1.9-0.2 2.4-0.6c.5-0.4 .8-1 .8-1.7c0-0.7-0.3-1.3-0.8-1.7c-0.5-0.4-1.2-0.7-2.1-0.8l-2.2-0.4c-1.7-0.3-2.9-0.8-3.6-1.5c-0.8-0.8-1.2-1.9-1.2-3.2c0-1.5 .5-2.6 1.4-3.4c1-0.8 2.4-1.2 4.2-1.2h1.2c1.6 0 3 .3 4 1.1c1 .7 1.5 1.7 1.5 3h-2.7c0-0.6-0.3-1-0.8-1.3c-0.5-0.3-1.2-0.4-2.1-0.4h-1.1c-1 0-1.7 .2-2.2 .5c-0.5 .4-0.8 1-0.8 1.7c0 1.2 .9 1.9 2.6 2.2l2.2 .4c1.8 .3 3.1 .8 3.9 1.5c.8 .8 1.2 1.9 1.2 3.3c0 1.6-0.5 2.8-1.5 3.6c-0.9 .9-2.4 1.3-4.4 1.3Zm18.5 .1c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.8-2-0.8-3.3v-4.5c0-1.3 .3-2.4 .8-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .8 2 .8 3.3l-0.1 2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1-2.8-1c-1.2 0-2.2 .3-2.8 1c-0.7 .7-1 1.7-1 3Zm16.1 9.6v-16.5h2.7v3.2c.1-1.1 .6-2 1.4-2.6c.7-0.6 1.7-0.9 3-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm35.8 0v-2.5h4.5v-16.9h-4.5v-2.5h11.8l-0.1 2.5h-4.4v16.9h4.4v2.5Zm17.7 0v-16.5h2.7v3.2c.1-1.1 .6-2 1.3-2.6c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 3 .5 3.9 1.5c1 1.1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.6-1.5-1-2.6-1c-1.1 0-2 .4-2.7 1.1c-0.6 .6-0.9 1.6-0.9 2.9v10.5Zm26 0c-1.4 0-2.4-0.4-3.3-1.2c-0.8-0.8-1.2-1.8-1.2-3.1v-9.7h-4.7v-2.5h4.7v-4.7h2.7v4.7h6.6v2.5h-6.6v9.7c0 .5 .2 1 .5 1.3c.3 .4 .8 .5 1.3 .5h4.5v2.5Zm16.2 .3c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.7-2-0.7-3.3v-4.5c0-1.3 .2-2.4 .7-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .8 2 .8 3.3l-0.1 2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1-2.8-1c-1.2 0-2.2 .3-2.8 1c-0.7 .7-1 1.7-1 3Zm16.1 9.6v-16.5h2.7v3.2c.1-1.1 .6-2 1.4-2.6c.7-0.6 1.7-0.9 3-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm21.3 0v-12.4h-4.8v-2.4h4.8v-2.9c0-1.3 .4-2.3 1.2-3.1c.9-0.7 2-1.1 3.4-1.1h4.9v2.5h-4.9c-1.3 0-1.9 .5-1.9 1.7v2.9h6.8v2.4h-6.8v12.4Zm19 .3c-1.8 0-3.1-0.4-4.1-1.3c-1-0.9-1.5-2.1-1.5-3.6c0-1.6 .5-2.8 1.5-3.7c1-0.9 2.3-1.3 4-1.3h5.1v-1.6c0-1-0.3-1.8-0.9-2.4c-0.6-0.5-1.5-0.8-2.5-0.8c-1 0-1.8 .2-2.5 .6c-0.6 .4-1 1-1.2 1.7h-2.7c.1-1 .4-1.8 1-2.5c.6-0.7 1.3-1.2 2.2-1.6c1-0.4 2-0.6 3.2-0.6c1.9 0 3.4 .5 4.5 1.5c1.1 1 1.6 2.3 1.6 4v11.3h-2.6v-3.1h-0.1c-0.1 1-0.6 1.9-1.5 2.5c-0.9 .6-2.1 .9-3.5 .9Zm.6-2.1c1.3 0 2.4-0.3 3.2-1c.8-0.6 1.2-1.4 1.2-2.4v-2.4h-5c-0.9 0-1.6 .3-2.2 .8c-0.5 .5-0.7 1.1-0.7 2c0 .9 .3 1.6 .9 2.2c.6 .5 1.5 .8 2.6 .8Zm18.9 2.1c-2 0-3.6-0.6-4.8-1.7c-1.2-1.1-1.7-2.6-1.7-4.6v-4.5c0-2 .5-3.5 1.7-4.6c1.2-1.1 2.8-1.7 4.8-1.7c1.9 0 3.5 .5 4.6 1.5c1.2 1 1.8 2.4 1.8 4.2h-2.7c0-1.1-0.4-1.9-1-2.4c-0.7-0.6-1.6-0.9-2.7-0.9c-1.2 0-2.1 .3-2.8 1c-0.7 .7-1.1 1.6-1.1 2.9l.1 4.5c-0.1 1.2 .3 2.2 1 2.9c.7 .7 1.6 1 2.8 1c1.1 0 2-0.3 2.7-0.9c.6-0.6 1-1.4 1-2.4h2.7c0 1.8-0.6 3.2-1.8 4.2c-1.1 1-2.7 1.5-4.6 1.5Zm17.9 0c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.7-2-0.7-3.3v-4.5c0-1.3 .2-2.4 .7-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .8 2 .8 3.3v2.9h-10.3v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1.1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1-2.8-1c-1.2 0-2.2 .3-2.8 1c-0.7 .7-1 1.7-1 3Zm21.3 9.8c-1.7 0-3.1-0.3-4.2-1.1c-1.1-0.8-1.6-1.9-1.6-3.2h2.8c0 .6 .3 1.1 .8 1.4c.6 .4 1.4 .5 2.3 .5h1.2c1.1 0 1.9-0.2 2.4-0.6c.5-0.4 .8-1 .8-1.7c0-0.7-0.3-1.3-0.8-1.7c-0.5-0.4-1.2-0.7-2.1-0.8l-2.2-0.4c-1.6-0.3-2.9-0.8-3.6-1.5c-0.8-0.8-1.2-1.9-1.2-3.2c0-1.5 .5-2.6 1.4-3.4c1-0.8 2.4-1.2 4.2-1.2h1.2c1.7 0 3 .3 4 1.1c1 .7 1.5 1.7 1.5 3h-2.7c0-0.6-0.3-1-0.8-1.3c-0.5-0.3-1.2-0.4-2.1-0.4h-1.1c-1 0-1.7 .2-2.2 .5c-0.5 .4-0.8 1-0.8 1.7c0 1.2 .9 1.9 2.6 2.2l2.2 .4c1.8 .3 3.1 .8 3.9 1.5c.8 .8 1.2 1.9 1.2 3.3c0 1.6-0.5 2.8-1.5 3.6c-0.9 .9-2.4 1.3-4.3 1.3Zm38.3-0.2c-1.4 0-2.4-0.4-3.3-1.2c-0.8-0.8-1.2-1.8-1.2-3.2v-9.6h-4.6v-2.5h4.6v-4.7h2.7v4.7h6.6v2.5h-6.6v9.6c0 .6 .2 1.1 .5 1.4c.3 .4 .8 .5 1.3 .5h4.5v2.5Zm10 0v-21.9h2.7v8.6c.1-1.2 .6-2 1.3-2.6c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 3 .5 3.9 1.5c1 1.1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.7-1.5-1-2.6-1c-1.1 0-2 .3-2.7 1c-0.6 .7-0.9 1.7-0.9 3v10.5Zm22.8 .3c-1.8 0-3.1-0.4-4.1-1.3c-1-0.9-1.5-2.1-1.5-3.7c0-1.5 .5-2.7 1.5-3.6c1-0.9 2.3-1.3 4-1.3h5.1v-1.7c0-1-0.3-1.7-0.9-2.3c-0.6-0.6-1.5-0.8-2.5-0.8c-1 0-1.8 .2-2.5 .6c-0.6 .4-1 1-1.2 1.7h-2.7c.1-1 .4-1.8 1-2.5c.6-0.7 1.3-1.2 2.2-1.6c1-0.4 2-0.6 3.2-0.6c1.9 0 3.4 .5 4.5 1.5c1.1 1 1.6 2.3 1.6 4v11.3h-2.6v-3.2h-0.1c-0.1 1.1-0.6 1.9-1.5 2.6c-0.9 .6-2.1 .9-3.5 .9Zm.6-2.1c1.3 0 2.4-0.4 3.2-1c.8-0.6 1.2-1.5 1.2-2.5v-2.3h-5c-0.9 0-1.6 .3-2.2 .8c-0.5 .5-0.7 1.1-0.7 2c0 .9 .3 1.6 .9 2.2c.6 .5 1.5 .8 2.6 .8Zm20.6 1.8c-1.4 0-2.4-0.4-3.3-1.2c-0.8-0.8-1.2-1.8-1.2-3.2v-9.6h-4.6v-2.5h4.6v-4.7h2.7v4.7h6.6v2.5h-6.6v9.6c0 .6 .2 1.1 .5 1.4c.3 .4 .8 .5 1.3 .5h4.5v2.5Zm28.5 0v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.4-2.5c.7-0.6 1.7-0.9 3-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm23.7 .3c-1.9 0-3.4-0.6-4.6-1.7c-1.1-1.1-1.7-2.7-1.7-4.6v-10.5h2.7v10.5c0 1.2 .3 2.2 1 2.9c.6 .7 1.5 1 2.6 1c1.1 0 2-0.3 2.6-1c.7-0.7 1-1.7 1-2.9v-10.5h2.7v10.5c0 1.9-0.6 3.5-1.7 4.6c-1.2 1.1-2.7 1.7-4.6 1.7Zm11.8-0.3v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 2.9 .5 3.9 1.5c1 1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.6-1.5-1-2.6-1c-1.1 0-2 .4-2.7 1.1c-0.6 .6-0.9 1.6-0.9 2.9v10.5Zm40.8 .3c-1.8 0-3.2-0.4-4.2-1.3c-1-0.9-1.5-2.1-1.5-3.7c0-1.5 .5-2.7 1.5-3.6c1-0.9 2.4-1.3 4.1-1.3h5.1v-1.7c0-1-0.3-1.7-0.9-2.3c-0.6-0.6-1.5-0.8-2.6-0.8c-0.9 0-1.7 .2-2.4 .6c-0.6 .4-1.1 1-1.2 1.6h-2.7c.1-0.9 .4-1.7 1-2.4c.6-0.7 1.3-1.2 2.2-1.6c1-0.4 2-0.6 3.1-0.6c1.9 0 3.4 .5 4.5 1.5c1.1 .9 1.7 2.3 1.7 4v11.3h-2.6v-3.2h-0.1c-0.1 1.1-0.6 1.9-1.5 2.6c-0.9 .6-2.1 .9-3.5 .9Zm.6-2.1c1.3 0 2.3-0.4 3.2-1c.8-0.6 1.2-1.5 1.2-2.5v-2.3h-5c-0.9 0-1.7 .3-2.2 .8c-0.5 .5-0.8 1.1-0.8 2c0 .9 .4 1.6 1 2.2c.6 .5 1.5 .8 2.6 .8Zm12.6 1.8v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 2.9 .5 3.9 1.5c1 1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.6-1.5-1-2.6-1c-1.1 0-2 .4-2.7 1.1c-0.6 .6-0.9 1.6-0.9 2.9v10.5Zm20.6 5.4l2.4-6.4l-6.3-15.5h2.9l4.1 10.2c.1 .3 .2 .7 .4 1.2c.1 .5 .2 .9 .3 1.2c.1-0.3 .2-0.7 .3-1.2c.1-0.5 .3-0.9 .4-1.2l3.8-10.2h2.8l-8.3 21.9Zm16.3-5.4l-2.7-16.5h2.4l1.6 11.7c.1 .4 .2 .9 .2 1.4c.1 .5 .1 1 .1 1.3h.2c0-0.3 0-0.8 .1-1.3c.1-0.5 .1-1 .2-1.4l1.8-11.7h2.7l1.9 11.7c.1 .4 .1 .9 .2 1.4c.1 .5 .1 1 .1 1.3h.2c0-0.3 .1-0.8 .1-1.3c.1-0.5 .2-1 .2-1.4l1.7-11.7h2.2l-2.7 16.5h-3l-1.8-11.4c0-0.6-0.1-1.1-0.2-1.7c-0.1-0.5-0.1-1-0.2-1.3h-0.1c0 .3-0.1 .8-0.1 1.3c-0.1 .6-0.2 1.1-0.3 1.7l-1.8 11.4Zm17.1 0v-21.9h2.7v8.5c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 2.9 .5 3.9 1.5c1 1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.7-1.5-1-2.6-1c-1.1 0-2 .3-2.7 1c-0.6 .7-0.9 1.7-0.9 3v10.5Zm24.2 .3c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.8-2-0.8-3.3v-4.5c0-1.3 .3-2.4 .8-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .7 2 .7 3.3v2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1.1-2.8-1.1c-1.2 0-2.2 .4-2.8 1.1c-0.7 .7-1 1.7-1 3Zm16.1 9.6v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm23.7 .3c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.8-2-0.8-3.3v-4.5c0-1.3 .3-2.4 .8-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .7 2 .7 3.3v2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1.1-2.8-1.1c-1.2 0-2.2 .4-2.8 1.1c-0.7 .7-1 1.7-1 3Z"/> + <g transform="translate(764,-14.5) scale(.431111,.440249) translate(-13.9,56.6)"> + <path fill="#e0e0e0" stroke="#e0e0e0" stroke-linejoin="round" + d="M-50.7 4h278.2c10 0 9 0 9 0l41 40c0 0 1 0-9 0h-358c-9.9 0-9 0-9 0l38.8-40c0 0-0.9 0 9 0Z" + stroke-width="10" transform="translate(225,339.9) scale(0,1) translate(-89.5,-24)" + style="animation: 10s linear infinite both a0_t;"/> + <rect width="83" height="22" stroke="#fb422d" fill="#e0e0e0" rx="2" stroke-width="0" + transform="translate(225,348.9) scale(0,1) translate(-41.5,-11)" + style="animation: 10s linear infinite both a1_t;"/> + <g style="animation: 10s linear infinite both a3_t;"> + <rect width="400" height="334" stroke="#e0e0e0" fill="none" stroke-width="30" stroke-miterlimit="1" rx="10" + opacity="0" transform="translate(225,198.9) rotate(-90) translate(-200,-167)" + style="animation: 10s linear infinite both a2_t, 10s linear infinite both a2_o, 10s linear infinite both a2_sw, 10s linear infinite both a2_w, 10s linear infinite both a2_h;"/> + </g> + <use width="168.5" height="302" xlink:href="#Symbol-2" opacity="0" + transform="translate(227.8,199.9) translate(-84.2,-151)" + style="animation: 10s linear infinite both a4_t, 10s linear infinite both a4_w, 10s linear infinite both a4_h;"/> + <rect width="16" height="8" stroke="#fb422d" fill="#e0e0e0" stroke-width="0" rx="2" opacity="0" + transform="translate(225,328.9) translate(-8,-4)" + style="animation: 10s linear infinite both a5_t, 10s linear infinite both a5_o, 10s linear infinite both a5_w;"/> + <rect width="16" height="8" stroke="#fb422d" fill="#e0e0e0" stroke-width="0" rx="2" opacity="0" + transform="translate(225,328.9) translate(-8,-4)" + style="animation: 10s linear infinite both a6_t, 10s linear infinite both a6_o, 10s linear infinite both a6_w;"/> + <g transform="translate(225,198.9) scale(1.5,1.5) translate(-42.3,-93)" + style="animation: 10s linear infinite both a7_t;"> + <g transform="translate(42.3,93) scale(5.352,6.9) translate(-16,60)"> + <g transform="translate(-34.9,-125.8)"> + <g transform="translate(24,5)"> + <path d="M33 46.5c0 3.1-0.8 5.5-2.2 7.4c-1.4 1.9-3.3 3.6-5.4 5.4c-2.2 1.7-4.5 3.6-6.3 6.2c-1.8 2.5-3.1 5.5-3.1 9.5h4.7c0-3.1 .9-5.4 2.2-7.3c1.4-1.9 3.3-3.5 5.5-5.3c2.1-1.8 4.4-3.7 6.2-6.2c1.8-2.6 3.1-5.6 3.1-9.7Z" + fill="#e96020"/> + <path d="M20.4 70.7c-0.6 0-1 .5-1 1.1c0 .7 .4 1.2 1 1.2h12.9c.7 0 1.2-0.5 1.2-1.2c0-0.6-0.5-1.1-1.2-1.1Z" + fill="#2d323b"/> + <path d="M21.8 66.6c-0.7 0-1 .6-1 1.2c0 .6 .3 1 .9 1h10.3c.6 0 1.1-0.5 1.1-1.1c0-0.6-0.5-1.1-1.1-1.1Z" + fill="#2d323b"/> + <path d="M21.8 53c-0.7 0-1.2 .5-1.1 1.1c0 .6 .4 1.1 1.1 1.1h10.2c.6 0 .9-0.6 .9-1.2c0-0.6-0.3-1-0.9-1Z" + fill="#2d323b"/> + <path d="M20.4 48.8c-0.6 0-1.2 .5-1.2 1.1c0 .7 .6 1.2 1.2 1.2h12.9c.7 0 1-0.5 1-1.1c0-0.7-0.3-1.2-1-1.2Z" + fill="#2d323b"/> + <path d="M16 46.5c0 4.1 1.3 7.1 3.1 9.7c1.8 2.5 4.1 4.4 6.3 6.2c2.1 1.8 4 3.6 5.4 5.5c1.4 1.9 2.2 4 2.2 7.1h4.7c0-4-1.3-7.1-3.1-9.6c-1.8-2.5-4.1-4.4-6.2-6.2c-2.2-1.8-4.1-3.4-5.5-5.3c-1.3-1.9-2.2-4.3-2.2-7.4Z" + fill="#00a8d6"/> + </g> + </g> + </g> + </g> + </g> +</svg> \ No newline at end of file diff --git a/assets/main.css b/assets/main.css new file mode 100644 index 0000000..affbeb0 --- /dev/null +++ b/assets/main.css @@ -0,0 +1,40 @@ +body { + background-color: #111216; +} + +#main { + margin: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif +} + +#links { + width: 400px; + text-align: left; + font-size: x-large; + color: white; + display: flex; + flex-direction: column; +} + +#links a { + color: white; + text-decoration: none; + margin-top: 20px; + margin: 10px; + border: white 1px solid; + border-radius: 5px; + padding: 10px; +} + +#links a:hover { + background-color: #1f1f1f; + cursor: pointer; +} + +#header { + max-width: 1200px; +} diff --git a/input.css b/input.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/input.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..8db1d9a --- /dev/null +++ b/src/main.rs @@ -0,0 +1,52 @@ +#![allow(non_snake_case)] + +use dioxus::prelude::*; +use dioxus_logger::tracing::{info, Level}; + +#[derive(Clone, Routable, Debug, PartialEq)] +enum Route { + #[route("/")] + Home {}, + #[route("/blog/:id")] + Blog { id: i32 }, +} + +fn main() { + // Init logger + dioxus_logger::init(Level::INFO).expect("failed to init logger"); + info!("starting app"); + launch(App); +} + +fn App() -> Element { + rsx! { + Router::<Route> {} + } +} + +#[component] +fn Blog(id: i32) -> Element { + rsx! { + Link { to: Route::Home {}, "Go to counter" } + "Blog post {id}" + } +} + +#[component] +fn Home() -> Element { + let mut count = use_signal(|| 0); + + rsx! { + Link { + to: Route::Blog { + id: count() + }, + "Go to blog" + } + div { + h1 { "High-Five counter: {count}" } + button { onclick: move |_| count += 1, "Up high!" } + button { onclick: move |_| count -= 1, "Down low!" } + } + } +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..cd8d865 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,9 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + mode: "all", + content: ["./src/**/*.{rs,html,css}", "./dist/**/*.html"], + theme: { + extend: {}, + }, + plugins: [], +}; From 7da655eafc94d9253c3c0d22021653767b50a394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:13:36 +0200 Subject: [PATCH 02/50] style: Cargo.lock formatting --- Cargo.lock | 1088 ++++++++++++++++++++++++++-------------------------- 1 file changed, 544 insertions(+), 544 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 82fc1ea..f7eead0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,10 +8,10 @@ version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", + "cfg-if", + "once_cell", + "version_check", + "zerocopy", ] [[package]] @@ -32,10 +32,10 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", ] [[package]] @@ -50,9 +50,9 @@ version = "0.1.81" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -79,7 +79,7 @@ version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "serde", + "serde", ] [[package]] @@ -88,7 +88,7 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" dependencies = [ - "serde", + "serde", ] [[package]] @@ -97,11 +97,11 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel", - "async-task", - "futures-io", - "futures-lite", - "piper", + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", ] [[package]] @@ -122,7 +122,7 @@ version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" dependencies = [ - "serde", + "serde", ] [[package]] @@ -131,7 +131,7 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" dependencies = [ - "serde", + "serde", ] [[package]] @@ -140,12 +140,12 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", ] [[package]] @@ -154,7 +154,7 @@ version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ - "smallvec", + "smallvec", ] [[package]] @@ -169,9 +169,9 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", + "ciborium-io", + "ciborium-ll", + "serde", ] [[package]] @@ -186,8 +186,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ - "ciborium-io", - "half", + "ciborium-io", + "half", ] [[package]] @@ -196,7 +196,7 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ - "crossbeam-utils", + "crossbeam-utils", ] [[package]] @@ -205,8 +205,8 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" dependencies = [ - "cfg-if", - "wasm-bindgen", + "cfg-if", + "wasm-bindgen", ] [[package]] @@ -215,7 +215,7 @@ version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" dependencies = [ - "const_format_proc_macros", + "const_format_proc_macros", ] [[package]] @@ -224,9 +224,9 @@ version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", + "proc-macro2", + "quote", + "unicode-xid", ] [[package]] @@ -241,7 +241,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" dependencies = [ - "unicode-segmentation", + "unicode-segmentation", ] [[package]] @@ -262,8 +262,8 @@ version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core", - "darling_macro", + "darling_core", + "darling_macro", ] [[package]] @@ -272,11 +272,11 @@ version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "syn", + "fnv", + "ident_case", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -285,9 +285,9 @@ version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core", - "quote", - "syn", + "darling_core", + "quote", + "syn", ] [[package]] @@ -296,11 +296,11 @@ version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ - "cfg-if", - "hashbrown", - "lock_api", - "once_cell", - "parking_lot_core", + "cfg-if", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core", ] [[package]] @@ -309,16 +309,16 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e7fe217b50d43b27528b0f24c89b411f742a3e7564d1cfbf85253f967954db" dependencies = [ - "dioxus-config-macro", - "dioxus-core", - "dioxus-core-macro", - "dioxus-fullstack", - "dioxus-hooks", - "dioxus-hot-reload", - "dioxus-html", - "dioxus-router", - "dioxus-signals", - "dioxus-web", + "dioxus-config-macro", + "dioxus-core", + "dioxus-core-macro", + "dioxus-fullstack", + "dioxus-hooks", + "dioxus-hot-reload", + "dioxus-html", + "dioxus-router", + "dioxus-signals", + "dioxus-web", ] [[package]] @@ -327,10 +327,10 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7dffc452ed91af6ef772b0d9a5899573f6785314e97c533733ec55413c01df3" dependencies = [ - "once_cell", - "serde", - "serde_json", - "tracing", + "once_cell", + "serde", + "serde_json", + "tracing", ] [[package]] @@ -339,8 +339,8 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb1a1aa34cc04c1f7fcbb7a10791ba773cc02d834fe3ec1fe05647699f3b101f" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2", + "quote", ] [[package]] @@ -349,16 +349,16 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3730d2459ab66951cedf10b09eb84141a6eda7f403c28057cbe010495be156b7" dependencies = [ - "futures-channel", - "futures-util", - "generational-box", - "longest-increasing-subsequence", - "rustc-hash", - "serde", - "slab", - "slotmap", - "tracing", - "tracing-subscriber", + "futures-channel", + "futures-util", + "generational-box", + "longest-increasing-subsequence", + "rustc-hash", + "serde", + "slab", + "slotmap", + "tracing", + "tracing-subscriber", ] [[package]] @@ -367,13 +367,13 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d9c0dfe0e6a46626fa716c4aa1d2ccb273441337909cfeacad5bb6fcfb947d2" dependencies = [ - "constcat", - "convert_case", - "dioxus-rsx", - "prettyplease", - "proc-macro2", - "quote", - "syn", + "constcat", + "convert_case", + "dioxus-rsx", + "prettyplease", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -388,21 +388,21 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b80f0ac18166302341164e681322e0385131c08a11c3cc1c51ee8df799ab0d3d" dependencies = [ - "async-trait", - "base64", - "bytes", - "ciborium", - "dioxus-hot-reload", - "dioxus-lib", - "dioxus-web", - "dioxus_server_macro", - "futures-util", - "once_cell", - "serde", - "serde_json", - "server_fn", - "tracing", - "web-sys", + "async-trait", + "base64", + "bytes", + "ciborium", + "dioxus-hot-reload", + "dioxus-lib", + "dioxus-web", + "dioxus_server_macro", + "futures-util", + "once_cell", + "serde", + "serde_json", + "server_fn", + "tracing", + "web-sys", ] [[package]] @@ -411,15 +411,15 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa8f9c661eea82295219d25555d5c0b597e74186b029038ceb5e3700ccbd4380" dependencies = [ - "dioxus-core", - "dioxus-debug-cell", - "dioxus-signals", - "futures-channel", - "futures-util", - "generational-box", - "slab", - "thiserror", - "tracing", + "dioxus-core", + "dioxus-debug-cell", + "dioxus-signals", + "futures-channel", + "futures-util", + "generational-box", + "slab", + "thiserror", + "tracing", ] [[package]] @@ -428,12 +428,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77d01246cb1b93437fb0bbd0dd11cfc66342d86b4311819e76654f2017ce1473" dependencies = [ - "dioxus-core", - "dioxus-html", - "dioxus-rsx", - "interprocess-docfix", - "serde", - "serde_json", + "dioxus-core", + "dioxus-html", + "dioxus-rsx", + "interprocess-docfix", + "serde", + "serde_json", ] [[package]] @@ -442,21 +442,21 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f01a0826f179adad6ea8d6586746e8edde0c602cc86f4eb8e5df7a3b204c4018" dependencies = [ - "async-trait", - "dioxus-core", - "dioxus-html-internal-macro", - "enumset", - "euclid", - "futures-channel", - "generational-box", - "keyboard-types", - "serde", - "serde-value", - "serde_json", - "serde_repr", - "tracing", - "wasm-bindgen", - "web-sys", + "async-trait", + "dioxus-core", + "dioxus-html-internal-macro", + "enumset", + "euclid", + "futures-channel", + "generational-box", + "keyboard-types", + "serde", + "serde-value", + "serde_json", + "serde_repr", + "tracing", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -465,10 +465,10 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b96f35a608d0ab8f4ca6f66ce1828354e4ebd41580b12454f490221a11da93c" dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "syn", + "convert_case", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -477,13 +477,13 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "351fad098c657d14f3ac2900362d2b86e83c22c4c620a404839e1ab628f3395b" dependencies = [ - "js-sys", - "md5", - "sledgehammer_bindgen", - "sledgehammer_utils", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "js-sys", + "md5", + "sledgehammer_bindgen", + "sledgehammer_utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] @@ -492,12 +492,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bd39b2c41dd1915dcb91d914ea72d8b646f1f8995aaeff82816b862ec586ecd" dependencies = [ - "dioxus-core", - "dioxus-core-macro", - "dioxus-hooks", - "dioxus-html", - "dioxus-rsx", - "dioxus-signals", + "dioxus-core", + "dioxus-core-macro", + "dioxus-hooks", + "dioxus-html", + "dioxus-rsx", + "dioxus-signals", ] [[package]] @@ -506,10 +506,10 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81fe09dc9773dc1f1bb0d38529203d6555d08f67aadca5cf955ac3d1a9e69880" dependencies = [ - "console_error_panic_hook", - "tracing", - "tracing-subscriber", - "tracing-wasm", + "console_error_panic_hook", + "tracing", + "tracing-subscriber", + "tracing-wasm", ] [[package]] @@ -518,17 +518,17 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c235c5dbeb528c0c2b0424763da812e7500df69b82eddac54db6f4975e065c5f" dependencies = [ - "dioxus-cli-config", - "dioxus-lib", - "dioxus-router-macro", - "gloo", - "gloo-utils 0.1.7", - "js-sys", - "tracing", - "url", - "urlencoding", - "wasm-bindgen", - "web-sys", + "dioxus-cli-config", + "dioxus-lib", + "dioxus-router-macro", + "gloo", + "gloo-utils 0.1.7", + "js-sys", + "tracing", + "url", + "urlencoding", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -537,10 +537,10 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e7cd1c5137ba361f2150cdea6b3bc9ddda7b1af84b22c9ee6b5499bf43e1381" dependencies = [ - "proc-macro2", - "quote", - "slab", - "syn", + "proc-macro2", + "quote", + "slab", + "syn", ] [[package]] @@ -549,13 +549,13 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15c400bc8a779107d8f3a67b14375db07dbd2bc31163bf085a8e9097f36f7179" dependencies = [ - "dioxus-core", - "internment", - "krates", - "proc-macro2", - "quote", - "syn", - "tracing", + "dioxus-core", + "internment", + "krates", + "proc-macro2", + "quote", + "syn", + "tracing", ] [[package]] @@ -564,14 +564,14 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e3e224cd3d3713f159f0199fc088c292a0f4adb94996b48120157f6a8f8342d" dependencies = [ - "dioxus-core", - "futures-channel", - "futures-util", - "generational-box", - "once_cell", - "parking_lot", - "rustc-hash", - "tracing", + "dioxus-core", + "futures-channel", + "futures-util", + "generational-box", + "once_cell", + "parking_lot", + "rustc-hash", + "tracing", ] [[package]] @@ -580,23 +580,23 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0855ac81fcc9252a0863930a7a7cbb2504fc1b6efe893489c8d0e23aaeb2cb9" dependencies = [ - "async-trait", - "console_error_panic_hook", - "dioxus-core", - "dioxus-html", - "dioxus-interpreter-js", - "futures-channel", - "futures-util", - "generational-box", - "js-sys", - "rustc-hash", - "serde", - "serde-wasm-bindgen", - "serde_json", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "async-trait", + "console_error_panic_hook", + "dioxus-core", + "dioxus-html", + "dioxus-interpreter-js", + "futures-channel", + "futures-util", + "generational-box", + "js-sys", + "rustc-hash", + "serde", + "serde-wasm-bindgen", + "serde_json", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] @@ -605,11 +605,11 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5ef2cad17001c1155f019cb69adbacd620644566d78a77d0778807bb106a337" dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "server_fn_macro", - "syn", + "convert_case", + "proc-macro2", + "quote", + "server_fn_macro", + "syn", ] [[package]] @@ -618,7 +618,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293" dependencies = [ - "enumset_derive", + "enumset_derive", ] [[package]] @@ -627,10 +627,10 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242" dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", + "darling", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -645,8 +645,8 @@ version = "0.22.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0f0eb73b934648cd7a4a61f1b15391cd95dab0b4da6e2e66c2a072c144b4a20" dependencies = [ - "num-traits", - "serde", + "num-traits", + "serde", ] [[package]] @@ -655,9 +655,9 @@ version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", + "concurrent-queue", + "parking", + "pin-project-lite", ] [[package]] @@ -666,8 +666,8 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "event-listener", - "pin-project-lite", + "event-listener", + "pin-project-lite", ] [[package]] @@ -694,7 +694,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "percent-encoding", + "percent-encoding", ] [[package]] @@ -703,13 +703,13 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", ] [[package]] @@ -718,8 +718,8 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ - "futures-core", - "futures-sink", + "futures-core", + "futures-sink", ] [[package]] @@ -734,9 +734,9 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ - "futures-core", - "futures-task", - "futures-util", + "futures-core", + "futures-task", + "futures-util", ] [[package]] @@ -751,8 +751,8 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "futures-core", - "pin-project-lite", + "futures-core", + "pin-project-lite", ] [[package]] @@ -761,9 +761,9 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -784,16 +784,16 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", ] [[package]] @@ -802,7 +802,7 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "557cf2cbacd0504c6bf8c29f52f8071e0de1d9783346713dc6121d7fa1e5d0e0" dependencies = [ - "parking_lot", + "parking_lot", ] [[package]] @@ -811,17 +811,17 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28999cda5ef6916ffd33fb4a7b87e1de633c47c0dc6d97905fee1cdaa142b94d" dependencies = [ - "gloo-console", - "gloo-dialogs", - "gloo-events", - "gloo-file", - "gloo-history", - "gloo-net 0.3.1", - "gloo-render", - "gloo-storage", - "gloo-timers", - "gloo-utils 0.1.7", - "gloo-worker", + "gloo-console", + "gloo-dialogs", + "gloo-events", + "gloo-file", + "gloo-history", + "gloo-net 0.3.1", + "gloo-render", + "gloo-storage", + "gloo-timers", + "gloo-utils 0.1.7", + "gloo-worker", ] [[package]] @@ -830,11 +830,11 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82b7ce3c05debe147233596904981848862b068862e9ec3e34be446077190d3f" dependencies = [ - "gloo-utils 0.1.7", - "js-sys", - "serde", - "wasm-bindgen", - "web-sys", + "gloo-utils 0.1.7", + "js-sys", + "serde", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -843,8 +843,8 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67062364ac72d27f08445a46cab428188e2e224ec9e37efdba48ae8c289002e6" dependencies = [ - "wasm-bindgen", - "web-sys", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -853,8 +853,8 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68b107f8abed8105e4182de63845afcc7b69c098b7852a813ea7462a320992fc" dependencies = [ - "wasm-bindgen", - "web-sys", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -863,10 +863,10 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d5564e570a38b43d78bdc063374a0c3098c4f0d64005b12f9bbe87e869b6d7" dependencies = [ - "gloo-events", - "js-sys", - "wasm-bindgen", - "web-sys", + "gloo-events", + "js-sys", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -875,14 +875,14 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85725d90bf0ed47063b3930ef28e863658a7905989e9929a8708aab74a1d5e7f" dependencies = [ - "gloo-events", - "gloo-utils 0.1.7", - "serde", - "serde-wasm-bindgen", - "serde_urlencoded", - "thiserror", - "wasm-bindgen", - "web-sys", + "gloo-events", + "gloo-utils 0.1.7", + "serde", + "serde-wasm-bindgen", + "serde_urlencoded", + "thiserror", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -891,19 +891,19 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a66b4e3c7d9ed8d315fd6b97c8b1f74a7c6ecbbc2320e65ae7ed38b7068cc620" dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils 0.1.7", - "http 0.2.12", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.1.7", + "http 0.2.12", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] @@ -912,19 +912,19 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils 0.2.0", - "http 1.1.0", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.2.0", + "http 1.1.0", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] @@ -933,8 +933,8 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fd9306aef67cfd4449823aadcd14e3958e0800aa2183955a309112a84ec7764" dependencies = [ - "wasm-bindgen", - "web-sys", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -943,13 +943,13 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d6ab60bf5dbfd6f0ed1f7843da31b41010515c745735c970e821945ca91e480" dependencies = [ - "gloo-utils 0.1.7", - "js-sys", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "web-sys", + "gloo-utils 0.1.7", + "js-sys", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -958,8 +958,8 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" dependencies = [ - "js-sys", - "wasm-bindgen", + "js-sys", + "wasm-bindgen", ] [[package]] @@ -968,11 +968,11 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e" dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -981,11 +981,11 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" dependencies = [ - "js-sys", - "serde", - "serde_json", - "wasm-bindgen", - "web-sys", + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -994,15 +994,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13471584da78061a28306d1359dd0178d8d6fc1c7c80e5e35d27260346e0516a" dependencies = [ - "anymap2", - "bincode", - "gloo-console", - "gloo-utils 0.1.7", - "js-sys", - "serde", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "anymap2", + "bincode", + "gloo-console", + "gloo-utils 0.1.7", + "js-sys", + "serde", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] @@ -1011,8 +1011,8 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" dependencies = [ - "cfg-if", - "crunchy", + "cfg-if", + "crunchy", ] [[package]] @@ -1021,8 +1021,8 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash", - "allocator-api2", + "ahash", + "allocator-api2", ] [[package]] @@ -1031,9 +1031,9 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ - "bytes", - "fnv", - "itoa", + "bytes", + "fnv", + "itoa", ] [[package]] @@ -1042,9 +1042,9 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ - "bytes", - "fnv", - "itoa", + "bytes", + "fnv", + "itoa", ] [[package]] @@ -1059,8 +1059,8 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "unicode-bidi", + "unicode-normalization", ] [[package]] @@ -1069,8 +1069,8 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" dependencies = [ - "equivalent", - "hashbrown", + "equivalent", + "hashbrown", ] [[package]] @@ -1079,8 +1079,8 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04e8e537b529b8674e97e9fb82c10ff168a290ac3867a0295f112061ffbca1ef" dependencies = [ - "hashbrown", - "parking_lot", + "hashbrown", + "parking_lot", ] [[package]] @@ -1089,18 +1089,18 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b84ee245c606aeb0841649a9288e3eae8c61b853a8cd5c0e14450e96d53d28f" dependencies = [ - "blocking", - "cfg-if", - "futures-core", - "futures-io", - "intmap", - "libc", - "once_cell", - "rustc_version", - "spinning", - "thiserror", - "to_method", - "winapi", + "blocking", + "cfg-if", + "futures-core", + "futures-io", + "intmap", + "libc", + "once_cell", + "rustc_version", + "spinning", + "thiserror", + "to_method", + "winapi", ] [[package]] @@ -1121,7 +1121,7 @@ version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ - "wasm-bindgen", + "wasm-bindgen", ] [[package]] @@ -1130,9 +1130,9 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags", - "serde", - "unicode-segmentation", + "bitflags", + "serde", + "unicode-segmentation", ] [[package]] @@ -1141,11 +1141,11 @@ version = "0.16.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcb3baf2360eb25ad31f0ada3add63927ada6db457791979b82ac199f835cb9" dependencies = [ - "cargo-platform", - "cargo_metadata", - "cfg-expr", - "petgraph", - "semver", + "cargo-platform", + "cargo_metadata", + "cfg-expr", + "petgraph", + "semver", ] [[package]] @@ -1166,8 +1166,8 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ - "autocfg", - "scopeguard", + "autocfg", + "scopeguard", ] [[package]] @@ -1188,7 +1188,7 @@ version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" dependencies = [ - "hashbrown", + "hashbrown", ] [[package]] @@ -1209,8 +1209,8 @@ version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ - "overload", - "winapi", + "overload", + "winapi", ] [[package]] @@ -1219,7 +1219,7 @@ version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "autocfg", + "autocfg", ] [[package]] @@ -1234,7 +1234,7 @@ version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" dependencies = [ - "num-traits", + "num-traits", ] [[package]] @@ -1255,8 +1255,8 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ - "lock_api", - "parking_lot_core", + "lock_api", + "parking_lot_core", ] [[package]] @@ -1265,11 +1265,11 @@ version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets", + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", ] [[package]] @@ -1284,8 +1284,8 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ - "fixedbitset", - "indexmap", + "fixedbitset", + "indexmap", ] [[package]] @@ -1294,7 +1294,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" dependencies = [ - "pin-project-internal", + "pin-project-internal", ] [[package]] @@ -1303,9 +1303,9 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1326,9 +1326,9 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", + "atomic-waker", + "fastrand", + "futures-io", ] [[package]] @@ -1337,8 +1337,8 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ - "proc-macro2", - "syn", + "proc-macro2", + "syn", ] [[package]] @@ -1347,7 +1347,7 @@ version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ - "unicode-ident", + "unicode-ident", ] [[package]] @@ -1356,7 +1356,7 @@ version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ - "proc-macro2", + "proc-macro2", ] [[package]] @@ -1365,7 +1365,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ - "bitflags", + "bitflags", ] [[package]] @@ -1380,7 +1380,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver", + "semver", ] [[package]] @@ -1401,7 +1401,7 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" dependencies = [ - "serde", + "serde", ] [[package]] @@ -1410,7 +1410,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" dependencies = [ - "futures-core", + "futures-core", ] [[package]] @@ -1419,7 +1419,7 @@ version = "1.0.207" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2" dependencies = [ - "serde_derive", + "serde_derive", ] [[package]] @@ -1428,8 +1428,8 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" dependencies = [ - "ordered-float", - "serde", + "ordered-float", + "serde", ] [[package]] @@ -1438,9 +1438,9 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", + "js-sys", + "serde", + "wasm-bindgen", ] [[package]] @@ -1449,9 +1449,9 @@ version = "1.0.207" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1460,10 +1460,10 @@ version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", + "itoa", + "memchr", + "ryu", + "serde", ] [[package]] @@ -1472,9 +1472,9 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c" dependencies = [ - "percent-encoding", - "serde", - "thiserror", + "percent-encoding", + "serde", + "thiserror", ] [[package]] @@ -1483,9 +1483,9 @@ version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1494,10 +1494,10 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", + "form_urlencoded", + "itoa", + "ryu", + "serde", ] [[package]] @@ -1506,26 +1506,26 @@ version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "024b400db1aca5bd4188714f7bbbf7a2e1962b9a12a80b2a21e937e509086963" dependencies = [ - "bytes", - "const_format", - "dashmap", - "futures", - "gloo-net 0.6.0", - "http 1.1.0", - "js-sys", - "once_cell", - "send_wrapper", - "serde", - "serde_json", - "serde_qs", - "server_fn_macro_default", - "thiserror", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "xxhash-rust", + "bytes", + "const_format", + "dashmap", + "futures", + "gloo-net 0.6.0", + "http 1.1.0", + "js-sys", + "once_cell", + "send_wrapper", + "serde", + "serde_json", + "serde_qs", + "server_fn_macro_default", + "thiserror", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "xxhash-rust", ] [[package]] @@ -1534,12 +1534,12 @@ version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cf0e6f71fc924df36e87f27dfbd447f0bedd092d365db3a5396878256d9f00c" dependencies = [ - "const_format", - "convert_case", - "proc-macro2", - "quote", - "syn", - "xxhash-rust", + "const_format", + "convert_case", + "proc-macro2", + "quote", + "syn", + "xxhash-rust", ] [[package]] @@ -1548,8 +1548,8 @@ version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "556e4fd51eb9ee3e7d9fb0febec6cef486dcbc8f7f427591dfcfebee1abe1ad4" dependencies = [ - "server_fn_macro", - "syn", + "server_fn_macro", + "syn", ] [[package]] @@ -1558,7 +1558,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ - "lazy_static", + "lazy_static", ] [[package]] @@ -1567,7 +1567,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ - "autocfg", + "autocfg", ] [[package]] @@ -1576,8 +1576,8 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcfaf791ff02f48f3518ce825d32cf419c13a43c1d8b1232f74ac89f339c46d2" dependencies = [ - "sledgehammer_bindgen_macro", - "wasm-bindgen", + "sledgehammer_bindgen_macro", + "wasm-bindgen", ] [[package]] @@ -1586,8 +1586,8 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edc90d3e8623d29a664cd8dba5078b600dd203444f00b9739f744e4c6e7aeaf2" dependencies = [ - "quote", - "syn", + "quote", + "syn", ] [[package]] @@ -1596,9 +1596,9 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f20798defa0e9d4eff9ca451c7f84774c7378a9c3b5a40112cfa2b3eadb97ae2" dependencies = [ - "lru", - "once_cell", - "rustc-hash", + "lru", + "once_cell", + "rustc-hash", ] [[package]] @@ -1607,8 +1607,8 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" dependencies = [ - "serde", - "version_check", + "serde", + "version_check", ] [[package]] @@ -1623,7 +1623,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d4f0e86297cad2658d92a707320d87bf4e6ae1050287f51d19b67ef3f153a7b" dependencies = [ - "lock_api", + "lock_api", ] [[package]] @@ -1632,9 +1632,9 @@ version = "2.0.74" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] @@ -1643,7 +1643,7 @@ version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ - "thiserror-impl", + "thiserror-impl", ] [[package]] @@ -1652,9 +1652,9 @@ version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1663,8 +1663,8 @@ version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ - "cfg-if", - "once_cell", + "cfg-if", + "once_cell", ] [[package]] @@ -1673,7 +1673,7 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ - "tinyvec_macros", + "tinyvec_macros", ] [[package]] @@ -1692,8 +1692,8 @@ checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8" name = "todo-baggins" version = "0.1.0" dependencies = [ - "dioxus", - "dioxus-logger", + "dioxus", + "dioxus-logger", ] [[package]] @@ -1702,9 +1702,9 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", + "pin-project-lite", + "tracing-attributes", + "tracing-core", ] [[package]] @@ -1713,9 +1713,9 @@ version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -1724,8 +1724,8 @@ version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ - "once_cell", - "valuable", + "once_cell", + "valuable", ] [[package]] @@ -1734,9 +1734,9 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "log", - "once_cell", - "tracing-core", + "log", + "once_cell", + "tracing-core", ] [[package]] @@ -1745,12 +1745,12 @@ version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ - "nu-ansi-term", - "sharded-slab", - "smallvec", - "thread_local", - "tracing-core", - "tracing-log", + "nu-ansi-term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", ] [[package]] @@ -1759,9 +1759,9 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" dependencies = [ - "tracing", - "tracing-subscriber", - "wasm-bindgen", + "tracing", + "tracing-subscriber", + "wasm-bindgen", ] [[package]] @@ -1782,7 +1782,7 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ - "tinyvec", + "tinyvec", ] [[package]] @@ -1803,9 +1803,9 @@ version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", + "form_urlencoded", + "idna", + "percent-encoding", ] [[package]] @@ -1832,9 +1832,9 @@ version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ - "cfg-if", - "once_cell", - "wasm-bindgen-macro", + "cfg-if", + "once_cell", + "wasm-bindgen-macro", ] [[package]] @@ -1843,13 +1843,13 @@ version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", ] [[package]] @@ -1858,10 +1858,10 @@ version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -1870,8 +1870,8 @@ version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ - "quote", - "wasm-bindgen-macro-support", + "quote", + "wasm-bindgen-macro-support", ] [[package]] @@ -1880,11 +1880,11 @@ version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", ] [[package]] @@ -1899,11 +1899,11 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", ] [[package]] @@ -1912,8 +1912,8 @@ version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ - "js-sys", - "wasm-bindgen", + "js-sys", + "wasm-bindgen", ] [[package]] @@ -1922,8 +1922,8 @@ 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", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] @@ -1944,14 +1944,14 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] @@ -2014,7 +2014,7 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "zerocopy-derive", + "zerocopy-derive", ] [[package]] @@ -2023,7 +2023,7 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2", + "quote", + "syn", ] From 72de33dab877c54c3c6e6e4244aae78c34adbf3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:19:30 +0200 Subject: [PATCH 03/50] refactor: set the title in the Dioxus configuration --- Dioxus.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dioxus.toml b/Dioxus.toml index 5f5dfa2..b99cf59 100644 --- a/Dioxus.toml +++ b/Dioxus.toml @@ -16,7 +16,7 @@ asset_dir = "assets" [web.app] # HTML title tag content -title = "todo-baggins" +title = "Todo Baggins" [web.watcher] From 37b7149e30f00c433c8c85c0da0388d848168b61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:47:55 +0200 Subject: [PATCH 04/50] feat: setup Tailwind.css --- .gitignore | 5 +- README.md | 17 - assets/main.css | 40 -- assets/styles/.gitignore | 1 + input.css | 3 - package-lock.json | 1386 ++++++++++++++++++++++++++++++++++++++ package.json | 9 + src/styles/tailwind.css | 6 + 8 files changed, 1403 insertions(+), 64 deletions(-) delete mode 100644 README.md delete mode 100644 assets/main.css create mode 100644 assets/styles/.gitignore delete mode 100644 input.css create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/styles/tailwind.css diff --git a/.gitignore b/.gitignore index 5f0b8d2..a7a3e9d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,9 @@ -# Generated by Cargo -# will have compiled files and executables /target/ /dist/ /static/ /.dioxus/ +/node_modules/ -# this file will generate by tailwind: /assets/tailwind.css -# These are backup files generated by rustfmt **/*.rs.bk diff --git a/README.md b/README.md deleted file mode 100644 index 0458151..0000000 --- a/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Development - -1. Install npm: https://docs.npmjs.com/downloading-and-installing-node-js-and-npm -2. Install the tailwind css cli: https://tailwindcss.com/docs/installation -3. Run the following command in the root of the project to start the tailwind CSS compiler: - -```bash -npx tailwindcss -i ./input.css -o ./assets/tailwind.css --watch -``` - -Run the following command in the root of the project to start the Dioxus dev server: - -```bash -dx serve --hot-reload -``` - -- Open the browser to http://localhost:8080 \ No newline at end of file diff --git a/assets/main.css b/assets/main.css deleted file mode 100644 index affbeb0..0000000 --- a/assets/main.css +++ /dev/null @@ -1,40 +0,0 @@ -body { - background-color: #111216; -} - -#main { - margin: 0; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif -} - -#links { - width: 400px; - text-align: left; - font-size: x-large; - color: white; - display: flex; - flex-direction: column; -} - -#links a { - color: white; - text-decoration: none; - margin-top: 20px; - margin: 10px; - border: white 1px solid; - border-radius: 5px; - padding: 10px; -} - -#links a:hover { - background-color: #1f1f1f; - cursor: pointer; -} - -#header { - max-width: 1200px; -} diff --git a/assets/styles/.gitignore b/assets/styles/.gitignore new file mode 100644 index 0000000..ddeb771 --- /dev/null +++ b/assets/styles/.gitignore @@ -0,0 +1 @@ +tailwind_output.css diff --git a/input.css b/input.css deleted file mode 100644 index bd6213e..0000000 --- a/input.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1f86e53 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1386 @@ +{ + "name": "todo_baggins", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "tailwindcss": "^3.4.6" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", + "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yaml": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1efcb98 --- /dev/null +++ b/package.json @@ -0,0 +1,9 @@ +{ + "dependencies": { + "tailwindcss": "^3.4.6" + }, + "scripts": { + "build": "tailwindcss -i src/styles/tailwind.css -o assets/styles/tailwind_output.css", + "watch": "npm run build -- --watch" + } +} diff --git a/src/styles/tailwind.css b/src/styles/tailwind.css new file mode 100644 index 0000000..23e8f29 --- /dev/null +++ b/src/styles/tailwind.css @@ -0,0 +1,6 @@ +/*noinspection CssInvalidAtRule*/ +@tailwind base; +/*noinspection CssInvalidAtRule*/ +@tailwind components; +/*noinspection CssInvalidAtRule*/ +@tailwind utilities; From ee55e0799b3a35766385e84ed8b6d406d9c1c1fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Thu, 15 Aug 2024 19:38:29 +0200 Subject: [PATCH 05/50] chore: update .gitignore --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index a7a3e9d..2d4f7aa 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,4 @@ /.dioxus/ /node_modules/ -/assets/tailwind.css - **/*.rs.bk From f64a6b1b32645c43e4ab92433b9cf729c85931c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Thu, 15 Aug 2024 19:38:40 +0200 Subject: [PATCH 06/50] feat: add a Docker compose file for development --- .dockerignore | 11 +++++++++++ docker-compose-dev.yml | 31 +++++++++++++++++++++++++++++++ docker-compose-prod.yml | 0 docker/dev/app/Dockerfile | 10 ++++++++++ 4 files changed, 52 insertions(+) create mode 100644 .dockerignore create mode 100644 docker-compose-dev.yml create mode 100755 docker-compose-prod.yml create mode 100644 docker/dev/app/Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..1a4d15f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +/.dioxus/ +/.git/ +/.github/ +/dist/ +/debug/ +/docker/ +/node_modules/ +/static/ +/target/ +/docker-compose-dev.yml +/docker-compose-prod.yml diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml new file mode 100644 index 0000000..21ed00b --- /dev/null +++ b/docker-compose-dev.yml @@ -0,0 +1,31 @@ +services: + app: + build: + dockerfile: docker/dev/app/Dockerfile + ports: [ "8000:8000" ] + volumes: + - .:/srv/app + - /srv/app/.git/ + - /srv/app/.dioxus/ + - /srv/app/dist/ + - /srv/app/debug/ + - /srv/app/docker/ + - /srv/app/node_modules/ + - /srv/app/static/ + - /srv/app/target/ + - /dev/null:/srv/app/docker-compose-dev.yml + - /dev/null:/srv/app/docker-compose-prod.yml + restart: always + depends_on: [ "db" ] + + db: + image: postgres:16.4-bookworm + environment: + POSTGRES_DB: todo_baggins + POSTGRES_USER: app + POSTGRES_PASSWORD: app + volumes: [ "db_data:/var/lib/postgresql/data" ] + restart: always + +volumes: + db_data: diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml new file mode 100755 index 0000000..e69de29 diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile new file mode 100644 index 0000000..523b986 --- /dev/null +++ b/docker/dev/app/Dockerfile @@ -0,0 +1,10 @@ +FROM rust:1.80-bookworm + +RUN rustup target add wasm32-unknown-unknown +RUN cargo install dioxus-cli +RUN apt-get update && apt-get install -y nodejs npm + +COPY . /srv/app +WORKDIR /srv/app + +CMD npm run watch & dx serve --port 8000 From 04bcc81b71748095267e8debb20dc52cb415df35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Thu, 15 Aug 2024 19:58:11 +0200 Subject: [PATCH 07/50] chore: update .idea --- .idea/modules.xml | 2 +- .idea/{todo_baggins.iml => todo-baggins.iml} | 2 -- .idea/vcs.xml | 8 +------- 3 files changed, 2 insertions(+), 10 deletions(-) rename .idea/{todo_baggins.iml => todo-baggins.iml} (74%) diff --git a/.idea/modules.xml b/.idea/modules.xml index daa234f..418c517 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ <project version="4"> <component name="ProjectModuleManager"> <modules> - <module fileurl="file://$PROJECT_DIR$/.idea/todo_baggins.iml" filepath="$PROJECT_DIR$/.idea/todo_baggins.iml" /> + <module fileurl="file://$PROJECT_DIR$/.idea/todo-baggins.iml" filepath="$PROJECT_DIR$/.idea/todo-baggins.iml" /> </modules> </component> </project> \ No newline at end of file diff --git a/.idea/todo_baggins.iml b/.idea/todo-baggins.iml similarity index 74% rename from .idea/todo_baggins.iml rename to .idea/todo-baggins.iml index 0e0cd5b..cf84ae4 100644 --- a/.idea/todo_baggins.iml +++ b/.idea/todo-baggins.iml @@ -2,9 +2,7 @@ <module type="EMPTY_MODULE" version="4"> <component name="NewModuleRootManager"> <content url="file://$MODULE_DIR$"> - <sourceFolder url="file://$MODULE_DIR$/backend/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> - <excludeFolder url="file://$MODULE_DIR$/backend/target" /> <excludeFolder url="file://$MODULE_DIR$/target" /> </content> <orderEntry type="inheritedJdk" /> diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 4c6280e..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,12 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> - <component name="CommitMessageInspectionProfile"> - <profile version="1.0"> - <inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" /> - <inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" /> - </profile> - </component> <component name="VcsDirectoryMappings"> - <mapping directory="$PROJECT_DIR$" vcs="Git" /> + <mapping directory="" vcs="Git" /> </component> </project> \ No newline at end of file From 894a7ae5ebfb5e282acf79d6e37aec310325bd64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Thu, 15 Aug 2024 19:59:00 +0200 Subject: [PATCH 08/50] chore: rename package name in package-lock.json --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 1f86e53..fcd974d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "todo_baggins", + "name": "todo-baggins", "lockfileVersion": 3, "requires": true, "packages": { From a9e2befa9aefb2a8264adb3b692553018ad6b0f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Thu, 15 Aug 2024 20:03:54 +0200 Subject: [PATCH 09/50] chore: update .idea --- .idea/vcs.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1dd..7ddfc9e 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,5 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> + <component name="CommitMessageInspectionProfile"> + <profile version="1.0"> + <inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" /> + <inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" /> + </profile> + </component> <component name="VcsDirectoryMappings"> <mapping directory="" vcs="Git" /> </component> From bdc1738cba8edb3277f8229faf7163206f278417 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Thu, 15 Aug 2024 20:04:10 +0200 Subject: [PATCH 10/50] chore: create a run configuration for the development Docker compose --- .idea/runConfigurations/dev.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .idea/runConfigurations/dev.xml diff --git a/.idea/runConfigurations/dev.xml b/.idea/runConfigurations/dev.xml new file mode 100644 index 0000000..8d4bc2a --- /dev/null +++ b/.idea/runConfigurations/dev.xml @@ -0,0 +1,11 @@ +<component name="ProjectRunConfigurationManager"> + <configuration default="false" name="dev" type="docker-deploy" factoryName="docker-compose.yml" server-name="Docker"> + <deployment type="docker-compose.yml"> + <settings> + <option name="envFilePath" value="" /> + <option name="sourceFilePath" value="docker-compose-dev.yml" /> + </settings> + </deployment> + <method v="2" /> + </configuration> +</component> \ No newline at end of file From f3b9057df0d52473c8fc67e1434da7ae4366255c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Fri, 16 Aug 2024 09:28:03 +0200 Subject: [PATCH 11/50] chore: reorder Docker compose attributes --- docker-compose-dev.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 21ed00b..8ce6f19 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -2,9 +2,9 @@ services: app: build: dockerfile: docker/dev/app/Dockerfile - ports: [ "8000:8000" ] volumes: - .:/srv/app + - .env.dev:/srv/app/.env - /srv/app/.git/ - /srv/app/.dioxus/ - /srv/app/dist/ @@ -16,15 +16,17 @@ services: - /dev/null:/srv/app/docker-compose-dev.yml - /dev/null:/srv/app/docker-compose-prod.yml restart: always + ports: [ "8000:8000" ] depends_on: [ "db" ] db: image: postgres:16.4-bookworm + volumes: [ "db_data:/var/lib/postgresql/data" ] + ports: [ "5432:5342" ] environment: POSTGRES_DB: todo_baggins POSTGRES_USER: app POSTGRES_PASSWORD: app - volumes: [ "db_data:/var/lib/postgresql/data" ] restart: always volumes: From 08acd12ff46df3ddb675c1bf7a9733b731290ec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Fri, 16 Aug 2024 09:29:29 +0200 Subject: [PATCH 12/50] fix: run `npm install` in the Docker development app container --- docker/dev/app/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile index 523b986..77bac30 100644 --- a/docker/dev/app/Dockerfile +++ b/docker/dev/app/Dockerfile @@ -7,4 +7,6 @@ RUN apt-get update && apt-get install -y nodejs npm COPY . /srv/app WORKDIR /srv/app +RUN npm install + CMD npm run watch & dx serve --port 8000 From a53d6dbb85c0b30c19f92c0e4e42a8d3a00a7649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Fri, 16 Aug 2024 09:30:16 +0200 Subject: [PATCH 13/50] build: install Diesel --- .env.dev | 1 + .gitignore | 3 ++ Cargo.lock | 90 +++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + docker/dev/app/Dockerfile | 2 +- 5 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 .env.dev diff --git a/.env.dev b/.env.dev new file mode 100644 index 0000000..e876be4 --- /dev/null +++ b/.env.dev @@ -0,0 +1 @@ +DATABASE_URL=postgres://app:app@db/todo_baggins diff --git a/.gitignore b/.gitignore index 2d4f7aa..ce4a85a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ /node_modules/ **/*.rs.bk + +.env +.env.prod diff --git a/Cargo.lock b/Cargo.lock index f7eead0..bc6232d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -110,6 +110,12 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "bytes" version = "1.7.1" @@ -276,6 +282,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", + "strsim", "syn", ] @@ -303,6 +310,41 @@ dependencies = [ "parking_lot_core", ] +[[package]] +name = "diesel" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf97ee7261bb708fa3402fa9c17a54b70e90e3cb98afb3dc8999d5512cb03f94" +dependencies = [ + "bitflags", + "byteorder", + "diesel_derives", + "itoa", + "pq-sys", +] + +[[package]] +name = "diesel_derives" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ff2be1e7312c858b2ef974f5c7089833ae57b5311b334b30923af58e5718d8" +dependencies = [ + "diesel_table_macro_syntax", + "dsl_auto_type", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "diesel_table_macro_syntax" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" +dependencies = [ + "syn", +] + [[package]] name = "dioxus" version = "0.5.6" @@ -612,6 +654,26 @@ dependencies = [ "syn", ] +[[package]] +name = "dsl_auto_type" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9abe6314103864cc2d8901b7ae224e0ab1a103a0a416661b4097b0779b607" +dependencies = [ + "darling", + "either", + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + [[package]] name = "enumset" version = "1.1.5" @@ -1025,6 +1087,12 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "http" version = "0.2.12" @@ -1331,6 +1399,15 @@ dependencies = [ "futures-io", ] +[[package]] +name = "pq-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a24ff9e4cf6945c988f0db7005d87747bf72864965c3529d259ad155ac41d584" +dependencies = [ + "vcpkg", +] + [[package]] name = "prettyplease" version = "0.2.20" @@ -1626,6 +1703,12 @@ dependencies = [ "lock_api", ] +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "syn" version = "2.0.74" @@ -1692,6 +1775,7 @@ checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8" name = "todo-baggins" version = "0.1.0" dependencies = [ + "diesel", "dioxus", "dioxus-logger", ] @@ -1820,6 +1904,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[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" diff --git a/Cargo.toml b/Cargo.toml index ea950f0..131176d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +diesel = { version = "2.2.2", features = ["postgres"] } dioxus = { version = "0.5", features = ["web", "router"] } diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile index 77bac30..f992884 100644 --- a/docker/dev/app/Dockerfile +++ b/docker/dev/app/Dockerfile @@ -1,7 +1,7 @@ FROM rust:1.80-bookworm RUN rustup target add wasm32-unknown-unknown -RUN cargo install dioxus-cli +RUN cargo install dioxus-cli diesel_cli RUN apt-get update && apt-get install -y nodejs npm COPY . /srv/app From 3173b6361d82dd90729780f3fd42403b4e50ca11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Fri, 16 Aug 2024 13:12:57 +0200 Subject: [PATCH 14/50] fix: database container port --- docker-compose-dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 8ce6f19..3b90249 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -22,7 +22,7 @@ services: db: image: postgres:16.4-bookworm volumes: [ "db_data:/var/lib/postgresql/data" ] - ports: [ "5432:5342" ] + ports: [ "5432:5432" ] environment: POSTGRES_DB: todo_baggins POSTGRES_USER: app From f0e050c3f8c74a52290b5ec03d82281efa380f3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Fri, 16 Aug 2024 13:13:31 +0200 Subject: [PATCH 15/50] chore: setup Diesel --- diesel.toml | 9 +++++ .../down.sql | 6 ++++ .../up.sql | 36 +++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 diesel.toml create mode 100644 migrations/00000000000000_diesel_initial_setup/down.sql create mode 100644 migrations/00000000000000_diesel_initial_setup/up.sql diff --git a/diesel.toml b/diesel.toml new file mode 100644 index 0000000..069f77a --- /dev/null +++ b/diesel.toml @@ -0,0 +1,9 @@ +# For documentation on how to configure this file, +# see https://diesel.rs/guides/configuring-diesel-cli + +[print_schema] +file = "src/schema.rs" +custom_type_derives = ["diesel::query_builder::QueryId", "Clone"] + +[migrations_directory] +dir = "/home/matous/Documents/todo-baggins/migrations" diff --git a/migrations/00000000000000_diesel_initial_setup/down.sql b/migrations/00000000000000_diesel_initial_setup/down.sql new file mode 100644 index 0000000..a9f5260 --- /dev/null +++ b/migrations/00000000000000_diesel_initial_setup/down.sql @@ -0,0 +1,6 @@ +-- This file was automatically created by Diesel to setup helper functions +-- and other internal bookkeeping. This file is safe to edit, any future +-- changes will be added to existing projects as new migrations. + +DROP FUNCTION IF EXISTS diesel_manage_updated_at(_tbl regclass); +DROP FUNCTION IF EXISTS diesel_set_updated_at(); diff --git a/migrations/00000000000000_diesel_initial_setup/up.sql b/migrations/00000000000000_diesel_initial_setup/up.sql new file mode 100644 index 0000000..d68895b --- /dev/null +++ b/migrations/00000000000000_diesel_initial_setup/up.sql @@ -0,0 +1,36 @@ +-- This file was automatically created by Diesel to setup helper functions +-- and other internal bookkeeping. This file is safe to edit, any future +-- changes will be added to existing projects as new migrations. + + + + +-- Sets up a trigger for the given table to automatically set a column called +-- `updated_at` whenever the row is modified (unless `updated_at` was included +-- in the modified columns) +-- +-- # Example +-- +-- ```sql +-- CREATE TABLE users (id SERIAL PRIMARY KEY, updated_at TIMESTAMP NOT NULL DEFAULT NOW()); +-- +-- SELECT diesel_manage_updated_at('users'); +-- ``` +CREATE OR REPLACE FUNCTION diesel_manage_updated_at(_tbl regclass) RETURNS VOID AS $$ +BEGIN + EXECUTE format('CREATE TRIGGER set_updated_at BEFORE UPDATE ON %s + FOR EACH ROW EXECUTE PROCEDURE diesel_set_updated_at()', _tbl); +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION diesel_set_updated_at() RETURNS trigger AS $$ +BEGIN + IF ( + NEW IS DISTINCT FROM OLD AND + NEW.updated_at IS NOT DISTINCT FROM OLD.updated_at + ) THEN + NEW.updated_at := current_timestamp; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; From 4ae66f4ae2fd943daac8836211b10d10258928d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Fri, 16 Aug 2024 13:25:27 +0200 Subject: [PATCH 16/50] chore: add a DB data source to .idea --- .idea/dataSources.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .idea/dataSources.xml diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..3c9bcff --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="DataSourceManagerImpl" format="xml" multifile-model="true"> + <data-source source="LOCAL" name="todo_baggins@localhost" uuid="1658668c-c2b8-426d-a22f-16fbad9eff0b"> + <driver-ref>postgresql</driver-ref> + <synchronize>true</synchronize> + <jdbc-driver>org.postgresql.Driver</jdbc-driver> + <jdbc-url>jdbc:postgresql://localhost:5432/todo_baggins</jdbc-url> + <working-dir>$ProjectFileDir$</working-dir> + </data-source> + </component> +</project> \ No newline at end of file From f9db555ec041d5d18c369d26763b0b921b272981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Fri, 16 Aug 2024 13:26:10 +0200 Subject: [PATCH 17/50] chore: add an SQL dialect to .idea --- .idea/dataSources.local.xml | 20 + .../1658668c-c2b8-426d-a22f-16fbad9eff0b.xml | 4913 +++++++++++++++++ .../_src_/database/todo_baggins.NgsZOg.meta | 1 + .../schema/information_schema.FNRwLQ.meta | 2 + .../schema/pg_catalog.0S1ZNQ.meta | 2 + .../schema/public.abK9xQ.meta | 2 + .../schema/public.abK9xQ.zip | Bin 0 -> 1779 bytes .idea/sqldialects.xml | 8 + 8 files changed, 4948 insertions(+) create mode 100644 .idea/dataSources.local.xml create mode 100644 .idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml create mode 100644 .idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg.meta create mode 100644 .idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/information_schema.FNRwLQ.meta create mode 100644 .idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/pg_catalog.0S1ZNQ.meta create mode 100644 .idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta create mode 100644 .idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.zip create mode 100644 .idea/sqldialects.xml diff --git a/.idea/dataSources.local.xml b/.idea/dataSources.local.xml new file mode 100644 index 0000000..a0dc61f --- /dev/null +++ b/.idea/dataSources.local.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="dataSourceStorageLocal" created-in="RR-242.20224.309"> + <data-source name="todo_baggins@localhost" uuid="1658668c-c2b8-426d-a22f-16fbad9eff0b"> + <database-info product="PostgreSQL" version="16.4 (Debian 16.4-1.pgdg120+1)" jdbc-version="4.2" driver-name="PostgreSQL JDBC Driver" driver-version="42.6.0" dbms="POSTGRES" exact-version="16.4" exact-driver-version="42.6"> + <identifier-quote-string>"</identifier-quote-string> + </database-info> + <case-sensitivity plain-identifiers="lower" quoted-identifiers="exact" /> + <secret-storage>master_key</secret-storage> + <user-name>app</user-name> + <schema-mapping> + <introspection-scope> + <node kind="database" qname="@"> + <node kind="schema" qname="@" /> + </node> + </introspection-scope> + </schema-mapping> + </data-source> + </component> +</project> \ No newline at end of file diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml new file mode 100644 index 0000000..aa0cfde --- /dev/null +++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml @@ -0,0 +1,4913 @@ +<?xml version="1.0" encoding="UTF-8"?> +<dataSource name="todo_baggins@localhost"> + <database-model serializer="dbm" dbms="POSTGRES" family-id="POSTGRES" format-version="4.53"> + <root id="1"> + <DateStyle>mdy</DateStyle> + <Grants>1||-9223372036854775808|c|G +1||10|c|G +1||10|C|G +1||10|T|G +4||-9223372036854775808|c|G +4||10|c|G +4||10|C|G +4||10|T|G</Grants> + <IntrospectionStateNumber>745</IntrospectionStateNumber> + <ServerVersion>16.4</ServerVersion> + <StartupTime>1723806748</StartupTime> + <TimeZones>true ACDT +true ACSST +false ACST +false ACT +false ACWST +true ADT +true AEDT +true AESST +false AEST +false AFT +true AKDT +false AKST +true ALMST +false ALMT +false AMST +false AMT +false ANAST +false ANAT +false ARST +false ART +false AST +true AWSST +false AWST +true AZOST +false AZOT +false AZST +false AZT +false Africa/Abidjan +false Africa/Accra +false Africa/Addis_Ababa +false Africa/Algiers +false Africa/Asmara +false Africa/Asmera +false Africa/Bamako +false Africa/Bangui +false Africa/Banjul +false Africa/Bissau +false Africa/Blantyre +false Africa/Brazzaville +false Africa/Bujumbura +true Africa/Cairo +false Africa/Casablanca +true Africa/Ceuta +false Africa/Conakry +false Africa/Dakar +false Africa/Dar_es_Salaam +false Africa/Djibouti +false Africa/Douala +false Africa/El_Aaiun +false Africa/Freetown +false Africa/Gaborone +false Africa/Harare +false Africa/Johannesburg +false Africa/Juba +false Africa/Kampala +false Africa/Khartoum +false Africa/Kigali +false Africa/Kinshasa +false Africa/Lagos +false Africa/Libreville +false Africa/Lome +false Africa/Luanda +false Africa/Lubumbashi +false Africa/Lusaka +false Africa/Malabo +false Africa/Maputo +false Africa/Maseru +false Africa/Mbabane +false Africa/Mogadishu +false Africa/Monrovia +false Africa/Nairobi +false Africa/Ndjamena +false Africa/Niamey +false Africa/Nouakchott +false Africa/Ouagadougou +false Africa/Porto-Novo +false Africa/Sao_Tome +false Africa/Timbuktu +false Africa/Tripoli +false Africa/Tunis +false Africa/Windhoek +true America/Adak +true America/Anchorage +false America/Anguilla +false America/Antigua +false America/Araguaina +false America/Argentina/Buenos_Aires +false America/Argentina/Catamarca +false America/Argentina/ComodRivadavia +false America/Argentina/Cordoba +false America/Argentina/Jujuy +false America/Argentina/La_Rioja +false America/Argentina/Mendoza +false America/Argentina/Rio_Gallegos +false America/Argentina/Salta +false America/Argentina/San_Juan +false America/Argentina/San_Luis +false America/Argentina/Tucuman +false America/Argentina/Ushuaia +false America/Aruba +false America/Asuncion +false America/Atikokan +true America/Atka +false America/Bahia +false America/Bahia_Banderas +false America/Barbados +false America/Belem +false America/Belize +false America/Blanc-Sablon +false America/Boa_Vista +false America/Bogota +true America/Boise +false America/Buenos_Aires +true America/Cambridge_Bay +false America/Campo_Grande +false America/Cancun +false America/Caracas +false America/Catamarca +false America/Cayenne +false America/Cayman +true America/Chicago +false America/Chihuahua +true America/Ciudad_Juarez +false America/Coral_Harbour +false America/Cordoba +false America/Costa_Rica +false America/Creston +false America/Cuiaba +false America/Curacao +false America/Danmarkshavn +false America/Dawson +false America/Dawson_Creek +true America/Denver +true America/Detroit +false America/Dominica +true America/Edmonton +false America/Eirunepe +false America/El_Salvador +true America/Ensenada +false America/Fort_Nelson +true America/Fort_Wayne +false America/Fortaleza +true America/Glace_Bay +true America/Godthab +true America/Goose_Bay +true America/Grand_Turk +false America/Grenada +false America/Guadeloupe +false America/Guatemala +false America/Guayaquil +false America/Guyana +true America/Halifax +true America/Havana +false America/Hermosillo +true America/Indiana/Indianapolis +true America/Indiana/Knox +true America/Indiana/Marengo +true America/Indiana/Petersburg +true America/Indiana/Tell_City +true America/Indiana/Vevay +true America/Indiana/Vincennes +true America/Indiana/Winamac +true America/Indianapolis +true America/Inuvik +true America/Iqaluit +false America/Jamaica +false America/Jujuy +true America/Juneau +true America/Kentucky/Louisville +true America/Kentucky/Monticello +true America/Knox_IN +false America/Kralendijk +false America/La_Paz +false America/Lima +true America/Los_Angeles +true America/Louisville +false America/Lower_Princes +false America/Maceio +false America/Managua +false America/Manaus +false America/Marigot +false America/Martinique +true America/Matamoros +false America/Mazatlan +false America/Mendoza +true America/Menominee +false America/Merida +true America/Metlakatla +false America/Mexico_City +true America/Miquelon +true America/Moncton +false America/Monterrey +false America/Montevideo +true America/Montreal +false America/Montserrat +true America/Nassau +true America/New_York +true America/Nipigon +true America/Nome +false America/Noronha +true America/North_Dakota/Beulah +true America/North_Dakota/Center +true America/North_Dakota/New_Salem +true America/Nuuk +true America/Ojinaga +false America/Panama +true America/Pangnirtung +false America/Paramaribo +false America/Phoenix +true America/Port-au-Prince +false America/Port_of_Spain +false America/Porto_Acre +false America/Porto_Velho +false America/Puerto_Rico +false America/Punta_Arenas +true America/Rainy_River +true America/Rankin_Inlet +false America/Recife +false America/Regina +true America/Resolute +false America/Rio_Branco +false America/Rosario +true America/Santa_Isabel +false America/Santarem +false America/Santiago +false America/Santo_Domingo +false America/Sao_Paulo +true America/Scoresbysund +true America/Shiprock +true America/Sitka +false America/St_Barthelemy +true America/St_Johns +false America/St_Kitts +false America/St_Lucia +false America/St_Thomas +false America/St_Vincent +false America/Swift_Current +false America/Tegucigalpa +true America/Thule +true America/Thunder_Bay +true America/Tijuana +true America/Toronto +false America/Tortola +true America/Vancouver +false America/Virgin +false America/Whitehorse +true America/Winnipeg +true America/Yakutat +true America/Yellowknife +false Antarctica/Casey +false Antarctica/Davis +false Antarctica/DumontDUrville +false Antarctica/Macquarie +false Antarctica/Mawson +false Antarctica/McMurdo +false Antarctica/Palmer +false Antarctica/Rothera +false Antarctica/South_Pole +false Antarctica/Syowa +true Antarctica/Troll +false Antarctica/Vostok +true Arctic/Longyearbyen +false Asia/Aden +false Asia/Almaty +false Asia/Amman +false Asia/Anadyr +false Asia/Aqtau +false Asia/Aqtobe +false Asia/Ashgabat +false Asia/Ashkhabad +false Asia/Atyrau +false Asia/Baghdad +false Asia/Bahrain +false Asia/Baku +false Asia/Bangkok +false Asia/Barnaul +true Asia/Beirut +false Asia/Bishkek +false Asia/Brunei +false Asia/Calcutta +false Asia/Chita +false Asia/Choibalsan +false Asia/Chongqing +false Asia/Chungking +false Asia/Colombo +false Asia/Dacca +false Asia/Damascus +false Asia/Dhaka +false Asia/Dili +false Asia/Dubai +false Asia/Dushanbe +true Asia/Famagusta +true Asia/Gaza +false Asia/Harbin +true Asia/Hebron +false Asia/Ho_Chi_Minh +false Asia/Hong_Kong +false Asia/Hovd +false Asia/Irkutsk +false Asia/Istanbul +false Asia/Jakarta +false Asia/Jayapura +true Asia/Jerusalem +false Asia/Kabul +false Asia/Kamchatka +false Asia/Karachi +false Asia/Kashgar +false Asia/Kathmandu +false Asia/Katmandu +false Asia/Khandyga +false Asia/Kolkata +false Asia/Krasnoyarsk +false Asia/Kuala_Lumpur +false Asia/Kuching +false Asia/Kuwait +false Asia/Macao +false Asia/Macau +false Asia/Magadan +false Asia/Makassar +false Asia/Manila +false Asia/Muscat +true Asia/Nicosia +false Asia/Novokuznetsk +false Asia/Novosibirsk +false Asia/Omsk +false Asia/Oral +false Asia/Phnom_Penh +false Asia/Pontianak +false Asia/Pyongyang +false Asia/Qatar +false Asia/Qostanay +false Asia/Qyzylorda +false Asia/Rangoon +false Asia/Riyadh +false Asia/Saigon +false Asia/Sakhalin +false Asia/Samarkand +false Asia/Seoul +false Asia/Shanghai +false Asia/Singapore +false Asia/Srednekolymsk +false Asia/Taipei +false Asia/Tashkent +false Asia/Tbilisi +false Asia/Tehran +true Asia/Tel_Aviv +false Asia/Thimbu +false Asia/Thimphu +false Asia/Tokyo +false Asia/Tomsk +false Asia/Ujung_Pandang +false Asia/Ulaanbaatar +false Asia/Ulan_Bator +false Asia/Urumqi +false Asia/Ust-Nera +false Asia/Vientiane +false Asia/Vladivostok +false Asia/Yakutsk +false Asia/Yangon +false Asia/Yekaterinburg +false Asia/Yerevan +true Atlantic/Azores +true Atlantic/Bermuda +true Atlantic/Canary +false Atlantic/Cape_Verde +true Atlantic/Faeroe +true Atlantic/Faroe +true Atlantic/Jan_Mayen +true Atlantic/Madeira +false Atlantic/Reykjavik +false Atlantic/South_Georgia +false Atlantic/St_Helena +false Atlantic/Stanley +false Australia/ACT +false Australia/Adelaide +false Australia/Brisbane +false Australia/Broken_Hill +false Australia/Canberra +false Australia/Currie +false Australia/Darwin +false Australia/Eucla +false Australia/Hobart +false Australia/LHI +false Australia/Lindeman +false Australia/Lord_Howe +false Australia/Melbourne +false Australia/NSW +false Australia/North +false Australia/Perth +false Australia/Queensland +false Australia/South +false Australia/Sydney +false Australia/Tasmania +false Australia/Victoria +false Australia/West +false Australia/Yancowinna +true BDST +false BDT +false BNT +false BORT +false BOT +false BRA +true BRST +false BRT +true BST +false BTT +false Brazil/Acre +false Brazil/DeNoronha +false Brazil/East +false Brazil/West +true CADT +false CAST +false CCT +true CDT +true CEST +false CET +true CETDST +true CHADT +false CHAST +false CHUT +false CKT +true CLST +false CLT +false COT +false CST +true CST6CDT +false CXT +true Canada/Atlantic +true Canada/Central +true Canada/Eastern +true Canada/Mountain +true Canada/Newfoundland +true Canada/Pacific +false Canada/Saskatchewan +false Canada/Yukon +false Chile/Continental +false Chile/EasterIsland +true Cuba +false DAVT +false DDUT +false EASST +false EAST +false EAT +true EDT +true EEST +false EET +true EETDST +true EGST +false EGT +false EST +true EST5EDT +true Egypt +false Eire +false Etc/GMT +false Etc/GMT+0 +false Etc/GMT+1 +false Etc/GMT+10 +false Etc/GMT+11 +false Etc/GMT+12 +false Etc/GMT+2 +false Etc/GMT+3 +false Etc/GMT+4 +false Etc/GMT+5 +false Etc/GMT+6 +false Etc/GMT+7 +false Etc/GMT+8 +false Etc/GMT+9 +false Etc/GMT-0 +false Etc/GMT-1 +false Etc/GMT-10 +false Etc/GMT-11 +false Etc/GMT-12 +false Etc/GMT-13 +false Etc/GMT-14 +false Etc/GMT-2 +false Etc/GMT-3 +false Etc/GMT-4 +false Etc/GMT-5 +false Etc/GMT-6 +false Etc/GMT-7 +false Etc/GMT-8 +false Etc/GMT-9 +false Etc/GMT0 +false Etc/Greenwich +false Etc/UCT +false Etc/UTC +false Etc/Universal +false Etc/Zulu +true Europe/Amsterdam +true Europe/Andorra +false Europe/Astrakhan +true Europe/Athens +true Europe/Belfast +true Europe/Belgrade +true Europe/Berlin +true Europe/Bratislava +true Europe/Brussels +true Europe/Bucharest +true Europe/Budapest +true Europe/Busingen +true Europe/Chisinau +true Europe/Copenhagen +false Europe/Dublin +true Europe/Gibraltar +true Europe/Guernsey +true Europe/Helsinki +true Europe/Isle_of_Man +false Europe/Istanbul +true Europe/Jersey +false Europe/Kaliningrad +true Europe/Kiev +false Europe/Kirov +true Europe/Kyiv +true Europe/Lisbon +true Europe/Ljubljana +true Europe/London +true Europe/Luxembourg +true Europe/Madrid +true Europe/Malta +true Europe/Mariehamn +false Europe/Minsk +true Europe/Monaco +false Europe/Moscow +true Europe/Nicosia +true Europe/Oslo +true Europe/Paris +true Europe/Podgorica +true Europe/Prague +true Europe/Riga +true Europe/Rome +false Europe/Samara +true Europe/San_Marino +true Europe/Sarajevo +false Europe/Saratov +false Europe/Simferopol +true Europe/Skopje +true Europe/Sofia +true Europe/Stockholm +true Europe/Tallinn +true Europe/Tirane +true Europe/Tiraspol +false Europe/Ulyanovsk +true Europe/Uzhgorod +true Europe/Vaduz +true Europe/Vatican +true Europe/Vienna +true Europe/Vilnius +false Europe/Volgograd +true Europe/Warsaw +true Europe/Zagreb +true Europe/Zaporozhye +true Europe/Zurich +false FET +true FJST +false FJT +false FKST +false FKT +true FNST +false FNT +false Factory +false GALT +false GAMT +true GB +true GB-Eire +false GEST +false GET +false GFT +false GILT +false GMT +false GMT+0 +false GMT-0 +false GMT0 +false GYT +false Greenwich +false HKT +false HST +false Hongkong +false ICT +true IDT +false IOT +false IRKST +false IRKT +false IRT +false IST +false Iceland +false Indian/Antananarivo +false Indian/Chagos +false Indian/Christmas +false Indian/Cocos +false Indian/Comoro +false Indian/Kerguelen +false Indian/Mahe +false Indian/Maldives +false Indian/Mauritius +false Indian/Mayotte +false Indian/Reunion +false Iran +true Israel +false JAYT +false JST +false Jamaica +false Japan +true KDT +true KGST +false KGT +false KOST +false KRAST +false KRAT +false KST +false Kwajalein +false LHDT +false LHST +false LIGT +false LINT +false LKT +false Libya +false MAGST +false MAGT +false MART +false MAWT +true MDT +true MEST +true MESZ +true MET +true METDST +false MEZ +false MHT +false MMT +false MPT +true MSD +false MSK +false MST +true MST7MDT +true MUST +false MUT +false MVT +false MYT +true Mexico/BajaNorte +false Mexico/BajaSur +false Mexico/General +true NDT +false NFT +false NOVST +false NOVT +false NPT +false NST +false NUT +false NZ +false NZ-CHAT +true NZDT +false NZST +false NZT +true Navajo +false OMSST +false OMST +true PDT +false PET +false PETST +false PETT +false PGT +false PHT +true PKST +false PKT +true PMDT +false PMST +false PONT +false PRC +false PST +true PST8PDT +false PWT +true PYST +false PYT +false Pacific/Apia +false Pacific/Auckland +false Pacific/Bougainville +false Pacific/Chatham +false Pacific/Chuuk +false Pacific/Easter +false Pacific/Efate +false Pacific/Enderbury +false Pacific/Fakaofo +false Pacific/Fiji +false Pacific/Funafuti +false Pacific/Galapagos +false Pacific/Gambier +false Pacific/Guadalcanal +false Pacific/Guam +false Pacific/Honolulu +false Pacific/Johnston +false Pacific/Kanton +false Pacific/Kiritimati +false Pacific/Kosrae +false Pacific/Kwajalein +false Pacific/Majuro +false Pacific/Marquesas +false Pacific/Midway +false Pacific/Nauru +false Pacific/Niue +false Pacific/Norfolk +false Pacific/Noumea +false Pacific/Pago_Pago +false Pacific/Palau +false Pacific/Pitcairn +false Pacific/Pohnpei +false Pacific/Ponape +false Pacific/Port_Moresby +false Pacific/Rarotonga +false Pacific/Saipan +false Pacific/Samoa +false Pacific/Tahiti +false Pacific/Tarawa +false Pacific/Tongatapu +false Pacific/Truk +false Pacific/Wake +false Pacific/Wallis +false Pacific/Yap +true Poland +true Portugal +false RET +false ROC +false ROK +true SADT +false SAST +false SCT +false SGT +false Singapore +false TAHT +false TFT +false TJT +false TKT +false TMT +false TOT +false TRUT +false TVT +false Turkey +false UCT +true ULAST +false ULAT +true US/Alaska +true US/Aleutian +false US/Arizona +true US/Central +true US/East-Indiana +true US/Eastern +false US/Hawaii +true US/Indiana-Starke +true US/Michigan +true US/Mountain +true US/Pacific +false US/Samoa +false UT +false UTC +true UYST +false UYT +true UZST +false UZT +false Universal +false VET +false VLAST +false VLAT +false VOLT +false VUT +false W-SU +true WADT +false WAKT +false WAST +false WAT +true WDT +true WET +true WETDST +false WFT +true WGST +false WGT +false XJT +false YAKST +false YAKT +false YAPT +true YEKST +false YEKT +false Z +false Zulu +false localtime +false posix/Africa/Abidjan +false posix/Africa/Accra +false posix/Africa/Addis_Ababa +false posix/Africa/Algiers +false posix/Africa/Asmara +false posix/Africa/Asmera +false posix/Africa/Bamako +false posix/Africa/Bangui +false posix/Africa/Banjul +false posix/Africa/Bissau +false posix/Africa/Blantyre +false posix/Africa/Brazzaville +false posix/Africa/Bujumbura +true posix/Africa/Cairo +false posix/Africa/Casablanca +true posix/Africa/Ceuta +false posix/Africa/Conakry +false posix/Africa/Dakar +false posix/Africa/Dar_es_Salaam +false posix/Africa/Djibouti +false posix/Africa/Douala +false posix/Africa/El_Aaiun +false posix/Africa/Freetown +false posix/Africa/Gaborone +false posix/Africa/Harare +false posix/Africa/Johannesburg +false posix/Africa/Juba +false posix/Africa/Kampala +false posix/Africa/Khartoum +false posix/Africa/Kigali +false posix/Africa/Kinshasa +false posix/Africa/Lagos +false posix/Africa/Libreville +false posix/Africa/Lome +false posix/Africa/Luanda +false posix/Africa/Lubumbashi +false posix/Africa/Lusaka +false posix/Africa/Malabo +false posix/Africa/Maputo +false posix/Africa/Maseru +false posix/Africa/Mbabane +false posix/Africa/Mogadishu +false posix/Africa/Monrovia +false posix/Africa/Nairobi +false posix/Africa/Ndjamena +false posix/Africa/Niamey +false posix/Africa/Nouakchott +false posix/Africa/Ouagadougou +false posix/Africa/Porto-Novo +false posix/Africa/Sao_Tome +false posix/Africa/Timbuktu +false posix/Africa/Tripoli +false posix/Africa/Tunis +false posix/Africa/Windhoek +true posix/America/Adak +true posix/America/Anchorage +false posix/America/Anguilla +false posix/America/Antigua +false posix/America/Araguaina +false posix/America/Argentina/Buenos_Aires +false posix/America/Argentina/Catamarca +false posix/America/Argentina/ComodRivadavia +false posix/America/Argentina/Cordoba +false posix/America/Argentina/Jujuy +false posix/America/Argentina/La_Rioja +false posix/America/Argentina/Mendoza +false posix/America/Argentina/Rio_Gallegos +false posix/America/Argentina/Salta +false posix/America/Argentina/San_Juan +false posix/America/Argentina/San_Luis +false posix/America/Argentina/Tucuman +false posix/America/Argentina/Ushuaia +false posix/America/Aruba +false posix/America/Asuncion +false posix/America/Atikokan +true posix/America/Atka +false posix/America/Bahia +false posix/America/Bahia_Banderas +false posix/America/Barbados +false posix/America/Belem +false posix/America/Belize +false posix/America/Blanc-Sablon +false posix/America/Boa_Vista +false posix/America/Bogota +true posix/America/Boise +false posix/America/Buenos_Aires +true posix/America/Cambridge_Bay +false posix/America/Campo_Grande +false posix/America/Cancun +false posix/America/Caracas +false posix/America/Catamarca +false posix/America/Cayenne +false posix/America/Cayman +true posix/America/Chicago +false posix/America/Chihuahua +true posix/America/Ciudad_Juarez +false posix/America/Coral_Harbour +false posix/America/Cordoba +false posix/America/Costa_Rica +false posix/America/Creston +false posix/America/Cuiaba +false posix/America/Curacao +false posix/America/Danmarkshavn +false posix/America/Dawson +false posix/America/Dawson_Creek +true posix/America/Denver +true posix/America/Detroit +false posix/America/Dominica +true posix/America/Edmonton +false posix/America/Eirunepe +false posix/America/El_Salvador +true posix/America/Ensenada +false posix/America/Fort_Nelson +true posix/America/Fort_Wayne +false posix/America/Fortaleza +true posix/America/Glace_Bay +true posix/America/Godthab +true posix/America/Goose_Bay +true posix/America/Grand_Turk +false posix/America/Grenada +false posix/America/Guadeloupe +false posix/America/Guatemala +false posix/America/Guayaquil +false posix/America/Guyana +true posix/America/Halifax +true posix/America/Havana +false posix/America/Hermosillo +true posix/America/Indiana/Indianapolis +true posix/America/Indiana/Knox +true posix/America/Indiana/Marengo +true posix/America/Indiana/Petersburg +true posix/America/Indiana/Tell_City +true posix/America/Indiana/Vevay +true posix/America/Indiana/Vincennes +true posix/America/Indiana/Winamac +true posix/America/Indianapolis +true posix/America/Inuvik +true posix/America/Iqaluit +false posix/America/Jamaica +false posix/America/Jujuy +true posix/America/Juneau +true posix/America/Kentucky/Louisville +true posix/America/Kentucky/Monticello +true posix/America/Knox_IN +false posix/America/Kralendijk +false posix/America/La_Paz +false posix/America/Lima +true posix/America/Los_Angeles +true posix/America/Louisville +false posix/America/Lower_Princes +false posix/America/Maceio +false posix/America/Managua +false posix/America/Manaus +false posix/America/Marigot +false posix/America/Martinique +true posix/America/Matamoros +false posix/America/Mazatlan +false posix/America/Mendoza +true posix/America/Menominee +false posix/America/Merida +true posix/America/Metlakatla +false posix/America/Mexico_City +true posix/America/Miquelon +true posix/America/Moncton +false posix/America/Monterrey +false posix/America/Montevideo +true posix/America/Montreal +false posix/America/Montserrat +true posix/America/Nassau +true posix/America/New_York +true posix/America/Nipigon +true posix/America/Nome +false posix/America/Noronha +true posix/America/North_Dakota/Beulah +true posix/America/North_Dakota/Center +true posix/America/North_Dakota/New_Salem +true posix/America/Nuuk +true posix/America/Ojinaga +false posix/America/Panama +true posix/America/Pangnirtung +false posix/America/Paramaribo +false posix/America/Phoenix +true posix/America/Port-au-Prince +false posix/America/Port_of_Spain +false posix/America/Porto_Acre +false posix/America/Porto_Velho +false posix/America/Puerto_Rico +false posix/America/Punta_Arenas +true posix/America/Rainy_River +true posix/America/Rankin_Inlet +false posix/America/Recife +false posix/America/Regina +true posix/America/Resolute +false posix/America/Rio_Branco +false posix/America/Rosario +true posix/America/Santa_Isabel +false posix/America/Santarem +false posix/America/Santiago +false posix/America/Santo_Domingo +false posix/America/Sao_Paulo +true posix/America/Scoresbysund +true posix/America/Shiprock +true posix/America/Sitka +false posix/America/St_Barthelemy +true posix/America/St_Johns +false posix/America/St_Kitts +false posix/America/St_Lucia +false posix/America/St_Thomas +false posix/America/St_Vincent +false posix/America/Swift_Current +false posix/America/Tegucigalpa +true posix/America/Thule +true posix/America/Thunder_Bay +true posix/America/Tijuana +true posix/America/Toronto +false posix/America/Tortola +true posix/America/Vancouver +false posix/America/Virgin +false posix/America/Whitehorse +true posix/America/Winnipeg +true posix/America/Yakutat +true posix/America/Yellowknife +false posix/Antarctica/Casey +false posix/Antarctica/Davis +false posix/Antarctica/DumontDUrville +false posix/Antarctica/Macquarie +false posix/Antarctica/Mawson +false posix/Antarctica/McMurdo +false posix/Antarctica/Palmer +false posix/Antarctica/Rothera +false posix/Antarctica/South_Pole +false posix/Antarctica/Syowa +true posix/Antarctica/Troll +false posix/Antarctica/Vostok +true posix/Arctic/Longyearbyen +false posix/Asia/Aden +false posix/Asia/Almaty +false posix/Asia/Amman +false posix/Asia/Anadyr +false posix/Asia/Aqtau +false posix/Asia/Aqtobe +false posix/Asia/Ashgabat +false posix/Asia/Ashkhabad +false posix/Asia/Atyrau +false posix/Asia/Baghdad +false posix/Asia/Bahrain +false posix/Asia/Baku +false posix/Asia/Bangkok +false posix/Asia/Barnaul +true posix/Asia/Beirut +false posix/Asia/Bishkek +false posix/Asia/Brunei +false posix/Asia/Calcutta +false posix/Asia/Chita +false posix/Asia/Choibalsan +false posix/Asia/Chongqing +false posix/Asia/Chungking +false posix/Asia/Colombo +false posix/Asia/Dacca +false posix/Asia/Damascus +false posix/Asia/Dhaka +false posix/Asia/Dili +false posix/Asia/Dubai +false posix/Asia/Dushanbe +true posix/Asia/Famagusta +true posix/Asia/Gaza +false posix/Asia/Harbin +true posix/Asia/Hebron +false posix/Asia/Ho_Chi_Minh +false posix/Asia/Hong_Kong +false posix/Asia/Hovd +false posix/Asia/Irkutsk +false posix/Asia/Istanbul +false posix/Asia/Jakarta +false posix/Asia/Jayapura +true posix/Asia/Jerusalem +false posix/Asia/Kabul +false posix/Asia/Kamchatka +false posix/Asia/Karachi +false posix/Asia/Kashgar +false posix/Asia/Kathmandu +false posix/Asia/Katmandu +false posix/Asia/Khandyga +false posix/Asia/Kolkata +false posix/Asia/Krasnoyarsk +false posix/Asia/Kuala_Lumpur +false posix/Asia/Kuching +false posix/Asia/Kuwait +false posix/Asia/Macao +false posix/Asia/Macau +false posix/Asia/Magadan +false posix/Asia/Makassar +false posix/Asia/Manila +false posix/Asia/Muscat +true posix/Asia/Nicosia +false posix/Asia/Novokuznetsk +false posix/Asia/Novosibirsk +false posix/Asia/Omsk +false posix/Asia/Oral +false posix/Asia/Phnom_Penh +false posix/Asia/Pontianak +false posix/Asia/Pyongyang +false posix/Asia/Qatar +false posix/Asia/Qostanay +false posix/Asia/Qyzylorda +false posix/Asia/Rangoon +false posix/Asia/Riyadh +false posix/Asia/Saigon +false posix/Asia/Sakhalin +false posix/Asia/Samarkand +false posix/Asia/Seoul +false posix/Asia/Shanghai +false posix/Asia/Singapore +false posix/Asia/Srednekolymsk +false posix/Asia/Taipei +false posix/Asia/Tashkent +false posix/Asia/Tbilisi +false posix/Asia/Tehran +true posix/Asia/Tel_Aviv +false posix/Asia/Thimbu +false posix/Asia/Thimphu +false posix/Asia/Tokyo +false posix/Asia/Tomsk +false posix/Asia/Ujung_Pandang +false posix/Asia/Ulaanbaatar +false posix/Asia/Ulan_Bator +false posix/Asia/Urumqi +false posix/Asia/Ust-Nera +false posix/Asia/Vientiane +false posix/Asia/Vladivostok +false posix/Asia/Yakutsk +false posix/Asia/Yangon +false posix/Asia/Yekaterinburg +false posix/Asia/Yerevan +true posix/Atlantic/Azores +true posix/Atlantic/Bermuda +true posix/Atlantic/Canary +false posix/Atlantic/Cape_Verde +true posix/Atlantic/Faeroe +true posix/Atlantic/Faroe +true posix/Atlantic/Jan_Mayen +true posix/Atlantic/Madeira +false posix/Atlantic/Reykjavik +false posix/Atlantic/South_Georgia +false posix/Atlantic/St_Helena +false posix/Atlantic/Stanley +false posix/Australia/ACT +false posix/Australia/Adelaide +false posix/Australia/Brisbane +false posix/Australia/Broken_Hill +false posix/Australia/Canberra +false posix/Australia/Currie +false posix/Australia/Darwin +false posix/Australia/Eucla +false posix/Australia/Hobart +false posix/Australia/LHI +false posix/Australia/Lindeman +false posix/Australia/Lord_Howe +false posix/Australia/Melbourne +false posix/Australia/NSW +false posix/Australia/North +false posix/Australia/Perth +false posix/Australia/Queensland +false posix/Australia/South +false posix/Australia/Sydney +false posix/Australia/Tasmania +false posix/Australia/Victoria +false posix/Australia/West +false posix/Australia/Yancowinna +false posix/Brazil/Acre +false posix/Brazil/DeNoronha +false posix/Brazil/East +false posix/Brazil/West +true posix/CET +true posix/CST6CDT +true posix/Canada/Atlantic +true posix/Canada/Central +true posix/Canada/Eastern +true posix/Canada/Mountain +true posix/Canada/Newfoundland +true posix/Canada/Pacific +false posix/Canada/Saskatchewan +false posix/Canada/Yukon +false posix/Chile/Continental +false posix/Chile/EasterIsland +true posix/Cuba +true posix/EET +false posix/EST +true posix/EST5EDT +true posix/Egypt +false posix/Eire +false posix/Etc/GMT +false posix/Etc/GMT+0 +false posix/Etc/GMT+1 +false posix/Etc/GMT+10 +false posix/Etc/GMT+11 +false posix/Etc/GMT+12 +false posix/Etc/GMT+2 +false posix/Etc/GMT+3 +false posix/Etc/GMT+4 +false posix/Etc/GMT+5 +false posix/Etc/GMT+6 +false posix/Etc/GMT+7 +false posix/Etc/GMT+8 +false posix/Etc/GMT+9 +false posix/Etc/GMT-0 +false posix/Etc/GMT-1 +false posix/Etc/GMT-10 +false posix/Etc/GMT-11 +false posix/Etc/GMT-12 +false posix/Etc/GMT-13 +false posix/Etc/GMT-14 +false posix/Etc/GMT-2 +false posix/Etc/GMT-3 +false posix/Etc/GMT-4 +false posix/Etc/GMT-5 +false posix/Etc/GMT-6 +false posix/Etc/GMT-7 +false posix/Etc/GMT-8 +false posix/Etc/GMT-9 +false posix/Etc/GMT0 +false posix/Etc/Greenwich +false posix/Etc/UCT +false posix/Etc/UTC +false posix/Etc/Universal +false posix/Etc/Zulu +true posix/Europe/Amsterdam +true posix/Europe/Andorra +false posix/Europe/Astrakhan +true posix/Europe/Athens +true posix/Europe/Belfast +true posix/Europe/Belgrade +true posix/Europe/Berlin +true posix/Europe/Bratislava +true posix/Europe/Brussels +true posix/Europe/Bucharest +true posix/Europe/Budapest +true posix/Europe/Busingen +true posix/Europe/Chisinau +true posix/Europe/Copenhagen +false posix/Europe/Dublin +true posix/Europe/Gibraltar +true posix/Europe/Guernsey +true posix/Europe/Helsinki +true posix/Europe/Isle_of_Man +false posix/Europe/Istanbul +true posix/Europe/Jersey +false posix/Europe/Kaliningrad +true posix/Europe/Kiev +false posix/Europe/Kirov +true posix/Europe/Kyiv +true posix/Europe/Lisbon +true posix/Europe/Ljubljana +true posix/Europe/London +true posix/Europe/Luxembourg +true posix/Europe/Madrid +true posix/Europe/Malta +true posix/Europe/Mariehamn +false posix/Europe/Minsk +true posix/Europe/Monaco +false posix/Europe/Moscow +true posix/Europe/Nicosia +true posix/Europe/Oslo +true posix/Europe/Paris +true posix/Europe/Podgorica +true posix/Europe/Prague +true posix/Europe/Riga +true posix/Europe/Rome +false posix/Europe/Samara +true posix/Europe/San_Marino +true posix/Europe/Sarajevo +false posix/Europe/Saratov +false posix/Europe/Simferopol +true posix/Europe/Skopje +true posix/Europe/Sofia +true posix/Europe/Stockholm +true posix/Europe/Tallinn +true posix/Europe/Tirane +true posix/Europe/Tiraspol +false posix/Europe/Ulyanovsk +true posix/Europe/Uzhgorod +true posix/Europe/Vaduz +true posix/Europe/Vatican +true posix/Europe/Vienna +true posix/Europe/Vilnius +false posix/Europe/Volgograd +true posix/Europe/Warsaw +true posix/Europe/Zagreb +true posix/Europe/Zaporozhye +true posix/Europe/Zurich +false posix/Factory +true posix/GB +true posix/GB-Eire +false posix/GMT +false posix/GMT+0 +false posix/GMT-0 +false posix/GMT0 +false posix/Greenwich +false posix/HST +false posix/Hongkong +false posix/Iceland +false posix/Indian/Antananarivo +false posix/Indian/Chagos +false posix/Indian/Christmas +false posix/Indian/Cocos +false posix/Indian/Comoro +false posix/Indian/Kerguelen +false posix/Indian/Mahe +false posix/Indian/Maldives +false posix/Indian/Mauritius +false posix/Indian/Mayotte +false posix/Indian/Reunion +false posix/Iran +true posix/Israel +false posix/Jamaica +false posix/Japan +false posix/Kwajalein +false posix/Libya +true posix/MET +false posix/MST +true posix/MST7MDT +true posix/Mexico/BajaNorte +false posix/Mexico/BajaSur +false posix/Mexico/General +false posix/NZ +false posix/NZ-CHAT +true posix/Navajo +false posix/PRC +true posix/PST8PDT +false posix/Pacific/Apia +false posix/Pacific/Auckland +false posix/Pacific/Bougainville +false posix/Pacific/Chatham +false posix/Pacific/Chuuk +false posix/Pacific/Easter +false posix/Pacific/Efate +false posix/Pacific/Enderbury +false posix/Pacific/Fakaofo +false posix/Pacific/Fiji +false posix/Pacific/Funafuti +false posix/Pacific/Galapagos +false posix/Pacific/Gambier +false posix/Pacific/Guadalcanal +false posix/Pacific/Guam +false posix/Pacific/Honolulu +false posix/Pacific/Johnston +false posix/Pacific/Kanton +false posix/Pacific/Kiritimati +false posix/Pacific/Kosrae +false posix/Pacific/Kwajalein +false posix/Pacific/Majuro +false posix/Pacific/Marquesas +false posix/Pacific/Midway +false posix/Pacific/Nauru +false posix/Pacific/Niue +false posix/Pacific/Norfolk +false posix/Pacific/Noumea +false posix/Pacific/Pago_Pago +false posix/Pacific/Palau +false posix/Pacific/Pitcairn +false posix/Pacific/Pohnpei +false posix/Pacific/Ponape +false posix/Pacific/Port_Moresby +false posix/Pacific/Rarotonga +false posix/Pacific/Saipan +false posix/Pacific/Samoa +false posix/Pacific/Tahiti +false posix/Pacific/Tarawa +false posix/Pacific/Tongatapu +false posix/Pacific/Truk +false posix/Pacific/Wake +false posix/Pacific/Wallis +false posix/Pacific/Yap +true posix/Poland +true posix/Portugal +false posix/ROC +false posix/ROK +false posix/Singapore +false posix/Turkey +false posix/UCT +true posix/US/Alaska +true posix/US/Aleutian +false posix/US/Arizona +true posix/US/Central +true posix/US/East-Indiana +true posix/US/Eastern +false posix/US/Hawaii +true posix/US/Indiana-Starke +true posix/US/Michigan +true posix/US/Mountain +true posix/US/Pacific +false posix/US/Samoa +false posix/UTC +false posix/Universal +false posix/W-SU +true posix/WET +false posix/Zulu +true posixrules +</TimeZones> + </root> + <database id="2" parent="1" name="postgres"> + <Comment>default administrative connection database</Comment> + <ObjectId>5</ObjectId> + <OwnerName>app</OwnerName> + </database> + <database id="3" parent="1" name="todo_baggins"> + <Current>1</Current> + <Grants>11||10|C|G +11||-9223372036854775808|U|G +11||10|U|G +2200||6171|C|G +2200||-9223372036854775808|U|G +2200||6171|U|G +13212||10|C|G +13212||-9223372036854775808|U|G +13212||10|U|G</Grants> + <IntrospectionStateNumber>745</IntrospectionStateNumber> + <ObjectId>16384</ObjectId> + <OwnerName>app</OwnerName> + </database> + <role id="4" parent="1" name="app"> + <BypassRls>1</BypassRls> + <CanLogin>1</CanLogin> + <CreateDb>1</CreateDb> + <CreateRole>1</CreateRole> + <ObjectId>10</ObjectId> + <Replication>1</Replication> + <SuperRole>1</SuperRole> + </role> + <role id="5" parent="1" name="pg_checkpoint"> + <ObjectId>4544</ObjectId> + </role> + <role id="6" parent="1" name="pg_create_subscription"> + <ObjectId>6304</ObjectId> + </role> + <role id="7" parent="1" name="pg_database_owner"> + <ObjectId>6171</ObjectId> + </role> + <role id="8" parent="1" name="pg_execute_server_program"> + <ObjectId>4571</ObjectId> + </role> + <role id="9" parent="1" name="pg_monitor"> + <ObjectId>3373</ObjectId> + <RoleGrants>3374 +3375 +3377</RoleGrants> + </role> + <role id="10" parent="1" name="pg_read_all_data"> + <ObjectId>6181</ObjectId> + </role> + <role id="11" parent="1" name="pg_read_all_settings"> + <ObjectId>3374</ObjectId> + </role> + <role id="12" parent="1" name="pg_read_all_stats"> + <ObjectId>3375</ObjectId> + </role> + <role id="13" parent="1" name="pg_read_server_files"> + <ObjectId>4569</ObjectId> + </role> + <role id="14" parent="1" name="pg_signal_backend"> + <ObjectId>4200</ObjectId> + </role> + <role id="15" parent="1" name="pg_stat_scan_tables"> + <ObjectId>3377</ObjectId> + </role> + <role id="16" parent="1" name="pg_use_reserved_connections"> + <ObjectId>4550</ObjectId> + </role> + <role id="17" parent="1" name="pg_write_all_data"> + <ObjectId>6182</ObjectId> + </role> + <role id="18" parent="1" name="pg_write_server_files"> + <ObjectId>4570</ObjectId> + </role> + <tablespace id="19" parent="1" name="pg_default"> + <ObjectId>1663</ObjectId> + <StateNumber>1</StateNumber> + <OwnerName>app</OwnerName> + </tablespace> + <tablespace id="20" parent="1" name="pg_global"> + <ObjectId>1664</ObjectId> + <StateNumber>1</StateNumber> + <OwnerName>app</OwnerName> + </tablespace> + <access-method id="21" parent="3" name="brin"> + <Comment>block range index (BRIN) access method</Comment> + <ObjectId>3580</ObjectId> + <StateNumber>1</StateNumber> + <Type>index</Type> + <HandlerId>335</HandlerId> + <HandlerName>brinhandler</HandlerName> + <HandlerParentName>pg_catalog</HandlerParentName> + </access-method> + <access-method id="22" parent="3" name="btree"> + <Comment>b-tree index access method</Comment> + <ObjectId>403</ObjectId> + <StateNumber>1</StateNumber> + <Type>index</Type> + <HandlerId>330</HandlerId> + <HandlerName>bthandler</HandlerName> + <HandlerParentName>pg_catalog</HandlerParentName> + </access-method> + <access-method id="23" parent="3" name="gin"> + <Comment>GIN index access method</Comment> + <ObjectId>2742</ObjectId> + <StateNumber>1</StateNumber> + <Type>index</Type> + <HandlerId>333</HandlerId> + <HandlerName>ginhandler</HandlerName> + <HandlerParentName>pg_catalog</HandlerParentName> + </access-method> + <access-method id="24" parent="3" name="gist"> + <Comment>GiST index access method</Comment> + <ObjectId>783</ObjectId> + <StateNumber>1</StateNumber> + <Type>index</Type> + <HandlerId>332</HandlerId> + <HandlerName>gisthandler</HandlerName> + <HandlerParentName>pg_catalog</HandlerParentName> + </access-method> + <access-method id="25" parent="3" name="hash"> + <Comment>hash index access method</Comment> + <ObjectId>405</ObjectId> + <StateNumber>1</StateNumber> + <Type>index</Type> + <HandlerId>331</HandlerId> + <HandlerName>hashhandler</HandlerName> + <HandlerParentName>pg_catalog</HandlerParentName> + </access-method> + <access-method id="26" parent="3" name="heap"> + <Comment>heap table access method</Comment> + <ObjectId>2</ObjectId> + <StateNumber>1</StateNumber> + <Type>table</Type> + <HandlerId>3</HandlerId> + <HandlerName>heap_tableam_handler</HandlerName> + <HandlerParentName>pg_catalog</HandlerParentName> + </access-method> + <access-method id="27" parent="3" name="spgist"> + <Comment>SP-GiST index access method</Comment> + <ObjectId>4000</ObjectId> + <StateNumber>1</StateNumber> + <Type>index</Type> + <HandlerId>334</HandlerId> + <HandlerName>spghandler</HandlerName> + <HandlerParentName>pg_catalog</HandlerParentName> + </access-method> + <cast id="28" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10035</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2558</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>16</SourceTypeId> + <SourceTypeName>bool</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="29" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10201</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2971</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>16</SourceTypeId> + <SourceTypeName>bool</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1042</TargetTypeId> + <TargetTypeName>bpchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="30" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10191</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2971</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>16</SourceTypeId> + <SourceTypeName>bool</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>25</TargetTypeId> + <TargetTypeName>text</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="31" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10196</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2971</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>16</SourceTypeId> + <SourceTypeName>bool</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1043</TargetTypeId> + <TargetTypeName>varchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="32" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10143</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>77</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>18</SourceTypeId> + <SourceTypeName>char</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="33" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10133</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>946</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>18</SourceTypeId> + <SourceTypeName>char</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1043</TargetTypeId> + <TargetTypeName>varchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="34" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10131</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>946</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>18</SourceTypeId> + <SourceTypeName>char</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>25</TargetTypeId> + <TargetTypeName>text</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="35" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10132</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>860</CastFunctionId> + <CastFunctionName>bpchar</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>18</SourceTypeId> + <SourceTypeName>char</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1042</TargetTypeId> + <TargetTypeName>bpchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="36" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10135</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>408</CastFunctionId> + <CastFunctionName>bpchar</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>19</SourceTypeId> + <SourceTypeName>name</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1042</TargetTypeId> + <TargetTypeName>bpchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="37" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10134</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>406</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>19</SourceTypeId> + <SourceTypeName>name</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>25</TargetTypeId> + <TargetTypeName>text</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="38" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10136</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1401</CastFunctionId> + <CastFunctionName>varchar</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>19</SourceTypeId> + <SourceTypeName>name</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1043</TargetTypeId> + <TargetTypeName>varchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="39" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10090</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1287</CastFunctionId> + <CastFunctionName>oid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2206</TargetTypeId> + <TargetTypeName>regtype</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="40" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10060</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1287</CastFunctionId> + <CastFunctionName>oid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2203</TargetTypeId> + <TargetTypeName>regoper</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="41" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10003</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>482</CastFunctionId> + <CastFunctionName>float8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>701</TargetTypeId> + <TargetTypeName>float8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="42" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10069</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1287</CastFunctionId> + <CastFunctionName>oid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2204</TargetTypeId> + <TargetTypeName>regoperator</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="43" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10001</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>480</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="44" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10044</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1287</CastFunctionId> + <CastFunctionName>oid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>24</TargetTypeId> + <TargetTypeName>regproc</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="45" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10113</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1287</CastFunctionId> + <CastFunctionName>oid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4096</TargetTypeId> + <TargetTypeName>regrole</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="46" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10120</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1287</CastFunctionId> + <CastFunctionName>oid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4089</TargetTypeId> + <TargetTypeName>regnamespace</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="47" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10002</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>652</CastFunctionId> + <CastFunctionName>float4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>700</TargetTypeId> + <TargetTypeName>float4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="48" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10104</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1287</CastFunctionId> + <CastFunctionName>oid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>3769</TargetTypeId> + <TargetTypeName>regdictionary</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="49" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10083</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1287</CastFunctionId> + <CastFunctionName>oid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4191</TargetTypeId> + <TargetTypeName>regcollation</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="50" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10033</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>3812</CastFunctionId> + <CastFunctionName>money</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>790</TargetTypeId> + <TargetTypeName>money</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="51" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10037</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1287</CastFunctionId> + <CastFunctionName>oid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="52" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10097</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1287</CastFunctionId> + <CastFunctionName>oid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>3734</TargetTypeId> + <TargetTypeName>regconfig</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="53" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10000</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>714</CastFunctionId> + <CastFunctionName>int2</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>21</TargetTypeId> + <TargetTypeName>int2</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="54" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10185</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2075</CastFunctionId> + <CastFunctionName>bit</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1560</TargetTypeId> + <TargetTypeName>bit</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="55" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10004</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1781</CastFunctionId> + <CastFunctionName>numeric</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1700</TargetTypeId> + <TargetTypeName>numeric</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="56" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10053</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1287</CastFunctionId> + <CastFunctionName>oid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2202</TargetTypeId> + <TargetTypeName>regprocedure</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="57" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10076</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1287</CastFunctionId> + <CastFunctionName>oid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>20</SourceTypeId> + <SourceTypeName>int8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2205</TargetTypeId> + <TargetTypeName>regclass</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="58" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10045</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>24</TargetTypeId> + <TargetTypeName>regproc</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="59" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10091</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2206</TargetTypeId> + <TargetTypeName>regtype</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="60" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10084</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4191</TargetTypeId> + <TargetTypeName>regcollation</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="61" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10070</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2204</TargetTypeId> + <TargetTypeName>regoperator</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="62" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10038</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="63" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10009</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1782</CastFunctionId> + <CastFunctionName>numeric</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1700</TargetTypeId> + <TargetTypeName>numeric</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="64" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10077</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2205</TargetTypeId> + <TargetTypeName>regclass</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="65" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10006</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="66" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10054</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2202</TargetTypeId> + <TargetTypeName>regprocedure</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="67" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10007</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>236</CastFunctionId> + <CastFunctionName>float4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>700</TargetTypeId> + <TargetTypeName>float4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="68" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10005</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>754</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="69" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10114</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4096</TargetTypeId> + <TargetTypeName>regrole</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="70" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10008</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>235</CastFunctionId> + <CastFunctionName>float8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>701</TargetTypeId> + <TargetTypeName>float8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="71" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10105</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>3769</TargetTypeId> + <TargetTypeName>regdictionary</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="72" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10121</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4089</TargetTypeId> + <TargetTypeName>regnamespace</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="73" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10061</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2203</TargetTypeId> + <TargetTypeName>regoper</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="74" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10098</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>313</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>21</SourceTypeId> + <SourceTypeName>int2</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>3734</TargetTypeId> + <TargetTypeName>regconfig</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="75" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10078</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2205</TargetTypeId> + <TargetTypeName>regclass</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="76" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10085</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4191</TargetTypeId> + <TargetTypeName>regcollation</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="77" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10115</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4096</TargetTypeId> + <TargetTypeName>regrole</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="78" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10144</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>78</CastFunctionId> + <CastFunctionName>char</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>18</TargetTypeId> + <TargetTypeName>char</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="79" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10122</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4089</TargetTypeId> + <TargetTypeName>regnamespace</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="80" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10010</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>481</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="81" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10106</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>3769</TargetTypeId> + <TargetTypeName>regdictionary</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="82" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10099</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>3734</TargetTypeId> + <TargetTypeName>regconfig</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="83" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10011</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>314</CastFunctionId> + <CastFunctionName>int2</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>21</TargetTypeId> + <TargetTypeName>int2</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="84" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10092</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2206</TargetTypeId> + <TargetTypeName>regtype</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="85" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10071</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2204</TargetTypeId> + <TargetTypeName>regoperator</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="86" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10062</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2203</TargetTypeId> + <TargetTypeName>regoper</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="87" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10046</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>24</TargetTypeId> + <TargetTypeName>regproc</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="88" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10055</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2202</TargetTypeId> + <TargetTypeName>regprocedure</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="89" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10034</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2557</CastFunctionId> + <CastFunctionName>bool</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>16</TargetTypeId> + <TargetTypeName>bool</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="90" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10014</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1740</CastFunctionId> + <CastFunctionName>numeric</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1700</TargetTypeId> + <TargetTypeName>numeric</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="91" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10039</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="92" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10186</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1683</CastFunctionId> + <CastFunctionName>bit</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1560</TargetTypeId> + <TargetTypeName>bit</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="93" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10012</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>318</CastFunctionId> + <CastFunctionName>float4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>700</TargetTypeId> + <TargetTypeName>float4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="94" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10013</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>316</CastFunctionId> + <CastFunctionName>float8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>701</TargetTypeId> + <TargetTypeName>float8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="95" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10032</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>3811</CastFunctionId> + <CastFunctionName>money</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>23</SourceTypeId> + <SourceTypeName>int4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>790</TargetTypeId> + <TargetTypeName>money</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="96" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10048</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>24</SourceTypeId> + <SourceTypeName>regproc</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="97" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10047</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1288</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>24</SourceTypeId> + <SourceTypeName>regproc</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="98" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10043</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>24</SourceTypeId> + <SourceTypeName>regproc</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="99" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10049</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>24</SourceTypeId> + <SourceTypeName>regproc</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2202</TargetTypeId> + <TargetTypeName>regprocedure</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="100" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10125</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>25</SourceTypeId> + <SourceTypeName>text</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1042</TargetTypeId> + <TargetTypeName>bpchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="101" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10140</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>407</CastFunctionId> + <CastFunctionName>name</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>25</SourceTypeId> + <SourceTypeName>text</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>19</TargetTypeId> + <TargetTypeName>name</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="102" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10137</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>944</CastFunctionId> + <CastFunctionName>char</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>25</SourceTypeId> + <SourceTypeName>text</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>18</TargetTypeId> + <TargetTypeName>char</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="103" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10126</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>25</SourceTypeId> + <SourceTypeName>text</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1043</TargetTypeId> + <TargetTypeName>varchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="104" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10193</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2896</CastFunctionId> + <CastFunctionName>xml</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>25</SourceTypeId> + <SourceTypeName>text</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>142</TargetTypeId> + <TargetTypeName>xml</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="105" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10109</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1079</CastFunctionId> + <CastFunctionName>regclass</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>25</SourceTypeId> + <SourceTypeName>text</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2205</TargetTypeId> + <TargetTypeName>regclass</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="106" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10074</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2205</TargetTypeId> + <TargetTypeName>regclass</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="107" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10051</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2202</TargetTypeId> + <TargetTypeName>regprocedure</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="108" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10095</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>3734</TargetTypeId> + <TargetTypeName>regconfig</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="109" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10058</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2203</TargetTypeId> + <TargetTypeName>regoper</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="110" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10081</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4191</TargetTypeId> + <TargetTypeName>regcollation</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="111" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10067</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2204</TargetTypeId> + <TargetTypeName>regoperator</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="112" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10042</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>24</TargetTypeId> + <TargetTypeName>regproc</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="113" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10040</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1288</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="114" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10111</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4096</TargetTypeId> + <TargetTypeName>regrole</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="115" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10102</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>3769</TargetTypeId> + <TargetTypeName>regdictionary</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="116" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10088</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2206</TargetTypeId> + <TargetTypeName>regtype</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="117" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10041</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="118" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10118</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>26</SourceTypeId> + <SourceTypeName>oid</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4089</TargetTypeId> + <TargetTypeName>regnamespace</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="119" parent="3"> + <Context>assignment</Context> + <Method>io</Method> + <ObjectId>10214</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>114</SourceTypeId> + <SourceTypeName>json</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>3802</TargetTypeId> + <TargetTypeName>jsonb</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="120" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10202</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>142</SourceTypeId> + <SourceTypeName>xml</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1042</TargetTypeId> + <TargetTypeName>bpchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="121" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10197</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>142</SourceTypeId> + <SourceTypeName>xml</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1043</TargetTypeId> + <TargetTypeName>varchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="122" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10192</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>142</SourceTypeId> + <SourceTypeName>xml</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>25</TargetTypeId> + <TargetTypeName>text</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="123" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10145</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>194</SourceTypeId> + <SourceTypeName>pg_node_tree</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>25</TargetTypeId> + <TargetTypeName>text</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="124" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10165</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>4091</CastFunctionId> + <CastFunctionName>box</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>600</SourceTypeId> + <SourceTypeName>point</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>603</TargetTypeId> + <TargetTypeName>box</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="125" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10166</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1532</CastFunctionId> + <CastFunctionName>point</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>601</SourceTypeId> + <SourceTypeName>lseg</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>600</TargetTypeId> + <TargetTypeName>point</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="126" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10167</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1449</CastFunctionId> + <CastFunctionName>polygon</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>602</SourceTypeId> + <SourceTypeName>path</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>604</TargetTypeId> + <TargetTypeName>polygon</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="127" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10168</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1534</CastFunctionId> + <CastFunctionName>point</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>603</SourceTypeId> + <SourceTypeName>box</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>600</TargetTypeId> + <TargetTypeName>point</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="128" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10171</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1479</CastFunctionId> + <CastFunctionName>circle</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>603</SourceTypeId> + <SourceTypeName>box</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>718</TargetTypeId> + <TargetTypeName>circle</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="129" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10169</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1541</CastFunctionId> + <CastFunctionName>lseg</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>603</SourceTypeId> + <SourceTypeName>box</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>601</TargetTypeId> + <TargetTypeName>lseg</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="130" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10170</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1448</CastFunctionId> + <CastFunctionName>polygon</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>603</SourceTypeId> + <SourceTypeName>box</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>604</TargetTypeId> + <TargetTypeName>polygon</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="131" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10172</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1540</CastFunctionId> + <CastFunctionName>point</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>604</SourceTypeId> + <SourceTypeName>polygon</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>600</TargetTypeId> + <TargetTypeName>point</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="132" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10175</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1474</CastFunctionId> + <CastFunctionName>circle</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>604</SourceTypeId> + <SourceTypeName>polygon</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>718</TargetTypeId> + <TargetTypeName>circle</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="133" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10174</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1446</CastFunctionId> + <CastFunctionName>box</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>604</SourceTypeId> + <SourceTypeName>polygon</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>603</TargetTypeId> + <TargetTypeName>box</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="134" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10173</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1447</CastFunctionId> + <CastFunctionName>path</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>604</SourceTypeId> + <SourceTypeName>polygon</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>602</TargetTypeId> + <TargetTypeName>path</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="135" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10194</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>730</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>650</SourceTypeId> + <SourceTypeName>cidr</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1043</TargetTypeId> + <TargetTypeName>varchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="136" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10199</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>730</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>650</SourceTypeId> + <SourceTypeName>cidr</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1042</TargetTypeId> + <TargetTypeName>bpchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="137" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10189</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>730</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>650</SourceTypeId> + <SourceTypeName>cidr</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>25</TargetTypeId> + <TargetTypeName>text</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="138" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10181</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>650</SourceTypeId> + <SourceTypeName>cidr</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>869</TargetTypeId> + <TargetTypeName>inet</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="139" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10016</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>238</CastFunctionId> + <CastFunctionName>int2</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>700</SourceTypeId> + <SourceTypeName>float4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>21</TargetTypeId> + <TargetTypeName>int2</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="140" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10015</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>653</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>700</SourceTypeId> + <SourceTypeName>float4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="141" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10018</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>311</CastFunctionId> + <CastFunctionName>float8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>700</SourceTypeId> + <SourceTypeName>float4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>701</TargetTypeId> + <TargetTypeName>float8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="142" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10019</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1742</CastFunctionId> + <CastFunctionName>numeric</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>700</SourceTypeId> + <SourceTypeName>float4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1700</TargetTypeId> + <TargetTypeName>numeric</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="143" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10017</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>319</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>700</SourceTypeId> + <SourceTypeName>float4</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="144" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10024</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1743</CastFunctionId> + <CastFunctionName>numeric</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>701</SourceTypeId> + <SourceTypeName>float8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1700</TargetTypeId> + <TargetTypeName>numeric</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="145" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10020</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>483</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>701</SourceTypeId> + <SourceTypeName>float8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="146" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10021</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>237</CastFunctionId> + <CastFunctionName>int2</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>701</SourceTypeId> + <SourceTypeName>float8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>21</TargetTypeId> + <TargetTypeName>int2</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="147" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10022</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>317</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>701</SourceTypeId> + <SourceTypeName>float8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="148" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10023</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>312</CastFunctionId> + <CastFunctionName>float4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>701</SourceTypeId> + <SourceTypeName>float8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>700</TargetTypeId> + <TargetTypeName>float4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="149" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10178</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1544</CastFunctionId> + <CastFunctionName>polygon</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>718</SourceTypeId> + <SourceTypeName>circle</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>604</TargetTypeId> + <TargetTypeName>polygon</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="150" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10176</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1416</CastFunctionId> + <CastFunctionName>point</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>718</SourceTypeId> + <SourceTypeName>circle</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>600</TargetTypeId> + <TargetTypeName>point</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="151" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10177</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1480</CastFunctionId> + <CastFunctionName>box</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>718</SourceTypeId> + <SourceTypeName>circle</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>603</TargetTypeId> + <TargetTypeName>box</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="152" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10180</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>4124</CastFunctionId> + <CastFunctionName>macaddr</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>774</SourceTypeId> + <SourceTypeName>macaddr8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>829</TargetTypeId> + <TargetTypeName>macaddr</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="153" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10030</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>3823</CastFunctionId> + <CastFunctionName>numeric</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>790</SourceTypeId> + <SourceTypeName>money</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1700</TargetTypeId> + <TargetTypeName>numeric</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="154" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10179</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>4123</CastFunctionId> + <CastFunctionName>macaddr8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>829</SourceTypeId> + <SourceTypeName>macaddr</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>774</TargetTypeId> + <TargetTypeName>macaddr8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="155" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10195</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>730</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>869</SourceTypeId> + <SourceTypeName>inet</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1043</TargetTypeId> + <TargetTypeName>varchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="156" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10190</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>730</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>869</SourceTypeId> + <SourceTypeName>inet</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>25</TargetTypeId> + <TargetTypeName>text</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="157" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10182</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1715</CastFunctionId> + <CastFunctionName>cidr</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>869</SourceTypeId> + <SourceTypeName>inet</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>650</TargetTypeId> + <TargetTypeName>cidr</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="158" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10200</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>730</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>869</SourceTypeId> + <SourceTypeName>inet</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1042</TargetTypeId> + <TargetTypeName>bpchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="159" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10204</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>668</CastFunctionId> + <CastFunctionName>bpchar</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1042</SourceTypeId> + <SourceTypeName>bpchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1042</TargetTypeId> + <TargetTypeName>bpchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="160" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10128</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>401</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1042</SourceTypeId> + <SourceTypeName>bpchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1043</TargetTypeId> + <TargetTypeName>varchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="161" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10203</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2896</CastFunctionId> + <CastFunctionName>xml</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1042</SourceTypeId> + <SourceTypeName>bpchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>142</TargetTypeId> + <TargetTypeName>xml</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="162" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10127</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>401</CastFunctionId> + <CastFunctionName>text</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1042</SourceTypeId> + <SourceTypeName>bpchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>25</TargetTypeId> + <TargetTypeName>text</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="163" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10138</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>944</CastFunctionId> + <CastFunctionName>char</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1042</SourceTypeId> + <SourceTypeName>bpchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>18</TargetTypeId> + <TargetTypeName>char</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="164" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10141</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>409</CastFunctionId> + <CastFunctionName>name</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1042</SourceTypeId> + <SourceTypeName>bpchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>19</TargetTypeId> + <TargetTypeName>name</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="165" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10129</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>1043</SourceTypeId> + <SourceTypeName>varchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>25</TargetTypeId> + <TargetTypeName>text</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="166" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10142</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1400</CastFunctionId> + <CastFunctionName>name</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1043</SourceTypeId> + <SourceTypeName>varchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>19</TargetTypeId> + <TargetTypeName>name</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="167" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10130</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>1043</SourceTypeId> + <SourceTypeName>varchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1042</TargetTypeId> + <TargetTypeName>bpchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="168" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10198</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2896</CastFunctionId> + <CastFunctionName>xml</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1043</SourceTypeId> + <SourceTypeName>varchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>142</TargetTypeId> + <TargetTypeName>xml</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="169" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10110</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1079</CastFunctionId> + <CastFunctionName>regclass</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1043</SourceTypeId> + <SourceTypeName>varchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2205</TargetTypeId> + <TargetTypeName>regclass</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="170" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10205</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>669</CastFunctionId> + <CastFunctionName>varchar</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1043</SourceTypeId> + <SourceTypeName>varchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1043</TargetTypeId> + <TargetTypeName>varchar</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="171" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10139</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>944</CastFunctionId> + <CastFunctionName>char</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1043</SourceTypeId> + <SourceTypeName>varchar</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>18</TargetTypeId> + <TargetTypeName>char</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="172" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10152</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2024</CastFunctionId> + <CastFunctionName>timestamp</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1082</SourceTypeId> + <SourceTypeName>date</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1114</TargetTypeId> + <TargetTypeName>timestamp</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="173" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10153</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1174</CastFunctionId> + <CastFunctionName>timestamptz</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1082</SourceTypeId> + <SourceTypeName>date</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1184</TargetTypeId> + <TargetTypeName>timestamptz</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="174" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10206</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1968</CastFunctionId> + <CastFunctionName>time</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1083</SourceTypeId> + <SourceTypeName>time</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1083</TargetTypeId> + <TargetTypeName>time</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="175" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10155</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2047</CastFunctionId> + <CastFunctionName>timetz</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1083</SourceTypeId> + <SourceTypeName>time</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1266</TargetTypeId> + <TargetTypeName>timetz</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="176" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10154</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1370</CastFunctionId> + <CastFunctionName>interval</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1083</SourceTypeId> + <SourceTypeName>time</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1186</TargetTypeId> + <TargetTypeName>interval</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="177" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10158</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2028</CastFunctionId> + <CastFunctionName>timestamptz</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1114</SourceTypeId> + <SourceTypeName>timestamp</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1184</TargetTypeId> + <TargetTypeName>timestamptz</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="178" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10156</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2029</CastFunctionId> + <CastFunctionName>date</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1114</SourceTypeId> + <SourceTypeName>timestamp</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1082</TargetTypeId> + <TargetTypeName>date</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="179" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10157</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1316</CastFunctionId> + <CastFunctionName>time</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1114</SourceTypeId> + <SourceTypeName>timestamp</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1083</TargetTypeId> + <TargetTypeName>time</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="180" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10207</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1961</CastFunctionId> + <CastFunctionName>timestamp</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1114</SourceTypeId> + <SourceTypeName>timestamp</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1114</TargetTypeId> + <TargetTypeName>timestamp</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="181" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10159</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1178</CastFunctionId> + <CastFunctionName>date</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1184</SourceTypeId> + <SourceTypeName>timestamptz</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1082</TargetTypeId> + <TargetTypeName>date</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="182" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10162</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1388</CastFunctionId> + <CastFunctionName>timetz</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1184</SourceTypeId> + <SourceTypeName>timestamptz</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1266</TargetTypeId> + <TargetTypeName>timetz</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="183" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10160</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2019</CastFunctionId> + <CastFunctionName>time</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1184</SourceTypeId> + <SourceTypeName>timestamptz</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1083</TargetTypeId> + <TargetTypeName>time</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="184" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10161</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2027</CastFunctionId> + <CastFunctionName>timestamp</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1184</SourceTypeId> + <SourceTypeName>timestamptz</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1114</TargetTypeId> + <TargetTypeName>timestamp</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="185" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10208</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1967</CastFunctionId> + <CastFunctionName>timestamptz</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1184</SourceTypeId> + <SourceTypeName>timestamptz</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1184</TargetTypeId> + <TargetTypeName>timestamptz</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="186" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10209</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1200</CastFunctionId> + <CastFunctionName>interval</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1186</SourceTypeId> + <SourceTypeName>interval</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1186</TargetTypeId> + <TargetTypeName>interval</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="187" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10163</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1419</CastFunctionId> + <CastFunctionName>time</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1186</SourceTypeId> + <SourceTypeName>interval</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1083</TargetTypeId> + <TargetTypeName>time</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="188" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10164</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2046</CastFunctionId> + <CastFunctionName>time</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1266</SourceTypeId> + <SourceTypeName>timetz</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1083</TargetTypeId> + <TargetTypeName>time</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="189" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10210</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1969</CastFunctionId> + <CastFunctionName>timetz</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1266</SourceTypeId> + <SourceTypeName>timetz</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1266</TargetTypeId> + <TargetTypeName>timetz</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="190" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10187</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2076</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1560</SourceTypeId> + <SourceTypeName>bit</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="191" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10211</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1685</CastFunctionId> + <CastFunctionName>bit</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1560</SourceTypeId> + <SourceTypeName>bit</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1560</TargetTypeId> + <TargetTypeName>bit</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="192" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10183</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>1560</SourceTypeId> + <SourceTypeName>bit</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1562</TargetTypeId> + <TargetTypeName>varbit</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="193" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10188</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1684</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1560</SourceTypeId> + <SourceTypeName>bit</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="194" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10184</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>1562</SourceTypeId> + <SourceTypeName>varbit</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1560</TargetTypeId> + <TargetTypeName>bit</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="195" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10212</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1687</CastFunctionId> + <CastFunctionName>varbit</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1562</SourceTypeId> + <SourceTypeName>varbit</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1562</TargetTypeId> + <TargetTypeName>varbit</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="196" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10025</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1779</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1700</SourceTypeId> + <SourceTypeName>numeric</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="197" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10026</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1783</CastFunctionId> + <CastFunctionName>int2</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1700</SourceTypeId> + <SourceTypeName>numeric</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>21</TargetTypeId> + <TargetTypeName>int2</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="198" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10027</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1744</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1700</SourceTypeId> + <SourceTypeName>numeric</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="199" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10213</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1703</CastFunctionId> + <CastFunctionName>numeric</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1700</SourceTypeId> + <SourceTypeName>numeric</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1700</TargetTypeId> + <TargetTypeName>numeric</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="200" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10029</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1746</CastFunctionId> + <CastFunctionName>float8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1700</SourceTypeId> + <SourceTypeName>numeric</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>701</TargetTypeId> + <TargetTypeName>float8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="201" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10031</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>3824</CastFunctionId> + <CastFunctionName>money</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1700</SourceTypeId> + <SourceTypeName>numeric</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>790</TargetTypeId> + <TargetTypeName>money</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="202" parent="3"> + <Context>implicit</Context> + <Method>function</Method> + <ObjectId>10028</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1745</CastFunctionId> + <CastFunctionName>float4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>1700</SourceTypeId> + <SourceTypeName>numeric</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>700</TargetTypeId> + <TargetTypeName>float4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="203" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10057</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2202</SourceTypeId> + <SourceTypeName>regprocedure</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="204" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10052</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2202</SourceTypeId> + <SourceTypeName>regprocedure</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="205" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10056</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1288</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>2202</SourceTypeId> + <SourceTypeName>regprocedure</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="206" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10050</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2202</SourceTypeId> + <SourceTypeName>regprocedure</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>24</TargetTypeId> + <TargetTypeName>regproc</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="207" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10065</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2203</SourceTypeId> + <SourceTypeName>regoper</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2204</TargetTypeId> + <TargetTypeName>regoperator</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="208" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10063</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1288</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>2203</SourceTypeId> + <SourceTypeName>regoper</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="209" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10059</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2203</SourceTypeId> + <SourceTypeName>regoper</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="210" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10064</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2203</SourceTypeId> + <SourceTypeName>regoper</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="211" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10073</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2204</SourceTypeId> + <SourceTypeName>regoperator</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="212" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10068</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2204</SourceTypeId> + <SourceTypeName>regoperator</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="213" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10072</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1288</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>2204</SourceTypeId> + <SourceTypeName>regoperator</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="214" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10066</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2204</SourceTypeId> + <SourceTypeName>regoperator</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>2203</TargetTypeId> + <TargetTypeName>regoper</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="215" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10079</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1288</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>2205</SourceTypeId> + <SourceTypeName>regclass</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="216" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10075</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2205</SourceTypeId> + <SourceTypeName>regclass</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="217" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10080</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2205</SourceTypeId> + <SourceTypeName>regclass</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="218" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10093</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1288</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>2206</SourceTypeId> + <SourceTypeName>regtype</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="219" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10094</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2206</SourceTypeId> + <SourceTypeName>regtype</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="220" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10089</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>2206</SourceTypeId> + <SourceTypeName>regtype</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="221" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10146</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>3361</SourceTypeId> + <SourceTypeName>pg_ndistinct</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>17</TargetTypeId> + <TargetTypeName>bytea</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="222" parent="3"> + <Context>implicit</Context> + <Method>io</Method> + <ObjectId>10147</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>3361</SourceTypeId> + <SourceTypeName>pg_ndistinct</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>25</TargetTypeId> + <TargetTypeName>text</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="223" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10148</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>3402</SourceTypeId> + <SourceTypeName>pg_dependencies</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>17</TargetTypeId> + <TargetTypeName>bytea</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="224" parent="3"> + <Context>implicit</Context> + <Method>io</Method> + <ObjectId>10149</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>3402</SourceTypeId> + <SourceTypeName>pg_dependencies</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>25</TargetTypeId> + <TargetTypeName>text</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="225" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10096</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>3734</SourceTypeId> + <SourceTypeName>regconfig</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="226" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10100</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1288</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3734</SourceTypeId> + <SourceTypeName>regconfig</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="227" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10101</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>3734</SourceTypeId> + <SourceTypeName>regconfig</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="228" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10103</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>3769</SourceTypeId> + <SourceTypeName>regdictionary</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="229" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10108</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>3769</SourceTypeId> + <SourceTypeName>regdictionary</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="230" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10107</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1288</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3769</SourceTypeId> + <SourceTypeName>regdictionary</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="231" parent="3"> + <Context>assignment</Context> + <Method>io</Method> + <ObjectId>10215</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>3802</SourceTypeId> + <SourceTypeName>jsonb</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>114</TargetTypeId> + <TargetTypeName>json</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="232" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10218</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>3450</CastFunctionId> + <CastFunctionName>int2</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3802</SourceTypeId> + <SourceTypeName>jsonb</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>21</TargetTypeId> + <TargetTypeName>int2</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="233" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10220</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>3452</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3802</SourceTypeId> + <SourceTypeName>jsonb</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="234" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10219</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>3451</CastFunctionId> + <CastFunctionName>int4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3802</SourceTypeId> + <SourceTypeName>jsonb</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="235" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10216</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>3556</CastFunctionId> + <CastFunctionName>bool</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3802</SourceTypeId> + <SourceTypeName>jsonb</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>16</TargetTypeId> + <TargetTypeName>bool</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="236" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10221</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>3453</CastFunctionId> + <CastFunctionName>float4</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3802</SourceTypeId> + <SourceTypeName>jsonb</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>700</TargetTypeId> + <TargetTypeName>float4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="237" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10217</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>3449</CastFunctionId> + <CastFunctionName>numeric</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3802</SourceTypeId> + <SourceTypeName>jsonb</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>1700</TargetTypeId> + <TargetTypeName>numeric</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="238" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10222</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>2580</CastFunctionId> + <CastFunctionName>float8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3802</SourceTypeId> + <SourceTypeName>jsonb</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>701</TargetTypeId> + <TargetTypeName>float8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="239" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10223</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>4281</CastFunctionId> + <CastFunctionName>int4multirange</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3904</SourceTypeId> + <SourceTypeName>int4range</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4451</TargetTypeId> + <TargetTypeName>int4multirange</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="240" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10225</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>4284</CastFunctionId> + <CastFunctionName>nummultirange</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3906</SourceTypeId> + <SourceTypeName>numrange</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4532</TargetTypeId> + <TargetTypeName>nummultirange</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="241" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10227</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>4287</CastFunctionId> + <CastFunctionName>tsmultirange</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3908</SourceTypeId> + <SourceTypeName>tsrange</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4533</TargetTypeId> + <TargetTypeName>tsmultirange</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="242" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10228</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>4290</CastFunctionId> + <CastFunctionName>tstzmultirange</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3910</SourceTypeId> + <SourceTypeName>tstzrange</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4534</TargetTypeId> + <TargetTypeName>tstzmultirange</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="243" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10226</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>4293</CastFunctionId> + <CastFunctionName>datemultirange</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3912</SourceTypeId> + <SourceTypeName>daterange</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4535</TargetTypeId> + <TargetTypeName>datemultirange</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="244" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10224</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>4296</CastFunctionId> + <CastFunctionName>int8multirange</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>3926</SourceTypeId> + <SourceTypeName>int8range</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>4536</TargetTypeId> + <TargetTypeName>int8multirange</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="245" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10124</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>4089</SourceTypeId> + <SourceTypeName>regnamespace</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="246" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10123</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1288</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>4089</SourceTypeId> + <SourceTypeName>regnamespace</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="247" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10119</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>4089</SourceTypeId> + <SourceTypeName>regnamespace</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="248" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10117</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>4096</SourceTypeId> + <SourceTypeName>regrole</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="249" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10112</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>4096</SourceTypeId> + <SourceTypeName>regrole</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="250" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10116</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1288</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>4096</SourceTypeId> + <SourceTypeName>regrole</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="251" parent="3"> + <Context>assignment</Context> + <Method>function</Method> + <ObjectId>10086</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>1288</CastFunctionId> + <CastFunctionName>int8</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>4191</SourceTypeId> + <SourceTypeName>regcollation</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>20</TargetTypeId> + <TargetTypeName>int8</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="252" parent="3"> + <Context>assignment</Context> + <Method>binary</Method> + <ObjectId>10087</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>4191</SourceTypeId> + <SourceTypeName>regcollation</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>23</TargetTypeId> + <TargetTypeName>int4</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="253" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10082</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>4191</SourceTypeId> + <SourceTypeName>regcollation</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>26</TargetTypeId> + <TargetTypeName>oid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="254" parent="3"> + <Context>implicit</Context> + <Method>binary</Method> + <ObjectId>10150</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>5017</SourceTypeId> + <SourceTypeName>pg_mcv_list</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>17</TargetTypeId> + <TargetTypeName>bytea</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="255" parent="3"> + <Context>implicit</Context> + <Method>io</Method> + <ObjectId>10151</ObjectId> + <StateNumber>1</StateNumber> + <SourceTypeId>5017</SourceTypeId> + <SourceTypeName>pg_mcv_list</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>25</TargetTypeId> + <TargetTypeName>text</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <cast id="256" parent="3"> + <Context>explicit</Context> + <Method>function</Method> + <ObjectId>10036</ObjectId> + <StateNumber>1</StateNumber> + <CastFunctionId>5071</CastFunctionId> + <CastFunctionName>xid</CastFunctionName> + <CastFunctionParentName>pg_catalog</CastFunctionParentName> + <SourceTypeId>5069</SourceTypeId> + <SourceTypeName>xid8</SourceTypeName> + <SourceTypeParentName>pg_catalog</SourceTypeParentName> + <TargetTypeId>28</TargetTypeId> + <TargetTypeName>xid</TargetTypeName> + <TargetTypeParentName>pg_catalog</TargetTypeParentName> + </cast> + <extension id="257" parent="3" name="plpgsql"> + <Comment>PL/pgSQL procedural language</Comment> + <ObjectId>13564</ObjectId> + <StateNumber>684</StateNumber> + <Version>1.0</Version> + <ExtSchemaId>11</ExtSchemaId> + <ExtSchemaName>pg_catalog</ExtSchemaName> + <MemberIds>13565 +13566 +13567 +13568</MemberIds> + </extension> + <language id="258" parent="3" name="c"> + <Comment>dynamically-loaded C functions</Comment> + <ObjectId>13</ObjectId> + <StateNumber>1</StateNumber> + <ValidatorName>fmgr_c_validator</ValidatorName> + <ValidatorSchema>pg_catalog</ValidatorSchema> + </language> + <language id="259" parent="3" name="internal"> + <Comment>built-in functions</Comment> + <ObjectId>12</ObjectId> + <StateNumber>1</StateNumber> + <ValidatorName>fmgr_internal_validator</ValidatorName> + <ValidatorSchema>pg_catalog</ValidatorSchema> + </language> + <language id="260" parent="3" name="plpgsql"> + <Comment>PL/pgSQL procedural language</Comment> + <HandlerName>plpgsql_call_handler</HandlerName> + <HandlerSchema>pg_catalog</HandlerSchema> + <InlineHandlerName>plpgsql_inline_handler</InlineHandlerName> + <InlineHandlerSchema>pg_catalog</InlineHandlerSchema> + <ObjectId>13568</ObjectId> + <StateNumber>684</StateNumber> + <Trusted>1</Trusted> + <ValidatorName>plpgsql_validator</ValidatorName> + <ValidatorSchema>pg_catalog</ValidatorSchema> + </language> + <language id="261" parent="3" name="sql"> + <Comment>SQL-language functions</Comment> + <ObjectId>14</ObjectId> + <StateNumber>1</StateNumber> + <Trusted>1</Trusted> + <ValidatorName>fmgr_sql_validator</ValidatorName> + <ValidatorSchema>pg_catalog</ValidatorSchema> + </language> + <schema id="262" parent="3" name="information_schema"> + <ObjectId>13212</ObjectId> + <StateNumber>530</StateNumber> + <OwnerName>app</OwnerName> + </schema> + <schema id="263" parent="3" name="pg_catalog"> + <Comment>system catalog schema</Comment> + <ObjectId>11</ObjectId> + <StateNumber>524</StateNumber> + <OwnerName>app</OwnerName> + </schema> + <schema id="264" parent="3" name="public"> + <Comment>standard public schema</Comment> + <Current>1</Current> + <IntrospectionStateNumber>745</IntrospectionStateNumber> + <LastIntrospectionLocalTimestamp>2024-08-16.11:25:02</LastIntrospectionLocalTimestamp> + <ObjectId>2200</ObjectId> + <StateNumber>524</StateNumber> + <OwnerName>pg_database_owner</OwnerName> + </schema> + <routine id="265" parent="264" name="diesel_manage_updated_at"> + <ArgumentsDefinition>_tbl regclass</ArgumentsDefinition> + <ObjectId>16395</ObjectId> + <ResultsDefinition>void</ResultsDefinition> + <Rows>0.0</Rows> + <SourceTextLength>166</SourceTextLength> + <StateNumber>744</StateNumber> + <LanguageName>plpgsql</LanguageName> + <OwnerName>app</OwnerName> + </routine> + <routine id="266" parent="264" name="diesel_set_updated_at"> + <ObjectId>16396</ObjectId> + <PgRoutineKind>pg-trigger</PgRoutineKind> + <ResultsDefinition>trigger</ResultsDefinition> + <Rows>0.0</Rows> + <SourceTextLength>201</SourceTextLength> + <StateNumber>744</StateNumber> + <LanguageName>plpgsql</LanguageName> + <OwnerName>app</OwnerName> + </routine> + <table id="267" parent="264" name="__diesel_schema_migrations"> + <ObjectId>16389</ObjectId> + <StateNumber>743</StateNumber> + <AccessMethodId>2</AccessMethodId> + <OwnerName>app</OwnerName> + </table> + <argument id="268" parent="265"> + <ArgumentDirection>R</ArgumentDirection> + <StoredType>void|0s</StoredType> + </argument> + <argument id="269" parent="265" name="_tbl"> + <Position>1</Position> + <StoredType>regclass|0s</StoredType> + </argument> + <argument id="270" parent="266"> + <ArgumentDirection>R</ArgumentDirection> + <StoredType>trigger|0s</StoredType> + </argument> + <column id="271" parent="267" name="version"> + <NotNull>1</NotNull> + <Position>1</Position> + <StateNumber>743</StateNumber> + <StoredType>varchar(50)|0s</StoredType> + <TypeId>1043</TypeId> + </column> + <column id="272" parent="267" name="run_on"> + <DefaultExpression>CURRENT_TIMESTAMP</DefaultExpression> + <NotNull>1</NotNull> + <Position>2</Position> + <StateNumber>743</StateNumber> + <StoredType>timestamp|0s</StoredType> + <TypeId>1114</TypeId> + </column> + <index id="273" parent="267" name="__diesel_schema_migrations_pkey"> + <ColNames>version</ColNames> + <NameSurrogate>1</NameSurrogate> + <ObjectId>16393</ObjectId> + <Primary>1</Primary> + <StateNumber>743</StateNumber> + <Unique>1</Unique> + <AccessMethodId>403</AccessMethodId> + <CollationNames>default</CollationNames> + <CollationIds>100</CollationIds> + <CollationParentNames>pg_catalog</CollationParentNames> + </index> + <key id="274" parent="267" name="__diesel_schema_migrations_pkey"> + <NameSurrogate>1</NameSurrogate> + <ObjectId>16394</ObjectId> + <Primary>1</Primary> + <StateNumber>743</StateNumber> + <UnderlyingIndexId>16393</UnderlyingIndexId> + </key> + </database-model> +</dataSource> \ No newline at end of file diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg.meta new file mode 100644 index 0000000..be276c1 --- /dev/null +++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg.meta @@ -0,0 +1 @@ +#n:todo_baggins \ No newline at end of file diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/information_schema.FNRwLQ.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/information_schema.FNRwLQ.meta new file mode 100644 index 0000000..1ff3db2 --- /dev/null +++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/information_schema.FNRwLQ.meta @@ -0,0 +1,2 @@ +#n:information_schema +!<md> [null, 0, null, null, -2147483648, -2147483648] diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/pg_catalog.0S1ZNQ.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/pg_catalog.0S1ZNQ.meta new file mode 100644 index 0000000..44e65b1 --- /dev/null +++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/pg_catalog.0S1ZNQ.meta @@ -0,0 +1,2 @@ +#n:pg_catalog +!<md> [null, 0, null, null, -2147483648, -2147483648] diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta new file mode 100644 index 0000000..f79bdf4 --- /dev/null +++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta @@ -0,0 +1,2 @@ +#n:public +!<md> [745, 0, null, null, -2147483648, -2147483648] diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.zip b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.zip new file mode 100644 index 0000000000000000000000000000000000000000..e121a50396d96de4bbc8494c291cdcb8c65ff999 GIT binary patch literal 1779 zcmbW1&2G~`5P;J^4i*Q5IP^HEMYWNeHg=LGO+jjtO=}hG;5f9Xsv<XWEQ8|&drc9~ zz=;cY&O8K<z_||s2QJJyZ5%s|NZDjYYkOvAXZG7^94{?%88#ljd+_Gl+pFGpoHN-( z+42V=bv$dU>sW#1w)>`M+EzOpc1>z^+a}HWm!<H+&h{;8u6et&%(yjYm-j8Z<C;Mr zaF6%;-RE%Tg{~_?F1Ni?E|%p&S%kBEPJ}{Ugd&rY2<5^^q#}N}Rx+CvMUW*lkmcMt z`f-4xEkaXdx*lmwgjXV<#y6FbM$>KlpL2~w+N*zlG>;cD87AUg(hlCc9pA!QKri$< z)ERg%s|0+TUbrx>0nTXXdjWhHINfOXuIbq!Ru_iu(8h&1GvL<OxdU>jsF49VCDoQe zpf~XQCgnG(I@!lZLst$Di4K89Ck_S<NL|wjv>G*Lq^a;Eh*n{RnjB~aWWRa@x^@CL zAsV_?CAAj%U#F8?oEJ8*o|unN;fPwR;65uHXS&q#=O{#6gTbYT9&`ZaaEJ>e59PG- zbMFft29u|^97=La*^}z0k2{ws5R*0$g(><ri#r8b$`@sc(T6}4khl^)Fp)}(wUNTt zQYiusIhFGgqwWT^sIc?n_Vw4p`>zo-Cc@mA&1Nl`B`=KGqP}C>mOmd}N*(wyAu2fm zr3p2qX((#dfV!@|1nor)_SM>?Q8sP`%wE-uX`cz3$W;L2h>VbCAY!Nq3)p=IozV9! zkG84Pw*qSRkqu^uq=8Z&&2?h5bd~x3o4~2^OkuaM_$V{G39jK0#p6ybaaJ?P#?7#C zoQ$6CMRD}sxQV%=BQ5_CJbmX@$9aEVoDQBW?Bor+wQFQ~A)RdcCdBc2OY_EyGfnM> Tg<HADGFZmn6<)Tb754NO|8({$ literal 0 HcmV?d00001 diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml new file mode 100644 index 0000000..2dec4ae --- /dev/null +++ b/.idea/sqldialects.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="SqlDialectMappings"> + <file url="file://$PROJECT_DIR$/migrations/00000000000000_diesel_initial_setup/down.sql" dialect="GenericSQL" /> + <file url="file://$PROJECT_DIR$/migrations/00000000000000_diesel_initial_setup/up.sql" dialect="PostgreSQL" /> + <file url="PROJECT" dialect="PostgreSQL" /> + </component> +</project> \ No newline at end of file From 472593bbc1ddf9f91cb994f1c68dbb507a038c7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Fri, 16 Aug 2024 17:44:43 +0200 Subject: [PATCH 18/50] fix: Tailwind build in development --- .dockerignore | 1 - Dioxus.toml | 2 +- assets/styles/.gitignore | 2 +- docker-compose-dev.yml | 1 - docker/dev/app/Dockerfile | 6 ++++-- docker/dev/app/supervisord.conf | 23 +++++++++++++++++++++++ 6 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 docker/dev/app/supervisord.conf diff --git a/.dockerignore b/.dockerignore index 1a4d15f..c41aef0 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,7 +3,6 @@ /.github/ /dist/ /debug/ -/docker/ /node_modules/ /static/ /target/ diff --git a/Dioxus.toml b/Dioxus.toml index b99cf59..2e07cb6 100644 --- a/Dioxus.toml +++ b/Dioxus.toml @@ -31,7 +31,7 @@ watch_path = ["src", "assets"] # CSS style file -style = ["/tailwind.css"] +style = ["/styles/tailwind_output.css"] # Javascript code file script = [] diff --git a/assets/styles/.gitignore b/assets/styles/.gitignore index ddeb771..c63c213 100644 --- a/assets/styles/.gitignore +++ b/assets/styles/.gitignore @@ -1 +1 @@ -tailwind_output.css +/tailwind_output.css diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 3b90249..43b704f 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -9,7 +9,6 @@ services: - /srv/app/.dioxus/ - /srv/app/dist/ - /srv/app/debug/ - - /srv/app/docker/ - /srv/app/node_modules/ - /srv/app/static/ - /srv/app/target/ diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile index f992884..209098d 100644 --- a/docker/dev/app/Dockerfile +++ b/docker/dev/app/Dockerfile @@ -2,11 +2,13 @@ FROM rust:1.80-bookworm RUN rustup target add wasm32-unknown-unknown RUN cargo install dioxus-cli diesel_cli -RUN apt-get update && apt-get install -y nodejs npm +RUN apt-get update && apt-get install -y nodejs npm supervisor COPY . /srv/app WORKDIR /srv/app RUN npm install -CMD npm run watch & dx serve --port 8000 +COPY docker/dev/app/supervisord.conf /etc/supervisor/conf.d/supervisord.conf + +CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] diff --git a/docker/dev/app/supervisord.conf b/docker/dev/app/supervisord.conf new file mode 100644 index 0000000..938f860 --- /dev/null +++ b/docker/dev/app/supervisord.conf @@ -0,0 +1,23 @@ +[supervisord] +nodaemon=true +logfile=/dev/null +logfile_maxbytes=0 +pidfile=/dev/null + +[program:npm] +command=npm run watch +directory=/srv/app +autostart=true +autorestart=true +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 +redirect_stderr=true + +[program:dx] +command=dx serve --port 8000 +directory=/srv/app +autostart=true +autorestart=true +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 +redirect_stderr=true From cb68d5dd0d6385cc164ae56a4bd6fbc1484248bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 00:20:52 +0200 Subject: [PATCH 19/50] fix: Diesel configuration --- diesel.toml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/diesel.toml b/diesel.toml index 069f77a..06da47c 100644 --- a/diesel.toml +++ b/diesel.toml @@ -2,8 +2,5 @@ # see https://diesel.rs/guides/configuring-diesel-cli [print_schema] -file = "src/schema.rs" +file = "src/schema/mod.rs" custom_type_derives = ["diesel::query_builder::QueryId", "Clone"] - -[migrations_directory] -dir = "/home/matous/Documents/todo-baggins/migrations" From 6b13e568402dfa1530734713ec90154d50bac2ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 00:23:05 +0200 Subject: [PATCH 20/50] feat: add a project model --- .../2024-08-16-221326_create_projects/down.sql | 2 ++ .../2024-08-16-221326_create_projects/up.sql | 6 ++++++ src/models/mod.rs | 1 + src/models/project.rs | 17 +++++++++++++++++ src/schema/mod.rs | 8 ++++++++ 5 files changed, 34 insertions(+) create mode 100644 migrations/2024-08-16-221326_create_projects/down.sql create mode 100644 migrations/2024-08-16-221326_create_projects/up.sql create mode 100644 src/models/mod.rs create mode 100644 src/models/project.rs create mode 100644 src/schema/mod.rs diff --git a/migrations/2024-08-16-221326_create_projects/down.sql b/migrations/2024-08-16-221326_create_projects/down.sql new file mode 100644 index 0000000..1884a8f --- /dev/null +++ b/migrations/2024-08-16-221326_create_projects/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +DROP TABLE IF EXISTS "projects"; diff --git a/migrations/2024-08-16-221326_create_projects/up.sql b/migrations/2024-08-16-221326_create_projects/up.sql new file mode 100644 index 0000000..1bddc94 --- /dev/null +++ b/migrations/2024-08-16-221326_create_projects/up.sql @@ -0,0 +1,6 @@ +-- Your SQL goes here +CREATE TABLE "projects"( + "id" SERIAL NOT NULL PRIMARY KEY, + "title" TEXT NOT NULL +); + diff --git a/src/models/mod.rs b/src/models/mod.rs new file mode 100644 index 0000000..dfc721a --- /dev/null +++ b/src/models/mod.rs @@ -0,0 +1 @@ +pub(crate) mod project; diff --git a/src/models/project.rs b/src/models/project.rs new file mode 100644 index 0000000..8bed447 --- /dev/null +++ b/src/models/project.rs @@ -0,0 +1,17 @@ +use crate::schema::projects; +use diesel::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Queryable, Selectable, Serialize, Deserialize)] +#[diesel(table_name = crate::schema::projects)] +#[diesel(check_for_backend(diesel::pg::Pg))] +pub struct Project { + pub(crate) id: i32, + pub(crate) title: String, +} + +#[derive(Insertable, Serialize, Deserialize)] +#[diesel(table_name = projects)] +pub struct NewProject<'a> { + pub title: &'a str, +} diff --git a/src/schema/mod.rs b/src/schema/mod.rs new file mode 100644 index 0000000..6ad8716 --- /dev/null +++ b/src/schema/mod.rs @@ -0,0 +1,8 @@ +// @generated automatically by Diesel CLI. + +diesel::table! { + projects (id) { + id -> Int4, + title -> Text, + } +} From 97c977917046efeebe8a23c1380b0bceff8d9d6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 00:30:17 +0200 Subject: [PATCH 21/50] feat: switch Dioxus to fullstack, add a form for creating a project --- Cargo.lock | 829 +++++++++++++++++++++++++++++- Cargo.toml | 9 +- Dioxus.toml | 2 +- docker/dev/app/supervisord.conf | 2 +- src/components/app.rs | 11 + src/components/form_project.rs | 23 + src/components/home.rs | 18 + src/components/mod.rs | 3 + src/main.rs | 54 +- src/route/mod.rs | 8 + src/server/database_connection.rs | 12 + src/server/mod.rs | 2 + src/server/projects.rs | 21 + 13 files changed, 944 insertions(+), 50 deletions(-) create mode 100644 src/components/app.rs create mode 100644 src/components/form_project.rs create mode 100644 src/components/home.rs create mode 100644 src/components/mod.rs create mode 100644 src/route/mod.rs create mode 100644 src/server/database_connection.rs create mode 100644 src/server/mod.rs create mode 100644 src/server/projects.rs diff --git a/Cargo.lock b/Cargo.lock index bc6232d..282fb31 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,21 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "ahash" version = "0.8.11" @@ -20,12 +35,39 @@ version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[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 = "anymap" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33954243bd79057c2de7338850b85983a44588021f8a5fee574a8888c6de4344" + [[package]] name = "anymap2" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" +[[package]] +name = "askama_escape" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" + [[package]] name = "async-channel" version = "2.3.1" @@ -67,6 +109,93 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +[[package]] +name = "axum" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" +dependencies = [ + "async-trait", + "axum-core", + "axum-macros", + "base64", + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "multer", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sha1", + "sync_wrapper 1.0.1", + "tokio", + "tokio-tungstenite", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 0.1.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00c055ee2d014ae5981ce1016374e8213682aa14d9bf40e48ab48b5f3ef20eaa" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base64" version = "0.21.7" @@ -91,6 +220,15 @@ dependencies = [ "serde", ] +[[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 = "blocking" version = "1.6.1" @@ -154,6 +292,15 @@ dependencies = [ "thiserror", ] +[[package]] +name = "cc" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68064e60dbf1f17005c2fde4d07c16d8baa506fd7ffed8ccab702d93617975c7" +dependencies = [ + "shlex", +] + [[package]] name = "cfg-expr" version = "0.15.8" @@ -169,6 +316,20 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets", +] + [[package]] name = "ciborium" version = "0.2.2" @@ -250,6 +411,21 @@ dependencies = [ "unicode-segmentation", ] +[[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.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +dependencies = [ + "libc", +] + [[package]] name = "crossbeam-utils" version = "0.8.20" @@ -262,6 +438,16 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "darling" version = "0.20.10" @@ -310,6 +496,12 @@ dependencies = [ "parking_lot_core", ] +[[package]] +name = "data-encoding" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + [[package]] name = "diesel" version = "2.2.2" @@ -345,6 +537,16 @@ dependencies = [ "syn", ] +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + [[package]] name = "dioxus" version = "0.5.6" @@ -358,9 +560,12 @@ dependencies = [ "dioxus-hooks", "dioxus-hot-reload", "dioxus-html", + "dioxus-liveview", "dioxus-router", "dioxus-signals", + "dioxus-ssr", "dioxus-web", + "serde", ] [[package]] @@ -430,20 +635,35 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b80f0ac18166302341164e681322e0385131c08a11c3cc1c51ee8df799ab0d3d" dependencies = [ + "anymap", "async-trait", + "axum", "base64", "bytes", "ciborium", + "dioxus-cli-config", "dioxus-hot-reload", "dioxus-lib", + "dioxus-ssr", "dioxus-web", "dioxus_server_macro", "futures-util", + "http 1.1.0", + "hyper", "once_cell", + "pin-project", "serde", "serde_json", "server_fn", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tower-http", + "tower-layer", "tracing", + "tracing-futures", "web-sys", ] @@ -519,6 +739,8 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "351fad098c657d14f3ac2900362d2b86e83c22c4c620a404839e1ab628f3395b" dependencies = [ + "dioxus-core", + "dioxus-html", "js-sys", "md5", "sledgehammer_bindgen", @@ -542,6 +764,32 @@ dependencies = [ "dioxus-signals", ] +[[package]] +name = "dioxus-liveview" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ada18a8fe0764f492fd4fb169b818877799e887dbb6ffb19289801d924faf18" +dependencies = [ + "axum", + "dioxus-cli-config", + "dioxus-core", + "dioxus-hot-reload", + "dioxus-html", + "dioxus-interpreter-js", + "futures-channel", + "futures-util", + "generational-box", + "rustc-hash", + "serde", + "serde_json", + "slab", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + [[package]] name = "dioxus-logger" version = "0.5.1" @@ -561,11 +809,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c235c5dbeb528c0c2b0424763da812e7500df69b82eddac54db6f4975e065c5f" dependencies = [ "dioxus-cli-config", + "dioxus-fullstack", "dioxus-lib", "dioxus-router-macro", + "dioxus-ssr", "gloo", "gloo-utils 0.1.7", "js-sys", + "tokio", "tracing", "url", "urlencoding", @@ -616,6 +867,27 @@ dependencies = [ "tracing", ] +[[package]] +name = "dioxus-ssr" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "753b1eb29372bb3afcdbc0ac603893802a8b7b70fa94b86a1641408e2b87173b" +dependencies = [ + "askama_escape", + "async-trait", + "chrono", + "dioxus-core", + "dioxus-html", + "generational-box", + "http 1.1.0", + "lru", + "rustc-hash", + "serde_json", + "thiserror", + "tokio", + "tracing", +] + [[package]] name = "dioxus-web" version = "0.5.6" @@ -654,6 +926,12 @@ dependencies = [ "syn", ] +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + [[package]] name = "dsl_auto_type" version = "0.1.2" @@ -662,7 +940,7 @@ checksum = "c5d9abe6314103864cc2d8901b7ae224e0ab1a103a0a416661b4097b0779b607" dependencies = [ "darling", "either", - "heck", + "heck 0.5.0", "proc-macro2", "quote", "syn", @@ -674,6 +952,15 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + [[package]] name = "enumset" version = "1.1.5" @@ -867,6 +1154,33 @@ dependencies = [ "parking_lot", ] +[[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.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + [[package]] name = "gloo" version = "0.8.1" @@ -1087,12 +1401,24 @@ dependencies = [ "allocator-api2", ] +[[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.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + [[package]] name = "http" version = "0.2.12" @@ -1115,6 +1441,104 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a397c49fec283e3d6211adbe480be95aae5f304cfb923e9970e08956d5168a" + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", +] + +[[package]] +name = "hyper-util" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "hyper", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "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 = "ident_case" version = "1.0.1" @@ -1177,6 +1601,12 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae52f28f45ac2bc96edb7714de995cffc174a395fb0abf5bff453587c980d7b9" +[[package]] +name = "inventory" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767" + [[package]] name = "itoa" version = "1.0.11" @@ -1259,6 +1689,12 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + [[package]] name = "md5" version = "0.7.0" @@ -1271,6 +1707,60 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[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 = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys", +] + +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 1.1.0", + "httparse", + "memchr", + "mime", + "spin", + "version_check", +] + [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -1290,6 +1780,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "object" +version = "0.36.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.19.0" @@ -1399,6 +1898,15 @@ dependencies = [ "futures-io", ] +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + [[package]] name = "pq-sys" version = "0.6.1" @@ -1436,6 +1944,36 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[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", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + [[package]] name = "redox_syscall" version = "0.5.3" @@ -1445,6 +1983,12 @@ dependencies = [ "bitflags", ] +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + [[package]] name = "rustc-hash" version = "1.1.0" @@ -1460,6 +2004,12 @@ dependencies = [ "semver", ] +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + [[package]] name = "ryu" version = "1.0.18" @@ -1492,9 +2042,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.207" +version = "1.0.208" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2" +checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" dependencies = [ "serde_derive", ] @@ -1522,9 +2072,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.207" +version = "1.0.208" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e" +checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" dependencies = [ "proc-macro2", "quote", @@ -1543,6 +2093,16 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + [[package]] name = "serde_qs" version = "0.12.0" @@ -1583,12 +2143,16 @@ version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "024b400db1aca5bd4188714f7bbbf7a2e1962b9a12a80b2a21e937e509086963" dependencies = [ + "axum", "bytes", "const_format", "dashmap", "futures", "gloo-net 0.6.0", "http 1.1.0", + "http-body-util", + "hyper", + "inventory", "js-sys", "once_cell", "send_wrapper", @@ -1597,6 +2161,8 @@ dependencies = [ "serde_qs", "server_fn_macro_default", "thiserror", + "tower", + "tower-layer", "url", "wasm-bindgen", "wasm-bindgen-futures", @@ -1629,6 +2195,17 @@ dependencies = [ "syn", ] +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -1638,6 +2215,21 @@ 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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + [[package]] name = "slab" version = "0.4.9" @@ -1694,6 +2286,22 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "spinning" version = "0.1.0" @@ -1720,6 +2328,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + [[package]] name = "thiserror" version = "1.0.63" @@ -1778,14 +2398,138 @@ dependencies = [ "diesel", "dioxus", "dioxus-logger", + "dotenvy", + "serde", ] +[[package]] +name = "tokio" +version = "1.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "futures-util", + "hashbrown", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1812,6 +2556,16 @@ dependencies = [ "valuable", ] +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + [[package]] name = "tracing-log" version = "0.2.0" @@ -1848,6 +2602,40 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.1.0", + "httparse", + "log", + "rand", + "sha1", + "thiserror", + "url", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.15" @@ -1898,6 +2686,12 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "valuable" version = "0.1.0" @@ -1916,6 +2710,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "wasm-bindgen" version = "0.2.93" @@ -2028,6 +2828,24 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -2104,6 +2922,7 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] diff --git a/Cargo.toml b/Cargo.toml index 131176d..825ac02 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,14 @@ edition = "2021" [dependencies] diesel = { version = "2.2.2", features = ["postgres"] } -dioxus = { version = "0.5", features = ["web", "router"] } +dioxus = { version = "0.5", features = ["fullstack", "router"] } # Debug dioxus-logger = "0.5.1" +dotenvy = "0.15.7" +serde = "1.0.208" + +[features] +default = [] +server = ["dioxus/axum"] +web = ["dioxus/web"] diff --git a/Dioxus.toml b/Dioxus.toml index 2e07cb6..e396b3a 100644 --- a/Dioxus.toml +++ b/Dioxus.toml @@ -5,7 +5,7 @@ name = "todo-baggins" # Dioxus App Default Platform # web, desktop, fullstack -default_platform = "web" +default_platform = "fullstack" # `build` & `serve` dist path out_dir = "dist" diff --git a/docker/dev/app/supervisord.conf b/docker/dev/app/supervisord.conf index 938f860..94b24dc 100644 --- a/docker/dev/app/supervisord.conf +++ b/docker/dev/app/supervisord.conf @@ -14,7 +14,7 @@ stdout_logfile_maxbytes=0 redirect_stderr=true [program:dx] -command=dx serve --port 8000 +command=dx serve directory=/srv/app autostart=true autorestart=true diff --git a/src/components/app.rs b/src/components/app.rs new file mode 100644 index 0000000..ac00f95 --- /dev/null +++ b/src/components/app.rs @@ -0,0 +1,11 @@ +use crate::route::Route; +use dioxus::core_macro::rsx; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn App() -> Element { + rsx! { + Router::<Route> {} + } +} diff --git a/src/components/form_project.rs b/src/components/form_project.rs new file mode 100644 index 0000000..0cb256f --- /dev/null +++ b/src/components/form_project.rs @@ -0,0 +1,23 @@ +use dioxus::core_macro::{component, rsx}; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn FormProject(onsubmit: EventHandler<String>) -> Element { + rsx! { + form { + onsubmit: move |event| { + onsubmit(event.values().get("title").unwrap().as_value()); + }, + input { + r#type: "text", + name: "title", + placeholder: "title" + } + button { + r#type: "submit", + "create" + } + } + } +} diff --git a/src/components/home.rs b/src/components/home.rs new file mode 100644 index 0000000..a6eee7e --- /dev/null +++ b/src/components/home.rs @@ -0,0 +1,18 @@ +use crate::components::form_project::FormProject; +use crate::server::projects::create_project; +use dioxus::core_macro::rsx; +use dioxus::dioxus_core::Element; +use dioxus::prelude::*; + +#[component] +pub(crate) fn Home() -> Element { + rsx! { + FormProject { + onsubmit: move |title| { + spawn(async move { + let _ = create_project(title).await; + }); + } + } + } +} diff --git a/src/components/mod.rs b/src/components/mod.rs new file mode 100644 index 0000000..a05a8fc --- /dev/null +++ b/src/components/mod.rs @@ -0,0 +1,3 @@ +pub(crate) mod app; +pub(crate) mod form_project; +pub(crate) mod home; diff --git a/src/main.rs b/src/main.rs index 8db1d9a..ff7692a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,52 +1,22 @@ #![allow(non_snake_case)] +mod components; +mod models; +mod route; +mod schema; +mod server; + +use components::app::App; use dioxus::prelude::*; use dioxus_logger::tracing::{info, Level}; -#[derive(Clone, Routable, Debug, PartialEq)] -enum Route { - #[route("/")] - Home {}, - #[route("/blog/:id")] - Blog { id: i32 }, -} - fn main() { - // Init logger - dioxus_logger::init(Level::INFO).expect("failed to init logger"); + dioxus_logger::init(Level::INFO).expect("failed to initialize logger"); info!("starting app"); - launch(App); -} -fn App() -> Element { - rsx! { - Router::<Route> {} - } -} + let cfg = server_only!( + dioxus::fullstack::Config::new().addr(std::net::SocketAddr::from(([0, 0, 0, 0], 8000))) + ); -#[component] -fn Blog(id: i32) -> Element { - rsx! { - Link { to: Route::Home {}, "Go to counter" } - "Blog post {id}" - } -} - -#[component] -fn Home() -> Element { - let mut count = use_signal(|| 0); - - rsx! { - Link { - to: Route::Blog { - id: count() - }, - "Go to blog" - } - div { - h1 { "High-Five counter: {count}" } - button { onclick: move |_| count += 1, "Up high!" } - button { onclick: move |_| count -= 1, "Down low!" } - } - } + LaunchBuilder::fullstack().with_cfg(cfg).launch(App); } diff --git a/src/route/mod.rs b/src/route/mod.rs new file mode 100644 index 0000000..275f297 --- /dev/null +++ b/src/route/mod.rs @@ -0,0 +1,8 @@ +use crate::components::home::Home; +use dioxus::prelude::*; + +#[derive(Clone, Routable, Debug, PartialEq)] +pub(crate) enum Route { + #[route("/")] + Home {}, +} diff --git a/src/server/database_connection.rs b/src/server/database_connection.rs new file mode 100644 index 0000000..717e63e --- /dev/null +++ b/src/server/database_connection.rs @@ -0,0 +1,12 @@ +use diesel::pg::PgConnection; +use diesel::prelude::*; +use dotenvy::dotenv; +use std::env; + +pub(crate) fn establish_database_connection() -> PgConnection { + dotenv().ok(); + + let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); + PgConnection::establish(&database_url) + .unwrap_or_else(|_| panic!("error connecting to {}", database_url)) +} diff --git a/src/server/mod.rs b/src/server/mod.rs new file mode 100644 index 0000000..56bd601 --- /dev/null +++ b/src/server/mod.rs @@ -0,0 +1,2 @@ +mod database_connection; +pub(crate) mod projects; diff --git a/src/server/projects.rs b/src/server/projects.rs new file mode 100644 index 0000000..734e281 --- /dev/null +++ b/src/server/projects.rs @@ -0,0 +1,21 @@ +use crate::models::project::{NewProject, Project}; +use crate::server::database_connection::establish_database_connection; +use diesel::{RunQueryDsl, SelectableHelper}; +use dioxus::prelude::*; + +#[server] +pub(crate) async fn create_project(title: String) -> Result<Project, ServerFnError> { + use crate::schema::projects; + + let mut connection = establish_database_connection(); + + let new_project = NewProject { + title: title.as_str(), + }; + + Ok(diesel::insert_into(projects::table) + .values(&new_project) + .returning(Project::as_returning()) + .get_result(&mut connection) + .expect("error saving a new project")) +} From 46463dad75db6c873dae0a2dd7e9dbccdda63828 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 10:33:22 +0200 Subject: [PATCH 22/50] chore: update .idea --- .../1658668c-c2b8-426d-a22f-16fbad9eff0b.xml | 80 +++++++++++++++---- .../schema/public.abK9xQ.meta | 2 +- 2 files changed, 64 insertions(+), 18 deletions(-) diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml index aa0cfde..ecb9799 100644 --- a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml +++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml @@ -11,9 +11,9 @@ 4||10|c|G 4||10|C|G 4||10|T|G</Grants> - <IntrospectionStateNumber>745</IntrospectionStateNumber> + <IntrospectionStateNumber>767</IntrospectionStateNumber> <ServerVersion>16.4</ServerVersion> - <StartupTime>1723806748</StartupTime> + <StartupTime>1723847104</StartupTime> <TimeZones>true ACDT true ACSST false ACST @@ -1412,7 +1412,7 @@ true posixrules 13212||10|C|G 13212||-9223372036854775808|U|G 13212||10|U|G</Grants> - <IntrospectionStateNumber>745</IntrospectionStateNumber> + <IntrospectionStateNumber>767</IntrospectionStateNumber> <ObjectId>16384</ObjectId> <OwnerName>app</OwnerName> </database> @@ -4831,58 +4831,72 @@ true posixrules <schema id="264" parent="3" name="public"> <Comment>standard public schema</Comment> <Current>1</Current> - <IntrospectionStateNumber>745</IntrospectionStateNumber> - <LastIntrospectionLocalTimestamp>2024-08-16.11:25:02</LastIntrospectionLocalTimestamp> + <IntrospectionStateNumber>767</IntrospectionStateNumber> + <LastIntrospectionLocalTimestamp>2024-08-16.22:33:41</LastIntrospectionLocalTimestamp> <ObjectId>2200</ObjectId> <StateNumber>524</StateNumber> <OwnerName>pg_database_owner</OwnerName> </schema> <routine id="265" parent="264" name="diesel_manage_updated_at"> <ArgumentsDefinition>_tbl regclass</ArgumentsDefinition> - <ObjectId>16395</ObjectId> + <ObjectId>16422</ObjectId> <ResultsDefinition>void</ResultsDefinition> <Rows>0.0</Rows> <SourceTextLength>166</SourceTextLength> - <StateNumber>744</StateNumber> + <StateNumber>761</StateNumber> <LanguageName>plpgsql</LanguageName> <OwnerName>app</OwnerName> </routine> <routine id="266" parent="264" name="diesel_set_updated_at"> - <ObjectId>16396</ObjectId> + <ObjectId>16423</ObjectId> <PgRoutineKind>pg-trigger</PgRoutineKind> <ResultsDefinition>trigger</ResultsDefinition> <Rows>0.0</Rows> <SourceTextLength>201</SourceTextLength> - <StateNumber>744</StateNumber> + <StateNumber>761</StateNumber> <LanguageName>plpgsql</LanguageName> <OwnerName>app</OwnerName> </routine> - <table id="267" parent="264" name="__diesel_schema_migrations"> + <sequence id="267" parent="264" name="projects_id_seq"> + <ObjectId>16424</ObjectId> + <SequenceIdentity>1</SequenceIdentity> + <StartValue>1</StartValue> + <StateNumber>762</StateNumber> + <StoredType>integer|0s</StoredType> + <OwnerName>app</OwnerName> + </sequence> + <table id="268" parent="264" name="__diesel_schema_migrations"> <ObjectId>16389</ObjectId> <StateNumber>743</StateNumber> <AccessMethodId>2</AccessMethodId> <OwnerName>app</OwnerName> </table> - <argument id="268" parent="265"> + <table id="269" parent="264" name="projects"> + <ObjectId>16425</ObjectId> + <StateNumber>762</StateNumber> + <AccessMethodId>2</AccessMethodId> + <OwnerName>app</OwnerName> + </table> + <argument id="270" parent="265"> <ArgumentDirection>R</ArgumentDirection> <StoredType>void|0s</StoredType> </argument> - <argument id="269" parent="265" name="_tbl"> + <argument id="271" parent="265" name="_tbl"> <Position>1</Position> <StoredType>regclass|0s</StoredType> </argument> - <argument id="270" parent="266"> + <argument id="272" parent="266"> <ArgumentDirection>R</ArgumentDirection> <StoredType>trigger|0s</StoredType> </argument> - <column id="271" parent="267" name="version"> + <column id="273" parent="268" name="version"> <NotNull>1</NotNull> <Position>1</Position> <StateNumber>743</StateNumber> <StoredType>varchar(50)|0s</StoredType> <TypeId>1043</TypeId> </column> - <column id="272" parent="267" name="run_on"> + <column id="274" parent="268" name="run_on"> <DefaultExpression>CURRENT_TIMESTAMP</DefaultExpression> <NotNull>1</NotNull> <Position>2</Position> @@ -4890,7 +4904,7 @@ true posixrules <StoredType>timestamp|0s</StoredType> <TypeId>1114</TypeId> </column> - <index id="273" parent="267" name="__diesel_schema_migrations_pkey"> + <index id="275" parent="268" name="__diesel_schema_migrations_pkey"> <ColNames>version</ColNames> <NameSurrogate>1</NameSurrogate> <ObjectId>16393</ObjectId> @@ -4902,12 +4916,44 @@ true posixrules <CollationIds>100</CollationIds> <CollationParentNames>pg_catalog</CollationParentNames> </index> - <key id="274" parent="267" name="__diesel_schema_migrations_pkey"> + <key id="276" parent="268" name="__diesel_schema_migrations_pkey"> <NameSurrogate>1</NameSurrogate> <ObjectId>16394</ObjectId> <Primary>1</Primary> <StateNumber>743</StateNumber> <UnderlyingIndexId>16393</UnderlyingIndexId> </key> + <column id="277" parent="269" name="id"> + <DefaultExpression>nextval('projects_id_seq'::regclass)</DefaultExpression> + <NotNull>1</NotNull> + <Position>1</Position> + <StateNumber>762</StateNumber> + <StoredType>integer|0s</StoredType> + <SequenceId>16424</SequenceId> + <TypeId>23</TypeId> + </column> + <column id="278" parent="269" name="title"> + <NotNull>1</NotNull> + <Position>2</Position> + <StateNumber>762</StateNumber> + <StoredType>text|0s</StoredType> + <TypeId>25</TypeId> + </column> + <index id="279" parent="269" name="projects_pkey"> + <ColNames>id</ColNames> + <NameSurrogate>1</NameSurrogate> + <ObjectId>16431</ObjectId> + <Primary>1</Primary> + <StateNumber>762</StateNumber> + <Unique>1</Unique> + <AccessMethodId>403</AccessMethodId> + </index> + <key id="280" parent="269" name="projects_pkey"> + <NameSurrogate>1</NameSurrogate> + <ObjectId>16432</ObjectId> + <Primary>1</Primary> + <StateNumber>762</StateNumber> + <UnderlyingIndexId>16431</UnderlyingIndexId> + </key> </database-model> </dataSource> \ No newline at end of file diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta index f79bdf4..c523994 100644 --- a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta +++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta @@ -1,2 +1,2 @@ #n:public -!<md> [745, 0, null, null, -2147483648, -2147483648] +!<md> [767, 0, null, null, -2147483648, -2147483648] From 71666f45be909a8dc4eee8413a12f9e1a3f2f28f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 10:58:56 +0200 Subject: [PATCH 23/50] style: disable stylelint for the Tailwind at rules --- src/styles/tailwind.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/styles/tailwind.css b/src/styles/tailwind.css index 23e8f29..6080f5f 100644 --- a/src/styles/tailwind.css +++ b/src/styles/tailwind.css @@ -1,6 +1,9 @@ +/* stylelint-disable-next-line at-rule-no-unknown */ /*noinspection CssInvalidAtRule*/ @tailwind base; +/* stylelint-disable-next-line at-rule-no-unknown */ /*noinspection CssInvalidAtRule*/ @tailwind components; +/* stylelint-disable-next-line at-rule-no-unknown */ /*noinspection CssInvalidAtRule*/ @tailwind utilities; From 6f3312ac2fd2928269bbce13ecbe6b74011d60d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 10:59:43 +0200 Subject: [PATCH 24/50] refactor: rename the project form component --- src/components/home.rs | 4 ++-- src/components/mod.rs | 2 +- src/components/{form_project.rs => project_form.rs} | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename src/components/{form_project.rs => project_form.rs} (89%) diff --git a/src/components/home.rs b/src/components/home.rs index a6eee7e..2a4b74f 100644 --- a/src/components/home.rs +++ b/src/components/home.rs @@ -1,4 +1,4 @@ -use crate::components::form_project::FormProject; +use crate::components::project_form::ProjectForm; use crate::server::projects::create_project; use dioxus::core_macro::rsx; use dioxus::dioxus_core::Element; @@ -7,7 +7,7 @@ use dioxus::prelude::*; #[component] pub(crate) fn Home() -> Element { rsx! { - FormProject { + ProjectForm { onsubmit: move |title| { spawn(async move { let _ = create_project(title).await; diff --git a/src/components/mod.rs b/src/components/mod.rs index a05a8fc..cced83e 100644 --- a/src/components/mod.rs +++ b/src/components/mod.rs @@ -1,3 +1,3 @@ pub(crate) mod app; -pub(crate) mod form_project; pub(crate) mod home; +pub(crate) mod project_form; diff --git a/src/components/form_project.rs b/src/components/project_form.rs similarity index 89% rename from src/components/form_project.rs rename to src/components/project_form.rs index 0cb256f..628d756 100644 --- a/src/components/form_project.rs +++ b/src/components/project_form.rs @@ -3,7 +3,7 @@ use dioxus::dioxus_core::Element; use dioxus::prelude::*; #[component] -pub(crate) fn FormProject(onsubmit: EventHandler<String>) -> Element { +pub(crate) fn ProjectForm(onsubmit: EventHandler<String>) -> Element { rsx! { form { onsubmit: move |event| { From 39a25d7d7bbf2eacc053518a7b03605cf8e2e074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 11:40:39 +0200 Subject: [PATCH 25/50] build: optimize the development Dockerfile --- docker/dev/app/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile index 209098d..5e0d5c1 100644 --- a/docker/dev/app/Dockerfile +++ b/docker/dev/app/Dockerfile @@ -1,8 +1,8 @@ FROM rust:1.80-bookworm -RUN rustup target add wasm32-unknown-unknown -RUN cargo install dioxus-cli diesel_cli -RUN apt-get update && apt-get install -y nodejs npm supervisor +RUN rustup target add wasm32-unknown-unknown && \ + cargo install dioxus-cli diesel_cli && \ + apt-get update && apt-get install -y nodejs npm supervisor COPY . /srv/app WORKDIR /srv/app From 8a9c27826620b98339a82406b9d855ef0b03e761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 11:41:07 +0200 Subject: [PATCH 26/50] build: add a healthcheck to the development Dockerfile --- docker/dev/app/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile index 5e0d5c1..bb8325a 100644 --- a/docker/dev/app/Dockerfile +++ b/docker/dev/app/Dockerfile @@ -11,4 +11,5 @@ RUN npm install COPY docker/dev/app/supervisord.conf /etc/supervisor/conf.d/supervisord.conf +HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1 CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] From 5165d15d96719add8eac1d8caafb79f2697a2e06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 11:41:20 +0200 Subject: [PATCH 27/50] build: specify the user in the development Dockerfile --- docker/dev/app/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile index bb8325a..799f19e 100644 --- a/docker/dev/app/Dockerfile +++ b/docker/dev/app/Dockerfile @@ -12,4 +12,5 @@ RUN npm install COPY docker/dev/app/supervisord.conf /etc/supervisor/conf.d/supervisord.conf HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1 +USER root CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] From 4ef503b04645f5e81a841b56650101ed4cd39b03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 11:42:42 +0200 Subject: [PATCH 28/50] chore: remove an unused asset --- assets/header.svg | 171 ---------------------------------------------- 1 file changed, 171 deletions(-) delete mode 100644 assets/header.svg diff --git a/assets/header.svg b/assets/header.svg deleted file mode 100644 index 3581419..0000000 --- a/assets/header.svg +++ /dev/null @@ -1,171 +0,0 @@ -<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1007 197"> - <style> - @keyframes a0_t { 0% { transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); } 35% { - transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); animation-timing-function: - cubic-bezier(.6,0,.4,1); } 45% { transform: translate(225px,339.9px) scale(1,1) translate(-89.5px,-24px); } 50% - { transform: translate(225px,339.9px) scale(1,1) translate(-89.5px,-24px); animation-timing-function: - cubic-bezier(.6,0,.4,1); } 60% { transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); } 100% - { transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); } } - @keyframes a1_t { 0% { transform: translate(225px,348.9px) scale(0,1) translate(-41.5px,-11px); } 20% { - transform: translate(225px,348.9px) scale(0,1) translate(-41.5px,-11px); animation-timing-function: - cubic-bezier(.6,0,.4,1); } 30% { transform: translate(225px,348.9px) scale(1,1) translate(-41.5px,-11px); } 35% - { transform: translate(225px,348.9px) scale(1,1) translate(-41.5px,-11px); } 45% { transform: - translate(225px,348.9px) scale(0,1) translate(-41.5px,-11px); } 100% { transform: translate(225px,348.9px) - scale(0,1) translate(-41.5px,-11px); } } - @keyframes a3_t { 0% { transform: translate(225px,198.9px) rotate(-90deg); } 10% { transform: - translate(225px,198.9px) rotate(-90deg); } 20% { transform: translate(225px,198.9px) rotate(-90deg); - animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { transform: translate(225px,198.9px) rotate(0deg); } - 35% { transform: translate(225px,198.9px) rotate(0deg); } 45% { transform: translate(225px,198.9px) - rotate(0deg); } 50% { transform: translate(225px,198.9px) rotate(0deg); animation-timing-function: - cubic-bezier(.6,0,.4,1); } 60% { transform: translate(225px,198.9px) rotate(-90deg); } 65% { transform: - translate(225px,198.9px) rotate(-90deg); } 75% { transform: translate(225px,198.9px) rotate(-90deg); } 100% { - transform: translate(225px,198.9px) rotate(-90deg); } } - @keyframes a2_t { 0% { transform: translate(-200px,-167px); animation-timing-function: cubic-bezier(.6,0,.4,1); - } 10% { transform: translate(-150px,-80px); } 20% { transform: translate(-150px,-80px); - animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { transform: translate(-200px,-123px); } 35% { - transform: translate(-200px,-123px); animation-timing-function: cubic-bezier(.6,0,.4,1); } 45% { transform: - translate(-150px,-100px); } 50% { transform: translate(-150px,-100px); animation-timing-function: - cubic-bezier(.6,0,.4,1); } 60% { transform: translate(-150px,-80px); } 65% { transform: translate(-150px,-80px); - animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { transform: translate(-217px,-200px); } 100% { - transform: translate(-217px,-200px); } } - @keyframes a2_o { 0% { opacity: 0; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { opacity: 1; } 65% - { opacity: 1; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { opacity: 0; } 100% { opacity: 0; } } - @keyframes a2_sw { 0% { stroke-width: 30px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { - stroke-width: 8px; } 65% { stroke-width: 8px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { - stroke-width: 30px; } 100% { stroke-width: 30px; } } - @keyframes a2_w { 0% { width: 400px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { width: 300px; } - 20% { width: 300px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { width: 400px; } 35% { width: - 400px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 45% { width: 300px; } 50% { width: 300px; } 60% { - width: 300px; } 65% { width: 300px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { width: 434px; } - 100% { width: 434px; } } - @keyframes a2_h { 0% { height: 334px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { height: 160px; - } 20% { height: 160px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { height: 246px; } 35% { - height: 246px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 45% { height: 200px; } 50% { height: 200px; - animation-timing-function: cubic-bezier(.6,0,.4,1); } 60% { height: 160px; } 65% { height: 160px; - animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { height: 400px; } 100% { height: 400px; } } - @keyframes a4_t { 0% { transform: translate(143.5px,48.9px); } 10% { transform: translate(180.5px,98.9px); } - 100% { transform: translate(180.5px,98.9px); } } - @keyframes a4_w { 0% { width: 168.5px; } 10% { width: 94.5px; } 100% { width: 94.5px; } } - @keyframes a4_h { 0% { height: 302px; } 10% { height: 202px; } 100% { height: 202px; } } - @keyframes a5_t { 0% { transform: translate(217px,324.9px); animation-timing-function: cubic-bezier(.6,0,.4,1); - } 10% { transform: translate(190px,324.9px); } 20% { transform: translate(190px,324.9px); } 30% { transform: - translate(190px,324.9px); } 100% { transform: translate(190px,324.9px); } } - @keyframes a5_o { 0% { opacity: 0; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { opacity: 1; } 20% - { opacity: 1; } 30% { opacity: 0; } 100% { opacity: 0; } } - @keyframes a5_w { 0% { width: 16px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { width: 70px; } - 20% { width: 70px; } 30% { width: 70px; } 100% { width: 70px; } } - @keyframes a6_t { 0% { transform: translate(217px,324.9px); } 50% { transform: translate(217px,324.9px); - animation-timing-function: cubic-bezier(.6,0,.4,1); } 60% { transform: translate(190px,324.9px); } 65% { - transform: translate(190px,324.9px); } 75% { transform: translate(190px,324.9px); } 100% { transform: - translate(190px,324.9px); } } - @keyframes a6_o { 0% { opacity: 0; } 50% { opacity: 0; animation-timing-function: cubic-bezier(.6,0,.4,1); } 60% - { opacity: 1; } 65% { opacity: 1; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { opacity: 0; } 100% - { opacity: 0; } } - @keyframes a6_w { 0% { width: 16px; } 50% { width: 16px; animation-timing-function: cubic-bezier(.6,0,.4,1); } - 60% { width: 70px; } 65% { width: 70px; } 75% { width: 70px; } 100% { width: 70px; } } - @keyframes a7_t { 0% { transform: translate(225px,198.9px) scale(1.5,1.5) translate(-42.3px,-93px); - animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { transform: translate(225px,198.9px) scale(1,1) - translate(-42.3px,-93px); } 20% { transform: translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); - animation-timing-function: cubic-bezier(.6,0,.4,1); } 25% { transform: translate(225px,198.9px) scale(.8,.8) - translate(-42.3px,-93px); animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { transform: - translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); } 35% { transform: translate(225px,198.9px) - scale(1,1) translate(-42.3px,-93px); animation-timing-function: cubic-bezier(.4,0,.6,1); } 45% { transform: - translate(225px,198.9px) scale(.8,.8) translate(-42.3px,-93px); } 50% { transform: translate(225px,198.9px) - scale(.8,.8) translate(-42.3px,-93px); animation-timing-function: cubic-bezier(.4,0,.6,1); } 55% { transform: - translate(225px,198.9px) scale(.7,.7) translate(-42.3px,-93px); animation-timing-function: - cubic-bezier(.4,0,.6,1); } 60% { transform: translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); } 65% - { transform: translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); animation-timing-function: - cubic-bezier(.4,0,.6,1); } 75% { transform: translate(225px,198.9px) scale(1.5,1.5) translate(-42.3px,-93px); } - 100% { transform: translate(225px,198.9px) scale(1.5,1.5) translate(-42.3px,-93px); } } - </style> - <defs> - <symbol id="Symbol-2" preserveAspectRatio="none" width="111.5" height="186" viewBox="0 0 111.5 186" - overflow="visible"> - <g transform="translate(8.5,4.5)"> - <rect x="4" width="85" height="8" fill="#d9d9d9"/> - <rect x="4" y="26" width="85" height="8" fill="#d9d9d9"/> - <rect x="25" y="56" width="43" height="8" fill="#d9d9d9"/> - <rect width="85" height="8" fill="#d9d9d9" - transform="translate(46.5,175) rotate(180) scale(-1,1) translate(-42.5,-4)"/> - <rect width="85" height="8" fill="#d9d9d9" - transform="translate(46.5,149) rotate(180) scale(-1,1) translate(-42.5,-4)"/> - <rect width="43" height="8" fill="#d9d9d9" - transform="translate(46.5,119) rotate(180) scale(-1,1) translate(-21.5,-4)"/> - <path d="M0 4c0 53 94.5 115 94.5 169" stroke="#3cc4dc" stroke-width="17" stroke-linecap="square" - fill="none"/> - <path d="M94.5 4c0 53-94.5 115-94.5 169" stroke="#fb422d" stroke-width="17" stroke-linecap="square" - fill="none"/> - </g> - </symbol> - <symbol id="Symbol-5" preserveAspectRatio="none" width="84.5" height="186" viewBox="0 0 84.5 186" - overflow="visible"> - <g transform="translate(42.3,93) scale(5.352,6.9) translate(-16,60)"> - <g transform="translate(-34.9,-125.8)"> - <g transform="translate(24,5)"> - <path d="M33 46.5c0 3.1-0.8 5.5-2.2 7.4c-1.4 1.9-3.3 3.6-5.4 5.4c-2.2 1.7-4.5 3.6-6.3 6.2c-1.8 2.5-3.1 5.5-3.1 9.5h4.7c0-3.1 .9-5.4 2.2-7.3c1.4-1.9 3.3-3.5 5.5-5.3c2.1-1.8 4.4-3.7 6.2-6.2c1.8-2.6 3.1-5.6 3.1-9.7Z" - fill="#e96020"/> - <path d="M20.4 70.7c-0.6 0-1 .5-1 1.1c0 .7 .4 1.2 1 1.2h12.9c.7 0 1.2-0.5 1.2-1.2c0-0.6-0.5-1.1-1.2-1.1Z" - fill="#2d323b"/> - <path d="M21.8 66.6c-0.7 0-1 .6-1 1.2c0 .6 .3 1 .9 1h10.3c.6 0 1.1-0.5 1.1-1.1c0-0.6-0.5-1.1-1.1-1.1Z" - fill="#2d323b"/> - <path d="M21.8 53c-0.7 0-1.2 .5-1.1 1.1c0 .6 .4 1.1 1.1 1.1h10.2c.6 0 .9-0.6 .9-1.2c0-0.6-0.3-1-0.9-1Z" - fill="#2d323b"/> - <path d="M20.4 48.8c-0.6 0-1.2 .5-1.2 1.1c0 .7 .6 1.2 1.2 1.2h12.9c.7 0 1-0.5 1-1.1c0-0.7-0.3-1.2-1-1.2Z" - fill="#2d323b"/> - <path d="M16 46.5c0 4.1 1.3 7.1 3.1 9.7c1.8 2.5 4.1 4.4 6.3 6.2c2.1 1.8 4 3.6 5.4 5.5c1.4 1.9 2.2 4 2.2 7.1h4.7c0-4-1.3-7.1-3.1-9.6c-1.8-2.5-4.1-4.4-6.2-6.2c-2.2-1.8-4.1-3.4-5.5-5.3c-1.3-1.9-2.2-4.3-2.2-7.4Z" - fill="#00a8d6"/> - </g> - </g> - </g> - </symbol> - </defs> - <rect width="1007" height="197" stroke="#0f1116" fill="#0f1116" stroke-width="0"/> - <path fill="#fff" - d="M83.3 106.1v-65.7h17c4.2 0 7.9 .8 11 2.4c3.1 1.6 5.5 3.9 7.2 6.9c1.7 2.9 2.6 6.4 2.6 10.4v26.2c0 4-0.9 7.5-2.6 10.5c-1.7 3-4.1 5.3-7.2 6.9c-3.1 1.6-6.8 2.4-11 2.4Zm8.1-7.2h8.9c4 0 7.1-1.1 9.3-3.3c2.3-2.3 3.4-5.3 3.4-9.3v-26.2c0-3.9-1.1-7-3.4-9.2c-2.2-2.2-5.3-3.3-9.3-3.3h-8.9Zm45.3 7.2v-7.4h17.5v-34.7h-15.7v-7.4h23.8v42.1h16.7v7.4Zm20.7-58.4c-2 0-3.6-0.5-4.7-1.5c-1.2-1.1-1.7-2.4-1.7-4.2c0-1.8 .5-3.2 1.7-4.3c1.1-1 2.7-1.5 4.7-1.5c1.9 0 3.5 .5 4.6 1.5c1.2 1.1 1.7 2.5 1.7 4.3c0 1.8-0.5 3.1-1.7 4.2c-1.1 1-2.7 1.5-4.6 1.5Zm52.6 59.1c-6 0-10.7-1.7-14.2-5.1c-3.4-3.4-5.1-8-5.1-13.8v-13.1c0-5.9 1.7-10.5 5.1-13.9c3.5-3.3 8.2-5 14.2-5c6 0 10.7 1.7 14.2 5c3.4 3.4 5.2 8 5.2 13.8v13.2c0 5.8-1.8 10.4-5.2 13.8c-3.5 3.4-8.2 5.1-14.2 5.1Zm0-7.2c3.5 0 6.3-1 8.3-3c2-1.9 3-4.8 3-8.7v-13.1c0-3.9-1-6.8-3-8.8c-2-1.9-4.8-2.9-8.3-2.9c-3.5 0-6.2 1-8.2 2.9c-2 2-3 4.9-3 8.8v13.1c0 3.9 1 6.8 3 8.7c2 2 4.7 3 8.2 3Zm31.5 6.5l17.6-25.5l-16.5-24h9.5l9.8 15.3c.5 .7 .9 1.4 1.2 2.2c.4 .7 .8 1.4 1 1.8c.2-0.4 .5-1.1 .8-1.8c.4-0.8 .8-1.5 1.3-2.2l9.9-15.3h9.4l-16.5 24.1l17.5 25.4h-9.5l-10.7-16.2c-0.4-0.7-0.8-1.4-1.2-2.3c-0.4-0.9-0.7-1.6-1-2.1c-0.2 .5-0.6 1.2-1 2.1c-0.5 .9-1 1.6-1.4 2.3l-10.7 16.2Zm76.4 .9c-5.7 0-10.2-1.7-13.7-5.1c-3.4-3.4-5.1-8-5.1-13.8v-31.5h8.1v31.5c0 3.7 1 6.6 2.9 8.7c1.9 2.1 4.5 3.1 7.8 3.1c3.4 0 6-1 8-3.1c1.9-2.1 2.9-5 2.9-8.7v-31.5h8.1v31.5c0 5.8-1.7 10.4-5.2 13.8c-3.5 3.4-8.1 5.1-13.8 5.1Zm52.6-0.2c-5.1 0-9.3-1.2-12.5-3.5c-3.3-2.3-4.9-5.5-4.9-9.6h8.3c0 1.8 .9 3.3 2.6 4.3c1.8 1.1 4 1.6 6.6 1.6h3.8c3.2 0 5.6-0.6 7.1-1.9c1.6-1.3 2.4-3 2.4-5.2c0-2.1-0.8-3.8-2.2-5c-1.5-1.2-3.6-2-6.4-2.5l-6.6-1c-5-0.9-8.6-2.4-10.9-4.7c-2.4-2.3-3.5-5.5-3.5-9.5c0-4.5 1.4-7.9 4.3-10.3c2.9-2.4 7.1-3.6 12.6-3.6h3.4c5 0 9.1 1.1 12.1 3.4c3 2.2 4.6 5.2 4.6 8.9h-8.3c0-1.6-0.8-2.8-2.3-3.7c-1.5-1-3.6-1.4-6.3-1.4h-3.4c-2.8 0-5 .6-6.5 1.7c-1.5 1.2-2.3 2.9-2.3 5c0 3.6 2.5 5.8 7.6 6.7l6.7 1.1c5.3 .8 9.2 2.4 11.7 4.6c2.4 2.3 3.6 5.6 3.6 9.9c0 4.6-1.5 8.2-4.4 10.8c-2.9 2.6-7.3 3.9-13.2 3.9Z"/> - <path fill="#fff" - d="M91 164c-2 0-3.6-0.6-4.7-1.7c-1.1-1.1-1.6-2.7-1.6-4.6v-15.9h2.7v15.9c0 1.2 .3 2.2 .9 2.8c.6 .7 1.5 1.1 2.7 1.1c1.2 0 2.1-0.4 2.7-1.1c.6-0.7 .9-1.6 .9-2.8v-15.9h2.7v15.9c0 2-0.5 3.5-1.6 4.6c-1.1 1.1-2.6 1.7-4.7 1.7Zm17.5-0.1c-1.7 0-3.1-0.3-4.2-1.1c-1.1-0.8-1.6-1.9-1.6-3.2h2.8c0 .6 .3 1.1 .8 1.4c.6 .4 1.4 .5 2.2 .5h1.3c1.1 0 1.9-0.2 2.4-0.6c.5-0.4 .8-1 .8-1.7c0-0.7-0.3-1.3-0.8-1.7c-0.5-0.4-1.2-0.7-2.1-0.8l-2.2-0.4c-1.7-0.3-2.9-0.8-3.6-1.5c-0.8-0.8-1.2-1.9-1.2-3.2c0-1.5 .5-2.6 1.4-3.4c1-0.8 2.4-1.2 4.2-1.2h1.2c1.6 0 3 .3 4 1.1c1 .7 1.5 1.7 1.5 3h-2.7c0-0.6-0.3-1-0.8-1.3c-0.5-0.3-1.2-0.4-2.1-0.4h-1.1c-1 0-1.7 .2-2.2 .5c-0.5 .4-0.8 1-0.8 1.7c0 1.2 .9 1.9 2.6 2.2l2.2 .4c1.8 .3 3.1 .8 3.9 1.5c.8 .8 1.2 1.9 1.2 3.3c0 1.6-0.5 2.8-1.5 3.6c-0.9 .9-2.4 1.3-4.4 1.3Zm18.5 .1c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.8-2-0.8-3.3v-4.5c0-1.3 .3-2.4 .8-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .8 2 .8 3.3l-0.1 2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1-2.8-1c-1.2 0-2.2 .3-2.8 1c-0.7 .7-1 1.7-1 3Zm16.1 9.6v-16.5h2.7v3.2c.1-1.1 .6-2 1.4-2.6c.7-0.6 1.7-0.9 3-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm35.8 0v-2.5h4.5v-16.9h-4.5v-2.5h11.8l-0.1 2.5h-4.4v16.9h4.4v2.5Zm17.7 0v-16.5h2.7v3.2c.1-1.1 .6-2 1.3-2.6c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 3 .5 3.9 1.5c1 1.1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.6-1.5-1-2.6-1c-1.1 0-2 .4-2.7 1.1c-0.6 .6-0.9 1.6-0.9 2.9v10.5Zm26 0c-1.4 0-2.4-0.4-3.3-1.2c-0.8-0.8-1.2-1.8-1.2-3.1v-9.7h-4.7v-2.5h4.7v-4.7h2.7v4.7h6.6v2.5h-6.6v9.7c0 .5 .2 1 .5 1.3c.3 .4 .8 .5 1.3 .5h4.5v2.5Zm16.2 .3c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.7-2-0.7-3.3v-4.5c0-1.3 .2-2.4 .7-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .8 2 .8 3.3l-0.1 2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1-2.8-1c-1.2 0-2.2 .3-2.8 1c-0.7 .7-1 1.7-1 3Zm16.1 9.6v-16.5h2.7v3.2c.1-1.1 .6-2 1.4-2.6c.7-0.6 1.7-0.9 3-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm21.3 0v-12.4h-4.8v-2.4h4.8v-2.9c0-1.3 .4-2.3 1.2-3.1c.9-0.7 2-1.1 3.4-1.1h4.9v2.5h-4.9c-1.3 0-1.9 .5-1.9 1.7v2.9h6.8v2.4h-6.8v12.4Zm19 .3c-1.8 0-3.1-0.4-4.1-1.3c-1-0.9-1.5-2.1-1.5-3.6c0-1.6 .5-2.8 1.5-3.7c1-0.9 2.3-1.3 4-1.3h5.1v-1.6c0-1-0.3-1.8-0.9-2.4c-0.6-0.5-1.5-0.8-2.5-0.8c-1 0-1.8 .2-2.5 .6c-0.6 .4-1 1-1.2 1.7h-2.7c.1-1 .4-1.8 1-2.5c.6-0.7 1.3-1.2 2.2-1.6c1-0.4 2-0.6 3.2-0.6c1.9 0 3.4 .5 4.5 1.5c1.1 1 1.6 2.3 1.6 4v11.3h-2.6v-3.1h-0.1c-0.1 1-0.6 1.9-1.5 2.5c-0.9 .6-2.1 .9-3.5 .9Zm.6-2.1c1.3 0 2.4-0.3 3.2-1c.8-0.6 1.2-1.4 1.2-2.4v-2.4h-5c-0.9 0-1.6 .3-2.2 .8c-0.5 .5-0.7 1.1-0.7 2c0 .9 .3 1.6 .9 2.2c.6 .5 1.5 .8 2.6 .8Zm18.9 2.1c-2 0-3.6-0.6-4.8-1.7c-1.2-1.1-1.7-2.6-1.7-4.6v-4.5c0-2 .5-3.5 1.7-4.6c1.2-1.1 2.8-1.7 4.8-1.7c1.9 0 3.5 .5 4.6 1.5c1.2 1 1.8 2.4 1.8 4.2h-2.7c0-1.1-0.4-1.9-1-2.4c-0.7-0.6-1.6-0.9-2.7-0.9c-1.2 0-2.1 .3-2.8 1c-0.7 .7-1.1 1.6-1.1 2.9l.1 4.5c-0.1 1.2 .3 2.2 1 2.9c.7 .7 1.6 1 2.8 1c1.1 0 2-0.3 2.7-0.9c.6-0.6 1-1.4 1-2.4h2.7c0 1.8-0.6 3.2-1.8 4.2c-1.1 1-2.7 1.5-4.6 1.5Zm17.9 0c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.7-2-0.7-3.3v-4.5c0-1.3 .2-2.4 .7-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .8 2 .8 3.3v2.9h-10.3v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1.1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1-2.8-1c-1.2 0-2.2 .3-2.8 1c-0.7 .7-1 1.7-1 3Zm21.3 9.8c-1.7 0-3.1-0.3-4.2-1.1c-1.1-0.8-1.6-1.9-1.6-3.2h2.8c0 .6 .3 1.1 .8 1.4c.6 .4 1.4 .5 2.3 .5h1.2c1.1 0 1.9-0.2 2.4-0.6c.5-0.4 .8-1 .8-1.7c0-0.7-0.3-1.3-0.8-1.7c-0.5-0.4-1.2-0.7-2.1-0.8l-2.2-0.4c-1.6-0.3-2.9-0.8-3.6-1.5c-0.8-0.8-1.2-1.9-1.2-3.2c0-1.5 .5-2.6 1.4-3.4c1-0.8 2.4-1.2 4.2-1.2h1.2c1.7 0 3 .3 4 1.1c1 .7 1.5 1.7 1.5 3h-2.7c0-0.6-0.3-1-0.8-1.3c-0.5-0.3-1.2-0.4-2.1-0.4h-1.1c-1 0-1.7 .2-2.2 .5c-0.5 .4-0.8 1-0.8 1.7c0 1.2 .9 1.9 2.6 2.2l2.2 .4c1.8 .3 3.1 .8 3.9 1.5c.8 .8 1.2 1.9 1.2 3.3c0 1.6-0.5 2.8-1.5 3.6c-0.9 .9-2.4 1.3-4.3 1.3Zm38.3-0.2c-1.4 0-2.4-0.4-3.3-1.2c-0.8-0.8-1.2-1.8-1.2-3.2v-9.6h-4.6v-2.5h4.6v-4.7h2.7v4.7h6.6v2.5h-6.6v9.6c0 .6 .2 1.1 .5 1.4c.3 .4 .8 .5 1.3 .5h4.5v2.5Zm10 0v-21.9h2.7v8.6c.1-1.2 .6-2 1.3-2.6c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 3 .5 3.9 1.5c1 1.1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.7-1.5-1-2.6-1c-1.1 0-2 .3-2.7 1c-0.6 .7-0.9 1.7-0.9 3v10.5Zm22.8 .3c-1.8 0-3.1-0.4-4.1-1.3c-1-0.9-1.5-2.1-1.5-3.7c0-1.5 .5-2.7 1.5-3.6c1-0.9 2.3-1.3 4-1.3h5.1v-1.7c0-1-0.3-1.7-0.9-2.3c-0.6-0.6-1.5-0.8-2.5-0.8c-1 0-1.8 .2-2.5 .6c-0.6 .4-1 1-1.2 1.7h-2.7c.1-1 .4-1.8 1-2.5c.6-0.7 1.3-1.2 2.2-1.6c1-0.4 2-0.6 3.2-0.6c1.9 0 3.4 .5 4.5 1.5c1.1 1 1.6 2.3 1.6 4v11.3h-2.6v-3.2h-0.1c-0.1 1.1-0.6 1.9-1.5 2.6c-0.9 .6-2.1 .9-3.5 .9Zm.6-2.1c1.3 0 2.4-0.4 3.2-1c.8-0.6 1.2-1.5 1.2-2.5v-2.3h-5c-0.9 0-1.6 .3-2.2 .8c-0.5 .5-0.7 1.1-0.7 2c0 .9 .3 1.6 .9 2.2c.6 .5 1.5 .8 2.6 .8Zm20.6 1.8c-1.4 0-2.4-0.4-3.3-1.2c-0.8-0.8-1.2-1.8-1.2-3.2v-9.6h-4.6v-2.5h4.6v-4.7h2.7v4.7h6.6v2.5h-6.6v9.6c0 .6 .2 1.1 .5 1.4c.3 .4 .8 .5 1.3 .5h4.5v2.5Zm28.5 0v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.4-2.5c.7-0.6 1.7-0.9 3-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm23.7 .3c-1.9 0-3.4-0.6-4.6-1.7c-1.1-1.1-1.7-2.7-1.7-4.6v-10.5h2.7v10.5c0 1.2 .3 2.2 1 2.9c.6 .7 1.5 1 2.6 1c1.1 0 2-0.3 2.6-1c.7-0.7 1-1.7 1-2.9v-10.5h2.7v10.5c0 1.9-0.6 3.5-1.7 4.6c-1.2 1.1-2.7 1.7-4.6 1.7Zm11.8-0.3v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 2.9 .5 3.9 1.5c1 1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.6-1.5-1-2.6-1c-1.1 0-2 .4-2.7 1.1c-0.6 .6-0.9 1.6-0.9 2.9v10.5Zm40.8 .3c-1.8 0-3.2-0.4-4.2-1.3c-1-0.9-1.5-2.1-1.5-3.7c0-1.5 .5-2.7 1.5-3.6c1-0.9 2.4-1.3 4.1-1.3h5.1v-1.7c0-1-0.3-1.7-0.9-2.3c-0.6-0.6-1.5-0.8-2.6-0.8c-0.9 0-1.7 .2-2.4 .6c-0.6 .4-1.1 1-1.2 1.6h-2.7c.1-0.9 .4-1.7 1-2.4c.6-0.7 1.3-1.2 2.2-1.6c1-0.4 2-0.6 3.1-0.6c1.9 0 3.4 .5 4.5 1.5c1.1 .9 1.7 2.3 1.7 4v11.3h-2.6v-3.2h-0.1c-0.1 1.1-0.6 1.9-1.5 2.6c-0.9 .6-2.1 .9-3.5 .9Zm.6-2.1c1.3 0 2.3-0.4 3.2-1c.8-0.6 1.2-1.5 1.2-2.5v-2.3h-5c-0.9 0-1.7 .3-2.2 .8c-0.5 .5-0.8 1.1-0.8 2c0 .9 .4 1.6 1 2.2c.6 .5 1.5 .8 2.6 .8Zm12.6 1.8v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 2.9 .5 3.9 1.5c1 1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.6-1.5-1-2.6-1c-1.1 0-2 .4-2.7 1.1c-0.6 .6-0.9 1.6-0.9 2.9v10.5Zm20.6 5.4l2.4-6.4l-6.3-15.5h2.9l4.1 10.2c.1 .3 .2 .7 .4 1.2c.1 .5 .2 .9 .3 1.2c.1-0.3 .2-0.7 .3-1.2c.1-0.5 .3-0.9 .4-1.2l3.8-10.2h2.8l-8.3 21.9Zm16.3-5.4l-2.7-16.5h2.4l1.6 11.7c.1 .4 .2 .9 .2 1.4c.1 .5 .1 1 .1 1.3h.2c0-0.3 0-0.8 .1-1.3c.1-0.5 .1-1 .2-1.4l1.8-11.7h2.7l1.9 11.7c.1 .4 .1 .9 .2 1.4c.1 .5 .1 1 .1 1.3h.2c0-0.3 .1-0.8 .1-1.3c.1-0.5 .2-1 .2-1.4l1.7-11.7h2.2l-2.7 16.5h-3l-1.8-11.4c0-0.6-0.1-1.1-0.2-1.7c-0.1-0.5-0.1-1-0.2-1.3h-0.1c0 .3-0.1 .8-0.1 1.3c-0.1 .6-0.2 1.1-0.3 1.7l-1.8 11.4Zm17.1 0v-21.9h2.7v8.5c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 2.9 .5 3.9 1.5c1 1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.7-1.5-1-2.6-1c-1.1 0-2 .3-2.7 1c-0.6 .7-0.9 1.7-0.9 3v10.5Zm24.2 .3c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.8-2-0.8-3.3v-4.5c0-1.3 .3-2.4 .8-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .7 2 .7 3.3v2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1.1-2.8-1.1c-1.2 0-2.2 .4-2.8 1.1c-0.7 .7-1 1.7-1 3Zm16.1 9.6v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm23.7 .3c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.8-2-0.8-3.3v-4.5c0-1.3 .3-2.4 .8-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .7 2 .7 3.3v2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1.1-2.8-1.1c-1.2 0-2.2 .4-2.8 1.1c-0.7 .7-1 1.7-1 3Z"/> - <g transform="translate(764,-14.5) scale(.431111,.440249) translate(-13.9,56.6)"> - <path fill="#e0e0e0" stroke="#e0e0e0" stroke-linejoin="round" - d="M-50.7 4h278.2c10 0 9 0 9 0l41 40c0 0 1 0-9 0h-358c-9.9 0-9 0-9 0l38.8-40c0 0-0.9 0 9 0Z" - stroke-width="10" transform="translate(225,339.9) scale(0,1) translate(-89.5,-24)" - style="animation: 10s linear infinite both a0_t;"/> - <rect width="83" height="22" stroke="#fb422d" fill="#e0e0e0" rx="2" stroke-width="0" - transform="translate(225,348.9) scale(0,1) translate(-41.5,-11)" - style="animation: 10s linear infinite both a1_t;"/> - <g style="animation: 10s linear infinite both a3_t;"> - <rect width="400" height="334" stroke="#e0e0e0" fill="none" stroke-width="30" stroke-miterlimit="1" rx="10" - opacity="0" transform="translate(225,198.9) rotate(-90) translate(-200,-167)" - style="animation: 10s linear infinite both a2_t, 10s linear infinite both a2_o, 10s linear infinite both a2_sw, 10s linear infinite both a2_w, 10s linear infinite both a2_h;"/> - </g> - <use width="168.5" height="302" xlink:href="#Symbol-2" opacity="0" - transform="translate(227.8,199.9) translate(-84.2,-151)" - style="animation: 10s linear infinite both a4_t, 10s linear infinite both a4_w, 10s linear infinite both a4_h;"/> - <rect width="16" height="8" stroke="#fb422d" fill="#e0e0e0" stroke-width="0" rx="2" opacity="0" - transform="translate(225,328.9) translate(-8,-4)" - style="animation: 10s linear infinite both a5_t, 10s linear infinite both a5_o, 10s linear infinite both a5_w;"/> - <rect width="16" height="8" stroke="#fb422d" fill="#e0e0e0" stroke-width="0" rx="2" opacity="0" - transform="translate(225,328.9) translate(-8,-4)" - style="animation: 10s linear infinite both a6_t, 10s linear infinite both a6_o, 10s linear infinite both a6_w;"/> - <g transform="translate(225,198.9) scale(1.5,1.5) translate(-42.3,-93)" - style="animation: 10s linear infinite both a7_t;"> - <g transform="translate(42.3,93) scale(5.352,6.9) translate(-16,60)"> - <g transform="translate(-34.9,-125.8)"> - <g transform="translate(24,5)"> - <path d="M33 46.5c0 3.1-0.8 5.5-2.2 7.4c-1.4 1.9-3.3 3.6-5.4 5.4c-2.2 1.7-4.5 3.6-6.3 6.2c-1.8 2.5-3.1 5.5-3.1 9.5h4.7c0-3.1 .9-5.4 2.2-7.3c1.4-1.9 3.3-3.5 5.5-5.3c2.1-1.8 4.4-3.7 6.2-6.2c1.8-2.6 3.1-5.6 3.1-9.7Z" - fill="#e96020"/> - <path d="M20.4 70.7c-0.6 0-1 .5-1 1.1c0 .7 .4 1.2 1 1.2h12.9c.7 0 1.2-0.5 1.2-1.2c0-0.6-0.5-1.1-1.2-1.1Z" - fill="#2d323b"/> - <path d="M21.8 66.6c-0.7 0-1 .6-1 1.2c0 .6 .3 1 .9 1h10.3c.6 0 1.1-0.5 1.1-1.1c0-0.6-0.5-1.1-1.1-1.1Z" - fill="#2d323b"/> - <path d="M21.8 53c-0.7 0-1.2 .5-1.1 1.1c0 .6 .4 1.1 1.1 1.1h10.2c.6 0 .9-0.6 .9-1.2c0-0.6-0.3-1-0.9-1Z" - fill="#2d323b"/> - <path d="M20.4 48.8c-0.6 0-1.2 .5-1.2 1.1c0 .7 .6 1.2 1.2 1.2h12.9c.7 0 1-0.5 1-1.1c0-0.7-0.3-1.2-1-1.2Z" - fill="#2d323b"/> - <path d="M16 46.5c0 4.1 1.3 7.1 3.1 9.7c1.8 2.5 4.1 4.4 6.3 6.2c2.1 1.8 4 3.6 5.4 5.5c1.4 1.9 2.2 4 2.2 7.1h4.7c0-4-1.3-7.1-3.1-9.6c-1.8-2.5-4.1-4.4-6.2-6.2c-2.2-1.8-4.1-3.4-5.5-5.3c-1.3-1.9-2.2-4.3-2.2-7.4Z" - fill="#00a8d6"/> - </g> - </g> - </g> - </g> - </g> -</svg> \ No newline at end of file From 65416b3a8f5ddd0acb797dcc246891d8a373c5a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 11:42:48 +0200 Subject: [PATCH 29/50] chore: update .idea --- .idea/jsLibraryMappings.xml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .idea/jsLibraryMappings.xml diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 0000000..d23208f --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="JavaScriptLibraryMappings"> + <includedPredefinedLibrary name="Node.js Core" /> + </component> +</project> \ No newline at end of file From 1e2a6db4d96d310dde30bd984f9dc910bdbb5a62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 11:43:22 +0200 Subject: [PATCH 30/50] refactor: make the project model fields accessible by getters --- src/models/project.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/models/project.rs b/src/models/project.rs index 8bed447..c312217 100644 --- a/src/models/project.rs +++ b/src/models/project.rs @@ -6,8 +6,18 @@ use serde::{Deserialize, Serialize}; #[diesel(table_name = crate::schema::projects)] #[diesel(check_for_backend(diesel::pg::Pg))] pub struct Project { - pub(crate) id: i32, - pub(crate) title: String, + id: i32, + title: String, +} + +impl Project { + pub fn id(&self) -> i32 { + self.id + } + + pub fn title(&self) -> &str { + &self.title + } } #[derive(Insertable, Serialize, Deserialize)] From 7c97a6b7a0675b6f1408ec3f38a9d7b4532f5dfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 12:06:40 +0200 Subject: [PATCH 31/50] build: pin the dependencies versions in the development Dockerfile --- docker/dev/app/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile index 799f19e..838d6e0 100644 --- a/docker/dev/app/Dockerfile +++ b/docker/dev/app/Dockerfile @@ -2,7 +2,7 @@ FROM rust:1.80-bookworm RUN rustup target add wasm32-unknown-unknown && \ cargo install dioxus-cli diesel_cli && \ - apt-get update && apt-get install -y nodejs npm supervisor + apt-get update && apt-get install -y nodejs=18.19.0+dfsg-6~deb12u2 npm=9.2.0~ds1-1 supervisor=4.2.5-1 COPY . /srv/app WORKDIR /srv/app From 8206370f8f8b32edfbf90dc9e460d432b2c1a800 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 12:42:31 +0200 Subject: [PATCH 32/50] chore: update .idea --- .idea/vcs.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 7ddfc9e..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,11 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> - <component name="CommitMessageInspectionProfile"> - <profile version="1.0"> - <inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" /> - <inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" /> - </profile> - </component> <component name="VcsDirectoryMappings"> <mapping directory="" vcs="Git" /> </component> From 97d21fc4425525fbd0167f6105caf140d93e0299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 12:45:02 +0200 Subject: [PATCH 33/50] chore: update .idea --- .idea/vcs.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1dd..7ddfc9e 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,5 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> + <component name="CommitMessageInspectionProfile"> + <profile version="1.0"> + <inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" /> + <inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" /> + </profile> + </component> <component name="VcsDirectoryMappings"> <mapping directory="" vcs="Git" /> </component> From 3980189ae201b29ce33ec87346f2948b3f92e6a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 21:33:01 +0200 Subject: [PATCH 34/50] build: specify the user in the development Dockerfile --- docker-compose-dev.yml | 21 ++++++++++----------- docker/dev/app/Dockerfile | 9 ++++++++- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 43b704f..c515a25 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -3,17 +3,16 @@ services: build: dockerfile: docker/dev/app/Dockerfile volumes: - - .:/srv/app - - .env.dev:/srv/app/.env - - /srv/app/.git/ - - /srv/app/.dioxus/ - - /srv/app/dist/ - - /srv/app/debug/ - - /srv/app/node_modules/ - - /srv/app/static/ - - /srv/app/target/ - - /dev/null:/srv/app/docker-compose-dev.yml - - /dev/null:/srv/app/docker-compose-prod.yml + - ./assets:/srv/app/assets + - ./src:/srv/app/src + - ./migrations:/srv/app/migrations + - ./Cargo.lock:/srv/app/Cargo.lock + - ./Cargo.toml:/srv/app/Cargo.toml + - ./diesel.toml:/srv/app/diesel.toml + - ./Dioxus.toml:/srv/app/Dioxus.toml + - ./package.json:/srv/app/package.json + - ./package-lock.json:/srv/app/package-lock.json + - ./tailwind.config.js:/srv/app/tailwind.config.js restart: always ports: [ "8000:8000" ] depends_on: [ "db" ] diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile index 838d6e0..ef23140 100644 --- a/docker/dev/app/Dockerfile +++ b/docker/dev/app/Dockerfile @@ -11,6 +11,13 @@ RUN npm install COPY docker/dev/app/supervisord.conf /etc/supervisor/conf.d/supervisord.conf +RUN chown -R 1000:1000 /srv/app +RUN chown -R 1000:1000 /usr/local/cargo +RUN mkdir -p /.local/share/dioxus +RUN chown -R 1000:1000 /.local/share/dioxus + HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1 -USER root + +USER 1000:1000 + CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] From 9b742f87cc29e4867b43db19d4e9b8f5e96ac847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 21:41:43 +0200 Subject: [PATCH 35/50] style: disable stylelint for the Tailwind at rules --- src/styles/tailwind.css | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/styles/tailwind.css b/src/styles/tailwind.css index 6080f5f..24a8f96 100644 --- a/src/styles/tailwind.css +++ b/src/styles/tailwind.css @@ -1,9 +1,8 @@ -/* stylelint-disable-next-line at-rule-no-unknown */ -/*noinspection CssInvalidAtRule*/ +/* stylelint-disable */ +/* noinspection CssInvalidAtRule */ @tailwind base; -/* stylelint-disable-next-line at-rule-no-unknown */ -/*noinspection CssInvalidAtRule*/ +/* noinspection CssInvalidAtRule */ @tailwind components; -/* stylelint-disable-next-line at-rule-no-unknown */ -/*noinspection CssInvalidAtRule*/ +/* noinspection CssInvalidAtRule */ @tailwind utilities; +/* stylelint-enable */ From a78f6bac9456bbf989e284d42f014d698766cdb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sat, 17 Aug 2024 23:07:34 +0200 Subject: [PATCH 36/50] build: optimize the development Dockerfile --- docker/dev/app/Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile index ef23140..213053b 100644 --- a/docker/dev/app/Dockerfile +++ b/docker/dev/app/Dockerfile @@ -11,10 +11,10 @@ RUN npm install COPY docker/dev/app/supervisord.conf /etc/supervisor/conf.d/supervisord.conf -RUN chown -R 1000:1000 /srv/app -RUN chown -R 1000:1000 /usr/local/cargo -RUN mkdir -p /.local/share/dioxus -RUN chown -R 1000:1000 /.local/share/dioxus +RUN chown -R 1000:1000 /srv/app && \ + chown -R 1000:1000 /usr/local/cargo && \ + mkdir -p /.local/share/dioxus && \ + chown -R 1000:1000 /.local/share/dioxus HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1 From 38be8af169195fc8668174808fd1ce48c567c076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 19:09:40 +0200 Subject: [PATCH 37/50] refactor: make the serverside error handling more robust --- Cargo.lock | 157 ++++++++++++++++++++++++----- Cargo.toml | 1 + src/components/home.rs | 2 +- src/components/project_form.rs | 5 +- src/errors/error.rs | 29 ++++++ src/errors/error_vec.rs | 43 ++++++++ src/errors/mod.rs | 3 + src/errors/project_create_error.rs | 50 +++++++++ src/main.rs | 1 + src/models/project.rs | 21 +++- src/server/database_connection.rs | 6 +- src/server/projects.rs | 26 +++-- 12 files changed, 301 insertions(+), 43 deletions(-) create mode 100644 src/errors/error.rs create mode 100644 src/errors/error_vec.rs create mode 100644 src/errors/mod.rs create mode 100644 src/errors/project_create_error.rs diff --git a/Cargo.lock b/Cargo.lock index 282fb31..53679ab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,6 +29,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + [[package]] name = "allocator-api2" version = "0.2.18" @@ -94,7 +103,7 @@ checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -178,7 +187,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -469,7 +478,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.74", ] [[package]] @@ -480,7 +489,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -525,7 +534,7 @@ dependencies = [ "dsl_auto_type", "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -534,7 +543,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" dependencies = [ - "syn", + "syn 2.0.74", ] [[package]] @@ -620,7 +629,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -730,7 +739,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -833,7 +842,7 @@ dependencies = [ "proc-macro2", "quote", "slab", - "syn", + "syn 2.0.74", ] [[package]] @@ -847,7 +856,7 @@ dependencies = [ "krates", "proc-macro2", "quote", - "syn", + "syn 2.0.74", "tracing", ] @@ -923,7 +932,7 @@ dependencies = [ "proc-macro2", "quote", "server_fn_macro", - "syn", + "syn 2.0.74", ] [[package]] @@ -943,7 +952,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -979,7 +988,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -1112,7 +1121,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -1872,7 +1881,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -1923,7 +1932,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.74", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", ] [[package]] @@ -1983,6 +2016,35 @@ dependencies = [ "bitflags", ] +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -2078,7 +2140,7 @@ checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -2122,7 +2184,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -2181,7 +2243,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn", + "syn 2.0.74", "xxhash-rust", ] @@ -2192,7 +2254,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "556e4fd51eb9ee3e7d9fb0febec6cef486dcbc8f7f427591dfcfebee1abe1ad4" dependencies = [ "server_fn_macro", - "syn", + "syn 2.0.74", ] [[package]] @@ -2256,7 +2318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edc90d3e8623d29a664cd8dba5078b600dd203444f00b9739f744e4c6e7aeaf2" dependencies = [ "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -2317,6 +2379,16 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.74" @@ -2357,7 +2429,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -2400,6 +2472,7 @@ dependencies = [ "dioxus-logger", "dotenvy", "serde", + "validator", ] [[package]] @@ -2428,7 +2501,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -2543,7 +2616,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] [[package]] @@ -2692,6 +2765,36 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "validator" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db79c75af171630a3148bd3e6d7c4f42b6a9a014c2945bc5ed0020cbb8d9478e" +dependencies = [ + "idna", + "once_cell", + "regex", + "serde", + "serde_derive", + "serde_json", + "url", + "validator_derive", +] + +[[package]] +name = "validator_derive" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55591299b7007f551ed1eb79a684af7672c19c3193fb9e0a31936987bb2438ec" +dependencies = [ + "darling", + "once_cell", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.74", +] + [[package]] name = "valuable" version = "0.1.0" @@ -2738,7 +2841,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.74", "wasm-bindgen-shared", ] @@ -2772,7 +2875,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.74", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2934,5 +3037,5 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.74", ] diff --git a/Cargo.toml b/Cargo.toml index 825ac02..9eabee1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ dioxus = { version = "0.5", features = ["fullstack", "router"] } dioxus-logger = "0.5.1" dotenvy = "0.15.7" serde = "1.0.208" +validator = { version = "0.18.1", features = ["derive"] } [features] default = [] diff --git a/src/components/home.rs b/src/components/home.rs index 2a4b74f..c2d3ab9 100644 --- a/src/components/home.rs +++ b/src/components/home.rs @@ -10,7 +10,7 @@ pub(crate) fn Home() -> Element { ProjectForm { onsubmit: move |title| { spawn(async move { - let _ = create_project(title).await; + create_project(title).await; }); } } diff --git a/src/components/project_form.rs b/src/components/project_form.rs index 628d756..53e30ec 100644 --- a/src/components/project_form.rs +++ b/src/components/project_form.rs @@ -1,13 +1,14 @@ +use crate::models::project::NewProject; use dioxus::core_macro::{component, rsx}; use dioxus::dioxus_core::Element; use dioxus::prelude::*; #[component] -pub(crate) fn ProjectForm(onsubmit: EventHandler<String>) -> Element { +pub(crate) fn ProjectForm(onsubmit: EventHandler<NewProject>) -> Element { rsx! { form { onsubmit: move |event| { - onsubmit(event.values().get("title").unwrap().as_value()); + onsubmit(NewProject::new(event.values().get("title").unwrap().as_value())); }, input { r#type: "text", diff --git a/src/errors/error.rs b/src/errors/error.rs new file mode 100644 index 0000000..dc235c5 --- /dev/null +++ b/src/errors/error.rs @@ -0,0 +1,29 @@ +use serde::{Deserialize, Serialize}; +use std::fmt::Display; +use std::str::FromStr; + +#[derive(Serialize, Deserialize, Debug)] +pub enum Error { + ServerInternal, +} + +// has to be implemented for Dioxus server functions +impl Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Error::ServerInternal => write!(f, "internal server error"), + } + } +} + +// has to be implemented for Dioxus server functions +impl FromStr for Error { + type Err = (); + + fn from_str(s: &str) -> Result<Self, Self::Err> { + Ok(match s { + "internal server error" => Error::ServerInternal, + _ => return Err(()), + }) + } +} diff --git a/src/errors/error_vec.rs b/src/errors/error_vec.rs new file mode 100644 index 0000000..557b338 --- /dev/null +++ b/src/errors/error_vec.rs @@ -0,0 +1,43 @@ +use std::fmt::Display; +use std::str::FromStr; + +#[derive(Debug)] +pub struct ErrorVec<T> { + errors: Vec<T>, +} + +impl<T> From<ErrorVec<T>> for Vec<T> { + fn from(e: ErrorVec<T>) -> Self { + e.errors + } +} + +impl<T> From<Vec<T>> for ErrorVec<T> { + fn from(e: Vec<T>) -> Self { + ErrorVec { errors: e } + } +} + +// has to be implemented for Dioxus server functions +impl<T: Display> Display for ErrorVec<T> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + self.errors + .iter() + .map(|e| e.to_string()) + .collect::<Vec<String>>() + .join("\n") + ) + } +} + +// has to be implemented for Dioxus server functions +impl<T> FromStr for ErrorVec<T> { + type Err = (); + + fn from_str(s: &str) -> Result<Self, Self::Err> { + Ok(ErrorVec { errors: Vec::new() }) + } +} diff --git a/src/errors/mod.rs b/src/errors/mod.rs new file mode 100644 index 0000000..625611e --- /dev/null +++ b/src/errors/mod.rs @@ -0,0 +1,3 @@ +pub(crate) mod error; +pub(crate) mod error_vec; +pub(crate) mod project_create_error; diff --git a/src/errors/project_create_error.rs b/src/errors/project_create_error.rs new file mode 100644 index 0000000..99ec5ae --- /dev/null +++ b/src/errors/project_create_error.rs @@ -0,0 +1,50 @@ +use crate::errors::error::Error; +use crate::errors::error_vec::ErrorVec; +use serde::{Deserialize, Serialize}; +use std::fmt::Display; +use std::str::FromStr; +use validator::{ValidationErrors, ValidationErrorsKind}; + +#[derive(Serialize, Deserialize, Debug)] +pub enum ProjectCreateError { + TitleTooShort, + Error(Error), +} + +impl From<ValidationErrors> for ErrorVec<ProjectCreateError> { + fn from(e: ValidationErrors) -> Self { + e.errors() + .iter() + .flat_map(|(&field, error_kind)| match field { + "title_length" => match error_kind { + ValidationErrorsKind::Field(validation_errors) => validation_errors + .iter() + .map(|validation_error| match validation_error.code.as_ref() { + "length" => ProjectCreateError::TitleTooShort, + _ => ProjectCreateError::Error(Error::ServerInternal), + }) + .collect::<Vec<ProjectCreateError>>(), + _ => panic!("unexpected error kind"), + }, + _ => panic!("unexpected field name"), + }) + .collect::<Vec<ProjectCreateError>>() + .into() + } +} + +// has to be implemented for Dioxus server functions +impl Display for ProjectCreateError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", dbg!(self)) + } +} + +// has to be implemented for Dioxus server functions +impl FromStr for ProjectCreateError { + type Err = (); + + fn from_str(s: &str) -> Result<Self, Self::Err> { + Ok(ProjectCreateError::Error(Error::ServerInternal)) + } +} diff --git a/src/main.rs b/src/main.rs index ff7692a..95dffb9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ #![allow(non_snake_case)] mod components; +mod errors; mod models; mod route; mod schema; diff --git a/src/models/project.rs b/src/models/project.rs index c312217..d2a58b8 100644 --- a/src/models/project.rs +++ b/src/models/project.rs @@ -1,6 +1,10 @@ use crate::schema::projects; use diesel::prelude::*; use serde::{Deserialize, Serialize}; +use validator::Validate; + +const TITLE_LENGTH_MIN: u64 = 1; +const TITLE_LENGTH_MAX: u64 = 255; #[derive(Queryable, Selectable, Serialize, Deserialize)] #[diesel(table_name = crate::schema::projects)] @@ -20,8 +24,19 @@ impl Project { } } -#[derive(Insertable, Serialize, Deserialize)] +#[derive(Insertable, Serialize, Deserialize, Validate, Clone, Debug)] #[diesel(table_name = projects)] -pub struct NewProject<'a> { - pub title: &'a str, +pub struct NewProject { + #[validate(length( + min = "TITLE_LENGTH_MIN", + max = "TITLE_LENGTH_MAX", + code = "title_length" + ))] + pub title: String, +} + +impl NewProject { + pub fn new(title: String) -> Self { + Self { title } + } } diff --git a/src/server/database_connection.rs b/src/server/database_connection.rs index 717e63e..826f7c8 100644 --- a/src/server/database_connection.rs +++ b/src/server/database_connection.rs @@ -3,10 +3,10 @@ use diesel::prelude::*; use dotenvy::dotenv; use std::env; -pub(crate) fn establish_database_connection() -> PgConnection { +pub(crate) fn establish_database_connection() -> ConnectionResult<PgConnection> { dotenv().ok(); - let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); + let database_url = + env::var("DATABASE_URL").expect("The environment variable DATABASE_URL must be set."); PgConnection::establish(&database_url) - .unwrap_or_else(|_| panic!("error connecting to {}", database_url)) } diff --git a/src/server/projects.rs b/src/server/projects.rs index 734e281..85bfb1a 100644 --- a/src/server/projects.rs +++ b/src/server/projects.rs @@ -1,21 +1,33 @@ +use crate::errors::error::Error; +use crate::errors::error_vec::ErrorVec; +use crate::errors::project_create_error::ProjectCreateError; use crate::models::project::{NewProject, Project}; use crate::server::database_connection::establish_database_connection; use diesel::{RunQueryDsl, SelectableHelper}; use dioxus::prelude::*; +use validator::Validate; #[server] -pub(crate) async fn create_project(title: String) -> Result<Project, ServerFnError> { +pub(crate) async fn create_project( + new_project: NewProject, +) -> Result<Project, ServerFnError<ErrorVec<ProjectCreateError>>> { use crate::schema::projects; - let mut connection = establish_database_connection(); + new_project + .validate() + .map_err::<ErrorVec<ProjectCreateError>, _>(|errors| errors.into())?; - let new_project = NewProject { - title: title.as_str(), - }; + let mut connection = + establish_database_connection().or::<ErrorVec<ProjectCreateError>>(Err(vec![ + ProjectCreateError::Error(Error::ServerInternal), + ] + .into()))?; - Ok(diesel::insert_into(projects::table) + let new_project = diesel::insert_into(projects::table) .values(&new_project) .returning(Project::as_returning()) .get_result(&mut connection) - .expect("error saving a new project")) + .expect("error saving a new project"); + + Ok(new_project) } From 1656177e66a4f22fe81a89dd059a784527bebc64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 21:16:50 +0200 Subject: [PATCH 38/50] fix: add .env to the Docker development container --- docker-compose-dev.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index c515a25..2dbcb85 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -3,6 +3,7 @@ services: build: dockerfile: docker/dev/app/Dockerfile volumes: + - ./.env.dev:/srv/app/.env - ./assets:/srv/app/assets - ./src:/srv/app/src - ./migrations:/srv/app/migrations From c537fb4e031f2201768806a25672effdb0ae96b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 21:17:31 +0200 Subject: [PATCH 39/50] refactor: make the project form component handle the server calls itself --- src/components/home.rs | 10 ++-------- src/components/project_form.rs | 10 ++++++++-- src/errors/project_create_error.rs | 21 +++++++++++---------- src/models/project.rs | 2 +- src/server/projects.rs | 5 +++++ 5 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/components/home.rs b/src/components/home.rs index c2d3ab9..4cfbd34 100644 --- a/src/components/home.rs +++ b/src/components/home.rs @@ -1,5 +1,5 @@ use crate::components::project_form::ProjectForm; -use crate::server::projects::create_project; +use crate::server::projects::{create_project, testing}; use dioxus::core_macro::rsx; use dioxus::dioxus_core::Element; use dioxus::prelude::*; @@ -7,12 +7,6 @@ use dioxus::prelude::*; #[component] pub(crate) fn Home() -> Element { rsx! { - ProjectForm { - onsubmit: move |title| { - spawn(async move { - create_project(title).await; - }); - } - } + ProjectForm {} } } diff --git a/src/components/project_form.rs b/src/components/project_form.rs index 53e30ec..036e0d7 100644 --- a/src/components/project_form.rs +++ b/src/components/project_form.rs @@ -1,14 +1,20 @@ use crate::models::project::NewProject; +use crate::server::projects::create_project; use dioxus::core_macro::{component, rsx}; use dioxus::dioxus_core::Element; use dioxus::prelude::*; #[component] -pub(crate) fn ProjectForm(onsubmit: EventHandler<NewProject>) -> Element { +pub(crate) fn ProjectForm() -> Element { rsx! { form { onsubmit: move |event| { - onsubmit(NewProject::new(event.values().get("title").unwrap().as_value())); + async move { + let new_project = NewProject::new( + event.values().get("title").unwrap().as_value() + ); + let _ = create_project(new_project).await; + } }, input { r#type: "text", diff --git a/src/errors/project_create_error.rs b/src/errors/project_create_error.rs index 99ec5ae..d8fad8d 100644 --- a/src/errors/project_create_error.rs +++ b/src/errors/project_create_error.rs @@ -7,7 +7,7 @@ use validator::{ValidationErrors, ValidationErrorsKind}; #[derive(Serialize, Deserialize, Debug)] pub enum ProjectCreateError { - TitleTooShort, + TitleLengthInvalid, Error(Error), } @@ -16,17 +16,18 @@ impl From<ValidationErrors> for ErrorVec<ProjectCreateError> { e.errors() .iter() .flat_map(|(&field, error_kind)| match field { - "title_length" => match error_kind { + "title" => match error_kind { ValidationErrorsKind::Field(validation_errors) => validation_errors .iter() - .map(|validation_error| match validation_error.code.as_ref() { - "length" => ProjectCreateError::TitleTooShort, - _ => ProjectCreateError::Error(Error::ServerInternal), + .map(|validation_error| validation_error.code.as_ref()) + .map(|code| match code { + "title_length" => ProjectCreateError::TitleLengthInvalid, + _ => panic!("unexpected validation error code: {code}"), }) .collect::<Vec<ProjectCreateError>>(), - _ => panic!("unexpected error kind"), + _ => panic!("unexpected validation error kind"), }, - _ => panic!("unexpected field name"), + _ => panic!("unexpected validation field name: {field}"), }) .collect::<Vec<ProjectCreateError>>() .into() @@ -36,7 +37,7 @@ impl From<ValidationErrors> for ErrorVec<ProjectCreateError> { // has to be implemented for Dioxus server functions impl Display for ProjectCreateError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", dbg!(self)) + write!(f, "{:?}", self) } } @@ -44,7 +45,7 @@ impl Display for ProjectCreateError { impl FromStr for ProjectCreateError { type Err = (); - fn from_str(s: &str) -> Result<Self, Self::Err> { - Ok(ProjectCreateError::Error(Error::ServerInternal)) + fn from_str(_: &str) -> Result<Self, Self::Err> { + Ok(ProjectCreateError::TitleLengthInvalid) } } diff --git a/src/models/project.rs b/src/models/project.rs index d2a58b8..2a02eed 100644 --- a/src/models/project.rs +++ b/src/models/project.rs @@ -6,7 +6,7 @@ use validator::Validate; const TITLE_LENGTH_MIN: u64 = 1; const TITLE_LENGTH_MAX: u64 = 255; -#[derive(Queryable, Selectable, Serialize, Deserialize)] +#[derive(Queryable, Selectable, Serialize, Deserialize, Debug)] #[diesel(table_name = crate::schema::projects)] #[diesel(check_for_backend(diesel::pg::Pg))] pub struct Project { diff --git a/src/server/projects.rs b/src/server/projects.rs index 85bfb1a..4b2181e 100644 --- a/src/server/projects.rs +++ b/src/server/projects.rs @@ -7,6 +7,11 @@ use diesel::{RunQueryDsl, SelectableHelper}; use dioxus::prelude::*; use validator::Validate; +#[server] +pub(crate) async fn testing(input: i32) -> Result<i32, ServerFnError> { + Ok(input + 1) +} + #[server] pub(crate) async fn create_project( new_project: NewProject, From f05295324699f5ab6f63c751259fa1dd107b7cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 22:03:49 +0200 Subject: [PATCH 40/50] style: macro formatting --- src/models/project.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/models/project.rs b/src/models/project.rs index 2a02eed..5d545e9 100644 --- a/src/models/project.rs +++ b/src/models/project.rs @@ -27,11 +27,7 @@ impl Project { #[derive(Insertable, Serialize, Deserialize, Validate, Clone, Debug)] #[diesel(table_name = projects)] pub struct NewProject { - #[validate(length( - min = "TITLE_LENGTH_MIN", - max = "TITLE_LENGTH_MAX", - code = "title_length" - ))] + #[validate(length(min = "TITLE_LENGTH_MIN", max = "TITLE_LENGTH_MAX", code = "title_length"))] pub title: String, } From 85bcbad41c4b98b53a5a6c2f6051ec810eac540f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 22:04:23 +0200 Subject: [PATCH 41/50] refactor: improve error mapping --- src/server/projects.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/server/projects.rs b/src/server/projects.rs index 4b2181e..cbfab09 100644 --- a/src/server/projects.rs +++ b/src/server/projects.rs @@ -22,17 +22,18 @@ pub(crate) async fn create_project( .validate() .map_err::<ErrorVec<ProjectCreateError>, _>(|errors| errors.into())?; - let mut connection = - establish_database_connection().or::<ErrorVec<ProjectCreateError>>(Err(vec![ - ProjectCreateError::Error(Error::ServerInternal), - ] - .into()))?; + let mut connection = establish_database_connection() + .map_err::<ErrorVec<ProjectCreateError>, _>( + |_| vec![ProjectCreateError::Error(Error::ServerInternal), ].into() + )?; let new_project = diesel::insert_into(projects::table) .values(&new_project) .returning(Project::as_returning()) .get_result(&mut connection) - .expect("error saving a new project"); + .map_err::<ErrorVec<ProjectCreateError>, _>( + |_| vec![ProjectCreateError::Error(Error::ServerInternal), ].into() + )?; Ok(new_project) } From f10d509bc6d7bf17cdbf669040c7237d58f349c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 22:04:43 +0200 Subject: [PATCH 42/50] chore: update .idea --- .idea/rust.xml | 6 ------ .idea/vcs.xml | 4 ++-- 2 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 .idea/rust.xml diff --git a/.idea/rust.xml b/.idea/rust.xml deleted file mode 100644 index 7bc91ea..0000000 --- a/.idea/rust.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="RsVcsConfiguration"> - <option name="rustFmt" value="true" /> - </component> -</project> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 7ddfc9e..6335f8e 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,8 +2,8 @@ <project version="4"> <component name="CommitMessageInspectionProfile"> <profile version="1.0"> - <inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" /> - <inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" /> + <inspection_tool class="CommitFormat" enabled="true" level="ERROR" enabled_by_default="true" /> + <inspection_tool class="CommitNamingConvention" enabled="true" level="ERROR" enabled_by_default="true" /> </profile> </component> <component name="VcsDirectoryMappings"> From 6c95d363612055bb873bd71a4fde475799cf61e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 22:24:15 +0200 Subject: [PATCH 43/50] chore: remove a testing function --- src/server/projects.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/server/projects.rs b/src/server/projects.rs index cbfab09..6d459d2 100644 --- a/src/server/projects.rs +++ b/src/server/projects.rs @@ -7,11 +7,6 @@ use diesel::{RunQueryDsl, SelectableHelper}; use dioxus::prelude::*; use validator::Validate; -#[server] -pub(crate) async fn testing(input: i32) -> Result<i32, ServerFnError> { - Ok(input + 1) -} - #[server] pub(crate) async fn create_project( new_project: NewProject, From afef3d5f8432868b2bf9ad1c04441fb31b8f012a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 22:26:13 +0200 Subject: [PATCH 44/50] build: move the Tailwind config to the source directory --- package.json | 2 +- tailwind.config.js => src/styles/tailwind.config.js | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename tailwind.config.js => src/styles/tailwind.config.js (100%) diff --git a/package.json b/package.json index 1efcb98..5777291 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "tailwindcss": "^3.4.6" }, "scripts": { - "build": "tailwindcss -i src/styles/tailwind.css -o assets/styles/tailwind_output.css", + "build": "tailwindcss -c src/styles/tailwind.config.js -i src/styles/tailwind.css -o assets/styles/tailwind_output.css", "watch": "npm run build -- --watch" } } diff --git a/tailwind.config.js b/src/styles/tailwind.config.js similarity index 100% rename from tailwind.config.js rename to src/styles/tailwind.config.js From 81da7e58d853692801582921205afa8e9a4715ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 22:34:12 +0200 Subject: [PATCH 45/50] fix: remove an unused import --- src/components/home.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/home.rs b/src/components/home.rs index 4cfbd34..12b1ddc 100644 --- a/src/components/home.rs +++ b/src/components/home.rs @@ -1,5 +1,4 @@ use crate::components::project_form::ProjectForm; -use crate::server::projects::{create_project, testing}; use dioxus::core_macro::rsx; use dioxus::dioxus_core::Element; use dioxus::prelude::*; From c8f62bbe98d01b5fba5a5ea34e8854af9d5503d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 22:36:08 +0200 Subject: [PATCH 46/50] style: remove the attribute allowing non-snake-case names --- src/main.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 95dffb9..b7109a5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,3 @@ -#![allow(non_snake_case)] - mod components; mod errors; mod models; From b82b472206d3a73d466b8f55b21ef463b73177e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 22:51:12 +0200 Subject: [PATCH 47/50] build: run pending Diesel migrations on the Docker development container start --- docker-compose-dev.yml | 1 - docker/dev/app/Dockerfile | 2 +- docker/dev/app/entrypoint.sh | 3 +++ 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 docker/dev/app/entrypoint.sh diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 2dbcb85..ebd81f3 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -13,7 +13,6 @@ services: - ./Dioxus.toml:/srv/app/Dioxus.toml - ./package.json:/srv/app/package.json - ./package-lock.json:/srv/app/package-lock.json - - ./tailwind.config.js:/srv/app/tailwind.config.js restart: always ports: [ "8000:8000" ] depends_on: [ "db" ] diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile index 213053b..076aec8 100644 --- a/docker/dev/app/Dockerfile +++ b/docker/dev/app/Dockerfile @@ -20,4 +20,4 @@ HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1 USER 1000:1000 -CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] +CMD sh docker/dev/app/entrypoint.sh diff --git a/docker/dev/app/entrypoint.sh b/docker/dev/app/entrypoint.sh new file mode 100644 index 0000000..aab04f4 --- /dev/null +++ b/docker/dev/app/entrypoint.sh @@ -0,0 +1,3 @@ +diesel migration run + +supervisord -c /etc/supervisor/conf.d/supervisord.conf From 5ca35cc5f1ee67abedd8c26c713d804bfe1f4a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 23:03:51 +0200 Subject: [PATCH 48/50] build: add a shebang to the development Docker container entrypoint script --- docker/dev/app/entrypoint.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/dev/app/entrypoint.sh b/docker/dev/app/entrypoint.sh index aab04f4..3da5abe 100644 --- a/docker/dev/app/entrypoint.sh +++ b/docker/dev/app/entrypoint.sh @@ -1,3 +1,5 @@ +#!/bin/bash + diesel migration run supervisord -c /etc/supervisor/conf.d/supervisord.conf From fa4476bbedce66eb72235528a4647faf9c39b40f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 23:08:23 +0200 Subject: [PATCH 49/50] style: use the correct notation for Dockerfile CMD --- docker/dev/app/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile index 076aec8..92e8e0e 100644 --- a/docker/dev/app/Dockerfile +++ b/docker/dev/app/Dockerfile @@ -20,4 +20,4 @@ HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1 USER 1000:1000 -CMD sh docker/dev/app/entrypoint.sh +CMD ["sh", "docker/dev/app/entrypoint.sh"] From 3a6da62502d6c473012607996790954643916a5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= <66163112+matous-volf@users.noreply.github.com> Date: Sun, 18 Aug 2024 23:28:24 +0200 Subject: [PATCH 50/50] build: make the development Docker container entrypoint script executable --- docker/dev/app/entrypoint.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 docker/dev/app/entrypoint.sh diff --git a/docker/dev/app/entrypoint.sh b/docker/dev/app/entrypoint.sh old mode 100644 new mode 100755