mirror of
https://github.com/tuono-labs/tuono
synced 2026-07-25 12:52:47 -07:00
feat: create dev environment
This commit is contained in:
+3
-1
@@ -1,7 +1,9 @@
|
||||
[workspace]
|
||||
resolver = "2"
|
||||
members = [
|
||||
"crates/cli",
|
||||
"crates/axum_bundler"
|
||||
"crates/axum_bundler",
|
||||
"crates/bundler"
|
||||
]
|
||||
exclude = [
|
||||
"examples/playground"
|
||||
|
||||
@@ -31,6 +31,7 @@ async fn main() {
|
||||
|
||||
let app = Router::new()
|
||||
// ROUTE_BUILDER
|
||||
.nest_service("/__tuono", ServeDir::new(".tuono"))
|
||||
.fallback_service(ServeDir::new("public").fallback(get(catch_all)));
|
||||
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
[package]
|
||||
name = "tuono_bundler"
|
||||
version = "0.0.1"
|
||||
edition = "2021"
|
||||
authors = ["V. Ageno <valerioageno@yahoo.it>"]
|
||||
|
||||
[lib]
|
||||
name = "bundler"
|
||||
path = "src/lib.rs"
|
||||
|
||||
[dependencies]
|
||||
watchexec = "4.0.0"
|
||||
miette = "7.2.0"
|
||||
watchexec-signals = "3.0.0"
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
watchexec-supervisor = "2.0.0"
|
||||
|
||||
axum_bundler = { path = "../axum_bundler" }
|
||||
@@ -0,0 +1 @@
|
||||
# Tuono bundler
|
||||
@@ -0,0 +1,48 @@
|
||||
use std::sync::Arc;
|
||||
use watchexec_supervisor::command::{Command, Program};
|
||||
|
||||
use axum_bundler::bundle;
|
||||
use miette::{IntoDiagnostic, Result};
|
||||
use watchexec::Watchexec;
|
||||
use watchexec_signals::Signal;
|
||||
use watchexec_supervisor::job::start_job;
|
||||
|
||||
#[tokio::main]
|
||||
pub async fn watch() -> Result<()> {
|
||||
let (job, _) = start_job(Arc::new(Command {
|
||||
program: Program::Exec {
|
||||
prog: "cargo".into(),
|
||||
args: vec!["run".to_string()],
|
||||
}
|
||||
.into(),
|
||||
options: Default::default(),
|
||||
}));
|
||||
|
||||
job.start().await;
|
||||
|
||||
let wx = Watchexec::new(move |mut action| {
|
||||
for event in action.events.iter() {
|
||||
for path in event.paths() {
|
||||
if path.0.to_string_lossy().ends_with(".rs") {
|
||||
job.stop();
|
||||
println!("Reloading server...");
|
||||
bundle();
|
||||
job.start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if Ctrl-C is received, quit
|
||||
if action.signals().any(|sig| sig == Signal::Interrupt) {
|
||||
action.quit();
|
||||
}
|
||||
|
||||
action
|
||||
})?;
|
||||
|
||||
// watch the current directory
|
||||
wx.config.pathset(["./src"]);
|
||||
|
||||
let _ = wx.main().await.into_diagnostic()?;
|
||||
Ok(())
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
pub mod bundler;
|
||||
|
||||
@@ -10,6 +10,6 @@ path = "src/lib.rs"
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4.5.4", features = ["derive"] }
|
||||
cargo-watch = "8.5.2"
|
||||
|
||||
axum_bundler = { path = "../axum_bundler" }
|
||||
tuono_bundler = { path = "../bundler"}
|
||||
|
||||
@@ -1,24 +1,23 @@
|
||||
use bundler::bundler;
|
||||
use std::path::Path;
|
||||
use std::process::{Command, Stdio};
|
||||
use std::process::Command;
|
||||
use std::thread;
|
||||
|
||||
fn spawn_vite_process() -> std::io::Result<()> {
|
||||
println!("Spawing vite process");
|
||||
let current_dir = std::env::current_dir()?;
|
||||
pub fn run() {
|
||||
let current_dir = std::env::current_dir().unwrap();
|
||||
|
||||
let vite_path = Path::new("node_modules/.bin/vite");
|
||||
let vite = current_dir.join(vite_path);
|
||||
|
||||
dbg!(&vite);
|
||||
let vite_handler = thread::spawn(move || {
|
||||
println!("Spawing vite process");
|
||||
let _ = Command::new(vite).arg("dev").output();
|
||||
});
|
||||
|
||||
let _ = Command::new(vite)
|
||||
.arg("dev")
|
||||
.stdout(Stdio::inherit())
|
||||
.output()?;
|
||||
let build_rs_handler = thread::spawn(move || {
|
||||
bundler::watch().unwrap();
|
||||
});
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn run() {
|
||||
println!("Running dev environment");
|
||||
let _ = spawn_vite_process();
|
||||
let _ = vite_handler.join();
|
||||
let _ = build_rs_handler.join();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user