libretime/scripts/generate_easypanel_json.js

61 lines
1.7 KiB
JavaScript

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);