From 980db1b4fe4cc218351ee703ad9a6354d80b11e8 Mon Sep 17 00:00:00 2001 From: Mikhail Katychev Date: Tue, 2 Jun 2026 15:10:41 -0500 Subject: [PATCH 1/2] fix(cli): handle default windows filenames --- crates/wkg/src/wit.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/wkg/src/wit.rs b/crates/wkg/src/wit.rs index 36e2895..b91f986 100644 --- a/crates/wkg/src/wit.rs +++ b/crates/wkg/src/wit.rs @@ -96,6 +96,9 @@ impl BuildArgs { path } else { let mut file_name = pkg_ref.to_string(); + // Windows does not support colons in file names + #[cfg(windows)] + file_name.replace(':', "_"); if let Some(version) = version { file_name.push_str(&format!("@{version}")); } From b9b876a3c6adae2bb08979783bfd46c43753c9bc Mon Sep 17 00:00:00 2001 From: Mikhail Katychev Date: Thu, 18 Jun 2026 15:02:47 -0500 Subject: [PATCH 2/2] added more comments on windows file characters --- crates/wasm-pkg-core/src/wit.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/crates/wasm-pkg-core/src/wit.rs b/crates/wasm-pkg-core/src/wit.rs index 38bd70d..ddf23f1 100644 --- a/crates/wasm-pkg-core/src/wit.rs +++ b/crates/wasm-pkg-core/src/wit.rs @@ -374,7 +374,21 @@ async fn print_wit_from_resolve( } /// Given a package name, returns a valid directory/file name for it (thanks windows!) +// From https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file, +// the following are invalid diretory/file characters: +// - < (less than) +// - \> (greater than) +// - : (colon) +// - " (double quote) +// - / (forward slash) +// - \\ (backslash) +// - | (vertical bar or pipe) +// - ? (question mark) +// - \* (asterisk) +// fn name_from_package_name(package_name: &PackageName) -> String { let package_name_str = package_name.to_string(); - package_name_str.replace([':', '@'], "-") + // use underscore delimiters since dashes are valid identifier characters in package names + // https://github.com/WebAssembly/component-model/blob/main/design/mvp/Explainer.md#import-and-export-definitions + package_name_str.replace(':', "_") }