import { readdir } from 'fs/promises'; import { join } from 'path'; import { csvStr2arr } from '../utils/csv'; import { getFileHeadData } from '../utils/shell'; export interface GenerateCsvConf { outputDirPath: string; inputDirPath: string; } export interface ColObj { filePath: string; columnCount: number; } export async function getColCount(filePath: string): Promise { const firstRow = await getFileHeadData(filePath, 1); const rowArr = await csvStr2arr(firstRow.join('\n')); return Promise.resolve({ filePath, columnCount: rowArr[0].length, }); } export async function getFilesColCount(dirPath: string): Promise { const filePaths = await readdir(dirPath); const res = filePaths.map((filePath) => getColCount(join(dirPath, filePath))); return Promise.all(res); } export function getConfByColObjList(colObjs: ColObj[], outputDirPath: string): string { const conf = [ 'module.exports = {', ]; conf.push(` outputDirPath: '${outputDirPath}',`); conf.push(' files: ['); colObjs.forEach((item) => { conf.push(' {'); conf.push(` filePath: '${item.filePath}',`); conf.push(` columnCount: ${item.columnCount},`); conf.push(' },'); }); conf.push(' ],'); conf.push('};'); return conf.join('\n'); } export async function generateCsvConf(conf: GenerateCsvConf): Promise { const { outputDirPath, inputDirPath } = conf; return getConfByColObjList(await getFilesColCount(inputDirPath), outputDirPath); }