From a174bc56b7ddb6b014d12e5398901e96bf15ca88 Mon Sep 17 00:00:00 2001 From: Nick Palmer Date: Thu, 11 Feb 2021 13:51:11 -0600 Subject: [PATCH 1/2] Don't assume the target package has the key --- src/updateCommand.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/updateCommand.ts b/src/updateCommand.ts index 6d1ad96..bddb8d3 100644 --- a/src/updateCommand.ts +++ b/src/updateCommand.ts @@ -12,7 +12,13 @@ export function updateCommand(cwd: string) { const { packageJsonPath, ...output } = info; const newLine = detectNewline(fs.readFileSync(info.packageJsonPath, 'utf-8')) || os.EOL; - + // Sort dependencies before outputing them like package managers do + ['dependencies', 'devDependencies'].map(function(key){ + if (output[key]) { + const keys = Object.keys(output[key]).sort(); + output[key] = JSON.parse(JSON.stringify(output[key], keys)); + } + }); fs.writeFileSync( info.packageJsonPath, JSON.stringify(output, null, 2).replace(/\n/g, newLine) + newLine From b3309c06d17f6316d3f9330720cd42e4579044da Mon Sep 17 00:00:00 2001 From: Nick Palmer Date: Thu, 11 Feb 2021 13:52:25 -0600 Subject: [PATCH 2/2] Sort package keys before output Package managers ususally sort package keys alphabetically. If you newly inherit then you may get a bunch of additions which will then be unalphabatized, leading to a messy diff if a new package is added with the package manager. --- src/generateInheritedPackageJson.ts | 2 +- src/updateCommand.ts | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/generateInheritedPackageJson.ts b/src/generateInheritedPackageJson.ts index 461080c..9fb912c 100644 --- a/src/generateInheritedPackageJson.ts +++ b/src/generateInheritedPackageJson.ts @@ -70,7 +70,7 @@ function shouldUpdate(mine: any, theirs: any) { let result = false; for (const [key, value] of Object.entries(theirs)) { - if (mine[key] !== value) { + if (!mine || mine[key] !== value) { result = true; } } diff --git a/src/updateCommand.ts b/src/updateCommand.ts index bddb8d3..a26a1d8 100644 --- a/src/updateCommand.ts +++ b/src/updateCommand.ts @@ -15,8 +15,10 @@ export function updateCommand(cwd: string) { // Sort dependencies before outputing them like package managers do ['dependencies', 'devDependencies'].map(function(key){ if (output[key]) { - const keys = Object.keys(output[key]).sort(); - output[key] = JSON.parse(JSON.stringify(output[key], keys)); + output[key] = Object.keys(output[key]).sort().reduce(function(newObject, packageName) { + newObject[packageName] = output[key][packageName]; + return newObject; + }, {}); } }); fs.writeFileSync(