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}}}
+