Fix command prompt to properly return promise results
Add comprehensive tests for createPromptContext covering prompt, tryCommit, cancel, and handleCall middleware.
This commit is contained in:
@@ -32,12 +32,12 @@ export function createPromptContext() {
|
||||
const key = call.player ?? "global";
|
||||
const existing = map.get(key);
|
||||
if (existing) {
|
||||
existing.reject("Prompt cancelled");
|
||||
existing.reject("Prompt overriden");
|
||||
}
|
||||
|
||||
map.set(key, call);
|
||||
try {
|
||||
await call.promise;
|
||||
return await call.promise;
|
||||
} finally {
|
||||
if (map.get(key) === call) map.delete(key);
|
||||
}
|
||||
@@ -64,24 +64,26 @@ export function createPromptContext() {
|
||||
map.get(player)?.reject(reason);
|
||||
}
|
||||
|
||||
function prompt<TArgs extends any[], TRes>(
|
||||
async function prompt<TArgs extends any[], TRes>(
|
||||
def: PromptDef<TArgs>,
|
||||
validator: PromptValidator<TRes, TArgs>,
|
||||
player?: string,
|
||||
) {
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
const call = {
|
||||
def,
|
||||
player,
|
||||
validator,
|
||||
|
||||
resolve,
|
||||
reject,
|
||||
promise,
|
||||
} as PromptCall<unknown[], unknown>;
|
||||
handleCall.execute(call);
|
||||
let resolve: (res: TRes) => void;
|
||||
let reject: (reason: string) => void;
|
||||
const promise = new Promise<TRes>((res, rej) => {
|
||||
resolve = res;
|
||||
reject = rej;
|
||||
});
|
||||
return promise;
|
||||
const call = {
|
||||
def,
|
||||
player,
|
||||
validator,
|
||||
resolve: resolve!,
|
||||
reject: reject!,
|
||||
promise,
|
||||
} as PromptCall<unknown[], unknown>;
|
||||
return await handleCall.execute(call);
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user