TypeScript codegen generates package names with uppercase letters violating NPM naming conventions
Summary
The DAML TypeScript codegen (daml codegen js) is generating NPM package names that contain uppercase letters, violating NPM naming conventions which require package names to be lowercase.
Environment
- DAML SDK Version: 3.3.0-snapshot.20250507.0
- Platform: All platforms
- Component: TypeScript codegen (
daml codegen js)
Issue Description
When generating TypeScript packages from DAML contracts using daml codegen js, the generated package.json files contain package names with uppercase letters in violation of NPM naming conventions.
According to NPM naming guidelines, package names must be lowercase.
Root Cause
The issue is located in the DAML SDK source code at:
File: language-support/ts/codegen/src/TsCodeGenMain.hs
Line: 101
Problematic code:
pkgNameVerToDir (PackageNameVersion (pkgName, pkgVersion)) = unPackageName pkgName <> "-" <> unPackageVersion pkgVersion
The function directly uses unPackageName pkgName without converting to lowercase, preserving uppercase letters from DAML package names like "DA-Types", "DA-Internal-Template".
Examples of Incorrect Output
Generated package.json files contain names like:
{
"dependencies": {
"@0xsend/daml-prim-DA-Types-1.0.0": "...",
"@0xsend/daml-stdlib-DA-Set-Types-1.0.0": "...",
"@0xsend/daml-stdlib-DA-Time-Types-1.0.0": "...",
"@0xsend/ghc-stdlib-DA-Internal-Template-1.0.0": "..."
}
}
Expected Behavior
Package names should be converted to lowercase:
{
"dependencies": {
"@0xsend/daml-prim-da-types-1.0.0": "...",
"@0xsend/daml-stdlib-da-set-types-1.0.0": "...",
"@0xsend/daml-stdlib-da-time-types-1.0.0": "...",
"@0xsend/ghc-stdlib-da-internal-template-1.0.0": "..."
}
}
Impact
- Violates NPM naming conventions
- May cause issues with package publishing to NPM registries
- Package resolution problems in some environments
- Tooling incompatibility that expects lowercase package names
- Non-compliance with JavaScript ecosystem best practices
Reproduction Steps
- Create any DAML project with contracts
- Run
daml codegen js - Examine the generated package.json files
- Observe uppercase letters in dependency package names
Proposed Fix
The pkgNameVerToDir function should convert package names to lowercase before generating the directory name and NPM package name:
pkgNameVerToDir (PackageNameVersion (pkgName, pkgVersion)) =
T.toLower (unPackageName pkgName) <> "-" <> unPackageVersion pkgVersion