1
1
Fork 0
portfolio/index.js
2018-12-27 08:21:25 -06:00

71 lines
1.6 KiB
JavaScript

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 pagesPath = './src/pages';
const dist = './dist';
const exampleHBS = compile(`
<h1>{{name}}</h1>
<hr />
<main>
{{{readme.html}}}
</main>
`);
(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 => {
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));
});
try {
await Promise.all(writeFilesPromises);
} catch (error) {
console.error('Error while writing html files', error);
return;
}
})();