devpage
Version:
An static portfolio web generator
70 lines (69 loc) • 3.84 kB
JavaScript
;
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 };