From f9ea8b23c40e9bdae84923dde52bc9457105ce99 Mon Sep 17 00:00:00 2001 From: "Navy.gif" Date: Wed, 27 Mar 2024 10:10:17 +0200 Subject: [PATCH] bugfix --- src/Parser.ts | 8 +++-- tests/playground.js | 87 +++++++++++++++++++++++++++------------------ 2 files changed, 58 insertions(+), 37 deletions(-) diff --git a/src/Parser.ts b/src/Parser.ts index 6733976..01e15fe 100644 --- a/src/Parser.ts +++ b/src/Parser.ts @@ -10,7 +10,7 @@ import { ICommand } from '../index.js'; import { ParserError } from './util/Errors/ParserError.js'; type ArgsResult = { - [key: string]: CommandOption + [key: string]: CommandOption | undefined } type ParseResult = { @@ -36,7 +36,7 @@ type ParseOptions = { commandFound?: (cmd: Cmd) => boolean | Promise } -const flagReg = /(?:^| )(?(?:--[a-z0-9]{3,})|(?:-[a-z]{1,2}))(?:$| )/iu; +const flagReg = /(?:^| )(?(?:--[a-z0-9]{2,})|(?:-[a-z]{1,2}))(?:$| )/iu; class Parser extends EventEmitter { @@ -178,6 +178,7 @@ class Parser extends EventEmitter // Parse flags for (let index = 0; index < params.length;) { + this.debug(''); const match = flagReg.exec(params[index]); if (!match || !match.groups) { @@ -234,6 +235,9 @@ class Parser extends EventEmitter // Clean up params for option parsing for (const flag of Object.values(args)) { + // To shut up TS + if (!flag) + throw new Error('Undefined flag'); this.debug(`Running parser for ${flag.name}`); const result = await flag.parse(guild); if (result.error) diff --git a/tests/playground.js b/tests/playground.js index c9d54e6..2b0fe73 100644 --- a/tests/playground.js +++ b/tests/playground.js @@ -1,41 +1,57 @@ import { Parser, Command, OptionType } from '../build/esm/index.js'; -const createCommand = new Command({ - name: 'create', - options: [{ - name: 'registration-code', - aliases: ['code'], - type: OptionType.SUB_COMMAND, +const commands = [ + new Command({ + name: 'create', options: [{ - name: 'amount', - flag: true, - type: OptionType.INTEGER, - defaultValue: 1, - valueOptional: true, - required: true + name: 'registration-code', + aliases: ['code'], + type: OptionType.SUB_COMMAND, + options: [{ + name: 'amount', + flag: true, + type: OptionType.INTEGER, + defaultValue: 1, + valueOptional: true, + required: true + }] }] - }] -}); -const botbanCommand = new Command({ - name: 'botban', - options: [ - { name: 'users', type: OptionType.STRING, required: true }, - { name: 'service', choices: ['support', 'reports'], valueAsAlias: true, required: true } - ] -}); - -const volumeCommand = new Command({ - name: 'volume', - options: [ - { - name: 'volume', - type: OptionType.INTEGER, - maximum: 100, - minimum: 0 - }, - ] -}); -const parser = new Parser({ commands: [createCommand, botbanCommand, volumeCommand], prefix: '', debug: true }); + }), + new Command({ + name: 'botban', + options: [ + { name: 'users', type: OptionType.STRING, required: true }, + { name: 'service', choices: ['support', 'reports'], valueAsAlias: true, required: true } + ] + }), + new Command({ + name: 'volume', + options: [ + { + name: 'volume', + type: OptionType.INTEGER, + maximum: 100, + minimum: 0 + }, + ] + }), + new Command({ + name: 'search', + options: [ + { + name: 'artist', + flag: true + }, { + name: 'id', + flag: true, + type: OptionType.INTEGER + }, { + name: 'song' + } + ] + }) +] +const parser = new Parser({ commands, prefix: '', debug: true }); parser.on('debug', console.log) console.log((await parser.parseMessage('create code -a 1')).args); console.log((await parser.parseMessage('create code --help')).args); @@ -44,4 +60,5 @@ console.log((await parser.parseMessage('create code --help')).args); console.log((await parser.parseMessage('create code')).args); console.log((await parser.parseMessage('botban support dingus')).args); -console.log((await parser.parseMessage('volume 500')).args); \ No newline at end of file +console.log((await parser.parseMessage('volume 100')).args); +console.log((await parser.parseMessage('search --id 5000')).args); \ No newline at end of file