Compare commits

...

9 Commits

Author SHA1 Message Date
Valerio Ageno 70a6aa1a67 fix: package name and update version to v0.0.11 2024-06-05 09:06:48 +02:00
Valerio Ageno 8d2be4178b feat: ugrade turbo 2024-06-04 20:57:53 +02:00
Valerio Ageno e89f2f63f8 feat: update version to v0.0.10 2024-06-04 20:49:13 +02:00
Valerio Ageno f6e7ebd33e fix: correctly import modulepreload-polyfill 2024-06-04 20:48:19 +02:00
Valerio Ageno 5ea209de0b feat: prevent default code on route 2024-06-04 20:29:36 +02:00
Valerio Ageno a4b2dd222d feat: update crate version to v0.0.9 2024-06-04 19:18:30 +02:00
Valerio Ageno c84f5d479b fix: static consts locations 2024-06-04 19:17:31 +02:00
Valerio Ageno 9251d445d3 feat: update version to v0.0.8 2024-06-04 19:06:53 +02:00
Valerio Ageno c1ff7e36a8 feat: update static_files mod import 2024-06-04 19:05:58 +02:00
11 changed files with 97 additions and 114 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "tuono"
version = "0.0.7"
version = "0.0.11"
edition = "2021"
authors = ["V. Ageno <valerioageno@yahoo.it>"]
description = "The react/rust fullstack framework"
+1 -1
View File
@@ -4,7 +4,7 @@ use std::process::Command;
mod source_builder;
use source_builder::{bundle_axum_source, create_client_entry_files};
use self::source_builder::check_tuono_folder;
use crate::source_builder::check_tuono_folder;
mod scaffold_project;
mod watch;
+72 -4
View File
@@ -8,7 +8,75 @@ use std::io::prelude::*;
use std::path::Path;
use std::path::PathBuf;
mod static_files;
pub const SERVER_ENTRY_DATA: &str = "// File automatically generated by tuono
// Do not manually update this file
import { routeTree } from './routeTree.gen'
import { serverSideRendering } from 'tuono/ssr'
export const renderFn = serverSideRendering(routeTree)
";
pub const CLIENT_ENTRY_DATA: &str = "// File automatically generated by tuono
// Do not manually update this file
import 'vite/modulepreload-polyfill'
import { hydrate } from 'tuono/hydration'
import '../src/styles/global.css'
// Import the generated route tree
import { routeTree } from './routeTree.gen'
hydrate(routeTree)
";
pub const AXUM_ENTRY_POINT: &str = r##"
// File automatically generated
// Do not manually change it
use axum::extract::{Path, Request};
use axum::response::Html;
use axum::{routing::get, Router};
use tower_http::services::ServeDir;
use std::collections::HashMap;
use tuono_lib::{ssr, Ssr};
use reqwest::Client;
// MODULE_IMPORTS
#[tokio::main]
async fn main() {
Ssr::create_platform();
let fetch = Client::new();
let app = Router::new()
// ROUTE_BUILDER
.fallback_service(ServeDir::new("public").fallback(get(catch_all)))
.with_state(fetch);
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
async fn catch_all(Path(params): Path<HashMap<String, String>>, request: Request) -> Html<String> {
let pathname = &request.uri();
let headers = &request.headers();
let req = tuono_lib::Request::new(pathname, headers, params);
// TODO: remove unwrap
let payload = tuono_lib::Payload::new(&req, Box::new(""))
.client_payload()
.unwrap();
let result = ssr::Js::SSR.with(|ssr| ssr.borrow_mut().render_to_string(Some(&payload)));
match result {
Ok(html) => Html(html),
_ => Html("500 internal server error".to_string()),
}
}
"##;
const ROOT_FOLDER: &str = "src/routes";
const DEV_FOLDER: &str = ".tuono";
@@ -156,7 +224,7 @@ pub fn bundle_axum_source() -> io::Result<()> {
source_builder.collect_routes();
let bundled_file = static_files::AXUM_ENTRY_POINT
let bundled_file = AXUM_ENTRY_POINT
.replace(
"// ROUTE_BUILDER\n",
&create_routes_declaration(&source_builder.route_map),
@@ -187,8 +255,8 @@ pub fn create_client_entry_files() -> io::Result<()> {
let mut server_entry = fs::File::create(dev_folder.join("server-main.tsx"))?;
let mut client_entry = fs::File::create(dev_folder.join("client-main.tsx"))?;
server_entry.write_all(static_files::SERVER_ENTRY_DATA.as_bytes())?;
client_entry.write_all(static_files::CLIENT_ENTRY_DATA.as_bytes())?;
server_entry.write_all(SERVER_ENTRY_DATA.as_bytes())?;
client_entry.write_all(CLIENT_ENTRY_DATA.as_bytes())?;
Ok(())
}
@@ -1,68 +0,0 @@
pub const SERVER_ENTRY_DATA: &str = "// File automatically generated by tuono
import { routeTree } from './routeTree.gen'
import { serverSideRendering } from 'tuono/ssr'
export const renderFn = serverSideRendering(routeTree)
";
pub const CLIENT_ENTRY_DATA: &str = "// File automatically generated by tuono
import { hydrate } from 'tuono/hydration'
import '../src/styles/global.css'
// Import the generated route tree
import { routeTree } from './routeTree.gen'
hydrate(routeTree)
";
pub const AXUM_ENTRY_POINT: &str = r##"
// File automatically generated
// Do not manually change it
use axum::extract::{Path, Request};
use axum::response::Html;
use axum::{routing::get, Router};
use tower_http::services::ServeDir;
use std::collections::HashMap;
use tuono_lib::{ssr, Ssr};
use reqwest::Client;
// MODULE_IMPORTS
#[tokio::main]
async fn main() {
Ssr::create_platform();
let fetch = Client::new();
let app = Router::new()
// ROUTE_BUILDER
.fallback_service(ServeDir::new("public").fallback(get(catch_all)))
.with_state(fetch);
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
async fn catch_all(Path(params): Path<HashMap<String, String>>, request: Request) -> Html<String> {
let pathname = &request.uri();
let headers = &request.headers();
let req = tuono_lib::Request::new(pathname, headers, params);
// TODO: remove unwrap
let payload = tuono_lib::Payload::new(&req, Box::new(""))
.client_payload()
.unwrap();
let result = ssr::Js::SSR.with(|ssr| ssr.borrow_mut().render_to_string(Some(&payload)));
match result {
Ok(html) => Html(html),
_ => Html("500 internal server error".to_string()),
}
}
"##;
+2 -2
View File
@@ -1,6 +1,6 @@
[package]
name = "tuono_lib"
version = "0.0.7"
version = "0.0.11"
edition = "2021"
authors = ["V. Ageno <valerioageno@yahoo.it>"]
description = "The react/rust fullstack framework"
@@ -24,4 +24,4 @@ serde = { version = "1.0.202", features = ["derive"] }
erased-serde = "0.4.5"
serde_json = "1.0"
tuono_lib_macros = {path = "../tuono_lib_macros", version = "0.0.7"}
tuono_lib_macros = {path = "../tuono_lib_macros", version = "0.0.11"}
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "tuono_lib_macros"
version = "0.0.7"
version = "0.0.11"
edition = "2021"
description = "The react/rust fullstack framework"
homepage = "https://github.com/Valerioageno/tuono"
+1 -1
View File
@@ -3,7 +3,7 @@
"version": "0.1.0",
"description": "",
"main": "src/index.js",
"packageManager": "pnpm@8.12.1",
"packageManager": "pnpm@8.12.0",
"scripts": {
"dev": "turbo dev",
"build": "turbo build",
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "tuono",
"version": "0.0.7",
"description": "",
"version": "0.0.11",
"description": "The react/rust fullstack framework",
"scripts": {
"dev": "vite build --watch",
"build": "vite build",
@@ -190,28 +190,6 @@ export async function routeGenerator(config = defaultConfig): Promise<void> {
removeUnderscores(removeLayoutSegments(node.path)) ?? '',
)
const routeCode = fs.readFileSync(node.fullPath, 'utf-8')
const escapedRoutePath = removeTrailingUnderscores(
node.routePath.replaceAll('$', '$$'),
)
let replaced = routeCode
if (!routeCode) {
replaced = [
`import { createFileRoute } from '@tanstack/react-router'`,
`export const Route = createFileRoute('${escapedRoutePath}')({
component: () => <div>Hello ${escapedRoutePath}!</div>
})`,
].join('\n\n')
if (replaced !== routeCode) {
console.log(`[emoticon] Updating ${node.fullPath}`)
await fsp.writeFile(node.fullPath, replaced)
}
}
if (node.parent) {
node.parent.children = node.parent.children ?? []
node.parent.children.push(node)
-1
View File
@@ -1,4 +1,3 @@
import 'vite/modulepreload-polyfill'
import React from 'react'
import ReactDOM from 'react-dom/client'
import { RouterProvider, createRouter } from '../router'
+17 -11
View File
@@ -1,15 +1,21 @@
{
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"lint": {},
"format": {},
"test": {},
"build": {
"outputs": ["dist/**"],
"dependsOn": ["^build"]
},
"dev": {
"dependsOn": ["^build"]
}
"tasks": {
"lint": {},
"format": {},
"test": {},
"build": {
"outputs": [
"dist/**"
],
"dependsOn": [
"^build"
]
},
"dev": {
"dependsOn": [
"^build"
]
}
}
}