UNPKG

@ry-krystal/kicad-converter

Version:

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

185 lines (184 loc) 5.89 kB
/** * KiCad转换器核心模块导出 * 提供完整的KiCad符号文件转换功能 */ // 导出类型定义 export * from './types.js'; // 导出核心类 export { KiCadParser } from './parser.js'; export { JsonConverter } from './converter.js'; export { KiCadGenerator } from './generator.js'; export { KiCadValidator } from './validator.js'; // 导出主要接口类 import { KiCadParser } from './parser.js'; import { JsonConverter } from './converter.js'; import { KiCadGenerator } from './generator.js'; import { KiCadValidator } from './validator.js'; /** * 核心转换器类 - 统一的转换接口 */ export class KiCadConverter { parser; jsonConverter; generator; validator; constructor(generatorOptions, validationConfig) { this.parser = new KiCadParser(); this.jsonConverter = new JsonConverter(); this.generator = new KiCadGenerator(generatorOptions); this.validator = new KiCadValidator(validationConfig); } /** * 将KiCad文件内容转换为JSON格式 * @param kicadContent KiCad文件内容 * @param options 转换选项 * @returns 转换结果 */ async kicadToJson(kicadContent, options = {}) { try { // 解析KiCad文件 const symbolLib = this.parser.parse(kicadContent); // 验证数据(如果启用) if (options.validateOutput) { const validation = this.validator.validateSymbolLib(symbolLib); if (!validation.isValid) { return { success: false, errors: validation.errors, warnings: validation.warnings }; } } // 转换为JSON return this.jsonConverter.toJson(symbolLib, options); } catch (error) { return { success: false, data: undefined, errors: [`转换失败: ${error instanceof Error ? error.message : String(error)}`], warnings: [] }; } } /** * 将JSON格式转换为KiCad文件内容 * @param jsonContent JSON内容 * @param options 转换选项 * @returns 转换结果 */ async jsonToKicad(jsonContent, options = {}) { try { // 解析JSON const jsonResult = this.jsonConverter.fromJson(jsonContent, options); if (!jsonResult.success || !jsonResult.data) { return { success: false, data: undefined, errors: jsonResult.errors, warnings: jsonResult.warnings || [] }; } // 生成KiCad文件 return this.generator.generate(jsonResult.data, options); } catch (error) { return { success: false, data: undefined, errors: [`转换失败: ${error instanceof Error ? error.message : String(error)}`], warnings: [] }; } } /** * 验证KiCad数据结构 * @param symbolLib 符号库数据 * @returns 验证结果 */ validate(symbolLib) { return this.validator.validateSymbolLib(symbolLib); } /** * 获取符号库统计信息 * @param symbolLib 符号库数据 * @returns 统计信息 */ getStatistics(symbolLib) { return this.jsonConverter.getStatistics(symbolLib); } /** * 验证KiCad文件内容是否有效 * @param kicadContent KiCad文件内容 * @returns 验证结果 */ async validateKiCadContent(kicadContent) { try { const symbolLib = this.parser.parse(kicadContent); return this.validator.validateSymbolLib(symbolLib); } catch (error) { return { isValid: false, errors: [`解析失败: ${error instanceof Error ? error.message : String(error)}`], warnings: [], suggestions: [] }; } } /** * 验证JSON内容是否有效 * @param jsonContent JSON内容 * @returns 验证结果 */ async validateJsonContent(jsonContent) { try { const jsonResult = this.jsonConverter.fromJson(jsonContent); if (!jsonResult.success || !jsonResult.data) { return { isValid: false, errors: jsonResult.errors, warnings: jsonResult.warnings || [], suggestions: [] }; } return this.validator.validateSymbolLib(jsonResult.data); } catch (error) { return { isValid: false, errors: [`JSON解析失败: ${error instanceof Error ? error.message : String(error)}`], warnings: [], suggestions: [] }; } } } /** * 便捷函数:KiCad转JSON */ export async function convertKiCadToJson(kicadContent, options = {}) { const converter = new KiCadConverter(); return converter.kicadToJson(kicadContent, options); } /** * 便捷函数:JSON转KiCad */ export async function convertJsonToKicad(jsonContent, options = {}) { const converter = new KiCadConverter(); return converter.jsonToKicad(jsonContent, options); } /** * 便捷函数:验证KiCad内容 */ export async function validateKiCad(kicadContent) { const converter = new KiCadConverter(); return converter.validateKiCadContent(kicadContent); } /** * 便捷函数:验证JSON内容 */ export async function validateJson(jsonContent) { const converter = new KiCadConverter(); return converter.validateJsonContent(jsonContent); }