diff --git a/csv-loader.md b/csv-loader.md index 3bdf5a9..bd68e90 100644 --- a/csv-loader.md +++ b/csv-loader.md @@ -38,6 +38,9 @@ module.exports = { delimiter: ',', quote: '"', escape: '\\', + bom: true, // 处理 BOM (默认 true) + comment: '#', // 忽略 # 开头的注释行 (默认 '#') + trim: true, // 修剪表头和值的前后空格 (默认 true) }, }, }, @@ -64,6 +67,9 @@ import data from './data.schema.csv'; | `delimiter` | string | `,` | Column delimiter | | `quote` | string | `"` | Quote character | | `escape` | string | `\` | Escape character | +| `bom` | boolean | `true` | Handle byte order mark | +| `comment` | string \| `false` | `#` | Comment character (set `false` to disable) | +| `trim` | boolean | `true` | Trim headers and values | ## Schema Syntax diff --git a/src/csv-loader/loader.ts b/src/csv-loader/loader.ts index 0a3a800..82b912b 100644 --- a/src/csv-loader/loader.ts +++ b/src/csv-loader/loader.ts @@ -6,6 +6,9 @@ export interface CsvLoaderOptions { delimiter?: string; quote?: string; escape?: string; + bom?: boolean; + comment?: string | false; + trim?: boolean; } interface PropertyConfig { @@ -19,15 +22,21 @@ export default function csvLoader( this: LoaderContext, content: string ): string | Buffer { - const options = this.getOptions() || {}; - const delimiter = options.delimiter ?? ','; - const quote = options.quote ?? '"'; - const escape = options.escape ?? '\\'; + const options = this.getOptions() as CsvLoaderOptions | undefined; + const delimiter = options?.delimiter ?? ','; + const quote = options?.quote ?? '"'; + const escape = options?.escape ?? '\\'; + const bom = options?.bom ?? true; + const comment = options?.comment === false ? undefined : (options?.comment ?? '#'); + const trim = options?.trim ?? true; const records = parse(content, { delimiter, quote, escape, + bom, + comment, + trim, relax_column_count: true, });