#!/usr/bin/env node /** * Build Validation Script for Amazon Product Bar Extension * Tests the complete build integration of Enhanced Item Management features */ import fs from 'fs'; import path from 'path'; console.log('šŸš€ Amazon Product Bar Extension - Build Validation'); console.log('=' .repeat(60)); // Test 1: Check if build files exist console.log('\nšŸ“¦ Testing Build Files...'); const buildFiles = [ 'dist/content.js', 'dist/style.css' ]; let buildFilesValid = true; buildFiles.forEach(file => { if (fs.existsSync(file)) { const stats = fs.statSync(file); const sizeKB = (stats.size / 1024).toFixed(2); console.log(`āœ… ${file} - ${sizeKB} KB`); } else { console.log(`āŒ ${file} - Missing`); buildFilesValid = false; } }); // Test 2: Check JavaScript content for Enhanced Item Management components console.log('\nšŸ”§ Testing Enhanced Item Management Components...'); const jsContent = fs.readFileSync('dist/content.js', 'utf8'); const requiredComponents = [ 'EnhancedItemsPanelManager', 'EnhancedStorageManager', 'ProductExtractor', 'MistralAIService', 'TitleSelectionManager', 'SettingsPanelManager', 'EnhancedAddItemWorkflow', 'ErrorHandler', 'InteractivityEnhancer', 'AccessibilityTester' ]; let componentsValid = true; requiredComponents.forEach(component => { if (jsContent.includes(component)) { console.log(`āœ… ${component} - Included`); } else { console.log(`āŒ ${component} - Missing`); componentsValid = false; } }); // Test 3: Check CSS content for Enhanced Item Management styles console.log('\nšŸŽØ Testing Enhanced Item Management Styles...'); const cssContent = fs.readFileSync('dist/style.css', 'utf8'); const requiredStyles = [ 'amazon-ext-enhanced-items-content', 'enhanced-items-header', 'Responsive Design and Accessibility', 'Interactivity Enhancements', 'Enhanced Accessibility Features' ]; let stylesValid = true; requiredStyles.forEach(style => { if (cssContent.includes(style)) { console.log(`āœ… ${style} - Included`); } else { console.log(`āŒ ${style} - Missing`); stylesValid = false; } }); // Test 4: Check for proper imports and initialization console.log('\nšŸ”— Testing Component Integration...'); const integrationTests = [ { name: 'CSS Bundle', test: cssContent.includes('Enhanced Item Management') }, { name: 'Responsive CSS', test: cssContent.includes('Responsive Design and Accessibility') }, { name: 'Interactivity CSS', test: cssContent.includes('Interactivity Enhancements') }, { name: 'Global Variables', test: jsContent.includes('window.amazonExtEnhancedStorage') }, { name: 'Event Bus Setup', test: jsContent.includes('enhanced:item:saved') }, { name: 'Component Initialization', test: jsContent.includes('initializeEnhancedItemManagement') } ]; let integrationValid = true; integrationTests.forEach(test => { if (test.test) { console.log(`āœ… ${test.name} - Configured`); } else { console.log(`āŒ ${test.name} - Missing`); integrationValid = false; } }); // Test 5: Check manifest.json for proper extension configuration console.log('\nšŸ“‹ Testing Extension Manifest...'); let manifestValid = true; try { const manifest = JSON.parse(fs.readFileSync('manifest.json', 'utf8')); const manifestTests = [ { name: 'Content Script', test: manifest.content_scripts && manifest.content_scripts.length > 0 }, { name: 'Permissions', test: manifest.permissions && manifest.permissions.includes('storage') }, { name: 'Host Permissions', test: manifest.host_permissions && manifest.host_permissions.some(p => p.includes('amazon')) } ]; manifestTests.forEach(test => { if (test.test) { console.log(`āœ… ${test.name} - Configured`); } else { console.log(`āŒ ${test.name} - Missing`); manifestValid = false; } }); } catch (error) { console.log(`āŒ Manifest parsing failed: ${error.message}`); manifestValid = false; } // Test 6: Check package.json for proper dependencies console.log('\nšŸ“¦ Testing Dependencies...'); let dependenciesValid = true; try { const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8')); const requiredDeps = ['react', 'react-dom']; const requiredDevDeps = ['vite', '@vitejs/plugin-react']; requiredDeps.forEach(dep => { if (packageJson.dependencies && packageJson.dependencies[dep]) { console.log(`āœ… ${dep} - ${packageJson.dependencies[dep]}`); } else { console.log(`āŒ ${dep} - Missing`); dependenciesValid = false; } }); requiredDevDeps.forEach(dep => { if (packageJson.devDependencies && packageJson.devDependencies[dep]) { console.log(`āœ… ${dep} - ${packageJson.devDependencies[dep]}`); } else { console.log(`āŒ ${dep} - Missing`); dependenciesValid = false; } }); } catch (error) { console.log(`āŒ Package.json parsing failed: ${error.message}`); dependenciesValid = false; } // Final Summary console.log('\n' + '=' .repeat(60)); console.log('šŸ“Š VALIDATION SUMMARY'); console.log('=' .repeat(60)); const allTestsValid = buildFilesValid && componentsValid && stylesValid && integrationValid && manifestValid && dependenciesValid; console.log(`Build Files: ${buildFilesValid ? 'āœ… PASS' : 'āŒ FAIL'}`); console.log(`Components: ${componentsValid ? 'āœ… PASS' : 'āŒ FAIL'}`); console.log(`Styles: ${stylesValid ? 'āœ… PASS' : 'āŒ FAIL'}`); console.log(`Integration: ${integrationValid ? 'āœ… PASS' : 'āŒ FAIL'}`); console.log(`Manifest: ${manifestValid ? 'āœ… PASS' : 'āŒ FAIL'}`); console.log(`Dependencies: ${dependenciesValid ? 'āœ… PASS' : 'āŒ FAIL'}`); console.log('\n' + '=' .repeat(60)); if (allTestsValid) { console.log('šŸŽ‰ ALL TESTS PASSED - Build is ready for deployment!'); console.log('\nšŸ“‹ Next Steps:'); console.log('1. Load the extension in Chrome Developer Mode'); console.log('2. Navigate to Amazon search results'); console.log('3. Test Enhanced Item Management features'); console.log('4. Verify responsive design and accessibility'); } else { console.log('āš ļø SOME TESTS FAILED - Please review the issues above'); } console.log('\nšŸ”— Test the build: open test-complete-build.html in your browser'); console.log('=' .repeat(60)); process.exit(allTestsValid ? 0 : 1);