daml icon indicating copy to clipboard operation
daml copied to clipboard

TypeScript codegen generates package names with uppercase letters violating NPM naming conventions

Open 0xBigBoss opened this issue 6 months ago • 0 comments

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

  1. Create any DAML project with contracts
  2. Run daml codegen js
  3. Examine the generated package.json files
  4. 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

Reference

0xBigBoss avatar Jun 06 '25 19:06 0xBigBoss