Skip to content

Commit

Permalink
generate skeletons
Browse files Browse the repository at this point in the history
  • Loading branch information
connorjclark committed Feb 4, 2025
1 parent ae78390 commit 8f474ba
Show file tree
Hide file tree
Showing 24 changed files with 808 additions and 11 deletions.
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ jobs:
- run: yarn test-legacy-javascript
- run: yarn i18n:checks
- run: yarn dogfood-lhci
- run: yarn generate-insight-audits

# Fail if any changes were written to any source files or generated untracked files (ex, from: build/build-cdt-lib.js).
- run: git add -A && git diff --cached --exit-code
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions build/test/page-functions-test-case-getNodeDetails-out.js.map

Large diffs are not rendered by default.

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions core/audits/insights/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Insight audits

When adding new insight audits, you can start off by just running `yarn generate-insight-audits`
50 changes: 50 additions & 0 deletions core/audits/insights/cls-culprits-insight.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/

import {UIStrings} from '@paulirish/trace_engine/models/trace/insights/CLSCulprits.js';

import {Audit} from '../audit.js';
import * as i18n from '../../lib/i18n/i18n.js';
import {adaptInsightToAuditProduct, makeNodeItemForNodeId} from './insight-audit.js';

// eslint-disable-next-line max-len
const str_ = i18n.createIcuMessageFn('node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js', UIStrings);

class CLSCulpritsInsight extends Audit {
/**
* @return {LH.Audit.Meta}
*/
static get meta() {
return {
id: 'cls-culprits-insight',
title: str_(UIStrings.title),
description: str_(UIStrings.description),
guidanceLevel: 3, // TODO: confirm/change.
requiredArtifacts: ['traces', 'TraceElements'],
scoreDisplayMode: Audit.SCORING_MODES.METRIC_SAVINGS, // TODO: confirm/change.
};
}

/**
* @param {LH.Artifacts} artifacts
* @param {LH.Audit.Context} context
* @return {Promise<LH.Audit.Product>}
*/
static async audit(artifacts, context) {
// TODO: implement.
return adaptInsightToAuditProduct(artifacts, context, 'CLSCulprits', (insight) => {
/** @type {LH.Audit.Details.Table['headings']} */
const headings = [
];
/** @type {LH.Audit.Details.Table['items']} */
const items = [
];
return Audit.makeTableDetails(headings, items);
});
}
}

export default CLSCulpritsInsight;
50 changes: 50 additions & 0 deletions core/audits/insights/document-latency-insight.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/

import {UIStrings} from '@paulirish/trace_engine/models/trace/insights/DocumentLatency.js';

import {Audit} from '../audit.js';
import * as i18n from '../../lib/i18n/i18n.js';
import {adaptInsightToAuditProduct, makeNodeItemForNodeId} from './insight-audit.js';

// eslint-disable-next-line max-len
const str_ = i18n.createIcuMessageFn('node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js', UIStrings);

class DocumentLatencyInsight extends Audit {
/**
* @return {LH.Audit.Meta}
*/
static get meta() {
return {
id: 'document-latency-insight',
title: str_(UIStrings.title),
description: str_(UIStrings.description),
guidanceLevel: 3, // TODO: confirm/change.
requiredArtifacts: ['traces', 'TraceElements'],
scoreDisplayMode: Audit.SCORING_MODES.METRIC_SAVINGS, // TODO: confirm/change.
};
}

/**
* @param {LH.Artifacts} artifacts
* @param {LH.Audit.Context} context
* @return {Promise<LH.Audit.Product>}
*/
static async audit(artifacts, context) {
// TODO: implement.
return adaptInsightToAuditProduct(artifacts, context, 'DocumentLatency', (insight) => {
/** @type {LH.Audit.Details.Table['headings']} */
const headings = [
];
/** @type {LH.Audit.Details.Table['items']} */
const items = [
];
return Audit.makeTableDetails(headings, items);
});
}
}

export default DocumentLatencyInsight;
50 changes: 50 additions & 0 deletions core/audits/insights/font-display-insight.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/

import {UIStrings} from '@paulirish/trace_engine/models/trace/insights/FontDisplay.js';

import {Audit} from '../audit.js';
import * as i18n from '../../lib/i18n/i18n.js';
import {adaptInsightToAuditProduct, makeNodeItemForNodeId} from './insight-audit.js';

// eslint-disable-next-line max-len
const str_ = i18n.createIcuMessageFn('node_modules/@paulirish/trace_engine/models/trace/insights/FontDisplay.js', UIStrings);

class FontDisplayInsight extends Audit {
/**
* @return {LH.Audit.Meta}
*/
static get meta() {
return {
id: 'font-display-insight',
title: str_(UIStrings.title),
description: str_(UIStrings.description),
guidanceLevel: 3, // TODO: confirm/change.
requiredArtifacts: ['traces', 'TraceElements'],
scoreDisplayMode: Audit.SCORING_MODES.METRIC_SAVINGS, // TODO: confirm/change.
};
}

/**
* @param {LH.Artifacts} artifacts
* @param {LH.Audit.Context} context
* @return {Promise<LH.Audit.Product>}
*/
static async audit(artifacts, context) {
// TODO: implement.
return adaptInsightToAuditProduct(artifacts, context, 'FontDisplay', (insight) => {
/** @type {LH.Audit.Details.Table['headings']} */
const headings = [
];
/** @type {LH.Audit.Details.Table['items']} */
const items = [
];
return Audit.makeTableDetails(headings, items);
});
}
}

export default FontDisplayInsight;
50 changes: 50 additions & 0 deletions core/audits/insights/forced-reflow-insight.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/

import {UIStrings} from '@paulirish/trace_engine/models/trace/insights/ForcedReflow.js';

import {Audit} from '../audit.js';
import * as i18n from '../../lib/i18n/i18n.js';
import {adaptInsightToAuditProduct, makeNodeItemForNodeId} from './insight-audit.js';

// eslint-disable-next-line max-len
const str_ = i18n.createIcuMessageFn('node_modules/@paulirish/trace_engine/models/trace/insights/ForcedReflow.js', UIStrings);

class ForcedReflowInsight extends Audit {
/**
* @return {LH.Audit.Meta}
*/
static get meta() {
return {
id: 'forced-reflow-insight',
title: str_(UIStrings.title),
description: str_(UIStrings.description),
guidanceLevel: 3, // TODO: confirm/change.
requiredArtifacts: ['traces', 'TraceElements'],
scoreDisplayMode: Audit.SCORING_MODES.METRIC_SAVINGS, // TODO: confirm/change.
};
}

/**
* @param {LH.Artifacts} artifacts
* @param {LH.Audit.Context} context
* @return {Promise<LH.Audit.Product>}
*/
static async audit(artifacts, context) {
// TODO: implement.
return adaptInsightToAuditProduct(artifacts, context, 'ForcedReflow', (insight) => {
/** @type {LH.Audit.Details.Table['headings']} */
const headings = [
];
/** @type {LH.Audit.Details.Table['items']} */
const items = [
];
return Audit.makeTableDetails(headings, items);
});
}
}

export default ForcedReflowInsight;
50 changes: 50 additions & 0 deletions core/audits/insights/image-delivery-insight.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/

import {UIStrings} from '@paulirish/trace_engine/models/trace/insights/ImageDelivery.js';

import {Audit} from '../audit.js';
import * as i18n from '../../lib/i18n/i18n.js';
import {adaptInsightToAuditProduct, makeNodeItemForNodeId} from './insight-audit.js';

// eslint-disable-next-line max-len
const str_ = i18n.createIcuMessageFn('node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js', UIStrings);

class ImageDeliveryInsight extends Audit {
/**
* @return {LH.Audit.Meta}
*/
static get meta() {
return {
id: 'image-delivery-insight',
title: str_(UIStrings.title),
description: str_(UIStrings.description),
guidanceLevel: 3, // TODO: confirm/change.
requiredArtifacts: ['traces', 'TraceElements'],
scoreDisplayMode: Audit.SCORING_MODES.METRIC_SAVINGS, // TODO: confirm/change.
};
}

/**
* @param {LH.Artifacts} artifacts
* @param {LH.Audit.Context} context
* @return {Promise<LH.Audit.Product>}
*/
static async audit(artifacts, context) {
// TODO: implement.
return adaptInsightToAuditProduct(artifacts, context, 'ImageDelivery', (insight) => {
/** @type {LH.Audit.Details.Table['headings']} */
const headings = [
];
/** @type {LH.Audit.Details.Table['items']} */
const items = [
];
return Audit.makeTableDetails(headings, items);
});
}
}

export default ImageDeliveryInsight;
50 changes: 50 additions & 0 deletions core/audits/insights/interaction-to-next-paint-insight.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/

import {UIStrings} from '@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js';

import {Audit} from '../audit.js';
import * as i18n from '../../lib/i18n/i18n.js';
import {adaptInsightToAuditProduct, makeNodeItemForNodeId} from './insight-audit.js';

// eslint-disable-next-line max-len
const str_ = i18n.createIcuMessageFn('node_modules/@paulirish/trace_engine/models/trace/insights/InteractionToNextPaint.js', UIStrings);

class InteractionToNextPaintInsight extends Audit {
/**
* @return {LH.Audit.Meta}
*/
static get meta() {
return {
id: 'interaction-to-next-paint-insight',
title: str_(UIStrings.title),
description: str_(UIStrings.description),
guidanceLevel: 3, // TODO: confirm/change.
requiredArtifacts: ['traces', 'TraceElements'],
scoreDisplayMode: Audit.SCORING_MODES.METRIC_SAVINGS, // TODO: confirm/change.
};
}

/**
* @param {LH.Artifacts} artifacts
* @param {LH.Audit.Context} context
* @return {Promise<LH.Audit.Product>}
*/
static async audit(artifacts, context) {
// TODO: implement.
return adaptInsightToAuditProduct(artifacts, context, 'InteractionToNextPaint', (insight) => {
/** @type {LH.Audit.Details.Table['headings']} */
const headings = [
];
/** @type {LH.Audit.Details.Table['items']} */
const items = [
];
return Audit.makeTableDetails(headings, items);
});
}
}

export default InteractionToNextPaintInsight;
50 changes: 50 additions & 0 deletions core/audits/insights/lcp-discovery-insight.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/

import {UIStrings} from '@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js';

import {Audit} from '../audit.js';
import * as i18n from '../../lib/i18n/i18n.js';
import {adaptInsightToAuditProduct, makeNodeItemForNodeId} from './insight-audit.js';

// eslint-disable-next-line max-len
const str_ = i18n.createIcuMessageFn('node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js', UIStrings);

class LCPDiscoveryInsight extends Audit {
/**
* @return {LH.Audit.Meta}
*/
static get meta() {
return {
id: 'lcp-discovery-insight',
title: str_(UIStrings.title),
description: str_(UIStrings.description),
guidanceLevel: 3, // TODO: confirm/change.
requiredArtifacts: ['traces', 'TraceElements'],
scoreDisplayMode: Audit.SCORING_MODES.METRIC_SAVINGS, // TODO: confirm/change.
};
}

/**
* @param {LH.Artifacts} artifacts
* @param {LH.Audit.Context} context
* @return {Promise<LH.Audit.Product>}
*/
static async audit(artifacts, context) {
// TODO: implement.
return adaptInsightToAuditProduct(artifacts, context, 'LCPDiscovery', (insight) => {
/** @type {LH.Audit.Details.Table['headings']} */
const headings = [
];
/** @type {LH.Audit.Details.Table['items']} */
const items = [
];
return Audit.makeTableDetails(headings, items);
});
}
}

export default LCPDiscoveryInsight;
Loading

0 comments on commit 8f474ba

Please sign in to comment.