in src/extension/debuggingConfiguration/multiStepInput.ts [162:234]
public async showInputBox<P extends InputBoxParameters>({
title,
step,
totalSteps,
value,
prompt,
validate,
password,
buttons,
shouldResume,
}: P): Promise<MultiStepInputInputBoxResponseType<P>> {
const disposables: Disposable[] = [];
try {
return await new Promise<MultiStepInputInputBoxResponseType<P>>((resolve, reject) => {
const input = window.createInputBox();
input.title = title;
input.step = step;
input.totalSteps = totalSteps;
input.password = !!password;
input.value = value || "";
input.prompt = prompt;
input.ignoreFocusOut = true;
input.buttons = [
...(this.steps.length > 1 ? [QuickInputButtons.Back] : []),
...(buttons || []),
];
let validating = validate("");
disposables.push(
input.onDidTriggerButton(item => {
if (item === QuickInputButtons.Back) {
reject(InputFlowAction.back);
} else {
resolve(<any>item);
}
}),
input.onDidAccept(async () => {
const inputValue = input.value;
input.enabled = false;
input.busy = true;
if (!(await validate(inputValue))) {
resolve(inputValue);
}
input.enabled = true;
input.busy = false;
}),
input.onDidChangeValue(async text => {
const current = validate(text);
validating = current;
const validationMessage = await current;
if (current === validating) {
input.validationMessage = validationMessage;
}
}),
input.onDidHide(() => {
(async () => {
reject(
shouldResume && (await shouldResume())
? InputFlowAction.resume
: InputFlowAction.cancel,
);
})().catch(reject);
}),
);
if (this.current) {
this.current.dispose();
}
this.current = input;
this.current.show();
});
} finally {
disposables.forEach(d => d.dispose());
}
}