Skip to content

Commit 7427c43

Browse files
authored
Sort baselines (#10)
2 parents ee18d4a + 85e97ab commit 7427c43

3 files changed

Lines changed: 61 additions & 10 deletions

File tree

src/baseline.ts

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import type {
22
Baseline,
3+
BaselineOperations,
4+
BaselineOperationsIgnoreCoordinatesByRule,
35
CheckDocumentOutput,
46
CheckOperationsResult,
57
SourceResultsBySourceName,
@@ -41,7 +43,51 @@ export function generateBaseline(
4143
}
4244
}
4345

44-
return baseline;
46+
return sortBaseline(baseline);
47+
}
48+
49+
function sortIgnoreCoordinatesByRule(
50+
icbr: BaselineOperationsIgnoreCoordinatesByRule,
51+
): BaselineOperationsIgnoreCoordinatesByRule {
52+
return Object.fromEntries(
53+
Object.entries(icbr)
54+
.sort((a, z) => {
55+
return a[0].localeCompare(z[0], "en-US");
56+
})
57+
.map(([key, arr]) => [key, arr != null ? [...arr].sort() : arr]),
58+
);
59+
}
60+
61+
function sortOperations(ops: BaselineOperations): BaselineOperations {
62+
return Object.fromEntries(
63+
Object.entries(ops)
64+
.sort((a, z) => a[0].localeCompare(z[0], "en-US"))
65+
.map(([opName, val]) => {
66+
if (val != null) {
67+
const { ignoreCoordinatesByRule, ...rest } = val;
68+
return [
69+
opName,
70+
{
71+
ignoreCoordinatesByRule: sortIgnoreCoordinatesByRule(
72+
ignoreCoordinatesByRule,
73+
),
74+
...rest,
75+
},
76+
];
77+
} else {
78+
return [opName, val];
79+
}
80+
}),
81+
);
82+
}
83+
84+
export function sortBaseline(baseline: Baseline): Baseline {
85+
const { version, operations, ...rest } = baseline;
86+
return {
87+
version,
88+
operations: sortOperations(operations),
89+
...rest,
90+
};
4591
}
4692

4793
function filterOutput(

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export {
1313
filterBaseline,
1414
filterOnlyErrors,
1515
generateBaseline,
16+
sortBaseline,
1617
} from "./baseline.js";
1718
export {
1819
Baseline,

src/interfaces.ts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,21 @@ export interface CheckOperationsResult {
6868
filtered: number;
6969
}
7070

71+
export interface BaselineOperationsIgnoreCoordinatesByRule {
72+
[infraction: string]: string[] | undefined;
73+
}
74+
75+
export interface BaselineOperations {
76+
[operationName: string]:
77+
| {
78+
ignoreCoordinatesByRule: BaselineOperationsIgnoreCoordinatesByRule;
79+
}
80+
| undefined;
81+
}
82+
7183
export interface Baseline {
7284
version: 1;
73-
operations: {
74-
[operationName: string]:
75-
| {
76-
ignoreCoordinatesByRule: {
77-
[infraction: string]: string[] | undefined;
78-
};
79-
}
80-
| undefined;
81-
};
85+
operations: BaselineOperations;
8286
}
8387

8488
export interface CheckDocumentEvent {

0 commit comments

Comments
 (0)