Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ include = ["src/**/*.rs", "README.md", "CHANGELOG.md", "LICENSE.Apache-2.0", "LI
run-example = ["xtask-wasm-run-example", "console_error_panic_hook", "wasm-bindgen", "env_logger"]
sass = ["sass-rs"]
wasm-opt = ["binary-install", "xtask-wasm-run-example?/wasm-opt"]
pwa = ["serde", "serde_json"]

[dependencies]
xtask-wasm-run-example = { version = "0.6", path = "xtask-wasm-run-example", optional = true }
Expand All @@ -33,6 +34,8 @@ fs_extra = "1.2.0"
lazy_static = "1.4.0"
log = "0.4.14"
sass-rs = { version = "0.2.2", optional = true }
serde = { version = "1.0.228", optional = true }
serde_json = { version = "1.0.149", optional = true }
walkdir = "2.3.2"
wasm-bindgen-cli-support = "0.2.100"
xtask-watch = "0.3.3"
Expand Down
2 changes: 1 addition & 1 deletion examples/demo/xtask/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ edition = "2021"
[dependencies]
env_logger = "0.11"
log = "0.4"
xtask-wasm = { path = "../../../", features = ["wasm-opt", "sass"]}
xtask-wasm = { path = "../../../", features = ["wasm-opt", "sass", "pwa"]}
4 changes: 4 additions & 0 deletions examples/demo/xtask/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ fn main() -> Result<()> {
.app_name("web_app")
.transformer(xtask_wasm::SassTransformer::default())
.optimize_wasm(xtask_wasm::WasmOpt::level(1).shrink(2))
.pwa(
xtask_wasm::Pwa::new()
.name("web_app")
)
.build("webapp")?;
}
Command::Watch(arg) => {
Expand Down
3 changes: 3 additions & 0 deletions src/dev_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,9 @@ pub fn default_request_handler(request: Request) -> Result<()> {
Some("css") => "text/css;charset=utf-8",
Some("js") => "application/javascript",
Some("wasm") => "application/wasm",
Some("json") => "application/json;charset=utf-8",
Some("png") => "image/png",
Some("svg") => "image/svg+xml",
_ => "application/octet-stream",
};

Expand Down
27 changes: 27 additions & 0 deletions src/dist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,14 @@ pub struct Dist {
#[cfg(feature = "wasm-opt")]
#[clap(skip)]
pub wasm_opt: Option<crate::WasmOpt>,

/// Optional Progressive Web App metadata and fallback file generation.
///
/// Set via [`Dist::pwa`]. When enabled, files needed (e.g. `manifest.json` and `sw.js`) are
/// generated if they don't exists in the `assets` directory.
#[cfg(feature = "pwa")]
#[clap(skip)]
pub pwa: Option<crate::Pwa>,
}

impl Dist {
Expand Down Expand Up @@ -276,6 +284,18 @@ impl Dist {
self
}

/// Enable Progressive Web App support by generating needed files:
/// - `manifest.json`
/// - `sw.js`
///
/// Existing user assets always take precedence.
#[cfg(feature = "pwa")]
#[cfg_attr(docsrs, doc(cfg(feature = "pwa")))]
pub fn pwa(mut self, pwa: crate::Pwa) -> Self {
self.pwa = Some(pwa);
self
}

/// Set the example to build.
pub fn example(mut self, example: impl Into<String>) -> Self {
self.example = Some(example.into());
Expand Down Expand Up @@ -472,6 +492,11 @@ impl Dist {
}
}

#[cfg(feature = "pwa")]
if let Some(pwa) = self.pwa {
pwa.apply(&dist_dir)?;
}

log::info!("Successfully built in {}", dist_dir.display());

Ok(dist_dir)
Expand Down Expand Up @@ -502,6 +527,8 @@ impl Default for Dist {
transformers: vec![],
#[cfg(feature = "wasm-opt")]
wasm_opt: None,
#[cfg(feature = "pwa")]
pwa: None,
}
}
}
Expand Down
7 changes: 7 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ pub use xtask_watch::{
mod dev_server;
#[cfg(not(target_arch = "wasm32"))]
mod dist;
#[cfg(all(not(target_arch = "wasm32"), feature = "pwa"))]
mod pwa;
#[cfg(all(not(target_arch = "wasm32"), feature = "sass"))]
mod sass;
#[cfg(all(not(target_arch = "wasm32"), feature = "wasm-opt"))]
Expand All @@ -24,6 +26,7 @@ mod wasm_opt;
pub use dev_server::*;
#[cfg(not(target_arch = "wasm32"))]
pub use dist::*;

#[cfg(all(not(target_arch = "wasm32"), feature = "sass"))]
#[cfg_attr(docsrs, doc(cfg(feature = "sass")))]
pub use sass::*;
Expand All @@ -32,6 +35,10 @@ pub use sass::*;
#[cfg_attr(docsrs, doc(cfg(feature = "wasm-opt")))]
pub use wasm_opt::*;

#[cfg(all(not(target_arch = "wasm32"), feature = "pwa"))]
#[cfg_attr(docsrs, doc(cfg(feature = "pwa")))]
pub use pwa::*;

#[cfg(all(not(target_arch = "wasm32"), feature = "sass"))]
#[cfg_attr(docsrs, doc(cfg(feature = "sass")))]
pub use sass_rs;
Expand Down
Loading
Loading