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_.",
|
"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",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"start": "node ./index.js",
|
||||||
"build": "npm run vendor && babel src --out-dir dist",
|
"build": "npm run vendor && babel src --out-dir dist",
|
||||||
"watch": "npm run vendor && babel src --watch --out-dir dist --source-maps inline",
|
"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",
|
"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": {
|
"dependencies": {
|
||||||
"marked": "^0.3.6",
|
"marked": "^0.3.6",
|
||||||
|
"node-fetch": "^2.2.0",
|
||||||
|
"prompts": "^1.1.1",
|
||||||
"skeleton-css": "^2.0.4",
|
"skeleton-css": "^2.0.4",
|
||||||
"vue": "^2.0.1",
|
"vue": "^2.0.1",
|
||||||
"whatwg-fetch": "^1.0.0"
|
"whatwg-fetch": "^1.0.0"
|
||||||
|
|
Loading…
Add table
Reference in a new issue