Initial proof of concept building
This commit is contained in:
parent
3dfe41eeab
commit
589792d315
8 changed files with 280 additions and 5 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -43,4 +43,4 @@ jspm_packages
|
||||||
.node_repl_history
|
.node_repl_history
|
||||||
|
|
||||||
# Ignore build
|
# Ignore build
|
||||||
/build
|
/dist
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
|
||||||
# Joe Wroten's Portfolio
|
# Joe Wroten's Portfolio
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export GITHUB_API_TOKEN="TOKEN"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
60
index.js
Normal file
60
index.js
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
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 />
|
||||||
|
`);
|
||||||
|
|
||||||
|
(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 writeFilesPromises = combinedJSONs.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;
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
152
package-lock.json
generated
Normal file
152
package-lock.json
generated
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
{
|
||||||
|
"name": "joe-wroten-portfolio",
|
||||||
|
"requires": true,
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"dependencies": {
|
||||||
|
"async": {
|
||||||
|
"version": "2.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
|
||||||
|
"integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"lodash": "^4.17.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"axios": {
|
||||||
|
"version": "0.18.0",
|
||||||
|
"resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
|
||||||
|
"integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"follow-redirects": "^1.3.0",
|
||||||
|
"is-buffer": "^1.1.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commander": {
|
||||||
|
"version": "2.17.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
|
||||||
|
"integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"follow-redirects": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-4Oh4eI3S9OueVV41AgJ1oLjpaJUhbJ7JDGOMhe0AFqoSejl5Q2nn3eGglAzRUKVKZE8jG5MNn66TjCJMAnpsWA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "=3.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fs-extra": {
|
||||||
|
"version": "7.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
|
||||||
|
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"graceful-fs": "^4.1.2",
|
||||||
|
"jsonfile": "^4.0.0",
|
||||||
|
"universalify": "^0.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"graceful-fs": {
|
||||||
|
"version": "4.1.15",
|
||||||
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
|
||||||
|
"integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"handlebars": {
|
||||||
|
"version": "4.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
|
||||||
|
"integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"async": "^2.5.0",
|
||||||
|
"optimist": "^0.6.1",
|
||||||
|
"source-map": "^0.6.1",
|
||||||
|
"uglify-js": "^3.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-buffer": {
|
||||||
|
"version": "1.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
|
||||||
|
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"jsonfile": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
|
||||||
|
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"graceful-fs": "^4.1.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lodash": {
|
||||||
|
"version": "4.17.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
|
||||||
|
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"minimist": {
|
||||||
|
"version": "0.0.10",
|
||||||
|
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
|
||||||
|
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"optimist": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
|
||||||
|
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"minimist": "~0.0.1",
|
||||||
|
"wordwrap": "~0.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"uglify-js": {
|
||||||
|
"version": "3.4.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
|
||||||
|
"integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"commander": "~2.17.1",
|
||||||
|
"source-map": "~0.6.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"universalify": {
|
||||||
|
"version": "0.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
|
||||||
|
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"wordwrap": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
|
||||||
|
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,10 +1,11 @@
|
||||||
{
|
{
|
||||||
"name": "joe-wroten-portfolio",
|
"name": "joe-wroten-portfolio",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {},
|
||||||
},
|
"dependencies": {},
|
||||||
"dependencies": {
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"axios": "^0.18.0",
|
||||||
|
"fs-extra": "^7.0.1",
|
||||||
|
"handlebars": "^4.0.12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
3
src/pages/example.json
Normal file
3
src/pages/example.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"name": "Example"
|
||||||
|
}
|
27
src/request.js
Normal file
27
src/request.js
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
const axios = require('axios');
|
||||||
|
|
||||||
|
module.exports = async query => {
|
||||||
|
let githubApiToken = process.env.GITHUB_API_TOKEN;
|
||||||
|
if (!githubApiToken) {
|
||||||
|
console.error('No process env GITHUB_API_TOKEN found.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let axiosGithubGraphql = axios.create({
|
||||||
|
baseURL: 'https://api.github.com/graphql',
|
||||||
|
headers: {
|
||||||
|
Authorization: `bearer ${githubApiToken}`
|
||||||
|
},
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
const result = await axiosGithubGraphql({
|
||||||
|
url: '',
|
||||||
|
method: 'post',
|
||||||
|
data: {
|
||||||
|
query,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return result.data;
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
};
|
28
src/schema.js
Normal file
28
src/schema.js
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
module.exports = `{
|
||||||
|
viewer {
|
||||||
|
pinnedRepositories(last: 6) {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
name
|
||||||
|
updatedAt
|
||||||
|
description
|
||||||
|
url
|
||||||
|
repositoryTopics(last: 12) {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
topic {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
readme: object(expression: "master:README.md") {
|
||||||
|
... on Blob {
|
||||||
|
text
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`;
|
Loading…
Add table
Reference in a new issue