mirror of
https://github.com/tuono-labs/tuono
synced 2026-07-25 12:52:47 -07:00
feat: use the correct public folder according to the mode
This commit is contained in:
@@ -73,10 +73,7 @@ async fn main() {
|
||||
|
||||
let app = Router::new()
|
||||
// ROUTE_BUILDER
|
||||
.fallback_service(
|
||||
ServeDir::new("public"))
|
||||
.fallback_service(ServeDir::new("out/client")
|
||||
.fallback(get(catch_all)))
|
||||
.fallback_service(ServeDir::new("/*public_dir*/").fallback(get(catch_all)))
|
||||
.with_state(fetch);
|
||||
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
@@ -112,6 +109,8 @@ async fn catch_all(Path(params): Path<HashMap<String, String>>, request: Request
|
||||
|
||||
const ROOT_FOLDER: &str = "src/routes";
|
||||
const DEV_FOLDER: &str = ".tuono";
|
||||
const DEV_PUBLIC_DIR: &str = "public";
|
||||
const PROD_PUBLIC_DIR: &str = "out/client";
|
||||
|
||||
#[derive(Debug, PartialEq, Eq)]
|
||||
struct Route {
|
||||
@@ -255,6 +254,12 @@ pub fn bundle_axum_source(mode: Mode) -> io::Result<()> {
|
||||
}
|
||||
|
||||
fn generate_axum_source(source_builder: &SourceBuilder, mode: Mode) -> String {
|
||||
let public_dir = if mode == Mode::Prod {
|
||||
PROD_PUBLIC_DIR
|
||||
} else {
|
||||
DEV_PUBLIC_DIR
|
||||
};
|
||||
|
||||
AXUM_ENTRY_POINT
|
||||
.replace(
|
||||
"// ROUTE_BUILDER\n",
|
||||
@@ -264,6 +269,7 @@ fn generate_axum_source(source_builder: &SourceBuilder, mode: Mode) -> String {
|
||||
"// MODULE_IMPORTS\n",
|
||||
&create_modules_declaration(&source_builder.route_map),
|
||||
)
|
||||
.replace("/*public_dir*/", public_dir)
|
||||
.replace("/*MODE*/", mode.as_str())
|
||||
}
|
||||
|
||||
@@ -404,4 +410,20 @@ mod tests {
|
||||
assert_eq!(dev, "Mode::Dev");
|
||||
assert_eq!(prod, "Mode::Prod");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_replace_the_correct_public_folder_dev() {
|
||||
let source_builder = SourceBuilder::new();
|
||||
let source = generate_axum_source(&source_builder, Mode::Dev);
|
||||
|
||||
assert!(source.contains(r#"ServeDir::new("public")"#))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_replace_the_correct_public_folder_prod() {
|
||||
let source_builder = SourceBuilder::new();
|
||||
let source = generate_axum_source(&source_builder, Mode::Prod);
|
||||
|
||||
assert!(source.contains(r#"ServeDir::new("out/client")"#))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user