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 00000000..ce24fa28 Binary files /dev/null and b/examples/tuono/public/favicon.ico differ diff --git a/examples/tuono/src/components/Button.tsx b/examples/tuono/src/components/Button.tsx new file mode 100644 index 00000000..83872f78 --- /dev/null +++ b/examples/tuono/src/components/Button.tsx @@ -0,0 +1,3 @@ +export default function Button(): JSX.Element { + return +} 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"] +}