/* eslint-disable no-undef */ const path = require(`path`); const fs = require("fs") exports.createPages = async ({ actions, graphql, reporter }) => { const { createPage } = actions const projectTemplate = path.resolve(`src/templates/project.js`) const result = await graphql(` query AllPagesQuery { allProjectsJson { nodes { lang urlname } } } `) if (result.errors) { reporter.panicOnBuild(`Error while running GraphQL query.`) return } result.data.allProjectsJson.nodes.forEach((node) => { // eslint-disable-next-line no-undef console.log("Creating Page: ", `/${node.lang}/projects/${node.urlname}`); if (node.lang !== "ignoreme") createPage({ path: `/${node.lang}/projects/${node.urlname}`, component: projectTemplate, context: { lang: node.lang, urlname: node.urlname } }) }); } const config = require("./config.js"); exports.onPostBuild = async ({graphql, reporter}) => { console.log("Building static api..."); const apiPrefix = "./public/api"; if (!fs.existsSync(apiPrefix)) fs.mkdirSync(apiPrefix) fs.writeFileSync(`${apiPrefix}.json`, JSON.stringify({ success: true, endpoints: { projects: [ { name: "Projects Overview", description: "Returns overview of all available projects", path: "/api/projects.json" }, { name: "Projects Overview for Language", description: "Returns overview of all available projects in a specified language", path: "/api/projects/:lang.json" }, { name: "Get specific Project", description: "Returns specific project in specified language", path: "/api/projects/:lang/:slug.json" } ] } })); const projectsPrefix = apiPrefix+"/projects"; if (!fs.existsSync(projectsPrefix)) fs.mkdirSync(projectsPrefix) await graphql(` query { allProjectsJson { nodes { longDescription urlname shortDescription name links { github website } lang image { publicURL } featured } } } `).then(res => { if (res.errors) { reporter.panicOnBuild(`Error while running GraphQL query.`) return } let projects = res.data.allProjectsJson.nodes.filter((project => { return project.lang !== "ignoreme" })); fs.writeFileSync(`${projectsPrefix}.json`, JSON.stringify({ success: true, projects: projects.map((project) => {return {slug: project.urlname, lang: project.lang, api: `/api/projects/${project.lang}/${project.urlname}.json`};}) })); config.languages.forEach((lang) => { if (!fs.existsSync(`${projectsPrefix}/${lang}`)) fs.mkdirSync(`${projectsPrefix}/${lang}`) fs.writeFileSync(`${projectsPrefix}/${lang}.json`, JSON.stringify({ success: true, projects: projects.filter((project) => {return project.lang == lang;}).map((project) => {return {slug: project.urlname, lang: project.lang, api: `/api/projects/${project.lang}/${project.urlname}.json`};}) })); }); projects.forEach((project) => { fs.writeFileSync(`${projectsPrefix}/${project.lang}/${project.urlname}.json`, JSON.stringify({ success: true, project: { slug: project.urlname, lang: project.lang, name: project.name, shortDescription: project.shortDescription, longDescription: project.longDescription, links: project.links !== null ? { github: project.links.github, website: project.links.website } : null, image: project.image.publicURL, featured: project.featured, frontend: `/${project.lang}/projects/${project.urlname}` } })); }); }) }