diff --git a/index.js b/index.js index b8413c7..8bc6582 100644 --- a/index.js +++ b/index.js @@ -1,68 +1,26 @@ -const marked = require('marked'); -const { compile } = require('handlebars'); -const requestGithub = require('./src/request'); const { join } = require('path'); -const { readdir, readJson, outputFile } = require('fs-extra'); +const { outputFile } = require('fs-extra'); +const marked = require('marked'); +const getTemplate = require('./src/template'); +const { getPinnedRepoJSONs, getStaticPageJSONs } = require('./src/discoverJSONData'); -const pagesPath = './src/pages'; -const dist = './dist'; -const exampleHBS = compile(` -

{{name}}

-
-
- {{{readme.html}}} -
-`); +const distPath = './dist'; (async () => { - let fileNames; - let filesJSON; - let { - data: { - viewer: { - pinnedRepositories: { - edges: pinnedRepoData - } - } - } - } = await requestGithub(require('./src/schema')); - pinnedRepoData = pinnedRepoData.map(data => data.node); - - try { - fileNames = await readdir(pagesPath); - } catch (error) { - console.error(error); - return; - } - - let readFilesPromises = fileNames.map(fileName => { - let filePath = join(pagesPath, fileName); - return readJson(filePath); - }); - - try { - filesJSON = await Promise.all(readFilesPromises); - } catch (error) { - console.error('Error while reading JSON', error); - return; - } - - let combinedJSONs = filesJSON.concat(pinnedRepoData); - - let renderReadmes = combinedJSONs.map(json => { + const interiorTemplate = await getTemplate('interior'); + let repoJSONs = await getPinnedRepoJSONs(); + let staticJSONs = await getStaticPageJSONs(); + let combinedJSONs = repoJSONs.concat(staticJSONs); + const saveAsInteriorHTML = async json => { + let fileName = json.name.replace(/[^a-zA-Z\d:]/g, '').toLowerCase(); if (json.readme && json.readme.text) { json.readme.html = marked(json.readme.text); } - return json; - }); - - let writeFilesPromises = renderReadmes.map(json => { - let fileName = json.name.replace(/[^a-zA-Z\d:]/g, '').toLowerCase(); - return outputFile(join(dist, fileName) + '.html', exampleHBS(json)); - }); + return outputFile(join(distPath, fileName) + '.html', interiorTemplate(json)); + } try { - await Promise.all(writeFilesPromises); + await Promise.all(combinedJSONs.map(saveAsInteriorHTML)); } catch (error) { console.error('Error while writing html files', error); return; diff --git a/src/discoverJSONData.js b/src/discoverJSONData.js new file mode 100644 index 0000000..e67718c --- /dev/null +++ b/src/discoverJSONData.js @@ -0,0 +1,48 @@ +const { join } = require('path'); +const { readdir, readJson } = require('fs-extra'); +const requestGithub = require('./request'); +const schema = require('./schema'); + +const pagesPath = './src/pages'; + +const getPinnedRepoJSONs = async () => { + let { + data: { + viewer: { + pinnedRepositories: { + edges: pinnedRepoData + } + } + } + } = await requestGithub(schema); + return pinnedRepoData.map(data => data.node); +}; + +const getStaticPageJSONs = async () => { + let fileNames; + let filesJSON; + + try { + fileNames = await readdir(pagesPath); + } catch (error) { + console.error(error); + return; + } + + let readFilesPromises = fileNames.map(fileName => { + let filePath = join(pagesPath, fileName); + return readJson(filePath); + }); + + try { + return await Promise.all(readFilesPromises); + } catch (error) { + console.error('Error while reading JSON', error); + return; + } +}; + +module.exports = { + getPinnedRepoJSONs, + getStaticPageJSONs, +}; diff --git a/src/template.js b/src/template.js new file mode 100644 index 0000000..e4b1f26 --- /dev/null +++ b/src/template.js @@ -0,0 +1,15 @@ +const { compile } = require('handlebars'); +const { readFile } = require('fs-extra'); + +module.exports = async filename => { + let template; + try { + template = await readFile(`./src/templates/${filename}.hbs`); + template = template.toString(); + } catch(error) { + console.error('Could not fetch template', filename, error); + return; + } + return compile(template); +}; + diff --git a/src/templates/interior.hbs b/src/templates/interior.hbs new file mode 100644 index 0000000..668980f --- /dev/null +++ b/src/templates/interior.hbs @@ -0,0 +1,5 @@ +

{{name}}

+
+
+ {{{readme.html}}} +