use std::borrow::Cow;
use base64::{Engine, prelude::BASE64_STANDARD};
pub use crate::{Manifest, ManifestChunk};
pub struct MyViteStatic;
impl Manifest<'static> for MyViteStatic {
fn boxed(&self) -> crate::DynManifest<'static> {
Box::new(MyViteStatic)
}
fn base(&self) -> std::borrow::Cow<'static, str> {
Cow::Borrowed("/static")
}
fn resolve_output(&self, key: &str) -> Option<std::borrow::Cow<'static, str>> {
match key {
"src/main.tsx" => Some(Cow::Borrowed("main.HASH.js")),
"_shared.HASH.js" => Some(Cow::Borrowed("chunks/_shared.HASH.js")),
"src/style.scss" => Some(Cow::Borrowed("assets/style.HASH.css")),
"src/images/500GB_image.png" => Some(Cow::Borrowed("assets/500GB_image.HASH.webp")),
_ => None,
}
}
fn iter_keys(&self) -> Box<dyn Iterator<Item = &str> + '_> {
Box::new(
[
"src/main.tsx",
"_shared.HASH.js",
"src/style.scss",
"src/images/500GB_image.png",
]
.iter()
.copied(),
)
}
fn iter_outputs(&self) -> Box<dyn Iterator<Item = &str> + '_> {
Box::new(
[
"main.HASH.js",
"chunks/_shared.HASH.js",
"assets/style.HASH.css",
"assets/500GB_image.HASH.webp",
]
.iter()
.copied(),
)
}
fn chunk(
&self,
output: &str,
) -> Option<std::borrow::Cow<'static, crate::ManifestChunk<'static>>> {
let hash = Cow::Owned(BASE64_STANDARD.encode(blake3::hash(b"hash").as_slice()));
match output {
"main.HASH.js" => Some(Cow::Owned(ManifestChunk {
key: Cow::Borrowed("src/main.tsx"),
contents: r#"console.log("Hello from src/main.tsx")"#.bytes().collect(),
hash,
mime_type: Cow::Borrowed("text/javascript"),
src: Some(Cow::Borrowed("src/main.tsx")),
file: Cow::Borrowed("main.HASH.js"),
css: Cow::Borrowed(&[]),
assets: Cow::Borrowed(&[]),
is_entry: true,
name: Some(Cow::Borrowed("main")),
is_dynamic_entry: false,
imports: Cow::Borrowed(&[Cow::Borrowed("_shared.HASH.js")]),
dynamic_imports: Cow::Borrowed(&[]),
})),
"chunks/_shared.HASH.js" => Some(Cow::Owned(ManifestChunk {
key: Cow::Borrowed("_shared.HASH.js"),
contents: r#"console.log("Hello from shared!")"#.bytes().collect(),
hash,
mime_type: Cow::Borrowed("text/javascript"),
src: None,
file: Cow::Borrowed("chunks/_shared.HASH.js"),
css: Cow::Borrowed(&[Cow::Borrowed("assets/style.HASH.css")]),
assets: Cow::Borrowed(&[]),
is_entry: false,
name: Some(Cow::Borrowed("shared")),
is_dynamic_entry: false,
imports: Cow::Borrowed(&[]),
dynamic_imports: Cow::Borrowed(&[]),
})),
"assets/style.HASH.css" => Some(Cow::Owned(ManifestChunk {
key: Cow::Borrowed("assets/style.HASH.css"),
contents: "body { background: red; }".bytes().collect(),
hash,
mime_type: Cow::Borrowed("text/css"),
src: None,
file: Cow::Borrowed("assets/style.HASH.css"),
css: Cow::Borrowed(&[]),
assets: Cow::Borrowed(&[]),
is_entry: false,
name: None,
is_dynamic_entry: false,
imports: Cow::Borrowed(&[]),
dynamic_imports: Cow::Borrowed(&[]),
})),
"assets/500GB_image.HASH.webp" => Some(Cow::Owned(ManifestChunk {
key: Cow::Borrowed("src/images/500GB_image.png"),
contents: r#"console.log("Hello from shared!")"#.bytes().collect(),
hash,
mime_type: Cow::Borrowed("image/webp"),
src: Some(Cow::Borrowed("src/images/500GB_image.png")),
file: Cow::Borrowed("assets/500GB_image.HASH.webp"),
css: Cow::Borrowed(&[]),
assets: Cow::Borrowed(&[]),
is_entry: false,
name: None,
is_dynamic_entry: false,
imports: Cow::Borrowed(&[]),
dynamic_imports: Cow::Borrowed(&[]),
})),
_ => None,
}
}
}