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(':', "_") } 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}")); }