Add unknown option suggestion and warning
This commit is contained in:
parent
0927e8287c
commit
4d134a613d
3 changed files with 41 additions and 6 deletions
|
|
@ -3,6 +3,8 @@ import { args, AvailableMuxer, groups } from './module.args';
|
|||
import { LanguageItem } from './module.langsData';
|
||||
import { DownloadInfo } from '../@types/messageHandler';
|
||||
import { HLSCallback } from './hls-download';
|
||||
import leven from 'leven';
|
||||
import { console } from './log';
|
||||
|
||||
let argvC: {
|
||||
[x: string]: unknown;
|
||||
|
|
@ -113,15 +115,15 @@ const getArgv = (cfg: { [key:string]: unknown }, isGUI: boolean) => {
|
|||
return cfg[key] as T;
|
||||
} else
|
||||
return _default;
|
||||
};
|
||||
|
||||
};
|
||||
const argv = yargs.parserConfiguration({
|
||||
'duplicate-arguments-array': false,
|
||||
'camel-case-expansion': false,
|
||||
})
|
||||
.wrap(yargs.terminalWidth())
|
||||
.usage('Usage: $0 [options]')
|
||||
.help(true).version(false);
|
||||
.help(true);
|
||||
//.strictOptions()
|
||||
const data = args.map(a => {
|
||||
return {
|
||||
...a,
|
||||
|
|
@ -143,7 +145,31 @@ const getArgv = (cfg: { [key:string]: unknown }, isGUI: boolean) => {
|
|||
},
|
||||
choices: item.name === 'service' && isGUI ? undefined : item.choices as unknown as Choices
|
||||
});
|
||||
return argv as unknown as yargs.Argv<typeof argvC>;
|
||||
};
|
||||
|
||||
// Custom logic for suggesting corrections for misspelled options
|
||||
argv.middleware((argv: Record<string, any>) => {
|
||||
// List of valid options
|
||||
const validOptions = [
|
||||
...args.map(a => a.name),
|
||||
...args.map(a => a.alias).filter(alias => alias !== undefined) as string[]
|
||||
];
|
||||
const unknownOptions = Object.keys(argv).filter(key => !validOptions.includes(key) && key !== '_' && key !== '$0'); // Filter out known options
|
||||
|
||||
const suggestedOptions: Record<string, boolean> = {};
|
||||
unknownOptions.forEach(actualOption => {
|
||||
const closestOption = validOptions.find(option => {
|
||||
const levenVal = leven(option, actualOption);
|
||||
return levenVal <= 2 && levenVal > 0;
|
||||
});
|
||||
|
||||
|
||||
if (closestOption && !suggestedOptions[closestOption]) {
|
||||
suggestedOptions[closestOption] = true;
|
||||
console.info(`Unknown option ${actualOption}, did you mean ${closestOption}?`);
|
||||
} else if (!suggestedOptions[actualOption]) {
|
||||
suggestedOptions[actualOption] = true;
|
||||
console.info(`Unknown option ${actualOption}`);
|
||||
}
|
||||
});
|
||||
});
|
||||
return argv as unknown as yargs.Argv<typeof argvC>;
|
||||
};
|
||||
|
|
@ -48,6 +48,7 @@
|
|||
"fs-extra": "^11.2.0",
|
||||
"got": "^11.8.6",
|
||||
"iso-639": "^0.2.2",
|
||||
"leven": "^3.1.0",
|
||||
"log4js": "^6.9.1",
|
||||
"long": "^5.2.3",
|
||||
"lookpath": "^1.2.2",
|
||||
|
|
|
|||
|
|
@ -29,6 +29,9 @@ dependencies:
|
|||
iso-639:
|
||||
specifier: ^0.2.2
|
||||
version: 0.2.2
|
||||
leven:
|
||||
specifier: ^3.1.0
|
||||
version: 3.1.0
|
||||
log4js:
|
||||
specifier: ^6.9.1
|
||||
version: 6.9.1
|
||||
|
|
@ -4635,6 +4638,11 @@ packages:
|
|||
language-subtag-registry: 0.3.22
|
||||
dev: true
|
||||
|
||||
/leven@3.1.0:
|
||||
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
|
||||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
/levn@0.4.1:
|
||||
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
|
|
|
|||
Loading…
Reference in a new issue