inline-schema/csv-loader.md

110 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# inline-schema/csv-loader
A rspack loader for CSV files that uses inline-schema for type validation.
## Installation
```bash
npm install inline-schema
```
## Usage
The loader expects:
- **First row**: Property names (headers)
- **Second row**: Inline-schema definitions for each property
- **Remaining rows**: Data values
### Example CSV
```csv
name,age,active,scores
string,number,boolean,number[]
Alice,30,true,[90; 85; 95]
Bob,25,false,[75; 80; 70]
```
### rspack.config.js
```javascript
module.exports = {
module: {
rules: [
{
test: /\.schema\.csv$/,
use: {
loader: 'inline-schema/csv-loader',
options: {
delimiter: ',',
quote: '"',
escape: '\\',
bom: true, // 处理 BOM (默认 true)
comment: '#', // 忽略 # 开头的注释行 (默认 '#')
trim: true, // 修剪表头和值的前后空格 (默认 true)
// emitTypes: false, // 禁用类型定义生成 (默认 true)
// typesOutputDir: 'types', // 类型文件输出目录 (可选)
// writeToDisk: true, // 在 dev server 下写入磁盘 (默认 false)
},
},
},
],
},
};
```
### Generated TypeScript Types
`emitTypes: true`loader 会自动生成 `.d.ts` 类型定义文件:
```typescript
// data.csv.d.ts
type Table = {
name: string;
age: number;
active: boolean;
scores: number[];
}[];
declare const data: Table;
export default data;
```
### Importing in TypeScript
```typescript
import data from './data.csv';
// TypeScript 会自动推断类型:
// data: { name: string; age: number; active: boolean; scores: number[] }[]
```
## Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `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 |
| `emitTypes` | boolean | `true` | Generate TypeScript declaration file (.d.ts) |
| `typesOutputDir` | string | `''` | Output directory for generated type files (relative to output path) |
| `writeToDisk` | boolean | `false` | Write .d.ts files directly to disk (useful for dev server) |
## Schema Syntax
Uses [inline-schema](https://github.com/your-repo/inline-schema) syntax:
| Type | Schema | Example |
|------|--------|---------|
| String | `string` | `hello` |
| Number | `number` | `42` |
| Boolean | `boolean` | `true` |
| Array | `string[]` or `[string][]` | `[a; b; c]` |
| Tuple | `[string; number]` | `[hello; 42]` |
## License
ISC