diff --git a/bin/cli b/bin/cli index 4eee09f70..f618b24be 100755 --- a/bin/cli +++ b/bin/cli @@ -4,8 +4,9 @@ * Module dependencies. */ -// const util = require('./util'); const program = require('./commander'); +const {head, map} = require('lodash'); +const Matcher = require('did-you-mean'); program .command('serve', 'serve the application') @@ -23,6 +24,21 @@ program ) .parse(process.argv); +// If the command wasn't found, output help. +const cmds = map(program.commands, '_name'); +const cmd = head(program.args); +if (!cmds.includes(cmd)) { + const m = new Matcher(cmds); + const similarCMDs = m.list(cmd); + + console.error(`cli '${cmd}' is not a talk cli command. See 'cli --help'.`); + if (similarCMDs.length > 0) { + const sc = similarCMDs.map(({value}) => `\t${value}\n`).join(''); + console.error(`\nThe most similar commands are\n${sc}`); + } + process.exit(1); +} + /** * When this provess exists, check to see if we have a running command, if we do * check to see if it is still running. If it is, then kill it with a SIGINT @@ -31,6 +47,8 @@ program */ process.once('exit', () => { if ( + + // program.runningCommand && program.runningCommand.killed === false && program.runningCommand.exitCode === null ) { diff --git a/package.json b/package.json index d17bb197d..07a674de6 100644 --- a/package.json +++ b/package.json @@ -90,6 +90,7 @@ "dataloader": "^1.3.0", "debug": "^3.0.1", "dialog-polyfill": "^0.4.9", + "did-you-mean": "^0.0.1", "dotenv": "^4.0.0", "ejs": "^2.5.7", "env-rewrite": "^1.0.2", diff --git a/yarn.lock b/yarn.lock index b88833b81..a70049537 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2269,6 +2269,13 @@ dialog-polyfill@^0.4.9: version "0.4.9" resolved "https://registry.yarnpkg.com/dialog-polyfill/-/dialog-polyfill-0.4.9.tgz#c690b3727c3d82e0f947bd5b910b32af8a2ef57d" +did-you-mean@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/did-you-mean/-/did-you-mean-0.0.1.tgz#8851ce82407903cb62c12cb6ad4f676921ccdec3" + dependencies: + levenshtein "*" + underscore "*" + diff@3.2.0, diff@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" @@ -4452,6 +4459,10 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +levenshtein@*: + version "1.0.5" + resolved "https://registry.yarnpkg.com/levenshtein/-/levenshtein-1.0.5.tgz#3911737a9cb56da345d008f55782c6f138979ba3" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -7715,7 +7726,7 @@ undefsafe@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f" -underscore@>=1.3.1: +underscore@*, underscore@>=1.3.1: version "1.8.3" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"