UNPKG

devpage

Version:

An static portfolio web generator

70 lines (69 loc) 3.84 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = __importDefault(require("fs")); const nunjucks_1 = __importDefault(require("nunjucks")); const path_1 = __importDefault(require("path")); const langs = [ { name: "JavaScript", shortcode: "js", icon: "js.svg" }, { name: "TypeScript", shortcode: "ts", icon: "ts.svg" }, { name: "Python", shortcode: "python", icon: "python.svg" }, { name: "Java", shortcode: "java", icon: "java.svg" }, { name: "C++", shortcode: "cpp", icon: "cpp.svg" }, { name: "C#", shortcode: "csharp", icon: "csharp.svg" }, { name: "HTML", shortcode: "html", icon: "html.svg" }, { name: "CSS", shortcode: "css", icon: "css.svg" }, ]; const frameworks = [ { name: "ExpressJS", shortcode: "express", icon: "express.svg" }, { name: "React", shortcode: "react", icon: "react.svg" }, { name: "Angular", shortcode: "angular", icon: "angular.svg" }, { name: "Vue", shortcode: "vue", icon: "vue.svg" }, { name: "Django", shortcode: "django", icon: "django.svg" }, { name: "TailwindCSS", shortcode: "tailwind", icon: "tailwind.svg" }, { name: "Bootstrap", shortcode: "bootstrap", icon: "bootstrap.svg" }, ]; const outputDir = path_1.default.join(process.cwd(), 'web'); const templateDir = path_1.default.join(__dirname, '../templates'); // Resolves to the templates folder nunjucks_1.default.configure(templateDir, { autoescape: true }); function generateBackground(colors) { const backgroundPath = path_1.default.join(templateDir, 'img/background.svg'); let background = fs_1.default.readFileSync(backgroundPath, 'utf8'); background = background.replace(/#05111a/g, colors.color1); background = background.replace(/#3586ff/g, colors.color2); fs_1.default.mkdirSync(`${outputDir}/img`, { recursive: true }); fs_1.default.writeFileSync(`${outputDir}/img/background.svg`, background); console.log("Generating background..."); } function generateWebsite(data, socials, projects) { // CREATE DIRECTORIES fs_1.default.mkdirSync(outputDir, { recursive: true }); fs_1.default.mkdirSync(`${outputDir}/css`, { recursive: true }); fs_1.default.copyFileSync(`${templateDir}/css/style.css`, `${outputDir}/css/style.css`); // COPY TECHSTACK let userlangs = []; let userframeworks = []; data.languages.split(', ').forEach((tech) => { const lang = langs.find((lang) => lang.shortcode === tech); if (lang) { fs_1.default.mkdirSync(`${outputDir}/img`, { recursive: true }); fs_1.default.copyFileSync(`${templateDir}/img/${lang.icon}`, `${outputDir}/img/${lang.icon}`); userlangs.push({ name: lang.name, shortcode: lang.shortcode, icon: `./img/${lang.icon}` }); } }); data.frameworks.split(', ').forEach((tech) => { const framework = frameworks.find((framework) => framework.shortcode === tech); if (framework) { fs_1.default.mkdirSync(`${outputDir}/img`, { recursive: true }); fs_1.default.copyFileSync(`${templateDir}/img/${framework.icon}`, `${outputDir}/img/${framework.icon}`); userframeworks.push({ name: framework.name, shortcode: framework.shortcode, icon: `./img/${framework.icon}` }); } }); // RENDER PAGE const index = nunjucks_1.default.render("index.html", { username: data.username, job: data.job, languages: userlangs, frameworks: userframeworks, about: data.about, socials: socials, projects: projects, avatar: data.pfp }); fs_1.default.writeFileSync(`${outputDir}/index.html`, index); console.log("Rendering html..."); } exports.default = { generateBackground, generateWebsite };