diff --git a/packages/cargo-pgml-components/Cargo.lock b/packages/cargo-pgml-components/Cargo.lock index 89f1b1467..92f4118dc 100644 --- a/packages/cargo-pgml-components/Cargo.lock +++ b/packages/cargo-pgml-components/Cargo.lock @@ -126,7 +126,7 @@ dependencies = [ [[package]] name = "cargo-pgml-components" -version = "0.1.19" +version = "0.1.20" dependencies = [ "anyhow", "assert_cmd", @@ -143,6 +143,7 @@ dependencies = [ "regex", "sailfish", "serde", + "serde_json", "toml", ] @@ -428,6 +429,12 @@ dependencies = [ "either", ] +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + [[package]] name = "itoap" version = "1.0.1" @@ -670,6 +677,17 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_json" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +dependencies = [ + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_spanned" version = "0.6.3" diff --git a/packages/cargo-pgml-components/Cargo.toml b/packages/cargo-pgml-components/Cargo.toml index 9638e05a2..55fff6533 100644 --- a/packages/cargo-pgml-components/Cargo.toml +++ b/packages/cargo-pgml-components/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cargo-pgml-components" -version = "0.1.19" +version = "0.1.20" edition = "2021" authors = ["PostgresML "] license = "MIT" @@ -22,6 +22,7 @@ regex = "1" toml = "0.7" serde = { version = "1", features = ["derive"] } file-lock = "2" +serde_json = "1" [dev-dependencies] assert_cmd = "2" diff --git a/packages/cargo-pgml-components/src/frontend/javascript.rs b/packages/cargo-pgml-components/src/frontend/javascript.rs index 8784d2a98..5b00a9e11 100644 --- a/packages/cargo-pgml-components/src/frontend/javascript.rs +++ b/packages/cargo-pgml-components/src/frontend/javascript.rs @@ -1,13 +1,14 @@ //! Javascript bundling. use glob::glob; -use std::collections::HashSet; +use std::collections::{HashMap, HashSet}; use std::fs::{copy, read_to_string, remove_file, File}; use std::io::Write; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use std::process::{exit, Command}; use convert_case::{Case, Casing}; +use serde::{Deserialize, Serialize}; use crate::config::Config; use crate::frontend::tools::execute_with_nvm; @@ -32,6 +33,11 @@ static OLD_BUNLDES_GLOB: &'static str = "static/js/*.*.js"; /// JS compiler static JS_COMPILER: &'static str = "rollup"; +#[derive(Serialize, Deserialize, Debug)] +struct Packages { + dependencies: HashMap, +} + /// Delete old bundles we may have created. fn cleanup_old_bundles() { // Clean up old bundles @@ -146,6 +152,16 @@ pub fn bundle(config: Config, minify: bool) { cleanup_old_bundles(); assemble_modules(config.clone()); + let package_json = Path::new("package.json"); + + let packages: Packages = if package_json.is_file() { + let packages = unwrap_or_exit!(read_to_string(package_json)); + unwrap_or_exit!(serde_json::from_str(&packages)) + } else { + warn("package.json not found, can't validate rollup output"); + serde_json::from_str(r#"{"dependencies": {}}"#).unwrap() + }; + let mut command = Command::new(JS_COMPILER); command @@ -163,7 +179,17 @@ pub fn bundle(config: Config, minify: bool) { // Bundle JavaScript. info("bundling javascript with rollup"); - unwrap_or_exit!(execute_with_nvm(&mut command)); + let output = unwrap_or_exit!(execute_with_nvm(&mut command)); + + let lines = output.split("\n"); + for line in lines { + for (package, _version) in &packages.dependencies { + if line.contains(package) { + error(&format!("unresolved import: {}", package)); + exit(1); + } + } + } info(&format!("written {}", JS_FILE)); diff --git a/packages/cargo-pgml-components/src/util.rs b/packages/cargo-pgml-components/src/util.rs index b2f8c4e82..fcf31ad49 100644 --- a/packages/cargo-pgml-components/src/util.rs +++ b/packages/cargo-pgml-components/src/util.rs @@ -69,7 +69,7 @@ pub fn execute_command(command: &mut Command) -> std::io::Result { info!("{}", stdout); } - Ok(stdout) + Ok(stdout.clone() + &stderr) } pub fn write_to_file(path: &Path, content: &str) -> std::io::Result<()> { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy