fix(mod_format/formatters): fix(packagejson.formatter): correctly parse scoped package dependency arguments and default to latest

This commit is contained in:
2025-12-15 17:30:51 +00:00
parent 4d7eaa238f
commit b191464ff9
3 changed files with 20 additions and 4 deletions

View File

@@ -13,9 +13,18 @@ const ensureDependency = async (
constraint: 'exclude' | 'include' | 'latest',
dependencyArg: string,
): Promise<void> => {
const [packageName, version] = dependencyArg.includes('@')
? dependencyArg.split('@').filter(Boolean)
: [dependencyArg, 'latest'];
// Parse package name and version, handling scoped packages like @scope/name@version
const isScoped = dependencyArg.startsWith('@');
const lastAtIndex = dependencyArg.lastIndexOf('@');
// For scoped packages, the version @ must come after the /
// For unscoped packages, any @ indicates a version
const hasVersion = isScoped
? lastAtIndex > dependencyArg.indexOf('/')
: lastAtIndex >= 0;
const packageName = hasVersion ? dependencyArg.slice(0, lastAtIndex) : dependencyArg;
const version = hasVersion ? dependencyArg.slice(lastAtIndex + 1) : 'latest';
const targetSections: string[] = [];