Skip to content

Commit 7412559

Browse files
asizikovCopilot
andcommitted
fix: reject reports without headers
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 324a343 commit 7412559

2 files changed

Lines changed: 14 additions & 2 deletions

File tree

src/pipeline/runPipeline.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,14 @@ class CaptureAggregator implements Aggregator<TokenUsageRecord, TokenUsageRecord
7171
}
7272

7373
describe('runPipeline', () => {
74+
it('rejects reports without a header row', async () => {
75+
const aggregator = new CaptureAggregator()
76+
const file = new File(['\n\n'], 'usage.csv', { type: 'text/csv' })
77+
78+
await expect(runPipeline(file, [aggregator])).rejects.toThrow(InvalidReportError)
79+
expect(aggregator.result()).toEqual([])
80+
})
81+
7482
it('returns transition-period metadata for a valid header-only report', async () => {
7583
const aggregator = new CaptureAggregator()
7684

src/pipeline/runPipeline.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import type { Aggregator } from './aggregators/base'
22
import { createAicIncludedCreditsAllocator, type AicIncludedCreditsOverrides } from './aicIncludedCredits'
33
import {
4+
InvalidReportError,
45
parseTokenUsageHeader,
56
parseNormalizedTokenUsageRecord,
67
parseTokenUsageRecord,
78
type TokenUsageHeader,
89
type TokenUsageRecord,
910
} from './parser'
1011
import {
11-
getDefaultSupportedUsageReportAdapter,
1212
validateUsageReportFirstRecord,
1313
validateUsageReportHeader,
1414
type ReportFormatMetadata,
@@ -35,7 +35,11 @@ async function validateFileFormat(file: File): Promise<ReportFormatMetadata> {
3535
return validateUsageReportFirstRecord(header, parseTokenUsageRecord(trimmed, header)).metadata
3636
}
3737

38-
return (selectedAdapter ?? getDefaultSupportedUsageReportAdapter()).metadata
38+
if (!selectedAdapter) {
39+
throw new InvalidReportError()
40+
}
41+
42+
return selectedAdapter.metadata
3943
}
4044

4145
export interface PipelineProgress {

0 commit comments

Comments
 (0)