-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathprocessing.ts
More file actions
101 lines (94 loc) · 2.71 KB
/
processing.ts
File metadata and controls
101 lines (94 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import type { Audit, Group } from '@code-pushup/models';
import {
addIndex,
expandAuditsForUrls,
expandGroupsForUrls,
logger,
objectFromEntries,
objectToEntries,
pluralizeToken,
shouldExpandForUrls,
} from '@code-pushup/utils';
import { formatMetaLog } from './format.js';
import {
LIGHTHOUSE_GROUPS,
LIGHTHOUSE_NAVIGATION_AUDITS,
} from './runner/constants.js';
import { type FilterOptions, markSkippedAuditsAndGroups } from './utils.js';
export function expandOptionsForUrls(
options: FilterOptions,
urlCount: number,
): FilterOptions {
return objectFromEntries(
objectToEntries(options).map(([key, value = []]) => [
key,
value.flatMap(slug =>
Array.from({ length: urlCount }, (_, i) => addIndex(slug, i)),
),
]),
);
}
export function processAuditsAndGroups(urls: string[], options: FilterOptions) {
logTotal();
if (!shouldExpandForUrls(urls.length)) {
const marked = markSkippedAuditsAndGroups(
LIGHTHOUSE_NAVIGATION_AUDITS,
LIGHTHOUSE_GROUPS,
options,
);
logSkipped(marked);
return marked;
}
const expandedAudits = expandAuditsForUrls(
LIGHTHOUSE_NAVIGATION_AUDITS,
urls,
);
const expandedGroups = expandGroupsForUrls(LIGHTHOUSE_GROUPS, urls);
const expandedOptions = expandOptionsForUrls(options, urls.length);
logExpanded(expandedAudits, expandedGroups, urls);
const marked = markSkippedAuditsAndGroups(
expandedAudits,
expandedGroups,
expandedOptions,
);
logSkipped(marked);
return marked;
}
function logTotal(): void {
logger.info(
formatMetaLog(
`Created ${pluralizeToken('group', LIGHTHOUSE_GROUPS.length)} and ${pluralizeToken('audit', LIGHTHOUSE_NAVIGATION_AUDITS.length)} from Lighthouse's categories and navigation audits`,
),
);
}
function logExpanded(
expandedAudits: Audit[],
expandedGroups: Group[],
urls: string[],
): void {
logger.info(
formatMetaLog(
`Expanded audits (${LIGHTHOUSE_NAVIGATION_AUDITS.length} → ${expandedAudits.length}) and groups (${LIGHTHOUSE_GROUPS.length} → ${expandedGroups.length}) for ${pluralizeToken('URL', urls.length)}`,
),
);
}
function logSkipped(marked: { audits: Audit[]; groups: Group[] }): void {
const { audits, groups } = marked;
const formattedCounts = [
{ name: 'audit', items: audits },
{ name: 'group', items: groups },
]
.map(({ name, items }) => {
const skipped = items.filter(({ isSkipped }) => isSkipped);
if (skipped.length === 0) {
return '';
}
return `${skipped.length} out of ${pluralizeToken(name, items.length)}`;
})
.filter(Boolean)
.join(' and ');
if (!formattedCounts) {
return;
}
logger.info(formatMetaLog(`Skipping ${formattedCounts}`));
}