1
1
Fork 0

Initial proof of concept building

This commit is contained in:
Joe Wroten 2018-12-26 22:55:04 -06:00
parent 3dfe41eeab
commit 589792d315
8 changed files with 280 additions and 5 deletions

2
.gitignore vendored
View file

@ -43,4 +43,4 @@ jspm_packages
.node_repl_history
# Ignore build
/build
/dist

View file

@ -1,3 +1,7 @@
# Joe Wroten's Portfolio
```bash
export GITHUB_API_TOKEN="TOKEN"
```

60
index.js Normal file
View 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
View 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
}
}
}

View file

@ -1,10 +1,11 @@
{
"name": "joe-wroten-portfolio",
"private": true,
"scripts": {
},
"dependencies": {
},
"scripts": {},
"dependencies": {},
"devDependencies": {
"axios": "^0.18.0",
"fs-extra": "^7.0.1",
"handlebars": "^4.0.12"
}
}

3
src/pages/example.json Normal file
View file

@ -0,0 +1,3 @@
{
"name": "Example"
}

27
src/request.js Normal file
View 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
View 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
}
}
}
}
}
}
}`;