import * as vscode from 'vscode'; import * as path from 'path'; import { EditorMessage, EditorWebApp } from '../ui/EditorWebApp' export class JsonConfigurator { constructor(readonly extensionUri: vscode.Uri){} public async openConfigurator(configuratorName : string, jsonInstanceUri : vscode.Uri) : Promise{ const jsonUiAppFolder : vscode.Uri = vscode.Uri.parse(path.join(__dirname, "json-ui-app")); const projectManagerIndexUri : vscode.Uri = vscode.Uri.parse(path.join(jsonUiAppFolder.fsPath, "index.html" )) ; const uiConfiguratorIndexHtml : string = Buffer.from(await vscode.workspace.fs.readFile( projectManagerIndexUri )).toString(); const projectManagerApp = new EditorWebApp(this.extensionUri, jsonUiAppFolder, uiConfiguratorIndexHtml, configuratorName, "Configuration"); // # Handle communication projectManagerApp.onMessage( async (message: EditorMessage) => { await vscode.workspace.fs.writeFile(jsonFileUri, Buffer.from(JSON.stringify(message.value, null, 4))); } ); const jsonFileUri : vscode.Uri = vscode.Uri.file(jsonInstanceUri.fsPath); const instanceBuf : Uint8Array = await vscode.workspace.fs.readFile(jsonFileUri); const instance : any = JSON.parse(instanceBuf.toString()); const schemaBuf : Uint8Array = await vscode.workspace.fs.readFile(vscode.Uri.file(instance.$schema)); const schema : string = JSON.parse(schemaBuf.toString()); setTimeout( ()=> projectManagerApp.SendMessage( new EditorMessage( "info", undefined, { schema: schema, data: instance } ) ), 1000 ); } }