Cleanup
This commit is contained in:
parent
0bd62c6b16
commit
c61fbe9845
4 changed files with 82 additions and 56 deletions
70
index.js
70
index.js
|
@ -1,68 +1,26 @@
|
||||||
const marked = require('marked');
|
|
||||||
const { compile } = require('handlebars');
|
|
||||||
const requestGithub = require('./src/request');
|
|
||||||
const { join } = require('path');
|
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 distPath = './dist';
|
||||||
const dist = './dist';
|
|
||||||
const exampleHBS = compile(`
|
|
||||||
<h1>{{name}}</h1>
|
|
||||||
<hr />
|
|
||||||
<main>
|
|
||||||
{{{readme.html}}}
|
|
||||||
</main>
|
|
||||||
`);
|
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
let fileNames;
|
const interiorTemplate = await getTemplate('interior');
|
||||||
let filesJSON;
|
let repoJSONs = await getPinnedRepoJSONs();
|
||||||
let {
|
let staticJSONs = await getStaticPageJSONs();
|
||||||
data: {
|
let combinedJSONs = repoJSONs.concat(staticJSONs);
|
||||||
viewer: {
|
const saveAsInteriorHTML = async json => {
|
||||||
pinnedRepositories: {
|
let fileName = json.name.replace(/[^a-zA-Z\d:]/g, '').toLowerCase();
|
||||||
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) {
|
if (json.readme && json.readme.text) {
|
||||||
json.readme.html = marked(json.readme.text);
|
json.readme.html = marked(json.readme.text);
|
||||||
}
|
}
|
||||||
return json;
|
return outputFile(join(distPath, fileName) + '.html', interiorTemplate(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 {
|
try {
|
||||||
await Promise.all(writeFilesPromises);
|
await Promise.all(combinedJSONs.map(saveAsInteriorHTML));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error while writing html files', error);
|
console.error('Error while writing html files', error);
|
||||||
return;
|
return;
|
||||||
|
|
48
src/discoverJSONData.js
Normal file
48
src/discoverJSONData.js
Normal file
|
@ -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,
|
||||||
|
};
|
15
src/template.js
Normal file
15
src/template.js
Normal file
|
@ -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);
|
||||||
|
};
|
||||||
|
|
5
src/templates/interior.hbs
Normal file
5
src/templates/interior.hbs
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<h1>{{name}}</h1>
|
||||||
|
<hr />
|
||||||
|
<main>
|
||||||
|
{{{readme.html}}}
|
||||||
|
</main>
|
Loading…
Add table
Reference in a new issue