1
0
Fork 0
oh-i-use/index.js
2018-10-18 13:52:15 -05:00

103 lines
2.5 KiB
JavaScript

#!/usr/bin/env node
'use strict';
const prompts = require('prompts');
const fetch = require('node-fetch');
let suppliedWordList = process.argv[2];
Array.prototype.random = function() {
return this[Math.floor(Math.random() * this.length)];
}
const getWord = async () => {
let response = await prompts({
type: 'list',
name: 'words',
message: 'What word would you like to base this stack on?'
});
return response.words;
};
let suffixes = ['', 'JS', 'Script', '.js', '.io', 'DB'];
let stackPhrases = {
intros: [
'My prefered tech stack is a',
'I feel the best way to build ambitious apps is with a',
'An ideal stack would be a',
'I start off with a'
],
toolVarieties: [
'',
'engine',
'generator',
'framework',
'setup',
'frontend',
'backend',
'library',
'plugin'
],
toolConnections: [
'powered by a',
'controlling a',
'alongside a',
'integrated with a',
'plugged into a',
'synced to a'
],
outros: [
'to build ambitious web apps.',
'to innovate to the best of my ability.',
'to inspire the Open Source community of makers.'
]
};
function getWordsRelatedTo(word) {
return fetch('https://wt-sharpshark28-gmail_com-0.run.webtask.io/oh-i-use-backend?word=' + word)
.then(r => r.json());
}
async function generateStack(words) {
return Promise.all(words.map(w => getWordsRelatedTo(w)))
.then(data => {
data = data.map(d => d.hasTypes);
return [].concat.apply([], data);
})
.then(wordsToStack);
}
function wordsToStack(allWords) {
let stack = stackPhrases.intros.random();
let loopTimes = 3;
for (let i = 1; i <= loopTimes; i++) { // Add in dynamic loop length for length of stack
let techWord = wordToTechTerm(allWords.random());
let variety = stackPhrases.toolVarieties.random();
let connection = stackPhrases.toolConnections.random();
let outro = stackPhrases.outros.random();
let end = i < loopTimes ? connection : outro;
stack += ` **${techWord}** ${variety} ${end}`;
}
return stack;
}
function wordToTechTerm(word) {
word = word.split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1)); // Capitalize each word
return word.join('') + suffixes.random();
}
const init = async () => {
console.log('Welcome');
suppliedWordList = suppliedWordList ? suppliedWordList.split(',') : await getWord();
console.log('Chosen word list', suppliedWordList);
let result = await generateStack(suppliedWordList);
console.log('Result: ', result);
};
init();