Skip to content
Merged
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: 2 additions & 1 deletion packages/cli-opt/src/file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,8 @@ pub(crate) fn process_file_to_with_options(
}

// If everything was successful, rename the temp file to the final output path
std::fs::rename(temp_path, output_path).context("Failed to rename output file")?;
std::fs::rename(temp_path, output_path)
.with_context(|| format!("Failed to rename output file to: {}", output_path.display()))?;

Ok(())
}
Expand Down
5 changes: 4 additions & 1 deletion packages/cli-opt/src/hash.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,10 @@ pub fn add_hash_to_asset(asset: &mut BundledAsset) {
};

if let Some(ext) = ext {
bundled_path.set_extension(ext);
// Push the extension to the bundled path. There may be multiple extensions (e.g. .js.map)
// with one left after the file_stem is extracted above so we need to push the extension
// instead of setting it
bundled_path.as_mut_os_string().push(format!(".{ext}"));
}

let bundled_path = bundled_path.to_string_lossy().to_string();
Expand Down
11 changes: 8 additions & 3 deletions packages/cli-opt/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,14 @@ impl AssetManifest {
.is_some_and(|assets| assets.contains(asset))
}

/// Iterate over all the assets in the manifest
pub fn assets(&self) -> impl Iterator<Item = &BundledAsset> {
self.assets.values().flat_map(|assets| assets.iter())
/// Iterate over all the assets with unique output paths in the manifest. This will not include
/// assets that have different source paths, but the same file contents.
pub fn unique_assets(&self) -> impl Iterator<Item = &BundledAsset> {
let mut seen = HashSet::new();
self.assets
.values()
.flat_map(|assets| assets.iter())
.filter(move |asset| seen.insert(asset.bundled_path()))
}

pub fn load_from_file(path: &Path) -> anyhow::Result<Self> {
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/src/build/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -637,7 +637,7 @@ impl AppBuilder {
let asset_dir = self.build.asset_dir();

// Hotpatch asset!() calls
for bundled in res.assets.assets() {
for bundled in res.assets.unique_assets() {
let original_artifacts = self
.artifacts
.as_mut()
Expand Down
6 changes: 3 additions & 3 deletions packages/cli/src/build/request.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1189,7 +1189,7 @@ impl BuildRequest {

// Create a set of all the paths that new files will be bundled to
let mut keep_bundled_output_paths: HashSet<_> = assets
.assets()
.unique_assets()
.map(|a| asset_dir.join(a.bundled_path()))
.collect();

Expand Down Expand Up @@ -1228,7 +1228,7 @@ impl BuildRequest {
let mut assets_to_transfer = vec![];

// Queue the bundled assets
for bundled in assets.assets() {
for bundled in assets.unique_assets() {
let from = PathBuf::from(bundled.absolute_source_path());
let to = asset_dir.join(bundled.bundled_path());

Expand Down Expand Up @@ -4310,7 +4310,7 @@ __wbg_init({{module_or_path: "/{}/{wasm_path}"}}).then((wasm) => {{
}

// Inject any resources from manganis into the head
for asset in assets.assets() {
for asset in assets.unique_assets() {
let asset_path = asset.bundled_path();
match asset.options().variant() {
AssetVariant::Css(css_options) => {
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/src/cli/build_assets.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ impl BuildAssets {
let manifest = extract_assets_from_file(&self.executable)?;

create_dir_all(&self.destination)?;
for asset in manifest.assets() {
for asset in manifest.unique_assets() {
let source_path = PathBuf::from(asset.absolute_source_path());
let destination_path = self.destination.join(asset.bundled_path());
debug!(
Expand Down
Loading