sequence-finder-cli
Version:
A light-weight command line tool for finding the origins of sequences and querying the OEIS database
62 lines (52 loc) • 1.78 kB
JavaScript
const inquirer = require('inquirer');
const axios = require('axios');
const getSequences = require('./fetchers').getSequences;
const prompts = require('./prompts');
const sequenceListIsEmpty = (seqObj) => {
return typeof seqObj === 'string'
}
const getInputSequence = async () => {
let response = await inquirer.prompt([prompts.enterSequence])
return await getSequences(response.sequence)
}
const selectSequenceAndTerms = async (seqObj) => {
if (sequenceListIsEmpty(seqObj)) {
console.log('There are no sequences that match these numbers!')
} else {
let { key } = await inquirer.prompt(prompts.createSelectSequenceFromTop(seqObj))
if (key === 'See more matches') {
response = await inquirer.prompt(prompts.createSelectSequenceFromAll(seqObj))
key = response.key
}
let { name, data } = seqObj[key];
console.log(`\nDescription: ${name}\n\nTerms: ${data}\n\n`)
}
return;
}
const resetMenu = async (seqObj) => {
// only includes relevant prompts (account for if there are no sequences that match)
if (sequenceListIsEmpty(seqObj)) {
var choice = await inquirer.prompt(prompts.noSequenceMatchMenu)
} else {
var choice = await inquirer.prompt(prompts.sequenceMatchMenu)
}
if (choice.menuItem === 'Exit') {
console.log('See you later!')
} else if (choice.menuItem === 'Search a new sequence') {
startFromBeginning()
} else {
startFromSequenceSelect(seqObj)
}
return;
}
const startFromBeginning = async () => {
let seqObj = await getInputSequence()
startFromSequenceSelect(seqObj)
}
const startFromSequenceSelect = async (seqObj) => {
await selectSequenceAndTerms(seqObj)
await resetMenu(seqObj);
}
// TODO: stack history, generators.
startFromBeginning()