UNPKG

ctrlshiftleft

Version:

AI-powered toolkit for embedding QA and security testing into development workflows

126 lines (106 loc) 4.26 kB
#!/usr/bin/env node /** * ctrl.shift.left API Usage Example with AI-Enhanced Features * * This example demonstrates how to use the ctrl.shift.left API with AI-enhanced * features for automated test generation, security analysis, and QA checklists. * * Requirements: * - Set OPENAI_API_KEY environment variable to enable AI-enhanced security analysis * - Run `npm install dotenv` if you want to load the API key from a .env file */ // Load environment variables from .env file (optional) try { require('dotenv').config(); } catch (err) { console.log('dotenv not installed, skipping .env loading'); } // Import from the ctrl.shift.left API const { generateTests, runTests, generateChecklist, analyzeSecurityWithAI, isAISecurityAvailable, EnhancedWatcher } = require('../src/api'); // Example configurations const sourceFile = '../demo/src/components/PaymentForm.tsx'; const outputDir = './output'; // Print API status console.log('ctrl.shift.left API Example'); console.log('---------------------------'); console.log(`AI-Enhanced Security Available: ${isAISecurityAvailable() ? 'Yes' : 'No'}`); console.log(`Target Source File: ${sourceFile}`); console.log(`Output Directory: ${outputDir}`); console.log('---------------------------\n'); async function runExample() { try { // 1. Generate tests for a component console.log('Generating tests...'); const testResults = await generateTests(sourceFile, { outputDir: `${outputDir}/tests`, format: 'playwright' }); console.log(`✓ Generated ${testResults.testCount} tests in ${testResults.files.join(', ')}`); // 2. Generate QA checklist console.log('\nGenerating QA checklist...'); const checklistResult = await generateChecklist(sourceFile, { outputDir: `${outputDir}/checklists` }); console.log(`✓ Generated checklist with ${checklistResult.itemCount} items`); console.log(` File: ${checklistResult.files[0]}`); // 3. Run AI-enhanced security analysis if available if (isAISecurityAvailable()) { console.log('\nRunning AI-enhanced security analysis...'); const securityResult = await analyzeSecurityWithAI(sourceFile, { outputDir: `${outputDir}/security`, format: 'markdown' }); console.log(`✓ AI Security analysis complete`); console.log(` Report: ${securityResult.reportPath}`); console.log(` Issues found: ${securityResult.issueCount}`); } else { console.log('\n⚠ AI-enhanced security analysis not available.'); console.log(' Set OPENAI_API_KEY environment variable to enable this feature.'); } // 4. Using the EnhancedWatcher to monitor files console.log('\nDemonstrating EnhancedWatcher (will run for 10 seconds)...'); const watcher = new EnhancedWatcher({ include: ['**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx'], exclude: ['**/node_modules/**', '**/dist/**'], useAIAnalysis: isAISecurityAvailable(), testOutputDir: `${outputDir}/watcher-tests`, securityOutputDir: `${outputDir}/watcher-security`, checklistOutputDir: `${outputDir}/watcher-checklists`, reportProgress: true }); // Add event listeners watcher.on('ready', () => { console.log('✓ Watcher ready and monitoring for changes'); }); watcher.on('file:change', (event) => { console.log(`⚡ File change detected: ${event.path} (${event.type})`); }); watcher.on('analysis:complete', (result) => { if (result.success) { console.log(`✅ ${result.type.toUpperCase()} analysis complete for ${result.filePath}`); } else { console.error(`❌ Analysis failed: ${result.error}`); } }); // Start watching const stop = watcher.watch('../demo/src'); // Run for 10 seconds as a demo await new Promise(resolve => setTimeout(resolve, 10000)); // Stop watching await watcher.stop(); console.log('✓ Watcher stopped after demo period'); console.log('\nExample completed successfully! ✨'); console.log('Check the output directory for generated files.'); } catch (error) { console.error('Error during example:', error); } } // Run the example runExample();