Skip to content

Commit 4db5044

Browse files
committed
fix: Restore check for duplicate headers
1 parent 999e7ed commit 4db5044

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

src/files/tsv.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,18 @@ Deno.test('TSV loading', async (t) => {
157157
assertEquals(repeatMap.c, ['3', '3'])
158158
})
159159

160+
await t.step('Raises issue on duplicate header', async () => {
161+
const file = pathToFile('/duplicate_header.tsv')
162+
file.stream = streamFromString('a\ta\n1\t2\n')
163+
164+
try {
165+
await loadTSV(file)
166+
assert(false, 'Expected error')
167+
} catch (e: any) {
168+
assertObjectMatch(e, { key: 'TSV_COLUMN_HEADER_DUPLICATE', evidence: 'a, a' })
169+
}
170+
})
171+
160172
// Tests will have populated the memoization cache
161173
loadTSV.cache.clear()
162174
})

src/files/tsv.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ async function _loadTSV(file: BIDSFile, maxRows: number = -1): Promise<ColumnsMa
1818
const headerRow = await reader.read()
1919
const headers = (headerRow.done || !headerRow.value) ? [] : headerRow.value.split('\t')
2020

21+
if (new Set(headers).size !== headers.length) {
22+
throw { key: 'TSV_COLUMN_HEADER_DUPLICATE', evidence: headers.join(', ') }
23+
}
24+
2125
// Initialize columns in array for construction efficiency
2226
const initialCapacity = maxRows >= 0 ? maxRows : 1000
2327
const columns: string[][] = headers.map(() => new Array<string>(initialCapacity))

0 commit comments

Comments
 (0)