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