#!/usr/bin/env node "use strict"; const build_conf = { protected_dirs: ["assets", "style", "news-articles", "game-articles", "software-articles"], }; const fs = require("fs"); const browserify = require("browserify"); const curDir = process.cwd(); // Handle home page const b = browserify(); b.add(`${curDir}/src/main.js`) .bundle() .pipe(fs.createWriteStream(`${curDir}/public/main.js`)); // Handle subpages function getPageHtml(pagename) { return ` <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" /> <title>Kuadrado Software - ${pagename}</title> <link rel="icon" type="image/svg+xml" href="/favicon.svg"> <link href="/style/style.css" rel="stylesheet" /> </head> <body> <main></main> </body> <script type="text/javascript" src="./${pagename}.js"></script> </html> `; } const pages = fs.readdirSync(`${curDir}/src/pages`); for (const p of pages) { const fPath = `${curDir}/src/pages/${p}`; const targetDirPath = `${curDir}/public/${p}`; if (!fs.existsSync(targetDirPath)) { fs.mkdirSync(targetDirPath); } const b = browserify(); b.add(fPath) .bundle() .pipe(fs.createWriteStream(`${targetDirPath}/${p}.js`)); const page = fs.createWriteStream(`${targetDirPath}/index.html`); page.write(getPageHtml(p)); } // If pages have been deleted in source, remove them in output directory too. for (const dir of fs.readdirSync(`${curDir}/public`).filter(f => { if (build_conf.protected_dirs.includes(f)) return false; const stats = fs.statSync(`${curDir}/public/${f}`); return stats.isDirectory(); })) { if (!pages.includes(dir)) { const dPath = `${curDir}/public/${dir}`; try { const nestedFiles = fs.readdirSync(dPath); for (const nf of nestedFiles) { fs.unlinkSync(`${dPath}/${nf}`); } fs.rmdirSync(dPath); } catch (error) { console.error(error); } } }