ctrlshiftleft
Version:
AI-powered toolkit for embedding QA and security testing into development workflows
126 lines (106 loc) • 4.26 kB
JavaScript
/**
* 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();