61 lines
1.7 KiB
JavaScript
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);
|