From 761d2b426835f716d7966feffddd46838c166009 Mon Sep 17 00:00:00 2001 From: Adam <24621027+adoyle0@users.noreply.github.com> Date: Sun, 19 May 2024 21:05:46 -0400 Subject: [PATCH] rm rust --- doordesk/.gitignore | 13 - doordesk/Cargo.lock | 3039 ----------------- doordesk/Cargo.toml | 110 - doordesk/LICENSE | 21 - doordesk/README.md | 87 - doordesk/app/Cargo.toml | 34 - doordesk/app/src/components.rs | 2 - doordesk/app/src/components/article.rs | 23 - doordesk/app/src/components/slingshot.rs | 54 - doordesk/app/src/error_template.rs | 56 - doordesk/app/src/lib.rs | 62 - doordesk/app/src/routes.rs | 3 - doordesk/app/src/routes/blog.rs | 7 - doordesk/app/src/routes/home.rs | 30 - doordesk/app/src/routes/projects.rs | 7 - doordesk/end2end/package-lock.json | 74 - doordesk/end2end/package.json | 13 - doordesk/end2end/playwright.config.ts | 107 - doordesk/end2end/tests/example.spec.ts | 9 - doordesk/frontend/Cargo.toml | 18 - doordesk/frontend/src/lib.rs | 12 - doordesk/public/about.txt | 6 - doordesk/public/android-chrome-192x192.png | Bin 12011 -> 0 bytes doordesk/public/android-chrome-512x512.png | Bin 38637 -> 0 bytes doordesk/public/apple-touch-icon.png | Bin 10677 -> 0 bytes doordesk/public/favicon-16x16.png | Bin 685 -> 0 bytes doordesk/public/favicon-32x32.png | Bin 1500 -> 0 bytes doordesk/public/favicon.ico | Bin 15406 -> 0 bytes doordesk/public/site.webmanifest | 1 - doordesk/public/static/blog/20220207-swim.md | 142 - .../public/static/blog/20220506-change.md | 53 - .../public/static/blog/20220520-nvidia.md | 14 - doordesk/public/static/blog/20220602-back.md | 41 - .../public/static/blog/20220701-progress.md | 87 - doordesk/public/static/bots/cartman.html | 1 - doordesk/public/static/games/adam.md | 8 - doordesk/public/static/games/balls.md | 8 - doordesk/public/static/games/fps.md | 8 - doordesk/public/static/games/index.html | 23 - doordesk/public/static/games/snek.md | 7 - .../static/projects/20220529-housing.md | 114 - .../public/static/projects/20220614-reddit.md | 109 - .../static/projects/20221020-cartman.md | 32 - .../static/projects/20230427-lightning.md | 12 - doordesk/rust-toolchain.toml | 2 - doordesk/rustfmt.toml | 1 - doordesk/server/Cargo.toml | 18 - doordesk/server/src/fileserv.rs | 46 - doordesk/server/src/main.rs | 37 - doordesk/style/tailwind.css | 89 - doordesk/tailwind.config.js | 12 - 51 files changed, 4652 deletions(-) delete mode 100644 doordesk/.gitignore delete mode 100644 doordesk/Cargo.lock delete mode 100644 doordesk/Cargo.toml delete mode 100644 doordesk/LICENSE delete mode 100644 doordesk/README.md delete mode 100644 doordesk/app/Cargo.toml delete mode 100644 doordesk/app/src/components.rs delete mode 100644 doordesk/app/src/components/article.rs delete mode 100644 doordesk/app/src/components/slingshot.rs delete mode 100644 doordesk/app/src/error_template.rs delete mode 100644 doordesk/app/src/lib.rs delete mode 100644 doordesk/app/src/routes.rs delete mode 100644 doordesk/app/src/routes/blog.rs delete mode 100644 doordesk/app/src/routes/home.rs delete mode 100644 doordesk/app/src/routes/projects.rs delete mode 100644 doordesk/end2end/package-lock.json delete mode 100644 doordesk/end2end/package.json delete mode 100644 doordesk/end2end/playwright.config.ts delete mode 100644 doordesk/end2end/tests/example.spec.ts delete mode 100644 doordesk/frontend/Cargo.toml delete mode 100644 doordesk/frontend/src/lib.rs delete mode 100644 doordesk/public/about.txt delete mode 100644 doordesk/public/android-chrome-192x192.png delete mode 100644 doordesk/public/android-chrome-512x512.png delete mode 100644 doordesk/public/apple-touch-icon.png delete mode 100644 doordesk/public/favicon-16x16.png delete mode 100644 doordesk/public/favicon-32x32.png delete mode 100644 doordesk/public/favicon.ico delete mode 100644 doordesk/public/site.webmanifest delete mode 100644 doordesk/public/static/blog/20220207-swim.md delete mode 100644 doordesk/public/static/blog/20220506-change.md delete mode 100644 doordesk/public/static/blog/20220520-nvidia.md delete mode 100644 doordesk/public/static/blog/20220602-back.md delete mode 100644 doordesk/public/static/blog/20220701-progress.md delete mode 100644 doordesk/public/static/bots/cartman.html delete mode 100644 doordesk/public/static/games/adam.md delete mode 100644 doordesk/public/static/games/balls.md delete mode 100644 doordesk/public/static/games/fps.md delete mode 100644 doordesk/public/static/games/index.html delete mode 100644 doordesk/public/static/games/snek.md delete mode 100644 doordesk/public/static/projects/20220529-housing.md delete mode 100644 doordesk/public/static/projects/20220614-reddit.md delete mode 100644 doordesk/public/static/projects/20221020-cartman.md delete mode 100644 doordesk/public/static/projects/20230427-lightning.md delete mode 100644 doordesk/rust-toolchain.toml delete mode 100644 doordesk/rustfmt.toml delete mode 100644 doordesk/server/Cargo.toml delete mode 100644 doordesk/server/src/fileserv.rs delete mode 100644 doordesk/server/src/main.rs delete mode 100644 doordesk/style/tailwind.css delete mode 100644 doordesk/tailwind.config.js diff --git a/doordesk/.gitignore b/doordesk/.gitignore deleted file mode 100644 index 8cdaa33..0000000 --- a/doordesk/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -/target/ -pkg - -# These are backup files generated by rustfmt -**/*.rs.bk - -# node e2e test tools and outputs -node_modules/ -test-results/ -end2end/playwright-report/ -playwright/.cache/ diff --git a/doordesk/Cargo.lock b/doordesk/Cargo.lock deleted file mode 100644 index 21b6381..0000000 --- a/doordesk/Cargo.lock +++ /dev/null @@ -1,3039 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -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.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "allocator-api2" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" - -[[package]] -name = "anyhow" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" - -[[package]] -name = "app" -version = "0.1.0" -dependencies = [ - "cfg-if", - "femark", - "http", - "leptos", - "leptos_axum", - "leptos_meta", - "leptos_router", - "serde", - "thiserror", - "toml 0.8.8", -] - -[[package]] -name = "async-compression" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a116f46a969224200a0a97f29cfd4c50e7534e4b4826bd23ea2c3c533039c82c" -dependencies = [ - "brotli", - "flate2", - "futures-core", - "memchr", - "pin-project-lite", - "tokio", - "zstd", - "zstd-safe", -] - -[[package]] -name = "async-recursion" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "async-trait" -version = "0.1.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "attribute-derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c94f43ede6f25dab1dea046bff84d85dea61bd49aba7a9011ad66c0d449077b" -dependencies = [ - "attribute-derive-macro", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "attribute-derive-macro" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b409e2b2d2dc206d2c0ad3575a93f001ae21a1593e2d0c69b69c308e63f3b422" -dependencies = [ - "collection_literals", - "interpolator", - "manyhow", - "proc-macro-utils", - "proc-macro2", - "quote", - "quote-use", - "syn 2.0.48", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "axum" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" -dependencies = [ - "async-trait", - "axum-core", - "axum-macros", - "bitflags 1.3.2", - "bytes", - "futures-util", - "http", - "http-body", - "hyper", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "mime", - "rustversion", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-macros" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdca6a10ecad987bda04e95606ef85a5417dcaac1a78455242d72e031e2b6b62" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" - -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "brotli" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "2.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "bytecheck" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" -dependencies = [ - "bytecheck_derive", - "ptr_meta", - "simdutf8", - "uuid", -] - -[[package]] -name = "bytecheck_derive" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" - -[[package]] -name = "cached" -version = "0.45.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90eb5776f28a149524d1d8623035760b4454ec881e8cf3838fa8d7e1b11254b3" -dependencies = [ - "cached_proc_macro", - "cached_proc_macro_types", - "hashbrown 0.13.2", - "instant", - "once_cell", - "thiserror", -] - -[[package]] -name = "cached_proc_macro" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c878c71c2821aa2058722038a59a67583a4240524687c6028571c9b395ded61f" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "cached_proc_macro_types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" - -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "jobserver", - "libc", -] - -[[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 = "collection_literals" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186dce98367766de751c42c4f03970fc60fc012296e706ccbb9d5df9b6c1e271" - -[[package]] -name = "colored" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" -dependencies = [ - "lazy_static", - "windows-sys", -] - -[[package]] -name = "config" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23738e11972c7643e4ec947840fc463b6a571afcd3e735bdfce7d03c7a784aca" -dependencies = [ - "async-trait", - "lazy_static", - "nom", - "pathdiff", - "serde", - "toml 0.5.11", -] - -[[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 = "console_log" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be8aed40e4edbf4d3b4431ab260b63fdc40f5780a4766824329ea0f1eefe3c0f" -dependencies = [ - "log", - "web-sys", -] - -[[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 = "convert_case" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", -] - -[[package]] -name = "derive-where" -version = "1.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "deunicode" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae2a35373c5c74340b79ae6780b498b2b183915ec5dacf263aac5a099bf485a" - -[[package]] -name = "drain_filter_polyfill" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "669a445ee724c5c69b1b06fe0b63e70a1c84bc9bb7d9696cd4f4e3ec45050408" - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "encoding_rs" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "eyre" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" -dependencies = [ - "indenter", - "once_cell", -] - -[[package]] -name = "femark" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81771b11671145822e0f98b154260e21ac055e2aba13a597194f0ba3156e0a15" -dependencies = [ - "cc", - "eyre", - "once_cell", - "pulldown-cmark", - "pulldown-cmark-frontmatter", - "serde", - "slug", - "thiserror", - "toml 0.8.8", - "tracing", - "tree-sitter", - "tree-sitter-c", - "tree-sitter-dockerfile", - "tree-sitter-go", - "tree-sitter-highlight", - "tree-sitter-html", - "tree-sitter-javascript", - "tree-sitter-json", - "tree-sitter-nix", - "tree-sitter-python", - "tree-sitter-rust", - "tree-sitter-toml", - "tree-sitter-typescript", -] - -[[package]] -name = "flate2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "frontend" -version = "0.1.0" -dependencies = [ - "app", - "console_error_panic_hook", - "console_log", - "leptos", - "log", - "wasm-bindgen", -] - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - -[[package]] -name = "futures" -version = "0.3.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-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[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 = "getopts" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" -dependencies = [ - "unicode-width", -] - -[[package]] -name = "getrandom" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - -[[package]] -name = "gloo-net" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9902a044653b26b99f7e3693a42f171312d9be8b26b5697bd1e43ad1f8a35e10" -dependencies = [ - "futures-channel", - "futures-core", - "futures-sink", - "gloo-utils", - "js-sys", - "pin-project", - "serde", - "serde_json", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[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 = "h2" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap 2.1.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "half" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" -dependencies = [ - "cfg-if", - "crunchy", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.7", -] - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" -dependencies = [ - "ahash 0.8.7", - "allocator-api2", -] - -[[package]] -name = "hdrhistogram" -version = "7.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" -dependencies = [ - "byteorder", - "num-traits", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" - -[[package]] -name = "html-escape" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476" -dependencies = [ - "utf8-width", -] - -[[package]] -name = "http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range-header" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[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 = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" -dependencies = [ - "equivalent", - "hashbrown 0.14.3", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "interpolator" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71dd52191aae121e8611f1e8dc3e324dd0dd1dee1e6dd91d10ee07a3cfb4d9d8" - -[[package]] -name = "inventory" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8573b2b1fb643a372c73b23f4da5f888677feef3305146d68a539250a9bccc7" - -[[package]] -name = "ipnet" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" - -[[package]] -name = "iri-string" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21859b667d66a4c1dacd9df0863b3efb65785474255face87f5bca39dd8407c0" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "itertools" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" - -[[package]] -name = "jobserver" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "leptos" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "269ba4ba91ffa73d9559c975e0be17bd4eb34c6b6abd7fdd5704106132d89d2a" -dependencies = [ - "cfg-if", - "leptos_config", - "leptos_dom", - "leptos_macro", - "leptos_reactive", - "leptos_server", - "server_fn", - "tracing", - "typed-builder", - "typed-builder-macro", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "leptos_axum" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbfb557aa186ab4c3a693d3e23402805d879ead5d25096a4ab3fca06ee7688b4" -dependencies = [ - "axum", - "cfg-if", - "futures", - "http", - "hyper", - "leptos", - "leptos_integration_utils", - "leptos_meta", - "leptos_router", - "once_cell", - "parking_lot", - "serde_json", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "leptos_config" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e72d8689d54737991831e9b279bb4fba36d27a93aa975c75cd4241d9a4a425ec" -dependencies = [ - "config", - "regex", - "serde", - "thiserror", - "typed-builder", -] - -[[package]] -name = "leptos_dom" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad314950d41acb1bfdb8b5924811b2983484a8d6f69a20b834a173a682657ed4" -dependencies = [ - "async-recursion", - "cfg-if", - "drain_filter_polyfill", - "futures", - "getrandom", - "html-escape", - "indexmap 2.1.0", - "itertools", - "js-sys", - "leptos_reactive", - "once_cell", - "pad-adapter", - "paste", - "rustc-hash", - "serde", - "serde_json", - "server_fn", - "smallvec", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "leptos_hot_reload" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f62dcab17728877f2d2f16d2c8a6701c4c5fbdfb4964792924acb0b50529659" -dependencies = [ - "anyhow", - "camino", - "indexmap 2.1.0", - "parking_lot", - "proc-macro2", - "quote", - "rstml", - "serde", - "syn 2.0.48", - "walkdir", -] - -[[package]] -name = "leptos_integration_utils" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fddda3a3b768dad90f80fb56ac6e250bc5c60755f8e3df225913aba4364ed7ee" -dependencies = [ - "futures", - "leptos", - "leptos_config", - "leptos_hot_reload", - "leptos_meta", - "tracing", -] - -[[package]] -name = "leptos_macro" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57955d66f624265222444a5c565fea38efa5b0152a1dfc7c060a78e5fb62a852" -dependencies = [ - "attribute-derive", - "cfg-if", - "convert_case", - "html-escape", - "itertools", - "leptos_hot_reload", - "prettyplease", - "proc-macro-error", - "proc-macro2", - "quote", - "rstml", - "server_fn_macro", - "syn 2.0.48", - "tracing", - "uuid", -] - -[[package]] -name = "leptos_meta" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc25c0f7f14ed5daf42b8d0d273ed790b0449e8ba8cff1c2fa800dc90a75acb" -dependencies = [ - "cfg-if", - "indexmap 2.1.0", - "leptos", - "tracing", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "leptos_reactive" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f54a525a0edfc8c2bf3ee92aae411800b8b10892c9cd819f8e8a6d4f0d62f3" -dependencies = [ - "base64", - "cfg-if", - "futures", - "indexmap 2.1.0", - "js-sys", - "paste", - "pin-project", - "rkyv", - "rustc-hash", - "self_cell", - "serde", - "serde-wasm-bindgen", - "serde_json", - "slotmap", - "thiserror", - "tokio", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "leptos_router" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b31087173c60e25c329a1c6786756dd9ee97750b378622df4d780db160a09040" -dependencies = [ - "cached", - "cfg-if", - "gloo-net", - "itertools", - "js-sys", - "lazy_static", - "leptos", - "leptos_integration_utils", - "leptos_meta", - "linear-map", - "lru", - "once_cell", - "percent-encoding", - "regex", - "serde", - "serde_json", - "serde_qs", - "thiserror", - "tracing", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "leptos_server" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1517c2024bc47d764e96053e55b927f8a2159e735a0cc47232542b493df9d" -dependencies = [ - "inventory", - "lazy_static", - "leptos_macro", - "leptos_reactive", - "serde", - "server_fn", - "thiserror", - "tracing", -] - -[[package]] -name = "libc" -version = "0.2.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" - -[[package]] -name = "linear-map" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfae20f6b19ad527b550c223fddc3077a547fc70cda94b9b566575423fd303ee" -dependencies = [ - "serde", - "serde_test", -] - -[[package]] -name = "lock_api" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - -[[package]] -name = "lru" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21" -dependencies = [ - "hashbrown 0.14.3", -] - -[[package]] -name = "manyhow" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516b76546495d933baa165075b95c0a15e8f7ef75e53f56b19b7144d80fd52bd" -dependencies = [ - "manyhow-macros", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "manyhow-macros" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba072c0eadade3160232e70893311f1f8903974488096e2eb8e48caba2f0cf1" -dependencies = [ - "proc-macro-utils", - "proc-macro2", - "quote", -] - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - -[[package]] -name = "memchr" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[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.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" -dependencies = [ - "libc", - "wasi", - "windows-sys", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "pad-adapter" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d80efc4b6721e8be2a10a5df21a30fa0b470f1539e53d8b4e6e75faf938b63" - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets", -] - -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - -[[package]] -name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pin-project" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "prettyplease" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" -dependencies = [ - "proc-macro2", - "syn 2.0.48", -] - -[[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", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-utils" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f59e109e2f795a5070e69578c4dc101068139f74616778025ae1011d4cd41a8" -dependencies = [ - "proc-macro2", - "quote", - "smallvec", -] - -[[package]] -name = "proc-macro2" -version = "1.0.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proc-macro2-diagnostics" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", - "version_check", - "yansi", -] - -[[package]] -name = "ptr_meta" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" -dependencies = [ - "ptr_meta_derive", -] - -[[package]] -name = "ptr_meta_derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "pulldown-cmark" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998" -dependencies = [ - "bitflags 1.3.2", - "getopts", - "memchr", - "unicase", -] - -[[package]] -name = "pulldown-cmark-frontmatter" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d796ebc3f9fe89e2267a102d358a7f107488b5fefae07d25a990efbe1feab60" -dependencies = [ - "pulldown-cmark", -] - -[[package]] -name = "quote" -version = "1.0.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "quote-use" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7b5abe3fe82fdeeb93f44d66a7b444dedf2e4827defb0a8e69c437b2de2ef94" -dependencies = [ - "quote", - "quote-use-macros", - "syn 2.0.48", -] - -[[package]] -name = "quote-use-macros" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ea44c7e20f16017a76a245bb42188517e13d16dcb1aa18044bc406cdc3f4af" -dependencies = [ - "derive-where", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "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.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "regex" -version = "1.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b7fa1134405e2ec9353fd416b17f8dacd46c473d7d3fd1cf202706a14eb792a" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" - -[[package]] -name = "rend" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd" -dependencies = [ - "bytecheck", -] - -[[package]] -name = "reqwest" -version = "0.11.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" -dependencies = [ - "base64", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "system-configuration", - "tokio", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg", -] - -[[package]] -name = "rkyv" -version = "0.7.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527a97cdfef66f65998b5f3b637c26f5a5ec09cc52a3f9932313ac645f4190f5" -dependencies = [ - "bitvec", - "bytecheck", - "bytes", - "hashbrown 0.12.3", - "ptr_meta", - "rend", - "rkyv_derive", - "seahash", - "tinyvec", - "uuid", -] - -[[package]] -name = "rkyv_derive" -version = "0.7.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5c462a1328c8e67e4d6dbad1eb0355dd43e8ab432c6e227a43657f16ade5033" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "rstml" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe542870b8f59dd45ad11d382e5339c9a1047cde059be136a7016095bbdefa77" -dependencies = [ - "proc-macro2", - "proc-macro2-diagnostics", - "quote", - "syn 2.0.48", - "syn_derive", - "thiserror", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustversion" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" - -[[package]] -name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - -[[package]] -name = "self_cell" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba" - -[[package]] -name = "serde" -version = "1.0.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" -dependencies = [ - "serde_derive", -] - -[[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.195" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "serde_json" -version = "1.0.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_path_to_error" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd154a240de39fdebcf5775d2675c204d7c13cf39a4c697be6493c8e734337c" -dependencies = [ - "itoa", - "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_spanned" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_test" -version = "1.0.176" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a2f49ace1498612d14f7e0b8245519584db8299541dfe31a06374a828d620ab" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "server" -version = "0.1.0" -dependencies = [ - "app", - "axum", - "leptos", - "leptos_axum", - "log", - "simple_logger", - "tokio", - "tower", - "tower-http", -] - -[[package]] -name = "server_fn" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c265de965fe48e09ad8899d0ab1ffebdfa1a9914e4de5ff107b07bd94cf7541" -dependencies = [ - "ciborium", - "const_format", - "gloo-net", - "inventory", - "js-sys", - "lazy_static", - "once_cell", - "proc-macro2", - "quote", - "reqwest", - "serde", - "serde_json", - "serde_qs", - "server_fn_macro_default", - "syn 2.0.48", - "thiserror", - "xxhash-rust", -] - -[[package]] -name = "server_fn_macro" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f77000541a62ceeec01eef3ee0f86c155c33dac5fae750ad04a40852c6d5469a" -dependencies = [ - "const_format", - "proc-macro-error", - "proc-macro2", - "quote", - "serde", - "syn 2.0.48", - "xxhash-rust", -] - -[[package]] -name = "server_fn_macro_default" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3353f22e2bcc451074d4feaa37317d9d17dff11d4311928384734ea17ab9ca" -dependencies = [ - "server_fn_macro", - "syn 2.0.48", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" -dependencies = [ - "libc", -] - -[[package]] -name = "simdutf8" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" - -[[package]] -name = "simple_logger" -version = "4.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e7e46c8c90251d47d08b28b8a419ffb4aede0f87c2eea95e17d1d5bacbf3ef1" -dependencies = [ - "colored", - "log", - "time", - "windows-sys", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[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 = "slug" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd94acec9c8da640005f8e135a39fc0372e74535e6b368b7a04b875f784c8c4" -dependencies = [ - "deunicode", - "wasm-bindgen", -] - -[[package]] -name = "smallvec" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" - -[[package]] -name = "socket2" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" -dependencies = [ - "libc", - "windows-sys", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - -[[package]] -name = "thiserror" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "time" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" -dependencies = [ - "deranged", - "itoa", - "libc", - "num_threads", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" -dependencies = [ - "time-core", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.35.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys", -] - -[[package]] -name = "tokio-macros" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "tokio-util" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "futures-util", - "hashbrown 0.14.3", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" -dependencies = [ - "indexmap 2.1.0", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "hdrhistogram", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" -dependencies = [ - "async-compression", - "base64", - "bitflags 2.4.2", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", - "httpdate", - "iri-string", - "mime", - "mime_guess", - "percent-encoding", - "pin-project-lite", - "tokio", - "tokio-util", - "tower", - "tower-layer", - "tower-service", - "tracing", - "uuid", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[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", -] - -[[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 2.0.48", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", -] - -[[package]] -name = "tree-sitter" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e747b1f9b7b931ed39a548c1fae149101497de3c1fc8d9e18c62c1a66c683d3d" -dependencies = [ - "cc", - "regex", -] - -[[package]] -name = "tree-sitter-c" -version = "0.20.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a578ec34a18175c5a3922db2bceb132c82391f5b232375d6bb6531d1bfcf497" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-dockerfile" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e314ed278a8392df8579f3a2321959118cdaced00cf90cc9a1230c6f7637a5" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-go" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad6d11f19441b961af2fda7f12f5d0dac325f6d6de83836a1d3750018cc5114" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-highlight" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "042342584c5a7a0b833d9fc4e2bdab3f9868ddc6c4b339a1e01451c6720868bc" -dependencies = [ - "regex", - "thiserror", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-html" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "184e6b77953a354303dc87bf5fe36558c83569ce92606e7b382a0dc1b7443443" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-javascript" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edbc663376bdd294bd1f0a6daf859aedb9aa5bdb72217d7ad8ba2d5314102cf7" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-json" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90b04c4e1a92139535eb9fca4ec8fa9666cc96b618005d3ae35f3c957fa92f92" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-nix" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8c93b7dd2afcd9667daae048135be9ee268e9e3900f4d7d0556a63ec5336b1" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-python" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c93b1b1fbd0d399db3445f51fd3058e43d0b4dcff62ddbdb46e66550978aa5" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-rust" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0832309b0b2b6d33760ce5c0e818cb47e1d72b468516bfe4134408926fa7594" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-toml" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca517f578a98b23d20780247cc2688407fa81effad5b627a5a364ec3339b53e8" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-typescript" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75049f0aafabb2aac205d7bb24da162b53dcd0cfb326785f25a2f32efa8071a" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "typed-builder" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444d8748011b93cb168770e8092458cb0f8854f931ff82fdf6ddfbd72a9c933e" -dependencies = [ - "typed-builder-macro", -] - -[[package]] -name = "typed-builder-macro" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "563b3b88238ec95680aef36bdece66896eaa7ce3c0f1b4f39d38fb2435261352" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[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" -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.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "unicode-width" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" - -[[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.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "utf8-width" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" - -[[package]] -name = "uuid" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" -dependencies = [ - "getrandom", -] - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "walkdir" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" - -[[package]] -name = "web-sys" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" -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-util" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" -dependencies = [ - "winapi", -] - -[[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-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "winnow" -version = "0.5.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys", -] - -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - -[[package]] -name = "xxhash-rust" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53be06678ed9e83edb1745eb72efc0bbcd7b5c3c35711a860906aed827a13d61" - -[[package]] -name = "yansi" -version = "1.0.0-rc.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1367295b8f788d371ce2dbc842c7b709c73ee1364d30351dd300ec2203b12377" - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "zstd" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" -dependencies = [ - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.9+zstd.1.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" -dependencies = [ - "cc", - "pkg-config", -] diff --git a/doordesk/Cargo.toml b/doordesk/Cargo.toml deleted file mode 100644 index efa32c8..0000000 --- a/doordesk/Cargo.toml +++ /dev/null @@ -1,110 +0,0 @@ -[workspace] -resolver = "2" -members = ["app", "frontend", "server"] - -# need to be applied only to wasm build -[profile.release] -codegen-units = 1 -lto = true -opt-level = 'z' - -[workspace.dependencies] -leptos = { version = "0.5", features = ["nightly"] } -leptos_meta = { version = "0.5", features = ["nightly"] } -leptos_router = { version = "0.5", features = ["nightly"] } -leptos_axum = { version = "0.5" } - -axum = "0.6.20" -cfg-if = "1" -console_error_panic_hook = "0.1.7" -console_log = "1" -http = "0.2.9" -log = "0.4.20" -simple_logger = "4.2.0" -thiserror = "1" -tokio = { version = "1.33.0", features = ["full"] } -tower = { version = "0.4.13", features = ["full"] } -tower-http = { version = "0.4", features = ["full"] } -wasm-bindgen = "0.2.89" - -# See https://github.com/akesson/cargo-leptos for documentation of all the parameters. - -# A leptos project defines which workspace members -# that are used together frontend (lib) & server (bin) -[[workspace.metadata.leptos]] -# this name is used for the wasm, js and css file names -name = "doordesk" - -# the package in the workspace that contains the server binary (binary crate) -bin-package = "server" - -# the package in the workspace that contains the frontend wasm binary (library crate) -lib-package = "frontend" - -# The site root folder is where cargo-leptos generate all output. WARNING: all content of this folder will be erased on a rebuild. Use it in your server setup. -site-root = "target/site" - -# The site-root relative folder where all compiled output (JS, WASM and CSS) is written -# Defaults to pkg -site-pkg-dir = "pkg" - -# [Optional] The source CSS file. If it ends with .sass or .scss then it will be compiled by dart-sass into CSS. The CSS is optimized by Lightning CSS before being written to //app.css -style-file = "style/tailwind.css" - -# The tailwind input file. -# -# Optional, Activates the tailwind build -tailwind-input-file = "style/tailwind.css" - -# The tailwind config file. -# -# Optional, defaults to "./tailwind.config.js" which if is not present -# is generated for you -tailwind-config-file = "./tailwind.config.js" - -# Assets source dir. All files found here will be copied and synchronized to site-root. -# The assets-dir cannot have a sub directory with the same name/path as site-pkg-dir. -# -# Optional. Env: LEPTOS_ASSETS_DIR. -assets-dir = "public" - -# The IP and port (ex: 127.0.0.1:3000) where the server serves the content. Use it in your server setup. -site-addr = "0.0.0.0:3000" - -# The port to use for automatic reload monitoring -reload-port = 3001 - -# [Optional] Command to use when running end2end tests. It will run in the end2end dir. -# [Windows] for non-WSL use "npx.cmd playwright test" -# This binary name can be checked in Powershell with Get-Command npx -end2end-cmd = "npx playwright test" -end2end-dir = "end2end" - -# The browserlist query used for optimizing the CSS. -browserquery = "defaults" - -# Set by cargo-leptos watch when building with that tool. Controls whether autoreload JS will be included in the head -watch = false - -# The environment Leptos will run in, usually either "DEV" or "PROD" -env = "DEV" - -# The features to use when compiling the bin target -# -# Optional. Can be over-ridden with the command line parameter --bin-features -bin-features = [] - -# If the --no-default-features flag should be used when compiling the bin target -# -# Optional. Defaults to false. -bin-default-features = false - -# The features to use when compiling the lib target -# -# Optional. Can be over-ridden with the command line parameter --lib-features -lib-features = [] - -# If the --no-default-features flag should be used when compiling the lib target -# -# Optional. Defaults to false. -lib-default-features = false diff --git a/doordesk/LICENSE b/doordesk/LICENSE deleted file mode 100644 index e869ce3..0000000 --- a/doordesk/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 henrik - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/doordesk/README.md b/doordesk/README.md deleted file mode 100644 index 6befba7..0000000 --- a/doordesk/README.md +++ /dev/null @@ -1,87 +0,0 @@ - - - Leptos Logo - - -# Leptos Axum Starter Template - -This is a template for use with the [Leptos](https://github.com/leptos-rs/leptos) web framework and the [cargo-leptos](https://github.com/akesson/cargo-leptos) tool using [Axum](https://github.com/tokio-rs/axum). - -## Creating your template repo - -If you don't have `cargo-leptos` installed you can install it with - -```bash -cargo install cargo-leptos -``` - -Then run -```bash -cargo leptos new --git https://github.com/leptos-rs/start-axum-workspace/ -``` - -to generate a new project template. - -```bash -cd {projectname} -``` - -to go to your newly created project. -Feel free to explore the project structure, but the best place to start with your application code is in `src/app.rs`. -Addtionally, Cargo.toml may need updating as new versions of the dependencies are released, especially if things are not working after a `cargo update`. - -## Running your project - -```bash -cargo leptos watch -``` - -## Installing Additional Tools - -By default, `cargo-leptos` uses `nightly` Rust, `cargo-generate`, and `sass`. If you run into any trouble, you may need to install one or more of these tools. - -1. `rustup toolchain install nightly --allow-downgrade` - make sure you have Rust nightly -2. `rustup default nightly` - setup nightly as default, or you can use rust-toolchain file later on -3. `rustup target add wasm32-unknown-unknown` - add the ability to compile Rust to WebAssembly -4. `cargo install cargo-generate` - install `cargo-generate` binary (should be installed automatically in future) -5. `npm install -g sass` - install `dart-sass` (should be optional in future - -## Compiling for Release -```bash -cargo leptos build --release -``` - -Will generate your server binary in target/server/release and your site package in target/site - -## Testing Your Project -```bash -cargo leptos end-to-end -``` - -```bash -cargo leptos end-to-end --release -``` - -Cargo-leptos uses Playwright as the end-to-end test tool. -Tests are located in end2end/tests directory. - -## Executing a Server on a Remote Machine Without the Toolchain -After running a `cargo leptos build --release` the minimum files needed are: - -1. The server binary located in `target/server/release` -2. The `site` directory and all files within located in `target/site` - -Copy these files to your remote server. The directory structure should be: -```text -start-axum -site/ -``` -Set the following enviornment variables (updating for your project as needed): -```text -LEPTOS_OUTPUT_NAME="start-axum" -LEPTOS_SITE_ROOT="site" -LEPTOS_SITE_PKG_DIR="pkg" -LEPTOS_SITE_ADDR="127.0.0.1:3000" -LEPTOS_RELOAD_PORT="3001" -``` -Finally, run the server binary. diff --git a/doordesk/app/Cargo.toml b/doordesk/app/Cargo.toml deleted file mode 100644 index 29d838e..0000000 --- a/doordesk/app/Cargo.toml +++ /dev/null @@ -1,34 +0,0 @@ -[package] -name = "app" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -leptos.workspace = true -leptos_meta.workspace = true -leptos_router.workspace = true -leptos_axum = { workspace = true, optional = true } - -http.workspace = true -cfg-if.workspace = true -thiserror.workspace = true -serde = "1.0.195" -femark = { version = "0.1.5", optional = true } -toml = { version = "0.8.8", optional = true } - -[features] -default = [] -hydrate = ["leptos/hydrate", "leptos_meta/hydrate", "leptos_router/hydrate"] -ssr = [ - "leptos/ssr", - "leptos_meta/ssr", - "leptos_router/ssr", - "dep:leptos_axum", - "dep:femark", - "dep:toml", -] - -[package.metadata.cargo-all-features] -denylist = ["femark"] diff --git a/doordesk/app/src/components.rs b/doordesk/app/src/components.rs deleted file mode 100644 index 39d2056..0000000 --- a/doordesk/app/src/components.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod article; -pub mod slingshot; diff --git a/doordesk/app/src/components/article.rs b/doordesk/app/src/components/article.rs deleted file mode 100644 index b045cb5..0000000 --- a/doordesk/app/src/components/article.rs +++ /dev/null @@ -1,23 +0,0 @@ -use leptos::*; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ArticleData { - pub content_type: String, - pub title: String, - pub date: String, // make datetime? - pub content: String, -} - -#[component] -pub fn Article(data: ArticleData) -> impl IntoView { - view! { - // Shadow styling is in main .css file -
-

{&data.title}

-
- {&data.date} -
-
- } -} diff --git a/doordesk/app/src/components/slingshot.rs b/doordesk/app/src/components/slingshot.rs deleted file mode 100644 index 4c4cedf..0000000 --- a/doordesk/app/src/components/slingshot.rs +++ /dev/null @@ -1,54 +0,0 @@ -use crate::components::article::ArticleData; -use leptos::*; -use serde::Deserialize; - -#[derive(Deserialize)] -struct ArticleFrontmatter { - content_type: String, - title: String, - date: String, -} - -#[server] -pub async fn slingshot(path: String) -> Result, ServerFnError> { - let mut articles = vec![]; - - for dir in std::fs::read_dir(path)? { - for file in std::fs::read_dir(dir?.path())? { - let fileinfo = file?; - let filepath = fileinfo.path(); - - if let Some(filetype) = filepath.extension() { - if filetype == "md" { - let file = std::fs::read_to_string(filepath)?; - let html_from_md = - femark::process_markdown_to_html_with_frontmatter(&file.to_string(), true) - .expect("Problem processing markdown"); - let content = html_from_md.content; - let _toc = html_from_md.toc; - - if let Some(front_raw) = html_from_md.frontmatter { - if let Some(front_code) = front_raw.code_block { - let toml: ArticleFrontmatter = - toml::from_str(&front_code.source)?; - - articles.push(ArticleData { - content_type: toml.content_type, - title: toml.title, - date: toml.date, - content, - }) - } - } - } - } - } - } - - // Simulate lag - use std::thread::sleep; - use std::time::Duration; - sleep(Duration::from_millis(300)); - - Ok(articles) -} diff --git a/doordesk/app/src/error_template.rs b/doordesk/app/src/error_template.rs deleted file mode 100644 index cb7bbdc..0000000 --- a/doordesk/app/src/error_template.rs +++ /dev/null @@ -1,56 +0,0 @@ -use http::status::StatusCode; -use leptos::*; -use thiserror::Error; - -#[derive(Clone, Debug, Error)] -pub enum AppError { - #[error("Not Found")] - NotFound, -} - -impl AppError { - pub fn status_code(&self) -> StatusCode { - match self { - AppError::NotFound => StatusCode::NOT_FOUND, - } - } -} - -#[component] -pub fn ErrorTemplate( - #[prop(optional)] outside_errors: Option, - #[prop(optional)] errors: Option>, -) -> impl IntoView { - let errors = match outside_errors { - Some(e) => create_rw_signal(e), - None => match errors { - Some(e) => e, - None => panic!("No Errors found and we expected errors!"), - }, - }; - // Get Errors from Signal - let errors = errors.get_untracked(); - - let errors: Box<_> = errors.into_iter().filter_map(|(_k, v)| v.into()).collect(); - println!("Errors: {errors:#?}"); - - view! { -
-

- {if errors.len() > 1 { "Errors!" } else { "Error!" }} -

-
- -
    - {move || { - errors - .into_iter() - .map(|e: &_| view! {
  • {e.to_string()}
  • }) - .collect_view() - }} - -
- -
- } -} diff --git a/doordesk/app/src/lib.rs b/doordesk/app/src/lib.rs deleted file mode 100644 index 9b764e9..0000000 --- a/doordesk/app/src/lib.rs +++ /dev/null @@ -1,62 +0,0 @@ -use crate::error_template::{AppError, ErrorTemplate}; - -use leptos::*; -use leptos_meta::*; -use leptos_router::*; - -pub mod components; -pub mod error_template; -pub mod routes; - -// use crate::routes::{blog::*, home::*, projects::*}; -use crate::routes::home::Home; - -#[component] -pub fn App() -> impl IntoView { - provide_meta_context(); - - view! { - - - <Router fallback=|| { - let mut outside_errors = Errors::default(); - outside_errors.insert_with_default_key(AppError::NotFound); - view! { <ErrorTemplate outside_errors/> }.into_view() - }> - // Some repetitive nav styling is defined in the main .css file - <nav class="sticky top-0 z-50 bg-gradient-to-b shadow-lg from-zinc-800 to-zinc-900"> - <ul class="container flex items-center p-3"> - // Logo - <p class="mx-1.5 sm:mx-6">"DoorDesk"</p> - <li> - <A href="" exact=true> - "Home" - </A> - </li> - <li> - <A href="/blog">"Blog"</A> - </li> - <li> - <A href="/projects">"Projects"</A> - </li> - <li> - <a href="https://git.doordesk.net">"Git"</a> - </li> - </ul> - </nav> - <main> - <Routes> - <Route path="" view=Home/> - // <Route path="blog" view=Blog/> - // <Route path="projects" view=Projects/> - </Routes> - </main> - <p class="m-auto w-8 text-center duration-200 hover:rotate-180"> - <a href="https://open.spotify.com/playlist/3JRNw9gpt1w5ptsw8uDeYc?si=8f7e4191113f41f9"> - ":)" - </a> - </p> - <br/> - </Router> - } -} diff --git a/doordesk/app/src/routes.rs b/doordesk/app/src/routes.rs deleted file mode 100644 index 509f52f..0000000 --- a/doordesk/app/src/routes.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod home; -// pub mod blog; -// pub mod projects; diff --git a/doordesk/app/src/routes/blog.rs b/doordesk/app/src/routes/blog.rs deleted file mode 100644 index 9a4b7d5..0000000 --- a/doordesk/app/src/routes/blog.rs +++ /dev/null @@ -1,7 +0,0 @@ -use crate::components::article::*; -use leptos::*; - -#[component] -pub fn Blog() -> impl IntoView { - view! { <Article/> } -} diff --git a/doordesk/app/src/routes/home.rs b/doordesk/app/src/routes/home.rs deleted file mode 100644 index a0f0534..0000000 --- a/doordesk/app/src/routes/home.rs +++ /dev/null @@ -1,30 +0,0 @@ -use crate::components::article::*; -use crate::components::slingshot::*; -use crate::error_template::*; -use leptos::*; - -#[component] -pub fn Home() -> impl IntoView { - let data_resource = create_local_resource( - || (), - |_| async move { slingshot("./public/static".to_string()).await }, - ); - - let articles_view = move || { - data_resource.and_then(|data| { - data.iter() - .map(|article| view! { <Article data=article.clone()/> }) - .collect_view() - }) - }; - - view! { - <Suspense fallback=move || { - view! { <p>"Loading..."</p> } - }> - <ErrorBoundary fallback=|errors| { - view! { <ErrorTemplate errors=errors/> } - }>{articles_view}</ErrorBoundary> - </Suspense> - } -} diff --git a/doordesk/app/src/routes/projects.rs b/doordesk/app/src/routes/projects.rs deleted file mode 100644 index 7169efa..0000000 --- a/doordesk/app/src/routes/projects.rs +++ /dev/null @@ -1,7 +0,0 @@ -use crate::components::article::*; -use leptos::*; - -#[component] -pub fn Projects() -> impl IntoView { - view! { <Article/> } -} diff --git a/doordesk/end2end/package-lock.json b/doordesk/end2end/package-lock.json deleted file mode 100644 index f12af44..0000000 --- a/doordesk/end2end/package-lock.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "end2end", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "end2end", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@playwright/test": "^1.28.0" - } - }, - "node_modules/@playwright/test": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.28.0.tgz", - "integrity": "sha512-vrHs5DFTPwYox5SGKq/7TDn/S4q6RA1zArd7uhO6EyP9hj3XgZBBM12ktMbnDQNxh/fL1IUKsTNLxihmsU38lQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "playwright-core": "1.28.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "node_modules/playwright-core": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.28.0.tgz", - "integrity": "sha512-nJLknd28kPBiCNTbqpu6Wmkrh63OEqJSFw9xOfL9qxfNwody7h6/L3O2dZoWQ6Oxcm0VOHjWmGiCUGkc0X3VZA==", - "dev": true, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=14" - } - } - }, - "dependencies": { - "@playwright/test": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.28.0.tgz", - "integrity": "sha512-vrHs5DFTPwYox5SGKq/7TDn/S4q6RA1zArd7uhO6EyP9hj3XgZBBM12ktMbnDQNxh/fL1IUKsTNLxihmsU38lQ==", - "dev": true, - "requires": { - "@types/node": "*", - "playwright-core": "1.28.0" - } - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "playwright-core": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.28.0.tgz", - "integrity": "sha512-nJLknd28kPBiCNTbqpu6Wmkrh63OEqJSFw9xOfL9qxfNwody7h6/L3O2dZoWQ6Oxcm0VOHjWmGiCUGkc0X3VZA==", - "dev": true - } - } -} diff --git a/doordesk/end2end/package.json b/doordesk/end2end/package.json deleted file mode 100644 index ed78585..0000000 --- a/doordesk/end2end/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "end2end", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": {}, - "keywords": [], - "author": "", - "license": "ISC", - "devDependencies": { - "@playwright/test": "^1.28.0" - } -} diff --git a/doordesk/end2end/playwright.config.ts b/doordesk/end2end/playwright.config.ts deleted file mode 100644 index e9891c0..0000000 --- a/doordesk/end2end/playwright.config.ts +++ /dev/null @@ -1,107 +0,0 @@ -import type { PlaywrightTestConfig } from "@playwright/test"; -import { devices } from "@playwright/test"; - -/** - * Read environment variables from file. - * https://github.com/motdotla/dotenv - */ -// require('dotenv').config(); - -/** - * See https://playwright.dev/docs/test-configuration. - */ -const config: PlaywrightTestConfig = { - testDir: "./tests", - /* Maximum time one test can run for. */ - timeout: 30 * 1000, - expect: { - /** - * Maximum time expect() should wait for the condition to be met. - * For example in `await expect(locator).toHaveText();` - */ - timeout: 5000, - }, - /* Run tests in files in parallel */ - fullyParallel: true, - /* Fail the build on CI if you accidentally left test.only in the source code. */ - forbidOnly: !!process.env.CI, - /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, - /* Opt out of parallel tests on CI. */ - workers: process.env.CI ? 1 : undefined, - /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: "html", - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ - use: { - /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ - actionTimeout: 0, - /* Base URL to use in actions like `await page.goto('/')`. */ - // baseURL: 'http://localhost:3000', - - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: "on-first-retry", - }, - - /* Configure projects for major browsers */ - projects: [ - { - name: "chromium", - use: { - ...devices["Desktop Chrome"], - }, - }, - - { - name: "firefox", - use: { - ...devices["Desktop Firefox"], - }, - }, - - { - name: "webkit", - use: { - ...devices["Desktop Safari"], - }, - }, - - /* Test against mobile viewports. */ - // { - // name: 'Mobile Chrome', - // use: { - // ...devices['Pixel 5'], - // }, - // }, - // { - // name: 'Mobile Safari', - // use: { - // ...devices['iPhone 12'], - // }, - // }, - - /* Test against branded browsers. */ - // { - // name: 'Microsoft Edge', - // use: { - // channel: 'msedge', - // }, - // }, - // { - // name: 'Google Chrome', - // use: { - // channel: 'chrome', - // }, - // }, - ], - - /* Folder for test artifacts such as screenshots, videos, traces, etc. */ - // outputDir: 'test-results/', - - /* Run your local dev server before starting the tests */ - // webServer: { - // command: 'npm run start', - // port: 3000, - // }, -}; - -export default config; diff --git a/doordesk/end2end/tests/example.spec.ts b/doordesk/end2end/tests/example.spec.ts deleted file mode 100644 index a461f35..0000000 --- a/doordesk/end2end/tests/example.spec.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { test, expect } from "@playwright/test"; - -test("homepage has title and links to intro page", async ({ page }) => { - await page.goto("http://localhost:3000/"); - - await expect(page).toHaveTitle("Welcome to Leptos"); - - await expect(page.locator("h1")).toHaveText("Welcome to Leptos!"); -}); diff --git a/doordesk/frontend/Cargo.toml b/doordesk/frontend/Cargo.toml deleted file mode 100644 index 19f62b0..0000000 --- a/doordesk/frontend/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "frontend" -version = "0.1.0" -edition = "2021" - -[lib] -crate-type = ["cdylib", "rlib"] - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -app = { path = "../app", default-features = false, features = ["hydrate"] } -leptos = { workspace = true, features = [ "hydrate" ] } - -console_error_panic_hook.workspace = true -console_log.workspace = true -log.workspace = true -wasm-bindgen.workspace = true diff --git a/doordesk/frontend/src/lib.rs b/doordesk/frontend/src/lib.rs deleted file mode 100644 index b20eed2..0000000 --- a/doordesk/frontend/src/lib.rs +++ /dev/null @@ -1,12 +0,0 @@ -use app::*; -use leptos::*; -use wasm_bindgen::prelude::wasm_bindgen; - -#[wasm_bindgen] -pub fn hydrate() { - // initializes logging using the `log` crate - _ = console_log::init_with_level(log::Level::Debug); - console_error_panic_hook::set_once(); - - leptos::mount_to_body(App); -} diff --git a/doordesk/public/about.txt b/doordesk/public/about.txt deleted file mode 100644 index 5cd61e0..0000000 --- a/doordesk/public/about.txt +++ /dev/null @@ -1,6 +0,0 @@ -This favicon was generated using the following graphics from Twitter Twemoji: - -- Graphics Title: 1f37b.svg -- Graphics Author: Copyright 2020 Twitter, Inc and other contributors (https://github.com/twitter/twemoji) -- Graphics Source: https://github.com/twitter/twemoji/blob/master/assets/svg/1f37b.svg -- Graphics License: CC-BY 4.0 (https://creativecommons.org/licenses/by/4.0/) diff --git a/doordesk/public/android-chrome-192x192.png b/doordesk/public/android-chrome-192x192.png deleted file mode 100644 index 27552b1883861048ede430f493409923358c6721..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12011 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 QW9@+4M`fw+5~jib1Am95#{d8T diff --git a/doordesk/public/android-chrome-512x512.png b/doordesk/public/android-chrome-512x512.png deleted file mode 100644 index 224ed386abe536372df33a18721b1e62b9b37b94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38637 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�)nWnFl7(?F9!l1gd>BuOxkQ;Q-& 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ʠ!=!ILQl62n(;h2q=P> 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 diff --git a/doordesk/public/apple-touch-icon.png b/doordesk/public/apple-touch-icon.png deleted file mode 100644 index a91602a3e86feee62c57c7a2ebed24dfb825470d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10677 zcmZviWmKF!(|~a+R<yXgyTby--Q9{U?yieNk>U<pytuo&v$Pa<r?@+OJn!%CN0O7A zlgUgbIk~U7Ct6im1`UM}1quoZO-}Z!`bXRNUqM3ns70m_IH91(q2#`bYkC`><|5}9 zNu|E4tUaf#r@MRcCb?r_AyI><b1h-0;YebU=n+E7s90lTw~@l&RK;!P9xEytqe5T{ zHp}EN;lK9xejx_~c+-$TwKNodf?Ykg>rd~~r)Q8Azw`M3g`P9b0DJ7;O>1sF_jA8A zO3UGnifAATFjE^Z&RXnvBJl4o$l~1MSY76_&t9U*ZxoK+%{2M&5pVyBXf8l-%d95s z;|GO)aM6D*YWk`-pi-=|ci;6Re0*ln?7a3XCb=PxPgV$E6W67e{*0M-cDX0#{(bnh zorIA$jn$`n2$VaAWisJm3Z<Yc=U`gCe>?TH85S9Ee_e$Q?lh%2KzVcDgXl_)lkm{r zp9vO1*XI6<fTZR5IV83M+MSd28};dTsGESc!;%zg{Tkt4CDf$!%M6r$BPCx5u3!#x zg|aK`2eKH)@@UYqB9#A1=<Z?K5s;R#<A)F(@?K23D0b_I6<KitYs4F+l2)0=?yufR zRy-&3M1<0&M8_xawFdp?2fl{Tg+^lw!W%p#g=FVHN@+hgY*P)T#paoPIu;AV{L?26 zRRS?)*bRlA=!|sKd&ZOg6jf<Ws0wbeU(!+6-w~T>u9_jTPz<ePgov2%!t+G^Yo66< z)@YHG69GP*2n}oN^yF8)$)x8CMuz!g-KLiS3;*KXm40$Gyq9f$qC7s1^FDqLAZj#@ z;AQk{q#6q;@SATwWy4>sKa1;x(wApwK40PMYo0Vf{qyie?r0{>IYO~3$@2>Wi=Alg z!PbXcrMVsrg)3#M4V}M>Z@c2(cAwoZS;vr7`>jYB?=ia$ArGl_Y|EQLc;r&D!(FyL zGeiQOgvbefpQ~RRiZQ*CFu7)rppQc9i>?cMNi(Q72!&i1YdBCF5N2d;yIf~S!Hp(i z(!|O25^_DaEsaLZXUmX0&YEusJ}$Xp`ugrHd8hI?N@lj>r-2o~l2#8T$$KkT^gr3^ z2(W%crWLbCF*6kn*9&ZAB;%$orx#|&oHRckV&L%?sRIv6L}Rhu_dB+ZHrmH3l4R!D zu7(UwoMgps>8(pxnO5YU@DLo|3^1G<B@{%sN{RAg&a<7^@zFx8@|#0-Isp<DA?0 zieE(iRoZ9HAM%toavwBB)5}>WT|9>d?sB$Q^4C%sYsSy_wCK`@9oz&I^X)i{JAyOq z(x*nn#JsP$-ig`Kx{e_~mvsjNaY^Xad`xp&65#Z!_>H(-6#tI9TVfk~j(?pr_YUzg zEN{2Zc6>Km`jh^5L1TE5WMq<_;RWx>85fF0{%@pXPtcNyt8;wW#&2`cL@u-`>^>4d z^Z;DP^n3<)eQPCZXomAD60O%EcX%AVZfE4lj16$!HjYOV*3vs+tIgW=QS*|PabSS4 zp73FhM3PI@coZ7Ypl?<SM3n#NbKbp+dgxWe%zjVWjyN!1%0=^os)MvHj&gW)c{xVX zcrREE996CB%{Fe5fdcpP*4E7XTp5#JbG>SOA9y99?EjK?4wzx_y5#U+LgC||Rax2I zzfBc0Ug0+dIIT2Tx8`Hg0k{{AKSB0He?XbW$_-?F67p@(X&bHBkBipt!w3JAp{at^ zM|$tzs14X{87$XITexc<KW%TVE-SBmVDzUh&k_g`JiFm(sR~Xn-Uu(zB(rJ{5Hk!M zi4RD&?|I~ZGm{u*6#31Bb=AN8`EOo2xNt(HEiBAMXfPutG^+N*?WLvKkJ%`3q9*@y z?2|#w=ZIDm50dzO1wFQIdd}ShgSgGxfxw%u8U-)ENU1G_9Jx9>oHi8e<9ITDF0`@~ zUKjreE;^r&FK?gzp0n71nY^D5LXM0su?5Q5xjo;Qc{#`;sh1Nz+)tyJP9!h%@!X^N zOG5Km<_M#5&Ca}f+Dnzw_vAo#ncsuj(lDX2ynPHxCuKL&o2V*S@6@$!V#2xV2=D1- z2{Oxt*OzX)lS+G-eqT7cx9?X=`{@*lq+UeOJHNHPgD=rs&X;SycbAMOWp14FJDXNJ zMDrZxAP90%S_+x%wI*uiU#S}rucH}YW;2Z$Ste~#qAIeyjA5^IHSW;s(j_^~c%f0S z!b8rCnkzHm*CLAVe3_d%vSRm@CGEgnS3g>F*tHkp%MAY&Z$HF@9}E~dvyIaleM1ON zK#&)8Z!W93-}Uq4Zm=|khv-dfM=zN<_@}=IyEG9^t<u1vHR2Oq6)O?~MznJT$xtpR zgylVwM#N7VT7{jjHN3oiESfV5SyTdN3a#EU#dd4(#r&?o@+*WuT$??Eb?)GOsW>3} z1)}0_{GB>1XY%!s{D;cTDLWILfE%xW__(n)b=_!Flk2Fs*#hyp7adch)f0mbD~n2{ zDclhG?eT_58>lH2EIrRFO|z`Z0F_~t`!6WEgswsoPTd5HZ*%f>C>*0Ga`OwgQU)>A z(1tpcS@J`ZwWti|?1i&-Lk=^1Ox!;F6$s1U=RT~+0$iJqT9OGeIu53rF+387ImGv) z$is=vkn8U(10MevXo?UK^WZx~8?lAeNsRGCLRm}3_)YzA$!s-eNn7foL2Kk|+mrc) z3bl4ie)X^Y3RvXbcv|Qz?zS@hmC0p{)Noz}?dx(mYk1o0XVZwiO~LT3nbr{#UuV5@ zQ>q0XcdI!-g*<cql{My}qOi8b(#ui*#VfMa@YnlW7yF0@OMaa0k`rq-dL^i5J4s}q zUczbi2pg_ugUK&qzRvT9=Yz0c7iy=Gp6}%v`;&a&8p8*MlfuWU=L{>9fyT!sG3{97 zO_Nl*;Jn~8rt~ZeM=~i+Pps}D1|$sv5PJGHlO}<BS(m@^ZQo9{h*DPgS-P-B_bipL zWF9n$QTGLB?WMVwQ#en9OR3oIb91>JtKKUzPu0r`B^il*CR}jccff^hO3ZPwO7_<F zSYyyKhTM~e1EVJ$dhREz(GPWWy(xmb`G(p^U;Z)I4+XsG&gyU$XLfiW;se`!hb@ro z1aki6OG)1=q{`9%0a$Ngf7rlg!mjWzn6F{q94Cq8#X~U9XIt-lVNM3#`-feJy>f4` z*gmqYpux$M)WwN*13}E{BCcyLH|U*Sz!Iry-0M1RZmaCsd{LA=WQX|k!dB&Z(4J(y z4}++vIMsaa1-T)aY4q8|VY=~*Ds{wqhjAJ-HGtueJ|b}OBfar{)C^yL2-WHE`vw_5 z(6|&U`{(iuMsQ&58BmwEQ_nTVmd5eQ4!kBS$ASTVe0@mN@@XlK3w<z`o<QZIw;FaR z=b$-lc5rLRr!-I>;;N7XJ2@f(9}mnG7_?*7kg)P%Pl{wOsh7oW5iJnM8~*er>Q;!0 zRgoAEjaVMdF+guUq?P`?OqA!_rZeYtb3&F0E!^6BfYu8iYpFTn+cAcLNaItGK9Szj zL<A~R=u8vH^}lg3=T<rz$7w*H=3kM-Xw8s5sZUK|M-(I;=8QEJHt&|S_06IL=iO3p z!krIm3+zfh9#!h55Ju*TJJ4OB=P=Vg9EX$8*;skL4g)uo;GI^Lw#->6JLvz?4;XBw z;A?1wUxjddTP&!P*xi$RD#u9v^&(N7bxXyZbKw|L*$vG^SfJ`A#FPK>DQ01EO!NJD z&b;xoVDnB)<51VWiOVpLF}0kpSxPFqM<#sbtZ*?3eok9QMSJWaP=TOIXtd{?3@6ju zm{-cS&%=4GHSzCzYWcCu@;Sj_5Y(a1QlK+}puZ^{ZTR0g-up<X9Sh)Wi0D*|H__vr zDB_n_9HKT=7T`pT>TE@eMDqG4r6+h4rAL%8Q(uEGQkCH$D}f3_HLJ0qp$~Hm;+|t) zP*ggDzYQD|zL{kx?2K*$u^$PIOF|s(vBe~>3!cXqvr|~=x*br=$1*;rvRPJu{3~_V z^$whZs>%e(55L$G^AlG0BCQV}$5Cv|Z{<>yLbX>%tBlXw!MZ~$@sm%nmX$0XVyL-K z65z0j&2wPDnck52rosr3QN5p)%2KLKbQ+8j@~#;zKpFI9-)qb=@xjpN+}J+QtNWoh zshDi_e?9C$rfN(;X?aNrae9ZgQmmoM{5<{*k+C+#BxHl)Z4D(cibrT49T}VKPx`M{ zIQ#kD4XzwaSc)0~zJh;NgKXBfn(wIhD;ggD?bt>}I(P}VQ?wd6X!&<?&UR#RTK20K z<Q(eJub885!OvMCMEQXlqkkLt{n?D%U=5}$i3o-R2W=uDx^Qnvq;QK{%~ueR(VvTF zQU^KUw<}yvz$m-B!sYm{Il*)7`thGfSRo+XpWa^}uX!=X-N-@b1VoOhBuWlk-Ab2R z*UnFj=ZH#|Wu5&NP02nNG>q#v0arY}*=}P1f~Fi-zDE9RouiohT2*_4aT)s6t6#|2 zv_-4G&!fS@^t;~ccPxwrNsDSOEB7u?{uJ#zEP4yhp4(KXX^#R>MhgddC<`;xztDWh zM$)fzV!oqU$gG!c>k3Kve|8C+(V&oQ(PHlZi=FV(?7nml?3x!WHJp#=@b(#XD_M@v zC|Lycx{i0TBB*q;10yMDh6}3h{qeKitnQR>Oq?K^ahje*`n>1-pS|M2uUJ%JOIPTR z=#?@?$D=*(K6B?jJ7H839YF4;>8{WFxQL7;=bwkZ8xbWendEVMKJYG_1Akb!bGrl> znRPbpenoZjf0%+{W}DwqX+gveFRB&GM~9pOAJpp$?q?qjzCpz0#A5NF9K4~HeaM1A zJZ(nm3NFnGvq_(qRJu#}1bI3p67lu(j?H?jen(p%GUfKNHwR6nIXpDLCxo?|Vp}sV z4Vjl&zB%BGM5aiGjL|ngz-(8}rly`3tEsHxdPuOc8mW?8f4{D)xct_+VtxSwZkpqP za^!m`)B!KW57ckWE<|6ik*wptPF-GG6!|DscKympc$+YW0rOiK*BfQ`Sv<h(vPGV5 z_y^m!k|)zPZ?=mRl9UxeZY*&~{7SfjRArgVUilHv&Lq?xL$e4I7Z$LXgz@9ysi@YQ zO`$t0O?pS3ID`+KQ?HP(M9*;#Tbw7?k+<#d@9jrZ>89ar>?&njDVH0`RH=EP!;g-k ze#1UQh{?YFHp6jP{Vph+8}~b*(iwZNR&AGwF}#pUF>yHHp&{scn3<mTEt>aCMug12 z)t*rgS7UR!Bbah$Is{!F7shmlSm4qQPWa9BBx;=R;y0JCnkvGkTt&=7YAJJ*!w#<| z=c?38V?{Gqnp6{UIXbt%B<h;iaJxKpS`i%*(T2c=Tn#OE=`5sprmf4o=(A(bG%)1Y zYO$=N>-!~2mna|Y&^Wun3SBea{a-C5`yR$A1%a1MJhk^1Xp`oi%B&Zfwbh{2chyfr zE7@kbwK}ki;-T5$G>1a{BbUNku;+AP>#Su*wFew(P4XOO2V;yKZ|oer2J5tBFN=Kv z$9eP|+38W=(NPJiR%y0JucS0gS45DZWGdKGD4kHrhIQsZX`MK9Y0!uH<?bbjkhM>O z`mJu3RoM+v`W#Sg>6Pp=LK<|4!WnRH-{$>EjNzHETovIWRusO;!tU{)m%Y-8@?^#V z&b-)UJ`YTjX<n%zEQ7j)Y4^u2E|9WYK3<_O!cv@h^sLCJ0^p^&C~mgaId-@a^x~#Z z<s(9gHx}HakClRu)=M1YxFGBU$CpqPYGjbII&wA%YB;P1=QV7WfG$Tr2l7+v=*8=h zJ`uzG@6F|ED<vnqGy(SO4H24~^r^gfwP8uZdcX&`=~o$SEx+m`D5A}WRc7)TsQKA! zsmwdvBQ#1W43+Y}$nEj?KxZ8vK=+~aaU-{ULrQR$7$ck<eE0vd{T<3RlWUhw!BbfN zB79)5Pul!tt!~!L+{;FH{-PhFfkG83Tu(we_*mgjP;9r1nbQckD)j(X66dgIi##iN z#onH^*b=i=#sRdp{k0~MC7%aQWC<tk%|z=!PGLQmw{j+mCR=9@=5WB_;$j-gleL>Y z*xqXZ7K~tAn%T>HjF>!(J|ioWYa_9$K);HREmEhgQ`#4(>Kg?!RZidht*>VXqgz;h zFN0m%DH3c>I>hv(#s8HpT{AQC>#M$}HAx=O2X6T-N4NgyUI1RdxXyoKB3Tw_6Oko@ zsI&Z^lp5N`mm>XSe+(GqZaIFrq?4s3mLhNDe<#R2W+Ls){1@vsw|0K43|<xDu(^^C zOFR7>EU0|%W3(zk(FwvFFmF8YL)~se;eKmVF>VjUN4$HLD6C>0o{FP>V1v@T=3)-% z=EbBuF0{5~&Xb;&<`FN{j?>39&F@~TY-sN7P9q9FKzpJy(L2lQ&fYW<lt^*jSNLE8 zvF=_f%~k)rhm5DhdgFF(Ov~MvaO`g+LWB6hgRW4Y4!XQi{$z{6jmIsRDpSu5Mn6@6 zNTc|UN|d6}CWe$G34wU9WHHK0c8sI=sNBQ!hH7=qdbfjr&bH?O9iWP!0q~BA(2ioK z$|AOVFFToCuIuFi<$&_cXr@yhS%XgBzkjyIzhaDnUT?43kDY(wvO3Oau4R_Vz@BQy z^vh_^eu0xw>T^s*w!kM1Coip!S3)7aNU8o_<0a<b$1B8+%ETpY3_ZZU6S?pzfO8qp zDq?~-M-(8sAttY&fPv1vNeILTtn@LWECeD@l+h)lMfqF<mPKvxPtlW@g&X#wk5_^p zM}DdT_YP+ZyI7{IHbFcPxv)`asoBq^YKMnGGVE%;25p=d)d-Tf!qLy)H_qR!<m8a; z&T<l1eK5Fd4)u^MwinR{^u`AE-D@Uh*M4l`$`aL)p5S|Se$sWpvEmaGdt(va$HvKX zrU;4TbT!^Hh2qo*@E>B2Wz*Euw4c-rcRU_52MbXy7a*zrBSjd8;A+Ns8X6d5%Zy49 zdJ6O@L}EkjFQU=4A_paC&y+SFZHx`)0czGr?e|ElDl3IC^aV>tn0Hwq#6Nb!f?U0= zY6e}1#3KmnX3C@S`T7w*FB2Re3vU*m1BRSABa}+!j}|Bz-Rf;`1%pcApj=n$E1Am6 z%N=Kmj}lt|*NKQ@5;CurS~!55dfONtvLgC#OjtCe(6Iz2KOrvsByo~L9#_oJ-hk!8 z*~165Lg`D#$ef~1xUAEC$hz0_-)STDEh7r}zvgpcgI;Ok$Jf8zunNYW7EBU(Y!mg@ z1igB&f<50T?T<_j<P{ERAiT7}TV3ZgaVAzo?X^}p`tHQR=nbc_&U0Vo@ZyRVGZVHE z>^)9vGS8TxgZ=q}-)yU=F$MaAhv&;8*5p9VGHgW;k>?uEs@!8^)U|k|2{gg_9D(!M zsyvXcT`Q$`m3phI+c`l?Sr`LTg&>^dfn0)eHX9zoL*wn}TzBj-xq}0VI~jSRl{)4? zUp>7gqBd_+G<PSk%B#Sbz9CPchBP(QiVqv3K5D+ZGJ4t^zz)m><Cr9mo>|h?+S&Os zWY0HvYX|0m=<T82xlsk;QJvg`SMtv3wIS%k=4wrILol80ULe2LJUJXBt#O>u8W98w z0ch@)gg~?#09VHB9S?-?FcyXfl4|oI1$N3*dS&6iMNl+JHRolw*2roM-Ab~^e8W_J ze_HugE<*@x$@N^ZO!Zmy!)Ei@>zH{)uXfV3m))k9F$B<fne9AF$BdR9{mI@?@bFFg zP@-xyQ{S^YwbK2XZ_GZ>sLC{9bsDtffAMUBNgX7Fn~{yZM*0&p4=9D!|5uO+{p2jv z`JFgjd|YhX{RhzyJdw%q+DFU)L69faW_OewVkBZ#>*7FQL_WO+F}MDol?c_pzFQ$5 zR!4YklP1*6CMjX;Oac#3G5^~~{8ee!emeCYhTMTvxO!CXdow1flcDW~?3`z!4;L9L z_&bU$X>{-YvpiD#MbmqqpYHgE;CS!L<zdApAjo}<t$8>gS2e?D2lhjr&GUyII@s8h zYHU{&!(ylOBLT-XGoSUkI$9Mf9IeKA0l|J<aC#h>-^l#n@Z&F~?tOkdu)F8@3+g8K zxNzb2xCSiWmvnf)SvwP)V6g#qB4pb!8z$aeW=FS}8Cy)zEFS35+X^3KbdrrcLdJJ| zMpu0J%#)HRmjUoAWZ=<7n%4BraY-V%n2X%~m!B37Nkw@q@{GRM=qTOqs{O}&oOh~N zXTp-KcL<FvY@ZLDIu(k!LJ@$0WlK65H?1|kZDMOpvM?Q_#SgVht<N3rOx03Fpcs>$ z=od612H`V96s1mjx7R)-ql@WR9FnFl2ZjmGYu0~b-y|z@dn9#PG}|zBn=-3kboCm0 zj^KgagpYW2?gJ>PX^7a6x64v>;53@|QlTd4tcP*KtpnrI3(G<6&Eeq?KOg{$+nFYw z^ixt4DW%CDJDkN={>)P$Rl32rAPkaMsa=tVo#0#Uq$pnXt&V#Q(*+X-*SV!Kd~8!< zq7%U_^9!;EA@aD*&XdPO6|s^`lH%TOYvNPp?atnjmYsG-in!RT&ujp<&}<hT*BGWY zUo_FR^C#umJ!l>QNJ~hTehkSqe5XBdNRe(eLHA*wtt>dwtb2#}j%efdG#DB?xQU>n zT`=%oe48nSp!XtdhDt0R=k7=Bp*Z8RZ#FFT!pwn5B&{)0^1k7MXM2qg6Ry)^(8C2G zgE2=gWufv&K3C2PYU@V#a5{bKF^7Lj&32Cqdb|1WT@)a3JFCvZuOK0khH({h?Y8oX zpSkkgp>mSfnLg69?6%pSXhY@umhNTue3hl!Iz1a4s7!R?b>rAjTj`^$1PKYfB#S44 z*F5$G1ucPc(itkahj%|WCAYb1so2Ge@@vwRf0(*uSFMyi<nx*BF0ON7Z*YZnBYi@= zzkkAf^n;&s+C&l3{+k=k_9L}*Z?4UoE0}n1l&|u-C$;!@6`+F;EM)7An9E;t|J%G^ z9hDdS$S%t(upDmyjg|sJrrfrBLCh=Mt`hTXG!T?~k|#O+QjrDQYYomXeD-%oO<%gp zgRSo|gMI0Bg5vL1YjygjL{gI>J)2lsINcWCERtg?TC06`?uTMEs9{ldw}$x{Du8y# z*l?v`?-82OmIWL|Ps_xfrAUN9ISs2(N|A5fqAUn-d*@A3%BNnw=;qIVh*=J^VTYN* z7)WlO$A15Wk8s)dgS4i^s^c0$3v3}1;H_8RrpOMR!lLN~!dI9@lC5!^!0N*i&Y_-C z=E%gRHWbwq>r|2KCunh}Rc<544_ju$A;ptvmzNqe!2pPE)Go(vyMoUS2K41<2^y+{ z!9CwMe6yH~5V<kvcu%Ewyv&teDQs;w7+IH>9e|JEKcTolL|fqCXe-T^G%;z;QL4h{ zK}q42l)l_n<O~P-RGi)@Lu4*6^vL^g$~jnZ9cv>o{#d^uYtf&T#j)Ub$k4a9otX|B zg*RI@=v3Yfq_Rf|<-P9<1VGVoW3#Lkr<O&&HKb0j&6&5E@>DD*X+^1{l!38e6%;ec zhOt>H<YZ>l(?kxk5h)3>e*(<+R9Mhec&pERy)QbPx(0Xi&Z%GKCE20-{c}CUenGWh zqYm7DfsU#mdA#Fk-Rd(Uoqy6Q>p-p<pNQ<=3;0s?O|G$r>~-Io8MQv3Nq5p`@K&7b zYF5s2PWuf{S6%c^2FPmT$M)FP+3r4%jxo&IEjzoAJ?iD<m5oIz$qwrM^e(DSSF~;g zY)y@2HrIq##J@Ln%qR1&r6o=SyX+xS=%1Wx`)|yuHKS&mkpNyMH^8B=V@w3G>2&4o zr$`PUun>(*9@bl9c5by)-T!2-RW@2|80p50IAB|l7@`)0N%d*LNsyKhhXhX;CwO0C z^9tiZ@^Ma)Lg%kYJlocdyG6=T{Ue(D!5_g-0kmTS6%O{t{f|`8*5{dlUeK51`e^xX zE`09}>2a$~-WkB#cpeWbaQxL;Iw@ADHu97qM1b6_gM~e`Rk=kKA6Ao8K+#j3-6z*d z;XZsO@AV$xrd)4f3%0LHskRpv3-;9kDnO)%G~88hN)Q;VoeHDS3b&jCx@g~>B+OER zk5~z*5nKvOd>%QiE!o8=Bi1HcnO@VtpEIOeNT+vcqwJj|`x?3Lku3~k<b@pd!a#WR z;=0O1w+qXqJe={UW1+Gg=B}ex;)*5*?l86L;9T>=(<2%N7gK$?@>#TwbKqLdbqZeD z=Ji$|Th34-7JJK+wd9zyS7<=)_Y6pX9C*~jcJtu{EmrHiV|GDz`O>nPxq63FLYS=Q z!O21WGjf?QoNK-j)R1Bu+kH(5k4BHu2+NE=kHA*eH-IjaS0>)CWtA5{CqPZstseWM zod@{XtWYuA139)YfAf<zp+cva`Bjo63UEHjGUF>Q>|rOzzxvz#r>X@aNKlRs^b!JV zhukUd@p?Jcx5sSkm|u{0B)D$+(u6E<-3vndA6g}=o~znP@&;|zLH6A4w28=t?Iw&i z#AVP^AHmKTr*nQL|Fqo<mlo?es2Y?W@>+S~Xl{_^piFwY#5X~Hjqz^0wmzAHbp0z2 z8itU9`lk1UEBLO4Jnk*j-Hp0L9GZLP!NZjb1cGj_u)YEbeBx+p#pl{z2G#%KfjIIL zaQh(O0Y_eRjric1;L^<t9`s)5(!yM`xgl+-UTFqI-e8il_vTTV$SgXlqI3NhIyUi= z*uK#e(~qEUl7;bHG8ur3S6rJ_N^`oSkioPr-xsCvPOY~KWj~5=Gl@~{&O|jnv^|*? z&7Bb$t$gDEAF?Jzw`3jgk23U5=0)?1)^)kG!wC`(DGWqcNCXBnY@4(8TT$CBx#7?( zP3wmm>bpCFFoh@oS8b~8${h|YDH@A39rDSqHlV5ve99_*y-31Q^d|ETbLh;}0ojLC zSgvdQLrrqp=U3DC$g@jBRPv5foK9j+!k>pLEA;EZheF06NvsID{isBoFOdLW<FvaZ zRUP{U^qA9CWzO|TA&Vd=C}ijVasdd~;@&cgEpal0!(%193>u%f;}T|UZHq<?4CEr} zaMlUfC}E&cV#Tuj|2l`XnMBV4Fldq``&CGm?gaG^pOI<cao*I-p~k+dWC=Du2gG#W z^K!dwYz7sUWrU2V&=mq+dx=Tq`VHQZGoH`<a6shnmvyzxo|)W`C0Kp+Rx^CPpKtf% z?p@^T)GKtoJ;&)Wgv+-4vWZm&m>U~G#9Y}3@LX0*b{Yh6>cDH?Z>Rb6b-cF;ee)bc zgN4X;Z(qkM%S%FbN;;~vV5gc5fE#|n<d@A<T)JU92;L?kAq)vWxm<yKLo3f~G@cLe zxO1^oTp54{1{ji+ChUFbt5B5C5mJ?I!X{V~`^D{_>3+m<tBC9y7m1LP5ytay)Smh= z4goA0Xuo#nefymD&2i1&fQBi&^`6j5;C9v9TarAAW*Hk$IvZWJa?f--9X?Kv-(Q$k z3pt0s9B}SkGr%mH^ny*Rwpmu^$di{mV`~q-s9>XEG1va93N4BU@3&Bw{wQhIKt%zm zeauyZH|>!9KwI_BuFQhSJBjXq&}o9^%~~}`!M|iuA-ta#pxjrxpx%FMRV4sDtY>y2 zKmsDf9N{wrGKmg>Cp_f&^3G`J{}+9<E=`hTxpAc$71ZSi8sFMw>V+whNl(YMi97-& z(5wf9GMYxr->3Ht<=G?DfIJn^&>H*IOv#`y?mzRI4NEFP$~aCWS;$RX1m4^&J7``V zsr{QdVqrXStaW-PFL2YoQH~Odg)3Eme86+*F$Mzp2>pAnfFC45c!-lM;UIZGtHPN} z!qf)w)R&}7t2coa`2xz*id0I^z)_D#D3}>KSgb;Ga0Mn0a0tBd-+!sE8o69pCZ@_* z+UJH40uc`*kINaDKReLvTc_0$FO+<&BLujP0KxKWsYgw?#hO}W|M|d`j;Q|mYM;f5 zR=jFs9R<Zq8V<>(|9B=6<ms6<^F)frRy~Gk+*TtETLn5(&NUQhf)j`G+Szc{h+A&6 zY%6Wa$NNv^b=^_Kf6`__Te*wfE@=nBv7iEj|7IkJw7CXSL__wFidr!}Z@o{nQLh5z zV26Gkd;T}=Ywf7e@r$PARv_nwe-3PjA1M(1$MmBBd9~SoEX-Gon#y71+v+>sq18dj z<J5l98uIh>?o{yD&g9h;SIFG1K^$wpp?oekgtVq;^j<f9t|riV7XmQ<@%s`I3aic6 z^&j@FIdcO4x3i%L+I%E`|DTZqq(j7iqOg2tPMSK&*Fh8mXqEz#g`nxrkP54J#Ch7l z63{f~D&e6aw2>D!-ct2uF>|U;d5T`~_RlOG*jy^G&VmDsB$uYZZvd0LB5bY^*rfzh zBGyIbCwm|)k^ZS_fR;z~!&#(-Cz^X2=q+H4*>v(JJa#8k5l>^m+{Z<R)~}WUFR$EL zzy-bXDI-4M*CeKYaHhKoa;rdqCQllbvh^Rkn#yyXxuGFZVspXI<R(y2VrZd-^GuV5 zJ^ul#5!gXU`I+cV?kDg)()E)bOt6bzooaVy@p(mZ4E{TP_sh==qio_BTEq>821L41 zX_s*KyFchvKXJn=LDP0%vj5n%!NGM`UQ!{0bz}CU7l{I4Y2|dP`w%ap861cQ2vYxW zDJcwK=M9UYTiJm3MdH6c3P4Q8bC=uY4ezvBV>h!go$9=kxQ6^}huG!p`!o--z9bV? z6=<3YOheL(W|Lo7Oti4si1Q1i9hTW(2fl^@u5z&$kJuPY93~&<ABO1tcWkV07l)MU z8S97%Oc+vH%ZyeL6NXP4-T&CFnazJ_c1;50rFvjA`&1%DRB(|;KGB`3t>i0SsSnSx z#%DvM|Jl~Tl|GADUE0QE;9Z^G6(Bd~pIS?y54sM_z;jYlbSzLE5ZeBJ9+CXF5Tu<{ z-~2Pz%xGwrJjcO$#rk)N2peNe)?tRa-1qrqcBUuehdeMRT4O;<Q^XxqW6JlT92sL( zoTkzfLZDRLe|IHjbl2;y5=z7j3qGE(;$~CZ95&n}fWd~Kp*#X5UL<dneRbi~Y9wYu z1)gqtc#5+6EYNl^OxX^2??m1rkP2FF3N3JQQdl1AEixYyb8Y+`syh{j6PW4sM5o-H z^%*BeSPBiOiSKKPy`&U}%!CIb$DJ-4AWa5mi~jdR)CPQ22ID}os<Ks8)Au-6lRgHj zx(L&=NJ(K7Ns0|)X!H>o)7{P`f2(W4Da$R>WV4R%Y)akk@S<V1PD$0+y2*5`8JPtz z^?-=+RN?idsc-@vJ}t2*1^7iDb=3Is!zY07a8azpt(9g^&oMVJgDJXH)<UL2esNv= zEZev+;~^~=JvNXXety(dOb(GDQ|R8JT9r5Y2n4FbCaT~9&k9Lw5$9@t*gKuiS~hgT zu#?G99**OkUbp_Pr+=Ex#@Xm7MVzC=1aGF;SV$!M%0B?UJ>RLiugr^*eGfYEzDgj8 zJfCqlXhK-7Dng*l#|O9N+Y=7npV4;2={Uk?78gTYsa!M)ueJapWJC%RE*U(PT3hEd zplHGcI~=@X7Sc02V$%s=%IE<V8ExjvXV-V!kNAqXuE5Mc+`|EqQ%;OIu<UEjQgyoD zX4MSg;hdAxrfU(}O|M4)SbrXXk+QqiSOM~+Dkk;ehKy5Am_Z+)@(TFkHcR_cMoyvc zm!K!nh%)Yr%)P6b5(IM69E%P(U@ZUJeQG!h5r5nhe})n`ZS_y^zmpk^mDw1TY9It+ zsHYu^z2QEvoNd}9MQ+Pzf2PPEh(A$@TEeIZPw-7i3Zx)~qcagsR+;c871r^i4-CUi z6r)%UD9-4jpo?6w0gG(z<#6^~o@CdtTyx^+m~3A|_BWX+zgaAn#^@!yi0Hg70Q^!K z4TJ9ZGe{D|6+ZG)a-R~Rw0%zUA(cIqs>l!(og_kF0#?dLdII;)0EYSCrL^iB-6>TT zgp4B<YDp8UhWtaiC>p<nDv+{dv-&*I&GsiUih&n0v|BTA*P=PM-FueLbfT?nXqUc> z<)Az2=DhIT2rm2|+|~U(c_C!+NP<{<<3bG^{SEK&@^RTiDUnZNbz-nr%GyJT^bfJ$ zaTw(wC2r$mF{Iytg>Dz$W<v1cg6M*Vi6(kbve^X!vx>T~$Zi`f&XzNo5~PC)9^NV3 XJkaJ^1vWm?F`?w7l)qL>n1=ix9I(;d diff --git a/doordesk/public/favicon-16x16.png b/doordesk/public/favicon-16x16.png deleted file mode 100644 index 00f369c9222947b3d6d179451e364e19231eaf57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 685 zcmV;e0#f~nP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0007XNkl<ZI8T+5 z&r4KM6vw~k&YL&t`13W6Gve4tm||%Dh=|k{A^ju>B6n>}A}Tj#^&b=zt_*^Va1%rh z)gqx5)j}bNq_!>8Y!pY!nVOgx=goWXbe}q=F-6_Qy_a+D`P}dML0Df?;iXzd5obw| zlC{~VWv%Y7gZ}cdbbse5L8x;Mj$haNJ9ZP1kFt+v7o&H;e13Cq_D+Pk>WXav{c`6+ z0^epf6Cmd!aHg9$)O-vOhn5;|b*+>%@5%*W(3hZ3^YXd261qG2Jw4DFGMI0;2PY;a zpfw?bCgZL~U#hIF7Hq<D2cUd?2No(;8ZLlI2?hP0)0^RXfBQZnaZm!<7?#-rqCPXD z_t=lv$bejKuv!K^A=TC#-=C_#7`A<;X&PRyH=+-8++zzbegTB&)8o+|rJxu_GLF=N z5m;JNu8eHkHBHlQ+LtYWbTrcAEYhIImytR#4&-S$0hEc4mcBZ96>-P>8URKs;JCB} zaP&D)7y#)p*~JXlRW9`><(E#l=ANQpYFOrKz0DT!gY<aP(S@B^1){1Qre_cGe!P?} zf{9WHw(D&VM(Tlx#U6tkq4hR84$B$nO2;A%S%9i}K~<Ho(kX}nH>_l0?Mx-%D0JV) z)Z7q+<Nd}U@o3Ai>_V?_s#38Ik)IFtltQ1KhFV<%J^Tr3)plg&Kf_g5p92tTZ35%W zs$P4!93@s+aqm9^elIt_ITExCV<snHN9_}Y7iDoUw2{Jp0sPg#@;BK%Jo_tvnP)N! z^HBViFd_?3Dts`O7NG_LBbXlRrEZvi228XU$wB%kfAMcs$8z-f3hf;mwCz6uDh@bV Tm3P+;00000NkvXXu0mjf#x6H6 diff --git a/doordesk/public/favicon-32x32.png b/doordesk/public/favicon-32x32.png deleted file mode 100644 index d8c4ccb1ef9f45dd3991183883133ecebe3cfa1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1500 zcmV<21ta>2P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000G}Nkl<ZSVzT| zTWl0n7{~u-W_EU4mR`2omKJ)U)JnLsR07g9AVfv3iGuMG10e<zK&14|#K?mQi2@HG zMq&^jBuWt_7!y%6O0g!SMTK?|3$%a&+w0Pn-MQ>Jelw-*(i`m(<RrVZbIzIhe)Ios zvkZfbU@+*8L|76M2HVj)9~FYv*VHsESg^p1-L04T-xLCy)b`sxwy!GGy>@67<W=M5 zCbM0YEo`9M*I#ei!x(#=*5rGe@7WQQgtR&*EA?k<MgUCT>aSy9nGV*L$=?67)1Kc{ z=+vFrN67G#4o&3t1Gsptu}D#*^R#zBxO)Jd$QzTk$l9Zq&YJ^Cu7nVut2<7<*kfGH z{)#ayW<q?YRLM*G8EFW%lz@wqBY5)It+fO&*_w!y`8P^nyE*5}Tsteixx6Odm7O;3 z2xHP>266mG)Lfaft1@f@h>vDDkZO#BELh{j?Zx4=IbXyH5Fmg__B~fkR>L_dzQmoU zezO%R^Y157*OG6(zsZdimT_yIiE^Kx4&@|xrcFM2GJ?~0#buuYE|8zq1<-dGr6r}D zu^B2i*HiG>#=8Ix`!3Mok?skDxpCvM0}zq|D2ev8)Nuveo!hlVa5%0VhnY5=790>R zZ;UN*G;fS|<#6c5mbnQ~b=3mk1VC;PmEhQBbhH*~;qV@aD73s45OM-smkvT7`xMNi zBB(chf!cb8mQ5Jxv(Y~9LmNT}aY2?HOL8)j>xKd_%1Y)7uyy47<wCF)0+>Y^V-3EJ zJ%47uI5fS4Hk_o?h7oF}8*`}1UKky1;D!d-H3|-QDgi_h)jFVsTEJZyki$)j+?$(E z3}sxr1Ig&{x6=bB3Wx?tu-&}?Osr+kRUfbbASpv;0e2*UCuCb51UGdXjAzf^7%6zQ zx-WpDD8ev|Hm}!fr8bOG|3Y%SrtGLVMJk9v0R)f2Xm7EfmdOgap3ZNzKulPP+f(1N z{XfES)Z_8=i;qD8qLJH(G+l+$lSQ$Z1T#!>H~#};@z)UPz7g8K<7Cb!krIK}i$@Hg zulNy2E{qF+F7lHK6%P%-RbRe2;qSd?!6eE&)UwrQ8b_|c@*jYdqPP@rS8ahKbguha zDn`+lVgc4u7VPWJg27_IeBuM}{AE1=QutqLdu@<!U7%XAq$@b7B+8*$L{q3O&~K&% zDeyT)pWXn;q%7<iqM^4C0p}phtyBUhK$7+j2H?n=3a$8Em?=}KLe^tcU^^5#LUkZ2 zXTnIG0lDK6&7FtgnG41vaI{uazENX#$}ga^GeD5<Q3^k8(NQm$b)M4s(OxL4lQRqk z;7l6}CBaQSMW$`!%Jftq!D(NEPEs`-0UV@)o62~ogA}3pWOvu?8S}H^V-@1dnd|65 zKeng(HX}>2djh18(bQxzMEydRMiLKq0DNmml22>^>&tG(8OS9U$S_$ky-0jEqyniP zU<}oNU59qL4r+b@B&Q2p)1cSW`S?OesuMgCf!=Tt&VnK^OBG7PE(Q7k#6CiI5L(Sf zYr9E(Ae}0+N+s8T9tzTV1|;_=8z9=+f=JCDa88^8#hVVZxd~d}ES!_3LGh%)Yz#vC zs|Kzq6c?6i!vZ)wvzQ!rdPrSe>H`EgMA0Srj*)ks>2^^+m<I{aZA=`QmH~~r&_H9X z=W!$^mOl^|3@4<;>80~2Q+|pY;IMB4DZHmA3x;F#u0V|!pf$7&x7x2#4S1XGNAGxo z$Mf!wxD~kG2xvxZDXxA<09LibS!xU~|GxlHb0KO2zoK0c?2S6@zGHx1_Ml(63^gYo zOjRKaozCl_=8m^3AJ;V)R~w+_6@V#rLfMrtHlE^Bp!(TjaCzurHBe;p=u9^I+u!dW zfLc7NmeF4=yh5LWYsFmvg8sI%Pf>jAHS0|{cIiJ6w~8h@DO^eb0000<MNUMnLSTaR C=eBtO diff --git a/doordesk/public/favicon.ico b/doordesk/public/favicon.ico deleted file mode 100644 index 49f6a82cdb5002a6a7a0e2b2dc48f53a06a78a83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 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 diff --git a/doordesk/public/site.webmanifest b/doordesk/public/site.webmanifest deleted file mode 100644 index 45dc8a2..0000000 --- a/doordesk/public/site.webmanifest +++ /dev/null @@ -1 +0,0 @@ -{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/doordesk/public/static/blog/20220207-swim.md b/doordesk/public/static/blog/20220207-swim.md deleted file mode 100644 index 5836b46..0000000 --- a/doordesk/public/static/blog/20220207-swim.md +++ /dev/null @@ -1,142 +0,0 @@ -```toml -content_type = "blog" -title = "Hume" -date = "2022 2 7" -``` - -<p style="text-align: right;"> - April 22, 1958<br /> - 57 Perry Street<br /> - New York City<br /> -</p> -Dear Hume, - -You ask advice: ah, what a very human and very dangerous thing to do! For to give advice -to a man who asks what to do with his life implies something very close to egomania. To -presume to point a man to the right and ultimate goal—to point with a trembling -finger in the RIGHT direction is something only a fool would take upon himself. - -I am not a fool, but I respect your sincerity in asking my -advice. I ask you though, in listening to what I say, to remember that all advice can -only be a product of the man who gives it. What is truth to one may be a disaster to -another. I do not see life through your eyes, nor you through mine. If I were to attempt -to give you -*specific* advice, it would be too much like the blind leading the blind. -<p style="text-align: center;"> - <i> "To be, or not to be: that is the question: Whether 'tis nobler in the mind to - suffer the slings and arrows of outrageous fortune, or to take arms against a sea of - troubles..." </i> - <br /> - (Shakespeare) -</p> -And indeed, that IS the question: whether to float with the tide, or to swim for a goal. -It is a choice we must all make consciously or unconsciously at one time in our lives. -So few people understand this! Think of any decision you've ever made which had a -bearing on your future: I may be wrong, but I don't see how it could have been anything -but a choice however indirect—between the two things I've mentioned: the floating -or the swimming. - -But why not float if you have no goal? That is another question. -It is unquestionably better to enjoy the floating than to swim in uncertainty. So how -does a man find a goal? Not a castle in the stars, but a real and tangible thing. How -can a man be sure he's not after the "big rock candy mountain," the enticing sugar-candy -goal that has little taste and no substance? - -The answer—and, in a sense, the tragedy of life—is -that we seek to understand the goal and not the man. We set up a goal which demands of -us certain things: and we do these things. We adjust to the demands of a concept which -CANNOT be valid. When you were young, let us say that you wanted to be a fireman. I feel -reasonably safe in saying that you no longer want to be a fireman. Why? Because your -perspective has changed. It's not the fireman who has changed, but you. Every man is the -sum total of his reactions to experience. As your experiences differ and multiply, you -become a different man, and hence your perspective changes. This goes on and on. Every -reaction is a learning process; every significant experience alters your perspective. - -So it would seem foolish, would it not, to adjust our lives to -the demands of a goal we see from a different angle every day? How could we ever hope to -accomplish anything other than galloping neurosis? - -The answer, then, must not deal with goals at all, or not with -tangible goals, anyway. It would take reams of paper to develop this subject to -fulfillment. God only knows how many books have been written on "the meaning of man" and -that sort of thing, and god only knows how many people have pondered the subject. (I use -the term "god only knows" purely as an expression.) There's very little sense in my -trying to give it up to you in the proverbial nutshell, because I'm the first to admit -my absolute lack of qualifications for reducing the meaning of life to one or two -paragraphs. - -I'm going to steer clear of the word "existentialism," but you -might keep it in mind as a key of sorts. You might also try something called -<i>Being and Nothingness</i> by Jean-Paul Sartre, and another little thing called -<i>Existentialism: From Dostoyevsky to Sartre.</i> These are merely suggestions. If -you're genuinely statisfied with what you are and what you're doing, then give those -books a wide berth. (Let sleeping dogs lie.) But back to the answer. As I said, to put -our faith in tangible goals would seem to be, at best, unwise. So we do not strive to be -firemen, we do not strive to be bankers, nor policemen, nor doctors. WE STRIVE TO BE -OURSELVES. - -But don't misunderstand me. I don't mean that we can't BE -firemen, bankers, or doctors—but that we must make the goal conform to the -individual, rather than make the individual conform to the goal. In every man, heredity -and environment have combined to produce a creature of certain abilities and -desires—including a deeply ingrained need to function in such a way that his life -will be MEANINGFUL. A man has to BE something; he has to matter. - -As I see it then, the formula runs something like this: a man -must choose a path which will let his ABILITIES function at maximum efficiency toward -the gratification of his DESIRES. In doing this, he is fulfilling a need (giving himself -identity by functioning in a set pattern toward a set goal) he avoids frustrating his -potential (choosing a path which puts no limit on his self-development), and he avoids -the terror of seeing his goal wilt or lose its charm as he draws closer to it (rather -than bending himself to meet the demands of that which he seeks, he has bent his goal to -conform to his own abilities and desires). - -In short, he has not dedicated his life to reaching a -pre-defined goal, but he has rather chosen a way of like he KNOWS he will enjoy. The -goal is absolutely secondary: it is the -<i>functioning toward the goal</i> which is important. And it seems almost ridiculous to -say that a man MUST function in a pattern of his own choosing; for to let another man -define your own goals is to give up one of the most meaningful aspects of life—the -definitive act of will which makes a man an individual. - -Let's assume that you think you have a choice of eight paths to -follow (all pre-defined paths, of course). And let's assume that you can't see any real -purpose in any of the eight. Then—and here is the essence of all I've -said—you MUST FIND A NINTH PATH. - -Naturally, it isn't as easy as it sounds. you've lived a -relatively narrow life, a vertical rather than a horizontal existence. So it isn't any -too difficult to understand why you seem to feel the way you do. But a man who -procrastinates in his CHOOSING will inevitably have his choice made for him by -circumstance. - -So if you now number yourself among the disenchanted, then you -have no choice but to accept things as they are, or to seriously seek something else. -But beware of looking for -<i>goals</i>: look for a way of life. Decide how you want to live and then see what you -can do to make a living WITHIN that way of life. But you say, "I don't know where to -look; I don't know what to look for." - -And there's the crux. Is it worth giving up what I have to look -for something better? I don't know—is it? Who can make that decision but you? But -even by DECIDING TO LOOK, you go a long way toward making the choice. - -If I don't call this to a halt, I'm going to find myself writing -a book. I hope it's not as confusing as it looks at first glance. Keep in mind, of -course, that this is MY WAY of looking at things. I happen to think that it's pretty -generally applicable, but you may not. Each of us has to create our own credo—this -merely happens to be mine. - -If any part of it doesn't seem to make sense, by all means call -it to my attention. I'm not trying to send you out "on the road" in search of Valhalla, -but merely pointing out that it is not necessary to accept the choices handed down to -you by life as you know it. There is more to it than that—no one HAS to do -something he doesn't want to do for the rest of his life. But then again, if that's what -you wind up doing, by all means convince yourself that you HAD to do it. You'll have -lots of company. - -And that's it for now. Until I hear from you again, I remain, -<p style="text-align: right;"> - your friend...<br /> - Hunter -</p> diff --git a/doordesk/public/static/blog/20220506-change.md b/doordesk/public/static/blog/20220506-change.md deleted file mode 100644 index 63f8934..0000000 --- a/doordesk/public/static/blog/20220506-change.md +++ /dev/null @@ -1,53 +0,0 @@ -```toml -content_type = "blog" -title = "Change" -date = "2022 5 6" -``` - -<p style="text-align: center;"> - <i>"Life should not be a journey to the grave with the intention of arriving safely in - a pretty and well preserved body, but rather to skid in broadside in a cloud of - smoke, thoroughly used up, totally worn out, and loudly proclaiming "Wow! What a - Ride!"</i> - <br /> - (Hunter S.Thompson) -</p> - -There comes a time in one's life, perhaps multiple, when there -is an unquestionable need for change. Maybe you're not sure how, why, or where it came -from, or where even it is you're headed, or how to get there, but here you are taking -your first steps toward a new life. A journey into the unknown. I've just set out on one -of these journeys, and even as I sit here typing this now I can't help but feel a little -bit nervous, but even more excited. I have absolutely no idea where I'm headed to be -quite honest. But I know where I've been. - -Growing up I would always be taking things apart, I HAD to see -what was inside. What makes this thing, a thing. What makes it tick? Can it tick faster? -For no particular reason I just had to know every little detail about what made the -thing the thing that it was and why it did what it did. It's a gift and a curse of -sorts. Quickly this led to taking apart things of increasing complexity, our home -computer for instance. Luckily I was able to get it put back together before my parents -got home because it was made clear that this was not allowed, and the CPU didn't seem to -mind the sudden absence of thermal compound either. I must have been around 7 or 8 years -old at that time, and it still puzzles me just what is going on inside there. - -I have a better idea now, naturally I had to figure out just -what all those pieces were, what they did, and how they did it. What if I replaced some -of these parts with other parts? As I honed my web searching skills to try to answer the -seemingly endless hows and whys I ended up building myself a little hotrod computer and -then raced it against other peoples' computers because why not, right? And I actually -won! It was an overclocking contest called the winter suicides, a kind of computer drag -race. Highest CPU clock speed wins, you have to boot into Windows XP, open CPU-Z, and -take a screenshot. If it crashes immediately after that (and it did) it still counts. I -got some pretty weird looks from my father as I stuck my computer outside in the snow -but that was a small price to pay for the grand prize which was a RAM kit (2GB of DDR400 -I believe) and RAM cooler. - -After getting comfortable with hardware I started to study the -software side of things, I tried teaching myself C++ (and didn't get very far), I did -teach myself HTML and CSS, some JavaScript, and started playing around with Linux. It -took until only a year or two ago to finally be completely on Linux full time (gaming -holding me back), I even have a Linux phone now (Pinephone Pro). At this point I reached -high school and my attention moved from computers to cars. - -To be continued... diff --git a/doordesk/public/static/blog/20220520-nvidia.md b/doordesk/public/static/blog/20220520-nvidia.md deleted file mode 100644 index e6b8006..0000000 --- a/doordesk/public/static/blog/20220520-nvidia.md +++ /dev/null @@ -1,14 +0,0 @@ -```toml -content_type = "blog" -title = "It's about time, NVIDIA" -date = "2022 5 20" -``` - -It's about time... NVIDIA has finally released and is starting to -support Open-source software with their new modules released recently for the Linux -kernel. NVIDIA historically has been seemingly against Linux/OSS for whatever reason. -This is a huge step forward both for end users and NVIDIA. -<p style="text-align: center;"> - <a href="https://github.com/NVIDIA/open-gpu-kernel-modules"> - NVIDIA open-gpu-kernel-modules</a > on github. -</p> diff --git a/doordesk/public/static/blog/20220602-back.md b/doordesk/public/static/blog/20220602-back.md deleted file mode 100644 index 38ae3ca..0000000 --- a/doordesk/public/static/blog/20220602-back.md +++ /dev/null @@ -1,41 +0,0 @@ -```toml -content_type = "blog" -title = "Back to School" -date = "2022 6 2" -``` - -### Where the hell have I been!? - -Looking back at the past 5 weeks, it's impressive the amount of new things that have -been shoved in my face. A list I'll try to make contains: - -- [Python](https://www.python.org) -- [Pandas](https://pandas.pydata.org) -- [Matplotlib](https://matplotlib.org) -- [Seaborn](https://seaborn.pydata.org) -- [Statsmodels](https://www.statsmodels.org) -- [Scikit-Learn](https://scikit-learn.org) -- [Beautiful Soup](https://www.crummy.com/software/BeautifulSoup) -- [Selenium](https://www.selenium.dev) -- [PRAW](https://github.com/praw-dev/praw) -- Plus the math and background to go with it all! - -It doesn't seem like much at the time except chaos, but then about a week later it -finally sets in. After tomorrow we'll be halfway through the course and while I guess -you could say that it's half over, or that it signifies progress, I feel it's more like -being halfway up Mount Everest and looking—trying to squint through the clouds and -make out what looks like the peak. I don't see a peak and maybe it's because I'm -nearsighted but I can also tell you that if were to look down then I can't see where -I've started either! - -It's been quite a ride and I hope to see it to the end. I don't have time to even think -about it further. It's where I perform my best though, on my heels. Probably by -design... - -### After? - -I would like to use these skills to expand on some of the class projects I've worked on -and I have some other ideas using language processing I think would be fun to play with. -I think it would be fun to create an internet chat bot, we'll start with text but if -speech recognition is practical then I may add and play with that too. I would also like -to make some sort of "Propaganda Detector" diff --git a/doordesk/public/static/blog/20220701-progress.md b/doordesk/public/static/blog/20220701-progress.md deleted file mode 100644 index 692cc0b..0000000 --- a/doordesk/public/static/blog/20220701-progress.md +++ /dev/null @@ -1,87 +0,0 @@ -```toml -content_type = "blog" -title = "It's a post about nothing!" -date = "2022 7 1" -``` - -The progress update - -<p style='text-align: center;'> - <img src="https://old.doordesk.net/pics/plates.gif" /> -</p> - -### Bots - -After finding a number of ways not to begin the project formerly known as my capstone, -I've finally settled on a -[dataset](https://www.kaggle.com/datasets/bwandowando/ukraine-russian-crisis-twitter-dataset-1-2-m-rows). The project is about detecting bots, starting with twitter. I've -[studied](https://old.doordesk.net/projects/bots/docs/debot.pdf) a -[few](https://old.doordesk.net/projects/bots/docs/botwalk.pdf) -[different](https://old.doordesk.net/projects/bots/docs/smu.pdf) -[methods](https://old.doordesk.net/projects/bots/docs/div.pdf) of bot detection and particularly like the -[DeBot](https://old.doordesk.net/projects/bots/docs/debot.pdf) and -[BotWalk](https://old.doordesk.net/projects/bots/docs/botwalk.pdf) methods and think I will try to mimic them, -in that order. - -Long story short, DeBot uses a fancy method of time correlation to group accounts -together based on their posting habits. By identifying accounts that all have identical -posting habits that are beyond what a human could do by coincidence, this is a great -first step to identifying an inital group of seed bots. This can then be expanded by -using BotWalk's method of checking all the followers of the bot accounts and comparing -anomalous behavior to separate humans from non-humans. Rinse and repeat. I'll begin this -on twitter but hope to make it platform independent. - -### The Real Capstone - -The bot project is too much to complete in this short amount of time, so instead I'm -working with a -[small dataset](https://archive-beta.ics.uci.edu/ml/datasets/auto+mpg) -containing info about cars with some specs and I'll predict MPG. The problem itself for -me is trivial from past study/experience as an auto mechanic so I should have a nice -playground to focus completely on modeling. It's a very small data set too at < 400 -lines, I should be able to test multiple models in depth very quickly. It may or may not -be interesting, expect a write-up anyway. - -### Cartman - -Well I guess I've adopted an 8 year old. Based on -[this project](https://github.com/RuolinZheng08/twewy-discord-chatbot) -I've trained a chat bot with the personality of Eric Cartman. He's a feature of my -Discord bot living on a Raspberry Pi 4B, which I would say is probably the slowest -computer you would ever want to run something like this on. It takes a somewhat -reasonable amount of time to respond, almost feeling human if you make it think a bit. -The project uses [PyTorch](https://pytorch.org/) to train the model. I'd like -to re-create it using [TensorFlow](https://www.tensorflow.org/) as an -exercise to understand each one better, but that's a project for another night. It also -only responds to one line at a time so it can't carry a conversation with context, -yet... - -### Website - -I never thought I'd end up having a blog. I had no plans at all actually when I set up -this server, just to host a silly page that I would change from time to time whenever I -was bored. I've been looking at -[Hugo](https://gohugo.io/) as a way to organize what is now just a list of -divs in a single html file slowly growing out of control. Basically you just dump each -post into its own file, create a template of how to render them, and let it do its -thing. I should be able to create a template that recreates exactly what you see right -now, which is beginning to grow on me. - -If you haven't noticed yet, (and I don't blame you if you haven't because only a handful -of people even visit this page) each time there is an update there is a completely new -background image, color scheme, a whole new theme. This is because this page is a near -identical representation of terminal windows open my computer and each time I update the -page I also update it with my current wallpaper, which generates the color scheme -dynamically using -[Pywal](https://github.com/dylanaraps/pywal). - -TODO: -* Code blocks with syntax highlighting -* Develop an easy workflow to dump a jupyter notebook into the website and have it display nicely with minimal effort -* Find a way to hack plots generated with matplotlib to change colors with the page color scheme (or find another way to do the same thing) -* Automate generating the site - probably [Hugo](https://gohugo.io/) -* Separate from blog, projects, etc. -* Add socials, contact, about -* A bunch of stuff I haven't even thought of yet - -That's all for now diff --git a/doordesk/public/static/bots/cartman.html b/doordesk/public/static/bots/cartman.html deleted file mode 100644 index 2755d2d..0000000 --- a/doordesk/public/static/bots/cartman.html +++ /dev/null @@ -1 +0,0 @@ -cartman diff --git a/doordesk/public/static/games/adam.md b/doordesk/public/static/games/adam.md deleted file mode 100644 index 2963722..0000000 --- a/doordesk/public/static/games/adam.md +++ /dev/null @@ -1,8 +0,0 @@ -```toml -content_type = "game" -title = "adam" -date = "2022 9 11" -``` - -[adam](https://old.doordesk.net/games/adam/) is a quick fps demo to test how well WebGL -performs using [Unity](https://unity.com). diff --git a/doordesk/public/static/games/balls.md b/doordesk/public/static/games/balls.md deleted file mode 100644 index e19f109..0000000 --- a/doordesk/public/static/games/balls.md +++ /dev/null @@ -1,8 +0,0 @@ -```toml -content_type = "game" -title = "balls" -date = "2022 9 13" -``` - -[balls](https://old.doordesk.net/games/balls/) is another demo to test WebGL performance. -This time using [Godot Engine](https://godotengine.org/). diff --git a/doordesk/public/static/games/fps.md b/doordesk/public/static/games/fps.md deleted file mode 100644 index 4642d91..0000000 --- a/doordesk/public/static/games/fps.md +++ /dev/null @@ -1,8 +0,0 @@ -```toml -content_type = "game" -title = "fps" -date = "2022 10 9" -``` - -[fps](https://old.doordesk.net/games/fps/) is a Godot/WebGL experiment from scratch with -multiplayer using websockets and a master/slave architecture. Invite a friend or open multiple instances! diff --git a/doordesk/public/static/games/index.html b/doordesk/public/static/games/index.html deleted file mode 100644 index 68a671e..0000000 --- a/doordesk/public/static/games/index.html +++ /dev/null @@ -1,23 +0,0 @@ -<h3>Some games using wasm/webgl</h3> -<p>Browser performance as of January 2023</p> -<p>Tested better:</p> -<ol> - <li>Opera</li> - <li>Firefox Developer Edition</li> - <li>Brave</li> -</ol> -<p>Tested poor or broken:</p> -<ol> - <li>Safari</li> - <li>Chrome stable release or older</li> - <li>Edge, see above^</li> -</ol> -<p>Consider anything else average or let me know otherwise</p> -<ul> - ---MY GAMES--- - <li><a href="https://old.doordesk.net/games/adam">adam</a> - The first. Unity Demo/Tutorial with some mods</li> - <li><a href="https://old.doordesk.net/games/fps">multiplayer fps</a> - Dive into netcode with Godot (Open two, invite - your friends!)</li> - <li><a href="https://old.doordesk.net/games/../snek">snek</a> - Canvas + JS (the actual first)</li> - <li><a href="https://old.doordesk.net/games/balls">balls</a> - Godot demo engine test</li> -</ul> diff --git a/doordesk/public/static/games/snek.md b/doordesk/public/static/games/snek.md deleted file mode 100644 index 9b6186a..0000000 --- a/doordesk/public/static/games/snek.md +++ /dev/null @@ -1,7 +0,0 @@ -```toml -content_type = "game" -title = "snek" -date = "2022 5 20" -``` - -[snek](https://old.doordesk.net/snek) is a simple snake game made with JS/Canvas. diff --git a/doordesk/public/static/projects/20220529-housing.md b/doordesk/public/static/projects/20220529-housing.md deleted file mode 100644 index 385879a..0000000 --- a/doordesk/public/static/projects/20220529-housing.md +++ /dev/null @@ -1,114 +0,0 @@ -```toml -content_type = "project" -title = "Predicting Housing Prices" -date = "2022 5 29" -``` - -A recent project I had for class was to use [scikit-learn](https://scikit-learn.org/stable/index.html) to create a regression model that will predict the price of a house based on some features of that house. - -### How? - -1 Pick out and analyze certain features from the dataset. Used here is the [Ames Iowa Housing Data](https://www.kaggle.com/datasets/marcopale/housing) set. -1 Do some signal processing to provide a clearer input down the line, improving accuracy -1 Make predictions on sale price -1 Compare the predicted prices to recorded actual sale prices and score the results - -### What's important? - -Well, I don't know much about appraising houses. But I have heard the term "price per -square foot" so we'll start with that: - -<p style="text-align: center;"><img src="https://old.doordesk.net/pics/livarea_no_outliers.png" /></p> - -There is a feature for 'Above Grade Living Area' meaning floor area that's not basement. -It looks linear, there were a couple outliers to take care of but this should be a good -signal. - -Next I calculated the age of every house at time of sale and plotted it: - -<p style="text-align: center;"><img src="https://old.doordesk.net/pics/age.png" /></p> - -Exactly what I'd expect to see. Price drops as age goes up, a few outliers. We'll -include that in the model. - -Next I chose the area of the lot: - -<p style="text-align: center;"><img src="https://old.doordesk.net/pics/lot_area.png" /></p> - -Lot area positively affects sale price because land has value. Most of the houses here -have similarly sized lots. - -### Pre-Processing -<div> - <p> - Here is an example where using - <a - href="https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html" - target="new" - >StandardScaler()</a - > - just doesn't cut it. The values are all scaled in a way where they can be compared - to one-another, but outliers have a huge effect on the clarity of the signal as a - whole. - </p> - <span> - <center> - <img src="https://old.doordesk.net/pics/age_liv_area_ss.png" /> - <img src="https://old.doordesk.net/pics/age_liv_qt.png" - </center> - </span> -</div> - -You should clearly see in the second figure that an old shed represented in the top left -corner will sell for far less than a brand new mansion represented in the bottom right -corner. This is the result of using the [QuantileTransformer()](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.QuantileTransformer.html) -for scaling. - -### The Model - -A simple [LinearRegression()](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html) -should do just fine, with [QuantileTransformer()](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.QuantileTransformer.html) -scaling of course. - -<center> - <img src="https://old.doordesk.net/pics/mod_out.png" /> -</center> - -Predictions were within about $35-$40k on average. - -It's a little fuzzy in the higher end of prices, I believe due to the small sample size. -There are a few outliers that can probably be reduced with some deeper cleaning however -I was worried about going too far and creating a different story. An "ideal" model in -this case would look like a straight line. - -### Conclusion - -This model was designed with a focus on quality and consistency. With some refinement, -the margin of error should be able to be reduced to a reasonable number and then -reliable, accurate predictions can be made for any application where there is a need to -assess the value of a property. - -I think a large limiting factor here is the size of the dataset compared to the quality -of the features provided. There are -<a href="http://jse.amstat.org/v19n3/decock/DataDocumentation.txt">more features</a> -from this dataset that can be included but I think the largest gains will be had from -simply feeding in more data. As you stray from the "low hanging fruit" features, the -quality of your model overall starts to go down. - -Here's an interesting case, Overall Condition of Property: - -<center> - <img src="https://old.doordesk.net/pics/overall_cond.png" /> -</center> - -You would expect sale price to increase with quality, no? Yet it goes down.. Why? - -I believe it's because a lot of sellers want to say that their house is of highest -quality, no matter the condition. It seems that most normal people (who aren't liars) -dont't care to rate their property and just say it's average. Both of these combined -actually create a negative trend for quality which definitely won't help predictions! - -I would like to expand this in the future, maybe scraping websites like Zillow to gather -more data. - -We'll see. diff --git a/doordesk/public/static/projects/20220614-reddit.md b/doordesk/public/static/projects/20220614-reddit.md deleted file mode 100644 index 92bcc7d..0000000 --- a/doordesk/public/static/projects/20220614-reddit.md +++ /dev/null @@ -1,109 +0,0 @@ -```toml -content_type = "project" -title = "What goes into a successful Reddit post?" -date = "2022 6 16" -``` - -In an attempt to find out what about a Reddit post makes it successful I will use some -classification models to try to determine which features have the highest influence on -making a correct prediction. In particular I use -[Random Forest](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html) -and -[KNNeighbors](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html) -classifiers. Then I'll score the results and see what the highest predictors are. - -To find what goes into making a successful Reddit post we'll have to do a few things, -first of which is collecting data: - -### Introducing Scrapey! - -[Scrapey](https://old.doordesk.net/projects/reddit/scrapey.html) is my scraper script that takes a snapshot -of Reddit/r/all hot and saves the data to a .csv file including a calculated age for -each post about every 12 minutes. Run time is about 2 minutes per iteration and each -time adds about 100 unique posts to the list while updating any post it's already seen. - -I run this in the background in a terminal and it updates my data set every ~12 minutes. -I have records of all posts within about 12 minutes of them disappearing from /r/all. - -### EDA - -[Next I take a quick look to see what looks useful](https://old.doordesk.net/projects/reddit/EDA.html), what -doesn't, and check for outliers that will throw off the model. There were a few outliers -to drop from the num_comments column. - -Chosen Features: - -* Title -* Subreddit -* Over_18 -* Is_Original_Content -* Is_Self -* Spoiler -* Locked -* Stickied -* Num_Comments (Target) - -Then I split the data I'm going to use into two dataframes (numeric and non) to prepare -for further processing. - -### Clean - -[Cleaning the data further](https://old.doordesk.net/projects/reddit/clean.html) consists of: - -* Scaling numeric features between 0-1 -* Converting '_' and '-' to whitespace -* Removing any non a-z or A-Z or whitespace -* Stripping any leftover whitespace -* Deleting any titles that were reduced to empty strings - -### Model - -If the number of comments of a post is greater than the median total number of comments -then it's assigned a 1, otherwise a 0. This is the target column. I then try some -lemmatizing, it doesn't seem to add much. After that I create and join some dummies, -then split and feed the new dataframe into -[Random Forest](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html) -and [NNeighbors](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html) -classifiers. Both actually scored the same with -[cross validation](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_validate.html) -so I mainly used the forest. - -[Notebook Here](https://old.doordesk.net/projects/reddit/model.html) - -### Conclusion - -Some Predictors from Top 25: - -* Is_Self -* Subreddit_Memes -* OC -* Over_18 -* Subreddit_Shitposting -* Is_Original_Content -* Subreddit_Superstonk - - Popular words: 'like', 'just', 'time', 'new', 'oc', 'good', 'got', 'day', 'today', 'im', - 'dont', and 'love'. - - People on Reddit (at least in the past few days) like their memes, porn, and talking - about their day. And it's preferred if the content is original and self posted. So yes, - post your memes to memes and shitposting, tag them NSFW, use some words from the list, - and rake in all that sweet karma! - - But it's not that simple, this is a fairly simple model, with simple data. To go beyond - this I think the comments would have to be analyzed. - [Lemmatisation](https://en.wikipedia.org/wiki/Lemmatisation) I thought would - be the most influential piece, and I still think that thinking is correct. But in this - case it doesn't apply because there is no real meaning to be had from reddit post - titles, at least to a computer. (or I did something wrong) - - There's a lot more seen by a human than just the text in the title, there's often an - image attached, most posts reference a recent/current event, they could be an inside - joke of sorts. For some posts there could be emojis in the title, and depending on their - combination they can take on a meaning completely different from their individual - meanings. The next step from here I believe is to analyze the comments section of these - posts because in this moment I think that's the easiest way to truly describe the - meaning of a post to a computer. With what was gathered here I'm only to get 10% above - baseline and I think that's all there is to be had here, I mean we can tweak for a few - percent probably but I don't think there's much left on the table. - diff --git a/doordesk/public/static/projects/20221020-cartman.md b/doordesk/public/static/projects/20221020-cartman.md deleted file mode 100644 index 4ed09af..0000000 --- a/doordesk/public/static/projects/20221020-cartman.md +++ /dev/null @@ -1,32 +0,0 @@ -```toml -content_type = "project" -title = "Cartman is public!" -date = "2022 10 20" -``` - -[Cartman](https://old.doordesk.net/cartman) is trained by combining Microsoft's -[DialoGPT-medium](https://huggingface.co/microsoft/DialoGPT-medium) -NLP model (GPT2 model trained on 147M samples of multi-turn dialogue from Reddit) with 17 seasons of -[South Park](https://southparkstudios.com) -transcripts. - -Requests are routed from -[Nginx](https://nginx.com) -through -[WireGuard](https://www.wireguard.com) -to a -[Raspberry Pi 4B 8GB](https://www.tomshardware.com/news/raspberry-pi-4-8gb-tested) running -[FastAPI](https://fastapi.tiangolo.com), -and the Cartman model using [PyTorch](https://pytorch.org). -It has enough RAM for more, but the CPU is pretty much at its limit. Expect it to take a few -seconds, I'm cheap. Sorry(kinda). - -You can download a Docker image if you'd like to run it on your own hardware for either -[x86_64](https://old.doordesk.net/files/chatbots_api_x86_64.tar.gz) -or -[aarch64](https://old.doordesk.net/files/chatbots_api_aarch64.tar.gz). - -More info [here](https://github.com/adoyle0/cartman) as well as -[example scripts](https://github.com/adoyle0/cartman/tree/master/api/test) -to talk to the docker container. - diff --git a/doordesk/public/static/projects/20230427-lightning.md b/doordesk/public/static/projects/20230427-lightning.md deleted file mode 100644 index 8b2f2e1..0000000 --- a/doordesk/public/static/projects/20230427-lightning.md +++ /dev/null @@ -1,12 +0,0 @@ -```toml -content_type = "project" -title = "Lightning" -date = "2023 4 27" -``` - -[Lightning](https://lightning.doordesk.net) is a mapping/data vis project for finding -EV charging stations. It uses [Martin](https://github.com/maplibre/martin) to serve -tiles generated from [OpenStreetMap](https://www.openstreetmap.org) data to a - [MapLibre](https://maplibre.org/) frontend. Additional layers are added on top -via [Deck.gl](https://deck.gl) using data from [EVChargerFinder](https://github.com/kevin-fwu/EVChargerFinder) made by my friend -Kevin. diff --git a/doordesk/rust-toolchain.toml b/doordesk/rust-toolchain.toml deleted file mode 100644 index 271800c..0000000 --- a/doordesk/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "nightly" \ No newline at end of file diff --git a/doordesk/rustfmt.toml b/doordesk/rustfmt.toml deleted file mode 100644 index 3a26366..0000000 --- a/doordesk/rustfmt.toml +++ /dev/null @@ -1 +0,0 @@ -edition = "2021" diff --git a/doordesk/server/Cargo.toml b/doordesk/server/Cargo.toml deleted file mode 100644 index 1ba9c36..0000000 --- a/doordesk/server/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "server" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -app = { path = "../app", default-features = false, features = ["ssr"] } -leptos = { workspace = true, features = [ "ssr" ]} -leptos_axum.workspace = true - -axum.workspace = true -simple_logger.workspace = true -tokio.workspace = true -tower.workspace = true -tower-http.workspace = true -log.workspace = true diff --git a/doordesk/server/src/fileserv.rs b/doordesk/server/src/fileserv.rs deleted file mode 100644 index 836c7c7..0000000 --- a/doordesk/server/src/fileserv.rs +++ /dev/null @@ -1,46 +0,0 @@ -// use app::error_template::AppError; -// use app::error_template::ErrorTemplate; -use app::App; -use axum::response::Response as AxumResponse; -use axum::{ - body::{boxed, Body, BoxBody}, - extract::State, - http::{Request, Response, StatusCode, Uri}, - response::IntoResponse, -}; -use leptos::*; -use tower::ServiceExt; -use tower_http::services::ServeDir; - -pub async fn file_and_error_handler( - uri: Uri, - State(options): State<LeptosOptions>, - req: Request<Body>, -) -> AxumResponse { - let root = options.site_root.clone(); - let res = get_static_file(uri.clone(), &root).await.unwrap(); - - if res.status() == StatusCode::OK { - res.into_response() - } else { - let handler = - leptos_axum::render_app_to_stream(options.to_owned(), move || view! { <App/> }); - handler(req).await.into_response() - } -} - -async fn get_static_file(uri: Uri, root: &str) -> Result<Response<BoxBody>, (StatusCode, String)> { - let req = Request::builder() - .uri(uri.clone()) - .body(Body::empty()) - .unwrap(); - // `ServeDir` implements `tower::Service` so we can call it with `tower::ServiceExt::oneshot` - // This path is relative to the cargo root - match ServeDir::new(root).oneshot(req).await { - Ok(res) => Ok(res.map(boxed)), - Err(err) => Err(( - StatusCode::INTERNAL_SERVER_ERROR, - format!("Something went wrong: {err}"), - )), - } -} diff --git a/doordesk/server/src/main.rs b/doordesk/server/src/main.rs deleted file mode 100644 index b0ba26c..0000000 --- a/doordesk/server/src/main.rs +++ /dev/null @@ -1,37 +0,0 @@ -use app::*; -use axum::{routing::post, Router}; -use fileserv::file_and_error_handler; -use leptos::*; -use leptos_axum::{generate_route_list, LeptosRoutes}; - -pub mod fileserv; - -#[tokio::main] -async fn main() { - simple_logger::init_with_level(log::Level::Debug).expect("couldn't initialize logging"); - - // Setting get_configuration(None) means we'll be using cargo-leptos's env values - // For deployment these variables are: - // <https://github.com/leptos-rs/start-axum#executing-a-server-on-a-remote-machine-without-the-toolchain> - // Alternately a file can be specified such as Some("Cargo.toml") - // The file would need to be included with the executable when moved to deployment - let conf = get_configuration(None).await.unwrap(); - let leptos_options = conf.leptos_options; - let addr = leptos_options.site_addr; - let routes = generate_route_list(App); - - // build our application with a route - let app = Router::new() - .route("/api/*fn_name", post(leptos_axum::handle_server_fns)) - .leptos_routes(&leptos_options, routes, App) - .fallback(file_and_error_handler) - .with_state(leptos_options); - - // run our app with hyper - // `axum::Server` is a re-export of `hyper::Server` - log::info!("listening on http://{}", &addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) - .await - .unwrap(); -} diff --git a/doordesk/style/tailwind.css b/doordesk/style/tailwind.css deleted file mode 100644 index 996e19c..0000000 --- a/doordesk/style/tailwind.css +++ /dev/null @@ -1,89 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -html { - @apply text-orange-50 antialiased font-mono tracking-tighter; -} - -body { - @apply bg-gradient-to-br from-zinc-900 to-zinc-950 bg-fixed; -} - -nav li { - @apply border-b-2 mx-1.5 sm:mx-6; - @apply border-transparent hover:border-orange-700 duration-300; -} - -nav li:has(> a[aria-current="page"]) { - @apply border-b-orange-700 border-b-2; -} - -/* Shadows don't work inline for some reason */ -article { - @apply shadow-lg shadow-black; -} - -/* for innerHTML articles */ -article p { - @apply mt-5 indent-4; -} - -article h3 { - @apply mt-8 text-2xl text-orange-600; -} - -article a { - @apply text-orange-300 hover:underline; -} - -article h3 > a { - @apply text-orange-600; -} - -article ul, -article ol { - @apply mt-5 list-inside; -} - -article ul { - @apply list-disc; -} - -article ol { - @apply list-decimal; -} - -/* Code blocks */ -.hh4 { - @apply text-orange-600; -} - -.hh3 { - @apply text-blue-500; -} - -.hh13 { - @apply text-orange-800; -} - -.hh10 { - @apply text-slate-500; -} - -.hh5 { - @apply text-orange-300; -} - -/* dunno what this is yet */ -.hh18 { - color: red; -} - -.code-block { - @apply bg-black bg-opacity-50 p-3 rounded-lg shadow-lg shadow-black max-w-fit m-auto; -} - -.code-block-inner { - @apply p-2 mt-2 text-sm border-t-gray-500 overflow-x-scroll border-t-2; -} diff --git a/doordesk/tailwind.config.js b/doordesk/tailwind.config.js deleted file mode 100644 index 90cd5cf..0000000 --- a/doordesk/tailwind.config.js +++ /dev/null @@ -1,12 +0,0 @@ -/** @type {import('tailwindcss').Config} */ - module.exports = { - content: { - relative: true, - files: ["*.html", "./app/**/*.rs"], - }, - theme: { - extend: {}, - }, - plugins: [], - } -