diff --git a/application/.gitignore b/application/.gitignore deleted file mode 100644 index 8cdaa33..0000000 --- a/application/.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/application/Cargo.toml b/application/Cargo.toml index b13e19b..01e7b13 100644 --- a/application/Cargo.toml +++ b/application/Cargo.toml @@ -1,113 +1,7 @@ [package] -name = "application" +name = "wrb-timings" version = "0.1.0" edition = "2021" -[lib] -crate-type = ["cdylib", "rlib"] - [dependencies] -axum = { version = "0.6.4", optional = true } -console_error_panic_hook = "0.1" -console_log = "1" -cfg-if = "1" -leptos = { version = "0.5" } -leptos_axum = { version = "0.5", optional = true } -leptos_meta = { version = "0.5" } -leptos_router = { version = "0.5" } -log = "0.4" -simple_logger = "4" -tokio = { version = "1.25.0", optional = true } -tower = { version = "0.4.13", optional = true } -tower-http = { version = "0.4", features = ["fs"], optional = true } -wasm-bindgen = "=0.2.89" -thiserror = "1.0.38" -tracing = { version = "0.1.37", optional = true } -http = "0.2.8" - -[features] -hydrate = ["leptos/hydrate", "leptos_meta/hydrate", "leptos_router/hydrate"] -ssr = [ - "dep:axum", - "dep:tokio", - "dep:tower", - "dep:tower-http", - "dep:leptos_axum", - "leptos/ssr", - "leptos_meta/ssr", - "leptos_router/ssr", - "dep:tracing", -] - -# Defines a size-optimized profile for the WASM bundle in release mode -[profile.wasm-release] -inherits = "release" -opt-level = 'z' -lto = true -codegen-units = 1 -panic = "abort" - -[package.metadata.leptos] -# The name used by wasm-bindgen/cargo-leptos for the JS/WASM bundle. Defaults to the crate name -output-name = "application" - -# 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/main.scss" -# 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 = "127.0.0.1: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 = ["ssr"] - -# 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 = ["hydrate"] - -# If the --no-default-features flag should be used when compiling the lib target -# -# Optional. Defaults to false. -lib-default-features = false - -# The profile to use for the lib target when compiling for release -# -# Optional. Defaults to "release". -lib-profile-release = "wasm-release" +yew = { version = "0.21", features = ["csr"] } diff --git a/application/LICENSE b/application/LICENSE deleted file mode 100644 index e869ce3..0000000 --- a/application/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/application/README.md b/application/README.md index 0adc819..d81e180 100644 --- a/application/README.md +++ b/application/README.md @@ -1,86 +1 @@ - - - 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 leptos-rs/start-axum -``` - -to generate a new project template. - -```bash -cd application -``` - -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 target add wasm32-unknown-unknown` - add the ability to compile Rust to WebAssembly -3. `cargo install cargo-generate` - install `cargo-generate` binary (should be installed automatically in future) -4. `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 -application -site/ -``` -Set the following environment variables (updating for your project as needed): -```text -LEPTOS_OUTPUT_NAME="application" -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. +# WRB Clubkampioenschappen tijden systeem diff --git a/application/end2end/package-lock.json b/application/end2end/package-lock.json deleted file mode 100644 index f12af44..0000000 --- a/application/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/application/end2end/package.json b/application/end2end/package.json deleted file mode 100644 index ed78585..0000000 --- a/application/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/application/end2end/playwright.config.ts b/application/end2end/playwright.config.ts deleted file mode 100644 index e9891c0..0000000 --- a/application/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/application/end2end/tests/example.spec.ts b/application/end2end/tests/example.spec.ts deleted file mode 100644 index a461f35..0000000 --- a/application/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/application/index.html b/application/index.html new file mode 100644 index 0000000..80c3f8b --- /dev/null +++ b/application/index.html @@ -0,0 +1,5 @@ + + + + + diff --git a/application/public/favicon.ico b/application/public/favicon.ico deleted file mode 100644 index 2ba8527..0000000 Binary files a/application/public/favicon.ico and /dev/null differ diff --git a/application/rust-toolchain.toml b/application/rust-toolchain.toml deleted file mode 100644 index e9743fb..0000000 --- a/application/rust-toolchain.toml +++ /dev/null @@ -1,3 +0,0 @@ - -[toolchain] -channel = "nightly" diff --git a/application/src/app.rs b/application/src/app.rs deleted file mode 100644 index 6e73b5c..0000000 --- a/application/src/app.rs +++ /dev/null @@ -1,48 +0,0 @@ -use crate::error_template::{AppError, ErrorTemplate}; -use leptos::*; -use leptos_meta::*; -use leptos_router::*; - -#[component] -pub fn App() -> impl IntoView { - // Provides context that manages stylesheets, titles, meta tags, etc. - provide_meta_context(); - - view! { - // injects a stylesheet into the document - // id=leptos means cargo-leptos will hot-reload this stylesheet - - - // sets the document title - - - // content for this welcome page - <Router fallback=|| { - let mut outside_errors = Errors::default(); - outside_errors.insert_with_default_key(AppError::NotFound); - view! { - <ErrorTemplate outside_errors/> - } - .into_view() - }> - <main> - <Routes> - <Route path="" view=HomePage/> - </Routes> - </main> - </Router> - } -} - -/// Renders the home page of your application. -#[component] -fn HomePage() -> impl IntoView { - // Creates a reactive value to update the button - let (count, set_count) = create_signal(0); - let on_click = move |_| set_count.update(|count| *count += 1); - - view! { - <h1>"Welcome to Leptos!"</h1> - <button on:click=on_click>"Click Me: " {count}</button> - } -} diff --git a/application/src/error_template.rs b/application/src/error_template.rs deleted file mode 100644 index ceeb753..0000000 --- a/application/src/error_template.rs +++ /dev/null @@ -1,74 +0,0 @@ -use http::status::StatusCode; -use leptos::*; -use thiserror::Error; - -#[cfg(feature = "ssr")] -use leptos_axum::ResponseOptions; - -#[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, - } - } -} - -// A basic function to display errors served by the error boundaries. -// Feel free to do more complicated things here than just displaying the error. -#[component] -pub fn ErrorTemplate( - #[prop(optional)] outside_errors: Option<Errors>, - #[prop(optional)] errors: Option<RwSignal<Errors>>, -) -> 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(); - - // Downcast lets us take a type that implements `std::error::Error` - let errors: Vec<AppError> = errors - .into_iter() - .filter_map(|(_k, v)| v.downcast_ref::<AppError>().cloned()) - .collect(); - println!("Errors: {errors:#?}"); - - // Only the response code for the first error is actually sent from the server - // this may be customized by the specific application - #[cfg(feature = "ssr")] - { - let response = use_context::<ResponseOptions>(); - if let Some(response) = response { - response.set_status(errors[0].status_code()); - } - } - - view! { - <h1>{if errors.len() > 1 {"Errors"} else {"Error"}}</h1> - <For - // a function that returns the items we're iterating over; a signal is fine - each= move || {errors.clone().into_iter().enumerate()} - // a unique key for each item as a reference - key=|(index, _error)| *index - // renders each item to a view - children=move |error| { - let error_string = error.1.to_string(); - let error_code= error.1.status_code(); - view! { - <h2>{error_code.to_string()}</h2> - <p>"Error: " {error_string}</p> - } - } - /> - } -} diff --git a/application/src/fileserv.rs b/application/src/fileserv.rs deleted file mode 100644 index acc1635..0000000 --- a/application/src/fileserv.rs +++ /dev/null @@ -1,40 +0,0 @@ -use cfg_if::cfg_if; - -cfg_if! { if #[cfg(feature = "ssr")] { - use axum::{ - body::{boxed, Body, BoxBody}, - extract::State, - response::IntoResponse, - http::{Request, Response, StatusCode, Uri}, - }; - use axum::response::Response as AxumResponse; - use tower::ServiceExt; - use tower_http::services::ServeDir; - use leptos::*; - use crate::app::App; - - 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/application/src/lib.rs b/application/src/lib.rs deleted file mode 100644 index 0f898c8..0000000 --- a/application/src/lib.rs +++ /dev/null @@ -1,19 +0,0 @@ -use cfg_if::cfg_if; -pub mod app; -pub mod error_template; -pub mod fileserv; - -cfg_if! { if #[cfg(feature = "hydrate")] { - use leptos::*; - use wasm_bindgen::prelude::wasm_bindgen; - use crate::app::*; - - #[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/application/src/main.rs b/application/src/main.rs index a3abaf6..7494d49 100644 --- a/application/src/main.rs +++ b/application/src/main.rs @@ -1,43 +1,13 @@ -#[cfg(feature = "ssr")] -#[tokio::main] -async fn main() { - use axum::{routing::post, Router}; - use leptos::*; - use leptos_axum::{generate_route_list, LeptosRoutes}; - use application::app::*; - use application::fileserv::file_and_error_handler; +use yew::prelude::*; - 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(); +#[function_component(App)] +fn app() -> Html { + html! { + <h1>{ "Hello World" }</h1> + } } -#[cfg(not(feature = "ssr"))] -pub fn main() { - // no client-side main function - // unless we want this to work with e.g., Trunk for a purely client-side app - // see lib.rs for hydration function instead +fn main() { + yew::Renderer::<App>::new().render(); } + diff --git a/application/style/main.scss b/application/style/main.scss deleted file mode 100644 index e4538e1..0000000 --- a/application/style/main.scss +++ /dev/null @@ -1,4 +0,0 @@ -body { - font-family: sans-serif; - text-align: center; -} \ No newline at end of file diff --git a/flake.nix b/flake.nix index 801b4c1..2e534be 100644 --- a/flake.nix +++ b/flake.nix @@ -19,7 +19,7 @@ { devShells.default = mkShell { buildInputs = [ - dart-sass + trunk rust-analyzer openssl pkg-config @@ -35,8 +35,6 @@ ]; shellHook = '' - alias ls=exa - alias find=fd alias grep=ripgrep export PATH=$PATH:''${CARGO_HOME:-~/.cargo}/bin '';