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
|
||||
|
||||
# Ignore build
|
||||
/build
|
||||
/dist
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
|
||||
# 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",
|
||||
"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
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