UNPKG

@typecad/jlcpcb-parts

Version:

Intelligent fuzzy search for JLCPCB electrical components with CLI interface

385 lines (274 loc) 11.4 kB
# @typecad/jlcpcb-parts Intelligent fuzzy search for JLCPCB basic and preferred electrical components with CLI interface. This TypeScript-based npm package provides smart component search capabilities by automatically managing a local database of JLCPCB parts and offering natural language search with intelligent parameter matching. ### Dependencies This package uses [CDFER/jlcpcb-parts-database](https://github.com/CDFER/jlcpcb-parts-database) which provides a daily CSV download of all basic and preferred parts. That project depends on [yaqwsx/jlcparts](https://github.com/yaqwsx/jlcparts). Please consider supporting them. ## Features - 🔍 **Intelligent Fuzzy Search**: Find components using natural language descriptions - 📦 **Automatic Database Management**: Downloads and caches JLCPCB components database -**Fast CLI Interface**: Quick command-line searches with formatted output - 🎯 **Smart Parameter Parsing**: Recognizes electrical values, packages, tolerances, and more - 📊 **Scored Results**: Get ranked results with match explanations - 🔄 **Auto-Updates**: Keeps component database fresh (24-hour cache) - 🎨 **Multiple Output Formats**: Detailed, compact, table, or JSON display options - 🔧 **Programmatic Integration**: JSON output for scripting and automation ## Installation ### Global Installation (Recommended) ```bash npm install -g @typecad/jlcpcb-parts ``` After global installation, you can use the `jlcpcb-search` command from anywhere: ```bash jlcpcb-search "10k resistor 0603" ``` ### Local Installation ```bash npm install @typecad/jlcpcb-parts ``` ## Quick Start ### Basic Search ```bash # Search for a 10kΩ resistor in 0603 package jlcpcb-search "10k resistor 0603" # Search for a 100µF capacitor rated for 16V jlcpcb-search "100uF capacitor 16V" # Search for buttons jlcpcb-search "SPST button" ``` ### Advanced Usage ```bash # Use table format for compact display jlcpcb-search "LM358 op amp" --format table # Sort by manufacturer and show 1 result jlcpcb-search "ceramic capacitor 0402" --sort manufacturer --limit 1 # Compact format for quick overview jlcpcb-search "LED red 0603" --format compact # JSON format for programmatic use jlcpcb-search "10k resistor" --format json ``` ## Usage ### Command Line Interface ``` jlcpcb-search [options] <search query> Options: -h, --help Display help message -v, --version Display version information -f, --format <format> Output format: detailed, compact, table, or json (default: detailed) -s, --sort <field> Sort by: score, lcsc, manufacturer, or package (default: score) -l, --limit <number> Limit number of results (default: 5) ``` ### Search Query Examples The tool understands natural language descriptions and can parse various electrical parameters: #### Resistors ```bash jlcpcb-search "10k resistor 0603" # 10kΩ resistor in 0603 package jlcpcb-search "1M ohm 1% 0805" # 1MΩ resistor with 1% tolerance jlcpcb-search "220 ohm thick film" # 220Ω thick film resistor ``` #### Capacitors ```bash jlcpcb-search "100nF 50V X7R 0603" # 100nF ceramic capacitor jlcpcb-search "10uF 16V tantalum" # 10µF tantalum capacitor jlcpcb-search "1mF electrolytic 25V" # 1mF electrolytic capacitor ``` #### Inductors ```bash jlcpcb-search "10uH inductor 0805" # 10µH inductor jlcpcb-search "100nH ferrite bead" # 100nH ferrite bead ``` #### ICs and Active Components ```bash jlcpcb-search "LM358 op amp" # LM358 operational amplifier jlcpcb-search "STM32F103 microcontroller" # STM32F103 microcontroller jlcpcb-search "AMS1117 voltage regulator" # AMS1117 voltage regulator ``` #### Connectors and Mechanical ```bash jlcpcb-search "USB" # IC jlcpcb-search "2.54mm header male" # 2.54mm pin headers jlcpcb-search "tactile switch 6x6" # Tactile switches ``` ### Output Formats #### Detailed Format (Default) Shows complete component information with match explanations: ``` Found 3 matching components: 1. C25804 - 10kΩ ±1% 0603 Thick Film Resistor Manufacturer: UNI-ROYAL(Uniroyal Elec) Part Number: 0603WAF1002T5E Package: 0603 Match Score: 95.0 Match Details: Exact resistance match (100 pts), Package match (80 pts), Tolerance match (70 pts) ``` #### Compact Format One-line summary per component: ```bash jlcpcb-search "10k resistor" --format compact ``` ``` 1. C25804 - 10kΩ ±1% 0603 Thick Film Resistor... - 0603 - 95.0 2. C25879 - 10kΩ ±5% 0805 Thick Film Resistor... - 0805 - 87.5 ``` #### Table Format Structured table view: ```bash jlcpcb-search "capacitor 0603" --format table ``` ``` # LCSC Manufacturer Part Number Package Score Description --- -------- ---------------- ---------------- ------- ------ ----------- 1 C14663 Samsung Electro CL10B104KB8N... 0603 92.0 100nF 50V X7R... 2 C1608 Samsung Electro CL10A105KB8N... 0603 89.5 1µF 25V X5R... ``` #### JSON Format Machine-readable JSON output for programmatic integration: ```bash jlcpcb-search "10k resistor 0603" --format json ``` ```json [ { "lcsc": "25804", "manufacturer": "UNI-ROYAL(Uniroyal Elec)", "partNumber": "0603WAF1002T5E", "description": "10kΩ ±1% 0603 Thick Film Resistor", "package": "0603", "score": 95.0, "matchSummary": "Exact resistance match (100 pts), Package match (80 pts)" }, { "lcsc": "25879", "manufacturer": "UNI-ROYAL(Uniroyal Elec)", "partNumber": "0805WAF1002T5E", "description": "10kΩ ±5% 0805 Thick Film Resistor", "package": "0805", "score": 87.5, "matchSummary": "Exact resistance match (100 pts), Package match (40 pts)" } ] ``` **JSON Format Features:** - **Clean Output**: No formatting, colors, or progress indicators - **Machine-Readable**: Valid JSON for easy parsing by scripts and applications - **Complete Data**: All component information included in structured format - **Empty Results**: Returns empty array `[]` when no components found - **Error Handling**: Errors output as JSON objects with error information **JSON Error Response Format:** ```json { "error": true, "message": "No search query provided", "code": "MISSING_QUERY" } ``` ## How It Works ### Automatic Database Management The tool automatically manages the JLCPCB components database: 1. **First Run**: Downloads the complete JLCPCB components CSV file (~3MB) 2. **Caching**: Stores the database locally with a timestamp 3. **Auto-Update**: Downloads the CSV again if it is more than 24 hours old 4. **Offline Mode**: Works with cached data when network is unavailable ### Intelligent Parameter Parsing The search engine recognizes and parses: - **Electrical Values**: `10k`, `100nF`, `1µH`, `3.3V` - **Units**: Supports all standard electrical units with prefixes - **Packages**: `0603`, `0805`, `SOT-23`, `SOIC-8`, etc. - **Tolerances**: `±1%`, `±5%`, `+/-10%` - **Component Types**: `X7R`, `NP0`, `MLCC`, `SMD`, `THT` - **Keywords**: Manufacturer names, part families, descriptions ### Fuzzy Scoring Algorithm Components are scored based on multiple factors: - **Exact Matches**: 100 points per parameter - **Close Matches**: 50-90 points for similar values - **Package Matches**: 80 points for exact, 40 for similar - **Type Matches**: 70 points for component type - **Keyword Matches**: 20-50 points for description relevance - **Category**: 30 points for matching component category ### JSON Mode Behavior When using the JSON format (`--format json`), the tool operates in a special mode optimized for programmatic use: - **Clean Output**: No progress indicators, status messages, or colored text - **Pure JSON**: Only valid JSON is output to stdout - **Error Handling**: Errors are formatted as JSON objects with error information - **Exit Codes**: Proper exit codes are maintained for error detection - **Performance**: Slightly faster execution due to reduced formatting overhead ## Programmatic Usage You can also use the package programmatically in your Node.js applications: ```typescript import { DataManager, ElectricalParameterParser, ComponentFuzzyScorer, ComponentSearchEngine, } from "@typecad/jlcpcb-parts"; // Create your own search engine instance const dataManager = new DataManager(); const parser = new ElectricalParameterParser(); const scorer = new ComponentFuzzyScorer(); const searchEngine = new ComponentSearchEngine(dataManager, parser, scorer); // Perform searches const results = await searchEngine.search("10k resistor 0603"); console.log(results); ``` ## Configuration ### Environment Variables - `JLCPCB_CSV_URL`: Custom URL for the JLCPCB CSV file - `JLCPCB_CACHE_DIR`: Directory to store cached files (default: current directory) - `JLCPCB_CACHE_HOURS`: Cache expiration time in hours (default: 24) ### Cache Management The tool stores cache files in your current directory: - `jlcpcb-components-basic-preferred.csv`: Component database - `.jlcpcb-cache-timestamp`: Cache timestamp file - `.logs/`: Search and error logs To force a database refresh, delete the timestamp file: ```bash rm .jlcpcb-cache-timestamp ``` ## Troubleshooting ### Common Issues #### No Results Found ``` No components found matching your search criteria. Suggestions: - Try using more general terms (e.g., "capacitor" instead of "ceramic capacitor") - Check your spelling and try alternative terms - Remove specific parameters that might be too restrictive - Try searching for a different package size or value ``` **Solutions:** - Use broader search terms - Check spelling of component values and types - Try alternative package sizes (0603 vs 0805) - Search for component families instead of specific part numbers #### Network/Download Issues ``` Error: Failed to download component database ``` **Solutions:** - Check your internet connection - Verify firewall settings allow HTTPS connections - Try again later (server might be temporarily unavailable) - Use cached data if available #### Permission Errors ``` Error: Permission denied writing cache files ``` **Solutions:** - Run from a directory where you have write permissions - Check file system permissions - Try running with elevated privileges (if appropriate) ### Debug Mode Enable verbose logging by setting the log level: ```bash # Set environment variable for debug logging export JLCPCB_LOG_LEVEL=DEBUG jlcpcb-search "10k resistor" ``` ### Getting Help - Use `jlcpcb-search --help` for command-line help - Review log files in `.logs/` directory for detailed error information ## Related Projects - [TypeCAD](https://typecad.net) - use TypeScript to create PCBs in KiCAD - [JLCPCB Parts Database](https://github.com/cdfer/jlcpcb-parts-database) - Source of component data ## Support - [Buy me a coffee](https://www.buymeacoffee.com/typecad) --- Made by [typeCAD](https://typecad.net)