import * as vscode from 'vscode'; export class InputBox { constructor(public readonly jsonSchema: any) {} public async openForm(currentValues: any): Promise { let values : any = {}; for(let ip of Object.keys(this.jsonSchema.properties)){ let p : any = this.jsonSchema.properties[ip]; let value : string | undefined; let castValue: any; // # Get input value if(p.enum) value = await vscode.window.showQuickPick(p.enum.map((e:any) => e+'') as string[], { canPickMany: false, placeHolder: p.description + (currentValues[p]?" ("+currentValues[p]+")": "") }); else value = await vscode.window.showInputBox( { placeHolder: p.description + (currentValues[p]?" ("+currentValues[p]+")": "") }); // # Check undefined if(!value) if(p.required){ if(currentValues[p]) castValue = currentValues[p]; else throw new Error(ip + " input required"); } else castValue = value; else { // # Cast input value if(p.type == "boolean") castValue = (value =="true"); else if(p.type == "number" || p.type == "integer") castValue = +value; else castValue = value; } values[ip] = castValue; } return values; } }