From c12739d526021fd128cf8e2142ff1efa73ab5bd4 Mon Sep 17 00:00:00 2001 From: Valerio Ageno Date: Sun, 26 May 2024 19:05:19 +0200 Subject: [PATCH] feat: create base tuono example --- Cargo.toml | 3 ++- crates/tuono/src/source_builder.rs | 1 - examples/tuono/.gitignore | 13 ++++++++++++ examples/tuono/Cargo.toml | 17 +++++++++++++++ examples/tuono/README.md | 2 ++ examples/tuono/package.json | 14 +++++++++++++ examples/tuono/public/favicon.ico | Bin 0 -> 21775 bytes examples/tuono/src/components/Button.tsx | 3 +++ examples/tuono/src/routes/__root.tsx | 16 +++++++++++++++ examples/tuono/src/routes/about.tsx | 3 +++ examples/tuono/src/routes/index.rs | 16 +++++++++++++++ examples/tuono/src/routes/index.tsx | 3 +++ examples/tuono/tsconfig.json | 25 +++++++++++++++++++++++ examples/tuono/tsconfig.node.json | 11 ++++++++++ 14 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 examples/tuono/.gitignore create mode 100644 examples/tuono/Cargo.toml create mode 100644 examples/tuono/package.json create mode 100644 examples/tuono/public/favicon.ico create mode 100644 examples/tuono/src/components/Button.tsx create mode 100644 examples/tuono/src/routes/__root.tsx create mode 100644 examples/tuono/src/routes/about.tsx create mode 100644 examples/tuono/src/routes/index.rs create mode 100644 examples/tuono/src/routes/index.tsx create mode 100644 examples/tuono/tsconfig.json create mode 100644 examples/tuono/tsconfig.node.json diff --git a/Cargo.toml b/Cargo.toml index 692b127b..b4ba7ebb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,5 +6,6 @@ members = [ "crates/tuono_lib_macros", ] exclude = [ - "examples/playground" + "examples/playground", + "examples/tuono" ] diff --git a/crates/tuono/src/source_builder.rs b/crates/tuono/src/source_builder.rs index e3252228..c32efebc 100644 --- a/crates/tuono/src/source_builder.rs +++ b/crates/tuono/src/source_builder.rs @@ -109,7 +109,6 @@ fn get_route_name<'a>(path: &PathBuf, base_path: &Path) -> String { } fn collect_handlers(base_path: &Path) -> HashMap { - // let mut mods_map: HashMap = HashMap::new(); let _: Vec<_> = glob(base_path.join("src/routes/**/*.rs").to_str().unwrap()) diff --git a/examples/tuono/.gitignore b/examples/tuono/.gitignore new file mode 100644 index 00000000..071acad0 --- /dev/null +++ b/examples/tuono/.gitignore @@ -0,0 +1,13 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.tuono +out +target diff --git a/examples/tuono/Cargo.toml b/examples/tuono/Cargo.toml new file mode 100644 index 00000000..8b115c24 --- /dev/null +++ b/examples/tuono/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "tuono" +version = "0.0.1" +edition = "2021" + +[[bin]] +name = "tuono" +path = ".tuono/main.rs" + +[dependencies] +axum = {version = "0.7.5", features = ["json"]} +tokio = { version = "1.37.0", features = ["full"] } +tower-http = {version = "0.5.2", features = ["fs"]} +serde = { version = "1.0.202", features = ["derive"] } +tuono_lib = "0.0.6" +serde_json = "1.0" + diff --git a/examples/tuono/README.md b/examples/tuono/README.md index f93367c3..b3b5a8c6 100644 --- a/examples/tuono/README.md +++ b/examples/tuono/README.md @@ -1 +1,3 @@ # TODO: Basic Tuono app + + diff --git a/examples/tuono/package.json b/examples/tuono/package.json new file mode 100644 index 00000000..c9216d8d --- /dev/null +++ b/examples/tuono/package.json @@ -0,0 +1,14 @@ +{ + "name": "tuono", + "version": "0.0.1", + "dependencies": { + "react": "18.3.1", + "react-dom": "18.3.1", + "tuono": "workspace:*" + }, + "devDependencies": { + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "typescript": "^5.4.5" + } +} diff --git a/examples/tuono/public/favicon.ico b/examples/tuono/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ce24fa28278768c2f0714096e458ef36c55f04a8 GIT binary patch literal 21775 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 +} diff --git a/examples/tuono/src/routes/__root.tsx b/examples/tuono/src/routes/__root.tsx new file mode 100644 index 00000000..6ce55ca9 --- /dev/null +++ b/examples/tuono/src/routes/__root.tsx @@ -0,0 +1,16 @@ +import type { ReactNode } from 'react' +import { Link } from 'tuono' + +interface RootRouteProps { + children: ReactNode +} +export default function RootRoute({ children }: RootRouteProps): JSX.Element { + return ( + <> + +
{children}
+ + ) +} diff --git a/examples/tuono/src/routes/about.tsx b/examples/tuono/src/routes/about.tsx new file mode 100644 index 00000000..418ec160 --- /dev/null +++ b/examples/tuono/src/routes/about.tsx @@ -0,0 +1,3 @@ +export default function AboutPage(): JSX.Element { + return

About page

+} diff --git a/examples/tuono/src/routes/index.rs b/examples/tuono/src/routes/index.rs new file mode 100644 index 00000000..393c37e9 --- /dev/null +++ b/examples/tuono/src/routes/index.rs @@ -0,0 +1,16 @@ +use serde::Serialize; +use tuono_lib::{Request, Response}; + +#[derive(Serialize)] +struct MyResponse<'a> { + title: &'a str, + subtitle: &'a str, +} + +#[tuono_lib::handler] +fn get_server_side_props(req: &Request) -> Response { + Response::Props(Box::new(MyResponse { + title: "title", + subtitle: "subtitle", + })) +} diff --git a/examples/tuono/src/routes/index.tsx b/examples/tuono/src/routes/index.tsx new file mode 100644 index 00000000..a971e75e --- /dev/null +++ b/examples/tuono/src/routes/index.tsx @@ -0,0 +1,3 @@ +export default function IndexPage(): JSX.Element { + return

Index Page

+} diff --git a/examples/tuono/tsconfig.json b/examples/tuono/tsconfig.json new file mode 100644 index 00000000..a7fc6fbf --- /dev/null +++ b/examples/tuono/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/examples/tuono/tsconfig.node.json b/examples/tuono/tsconfig.node.json new file mode 100644 index 00000000..97ede7ee --- /dev/null +++ b/examples/tuono/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": ["vite.config.ts"] +}