/
grigoriygrisha
/
excel-loader
Обзор
Документация
Войти
/
grigoriygrisha
/
excel-loader
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/parser/types.ts
45 строк
1 KB
grigoriy-grisha
first_commit
26 июл 2026, 21:46
26 июл 2026, 21:46
6cc93a5
Код
Авторство
О чём код?
import type { CellValue, ColumnMeta, Row } from '../core/types.js' export interface ParseOptions { batchSize: number hasHeader: boolean csvDelimiter?: string } export interface StreamingParser { parse(): AsyncIterable<Row> getColumns(): ColumnMeta[] } export function inferColumnType( index: number, values: CellValue[], headerName: string, ): ColumnMeta { let seenNumber = false let seenBoolean = false let seenDate = false let seenString = false for (const v of values) { if (v == null || v === '') continue if (typeof v === 'number') seenNumber = true else if (typeof v === 'boolean') seenBoolean = true else if (isIsoDate(v)) seenDate = true else seenString = true } let type: ColumnMeta['type'] if (seenString) type = 'string' else if (seenDate && !seenNumber && !seenBoolean) type = 'date' else if (seenNumber && !seenBoolean) type = 'number' else if (seenBoolean && !seenNumber) type = 'boolean' else type = 'string' return { index, name: headerName, type } } function isIsoDate(v: CellValue): boolean { if (typeof v !== 'string') return false return /^\d{4}-\d{2}-\d{2}([T\s]\d{2}:\d{2}(:\d{2})?)?/.test(v) }