vite-static-shared 1.1.0

Shared code for vite-static
Documentation
//! `MyViteStatic` implementation for tests.

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(&[]),
            })),
            // NOTE: this chunk is added by vite-static, so that's why key looks like
            // "output" name, instead of "input" name
            "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,
        }
    }
}