Proof of concept CLI tool, cleanup needed
This commit is contained in:
parent
302e7ace4c
commit
ce0554228c
3 changed files with 138 additions and 0 deletions
103
index.js
Normal file
103
index.js
Normal file
|
@ -0,0 +1,103 @@
|
|||
#!/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();
|
||||
|
32
package-lock.json
generated
Normal file
32
package-lock.json
generated
Normal file
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"name": "oh-i-use",
|
||||
"version": "1.1.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"kleur": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz",
|
||||
"integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ=="
|
||||
},
|
||||
"node-fetch": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.2.0.tgz",
|
||||
"integrity": "sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA=="
|
||||
},
|
||||
"prompts": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/prompts/-/prompts-1.1.1.tgz",
|
||||
"integrity": "sha512-lC0+ifgWNKhTNF28Wj41TOXE+gEzrHcDqkCRHMbv39afuGT1ClekTgcVF+r2VuSgNr3Fy2hq6Pu3Mlt43u+QlQ==",
|
||||
"requires": {
|
||||
"kleur": "^2.0.1",
|
||||
"sisteransi": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"sisteransi": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz",
|
||||
"integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ=="
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@
|
|||
"description": "Developing Javascript web apps can be convoluted. Become that bleeding edge dev with the coolest sounding tech stack made from _randomly generated fake tool names_.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "node ./index.js",
|
||||
"build": "npm run vendor && babel src --out-dir dist",
|
||||
"watch": "npm run vendor && babel src --watch --out-dir dist --source-maps inline",
|
||||
"vendor": "mkdir -p ./vendor ./vendor/css ./vendor/js ./dist ./dist/favicon && cp -R ./src/favicon ./dist && cp -R ./node_modules/skeleton-css/css/ ./vendor/css && cp ./node_modules/vue/dist/vue.min.js ./vendor/js/vue.min.js && cp ./node_modules/whatwg-fetch/fetch.js ./vendor/js/fetch.js && cp ./node_modules/marked/marked.min.js ./vendor/js/marked.min.js",
|
||||
|
@ -17,6 +18,8 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"marked": "^0.3.6",
|
||||
"node-fetch": "^2.2.0",
|
||||
"prompts": "^1.1.1",
|
||||
"skeleton-css": "^2.0.4",
|
||||
"vue": "^2.0.1",
|
||||
"whatwg-fetch": "^1.0.0"
|
||||
|
|
Loading…
Add table
Reference in a new issue