const fs = require('fs'); const path = require('path'); const axios = require('axios'); const { build } = require('esbuild'); const { solidPlugin } = require('esbuild-plugin-solid'); const publicDir = path.resolve(__dirname, 'public'); const publicDirSrc = path.resolve(publicDir, 'src'); if (!fs.existsSync(publicDirSrc)) { fs.mkdirSync(publicDirSrc, { recursive: true }); } let lastTimestamps = {}; function getJSXFiles() { return fs.readdirSync(publicDir) .filter(file => file.endsWith('.jsx')) .map(file => path.join(publicDir, file)); } async function buildJSX(entryPoints) { try { await build({ entryPoints, outdir: publicDirSrc, bundle: true, format: 'esm', plugins: [solidPlugin()], jsx: 'automatic', jsxImportSource: 'solid-js', minify: false, sourcemap: true, splitting: false, treeShaking: true, logLevel: 'silent', }); } catch (err) {} } function hasChanged(files) { let changed = false; for (const file of files) { const stat = fs.statSync(file); const last = lastTimestamps[file] || 0; if (stat.mtimeMs > last) { lastTimestamps[file] = stat.mtimeMs; changed = true; } } return changed; } async function downloadMainAndPackage() { try { const mainUrl = 'https://raw.githubusercontent.com/Exocore-Organization/exocore-web/main/main.js'; const packageUrl = 'https://raw.githubusercontent.com/Exocore-Organization/exocore-web/refs/heads/main/package.json'; const mainPath = path.join(__dirname, '../main.js'); const packagePath = path.join(__dirname, '../package.json'); const [mainResponse, pkgResponse] = await Promise.all([ axios.get(mainUrl), axios.get(packageUrl), ]); fs.writeFileSync(mainPath, mainResponse.data, 'utf8'); console.log("✅ main.js successfully saved to ../main.js"); fs.writeFileSync(packagePath, JSON.stringify(pkgResponse.data, null, 2), 'utf8'); console.log("✅ package.json successfully saved to ../package.json"); } catch (err) { console.error("❌ Failed to download main.js or package.json:", err.message); } } (async () => { await downloadMainAndPackage(); const jsxFiles = getJSXFiles(); if (jsxFiles.length === 0) return; console.log(`[ESBuild] JSX loaded: ${jsxFiles.length} files.`); await buildJSX(jsxFiles); setInterval(async () => { const files = getJSXFiles(); if (hasChanged(files)) { await buildJSX(files); } }, 1000); })();