mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2024-12-11 00:46:38 +01:00
42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
|
import { SlashCommandClosure } from './SlashCommandClosure.js';
|
||
|
import { SlashCommandExecutor } from './SlashCommandExecutor.js';
|
||
|
|
||
|
export class SlashCommandDebugController {
|
||
|
/**@type {boolean} */ isStepping = false;
|
||
|
/**@type {boolean} */ isSteppingInto = false;
|
||
|
|
||
|
/**@type {Promise<boolean>} */ continuePromise;
|
||
|
/**@type {(boolean)=>void} */ continueResolver;
|
||
|
|
||
|
/**@type {(closure:SlashCommandClosure, executor:SlashCommandExecutor)=>Promise<boolean>} */ onBreakPoint;
|
||
|
|
||
|
|
||
|
|
||
|
resume() {
|
||
|
this.continueResolver?.(false);
|
||
|
this.continuePromise = null;
|
||
|
}
|
||
|
step() {
|
||
|
this.continueResolver?.(true);
|
||
|
this.continuePromise = null;
|
||
|
}
|
||
|
stepInto() {
|
||
|
this.isSteppingInto = true;
|
||
|
this.continueResolver?.(true);
|
||
|
this.continuePromise = null;
|
||
|
}
|
||
|
|
||
|
async awaitContinue() {
|
||
|
this.continuePromise ??= new Promise(resolve=>{
|
||
|
this.continueResolver = resolve;
|
||
|
});
|
||
|
this.isStepping = await this.continuePromise;
|
||
|
return this.isStepping;
|
||
|
}
|
||
|
|
||
|
async awaitBreakPoint(closure, executor) {
|
||
|
this.isStepping = await this.onBreakPoint(closure, executor);
|
||
|
return this.isStepping;
|
||
|
}
|
||
|
}
|