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 { 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(`
|
||||
<h1>{{name}}</h1>
|
||||
<hr />
|
||||
<main>
|
||||
{{{readme.html}}}
|
||||
</main>
|
||||
`);
|
||||
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;
|
||||
|
|
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