diff options
author | Sam Wilkins <samwilkins333@gmail.com> | 2020-01-01 21:32:30 -0800 |
---|---|---|
committer | Sam Wilkins <samwilkins333@gmail.com> | 2020-01-01 21:32:30 -0800 |
commit | 7d9dc9e647542b0a2fdb9a98cb02e3c9ffc5ff12 (patch) | |
tree | db64744cc3a330de2d89957e48936003777df2d7 /src/server/session_manager/input_manager.ts | |
parent | 6a3167f80e5801763a88add8b3a8cfce2ac7b467 (diff) |
session manager improvements
Diffstat (limited to 'src/server/session_manager/input_manager.ts')
-rw-r--r-- | src/server/session_manager/input_manager.ts | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/server/session_manager/input_manager.ts b/src/server/session_manager/input_manager.ts index a95e6baae..133b7144a 100644 --- a/src/server/session_manager/input_manager.ts +++ b/src/server/session_manager/input_manager.ts @@ -7,9 +7,10 @@ export interface Configuration { isCaseSensitive?: boolean; } +type Action = (parsedArgs: IterableIterator<string>) => any | Promise<any>; export interface Registration { - argPattern: RegExp[]; - action: (parsedArgs: IterableIterator<string>) => any | Promise<any>; + argPatterns: RegExp[]; + action: Action; } export default class InputManager { @@ -42,9 +43,10 @@ export default class InputManager { return `${this.identifier} commands: { ${members.sort().join(", ")} }`; } - public registerCommand = (basename: string, argPattern: RegExp[], action: any | Promise<any>) => { + public registerCommand = (basename: string, argPatterns: (RegExp | string)[], action: Action) => { const existing = this.commandMap.get(basename); - const registration = { argPattern, action }; + const converted = argPatterns.map(input => input instanceof RegExp ? input : new RegExp(input)); + const registration = { argPatterns: converted, action }; if (existing) { existing.push(registration); } else { @@ -74,14 +76,14 @@ export default class InputManager { const registered = this.commandMap.get(command); if (registered) { const { length } = args; - const candidates = registered.filter(({ argPattern: { length: count } }) => count === length); - for (const { argPattern, action } of candidates) { + const candidates = registered.filter(({ argPatterns: { length: count } }) => count === length); + for (const { argPatterns, action } of candidates) { const parsed: string[] = []; let matched = false; if (length) { for (let i = 0; i < length; i++) { let matches: RegExpExecArray | null; - if ((matches = argPattern[i].exec(args[i])) === null) { + if ((matches = argPatterns[i].exec(args[i])) === null) { break; } parsed.push(matches[0]); |