mirror of
https://github.com/tuono-labs/tuono
synced 2026-07-25 12:52:47 -07:00
feat: improve manifest data collection (#785)
This commit is contained in:
@@ -54,6 +54,8 @@ fn clean_route_path(path: String) -> String {
|
|||||||
let path = path
|
let path = path
|
||||||
.replace("../src/routes", "")
|
.replace("../src/routes", "")
|
||||||
.replace(".tsx", "")
|
.replace(".tsx", "")
|
||||||
|
.replace(".mdx", "")
|
||||||
|
.replace(".md", "")
|
||||||
.replace(".jsx", "");
|
.replace(".jsx", "");
|
||||||
|
|
||||||
if path == "/index" {
|
if path == "/index" {
|
||||||
@@ -121,15 +123,31 @@ impl From<ViteManifest> for Manifest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add __layout imports
|
// Add __layout imports
|
||||||
for (key, layout_bundle) in manifest {
|
for (key, layout_bundle) in &manifest {
|
||||||
let route = clean_route_path(key);
|
let route = clean_route_path(key.clone());
|
||||||
if route.contains("__layout") {
|
if route.contains("__layout") {
|
||||||
let path_included_in_layout = route.replace("__layout", "");
|
let path_included_in_layout = route.replace("__layout", "");
|
||||||
|
|
||||||
|
let mut layout_css_files: Vec<String> = Vec::new();
|
||||||
|
let mut layout_js_files: Vec<String> = Vec::new();
|
||||||
|
|
||||||
|
for import in &layout_bundle.imports {
|
||||||
|
if import == "client-main.tsx" {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(import_bundle) = manifest.get(import) {
|
||||||
|
layout_js_files.push(import_bundle.file.clone());
|
||||||
|
layout_css_files.extend(import_bundle.css.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (key, route_bundles) in &mut bundles {
|
for (key, route_bundles) in &mut bundles {
|
||||||
if key.starts_with(path_included_in_layout.as_str()) {
|
if key.starts_with(path_included_in_layout.as_str()) {
|
||||||
route_bundles.js_files.push(layout_bundle.file.clone());
|
route_bundles.js_files.push(layout_bundle.file.clone());
|
||||||
route_bundles.css_files.extend(layout_bundle.css.clone());
|
route_bundles.css_files.extend(layout_bundle.css.clone());
|
||||||
|
route_bundles.js_files.extend(layout_js_files.clone());
|
||||||
|
route_bundles.css_files.extend(layout_css_files.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -249,12 +267,23 @@ mod tests {
|
|||||||
"src": "../src/routes/about.tsx",
|
"src": "../src/routes/about.tsx",
|
||||||
"isDynamicEntry": true,
|
"isDynamicEntry": true,
|
||||||
"imports": [
|
"imports": [
|
||||||
"client-main.tsx"
|
"client-main.tsx",
|
||||||
|
"_FileWithCssOnly.js"
|
||||||
],
|
],
|
||||||
"css": [
|
"css": [
|
||||||
"assets/about-DUhMJ_Ze.css"
|
"assets/about-DUhMJ_Ze.css"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"_FileWithCssOnly.js": {
|
||||||
|
"file": "assets/FileWithCssOnly.js",
|
||||||
|
"name": "FileWithCssOnly",
|
||||||
|
"imports": [
|
||||||
|
"client-main.tsx"
|
||||||
|
],
|
||||||
|
"css": [
|
||||||
|
"assets/FileWithCssOnly.css"
|
||||||
|
]
|
||||||
|
},
|
||||||
"../src/routes/catch_all/[...slug].tsx": {
|
"../src/routes/catch_all/[...slug].tsx": {
|
||||||
"file": "assets/_...slug_-CpJyPnPj.js",
|
"file": "assets/_...slug_-CpJyPnPj.js",
|
||||||
"name": "_...slug_",
|
"name": "_...slug_",
|
||||||
@@ -350,6 +379,26 @@ mod tests {
|
|||||||
}
|
}
|
||||||
}"#;
|
}"#;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn it_correctly_cleans_the_route_path() {
|
||||||
|
let cleaned_path = clean_route_path("../src/routes/index.tsx".to_string());
|
||||||
|
assert_eq!(cleaned_path, "/");
|
||||||
|
|
||||||
|
let cleaned_path =
|
||||||
|
clean_route_path("../src/routes/pokemons/[pokemon]/index.tsx".to_string());
|
||||||
|
assert_eq!(cleaned_path, "/pokemons/[pokemon]");
|
||||||
|
|
||||||
|
let cleaned_path = clean_route_path("../src/routes/pokemons/__layout.tsx".to_string());
|
||||||
|
assert_eq!(cleaned_path, "/pokemons/__layout");
|
||||||
|
|
||||||
|
let cleaned_path =
|
||||||
|
clean_route_path("../src/routes/pokemons/[pokemon]/[type].mdx".to_string());
|
||||||
|
assert_eq!(cleaned_path, "/pokemons/[pokemon]/[type]");
|
||||||
|
|
||||||
|
let cleaned_path = clean_route_path("../src/routes/about.md".to_string());
|
||||||
|
assert_eq!(cleaned_path, "/about");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn correctly_parse_the_manifest_json() {
|
fn correctly_parse_the_manifest_json() {
|
||||||
let parsed_manifest = serde_json::from_str::<ViteManifest>(MANIFEST_EXAMPLE).unwrap();
|
let parsed_manifest = serde_json::from_str::<ViteManifest>(MANIFEST_EXAMPLE).unwrap();
|
||||||
@@ -456,12 +505,17 @@ mod tests {
|
|||||||
route.css_files,
|
route.css_files,
|
||||||
vec![
|
vec![
|
||||||
"assets/about-DUhMJ_Ze.css",
|
"assets/about-DUhMJ_Ze.css",
|
||||||
"assets/client-main-BS7N-NIa.css"
|
"assets/client-main-BS7N-NIa.css",
|
||||||
|
"assets/FileWithCssOnly.css"
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
route.js_files,
|
route.js_files,
|
||||||
vec!["assets/about-C3UqHfGb.js", "assets/client-main-DOdr9gvl.js"]
|
vec![
|
||||||
|
"assets/about-C3UqHfGb.js",
|
||||||
|
"assets/client-main-DOdr9gvl.js",
|
||||||
|
"assets/FileWithCssOnly.js"
|
||||||
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user