const fs = require('fs'); const path = require('path'); const templateDirDefault = path.resolve(__dirname, '..', 'easypanel-template-libretime'); const templateDirSecure = path.resolve(__dirname, '..', 'easypanel-template-libretime-secure'); const outFile = path.resolve(__dirname, '..', 'easypanel-template.json'); const outFileSecure = path.resolve(__dirname, '..', 'easypanel-template-secure.json'); function isBinary(buf) { for (let i = 0; i < buf.length; i++) { if (buf[i] === 0) return true; } return false; } function walk(dir, base) { const entries = fs.readdirSync(dir, { withFileTypes: true }); const files = []; for (const e of entries) { const full = path.join(dir, e.name); const rel = path.join(base, e.name); if (e.isDirectory()) { files.push(...walk(full, rel)); } else { const buf = fs.readFileSync(full); if (isBinary(buf)) { files.push({ path: rel.replace(/\\\\/g, '/'), encoding: 'base64', content: buf.toString('base64') }); } else { files.push({ path: rel.replace(/\\\\/g, '/'), encoding: 'utf8', content: buf.toString('utf8') }); } } } return files; } function generateFor(dir, outPath) { if (!fs.existsSync(dir)) { console.error('Template dir not found:', dir); return; } const metaPath = path.join(dir, 'meta.yaml'); let metaYaml = ''; if (fs.existsSync(metaPath)) { metaYaml = fs.readFileSync(metaPath, 'utf8'); } const files = walk(dir, ''); const out = { meta: metaYaml, files: files, }; fs.writeFileSync(outPath, JSON.stringify(out, null, 2), 'utf8'); console.log('Wrote', outPath); } generateFor(templateDirDefault, outFile); generateFor(templateDirSecure, outFileSecure);