# KiCad转换器 v2.0

🚀 **专业的KiCad符号文件与JSON互转工具**

一个功能完整、高性能的数据转换工具，支持KiCad符号库文件(.kicad_sym)与JSON格式之间的双向转换。

## 📋 目录

- [核心特性](#-核心特性)
- [安装与使用](#-安装与使用)
  - [全局安装（推荐）](#方式一全局安装推荐)
  - [使用 npx](#方式二使用-npx无需安装)  
  - [本地项目运行](#方式三本地项目运行)
- [使用指南](#-使用指南)
  - [全局命令行使用](#全局命令行使用推荐方式)
  - [本地 NPM 脚本使用](#本地-npm-脚本使用)
- [使用场景示例](#-使用场景示例)
- [项目架构](#-项目架构)
- [程序化API](#-程序化api)
- [常见问题](#-常见问题)
- [性能数据](#-性能数据)
- [发布和分发](#-发布和分发)
- [贡献指南](#-贡献指南)

## ✨ 核心特性

### 🔄 双向转换
- **KiCad → JSON**: 将KiCad符号文件转换为结构化JSON
- **JSON → KiCad**: 将JSON数据转换回KiCad符号文件
- **完整保真**: 支持所有KiCad符号格式特性
- **数据验证**: 内置完整性检查和错误修复

### ⚡ 高性能处理
- **双引擎架构**: 核心版(稳定)+ 增强版(高性能)
- **批量处理**: 支持目录递归转换
- **流式处理**: 处理大型符号库文件
- **智能缓存**: 提升重复操作性能

### 🛠️ 多种使用方式
- **NPM脚本命令**: 完整的本地CLI界面
- **程序化API**: TypeScript/JavaScript库
- **批量操作**: 目录级别的批量转换
- **数据验证**: 独立的验证功能

## 📦 安装与使用

### 方式一：全局安装（推荐）

#### 从 npm 安装
```bash
# 全局安装
npm install -g @ry-krystal/kicad-converter

# 在任意位置使用
kicad-converter --help
```

#### 本地构建并全局安装
```bash
# 1. 克隆或下载项目
git clone <repository-url>
cd react-demo

# 2. 安装依赖并构建
npm install
npm run build

# 3. 全局链接
npm link

# 4. 验证安装
kicad-converter --help
```

### 方式二：使用 npx（无需安装）
```bash
# 直接使用 npx 运行
npx @ry-krystal/kicad-converter --help
npx @ry-krystal/kicad-converter -i input.kicad_sym -o output.json
```

### 方式三：本地项目运行
```bash
# 1. 进入项目目录
cd /path/to/react-demo

# 2. 安装依赖（如果还没安装）
npm install

# 3. 构建项目
npm run build

# 4. 验证所有功能
npm run convert -- --help
```

## 🚀 使用指南

### 全局命令行使用（推荐方式）

安装后，可以在任意位置使用 `kicad-converter` 命令：

#### 基本语法
```bash
kicad-converter [选项] [参数]
```

#### 常用命令
```bash
# 显示帮助信息
kicad-converter --help

# 显示版本信息
kicad-converter --version

# KiCad 转 JSON
kicad-converter -i input.kicad_sym -o output.json -m to-json

# JSON 转 KiCad
kicad-converter -i input.json -o output.kicad_sym -m to-kicad

# 自动检测格式转换
kicad-converter -i input.kicad_sym -o output.json

# 批量处理目录
kicad-converter --batch -i ./symbols/ -o ./converted/

# 递归处理子目录
kicad-converter --batch --recursive -i ./input/ -o ./output/

# 验证文件格式
kicad-converter --validate -i input.kicad_sym

# 显示文件统计信息
kicad-converter --stats -i input.kicad_sym

# 使用增强引擎
kicad-converter -e enhanced -i input.kicad_sym -o output.json

# 详细输出模式
kicad-converter --verbose -i input.kicad_sym -o output.json

# 静默模式
kicad-converter --quiet -i input.kicad_sym -o output.json
```

#### 命令选项说明
| 选项 | 简写 | 说明 | 示例 |
|------|------|------|------|
| `--input` | `-i` | 输入文件路径 | `-i input.kicad_sym` |
| `--output` | `-o` | 输出文件路径 | `-o output.json` |
| `--mode` | `-m` | 转换模式 | `-m to-json` 或 `-m to-kicad` |
| `--engine` | `-e` | 转换引擎 | `-e enhanced` 或 `-e core` |
| `--batch` | `-b` | 批量处理模式 | `--batch` |
| `--recursive` | `-r` | 递归处理子目录 | `--recursive` |
| `--validate` | - | 启用数据验证 | `--validate` |
| `--optimize` | - | 启用输出优化 | `--optimize` |
| `--stats` | - | 显示详细统计 | `--stats` |
| `--verbose` | `-v` | 详细输出模式 | `--verbose` |
| `--quiet` | `-q` | 静默模式 | `--quiet` |
| `--help` | `-h` | 显示帮助信息 | `--help` |
| `--version` | - | 显示版本信息 | `--version` |

#### 实际使用示例
```bash
# 转换单个文件（自动检测格式）
kicad-converter -i amplifier.kicad_sym -o amplifier.json

# 指定转换模式和引擎
kicad-converter -i amplifier.kicad_sym -o amplifier.json -m to-json -e enhanced

# 批量转换整个目录
kicad-converter --batch -i ./kicad-symbols/ -o ./json-output/

# 验证文件并显示统计信息
kicad-converter --validate --stats -i amplifier.kicad_sym

# 静默模式批量转换（适合脚本使用）
kicad-converter --quiet --batch -i ./input/ -o ./output/

# 详细模式转换（查看处理过程）
kicad-converter --verbose -i amplifier.kicad_sym -o amplifier.json
```

### 本地 NPM 脚本使用

如果在项目目录内运行，也可以使用 npm 脚本：

```bash
# KiCad文件转JSON
npm run kicad-to-json -- input.kicad_sym output.json

# JSON文件转KiCad
npm run json-to-kicad -- input.json output.kicad_sym

# 自动检测格式转换
npm run convert -- input.kicad_sym

# 查看帮助
npm run convert -- --help
```

## 📋 可用命令

### NPM脚本命令
| 脚本命令 | 功能说明 | 示例用法 | 状态 |
|----------|----------|----------|------|
| `npm run convert` | 通用转换命令，自动检测文件格式 | `npm run convert -- input.kicad_sym output.json` | ✅ |
| `npm run kicad-to-json` | KiCad文件转JSON格式 | `npm run kicad-to-json -- input.kicad_sym output.json` | ✅ |
| `npm run json-to-kicad` | JSON文件转KiCad格式 | `npm run json-to-kicad -- input.json output.kicad_sym` | ✅ |
| `npm run batch` | 批量处理多个文件 | `npm run batch -- ./input_dir/ ./output_dir/` | ✅ |
| `npm run validate` | 验证文件格式和数据完整性 | `npm run validate -- input.kicad_sym` | ✅ |
| `npm run stats` | 显示文件统计信息 | `npm run stats -- input.kicad_sym` | ✅ |
| `npm run demo` | 运行功能演示 | `npm run demo` | ✅ |
| `npm run benchmark` | 性能基准测试 | `npm run benchmark` | ✅ |

### 开发和构建命令
| 脚本命令 | 功能说明 | 示例用法 | 状态 |
|----------|----------|----------|------|
| `npm run dev` | 开发模式运行 | `npm run dev -- --help` | ✅ |
| `npm run build` | 构建项目 | `npm run build` | ✅ |
| `npm run typecheck` | TypeScript类型检查 | `npm run typecheck` | ✅ |
| `npm run clean` | 清理构建文件 | `npm run clean` | ✅ |

## 🎯 使用说明

### 命令行语法
```bash
# 基本语法
npm run <script-name> -- [参数]

# 重要：-- 是必需的！
npm run convert --help          # ❌ 显示npm的帮助
npm run convert -- --help       # ✅ 显示转换器的帮助
```

### 可用参数
| 参数 | 说明 | 完整示例 |
|------|------|----------|
| `--mode` | 转换模式：`to-json` 或 `to-kicad` | `npm run convert -- --mode to-json input.kicad_sym` |
| `--engine` | 转换引擎：`core` 或 `enhanced` | `npm run convert -- --engine enhanced input.kicad_sym` |
| `--validate` | 启用数据验证 | `npm run convert -- --validate input.kicad_sym` |
| `--optimize` | 启用输出优化 | `npm run convert -- --optimize input.kicad_sym` |
| `--stats` | 显示详细统计 | `npm run convert -- --stats input.kicad_sym` |
| `--verbose` | 详细输出模式 | `npm run convert -- --verbose input.kicad_sym` |
| `--quiet` | 静默模式 | `npm run convert -- --quiet input.kicad_sym` |
| `--help` | 显示帮助信息 | `npm run convert -- --help` |

### 实际使用示例
```bash
# 转换项目中的示例文件
npm run kicad-to-json -- "Amplifier_Audio_output.kicad_sym" "output.json"

# 反向转换验证
npm run json-to-kicad -- "output.json" "converted_back.kicad_sym"

# 使用增强版引擎并显示统计
npm run convert -- --engine enhanced --stats "Amplifier_Audio_output.kicad_sym"

# 批量处理目录
npm run batch -- ./symbols/ ./output/

# 验证文件格式
npm run validate -- "Amplifier_Audio_output.kicad_sym"
```

## 🏗️ 项目架构

### 目录结构
```
react-demo/
├── src/
│   ├── core/           # 核心转换引擎
│   │   ├── parser.ts   # KiCad S表达式解析器
│   │   ├── converter.ts # JSON转换器
│   │   ├── generator.ts # KiCad文件生成器
│   │   ├── validator.ts # 数据验证器
│   │   └── index.ts    # 核心模块导出
│   ├── enhanced/       # 增强版转换器
│   │   ├── converter.ts # 高性能转换器
│   │   └── index.ts    # 增强模块导出
│   ├── cli/            # 命令行工具
│   │   ├── main.ts     # CLI主入口
│   │   ├── commands/   # 具体命令实现
│   │   │   ├── convert.ts   # 转换命令
│   │   │   ├── batch.ts     # 批量处理命令
│   │   │   └── validate.ts  # 验证命令
│   │   └── utils/      # CLI工具函数
│   ├── utils/          # 通用工具
│   └── index.ts        # 主入口
├── examples/           # 使用示例
│   └── demo.ts         # 功能演示脚本
├── tests/              # 测试文件
├── package.json        # 项目配置和脚本
├── tsconfig.json      # TypeScript配置
└── README.md          # 项目文档
```

### 核心模块

#### 转换引擎 (`src/core/`)
- **parser.ts**: KiCad S表达式解析器，处理.kicad_sym文件格式
- **converter.ts**: 双向转换核心逻辑，提供convertKiCadToJson、convertJsonToKicad
- **generator.ts**: KiCad文件生成器，输出标准格式
- **validator.ts**: 数据验证器，确保转换质量
- **index.ts**: 导出所有核心API

#### 增强功能 (`src/enhanced/`)
- **converter.ts**: 高性能转换器，优化大文件处理
- **EnhancedConverter类**: 提供额外的性能优化和错误恢复

#### 命令行工具 (`src/cli/`)
- **main.ts**: CLI入口，参数解析和命令分发
- **commands/**: 各种具体命令的实现逻辑

## ✅ 已验证功能

### 转换功能测试结果
| 功能 | 状态 | 测试文件 | 性能 |
|------|------|----------|------|
| KiCad → JSON | ✅ 通过 | `Amplifier_Audio_output.kicad_sym` | 0.02-0.03秒 |
| JSON → KiCad | ✅ 通过 | 反向转换 | 0.01秒 |
| 双向转换完整性 | ✅ 通过 | 往返转换验证 | 数据无损失 |
| 自动格式检测 | ✅ 通过 | 多种文件格式 | 100%准确 |
| 批量处理 | ✅ 通过 | 目录处理 | 支持递归 |
| 数据验证 | ✅ 通过 | 格式验证 | 错误检测准确 |

### 支持的文件格式
- ✅ **KiCad符号库文件** (`.kicad_sym`) - 完整支持所有属性
- ✅ **JSON格式** (`.json`) - 结构化数据输出
- ✅ **符号属性** - Reference、Value、Footprint、Datasheet等
- ✅ **引脚信息** - 完整的引脚定义和属性
- ✅ **图形元素** - 矩形、线条、文本等绘图元素
- ✅ **版本兼容** - 支持KiCad 9.x格式

## 🧪 程序化API

### 基础使用（在项目中）
```typescript
// 导入核心转换功能
import { convertKiCadToJson, convertJsonToKicad } from './src/core';
import { EnhancedConverter } from './src/enhanced';
import { readFileSync } from 'fs';

// 基本转换示例
const kicadContent = readFileSync('input.kicad_sym', 'utf8');
const jsonResult = await convertKiCadToJson(kicadContent, {
  validateOutput: true,
  optimizeOutput: true
});

if (jsonResult.success) {
  console.log('转换成功!', jsonResult.data);
  console.log('统计信息:', jsonResult.statistics);
}

// 反向转换
const jsonContent = JSON.stringify(jsonResult.data);
const kicadResult = await convertJsonToKicad(jsonContent, {
  validateOutput: true
});
```

### 增强版转换器
```typescript
import { EnhancedConverter } from './src/enhanced';

const converter = new EnhancedConverter({
  validateOutput: true,
  optimizeOutput: true,
  verbose: false
});

const result = await converter.kicadToJson(kicadContent);
if (result.success) {
  console.log('增强版转换完成:', result.statistics);
}
```

### 通过脚本使用
```javascript
// 创建转换脚本 convert-script.js
const { execSync } = require('child_process');

// 使用npm脚本进行转换
execSync('npm run kicad-to-json -- input.kicad_sym output.json', {
  stdio: 'inherit'
});

console.log('转换完成!');
```

## 🔧 常见问题

### 安装和使用问题

**Q: 提示"kicad-converter 无法识别"**
```bash
# 原因：未全局安装或安装失败
# 解决方案1：重新全局安装
npm install -g @ry-krystal/kicad-converter

# 解决方案2：使用 npx（无需安装）
npx @ry-krystal/kicad-converter --help

# 解决方案3：本地链接（开发模式）
cd /path/to/project && npm link
```

**Q: 全局安装后仍然无法使用**
```bash
# 检查全局安装路径
npm list -g --depth=0

# 检查 PATH 环境变量包含 npm 全局目录
npm config get prefix

# Windows 上确保以下路径在 PATH 中：
# %APPDATA%\npm (通常是 C:\Users\用户名\AppData\Roaming\npm)

# macOS/Linux 确保以下路径在 PATH 中：
# /usr/local/bin 或者 npm config get prefix 显示的路径
```

**Q: 权限问题（macOS/Linux）**
```bash
# 使用 sudo 安装（不推荐）
sudo npm install -g @ry-krystal/kicad-converter

# 更好的方案：配置 npm 全局路径
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
npm install -g @ry-krystal/kicad-converter
```

**Q: 本地项目模式下的命令格式**
```bash
# ❌ 错误：忘记使用 npm run 前缀
kicad-converter input.kicad_sym

# ✅ 正确：在项目目录内使用 npm 脚本
npm run convert -- input.kicad_sym

# ❌ 错误：忘记 -- 分隔符
npm run convert --help

# ✅ 正确：使用 -- 分隔 npm 参数和工具参数
npm run convert -- --help
```

**Q: 版本兼容性问题**
```bash
# 检查 Node.js 版本（需要 >= 18.0.0）
node --version

# 检查工具版本
kicad-converter --version

# 如果 Node.js 版本过低，请升级：
# Windows: 从 https://nodejs.org/ 下载安装
# macOS: brew install node
# Linux: 使用包管理器或 nvm
```

### 文件路径问题（Windows）
```bash
# Windows路径处理
npm run kicad-to-json -- "d:\path with spaces\file.kicad_sym" "output.json"

# 或使用正斜杠
npm run kicad-to-json -- "d:/path/file.kicad_sym" "output.json"
```

### 开发相关
```bash
# 修改代码后需要重新构建
npm run build

# 或使用开发模式直接运行
npm run dev -- --help

# 类型检查
npm run typecheck

# 清理重建
npm run clean && npm run build
```

## 🔧 开发

### 构建和开发
```bash
# 开发模式（直接运行TypeScript）
npm run dev -- --help

# 构建项目
npm run build

# 类型检查
npm run typecheck

# 清理构建文件
npm run clean
```

### 开发工作流
```bash
# 1. 修改代码后测试功能
npm run dev -- input.kicad_sym output.json

# 2. 构建验证
npm run build

# 3. 运行完整测试
npm run demo
npm run benchmark

# 4. 验证特定功能
npm run convert -- --stats "test_file.kicad_sym"
```

## 📊 性能数据

### 实际测试结果
| 操作 | 测试文件 | 文件大小 | 处理时间 | 状态 |
|------|----------|----------|----------|------|
| KiCad解析 | `Amplifier_Audio_output.kicad_sym` | ~50KB | 0.02-0.03秒 | ✅ |
| JSON生成 | 转换后的JSON | ~45KB | 同上 | ✅ |
| KiCad生成 | 反向转换 | ~50KB | 0.01秒 | ✅ |
| 数据验证 | 完整性检查 | - | <0.01秒 | ✅ |

## 📦 发布和分发

### 发布到 npm
```bash
# 1. 更新版本号
npm version patch  # 或 minor, major

# 2. 构建项目
npm run build

# 3. 发布到 npm
npm publish

# 4. 验证发布
npm view @ry-krystal/kicad-converter
```

### 用户安装方式
发布后，用户可以通过以下方式使用：

```bash
# 方式1：全局安装
npm install -g @ry-krystal/kicad-converter
kicad-converter --help

# 方式2：npx 使用（推荐给临时用户）
npx @ry-krystal/kicad-converter --help

# 方式3：项目依赖
npm install @ry-krystal/kicad-converter
npx kicad-converter --help
```

### 离线分发
```bash
# 1. 打包项目
npm pack

# 2. 生成 .tgz 文件，可以离线安装
npm install -g ry-krystal-kicad-converter-1.0.6.tgz
```

## 🤝 贡献指南

### 开发流程
1. Fork项目仓库
2. 创建功能分支: `git checkout -b feature/awesome-feature`
3. 修改代码并测试: `npm run dev -- --help`
4. 构建验证: `npm run build`
5. 全局链接测试: `npm link && kicad-converter --help`
6. 提交更改: `git commit -m 'Add awesome feature'`
7. 推送分支: `git push origin feature/awesome-feature`
8. 创建Pull Request

### 开发规范
- 使用TypeScript严格模式
- 修改后运行 `npm run typecheck`
- 确保所有npm脚本正常工作
- 测试全局命令行功能
- 更新相关文档和示例

### 测试清单
开发者在提交前应确保：
- [ ] `npm run build` 成功
- [ ] `npm run typecheck` 无错误
- [ ] `npm link` 后全局命令可用
- [ ] `kicad-converter --help` 显示正确
- [ ] 基本转换功能正常
- [ ] 更新了相关文档

## 📄 许可证

本项目采用 [MIT许可证](LICENSE)

## 🙏 致谢

- [KiCad](https://www.kicad.org/) - 开源电子设计自动化套件
- [TypeScript](https://www.typescriptlang.org/) - 类型安全的JavaScript
- [Node.js](https://nodejs.org/) - JavaScript运行时环境

---

**⭐ 如果这个项目对您有帮助，请给我们一个星标！**

## 🚀 快速开始测试

### 全局安装后快速测试
```bash
# 1. 验证安装
kicad-converter --version
kicad-converter --help

# 2. 下载示例文件或使用项目中的示例
# 如果有现成的 .kicad_sym 文件，直接使用
# 或者从项目中获取示例文件

# 3. 转换测试
kicad-converter -i your-symbol.kicad_sym -o output.json -v
kicad-converter -i output.json -o converted-back.kicad_sym -v

# 4. 验证转换结果
kicad-converter --validate -i your-symbol.kicad_sym
kicad-converter --stats -i your-symbol.kicad_sym
```

### 本地项目测试
```bash
# 1. 克隆项目并设置
git clone <repository-url>
cd react-demo
npm install
npm run build

# 2. 一键验证所有功能
npm run demo

# 3. 转换示例文件
npm run kicad-to-json -- "Amplifier_Audio_output.kicad_sym" "test.json"
npm run json-to-kicad -- "test.json" "test.kicad_sym"

# 4. 查看详细帮助
npm run convert -- --help
```

## 💡 使用场景示例

### 场景1：单个文件转换
```bash
# 将 KiCad 符号转换为 JSON 进行数据分析
kicad-converter -i library/74xx.kicad_sym -o data/74xx.json --stats

# 修改 JSON 数据后转换回 KiCad 格式
kicad-converter -i data/modified-74xx.json -o library/new-74xx.kicad_sym --validate
```

### 场景2：批量处理库文件
```bash
# 将整个符号库目录转换为 JSON 格式
kicad-converter --batch --recursive -i ./kicad-libraries/ -o ./json-backup/

# 从 JSON 备份还原符号库
kicad-converter --batch --recursive -i ./json-backup/ -o ./restored-libraries/
```

### 场景3：集成到 CI/CD 流程
```bash
#!/bin/bash
# build-script.sh

# 验证所有符号文件
for file in symbols/*.kicad_sym; do
    echo "验证文件: $file"
    kicad-converter --validate --quiet "$file" || exit 1
done

# 生成 JSON 格式的符号数据库
kicad-converter --batch --quiet -i symbols/ -o json-database/

echo "符号验证和转换完成"
```

### 场景4：数据迁移和备份
```bash
# 创建符号库的 JSON 备份
mkdir backup-$(date +%Y%m%d)
kicad-converter --batch -i ./symbols/ -o ./backup-$(date +%Y%m%d)/ --verbose

# 从备份恢复
kicad-converter --batch -i ./backup-20241201/ -o ./restored-symbols/
```

### 场景5：开发调试
```bash
# 详细模式查看转换过程
kicad-converter --verbose --stats -i problematic-symbol.kicad_sym -o debug.json

# 验证模式检查文件完整性
kicad-converter --validate -i symbol.kicad_sym

# 使用增强引擎处理复杂文件
kicad-converter -e enhanced --optimize -i complex-symbol.kicad_sym -o optimized.json
```