@code-pushup/lighthouse-plugin 0.66.2 → 0.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/src/lib/runner/details/critical-request-chain.type.d.ts +3 -0
- package/src/lib/runner/details/critical-request-chain.type.js +53 -0
- package/src/lib/runner/details/critical-request-chain.type.js.map +1 -0
- package/src/lib/runner/details/details.d.ts +2 -4
- package/src/lib/runner/details/details.js +13 -6
- package/src/lib/runner/details/details.js.map +1 -1
- package/src/lib/runner/details/treemap-data.type.d.ts +3 -0
- package/src/lib/runner/details/treemap-data.type.js +25 -0
- package/src/lib/runner/details/treemap-data.type.js.map +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@code-pushup/lighthouse-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.68.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Code PushUp plugin for measuring web performance and quality with Lighthouse 🔥",
|
|
6
6
|
"homepage": "https://github.com/code-pushup/cli/tree/main/packages/plugin-lighthouse#readme",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
},
|
|
37
37
|
"type": "module",
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@code-pushup/models": "0.
|
|
40
|
-
"@code-pushup/utils": "0.
|
|
39
|
+
"@code-pushup/models": "0.68.0",
|
|
40
|
+
"@code-pushup/utils": "0.68.0",
|
|
41
41
|
"ansis": "^3.3.0",
|
|
42
42
|
"chrome-launcher": "^1.1.1",
|
|
43
43
|
"lighthouse": "^12.0.0",
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { formatBytes, formatDuration } from '@code-pushup/utils';
|
|
2
|
+
const DURATION_DECIMALS = 3;
|
|
3
|
+
export function parseCriticalRequestChainToAuditDetails(details) {
|
|
4
|
+
const trees = chainsToTrees(details);
|
|
5
|
+
const table = longestChainToTable(details);
|
|
6
|
+
return { table, trees };
|
|
7
|
+
}
|
|
8
|
+
function longestChainToTable(details) {
|
|
9
|
+
const longestChain = {
|
|
10
|
+
duration: formatDuration(details.longestChain.duration, DURATION_DECIMALS),
|
|
11
|
+
transferSize: formatBytes(details.longestChain.transferSize),
|
|
12
|
+
length: details.longestChain.length,
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
title: 'Longest chain',
|
|
16
|
+
columns: [
|
|
17
|
+
{
|
|
18
|
+
key: 'duration',
|
|
19
|
+
label: 'Duration',
|
|
20
|
+
align: 'right',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
key: 'transferSize',
|
|
24
|
+
label: 'Transfer size',
|
|
25
|
+
align: 'right',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
key: 'length',
|
|
29
|
+
label: 'Length',
|
|
30
|
+
align: 'right',
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
rows: [longestChain],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function chainsToTrees(details) {
|
|
37
|
+
return Object.values(details.chains)
|
|
38
|
+
.map(chainToTreeNode)
|
|
39
|
+
.map(root => ({ type: 'basic', root }));
|
|
40
|
+
}
|
|
41
|
+
function chainToTreeNode(chain) {
|
|
42
|
+
return {
|
|
43
|
+
name: chain.request.url,
|
|
44
|
+
values: {
|
|
45
|
+
duration: formatDuration((chain.request.endTime - chain.request.startTime) * 1000, DURATION_DECIMALS),
|
|
46
|
+
transferSize: formatBytes(chain.request.transferSize),
|
|
47
|
+
},
|
|
48
|
+
...(chain.children && {
|
|
49
|
+
children: Object.values(chain.children).map(chainToTreeNode),
|
|
50
|
+
}),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=critical-request-chain.type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"critical-request-chain.type.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-lighthouse/src/lib/runner/details/critical-request-chain.type.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,MAAM,UAAU,uCAAuC,CACrD,OAAqC;IAErC,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAqC;IAChE,MAAM,YAAY,GAAG;QACnB,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,iBAAiB,CAAC;QAC1E,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC;QAC5D,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM;KACpC,CAAC;IAGF,OAAO;QACL,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE;YACP;gBACE,GAAG,EAAE,UAA8B;gBACnC,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE,OAAO;aACf;YACD;gBACE,GAAG,EAAE,cAAkC;gBACvC,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,OAAO;aACf;YACD;gBACE,GAAG,EAAE,QAA4B;gBACjC,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,OAAO;aACf;SACF;QACD,IAAI,EAAE,CAAC,YAAY,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,OAAqC;IAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACjC,GAAG,CAAC,eAAe,CAAC;SACpB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,eAAe,CACtB,KAAgD;IAEhD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG;QACvB,MAAM,EAAE;YACN,QAAQ,EAAE,cAAc,CACtB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,EACxD,iBAAiB,CAClB;YACD,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;SACtD;QACD,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI;YACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;SAC7D,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -3,7 +3,5 @@ import type Details from 'lighthouse/types/lhr/audit-details';
|
|
|
3
3
|
import type { Result } from 'lighthouse/types/lhr/audit-result';
|
|
4
4
|
import type { AuditDetails } from '@code-pushup/models';
|
|
5
5
|
export declare function toAuditDetails<T extends FormattedIcu<Details>>(details: T | undefined): AuditDetails;
|
|
6
|
-
export declare const unsupportedDetailTypes: Set<
|
|
7
|
-
export declare function logUnsupportedDetails(lhrAudits: Result[]
|
|
8
|
-
displayCount?: number;
|
|
9
|
-
}): void;
|
|
6
|
+
export declare const unsupportedDetailTypes: Set<"debugdata" | "table" | "opportunity" | "list" | "criticalrequestchain" | "treemap-data" | "filmstrip" | "screenshot">;
|
|
7
|
+
export declare function logUnsupportedDetails(lhrAudits: Result[]): void;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { bold, yellow } from 'ansis';
|
|
2
2
|
import { ui } from '@code-pushup/utils';
|
|
3
3
|
import { PLUGIN_SLUG } from '../constants.js';
|
|
4
|
+
import { parseCriticalRequestChainToAuditDetails } from './critical-request-chain.type.js';
|
|
4
5
|
import { parseOpportunityToAuditDetailsTable } from './opportunity.type.js';
|
|
5
6
|
import { parseTableToAuditDetailsTable } from './table.type.js';
|
|
7
|
+
import { parseTreemapDataToBasicTrees } from './treemap-data.type.js';
|
|
6
8
|
export function toAuditDetails(details) {
|
|
7
9
|
if (details == null) {
|
|
8
10
|
return {};
|
|
@@ -15,26 +17,31 @@ export function toAuditDetails(details) {
|
|
|
15
17
|
case 'opportunity':
|
|
16
18
|
const opportunity = parseOpportunityToAuditDetailsTable(details);
|
|
17
19
|
return opportunity ? { table: opportunity } : {};
|
|
20
|
+
case 'criticalrequestchain':
|
|
21
|
+
return parseCriticalRequestChainToAuditDetails(details);
|
|
22
|
+
case 'treemap-data':
|
|
23
|
+
const trees = parseTreemapDataToBasicTrees(details);
|
|
24
|
+
return { trees };
|
|
25
|
+
// TODO: add 'list' once array of tables supported in audit details
|
|
26
|
+
// TODO: add 'screenshot' and 'filmstrip' once images supported in audit details
|
|
18
27
|
}
|
|
19
28
|
return {};
|
|
20
29
|
}
|
|
21
30
|
// @TODO implement all details
|
|
22
31
|
export const unsupportedDetailTypes = new Set([
|
|
32
|
+
'list',
|
|
23
33
|
'debugdata',
|
|
24
|
-
'treemap-data',
|
|
25
34
|
'screenshot',
|
|
26
35
|
'filmstrip',
|
|
27
|
-
'criticalrequestchain',
|
|
28
36
|
]);
|
|
29
|
-
export function logUnsupportedDetails(lhrAudits
|
|
37
|
+
export function logUnsupportedDetails(lhrAudits) {
|
|
30
38
|
const slugsWithDetailParsingErrors = [
|
|
31
39
|
...new Set(lhrAudits
|
|
32
|
-
.filter(({ details }) => unsupportedDetailTypes.has(details
|
|
40
|
+
.filter(({ details }) => details && unsupportedDetailTypes.has(details.type))
|
|
33
41
|
.map(({ details }) => details?.type)),
|
|
34
42
|
];
|
|
35
43
|
if (slugsWithDetailParsingErrors.length > 0) {
|
|
36
|
-
|
|
37
|
-
ui().logger.debug(`${yellow('⚠')} Plugin ${bold(PLUGIN_SLUG)} skipped parsing of unsupported audit details: ${bold(slugsWithDetailParsingErrors.slice(0, displayCount).join(', '))}${postFix(slugsWithDetailParsingErrors.length)}`);
|
|
44
|
+
ui().logger.debug(`${yellow('⚠')} Plugin ${bold(PLUGIN_SLUG)} skipped parsing of unsupported audit details: ${bold(slugsWithDetailParsingErrors.join(', '))}.`);
|
|
38
45
|
}
|
|
39
46
|
}
|
|
40
47
|
//# sourceMappingURL=details.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"details.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-lighthouse/src/lib/runner/details/details.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAKrC,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,mCAAmC,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"details.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-lighthouse/src/lib/runner/details/details.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAKrC,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,uCAAuC,EAAE,MAAM,kCAAkC,CAAC;AAC3F,OAAO,EAAE,mCAAmC,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,UAAU,cAAc,CAC5B,OAAsB;IAEtB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEzB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,MAAM,KAAK,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,KAAK,aAAa;YAChB,MAAM,WAAW,GAAG,mCAAmC,CAAC,OAAO,CAAC,CAAC;YACjE,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,KAAK,sBAAsB;YACzB,OAAO,uCAAuC,CAAC,OAAO,CAAC,CAAC;QAC1D,KAAK,cAAc;YACjB,MAAM,KAAK,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;YACpD,OAAO,EAAE,KAAK,EAAE,CAAC;QAEnB,mEAAmE;QAEnE,gFAAgF;IAClF,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,8BAA8B;AAC9B,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAkB;IAC7D,MAAM;IACN,WAAW;IACX,YAAY;IACZ,WAAW;CACZ,CAAC,CAAC;AAEH,MAAM,UAAU,qBAAqB,CAAC,SAAmB;IACvD,MAAM,4BAA4B,GAAG;QACnC,GAAG,IAAI,GAAG,CACR,SAAS;aACN,MAAM,CACL,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,IAAI,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CACrE;aACA,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CACvC;KACF,CAAC;IACF,IAAI,4BAA4B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CACf,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,CAC3B,WAAW,CACZ,kDAAkD,IAAI,CACrD,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CACxC,GAAG,CACL,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { formatBytes } from '@code-pushup/utils';
|
|
2
|
+
export function parseTreemapDataToBasicTrees(details) {
|
|
3
|
+
return details.nodes.map(node => ({
|
|
4
|
+
type: 'basic',
|
|
5
|
+
root: treemapNodeToBasicTreeNode(node),
|
|
6
|
+
}));
|
|
7
|
+
}
|
|
8
|
+
function treemapNodeToBasicTreeNode(node) {
|
|
9
|
+
return {
|
|
10
|
+
name: node.name,
|
|
11
|
+
values: {
|
|
12
|
+
resourceBytes: formatBytes(node.resourceBytes),
|
|
13
|
+
...(node.unusedBytes != null && {
|
|
14
|
+
unusedBytes: formatBytes(node.unusedBytes),
|
|
15
|
+
}),
|
|
16
|
+
...(node.duplicatedNormalizedModuleName && {
|
|
17
|
+
duplicatedNormalizedModuleName: node.duplicatedNormalizedModuleName,
|
|
18
|
+
}),
|
|
19
|
+
},
|
|
20
|
+
...(node.children && {
|
|
21
|
+
children: node.children.map(treemapNodeToBasicTreeNode),
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=treemap-data.type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treemap-data.type.js","sourceRoot":"","sources":["../../../../../../../packages/plugin-lighthouse/src/lib/runner/details/treemap-data.type.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,UAAU,4BAA4B,CAC1C,OAA4B;IAE5B,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,0BAA0B,CAAC,IAAI,CAAC;KACvC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAkB;IACpD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE;YACN,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;YAC9C,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI;gBAC9B,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;aAC3C,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,8BAA8B,IAAI;gBACzC,8BAA8B,EAAE,IAAI,CAAC,8BAA8B;aACpE,CAAC;SACH;QACD,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,0BAA0B,CAAC;SACxD,CAAC;KACH,CAAC;AACJ,CAAC"}
|