UNPKG

@typecad/kicad-symbols

Version:

Intelligent fuzzy search for KiCad symbols with CLI interface

545 lines (440 loc) 14.9 kB
# Configuration Guide This document explains all configuration options available for the `@typecad/kicad-symbols` package. ## Table of Contents - [Environment Variables](#environment-variables) - [Constructor Options](#constructor-options) - [Cache Configuration](#cache-configuration) - [Search Engine Options](#search-engine-options) - [Logging Configuration](#logging-configuration) - [Performance Tuning](#performance-tuning) - [Examples](#examples) ## Environment Variables The package supports several environment variables for global configuration: ### Cache Configuration ```bash # Cache directory (default: current directory) KICAD_CACHE_DIR=./cache # Cache check interval in hours (default: 24) KICAD_CACHE_HOURS=12 # Local cache file name (default: kicad-symbols-data.json) KICAD_LOCAL_CACHE=my-symbols-cache.json ``` ### Search Configuration ```bash # Default search result limit (default: 5) KICAD_RESULT_LIMIT=10 # Search timeout in milliseconds (default: 30000) KICAD_SEARCH_TIMEOUT=60000 # Enable search result caching (default: true) KICAD_ENABLE_CACHE=false # Cache expiration for search results in milliseconds (default: 300000) KICAD_SEARCH_CACHE_EXPIRY=600000 ``` ### Logging Configuration ```bash # Cache directory (default: current directory) KICAD_CACHE_DIR=./cache # Cache expiration in hours (default: 24) KICAD_CACHE_HOURS=12 ``` ### Performance Configuration ```bash # Enable performance metrics collection (default: false) KICAD_ENABLE_METRICS=true # Batch size for processing large datasets (default: 10000) KICAD_BATCH_SIZE=5000 # Enable batch processing (default: true for large datasets) KICAD_ENABLE_BATCHING=false # Maximum cache size for search results (default: 100) KICAD_MAX_CACHE_SIZE=200 ``` ## Constructor Options ### Application Options ```typescript interface ApplicationOptions { localCachePath?: string; cacheDir?: string; cacheExpirationHours?: number; programName?: string; } // Usage const app = new Application( 'kicad-symbols-cache.json', // localCachePath (ignored when using shared cache) './cache', // cacheDir (ignored when using shared cache) 24, // cacheExpirationHours 'kicad-symbols', // programName true // useSharedCache (default: true) ); ``` ### DataManager Options ```typescript interface DataManagerConfig { mode: DataSourceMode; customSymbolsPath?: string; enableProgress: boolean; progressCallback?: (progress: ProcessingProgress) => void; } // Usage const dataManager = new DataManager( 'kicad-symbols-data.json', // localDataPath (ignored when using shared cache) './cache', // cacheDir (ignored when using shared cache) 24, // cacheExpirationHours { mode: DataSourceMode.LOCAL_FILES, customSymbolsPath: '/custom/path/to/symbols', enableProgress: true, progressCallback: (progress) => { console.log(`${progress.phase}: ${progress.percentage.toFixed(1)}%`); } }, true // useSharedCache (default: true) ); ``` ### SearchEngine Options ```typescript interface SearchEngineOptions { resultLimit?: number; // Maximum results to return (default: 5) searchTimeout?: number; // Search timeout in ms (default: 30000) cacheExpiration?: number; // Cache expiry in ms (default: 300000) enablePerformanceMetrics?: boolean; // Enable metrics (default: false) enableBatching?: boolean; // Enable batch processing (default: true) batchSize?: number; // Batch size (default: 10000) maxCacheSize?: number; // Max cached searches (default: 100) enableSearchCache?: boolean; // Enable result caching (default: true) } // Usage const searchEngine = new ComponentSearchEngine( dataManager, parser, scorer, { resultLimit: 10, searchTimeout: 60000, enablePerformanceMetrics: true, batchSize: 5000 } ); ``` ### runApplication Options ```typescript // Usage with runApplication convenience function await runApplication(process.argv, { localCachePath: 'symbols-cache.json', cacheDir: './my-cache', cacheExpirationHours: 12, programName: 'my-kicad-search' }); ``` ## Cache Configuration ### File System Cache The package uses file system caching for processed KiCad symbols: ```typescript // Configure cache location and expiration const dataManager = new DataManager( 'kicad-symbols-data.json', // Cache file name (ignored when using shared cache) './cache', // Cache directory (ignored when using shared cache) 24, // Cache check interval (24 hours) {}, // config true // useSharedCache (default: true) ); // Check cache status if (await dataManager.isDataStale()) { console.log('Cache is stale, will reprocess symbols'); } // Force cache refresh await dataManager.forceRefresh(); ``` ### Search Result Cache Search results are cached in memory for performance: ```typescript const searchEngine = new ComponentSearchEngine(dataManager, parser, scorer, { enableSearchCache: true, // Enable caching cacheExpiration: 300000, // 5 minutes maxCacheSize: 100 // Maximum 100 cached searches }); // Clear search cache if (typeof searchEngine.clearCache === 'function') { searchEngine.clearCache(); } // Get cache statistics (if available) if (typeof searchEngine.getCacheStats === 'function') { const stats = searchEngine.getCacheStats(); console.log(`Cache hits: ${stats.hits}, misses: ${stats.misses}`); } ``` ### Cache Management ```typescript // Custom cache management class CustomCacheManager { private cache = new Map(); get(key: string) { const entry = this.cache.get(key); if (entry && Date.now() - entry.timestamp < 300000) { return entry.data; } return null; } set(key: string, data: any) { this.cache.set(key, { data, timestamp: Date.now() }); } clear() { this.cache.clear(); } } ``` ## Search Engine Options ### Result Limiting ```typescript // Configure result limits const searchEngine = new ComponentSearchEngine(dataManager, parser, scorer, { resultLimit: 10 // Return up to 10 results }); // Or use CLI option // kicad-symbols "op amp" --limit 20 ``` ### Search Timeout ```typescript // Configure search timeout const searchEngine = new ComponentSearchEngine(dataManager, parser, scorer, { searchTimeout: 60000 // 60 second timeout }); // Handle timeout errors try { const results = await searchEngine.search("complex query"); } catch (error) { if (error.message.includes('timeout')) { console.log('Search timed out, try a more specific query'); } } ``` ### Batch Processing ```typescript // Configure batch processing for large datasets const searchEngine = new ComponentSearchEngine(dataManager, parser, scorer, { enableBatching: true, batchSize: 5000 // Process 5000 symbols at a time }); ``` ## Logging Configuration ### Log Levels ```typescript // Create application instance const app = new Application( 'kicad-symbols-cache.json', // ignored when using shared cache './cache', // ignored when using shared cache 24, 'kicad-symbols', true // use shared cache (default) ); ``` ## Performance Tuning ### Memory Optimization ```typescript // Configure for memory-constrained environments const searchEngine = new ComponentSearchEngine(dataManager, parser, scorer, { batchSize: 1000, // Smaller batches maxCacheSize: 50, // Smaller cache enableBatching: true, // Use batching resultLimit: 5 // Limit results }); ``` ### Speed Optimization ```typescript // Configure for maximum speed const searchEngine = new ComponentSearchEngine(dataManager, parser, scorer, { enableSearchCache: true, // Enable caching cacheExpiration: 600000, // 10 minute cache maxCacheSize: 500, // Large cache batchSize: 20000, // Large batches enablePerformanceMetrics: true // Monitor performance }); // Monitor performance (if available) if (typeof searchEngine.getPerformanceMetrics === 'function') { const metrics = searchEngine.getPerformanceMetrics(); console.log(`Average search time: ${metrics.averageSearchTime}ms`); console.log(`Cache hit rate: ${metrics.cacheHitRate}%`); } ``` ### File System Optimization ```typescript // Configure for slow file systems const dataManager = new DataManager( 'kicad-symbols-cache.json', // ignored when using shared cache './cache', // ignored when using shared cache 72, // Cache for 3 days { mode: DataSourceMode.LOCAL_FILES, enableProgress: true, progressCallback: (progress) => { // Only log major progress updates if (progress.percentage % 10 === 0) { console.log(`Processing: ${progress.percentage.toFixed(0)}%`); } } } ); ``` ## Examples ### Development Configuration ```typescript // Development setup with fast cache expiry const app = new Application( 'dev-symbols-cache.json', // ignored when using shared cache './dev-cache', // ignored when using shared cache 1, // 1 hour cache 'kicad-dev', true // use shared cache (default) ); ``` ### Production Configuration ```typescript // Production setup with optimized performance const app = new Application( 'kicad-symbols-cache.json', // ignored when using shared cache '/var/cache/kicad', // ignored when using shared cache 24, // 24 hour cache 'kicad-symbols', true // use shared cache (default) ); const searchEngine = new ComponentSearchEngine(dataManager, parser, scorer, { resultLimit: 5, searchTimeout: 30000, enableSearchCache: true, cacheExpiration: 600000, maxCacheSize: 200, enablePerformanceMetrics: true }); ``` ### Testing Configuration ```typescript // Testing setup with mocked data and fast operations const testDataManager = new MockDataManager(); const searchEngine = new ComponentSearchEngine(testDataManager, parser, scorer, { resultLimit: 3, searchTimeout: 5000, enableSearchCache: false, // Disable cache for consistent tests enableBatching: false // Disable batching for predictable behavior }); ``` ### Docker Configuration ```dockerfile # Dockerfile with environment variables FROM node:18-alpine # Set configuration via environment variables ENV KICAD_CACHE_DIR=/app/cache ENV KICAD_CACHE_HOURS=24 ENV KICAD_RESULT_LIMIT=5 # Create directories RUN mkdir -p /app/cache # Install and configure application COPY package*.json ./ RUN npm ci --only=production COPY . . RUN npm run build # Run application CMD ["node", "dist/src/cli/bin.js"] ``` ### Kubernetes Configuration ```yaml # ConfigMap for application configuration apiVersion: v1 kind: ConfigMap metadata: name: kicad-config data: KICAD_CACHE_DIR: "/cache" KICAD_CACHE_HOURS: "24" KICAD_RESULT_LIMIT: "10" KICAD_SEARCH_TIMEOUT: "30000" --- # Deployment with configuration apiVersion: apps/v1 kind: Deployment metadata: name: kicad-search spec: replicas: 3 selector: matchLabels: app: kicad-search template: metadata: labels: app: kicad-search spec: containers: - name: kicad-search image: kicad-search:latest envFrom: - configMapRef: name: kicad-config volumeMounts: - name: cache-volume mountPath: /cache - name: kicad-symbols mountPath: /usr/share/kicad/symbols readOnly: true volumes: - name: cache-volume emptyDir: {} - name: kicad-symbols hostPath: path: /usr/share/kicad/symbols type: Directory ``` ## Configuration Validation The package includes configuration validation to help catch common issues: ```typescript // Validation errors will be thrown for invalid configurations try { const searchEngine = new ComponentSearchEngine(dataManager, parser, scorer, { resultLimit: -1, // Invalid: negative limit searchTimeout: 0, // Invalid: zero timeout cacheExpiration: -1000 // Invalid: negative expiration }); } catch (error) { console.error('Configuration error:', error.message); } // Use validation helper (if available) import { validateConfiguration } from '@typecad/kicad-symbols'; const config = { resultLimit: 10, searchTimeout: 30000, cacheExpiration: 300000 }; if (typeof validateConfiguration === 'function') { const validation = validateConfiguration(config); if (!validation.valid) { console.error('Configuration errors:', validation.errors); } } ``` ## Best Practices ### Cache Management 1. **Set appropriate cache expiration**: Balance freshness vs performance 2. **Use persistent cache directory**: Avoid re-processing on restart 3. **Monitor cache size**: Large caches can consume significant disk space 4. **Clear cache periodically**: Prevent stale data accumulation ### Performance 1. **Use result limits**: Don't return more results than needed 2. **Enable search caching**: Cache frequently used queries 3. **Tune batch sizes**: Balance memory usage vs processing speed 4. **Monitor metrics**: Track performance over time (if available) ### Logging 1. **Use appropriate log levels**: DEBUG for development, WARN+ for production 2. **Rotate log files**: Prevent disk space issues 3. **Include context**: Add relevant information to log messages 4. **Monitor log volume**: High-frequency logging can impact performance ### Error Handling 1. **Configure timeouts**: Prevent hanging operations 2. **Set retry limits**: Balance reliability vs responsiveness 3. **Handle file system errors**: Gracefully handle missing KiCad installations 4. **Validate inputs**: Check configuration values at startup ### Local File Processing 1. **Ensure KiCad is installed**: The tool requires local KiCad symbol files 2. **Check symbol paths**: Verify KiCad symbols are accessible 3. **Monitor file changes**: Cache will update when symbol files change 4. **Handle permissions**: Ensure read access to KiCad symbol directories