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
	
	 Joe Wroten
						Joe Wroten