Skip to content

Commit

Permalink
fix: dev server support "publicPath" (#1398)
Browse files Browse the repository at this point in the history
* fix: the development server was unable to correctly consume the "publicPath" configuration (#1334)

* chore: improve

* chore: update

---------

Co-authored-by: huanyu.why <[email protected]>
Co-authored-by: sorrycc <[email protected]>
  • Loading branch information
3 people authored Jul 22, 2024
1 parent 5bc76e9 commit 3f20b78
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 3 deletions.
18 changes: 15 additions & 3 deletions crates/mako/src/dev/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use {hyper, hyper_staticfile, hyper_tungstenite, open};

use crate::compiler::{Compiler, Context};
use crate::plugin::{PluginGenerateEndParams, PluginGenerateStats};
use crate::utils::tokio_runtime;
use crate::utils::{process_req_url, tokio_runtime};

pub struct DevServer {
root: PathBuf,
Expand Down Expand Up @@ -124,15 +124,27 @@ impl DevServer {
staticfile: hyper_staticfile::Static,
txws: broadcast::Sender<WsMessage>,
) -> Result<hyper::Response<Body>> {
let path = req.uri().path();
let mut path = req.uri().path().to_string();
let public_path = &context.config.public_path;
if !public_path.is_empty() && public_path.starts_with('/') && public_path != "/" {
path = match process_req_url(public_path, &path) {
Ok(p) => p,
Err(_) => {
return Ok(hyper::Response::builder()
.status(hyper::StatusCode::BAD_REQUEST)
.body(hyper::Body::from("Bad Request"))
.unwrap());
}
};
}
let path_without_slash_start = path.trim_start_matches('/');
let not_found_response = || {
hyper::Response::builder()
.status(hyper::StatusCode::NOT_FOUND)
.body(hyper::Body::empty())
.unwrap()
};
match path {
match path.as_str() {
"/__/hmr-ws" => {
if hyper_tungstenite::is_upgrade_request(&req) {
debug!("new websocket connection");
Expand Down
29 changes: 29 additions & 0 deletions crates/mako/src/utils/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,32 @@ impl ParseRegex for Option<String> {
})
}
}

pub fn process_req_url(public_path: &str, req_url: &str) -> Result<String> {
let public_path = format!("/{}/", public_path.trim_matches('/'));
if req_url.starts_with(&public_path) {
return Ok(req_url[public_path.len() - 1..].to_string());
}
Ok(req_url.to_string())
}

#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_process_req_url() {
assert_eq!(
process_req_url("/public/", "/public/index.html").unwrap(),
"/index.html"
);
assert_eq!(
process_req_url("/public/foo/", "/public/foo/index.html").unwrap(),
"/index.html"
);
assert_eq!(process_req_url("/", "/index.html").unwrap(), "/index.html");
assert_eq!(
process_req_url("/#/", "/#/index.html").unwrap(),
"/index.html"
);
}
}

0 comments on commit 3f20b78

Please sign in to comment.