Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@ import {
formatBaselineReason,
formatBaselineStatus,
} from '../../lib/prepare-table'
import type { FrameworkResult } from '@framework-performance/results'
import StatsTable, { type TableColumn } from '../../components/StatsTable.astro'

interface BrowserBaselineTests {
baselineStatus?: 'high' | 'low' | false | null
baselineYear?: number | null
baselineReason?: string | string[] | null
baselineFeatureCount?: number
baselineFeatureCount?: NonNullable<
FrameworkResult['browserBaselineTests']
>['baselineFeatureCount']
}

interface VersionStats {
Expand All @@ -35,7 +38,7 @@ const data = versions.flatMap((version) => {
const baseline = version.browserBaselineTests
if (baseline == null) return []

const featureCount = baseline.baselineFeatureCount
const featureCount = baseline.baselineFeatureCount?.value

return {
version: version.frameworkVersion ?? 'Unknown',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ type DependencyMetric =
function getDependencyChartData(metric: DependencyMetric) {
return starterStats
.flatMap((framework) => {
const value = framework.firstPartyDependencies[metric]
if (typeof value !== 'number' || !Number.isFinite(value)) return []
const value = framework.firstPartyDependencies[metric]?.value
if (value == null || !Number.isFinite(value)) return []

return [
{
Expand All @@ -50,10 +50,8 @@ function getDependencyCharts(metric: DependencyMetric, title: string) {
starterHistory,
starterStats,
(record) => {
const value = record.firstPartyDependencies?.[metric]
return typeof value === 'number' && Number.isFinite(value)
? value
: null
const value = record.firstPartyDependencies?.[metric]?.value
return value != null && Number.isFinite(value) ? value : null
},
),
}
Expand Down
2 changes: 1 addition & 1 deletion packages/docs/src/components/test/fixtures.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const barChart = (): ComponentProps<typeof ComparisonBarChart> =>
frameworkVersion: '1.0.0',
install: {
installTimeMs: { median: 1000 },
nodeModulesSizeBytes: framework.sizeMb * MB,
nodeModulesSizeBytes: { value: framework.sizeMb * MB, unit: 'bytes' },
},
})),
)
Expand Down
46 changes: 24 additions & 22 deletions packages/docs/src/lib/chart-measurements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ export function prepareFrameworkDependenciesProdDependenciesHistory(
metricCatalogue['frameworkDependencies.prodDependencies'],
records.map((record) => ({
record,
value: finiteValue(record.frameworkDependencies?.prodDependencies),
value: finiteValue(record.frameworkDependencies?.prodDependencies?.value),
})),
)
}
Expand All @@ -152,7 +152,7 @@ export function prepareFrameworkDependenciesDevDependenciesHistory(
metricCatalogue['frameworkDependencies.devDependencies'],
records.map((record) => ({
record,
value: finiteValue(record.frameworkDependencies?.devDependencies),
value: finiteValue(record.frameworkDependencies?.devDependencies?.value),
})),
)
}
Expand All @@ -164,7 +164,7 @@ export function prepareFrameworkDependenciesAllDependenciesHistory(
metricCatalogue['frameworkDependencies.allDependencies'],
records.map((record) => ({
record,
value: finiteValue(record.frameworkDependencies?.allDependencies),
value: finiteValue(record.frameworkDependencies?.allDependencies?.value),
})),
)
}
Expand All @@ -176,7 +176,7 @@ export function prepareProdDependenciesHistory(
metricCatalogue['prodDependencies'],
records.map((record) => ({
record,
value: finiteValue(record.prodDependencies),
value: finiteValue(record.prodDependencies?.value),
})),
)
}
Expand All @@ -188,7 +188,7 @@ export function prepareProdDependenciesComparison(
metricCatalogue['prodDependencies'],
records.map((record) => ({
record,
value: finiteValue(record.prodDependencies),
value: finiteValue(record.prodDependencies?.value),
})),
)
}
Expand All @@ -202,7 +202,7 @@ export function prepareProdDependenciesMonthlyComparison(
metricCatalogue['prodDependencies'],
history,
latest,
(record) => finiteValue(record.prodDependencies),
(record) => finiteValue(record.prodDependencies?.value),
now,
)
}
Expand All @@ -214,7 +214,7 @@ export function prepareDevDependenciesHistory(
metricCatalogue['devDependencies'],
records.map((record) => ({
record,
value: finiteValue(record.devDependencies),
value: finiteValue(record.devDependencies?.value),
})),
)
}
Expand All @@ -226,7 +226,7 @@ export function prepareDevDependenciesComparison(
metricCatalogue['devDependencies'],
records.map((record) => ({
record,
value: finiteValue(record.devDependencies),
value: finiteValue(record.devDependencies?.value),
})),
)
}
Expand All @@ -240,7 +240,7 @@ export function prepareDevDependenciesMonthlyComparison(
metricCatalogue['devDependencies'],
history,
latest,
(record) => finiteValue(record.devDependencies),
(record) => finiteValue(record.devDependencies?.value),
now,
)
}
Expand All @@ -252,7 +252,7 @@ export function prepareAllDependenciesHistory(
metricCatalogue['allDependencies'],
records.map((record) => ({
record,
value: finiteValue(record.allDependencies),
value: finiteValue(record.allDependencies?.value),
})),
)
}
Expand All @@ -264,7 +264,7 @@ export function prepareDuplicateDependenciesHistory(
metricCatalogue['duplicateDependencies'],
records.map((record) => ({
record,
value: finiteValue(record.duplicateDependencies),
value: finiteValue(record.duplicateDependencies?.value),
})),
)
}
Expand All @@ -276,7 +276,7 @@ export function prepareDuplicateDependenciesComparison(
metricCatalogue['duplicateDependencies'],
records.map((record) => ({
record,
value: finiteValue(record.duplicateDependencies),
value: finiteValue(record.duplicateDependencies?.value),
})),
)
}
Expand All @@ -290,7 +290,7 @@ export function prepareDuplicateDependenciesMonthlyComparison(
metricCatalogue['duplicateDependencies'],
history,
latest,
(record) => finiteValue(record.duplicateDependencies),
(record) => finiteValue(record.duplicateDependencies?.value),
now,
)
}
Expand Down Expand Up @@ -538,7 +538,7 @@ export function prepareCoreJsSizeHistory(
metricCatalogue['vendoredCoreJsSize'],
records.map((record) => ({
record,
value: finiteValue(record.vendoredCoreJsSize, 1024),
value: finiteValue(record.vendoredCoreJsSize?.value, 1024),
})),
)
}
Expand Down Expand Up @@ -665,7 +665,7 @@ export function prepareSsrRequestThroughputTestsBodySizeKbHistory(
metricCatalogue['ssrRequestThroughputTests.bodySizeKb'],
records.map((record) => ({
record,
value: finiteValue(record.ssrRequestThroughputTests?.bodySizeKb),
value: finiteValue(record.ssrRequestThroughputTests?.bodySizeKb?.value),
})),
)
}
Expand All @@ -677,7 +677,7 @@ export function prepareSsrRequestThroughputTestsBodySizeKbComparison(
metricCatalogue['ssrRequestThroughputTests.bodySizeKb'],
records.map((record) => ({
record,
value: finiteValue(record.ssrRequestThroughputTests?.bodySizeKb),
value: finiteValue(record.ssrRequestThroughputTests?.bodySizeKb?.value),
})),
)
}
Expand All @@ -691,7 +691,8 @@ export function prepareSsrRequestThroughputTestsBodySizeKbMonthlyComparison(
metricCatalogue['ssrRequestThroughputTests.bodySizeKb'],
history,
latest,
(record) => finiteValue(record.ssrRequestThroughputTests?.bodySizeKb),
(record) =>
finiteValue(record.ssrRequestThroughputTests?.bodySizeKb?.value),
now,
)
}
Expand Down Expand Up @@ -741,7 +742,7 @@ export function prepareNodeModulesSizeHistory(
metricCatalogue['nodeModulesSize'],
records.map((record) => ({
record,
value: finiteValue(record.install.nodeModulesSizeBytes, 1048576),
value: finiteValue(record.install.nodeModulesSizeBytes?.value, 1048576),
})),
)
}
Expand All @@ -753,7 +754,7 @@ export function prepareNodeModulesSizeComparison(
metricCatalogue['nodeModulesSize'],
records.map((record) => ({
record,
value: finiteValue(record.install.nodeModulesSizeBytes, 1048576),
value: finiteValue(record.install.nodeModulesSizeBytes?.value, 1048576),
})),
)
}
Expand All @@ -767,7 +768,8 @@ export function prepareNodeModulesSizeMonthlyComparison(
metricCatalogue['nodeModulesSize'],
history,
latest,
(record) => finiteValue(record.install?.nodeModulesSizeBytes, 1048576),
(record) =>
finiteValue(record.install?.nodeModulesSizeBytes?.value, 1048576),
now,
)
}
Expand All @@ -779,7 +781,7 @@ export function prepareDependencyInstallSizeHistory(
metricCatalogue['depInstallSize'],
records.map((record) => ({
record,
value: finiteValue(record.depInstallSize, 1048576),
value: finiteValue(record.depInstallSize?.value, 1048576),
})),
)
}
Expand Down Expand Up @@ -811,7 +813,7 @@ export function prepareSSRTotalRequestsHistory(
metricCatalogue[`${testsKey}.totalRequests`],
records.map((record) => ({
record,
value: finiteValue(record[testsKey]?.totalRequests),
value: finiteValue(record[testsKey]?.totalRequests?.value),
})),
)
}
Expand Down
14 changes: 7 additions & 7 deletions packages/docs/src/lib/initial-load.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ export function prepareInitialLoadResources(
resources: InitialLoadStats['resources'],
) {
return {
html: resources.document.transferSize / 1024,
css: resources.stylesheet.transferSize / 1024,
js: resources.script.transferSize / 1024,
html: resources.document.transferSize.value / 1024,
css: resources.stylesheet.transferSize.value / 1024,
js: resources.script.transferSize.value / 1024,
other:
(resources.image.transferSize +
resources.media.transferSize +
resources.font.transferSize +
resources.other.transferSize) /
(resources.image.transferSize.value +
resources.media.transferSize.value +
resources.font.transferSize.value +
resources.other.transferSize.value) /
1024,
}
}
24 changes: 19 additions & 5 deletions packages/docs/src/lib/interaction-history.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import assert from 'node:assert/strict'
import { test } from 'node:test'
import type { FrameworkResult } from '@framework-performance/results'
import {
prepareLighthouseClientSideRenderedTestsInteractionHistory,
prepareLighthouseServerSideRenderedTestsInteractionHistory,
Expand All @@ -19,6 +18,7 @@ const timings = (
inputDelayMs + processingDurationMs + presentationDelayMs,
})
const metric = (value: number) => ({
unit: 'ms' as const,
mean: value,
median: value,
min: value,
Expand All @@ -37,9 +37,23 @@ test('rendered tests take interaction phases from the run with the median total'
name: 'clientSideRendered',
runs: runs.length,
iterations: runs.map((interactionTests) => ({
firstPaintMs: 100,
fcpMs: 100,
interactionTests,
firstPaintMs: { value: 100, unit: 'ms' },
fcpMs: { value: 100, unit: 'ms' },
interactionTests: {
inputDelayMs: { value: interactionTests.inputDelayMs, unit: 'ms' },
processingDurationMs: {
value: interactionTests.processingDurationMs,
unit: 'ms',
},
presentationDelayMs: {
value: interactionTests.presentationDelayMs,
unit: 'ms',
},
interactionLatencyMs: {
value: interactionTests.interactionLatencyMs,
unit: 'ms',
},
},
})),
firstPaintMs: metric(100),
fcpMs: metric(100),
Expand All @@ -51,7 +65,7 @@ test('rendered tests take interaction phases from the run with the median total'
processingDurationMs: metric(20),
presentationDelayMs: metric(9),
},
} as NonNullable<FrameworkResult['clientSideRenderedTests']>)
})

assert.deepEqual(formatted.interactionTests, {
scenario: 'first-row-detail-navigation',
Expand Down
6 changes: 3 additions & 3 deletions packages/docs/src/lib/monthly-history.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,22 +40,22 @@ const astroVersions = [
name: 'Astro',
frameworkVersion: '7.1.6',
releasedAt: '2026-07-29T14:21:53Z',
prodDependencies: 10,
prodDependencies: { value: 10, unit: 'count' as const },
},
{
package: 'starter-astro',
name: 'Astro',
frameworkVersion: '7.2.10',
releasedAt: '2026-08-31T19:39:50Z',
prodDependencies: 12,
prodDependencies: { value: 12, unit: 'count' as const },
},
]
const astroLatest = {
package: 'starter-astro',
name: 'Astro',
frameworkVersion: '7.4.0',
releasedAt: '2026-10-15T14:49:24Z',
prodDependencies: 14,
prodDependencies: { value: 14, unit: 'count' as const },
}

test('leaves gaps before a framework’s first tracked release', () => {
Expand Down
Loading
Loading