-
Notifications
You must be signed in to change notification settings - Fork 37
Description
Hi,
First of all thank you for this extension, this is a great job!
I have few questions regarding MemoryFileSystem and Stdio.
First here is my current code i'm trying to get worked.
const pty = wasm.createPseudoterminal();
const terminal = vscode.window.createTerminal({ name: 'PIMO output', pty, isTransient: true });
terminal.show(true);
try {
const wasmPath = path.resolve(__dirname, "wasm/pimo-wasi.wasm");
const bits = await vscode.workspace.fs.readFile(vscode.Uri.file(wasmPath));
const module = await WebAssembly.compile(bits);
const fs = await wasm.createMemoryFileSystem();
fs.createFile("masking.yml", new TextEncoder().encode(masking));
const output = wasm.createReadable();
const input = wasm.createWritable();
await input.write(data);
await input.write(Uint8Array.from([0x0A,0x04])); // end of input (EOF)
const mountPoints: MountPointDescriptor[] = [
{ kind: 'workspaceFolder'},
{ kind: 'memoryFileSystem', fileSystem: fs, mountPoint: '/memory' }
];
const rootfs = await wasm.createRootFileSystem(mountPoints);
const stdio: Stdio = {
in: {kind: "pipeIn", pipe: input},
out: {kind: "pipeOut", pipe: output},
err: {kind: "terminal", terminal: pty}
};
// Create a WASM process.
const process = await wasm.createProcess('pimo', module, { stdio: stdio, args: ["-c", "/memory/masking.yml", "-v", "5"], rootFileSystem: rootfs, trace: true });
process.stdout?.onData(data => {
console.log(new TextDecoder().decode(data));
});
// Run the process and wait for its result.
const result = await process.run();
console.log("success " + result);
} catch (error) {
console.error(error);
}My questions are :
1 - the process reads an input of type pipeIn created with a wasm.createWritable() call, but it does not seem to catch the EOF and hang indefinitly waiting for more bytes. How can I indicates to the process that there nothing more and it should end ?
2 - at some point, the process reads a file /memory/masking.yml that is created by a call to fs.createFile("masking.yml", ...), the file exist I can get a stat (it is a regular file) but the process get an error Errno.perm ("Operation is not permitted") when trying to read it (call to path_open). Is it something I'm doing wrong ? or maybe the wasm file is not correct (i use the go compiler 1.21)
Thank you in advance ! Any help appreciated