File size: 3,095 Bytes
5a81b95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/**
 * Build script to copy the React frontend build to the Electron app
 * This runs as part of the Electron build process
 */

const fs = require('fs');
const path = require('path');

// Source: The built React frontend
const srcDir = path.join(__dirname, '..', '..', 'dist');

// Destination: The Electron renderer folder
const destDir = path.join(__dirname, '..', 'renderer', 'dist');

/**
 * Recursively copy directory contents
 */
function copyDir(src, dest) {
    // Create destination directory if it doesn't exist
    if (!fs.existsSync(dest)) {
        fs.mkdirSync(dest, { recursive: true });
    }

    const entries = fs.readdirSync(src, { withFileTypes: true });

    for (const entry of entries) {
        const srcPath = path.join(src, entry.name);
        const destPath = path.join(dest, entry.name);

        if (entry.isDirectory()) {
            copyDir(srcPath, destPath);
        } else {
            fs.copyFileSync(srcPath, destPath);
        }
    }
}

/**
 * Main function
 */
function main() {
    console.log('📦 Copying frontend build to Electron app...');
    console.log(`   Source: ${srcDir}`);
    console.log(`   Destination: ${destDir}`);

    // Check if source directory exists
    if (!fs.existsSync(srcDir)) {
        console.error('❌ Error: Frontend build not found!');
        console.error('   Please run "npm run build:frontend" first');
        console.error(`   Expected path: ${srcDir}`);
        process.exit(1);
    }

    // Check if index.html exists in source
    const indexPath = path.join(srcDir, 'index.html');
    if (!fs.existsSync(indexPath)) {
        console.error('❌ Error: index.html not found in build!');
        console.error('   The build may be corrupted or incomplete');
        process.exit(1);
    }

    // Clean destination directory if it exists
    if (fs.existsSync(destDir)) {
        console.log('   Cleaning existing build...');
        fs.rmSync(destDir, { recursive: true, force: true });
    }

    // Copy the build
    console.log('   Copying files...');
    copyDir(srcDir, destDir);

    // Verify copy was successful
    const destIndex = path.join(destDir, 'index.html');
    if (fs.existsSync(destIndex)) {
        const srcFiles = countFiles(srcDir);
        const destFiles = countFiles(destDir);
        console.log(`✅ Successfully copied ${destFiles} files`);

        if (srcFiles !== destFiles) {
            console.warn(`⚠️  Warning: Source has ${srcFiles} files, destination has ${destFiles}`);
        }
    } else {
        console.error('❌ Error: Copy failed - index.html not found in destination');
        process.exit(1);
    }

    console.log('📦 Frontend copy complete!');
}

/**
 * Count files in a directory recursively
 */
function countFiles(dir) {
    let count = 0;
    const entries = fs.readdirSync(dir, { withFileTypes: true });

    for (const entry of entries) {
        if (entry.isDirectory()) {
            count += countFiles(path.join(dir, entry.name));
        } else {
            count++;
        }
    }

    return count;
}

// Run the script
main();