function imports(env) { const read = env.read const write = env.write const sleep = env.sleep let buf = null let readIdx = 0 return { env: { read: (ptr, len) => { if (buf === null || readIdx === buf.byteLength) { // we already passed full message, read the next one const json = read() const encoder = new TextEncoder() buf = encoder.encode(json) readIdx = 0 } let n = Math.min(len, buf.byteLength - readIdx) const slice = buf.slice(readIdx, readIdx + n) readIdx += n const view = new Uint8Array(this.memory.buffer, ptr, n) view.set(slice) return n }, write: (ptr, len) => { const view = new Uint8Array(this.memory.buffer, ptr, len) const decoder = new TextDecoder(('utf-8')) const json = decoder.decode(view) write(json) }, sleep, } } } export class CapturingContext { constructor() {…