/** * CSV 导出 / 导入(技术方案 34 §4):后台列表"导出 Excel"、批量导入是生成应用的高频需求, * 但 CSV 的转义、Excel 的中文乱码(要 UTF-8 BOM)、带逗号换行的值,agent 每次现写都会错一两处。 * 纯函数,零依赖,浏览器端也能用。 */ export interface CsvColumn { /** 取值字段名,支持 a.b 点路径 */ key: string; /** 表头文字(默认用 key) */ label?: string; /** 自定义取值/格式化(如把毫秒时间戳转成日期) */ value?: (row: T) => unknown; } export interface ToCsvOptions { /** 要导出的列与顺序;不传则用所有行里出现过的字段(首次出现的顺序) */ columns?: Array>; /** 是否输出表头行,默认 true */ header?: boolean; /** 是否加 UTF-8 BOM,默认 true —— Excel 不加 BOM 打开中文是乱码 */ bom?: boolean; /** 分隔符,默认 , */ delimiter?: string; } /** * 行数组 → CSV 文本。 * ```ts * const csv = toCsv(docs, { columns: ['title', { key: '_createdAt', label: '创建时间', value: d => new Date(d._createdAt).toLocaleString('zh-CN') }] }) * ``` */ export declare function toCsv>(rows: T[], opts?: ToCsvOptions): string; export interface ParseCsvResult { header: string[]; /** 每行按表头取值;缺列补空串(行号 = 下标 + 2,报错时给用户看的就是这个) */ rows: Array>; } /** * CSV 文本 → 表头 + 行对象。处理引号转义、值里的换行、CRLF 与 BOM。 * 导入前**务必**用 zod 逐行校验再 `insertMany`(见 chatu-admin 的 references/export-import.md)。 */ export declare function parseCsv(text: string, opts?: { delimiter?: string; }): ParseCsvResult;