@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-pushup/lighthouse-plugin",
3
- "version": "0.66.2",
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.66.2",
40
- "@code-pushup/utils": "0.66.2",
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,3 @@
1
+ import type Details from 'lighthouse/types/lhr/audit-details';
2
+ import type { AuditDetails } from '@code-pushup/models';
3
+ export declare function parseCriticalRequestChainToAuditDetails(details: Details.CriticalRequestChain): AuditDetails;
@@ -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<string>;
7
- export declare function logUnsupportedDetails(lhrAudits: Result[], { displayCount }?: {
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, { displayCount = 3 } = {}) {
37
+ export function logUnsupportedDetails(lhrAudits) {
30
38
  const slugsWithDetailParsingErrors = [
31
39
  ...new Set(lhrAudits
32
- .filter(({ details }) => unsupportedDetailTypes.has(details?.type))
40
+ .filter(({ details }) => details && unsupportedDetailTypes.has(details.type))
33
41
  .map(({ details }) => details?.type)),
34
42
  ];
35
43
  if (slugsWithDetailParsingErrors.length > 0) {
36
- const postFix = (count) => count > displayCount ? ` and ${count - displayCount} more.` : '';
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;AAEhE,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,GAAsB,6BAA6B,CAAC,OAAO,CAAC,CAAC;YACxE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,KAAK,aAAa;YAChB,MAAM,WAAW,GACf,mCAAmC,CAAC,OAAO,CAAC,CAAC;YAC/C,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,8BAA8B;AAC9B,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IAC5C,WAAW;IACX,cAAc;IACd,YAAY;IACZ,WAAW;IACX,sBAAsB;CACvB,CAAC,CAAC;AAEH,MAAM,UAAU,qBAAqB,CACnC,SAAmB,EACnB,EAAE,YAAY,GAAG,CAAC,KAAgC,EAAE;IAEpD,MAAM,4BAA4B,GAAG;QACnC,GAAG,IAAI,GAAG,CACR,SAAS;aACN,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACtB,sBAAsB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAc,CAAC,CACpD;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,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE,CAChC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,YAAY,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CACf,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,CAC3B,WAAW,CACZ,kDAAkD,IAAI,CACrD,4BAA4B,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/D,GAAG,OAAO,CAAC,4BAA4B,CAAC,MAAM,CAAC,EAAE,CACnD,CAAC;IACJ,CAAC;AACH,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,3 @@
1
+ import type Details from 'lighthouse/types/lhr/audit-details';
2
+ import type { BasicTree } from '@code-pushup/models';
3
+ export declare function parseTreemapDataToBasicTrees(details: Details.TreemapData): BasicTree[];
@@ -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"}