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:
hyper
2026-04-23 14:44:24 +08:00
parent 32408c3cee
commit 59b99d2042
2 changed files with 236 additions and 15 deletions
+17 -15
View File
@@ -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 {