Skip to content

Commit 2a5c2c3

Browse files
jeremymengCopilot
andauthored
[dev-tool] extract sortPackageJson helper (#36095)
as it is useful outside of migrate-test command, which could be removed in the future. --------- Co-authored-by: Copilot <[email protected]>
1 parent 28f213b commit 2a5c2c3

File tree

2 files changed

+37
-22
lines changed

2 files changed

+37
-22
lines changed

common/tools/dev-tool/src/commands/admin/migrate-tests.ts

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { readFile, writeFile } from "node:fs/promises";
88
import { resolve } from "node:path";
99
import { vendoredWithOptions } from "../run/vendored";
1010
import { getRushJson, RushJsonProject } from "../../util/synthesizedRushJson";
11+
import { sortPackageJson } from "../../util/sortPackageJson";
1112

1213
const log = createPrinter("migrate-tests");
1314

@@ -133,7 +134,7 @@ async function updatePackageJson(projectFolder: string): Promise<boolean> {
133134
packageJson.scripts["test"] = "npm run test:node && npm run test:browser";
134135

135136
// Clean it up
136-
sortPackage(packageJson);
137+
sortPackageJson(packageJson);
137138

138139
await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
139140

@@ -146,27 +147,6 @@ async function updatePackageJson(projectFolder: string): Promise<boolean> {
146147
return true;
147148
}
148149

149-
function sortObjectByKeys(unsortedObj: { [key: string]: string }): { [key: string]: string } {
150-
const sortedEntries = Object.entries(unsortedObj).sort((a, b) => a[0].localeCompare(b[0]));
151-
return Object.fromEntries(sortedEntries);
152-
}
153-
154-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
155-
function sortPackage(packageJson: any): void {
156-
if (packageJson.dependencies) {
157-
packageJson.dependencies = sortObjectByKeys(packageJson.dependencies);
158-
}
159-
if (packageJson.devDependencies) {
160-
packageJson.devDependencies = sortObjectByKeys(packageJson.devDependencies);
161-
}
162-
if (packageJson.peerDependencies) {
163-
packageJson.peerDependencies = sortObjectByKeys(packageJson.peerDependencies);
164-
}
165-
if (packageJson.scripts) {
166-
packageJson.scripts = sortObjectByKeys(packageJson.scripts);
167-
}
168-
}
169-
170150
async function runCleanup(projectFolder: string): Promise<boolean> {
171151
const prettierCommandArgs = [
172152
"prettier",
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
/**
5+
* Returns a new object with the same key-value pairs as the input object, but with keys sorted alphabetically.
6+
*
7+
* @param unsortedObj - The object whose keys should be sorted.
8+
* @returns A new object with keys sorted in ascending order.
9+
* @internal
10+
*/
11+
function sortObjectByKeys(unsortedObj: { [key: string]: string }): { [key: string]: string } {
12+
const sortedEntries = Object.entries(unsortedObj).sort((a, b) => a[0].localeCompare(b[0]));
13+
return Object.fromEntries(sortedEntries);
14+
}
15+
16+
/**
17+
* Sorts the dependencies, devDependencies, peerDependencies, and scripts fields of a package.json object alphabetically by key.
18+
*
19+
* @param packageJson - The package.json object to sort. This object is modified in-place.
20+
*/
21+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
22+
export function sortPackageJson(packageJson: any): void {
23+
if (packageJson.dependencies) {
24+
packageJson.dependencies = sortObjectByKeys(packageJson.dependencies);
25+
}
26+
if (packageJson.devDependencies) {
27+
packageJson.devDependencies = sortObjectByKeys(packageJson.devDependencies);
28+
}
29+
if (packageJson.peerDependencies) {
30+
packageJson.peerDependencies = sortObjectByKeys(packageJson.peerDependencies);
31+
}
32+
if (packageJson.scripts) {
33+
packageJson.scripts = sortObjectByKeys(packageJson.scripts);
34+
}
35+
}

0 commit comments

Comments
 (0)