aboutsummaryrefslogtreecommitdiff
path: root/src/server/session_manager/input_manager.ts
diff options
context:
space:
mode:
authorSam Wilkins <samwilkins333@gmail.com>2020-01-01 21:32:30 -0800
committerSam Wilkins <samwilkins333@gmail.com>2020-01-01 21:32:30 -0800
commit7d9dc9e647542b0a2fdb9a98cb02e3c9ffc5ff12 (patch)
treedb64744cc3a330de2d89957e48936003777df2d7 /src/server/session_manager/input_manager.ts
parent6a3167f80e5801763a88add8b3a8cfce2ac7b467 (diff)
session manager improvements
Diffstat (limited to 'src/server/session_manager/input_manager.ts')
-rw-r--r--src/server/session_manager/input_manager.ts16
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]);