{
  "version": 3,
  "sources": ["../webR/chan/queue.ts", "../webR/compat.ts", "../webR/utils.ts", "../webR/chan/task-common.ts", "../webR/chan/message.ts", "../webR/chan/task-main.ts", "../webR/chan/task-worker.ts", "../webR/chan/channel-shared.ts", "../webR/chan/channel-service.ts", "../webR/chan/channel.ts", "../webR/config.ts", "../webR/robj.ts", "../webR/proxy.ts", "../console/console.ts", "../webR/webr-main.ts"],
  "sourcesContent": ["// From https://stackoverflow.com/questions/47157428/how-to-implement-a-pseudo-blocking-async-queue-in-js-ts\nexport class AsyncQueue<T> {\n  #promises: Promise<T>[];\n  #resolvers: ((t: T) => void)[];\n\n  constructor() {\n    this.#resolvers = [];\n    this.#promises = [];\n  }\n\n  put(t: T) {\n    if (!this.#resolvers.length) {\n      this.#add();\n    }\n    const resolve = this.#resolvers.shift()!;\n    resolve(t);\n  }\n\n  async get() {\n    if (!this.#promises.length) {\n      this.#add();\n    }\n    const promise = this.#promises.shift()!;\n    return promise;\n  }\n\n  isEmpty() {\n    return !this.#promises.length;\n  }\n\n  isBlocked() {\n    return !!this.#resolvers.length;\n  }\n\n  get length() {\n    return this.#promises.length - this.#resolvers.length;\n  }\n\n  #add() {\n    this.#promises.push(\n      new Promise((resolve) => {\n        this.#resolvers.push(resolve);\n      })\n    );\n  }\n}\n", "interface Process {\n  browser: string | undefined;\n  release: { [key: string]: string };\n}\ndeclare let process: Process;\n\nexport const IN_NODE =\n  typeof process !== 'undefined' &&\n  process.release &&\n  process.release.name === 'node' &&\n  typeof process.browser === 'undefined';\n\n// Adapted from https://github.com/pyodide/pyodide/blob/main/src/js/compat.ts\nexport let loadScript: (url: string) => Promise<void>;\nif (globalThis.document) {\n  loadScript = (url) =>\n    new Promise((resolve, reject) => {\n      const script = document.createElement('script');\n      script.src = url;\n      script.onload = () => resolve();\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\n} else if (globalThis.importScripts) {\n  loadScript = async (url) => {\n    try {\n      globalThis.importScripts(url);\n    } catch (e) {\n      if (e instanceof TypeError) {\n        await import(url);\n      } else {\n        throw e;\n      }\n    }\n  };\n} else if (IN_NODE) {\n  loadScript = async (url: string) => {\n    const nodePathMod = (await import('path')).default;\n    await import(nodePathMod.resolve(url));\n  };\n} else {\n  throw new Error('Cannot determine runtime environment');\n}\n", "import { IN_NODE } from './compat';\nimport { RawType } from './robj';\n\nexport type ResolveFn = (_value?: unknown) => void;\nexport type RejectFn = (_reason?: any) => void;\n\nexport function promiseHandles() {\n  const out = {\n    resolve: (_value?: unknown) => {},\n    reject: (_reason?: any) => {},\n    promise: null as unknown as Promise<unknown>,\n  };\n\n  const promise = new Promise((resolve, reject) => {\n    out.resolve = resolve;\n    out.reject = reject;\n  });\n  out.promise = promise;\n\n  return out;\n}\n\nexport function sleep(ms: number) {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function replaceInObject(\n  obj: unknown,\n  test: (obj: any) => boolean,\n  replacer: (obj: any, ...replacerArgs: any[]) => unknown,\n  ...replacerArgs: unknown[]\n): unknown {\n  if (obj === null || typeof obj !== 'object') {\n    return obj;\n  }\n  if (test(obj)) {\n    return replacer(obj, ...replacerArgs);\n  }\n  if (Array.isArray(obj) || ArrayBuffer.isView(obj)) {\n    return (obj as unknown[]).map((v) => replaceInObject(v, test, replacer, ...replacerArgs));\n  }\n  return Object.fromEntries(\n    Object.entries(obj).map(([k, v], i) => [k, replaceInObject(v, test, replacer, ...replacerArgs)])\n  );\n}\n\nexport function unpackScalarVectors(obj: RawType) {\n  return replaceInObject(\n    obj,\n    (obj: any) =>\n      'values' in obj &&\n      (Array.isArray(obj.values) || ArrayBuffer.isView(obj)) &&\n      obj.values.length === 1,\n    (obj: any) => obj.values[0]\n  ) as RawType;\n}\n\n/* Workaround for loading a cross-origin script.\n *\n * When fetching a worker script, the fetch is required by the spec to\n * use \"same-origin\" mode. This is to avoid loading a worker with a\n * cross-origin global scope, which can allow for a cross-origin\n * restriction bypass.\n *\n * When the fetch URL begins with 'http', we assume the request is\n * cross-origin. We download the content of the URL using a XHR first,\n * create a blob URL containing the requested content, then load the\n * blob URL as a script.\n *\n * The origin of a blob URL is the same as that of the environment that\n * created the URL, and so the global scope of the resulting worker is\n * no longer cross-origin. In that case, the cross-origin restriction\n * bypass is not possible, and the script is permitted to be loaded.\n */\nexport function newCrossOriginWorker(url: string, cb: (worker: Worker) => void): void {\n  const req = new XMLHttpRequest();\n  req.open('get', url, true);\n  req.onload = () => {\n    const worker = new Worker(URL.createObjectURL(new Blob([req.responseText])));\n    cb(worker);\n  };\n  req.send();\n}\n\nexport function isCrossOrigin(urlString: string) {\n  if (IN_NODE) return false;\n  const url1 = new URL(location.href);\n  const url2 = new URL(urlString, location.origin);\n  if (url1.host === url2.host && url1.port === url2.port && url1.protocol === url2.protocol) {\n    return false;\n  }\n  return true;\n}\n", "// Original code from Synclink and Comlink. Released under Apache 2.0.\n\nexport const SZ_BUF_DOESNT_FIT = 0;\nexport const SZ_BUF_FITS_IDX = 1;\nexport const SZ_BUF_SIZE_IDX = 0;\n\nexport interface Endpoint extends EventSource {\n  postMessage(message: any, transfer?: Transferable[]): void;\n  start?: () => void;\n}\n\nexport interface EventSource {\n  addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: {}): void;\n\n  removeEventListener(\n    type: string,\n    listener: EventListenerOrEventListenerObject,\n    options?: {}\n  ): void;\n}\n\nexport function toWireValue(value: any): [any, Transferable[]] {\n  return [value, transferCache.get(value) || []];\n}\n\nconst transferCache = new WeakMap<any, Transferable[]>();\nexport function transfer<T>(obj: T, transfers: Transferable[]): T {\n  transferCache.set(obj, transfers);\n  return obj;\n}\n\nexport type UUID = string;\n\nexport const UUID_LENGTH = 63;\n\nexport function generateUUID(): UUID {\n  const result = Array.from({ length: 4 }, randomSegment).join('-');\n  if (result.length !== UUID_LENGTH) {\n    throw new Error('comlink internal error: UUID has the wrong length');\n  }\n  return result;\n}\n\nfunction randomSegment() {\n  let result = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16);\n  const pad = 15 - result.length;\n  if (pad > 0) {\n    result = Array.from({ length: pad }, () => 0).join('') + result;\n  }\n  return result;\n}\n", "import { generateUUID, transfer, UUID } from './task-common';\n\nexport interface Message {\n  type: string;\n  data?: any;\n}\n\nexport interface Request {\n  type: 'request';\n  data: {\n    uuid: UUID;\n    msg: Message;\n  };\n}\n\nexport interface Response {\n  type: 'response';\n  data: {\n    uuid: UUID;\n    resp: unknown;\n  };\n}\n\nexport function newRequest(msg: Message, transferables?: [Transferable]): Request {\n  return newRequestResponseMessage(\n    {\n      type: 'request',\n      data: {\n        uuid: generateUUID(),\n        msg: msg,\n      },\n    },\n    transferables\n  );\n}\n\nexport function newResponse(uuid: UUID, resp: unknown, transferables?: [Transferable]): Response {\n  return newRequestResponseMessage(\n    {\n      type: 'response',\n      data: {\n        uuid,\n        resp,\n      },\n    },\n    transferables\n  );\n}\n\nfunction newRequestResponseMessage<T>(msg: T, transferables?: [Transferable]): T {\n  // Signal to Synclink that the data contains objects we wish to\n  // transfer, as in `postMessage()`\n  if (transferables) {\n    transfer(msg, transferables);\n  }\n  return msg;\n}\n\nexport interface SyncRequest {\n  type: 'sync-request';\n  data: {\n    msg: Message;\n    reqData: SyncRequestData;\n  };\n}\n\nexport interface SyncRequestData {\n  taskId?: number;\n  sizeBuffer: Int32Array;\n  signalBuffer: Int32Array;\n  dataBuffer: Uint8Array;\n}\n\nexport function newSyncRequest(msg: Message, data: SyncRequestData): SyncRequest {\n  return {\n    type: 'sync-request',\n    data: { msg, reqData: data },\n  };\n}\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder('utf-8');\n\n// TODO: Pass a `replacer` function\nexport function encodeData(data: any): Uint8Array {\n  return encoder.encode(JSON.stringify(data));\n}\n\nexport function decodeData(data: Uint8Array): unknown {\n  return JSON.parse(decoder.decode(data)) as unknown;\n}\n", "// Original code from Synclink and Comlink. Released under Apache 2.0.\n\nimport { Endpoint, SZ_BUF_FITS_IDX, SZ_BUF_SIZE_IDX, generateUUID } from './task-common';\n\nimport { sleep } from '../utils';\nimport { SyncRequestData, encodeData } from './message';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\n\nconst encoder = new TextEncoder();\n\n/**\n * Respond to a blocking request. Most of the work has already been done in\n * asynclink, we are just responsible here for getting the return value back to\n * the requester through this slightly convoluted Atomics protocol.\n *\n * @param {Endpoint} endpoint  A message port to receive messages from. Other\n *        thread is blocked, so we can't send messages back.\n * @param {SyncRequestData} data The message that was recieved. We will use it\n *        to read out the buffers to write the answer into. NOTE: requester\n *        owns buffers.\n * @param {any} response The value we want to send back to the requester. We\n *        have to encode it into data_buffer.\n */\nexport async function syncResponse(endpoint: Endpoint, data: SyncRequestData, response: any) {\n  try {\n    let { taskId, sizeBuffer, dataBuffer, signalBuffer } = data;\n    // console.warn(msg);\n\n    const bytes = encodeData(response);\n    const fits = bytes.length <= dataBuffer.length;\n\n    Atomics.store(sizeBuffer, SZ_BUF_SIZE_IDX, bytes.length);\n    Atomics.store(sizeBuffer, SZ_BUF_FITS_IDX, +fits);\n    if (!fits) {\n      // console.log(\"      need larger buffer\", taskId)\n      // Request larger buffer\n      const [uuid, dataPromise] = requestResponseMessage(endpoint);\n\n      // Write UUID into dataBuffer so syncRequest knows where to respond to.\n      dataBuffer.set(encoder.encode(uuid));\n      await signalRequester(signalBuffer, taskId!);\n\n      // Wait for response with new bigger dataBuffer\n      dataBuffer = (await dataPromise).dataBuffer as Uint8Array;\n    }\n\n    // Encode result into dataBuffer\n    dataBuffer.set(bytes);\n    Atomics.store(sizeBuffer, SZ_BUF_FITS_IDX, +true);\n\n    // console.log(\"       signaling completion\", taskId)\n    await signalRequester(signalBuffer, taskId as number);\n  } catch (e) {\n    console.warn(e);\n  }\n}\n\nfunction requestResponseMessage(ep: Endpoint): [string, Promise<any>] {\n  const id = generateUUID();\n  return [\n    id,\n    new Promise((resolve) => {\n      if (IN_NODE) {\n        (ep as unknown as NodeWorker).once('message', (message: any) => {\n          if (!message.id || message.id !== id) {\n            return;\n          }\n          resolve(message);\n        });\n      } else {\n        ep.addEventListener('message', function l(ev: MessageEvent) {\n          if (!ev.data || !ev.data.id || ev.data.id !== id) {\n            return;\n          }\n          ep.removeEventListener('message', l as EventListenerOrEventListenerObject);\n          resolve(ev.data);\n        } as EventListenerOrEventListenerObject);\n      }\n      if (ep.start) {\n        ep.start();\n      }\n    }),\n  ];\n}\n\nasync function signalRequester(signalBuffer: Int32Array, taskId: number) {\n  const index = (taskId >> 1) % 32;\n  let sleepTime = 1;\n  while (Atomics.compareExchange(signalBuffer, index + 1, 0, taskId) !== 0) {\n    // No Atomics.asyncWait except on Chrome =(\n    await sleep(sleepTime);\n    if (sleepTime < 32) {\n      // exponential backoff\n      sleepTime *= 2;\n    }\n  }\n  Atomics.or(signalBuffer, 0, 1 << index);\n  Atomics.notify(signalBuffer, 0);\n}\n", "// Original code from Synclink and Comlink. Released under Apache 2.0.\n\nimport {\n  Endpoint,\n  SZ_BUF_DOESNT_FIT,\n  SZ_BUF_FITS_IDX,\n  SZ_BUF_SIZE_IDX,\n  UUID_LENGTH,\n} from './task-common';\n\nimport { newSyncRequest, Message, decodeData } from './message';\n\nconst decoder = new TextDecoder('utf-8');\n\nexport class SyncTask {\n  endpoint: Endpoint;\n  msg: Message;\n  transfers: Transferable[];\n\n  #scheduled = false;\n  #resolved: boolean;\n  #result?: any;\n  #exception?: any;\n\n  // sync only\n  taskId?: number;\n  #syncGen?: Generator<void, unknown, void>;\n  sizeBuffer?: Int32Array;\n  signalBuffer?: Int32Array;\n  syncifier = new _Syncifier();\n\n  constructor(endpoint: Endpoint, msg: Message, transfers: Transferable[] = []) {\n    this.endpoint = endpoint;\n    this.msg = msg;\n    this.transfers = transfers;\n    this.#resolved = false;\n  }\n\n  scheduleSync() {\n    if (this.#scheduled) {\n      return;\n    }\n    this.#scheduled = true;\n\n    this.syncifier.scheduleTask(this);\n    this.#syncGen = this.doSync();\n    this.#syncGen.next();\n    return this;\n  }\n\n  poll() {\n    if (!this.#scheduled) {\n      throw new Error('Task not synchronously scheduled');\n    }\n\n    const { done, value } = this.#syncGen!.next();\n    if (!done) {\n      return false;\n    }\n\n    this.#resolved = true;\n    this.#result = value;\n\n    return true;\n  }\n\n  *doSync() {\n    // just use syncRequest.\n    const { endpoint, msg, transfers } = this;\n    const sizeBuffer = new Int32Array(new SharedArrayBuffer(8));\n    const signalBuffer = this.signalBuffer!;\n    const taskId = this.taskId;\n\n    // Ensure status is cleared. We will notify\n    let dataBuffer = acquireDataBuffer(UUID_LENGTH);\n    // console.log(\"===requesting\", taskId);\n\n    const syncMsg = newSyncRequest(msg, {\n      sizeBuffer,\n      dataBuffer,\n      signalBuffer,\n      taskId,\n    });\n\n    endpoint.postMessage(syncMsg, transfers);\n    yield;\n\n    if (Atomics.load(sizeBuffer, SZ_BUF_FITS_IDX) === SZ_BUF_DOESNT_FIT) {\n      // There wasn't enough space, make a bigger dataBuffer.\n      // First read uuid for response out of current dataBuffer\n      const id = decoder.decode(dataBuffer.slice(0, UUID_LENGTH));\n      releaseDataBuffer(dataBuffer);\n      const size = Atomics.load(sizeBuffer, SZ_BUF_SIZE_IDX);\n      dataBuffer = acquireDataBuffer(size);\n      // console.log(\"===bigger data buffer\", taskId);\n      endpoint.postMessage({ id, dataBuffer });\n      yield;\n    }\n\n    const size = Atomics.load(sizeBuffer, SZ_BUF_SIZE_IDX);\n    // console.log(\"===completing\", taskId);\n    return decodeData(dataBuffer.slice(0, size));\n  }\n\n  get result() {\n    if (this.#exception) {\n      throw this.#exception;\n    }\n    // console.log(this.#resolved);\n    if (this.#resolved) {\n      return this.#result as unknown;\n    }\n    throw new Error('Not ready.');\n  }\n\n  syncify(): any {\n    this.scheduleSync();\n    this.syncifier.syncifyTask(this);\n    return this.result;\n  }\n}\n\nclass _Syncifier {\n  nextTaskId: Int32Array;\n  signalBuffer: Int32Array;\n  tasks: Map<number, SyncTask>;\n\n  constructor() {\n    this.nextTaskId = new Int32Array([1]);\n    this.signalBuffer = new Int32Array(new SharedArrayBuffer(32 * 4 + 4));\n    this.tasks = new Map();\n  }\n\n  scheduleTask(task: SyncTask) {\n    task.taskId = this.nextTaskId[0];\n    this.nextTaskId[0] += 2;\n    task.signalBuffer = this.signalBuffer;\n    this.tasks.set(task.taskId, task);\n  }\n\n  waitOnSignalBuffer() {\n    const timeout = 50;\n    for (;;) {\n      const status = Atomics.wait(this.signalBuffer, 0, 0, timeout);\n      switch (status) {\n        case 'ok':\n        case 'not-equal':\n          return;\n        case 'timed-out':\n          if (interruptBuffer[0] !== 0) {\n            handleInterrupt();\n          }\n          break;\n        default:\n          throw new Error('Unreachable');\n      }\n    }\n  }\n\n  *tasksIdsToWakeup() {\n    const flag = Atomics.load(this.signalBuffer, 0);\n    for (let i = 0; i < 32; i++) {\n      const bit = 1 << i;\n      if (flag & bit) {\n        Atomics.and(this.signalBuffer, 0, ~bit);\n        const wokenTask = Atomics.exchange(this.signalBuffer, i + 1, 0);\n        yield wokenTask;\n      }\n    }\n  }\n\n  pollTasks(task?: SyncTask) {\n    let result = false;\n    for (const wokenTaskId of this.tasksIdsToWakeup()) {\n      // console.log(\"poll task\", wokenTaskId, \"looking for\",task);\n      const wokenTask = this.tasks.get(wokenTaskId);\n      if (!wokenTask) {\n        throw new Error(`Assertion error: unknown taskId ${wokenTaskId}.`);\n      }\n      if (wokenTask.poll()) {\n        // console.log(\"completed task \", wokenTaskId, wokenTask, wokenTask._result);\n        this.tasks.delete(wokenTaskId);\n        if (wokenTask === task) {\n          result = true;\n        }\n      }\n    }\n    return result;\n  }\n\n  syncifyTask(task: SyncTask) {\n    for (;;) {\n      this.waitOnSignalBuffer();\n      // console.log(\"syncifyTask:: woke\");\n      if (this.pollTasks(task)) {\n        return;\n      }\n    }\n  }\n}\n\nconst dataBuffers: Uint8Array[][] = [];\n\nfunction acquireDataBuffer(size: number): Uint8Array {\n  const powerof2 = Math.ceil(Math.log2(size));\n  if (!dataBuffers[powerof2]) {\n    dataBuffers[powerof2] = [];\n  }\n  const result = dataBuffers[powerof2].pop();\n  if (result) {\n    result.fill(0);\n    return result;\n  }\n  return new Uint8Array(new SharedArrayBuffer(2 ** powerof2));\n}\n\nfunction releaseDataBuffer(buffer: Uint8Array) {\n  const powerof2 = Math.ceil(Math.log2(buffer.byteLength));\n  dataBuffers[powerof2].push(buffer);\n}\n\nlet interruptBuffer = new Int32Array(new ArrayBuffer(4));\n\nlet handleInterrupt = (): void => {\n  interruptBuffer[0] = 0;\n  throw new Error('Interrupted!');\n};\n\n/**\n * Sets the interrupt handler. This is called when the computation is\n * interrupted. Should zero the interrupt buffer and throw an exception.\n * @function handler\n * @param {handler} handler\n */\nexport function setInterruptHandler(handler: () => void) {\n  handleInterrupt = handler;\n}\n\n/**\n * Sets the interrupt buffer. Should be a shared array buffer. When element 0\n * is set non-zero it signals an interrupt.\n * @param {ArrayBufferLike} buffer\n */\nexport function setInterruptBuffer(buffer: ArrayBufferLike) {\n  interruptBuffer = new Int32Array(buffer);\n}\n", "import { AsyncQueue } from './queue';\nimport { promiseHandles, ResolveFn, newCrossOriginWorker, isCrossOrigin } from '../utils';\nimport { Message, newRequest, Response, SyncRequest } from './message';\nimport { Endpoint } from './task-common';\nimport { syncResponse } from './task-main';\nimport { ChannelType, ChannelMain, ChannelWorker } from './channel';\nimport { WebROptions } from '../webr-main';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\nif (IN_NODE) {\n  (globalThis as any).Worker = require('worker_threads').Worker as NodeWorker;\n}\n\n// Main ----------------------------------------------------------------\n\nexport class SharedBufferChannelMain implements ChannelMain {\n  inputQueue = new AsyncQueue<Message>();\n  outputQueue = new AsyncQueue<Message>();\n  #interruptBuffer?: Int32Array;\n\n  initialised: Promise<unknown>;\n  resolve: (_?: unknown) => void;\n  close = () => {};\n\n  #parked = new Map<string, ResolveFn>();\n\n  constructor(config: Required<WebROptions>) {\n    const initWorker = (worker: Worker) => {\n      this.#handleEventsFromWorker(worker);\n      this.close = () => worker.terminate();\n      const msg = {\n        type: 'init',\n        data: { config, channelType: ChannelType.SharedArrayBuffer },\n      } as Message;\n      worker.postMessage(msg);\n    };\n\n    if (isCrossOrigin(config.WEBR_URL)) {\n      newCrossOriginWorker(`${config.WEBR_URL}webr-worker.js`, (worker: Worker) =>\n        initWorker(worker)\n      );\n    } else {\n      const worker = new Worker(`${config.WEBR_URL}webr-worker.js`);\n      initWorker(worker);\n    }\n\n    ({ resolve: this.resolve, promise: this.initialised } = promiseHandles());\n  }\n\n  async read() {\n    return await this.outputQueue.get();\n  }\n\n  async flush() {\n    const msg: Message[] = [];\n    while (!this.outputQueue.isEmpty()) {\n      msg.push(await this.read());\n    }\n    return msg;\n  }\n\n  interrupt() {\n    if (!this.#interruptBuffer) {\n      throw new Error('Failed attempt to interrupt before initialising interruptBuffer');\n    }\n    this.#interruptBuffer[0] = 1;\n  }\n\n  write(msg: Message) {\n    this.inputQueue.put(msg);\n  }\n\n  async request(msg: Message, transferables?: [Transferable]): Promise<any> {\n    const req = newRequest(msg, transferables);\n\n    const { resolve: resolve, promise: prom } = promiseHandles();\n    this.#parked.set(req.data.uuid, resolve);\n\n    this.write(req);\n    return prom;\n  }\n\n  #resolveResponse(msg: Response) {\n    const uuid = msg.data.uuid;\n    const resolve = this.#parked.get(uuid);\n\n    if (resolve) {\n      this.#parked.delete(uuid);\n      resolve(msg.data.resp);\n    } else {\n      console.warn(\"Can't find request.\");\n    }\n  }\n\n  #handleEventsFromWorker(worker: Worker) {\n    if (IN_NODE) {\n      (worker as unknown as NodeWorker).on('message', (message: Message) => {\n        this.#onMessageFromWorker(worker, message);\n      });\n    } else {\n      worker.onmessage = (ev: MessageEvent) =>\n        this.#onMessageFromWorker(worker, ev.data as Message);\n    }\n  }\n\n  #onMessageFromWorker = async (worker: Worker, message: Message) => {\n    if (!message || !message.type) {\n      return;\n    }\n\n    switch (message.type) {\n      case 'resolve':\n        this.#interruptBuffer = new Int32Array(message.data as SharedArrayBuffer);\n        this.resolve();\n        return;\n\n      case 'response':\n        this.#resolveResponse(message as Response);\n        return;\n\n      default:\n        this.outputQueue.put(message);\n        return;\n\n      case 'sync-request': {\n        const msg = message as SyncRequest;\n        const payload = msg.data.msg;\n        const reqData = msg.data.reqData;\n\n        switch (payload.type) {\n          case 'read': {\n            const response = await this.inputQueue.get();\n            await syncResponse(worker, reqData, response);\n            break;\n          }\n          default:\n            throw new TypeError(`Unsupported request type '${payload.type}'.`);\n        }\n        return;\n      }\n      case 'request':\n        throw new TypeError(\n          \"Can't send messages of type 'request' from a worker. Please Use 'sync-request' instead.\"\n        );\n    }\n  };\n}\n\n// Worker --------------------------------------------------------------\n\nimport { SyncTask, setInterruptHandler, setInterruptBuffer } from './task-worker';\nimport { Module as _Module } from '../module';\n\ndeclare let Module: _Module;\n\nexport class SharedBufferChannelWorker implements ChannelWorker {\n  #ep: Endpoint;\n  #dispatch: (msg: Message) => void = () => 0;\n  #interruptBuffer = new Int32Array(new SharedArrayBuffer(4));\n  #interrupt = () => {};\n\n  constructor() {\n    this.#ep = (IN_NODE ? require('worker_threads').parentPort : globalThis) as Endpoint;\n    setInterruptBuffer(this.#interruptBuffer.buffer);\n    setInterruptHandler(() => this.handleInterrupt());\n  }\n\n  resolve() {\n    this.write({ type: 'resolve', data: this.#interruptBuffer.buffer });\n  }\n\n  write(msg: Message, transfer?: [Transferable]) {\n    this.#ep.postMessage(msg, transfer);\n  }\n\n  read(): Message {\n    const msg = { type: 'read' } as Message;\n    const task = new SyncTask(this.#ep, msg);\n    return task.syncify() as Message;\n  }\n\n  inputOrDispatch(): number {\n    for (;;) {\n      const msg = this.read();\n      if (msg.type === 'stdin') {\n        return Module.allocateUTF8(msg.data as string);\n      }\n      this.#dispatch(msg);\n    }\n  }\n\n  run(args: string[]) {\n    Module.callMain(args);\n  }\n\n  setInterrupt(interrupt: () => void) {\n    this.#interrupt = interrupt;\n  }\n\n  handleInterrupt() {\n    if (this.#interruptBuffer[0] !== 0) {\n      this.#interruptBuffer[0] = 0;\n      this.#interrupt();\n    }\n  }\n\n  setDispatchHandler(dispatch: (msg: Message) => void) {\n    this.#dispatch = dispatch;\n  }\n}\n", "import { AsyncQueue } from './queue';\nimport { promiseHandles, ResolveFn, newCrossOriginWorker, isCrossOrigin } from '../utils';\nimport {\n  Message,\n  newRequest,\n  Response,\n  Request,\n  newResponse,\n  encodeData,\n  decodeData,\n} from './message';\nimport { Endpoint } from './task-common';\nimport { ChannelType, ChannelMain, ChannelWorker } from './channel';\nimport { WebROptions } from '../webr-main';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\nif (IN_NODE) {\n  (globalThis as any).Worker = require('worker_threads').Worker as NodeWorker;\n}\n\n// Main ----------------------------------------------------------------\n\nexport class ServiceWorkerChannelMain implements ChannelMain {\n  inputQueue = new AsyncQueue<Message>();\n  outputQueue = new AsyncQueue<Message>();\n\n  initialised: Promise<unknown>;\n  resolve: (_?: unknown) => void;\n  close = () => {};\n\n  #parked = new Map<string, ResolveFn>();\n  #syncMessageCache = new Map<string, Message>();\n  #registration?: ServiceWorkerRegistration;\n  #interrupted = false;\n\n  constructor(config: Required<WebROptions>) {\n    const initWorker = (worker: Worker) => {\n      this.#handleEventsFromWorker(worker);\n      this.close = () => worker.terminate();\n      this.#registerServiceWorker(`${config.SW_URL}webr-serviceworker.js`).then((clientId) => {\n        const msg = {\n          type: 'init',\n          data: {\n            config,\n            channelType: ChannelType.ServiceWorker,\n            clientId,\n            location: window.location.href,\n          },\n        } as Message;\n        worker.postMessage(msg);\n      });\n    };\n\n    if (isCrossOrigin(config.SW_URL)) {\n      newCrossOriginWorker(`${config.SW_URL}webr-worker.js`, (worker: Worker) =>\n        initWorker(worker)\n      );\n    } else {\n      const worker = new Worker(`${config.SW_URL}webr-worker.js`);\n      initWorker(worker);\n    }\n\n    ({ resolve: this.resolve, promise: this.initialised } = promiseHandles());\n  }\n\n  activeRegistration(): ServiceWorker {\n    if (!this.#registration?.active) {\n      throw new Error('Attempted to obtain a non-existent active registration.');\n    }\n    return this.#registration.active;\n  }\n\n  async read() {\n    return await this.outputQueue.get();\n  }\n\n  async flush() {\n    const msg: Message[] = [];\n    while (!this.outputQueue.isEmpty()) {\n      msg.push(await this.read());\n    }\n    return msg;\n  }\n\n  interrupt() {\n    this.#interrupted = true;\n  }\n\n  write(msg: Message) {\n    this.inputQueue.put(msg);\n  }\n\n  async request(msg: Message, transferables?: [Transferable]): Promise<any> {\n    const req = newRequest(msg, transferables);\n\n    const { resolve: resolve, promise: prom } = promiseHandles();\n    this.#parked.set(req.data.uuid, resolve);\n\n    this.write(req);\n    return prom;\n  }\n\n  async #registerServiceWorker(url: string): Promise<string> {\n    // Register service worker\n    this.#registration = await navigator.serviceWorker.register(url);\n    await navigator.serviceWorker.ready;\n    window.addEventListener('beforeunload', () => {\n      this.#registration?.unregister();\n    });\n\n    // Ensure we can communicate with service worker and we have a client ID\n    const clientId = await new Promise<string>((resolve) => {\n      navigator.serviceWorker.addEventListener(\n        'message',\n        function listener(event: MessageEvent<{ type: string; clientId: string }>) {\n          if (event.data.type === 'registration-successful') {\n            navigator.serviceWorker.removeEventListener('message', listener);\n            resolve(event.data.clientId);\n          }\n        }\n      );\n      this.activeRegistration().postMessage({ type: 'register-client-main' });\n    });\n\n    // Setup listener for service worker messages\n    navigator.serviceWorker.addEventListener('message', (event: MessageEvent<Request>) => {\n      this.#onMessageFromServiceWorker(event);\n    });\n    return clientId;\n  }\n\n  async #onMessageFromServiceWorker(event: MessageEvent<Message>) {\n    if (event.data.type === 'request') {\n      const uuid = event.data.data as string;\n      const message = this.#syncMessageCache.get(uuid);\n      if (!message) {\n        throw new Error('Request not found during service worker XHR request');\n      }\n      this.#syncMessageCache.delete(uuid);\n      switch (message.type) {\n        case 'read': {\n          const response = await this.inputQueue.get();\n          this.activeRegistration().postMessage({\n            type: 'wasm-webr-fetch-response',\n            uuid: uuid,\n            response: newResponse(uuid, response),\n          });\n          break;\n        }\n        case 'interrupt': {\n          const response = this.#interrupted;\n          this.activeRegistration().postMessage({\n            type: 'wasm-webr-fetch-response',\n            uuid: uuid,\n            response: newResponse(uuid, response),\n          });\n          this.#interrupted = false;\n          break;\n        }\n        default:\n          throw new TypeError(`Unsupported request type '${message.type}'.`);\n      }\n      return;\n    }\n  }\n\n  #resolveResponse(msg: Response) {\n    const uuid = msg.data.uuid;\n    const resolve = this.#parked.get(uuid);\n\n    if (resolve) {\n      this.#parked.delete(uuid);\n      resolve(msg.data.resp);\n    } else {\n      console.warn(\"Can't find request.\");\n    }\n  }\n\n  #handleEventsFromWorker(worker: Worker) {\n    if (IN_NODE) {\n      (worker as unknown as NodeWorker).on('message', (message: Message) => {\n        this.#onMessageFromWorker(worker, message);\n      });\n    } else {\n      worker.onmessage = (ev: MessageEvent) =>\n        this.#onMessageFromWorker(worker, ev.data as Message);\n    }\n  }\n\n  #onMessageFromWorker = async (worker: Worker, message: Message) => {\n    if (!message || !message.type) {\n      return;\n    }\n\n    switch (message.type) {\n      case 'resolve':\n        this.resolve();\n        return;\n\n      case 'response':\n        this.#resolveResponse(message as Response);\n        return;\n\n      default:\n        this.outputQueue.put(message);\n        return;\n\n      case 'sync-request': {\n        const request = message.data as Request;\n        this.#syncMessageCache.set(request.data.uuid, request.data.msg);\n        return;\n      }\n\n      case 'request':\n        throw new TypeError(\n          \"Can't send messages of type 'request' from a worker.\" +\n            'Use service worker fetch request instead.'\n        );\n    }\n  };\n}\n\n// Worker --------------------------------------------------------------\n\nimport { Module as _Module } from '../module';\n\ndeclare let Module: _Module;\n\nexport class ServiceWorkerChannelWorker implements ChannelWorker {\n  #ep: Endpoint;\n  #mainThreadId: string;\n  #location: string;\n  #dispatch: (msg: Message) => void = () => 0;\n  #interrupt = () => {};\n  onMessageFromMainThread: (msg: Message) => void = () => {};\n\n  constructor(data: { clientId?: string; location?: string }) {\n    if (!data.clientId || !data.location) {\n      throw Error('Unable to start service worker channel');\n    }\n    this.#mainThreadId = data.clientId;\n    this.#location = data.location;\n    this.#ep = (IN_NODE ? require('worker_threads').parentPort : globalThis) as Endpoint;\n  }\n\n  resolve() {\n    this.write({ type: 'resolve' });\n  }\n\n  write(msg: Message, transfer?: [Transferable]) {\n    this.#ep.postMessage(msg, transfer);\n  }\n\n  syncRequest(message: Message): Response {\n    /*\n     * Browsers timeout service workers after about 5 minutes on inactivity.\n     * See e.g. service_worker_version.cc in Chromium.\n     *\n     * To avoid the service worker being shut down, we timeout our XHR after\n     * 1 minute and then resend the request as a keep-alive. The service worker\n     * uses the message UUID to identify the request and continue waiting for a\n     * response from where it left off.\n     */\n    const request = newRequest(message);\n    this.write({ type: 'sync-request', data: request });\n\n    let retryCount = 0;\n    for (;;) {\n      try {\n        const url = new URL('__wasm__/webr-fetch-request/', this.#location);\n        const xhr = new XMLHttpRequest();\n        xhr.timeout = 60000;\n        xhr.responseType = 'arraybuffer';\n        xhr.open('POST', url, false);\n        const fetchReqBody = {\n          clientId: this.#mainThreadId,\n          uuid: request.data.uuid,\n        };\n        xhr.send(encodeData(fetchReqBody));\n        return decodeData(new Uint8Array(xhr.response as ArrayBuffer)) as Response;\n      } catch (e: any) {\n        if (e instanceof DOMException && retryCount++ < 1000) {\n          console.log('Service worker request failed - resending request');\n        } else {\n          throw e;\n        }\n      }\n    }\n  }\n\n  read(): Message {\n    const response = this.syncRequest({ type: 'read' });\n    return response.data.resp as Message;\n  }\n\n  inputOrDispatch(): number {\n    for (;;) {\n      const msg = this.read();\n      if (msg.type === 'stdin') {\n        return Module.allocateUTF8(msg.data as string);\n      }\n      this.#dispatch(msg);\n    }\n  }\n\n  run(args: string[]) {\n    Module.callMain(args);\n  }\n\n  setInterrupt(interrupt: () => void) {\n    this.#interrupt = interrupt;\n  }\n\n  handleInterrupt() {\n    /* During R computation we have no way to directly interrupt the worker\n     * thread. Instead, we hook into R's PolledEvents. Since we are not using\n     * SharedArrayBuffer as a signal method, we instead send a message to the\n     * main thread to ask if we should interrupt R.\n     */\n    const response = this.syncRequest({ type: 'interrupt' });\n    const interrupted = response.data.resp as boolean;\n    if (interrupted) {\n      this.#interrupt();\n    }\n  }\n\n  setDispatchHandler(dispatch: (msg: Message) => void) {\n    this.#dispatch = dispatch;\n  }\n}\n", "import { Message } from './message';\nimport { SharedBufferChannelMain, SharedBufferChannelWorker } from './channel-shared';\nimport { ServiceWorkerChannelMain, ServiceWorkerChannelWorker } from './channel-service';\nimport { WebROptions } from '../webr-main';\nimport { isCrossOrigin } from '../utils';\nimport { IN_NODE } from '../compat';\n\n// The channel structure is asymetric:\n//\n// - The main thread maintains the input and output queues. All\n//   messages sent from main are stored in the input queue. The input\n//   queue is pull-based, it's the worker that initiates a transfer\n//   via a sync-request.\n//\n//   The output queue is filled at the initiative of the worker. The\n//   main thread asynchronously reads from this queue, typically in an\n//   async infloop.\n//\n// - The worker synchronously reads from the input queue. Reading a\n//   message blocks until an input is available. Writing a message to\n//   the output queue is equivalent to calling `postMessage()` and\n//   returns immediately.\n//\n//   Note that the messages sent from main to worker need to be\n//   serialised. There is no structured cloning involved, and\n//   ArrayBuffers can't be transferred, only copied.\n\nexport interface ChannelMain {\n  initialised: Promise<unknown>;\n  close(): void;\n  read(): Promise<Message>;\n  flush(): Promise<Message[]>;\n  write(msg: Message): void;\n  request(msg: Message, transferables?: [Transferable]): Promise<any>;\n  interrupt(): void;\n}\n\nexport interface ChannelWorker {\n  resolve(): void;\n  write(msg: Message, transfer?: [Transferable]): void;\n  read(): Message;\n  handleInterrupt(): void;\n  setInterrupt(interrupt: () => void): void;\n  run(args: string[]): void;\n  inputOrDispatch: () => number;\n  setDispatchHandler: (dispatch: (msg: Message) => void) => void;\n}\n\nexport const ChannelType = {\n  Automatic: 0,\n  SharedArrayBuffer: 1,\n  ServiceWorker: 2,\n} as const;\n\nexport type ChannelInitMessage = {\n  type: string;\n  data: {\n    config: Required<WebROptions>;\n    channelType: Exclude<\n      typeof ChannelType[keyof typeof ChannelType],\n      typeof ChannelType.Automatic\n    >;\n    clientId?: string;\n    location?: string;\n  };\n};\n\nexport function newChannelMain(data: Required<WebROptions>) {\n  switch (data.channelType) {\n    case ChannelType.SharedArrayBuffer:\n      return new SharedBufferChannelMain(data);\n    case ChannelType.ServiceWorker:\n      return new ServiceWorkerChannelMain(data);\n    case ChannelType.Automatic:\n    default:\n      if (IN_NODE || crossOriginIsolated) {\n        return new SharedBufferChannelMain(data);\n      }\n      /*\n       * TODO: If we are not cross-origin isolated but we can still use service\n       * workers, we could setup a service worker to inject the relevant headers\n       * to enable cross-origin isolation.\n       */\n      if ('serviceWorker' in navigator && !isCrossOrigin(data.SW_URL)) {\n        return new ServiceWorkerChannelMain(data);\n      }\n      throw new Error('Unable to initialise main thread communication channel');\n  }\n}\n\nexport function newChannelWorker(msg: ChannelInitMessage) {\n  switch (msg.data.channelType) {\n    case ChannelType.SharedArrayBuffer:\n      return new SharedBufferChannelWorker();\n    case ChannelType.ServiceWorker:\n      return new ServiceWorkerChannelWorker(msg.data);\n    default:\n      throw new Error('Unknown worker channel type recieved');\n  }\n}\n", "export const BASE_URL = 'https://cdn.webr.workers.dev/latest/';\nexport const PKG_BASE_URL = 'https://repo.webr.workers.dev/';\n", "import type { Module } from './module';\nimport type { RProxy } from './proxy';\n\ndeclare let Module: Module;\n\nexport interface ToTreeOptions {\n  depth: number;\n}\n\n// RProxy<RObjImpl> type aliases\nexport type RObject = RProxy<RObjImpl>;\nexport type RNull = RProxy<RObjNull>;\nexport type RSymbol = RProxy<RObjSymbol>;\nexport type RPairlist = RProxy<RObjPairlist>;\nexport type REnvironment = RProxy<RObjEnvironment>;\nexport type RString = RProxy<RObjString>;\nexport type RLogical = RProxy<RObjLogical>;\nexport type RInteger = RProxy<RObjInteger>;\nexport type RDouble = RProxy<RObjDouble>;\nexport type RComplex = RProxy<RObjComplex>;\nexport type RCharacter = RProxy<RObjCharacter>;\nexport type RList = RProxy<RObjList>;\nexport type RRaw = RProxy<RObjRaw>;\n// RFunction proxies are callable\nexport type RFunction = RProxy<RObjFunction> & ((...args: unknown[]) => Promise<unknown>);\n\nexport type RPtr = number;\n\nexport const RTypeMap = {\n  null: 0,\n  symbol: 1,\n  pairlist: 2,\n  closure: 3,\n  environment: 4,\n  promise: 5,\n  call: 6,\n  special: 7,\n  builtin: 8,\n  string: 9,\n  logical: 10,\n  integer: 13,\n  double: 14,\n  complex: 15,\n  character: 16,\n  dots: 17,\n  any: 18,\n  list: 19,\n  expression: 20,\n  bytecode: 21,\n  pointer: 22,\n  weakref: 23,\n  raw: 24,\n  s4: 25,\n  new: 30,\n  free: 31,\n  function: 99,\n} as const;\nexport type RType = keyof typeof RTypeMap;\nexport type RTypeNumber = typeof RTypeMap[keyof typeof RTypeMap];\n\nexport type RTargetRaw = {\n  obj: RawType;\n  targetType: 'raw';\n};\n\nexport type RTargetPtr = {\n  obj: {\n    type?: RType;\n    ptr: RPtr;\n    methods?: string[];\n  };\n  targetType: 'ptr';\n};\n\nexport type RTargetError = {\n  obj: {\n    message: string;\n    name: string;\n    stack?: string;\n  };\n  targetType: 'err';\n};\nexport type RTargetType = 'raw' | 'ptr' | 'err';\nexport type RTargetObj = RTargetRaw | RTargetPtr | RTargetError;\n\ntype Nullable<T> = T | RObjNull;\n\ntype Complex = {\n  re: number;\n  im: number;\n};\n\nexport type RawType =\n  | number\n  | string\n  | boolean\n  | undefined\n  | null\n  | Complex\n  | Error\n  | ArrayBuffer\n  | ArrayBufferView\n  | Array<RawType>\n  | Map<RawType, RawType>\n  | Set<RawType>\n  | { [key: string]: RawType };\n\nexport type NamedEntries<T> = [string | null, T][];\nexport type NamedObject<T> = { [key: string]: T };\n\nexport type RObjData = RObjImpl | RawType | RObjectTree<RObjImpl>;\nexport type RObjAtomicData<T> = T | (T | null)[] | RObjectTreeAtomic<T>;\nexport type RObjectTree<T> = RObjectTreeImpl<(RObjectTree<T> | RawType | T)[]>;\nexport type RObjectTreeAtomic<T> = RObjectTreeImpl<(T | null)[]>;\ntype RObjectTreeImpl<T> = {\n  type: RType;\n  names: (string | null)[] | null;\n  values: T;\n  missing?: boolean[];\n};\n\nfunction newRObjFromTarget(target: RTargetObj): RObjImpl {\n  const obj = target.obj;\n\n  // Conversion of RObjectTree type JS objects\n  if (isRObjectTree(obj)) {\n    return new (getRObjClass(RTypeMap[obj.type]))(obj);\n  }\n\n  // Conversion of explicit R NULL value\n  if (obj && typeof obj === 'object' && 'type' in obj && obj.type === 'null') {\n    return new RObjNull();\n  }\n\n  // Direct conversion of scalar JS values\n  if (obj === null) {\n    return new RObjLogical({ type: 'logical', names: null, values: [null] });\n  }\n  if (typeof obj === 'boolean') {\n    return new RObjLogical(obj);\n  }\n  if (typeof obj === 'number') {\n    return new RObjDouble(obj);\n  }\n  if (typeof obj === 'object' && 're' in obj && 'im' in obj) {\n    return new RObjComplex(obj as Complex);\n  }\n  if (typeof obj === 'string') {\n    return new RObjCharacter(obj);\n  }\n\n  // JS arrays are interpreted using R's c() function, so as to match\n  // R's built in coercion rules\n  if (Array.isArray(obj)) {\n    const objs = obj.map((el) => newRObjFromTarget({ targetType: 'raw', obj: el }));\n    const cString = Module.allocateUTF8('c');\n    const call = RObjImpl.protect(\n      RObjImpl.wrap(Module._Rf_allocVector(RTypeMap.call, objs.length + 1)) as RObjPairlist\n    );\n    call.setcar(RObjImpl.wrap(Module._Rf_install(cString)));\n    let next = call.cdr();\n    let i = 0;\n    while (!next.isNull()) {\n      next.setcar(objs[i++]);\n      next = next.cdr();\n    }\n    const res = RObjImpl.wrap(Module._Rf_eval(call.ptr, RObjImpl.baseEnv.ptr));\n    RObjImpl.unprotect(1);\n    Module._free(cString);\n    return res;\n  }\n\n  throw new Error('Robj construction for this JS object is not yet supported');\n}\n\nexport class RObjImpl {\n  ptr: RPtr;\n\n  constructor(target: RTargetObj | RawType) {\n    this.ptr = 0;\n    if (isRTargetObj(target)) {\n      if (target.targetType === 'ptr') {\n        this.ptr = target.obj.ptr;\n        return this;\n      }\n      if (target.targetType === 'raw') {\n        return newRObjFromTarget(target);\n      }\n    }\n    return newRObjFromTarget({ targetType: 'raw', obj: target });\n  }\n\n  get [Symbol.toStringTag](): string {\n    return `RObj:${this.type()}`;\n  }\n\n  type(): RType {\n    const typeNumber = Module._TYPEOF(this.ptr) as RTypeNumber;\n    const type = Object.keys(RTypeMap).find(\n      (typeName) => RTypeMap[typeName as RType] === typeNumber\n    );\n    return type as RType;\n  }\n\n  protect(): void {\n    this.ptr = Module._Rf_protect(this.ptr);\n  }\n\n  unprotect(): void {\n    Module._Rf_unprotect_ptr(this.ptr);\n  }\n\n  preserve(): void {\n    Module._R_PreserveObject(this.ptr);\n  }\n\n  release(): void {\n    Module._R_ReleaseObject(this.ptr);\n  }\n\n  isNull(): this is RObjNull {\n    return Module._TYPEOF(this.ptr) === RTypeMap.null;\n  }\n\n  isUnbound(): boolean {\n    return this.ptr === RObjImpl.unboundValue.ptr;\n  }\n\n  attrs(): Nullable<RObjPairlist> {\n    return RObjImpl.wrap(Module._ATTRIB(this.ptr)) as RObjPairlist;\n  }\n\n  setNames(values: (string | null)[] | null): this {\n    let namesObj: RObjImpl;\n    if (values === null) {\n      namesObj = RObjImpl.null;\n      RObjImpl.protect(namesObj);\n    } else if (Array.isArray(values) && values.every((v) => typeof v === 'string' || v === null)) {\n      namesObj = new RObjCharacter(values);\n    } else {\n      throw new Error('Argument to setNames must be null or an Array of strings or null');\n    }\n    Module._Rf_setAttrib(this.ptr, RObjImpl.namesSymbol.ptr, namesObj.ptr);\n    RObjImpl.unprotect(1);\n    return this;\n  }\n\n  names(): (string | null)[] | null {\n    const names = RObjImpl.wrap(\n      Module._Rf_protect(Module._Rf_getAttrib(this.ptr, RObjImpl.namesSymbol.ptr))\n    ) as RObjCharacter;\n    if (names.isNull()) {\n      return null;\n    }\n    return names.toArray();\n  }\n\n  includes(name: string) {\n    const names = this.names();\n    return names && names.includes(name);\n  }\n\n  toTree(options: ToTreeOptions = { depth: 0 }, depth = 1): RawType | RObjectTree<RObjImpl> {\n    throw new Error('This R object cannot be converted to JS');\n  }\n\n  toJs() {\n    return this.toTree() as ReturnType<this['toTree']>;\n  }\n\n  subset(prop: number | string): RObjImpl {\n    let idx: RPtr;\n    let char: RPtr = 0;\n    if (typeof prop === 'number') {\n      idx = Module._Rf_protect(Module._Rf_ScalarInteger(prop));\n    } else {\n      char = Module.allocateUTF8(prop);\n      idx = Module._Rf_protect(Module._Rf_mkString(char));\n    }\n    const call = Module._Rf_protect(Module._Rf_lang3(RObjImpl.bracketSymbol.ptr, this.ptr, idx));\n    const sub = RObjImpl.wrap(Module._Rf_eval(call, RObjImpl.baseEnv.ptr));\n    Module._Rf_unprotect(2);\n    if (char) Module._free(char);\n    return sub;\n  }\n\n  get(prop: number | string): RObjImpl {\n    let idx: RPtr;\n    let char: RPtr = 0;\n    if (typeof prop === 'number') {\n      idx = Module._Rf_protect(Module._Rf_ScalarInteger(prop));\n    } else {\n      char = Module.allocateUTF8(prop);\n      idx = Module._Rf_protect(Module._Rf_mkString(char));\n    }\n    const call = Module._Rf_protect(Module._Rf_lang3(RObjImpl.bracket2Symbol.ptr, this.ptr, idx));\n    const sub = RObjImpl.wrap(Module._Rf_eval(call, RObjImpl.baseEnv.ptr));\n    Module._Rf_unprotect(2);\n    if (char) Module._free(char);\n    return sub;\n  }\n\n  getDollar(prop: string): RObjImpl {\n    const char = Module.allocateUTF8(prop);\n    const idx = Module._Rf_protect(Module._Rf_mkString(char));\n    const call = Module._Rf_protect(Module._Rf_lang3(RObjImpl.dollarSymbol.ptr, this.ptr, idx));\n    const sub = RObjImpl.wrap(Module._Rf_eval(call, RObjImpl.baseEnv.ptr));\n    Module._Rf_unprotect(2);\n    Module._free(char);\n    return sub;\n  }\n\n  pluck(...path: (string | number)[]): RObjImpl | undefined {\n    try {\n      const result = path.reduce(\n        (obj: RObjImpl, prop: string | number): RObjImpl => obj.get(prop),\n        this\n      );\n      return result.isNull() ? undefined : result;\n    } catch (err) {\n      // Deal with subscript out of bounds error\n      if (err === Infinity) {\n        return undefined;\n      }\n      throw err;\n    }\n  }\n\n  set(prop: string | number, value: RObjImpl | RawType) {\n    let idx: RPtr;\n    let char: RPtr = 0;\n    if (typeof prop === 'number') {\n      idx = Module._Rf_protect(Module._Rf_ScalarInteger(prop));\n    } else {\n      char = Module.allocateUTF8(prop);\n      idx = Module._Rf_protect(Module._Rf_mkString(char));\n    }\n\n    const valueObj = isRObjImpl(value) ? value : new RObjImpl({ obj: value, targetType: 'raw' });\n\n    const assign = Module.allocateUTF8('[[<-');\n    const call = Module._Rf_protect(\n      Module._Rf_lang4(Module._Rf_install(assign), this.ptr, idx, valueObj.ptr)\n    );\n    const val = RObjImpl.wrap(Module._Rf_eval(call, RObjImpl.baseEnv.ptr));\n\n    Module._Rf_unprotect(2);\n    if (char) Module._free(char);\n    Module._free(assign);\n\n    if (!isRObjImpl(value)) {\n      valueObj.release();\n    }\n\n    return val;\n  }\n\n  static getMethods(obj: RObjImpl) {\n    const props = new Set<string>();\n    let cur: unknown = obj;\n    do {\n      Object.getOwnPropertyNames(cur).map((p) => props.add(p));\n    } while ((cur = Object.getPrototypeOf(cur)));\n    return [...props.keys()].filter((i) => typeof obj[i as keyof typeof obj] === 'function');\n  }\n\n  static get globalEnv(): RObjImpl {\n    return RObjImpl.wrap(Module.getValue(Module._R_GlobalEnv, '*'));\n  }\n\n  static get emptyEnv(): RObjImpl {\n    return RObjImpl.wrap(Module.getValue(Module._R_EmptyEnv, '*'));\n  }\n\n  static get baseEnv(): RObjImpl {\n    return RObjImpl.wrap(Module.getValue(Module._R_BaseEnv, '*'));\n  }\n\n  static get null(): RObjNull {\n    return RObjImpl.wrap(Module.getValue(Module._R_NilValue, '*')) as RObjNull;\n  }\n\n  static get naLogical(): number {\n    return Module.getValue(Module._R_NaInt, 'i32');\n  }\n\n  static get naInteger(): number {\n    return Module.getValue(Module._R_NaInt, 'i32');\n  }\n\n  static get naDouble(): number {\n    return Module.getValue(Module._R_NaReal, 'double');\n  }\n\n  static get naString(): RObjImpl {\n    return RObjImpl.wrap(Module.getValue(Module._R_NaString, '*'));\n  }\n\n  static get unboundValue(): RObjImpl {\n    return RObjImpl.wrap(Module.getValue(Module._R_UnboundValue, '*'));\n  }\n\n  static get bracketSymbol(): RObjSymbol {\n    return RObjImpl.wrap(Module.getValue(Module._R_BracketSymbol, '*')) as RObjSymbol;\n  }\n\n  static get bracket2Symbol(): RObjSymbol {\n    return RObjImpl.wrap(Module.getValue(Module._R_Bracket2Symbol, '*')) as RObjSymbol;\n  }\n\n  static get dollarSymbol(): RObjSymbol {\n    return RObjImpl.wrap(Module.getValue(Module._R_DollarSymbol, '*')) as RObjSymbol;\n  }\n\n  static get namesSymbol(): RObjSymbol {\n    return RObjImpl.wrap(Module.getValue(Module._R_NamesSymbol, '*')) as RObjSymbol;\n  }\n\n  static wrap(ptr: RPtr): RObjImpl {\n    const type = Module._TYPEOF(ptr);\n    return new (getRObjClass(type as RTypeNumber))({ targetType: 'ptr', obj: { ptr } });\n  }\n\n  static protect<T extends RObjImpl>(obj: T): T {\n    return RObjImpl.wrap(Module._Rf_protect(obj.ptr)) as T;\n  }\n\n  static unprotect(n: number): void {\n    Module._Rf_unprotect(n);\n  }\n\n  static unprotectPtr(obj: RObjImpl): void {\n    Module._Rf_unprotect_ptr(obj.ptr);\n  }\n\n  static preserveObject(obj: RObjImpl): void {\n    Module._R_PreserveObject(obj.ptr);\n  }\n\n  static releaseObject(obj: RObjImpl): void {\n    Module._R_ReleaseObject(obj.ptr);\n  }\n}\n\nexport class RObjNull extends RObjImpl {\n  constructor() {\n    super({ targetType: 'ptr', obj: { ptr: Module.getValue(Module._R_NilValue, '*') } });\n    return this;\n  }\n\n  toTree(): { type: 'null' } {\n    return { type: 'null' };\n  }\n}\n\nexport class RObjSymbol extends RObjImpl {\n  toTree(): RawType {\n    return this.isUnbound() ? null : this.toObject();\n  }\n\n  toObject(): {\n    printname: string | null;\n    symvalue: RPtr | null;\n    internal: RPtr | null;\n  } {\n    return {\n      printname: this.printname().isUnbound() ? null : this.printname().toString(),\n      symvalue: this.symvalue().isUnbound() ? null : this.symvalue().ptr,\n      internal: this.internal().isNull() ? null : this.internal().ptr,\n    };\n  }\n\n  printname(): RObjString {\n    return RObjImpl.wrap(Module._PRINTNAME(this.ptr)) as RObjString;\n  }\n  symvalue(): RObjImpl {\n    return RObjImpl.wrap(Module._SYMVALUE(this.ptr));\n  }\n  internal(): RObjImpl {\n    return RObjImpl.wrap(Module._INTERNAL(this.ptr));\n  }\n}\n\nexport class RObjPairlist extends RObjImpl {\n  constructor(val: RawType | (RawType | null)[] | RTargetPtr | RObjectTree<RTargetObj>) {\n    if (isRTargetObj(val)) {\n      super(val);\n      return this;\n    }\n    const values = isRObjectTree(val) ? val.values : Array.isArray(val) ? val : [val];\n    const list = RObjImpl.wrap(Module._Rf_allocList(values.length)) as RObjPairlist;\n    list.preserve();\n    for (\n      let [i, next] = [0, list as Nullable<RObjPairlist>];\n      !next.isNull();\n      [i, next] = [i + 1, next.cdr()]\n    ) {\n      next.setcar(new RObjImpl(values[i]));\n    }\n    list.setNames(isRObjectTree(val) ? val.names : null);\n    super({ targetType: 'ptr', obj: { ptr: list.ptr } });\n  }\n\n  get length(): number {\n    return this.toArray().length;\n  }\n\n  toArray(options: ToTreeOptions = { depth: 1 }): RObjData[] {\n    return this.toTree(options).values;\n  }\n\n  toObject({\n    allowDuplicateKey = true,\n    allowEmptyKey = false,\n    depth = 1,\n  } = {}): NamedObject<RObjData> {\n    const entries = this.entries({ depth });\n    const keys = entries.map(([k, v]) => k);\n    if (!allowDuplicateKey && new Set(keys).size !== keys.length) {\n      throw new Error('Duplicate key when converting pairlist without allowDuplicateKey enabled');\n    }\n    if (!allowEmptyKey && keys.some((k) => !k)) {\n      throw new Error('Empty or null key when converting pairlist without allowEmptyKey enabled');\n    }\n    return Object.fromEntries(\n      entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx)\n    );\n  }\n\n  entries(options: ToTreeOptions = { depth: 1 }): NamedEntries<RObjData> {\n    const obj = this.toTree(options);\n    return obj.values.map((v, i) => [obj.names ? obj.names[i] : null, v]);\n  }\n\n  toTree(options: ToTreeOptions = { depth: 0 }, depth = 1): RObjectTree<RObjImpl> {\n    const namesArray: string[] = [];\n    let hasNames = false;\n    const values: (RawType | RObjImpl | RObjectTree<RObjImpl>)[] = [];\n\n    for (let next = this as Nullable<RObjPairlist>; !next.isNull(); next = next.cdr()) {\n      const symbol = next.tag();\n      if (symbol.isNull()) {\n        namesArray.push('');\n      } else {\n        hasNames = true;\n        namesArray.push(symbol.printname().toString());\n      }\n      if (options.depth && depth >= options.depth) {\n        values.push(next.car());\n      } else {\n        values.push(next.car().toTree(options, depth + 1));\n      }\n    }\n    const names = hasNames ? namesArray : null;\n    return { type: this.type(), names, values };\n  }\n\n  includes(name: string): boolean {\n    return name in this.toObject();\n  }\n\n  setcar(obj: RObjImpl): void {\n    Module._SETCAR(this.ptr, obj.ptr);\n  }\n\n  car(): RObjImpl {\n    return RObjImpl.wrap(Module._CAR(this.ptr));\n  }\n\n  cdr(): Nullable<RObjPairlist> {\n    return RObjImpl.wrap(Module._CDR(this.ptr)) as Nullable<RObjPairlist>;\n  }\n\n  tag(): Nullable<RObjSymbol> {\n    return RObjImpl.wrap(Module._TAG(this.ptr)) as Nullable<RObjSymbol>;\n  }\n}\n\nexport class RObjList extends RObjImpl {\n  constructor(val: RawType | (RawType | null)[] | RTargetPtr | RObjectTree<RTargetObj>) {\n    if (isRTargetObj(val)) {\n      super(val);\n      return this;\n    }\n    const values = isRObjectTree(val) ? val.values : Array.isArray(val) ? val : [val];\n    const ptr = Module._Rf_protect(Module._Rf_allocVector(RTypeMap.list, values.length));\n    values.forEach((v, i) => {\n      Module._SET_VECTOR_ELT(ptr, i, new RObjImpl(v).ptr);\n    });\n    RObjImpl.wrap(ptr).setNames(isRObjectTree(val) ? val.names : null);\n    Module._Rf_unprotect(1);\n    Module._R_PreserveObject(ptr);\n    super({ targetType: 'ptr', obj: { ptr } });\n  }\n\n  get length(): number {\n    return Module._LENGTH(this.ptr);\n  }\n\n  toArray(options: { depth: number } = { depth: 1 }): RObjData[] {\n    return this.toTree(options).values;\n  }\n\n  toObject({\n    allowDuplicateKey = true,\n    allowEmptyKey = false,\n    depth = 1,\n  } = {}): NamedObject<RObjData> {\n    const entries = this.entries({ depth });\n    const keys = entries.map(([k, v]) => k);\n    if (!allowDuplicateKey && new Set(keys).size !== keys.length) {\n      throw new Error('Duplicate key when converting list without allowDuplicateKey enabled');\n    }\n    if (!allowEmptyKey && keys.some((k) => !k)) {\n      throw new Error('Empty or null key when converting list without allowEmptyKey enabled');\n    }\n    return Object.fromEntries(\n      entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx)\n    );\n  }\n\n  entries(options: { depth: number } = { depth: 1 }): NamedEntries<RObjData> {\n    const obj = this.toTree(options);\n    return obj.values.map((v, i) => [obj.names ? obj.names[i] : null, v]);\n  }\n\n  toTree(options: { depth: number } = { depth: 0 }, depth = 1): RObjectTree<RObjImpl> {\n    return {\n      type: this.type(),\n      names: this.names(),\n      values: [...Array(this.length).keys()].map((i) => {\n        if (options.depth && depth >= options.depth) {\n          return this.get(i + 1);\n        } else {\n          return this.get(i + 1).toTree(options, depth + 1);\n        }\n      }),\n    };\n  }\n}\n\nexport class RObjFunction extends RObjImpl {\n  exec(...args: (RawType | RObjImpl)[]): RObjImpl {\n    const argObjs = args.map((arg) =>\n      isRObjImpl(arg) ? arg : new RObjImpl({ obj: arg, targetType: 'raw' })\n    );\n    const call = RObjImpl.protect(\n      RObjImpl.wrap(Module._Rf_allocVector(RTypeMap.call, args.length + 1)) as RObjPairlist\n    );\n    call.setcar(this);\n    let c = call.cdr();\n    let i = 0;\n    while (!c.isNull()) {\n      c.setcar(argObjs[i++]);\n      c = c.cdr();\n    }\n    const res = RObjImpl.wrap(Module._Rf_eval(call.ptr, RObjImpl.baseEnv.ptr));\n    RObjImpl.unprotect(1);\n\n    argObjs.forEach((argObj, idx) => {\n      if (!isRObjImpl(args[idx])) {\n        argObj.release();\n      }\n    });\n\n    return res;\n  }\n}\n\nexport class RObjString extends RObjImpl {\n  toString(): string {\n    return Module.UTF8ToString(Module._R_CHAR(this.ptr));\n  }\n\n  toTree(): string {\n    return this.toString();\n  }\n}\n\nexport class RObjEnvironment extends RObjImpl {\n  constructor(val: RTargetPtr | RObjectTree<RTargetObj>) {\n    if (isRTargetObj(val)) {\n      super(val);\n      return this;\n    }\n    const ptr = Module._Rf_protect(Module._R_NewEnv(RObjImpl.globalEnv.ptr, 0, 0));\n    val.values.forEach((v, i) => {\n      const name = val.names ? val.names[i] : null;\n      if (!name) {\n        throw new Error('Unable to create object in new environment with empty symbol name');\n      }\n      const namePtr = Module.allocateUTF8(name);\n      Module._Rf_defineVar(Module._Rf_install(namePtr), new RObjImpl(v).ptr, ptr);\n      Module._free(namePtr);\n    });\n    Module._Rf_unprotect(1);\n    Module._R_PreserveObject(ptr);\n    super({ targetType: 'ptr', obj: { ptr } });\n  }\n\n  ls(all = false, sorted = true): string[] {\n    const ls = RObjImpl.wrap(\n      Module._R_lsInternal3(this.ptr, Number(all), Number(sorted))\n    ) as RObjCharacter;\n    return ls.toArray() as string[];\n  }\n\n  bind(name: string, value: RObjImpl | RawType): void {\n    const namePtr = Module.allocateUTF8(name);\n    Module._Rf_defineVar(\n      Module._Rf_install(namePtr),\n      isRObjImpl(value) ? value.ptr : new RObjImpl({ targetType: 'raw', obj: value }).ptr,\n      this.ptr\n    );\n    Module._free(namePtr);\n  }\n\n  names(): string[] {\n    return this.ls(true, true);\n  }\n\n  frame(): RObjImpl {\n    return RObjImpl.wrap(Module._FRAME(this.ptr));\n  }\n\n  subset(prop: number | string): RObjImpl {\n    if (typeof prop === 'number') {\n      throw new Error('Object of type environment is not subsettable');\n    }\n    return this.getDollar(prop);\n  }\n\n  toObject({ depth = 0 } = {}): NamedObject<RawType | RObjImpl | RObjectTree<RObjImpl>> {\n    const symbols = this.names();\n    return Object.fromEntries(\n      [...Array(symbols.length).keys()].map((i) => {\n        return [symbols[i], this.getDollar(symbols[i]).toTree({ depth })];\n      })\n    );\n  }\n\n  toTree(options: { depth: number } = { depth: 0 }, depth = 1): RObjectTree<RObjImpl> {\n    const names = this.names();\n    const values = [...Array(names.length).keys()].map((i) => {\n      if (options.depth && depth >= options.depth) {\n        return this.getDollar(names[i]);\n      } else {\n        return this.getDollar(names[i]).toTree(options, depth + 1);\n      }\n    });\n\n    return {\n      type: this.type(),\n      names,\n      values,\n    };\n  }\n}\n\ntype TypedArray =\n  | Int8Array\n  | Uint8Array\n  | Int16Array\n  | Uint16Array\n  | Int32Array\n  | Uint32Array\n  | Float32Array\n  | Float64Array;\n\ntype atomicType = number | boolean | Complex | string;\n\nabstract class RObjAtomicVector<T extends atomicType> extends RObjImpl {\n  get length(): number {\n    return Module._LENGTH(this.ptr);\n  }\n\n  get(prop: number | string): this {\n    return super.get(prop) as this;\n  }\n\n  subset(prop: number | string): this {\n    return super.subset(prop) as this;\n  }\n\n  getDollar(prop: string): RObjImpl {\n    throw new Error('$ operator is invalid for atomic vectors');\n  }\n\n  detectMissing(): boolean[] {\n    const isna = Module.allocateUTF8('is.na');\n    const call = Module._Rf_protect(Module._Rf_lang2(Module._Rf_install(isna), this.ptr));\n    const val = RObjImpl.wrap(\n      Module._Rf_protect(Module._Rf_eval(call, RObjImpl.baseEnv.ptr))\n    ) as RObjLogical;\n    const ret = val.toTypedArray();\n    RObjImpl.unprotect(2);\n    Module._free(isna);\n    return Array.from(ret).map((elt) => Boolean(elt));\n  }\n\n  abstract toTypedArray(): TypedArray;\n\n  toArray(): (T | null)[] {\n    const arr = this.toTypedArray();\n    return this.detectMissing().map((m, idx) => (m ? null : (arr[idx] as T)));\n  }\n\n  toObject({ allowDuplicateKey = true, allowEmptyKey = false } = {}): NamedObject<T | null> {\n    const entries = this.entries();\n    const keys = entries.map(([k, v]) => k);\n    if (!allowDuplicateKey && new Set(keys).size !== keys.length) {\n      throw new Error(\n        'Duplicate key when converting atomic vector without allowDuplicateKey enabled'\n      );\n    }\n    if (!allowEmptyKey && keys.some((k) => !k)) {\n      throw new Error(\n        'Empty or null key when converting atomic vector without allowEmptyKey enabled'\n      );\n    }\n    return Object.fromEntries(\n      entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx)\n    );\n  }\n\n  entries(): NamedEntries<T | null> {\n    const values = this.toArray();\n    const names = this.names();\n    return values.map((v, i) => [names ? names[i] : null, v]);\n  }\n\n  toTree(): RObjectTreeAtomic<T> {\n    return {\n      type: this.type(),\n      names: this.names(),\n      values: this.toArray(),\n    };\n  }\n}\n\nexport class RObjLogical extends RObjAtomicVector<boolean> {\n  constructor(val: RTargetObj | RObjAtomicData<boolean>) {\n    if (isRTargetObj(val)) {\n      super(val);\n      return this;\n    }\n    const values = isRObjectTree(val) ? val.values : Array.isArray(val) ? val : [val];\n    const ptr = Module._Rf_protect(Module._Rf_allocVector(RTypeMap.logical, values.length));\n    const data = Module._LOGICAL(ptr);\n    values.forEach((v, i) =>\n      Module.setValue(data + 4 * i, v === null ? RObjImpl.naLogical : Boolean(v), 'i32')\n    );\n    RObjImpl.wrap(ptr).setNames(isRObjectTree(val) ? val.names : null);\n    Module._Rf_unprotect(1);\n    Module._R_PreserveObject(ptr);\n    super({ targetType: 'ptr', obj: { ptr } });\n  }\n\n  getLogical(idx: number): boolean | null {\n    return this.get(idx).toArray()[0];\n  }\n\n  toLogical(): boolean | null {\n    if (this.length !== 1) {\n      throw new Error('Unable to convert atomic vector of length > 1 to a scalar JS value');\n    }\n    return this.getLogical(1);\n  }\n\n  toTypedArray(): Int32Array {\n    return new Int32Array(\n      Module.HEAP32.subarray(\n        Module._LOGICAL(this.ptr) / 4,\n        Module._LOGICAL(this.ptr) / 4 + this.length\n      )\n    );\n  }\n\n  toArray(): (boolean | null)[] {\n    const arr = this.toTypedArray();\n    return this.detectMissing().map((m, idx) => (m ? null : Boolean(arr[idx])));\n  }\n}\n\nexport class RObjInteger extends RObjAtomicVector<number> {\n  constructor(val: RTargetObj | RObjAtomicData<number>) {\n    if (isRTargetObj(val)) {\n      super(val);\n      return this;\n    }\n    const values = isRObjectTree(val) ? val.values : Array.isArray(val) ? val : [val];\n    const ptr = Module._Rf_protect(Module._Rf_allocVector(RTypeMap.integer, values.length));\n    const data = Module._INTEGER(ptr);\n    values.forEach((v, i) =>\n      Module.setValue(data + 4 * i, v === null ? RObjImpl.naInteger : Math.round(Number(v)), 'i32')\n    );\n    RObjImpl.wrap(ptr).setNames(isRObjectTree(val) ? val.names : null);\n    Module._Rf_unprotect(1);\n    Module._R_PreserveObject(ptr);\n    super({ targetType: 'ptr', obj: { ptr } });\n  }\n\n  getNumber(idx: number): number | null {\n    return this.get(idx).toArray()[0];\n  }\n\n  toNumber(): number | null {\n    if (this.length !== 1) {\n      throw new Error('Unable to convert atomic vector of length > 1 to a scalar JS value');\n    }\n    return this.getNumber(1);\n  }\n\n  toTypedArray(): Int32Array {\n    return new Int32Array(\n      Module.HEAP32.subarray(\n        Module._INTEGER(this.ptr) / 4,\n        Module._INTEGER(this.ptr) / 4 + this.length\n      )\n    );\n  }\n}\n\nexport class RObjDouble extends RObjAtomicVector<number> {\n  constructor(val: RTargetObj | RObjAtomicData<number>) {\n    if (isRTargetObj(val)) {\n      super(val);\n      return this;\n    }\n    const values = isRObjectTree(val) ? val.values : Array.isArray(val) ? val : [val];\n    const ptr = Module._Rf_protect(Module._Rf_allocVector(RTypeMap.double, values.length));\n    const data = Module._REAL(ptr);\n    values.forEach((v, i) =>\n      Module.setValue(data + 8 * i, v === null ? RObjImpl.naDouble : v, 'double')\n    );\n    RObjImpl.wrap(ptr).setNames(isRObjectTree(val) ? val.names : null);\n    Module._Rf_unprotect(1);\n    Module._R_PreserveObject(ptr);\n    super({ targetType: 'ptr', obj: { ptr } });\n  }\n\n  getNumber(idx: number): number | null {\n    return this.get(idx).toTypedArray()[0];\n  }\n\n  toNumber(): number | null {\n    if (this.length !== 1) {\n      throw new Error('Unable to convert atomic vector of length > 1 to a scalar JS value');\n    }\n    return this.getNumber(1);\n  }\n\n  toTypedArray(): Float64Array {\n    return new Float64Array(\n      Module.HEAPF64.subarray(Module._REAL(this.ptr) / 8, Module._REAL(this.ptr) / 8 + this.length)\n    );\n  }\n}\n\nexport class RObjComplex extends RObjAtomicVector<Complex> {\n  constructor(val: RTargetObj | RObjAtomicData<Complex>) {\n    if (isRTargetObj(val)) {\n      super(val);\n      return this;\n    }\n    const values = isRObjectTree(val) ? val.values : Array.isArray(val) ? val : [val];\n    const ptr = Module._Rf_protect(Module._Rf_allocVector(RTypeMap.complex, values.length));\n    const data = Module._COMPLEX(ptr);\n    values.forEach((v, i) =>\n      Module.setValue(data + 8 * (2 * i), v === null ? RObjImpl.naDouble : v.re, 'double')\n    );\n    values.forEach((v, i) =>\n      Module.setValue(data + 8 * (2 * i + 1), v === null ? RObjImpl.naDouble : v.im, 'double')\n    );\n    RObjImpl.wrap(ptr).setNames(isRObjectTree(val) ? val.names : null);\n    Module._Rf_unprotect(1);\n    Module._R_PreserveObject(ptr);\n    super({ targetType: 'ptr', obj: { ptr } });\n  }\n\n  getComplex(idx: number): Complex | null {\n    return this.get(idx).toArray()[0];\n  }\n\n  toComplex(): Complex | null {\n    if (this.length !== 1) {\n      throw new Error('Unable to convert atomic vector of length > 1 to a scalar JS value');\n    }\n    return this.getComplex(1);\n  }\n\n  toTypedArray(): Float64Array {\n    return new Float64Array(\n      Module.HEAPF64.subarray(\n        Module._COMPLEX(this.ptr) / 8,\n        Module._COMPLEX(this.ptr) / 8 + 2 * this.length\n      )\n    );\n  }\n\n  toArray(): (Complex | null)[] {\n    const arr = this.toTypedArray();\n    return this.detectMissing().map((m, idx) =>\n      m ? null : { re: arr[2 * idx], im: arr[2 * idx + 1] }\n    );\n  }\n}\n\nexport class RObjCharacter extends RObjAtomicVector<string> {\n  constructor(val: RTargetObj | RObjAtomicData<string>) {\n    if (isRTargetObj(val)) {\n      super(val);\n      return this;\n    }\n    const values = isRObjectTree(val) ? val.values : Array.isArray(val) ? val : [val];\n    const ptr = Module._Rf_protect(Module._Rf_allocVector(RTypeMap.character, values.length));\n    values.forEach((v, i) => {\n      if (v === null) {\n        Module._SET_STRING_ELT(ptr, i, RObjImpl.naString.ptr);\n      } else {\n        const str = Module.allocateUTF8(String(v));\n        Module._SET_STRING_ELT(ptr, i, Module._Rf_mkChar(str));\n        Module._free(str);\n      }\n    });\n    RObjImpl.wrap(ptr).setNames(isRObjectTree(val) ? val.names : null);\n    Module._Rf_unprotect(1);\n    Module._R_PreserveObject(ptr);\n    super({ targetType: 'ptr', obj: { ptr } });\n  }\n\n  getString(idx: number): string | null {\n    return this.get(idx).toArray()[0];\n  }\n\n  toString(): string | null {\n    if (this.length !== 1) {\n      throw new Error('Unable to convert atomic vector of length > 1 to a scalar JS value');\n    }\n    return this.getString(1);\n  }\n\n  toTypedArray(): Uint32Array {\n    return new Uint32Array(\n      Module.HEAPU32.subarray(\n        Module._STRING_PTR(this.ptr) / 4,\n        Module._STRING_PTR(this.ptr) / 4 + this.length\n      )\n    );\n  }\n\n  toArray(): (string | null)[] {\n    return this.detectMissing().map((m, idx) =>\n      m ? null : Module.UTF8ToString(Module._R_CHAR(Module._STRING_ELT(this.ptr, idx)))\n    );\n  }\n}\n\nexport class RObjRaw extends RObjAtomicVector<number> {\n  constructor(val: RTargetObj | RObjAtomicData<number>) {\n    if (isRTargetObj(val)) {\n      super(val);\n      return this;\n    }\n    const values = isRObjectTree(val) ? val.values : Array.isArray(val) ? val : [val];\n    if (values.some((v) => v === null || v > 255 || v < 0)) {\n      throw new Error('Cannot create new RRaw object');\n    }\n    const ptr = Module._Rf_protect(Module._Rf_allocVector(RTypeMap.raw, values.length));\n    const data = Module._RAW(ptr);\n    values.forEach((v, i) => Module.setValue(data + i, Number(v), 'i8'));\n    RObjImpl.wrap(ptr).setNames(isRObjectTree(val) ? val.names : null);\n    Module._Rf_unprotect(1);\n    Module._R_PreserveObject(ptr);\n    super({ targetType: 'ptr', obj: { ptr } });\n  }\n\n  getNumber(idx: number): number | null {\n    return this.get(idx).toArray()[0];\n  }\n\n  toNumber(): number | null {\n    if (this.length !== 1) {\n      throw new Error('Unable to convert atomic vector of length > 1 to a scalar JS value');\n    }\n    return this.getNumber(1);\n  }\n\n  toTypedArray(): Uint8Array {\n    return new Uint8Array(\n      Module.HEAPU8.subarray(Module._RAW(this.ptr), Module._RAW(this.ptr) + this.length)\n    );\n  }\n}\n\n/**\n * Test for an RObjImpl instance\n *\n * RObjImpl is the internal interface to R objects, intended to be used\n * on the worker thread.\n *\n * @private\n * @param {any} value The object to test.\n * @return {boolean} True if the object is an instance of an RObjImpl.\n */\nexport function isRObjImpl(value: any): value is RObjImpl {\n  return value && typeof value === 'object' && 'type' in value && 'toJs' in value;\n}\n\n/**\n * Test for an RObject instance\n *\n * RObject is the user facing interface to R objects.\n *\n * @param {any} value The object to test.\n * @return {boolean} True if the object is an instance of an RObject.\n */\nexport function isRObject(value: any): value is RObject {\n  return (\n    value &&\n    (typeof value === 'object' || typeof value === 'function') &&\n    'targetType' in value &&\n    isRTargetPtr(value._target)\n  );\n}\n\n/**\n * Test for an RTargetObj object\n *\n * @param {any} value The object to test.\n * @return {boolean} True if the object is an instance of an RTargetObj.\n */\nexport function isRTargetObj(value: any): value is RTargetObj {\n  return value && typeof value === 'object' && 'targetType' in value && 'obj' in value;\n}\n\n/**\n * Test for an RTargetPtr instance\n *\n * @param {any} value The object to test.\n * @return {boolean} True if the object is an instance of an RTargetPtr.\n */\nexport function isRTargetPtr(value: any): value is RTargetPtr {\n  return isRTargetObj(value) && value.targetType === 'ptr';\n}\n\n/**\n * Test for an RFunction instance\n *\n * @param {any} value The object to test.\n * @return {boolean} True if the object is an instance of an RFunction.\n */\nexport function isRFunction(value: any): value is RFunction {\n  return Boolean(isRObject(value) && value._target.obj.methods?.includes('exec'));\n}\n\n/**\n * Test for an RObjectTree instance\n *\n * @param {any} value The object to test.\n * @return {boolean} True if the object is an instance of an RObjectTree.\n */\nexport function isRObjectTree(value: any): value is RObjectTree<any> {\n  return (\n    value &&\n    typeof value === 'object' &&\n    (Array.isArray(value.names) || value.names === null) &&\n    Object.keys(RTypeMap).includes(value.type as string)\n  );\n}\n\nexport function getRObjClass(type: RTypeNumber): typeof RObjImpl {\n  const typeClasses: { [key: number]: typeof RObjImpl } = {\n    [RTypeMap.null]: RObjNull,\n    [RTypeMap.symbol]: RObjSymbol,\n    [RTypeMap.pairlist]: RObjPairlist,\n    [RTypeMap.closure]: RObjFunction,\n    [RTypeMap.environment]: RObjEnvironment,\n    [RTypeMap.call]: RObjPairlist,\n    [RTypeMap.special]: RObjFunction,\n    [RTypeMap.builtin]: RObjFunction,\n    [RTypeMap.string]: RObjString,\n    [RTypeMap.logical]: RObjLogical,\n    [RTypeMap.integer]: RObjInteger,\n    [RTypeMap.double]: RObjDouble,\n    [RTypeMap.complex]: RObjComplex,\n    [RTypeMap.character]: RObjCharacter,\n    [RTypeMap.list]: RObjList,\n    [RTypeMap.raw]: RObjRaw,\n    [RTypeMap.function]: RObjFunction,\n  };\n  if (type in typeClasses) {\n    return typeClasses[type];\n  }\n  return RObjImpl;\n}\n", "import { RTargetPtr, isRObject, RTargetObj, RObjectTree, RObject } from './robj';\nimport { RObjImpl, RObjFunction, RawType, isRFunction, isRTargetPtr } from './robj';\nimport { ChannelMain } from './chan/channel';\nimport { replaceInObject } from './utils';\n\n/** Obtain a union of the keys corresponding to methods of a given class T\n */\ntype Methods<T> = {\n  [P in keyof T]: T[P] extends (...args: any) => any ? P : never;\n}[keyof T];\n\n/** Distributive conditional type for RProxy\n *\n * Distributes RProxy over any RObjImpls in the given union type U.\n */\ntype DistProxy<U> = U extends RObjImpl\n  ? RProxy<U>\n  : U extends RObjectTree<RObjImpl>\n  ? RObjectTree<RObject>\n  : U;\n\n/** Convert an RObjImpl property type to a corresponding RProxy property type\n *\n * RObjImpl types are converted into RProxy type, then wrapped in a Promise.\n *\n * Function signatures are mapped so that arguments with RObjImpl type instead\n * take RProxy<RObjImpl> type. Other function arguments remain as they are.\n * The function return type is also converted to a corresponding type\n * using RProxify recursively.\n *\n * Any other types are wrapped in a Promise.\n */\ntype RProxify<T> = T extends Array<any>\n  ? Promise<DistProxy<T[0]>[]>\n  : T extends (...args: infer U) => any\n  ? (\n      ...args: {\n        [V in keyof U]: DistProxy<U[V]>;\n      }\n    ) => RProxify<ReturnType<T>>\n  : Promise<DistProxy<T>>;\n\n/** Create an RProxy type based on an RObjImpl type parameter\n *\n * RProxy is intended to be used in place of RObjImpl on the main thread.\n * An RProxy has the same instance methods as the given RObjImpl parameter,\n * with the following differences:\n *   - Method arguments take RProxy rather than RObjImpl\n *   - Where an RObjImpl would be returned, an RProxy is returned instead\n *   - All return types are wrapped in a Promise\n *\n * If required, the proxy target can be accessed directly through the _target\n * property.\n */\nexport type RProxy<T extends RObjImpl> = { [P in Methods<T>]: RProxify<T[P]> } & {\n  _target: RTargetPtr;\n  [Symbol.asyncIterator](): AsyncGenerator<RProxy<RObjImpl>, void, unknown>;\n};\n\n/* The empty function is used as base when we are proxying RFunction objects.\n * This enables function call semantics on the proxy using the apply hook.\n */\nfunction empty() {}\n\n/* Proxy the asyncIterator property for R objects with a length. This allows us\n * to use the `for await (i of obj){}` JavaScript syntax.\n */\nfunction targetAsyncIterator(chan: ChannelMain, proxy: RProxy<RObjImpl>) {\n  return async function* () {\n    // Get the R object's length\n    const reply = (await chan.request({\n      type: 'getRObjProperty',\n      data: {\n        target: proxy._target,\n        prop: 'length',\n      },\n    })) as RTargetObj;\n\n    // Throw an error if there was some problem accessing the object length\n    if (reply.targetType === 'err') {\n      const e = new Error(`Cannot iterate over object, ${reply.obj.message}`);\n      e.name = reply.obj.name;\n      e.stack = reply.obj.stack;\n      throw e;\n    } else if (typeof reply.obj !== 'number') {\n      throw new Error('Cannot iterate over object, unexpected type for length property.');\n    }\n\n    // Loop through the object and yield values\n    for (let i = 1; i <= reply.obj; i++) {\n      yield proxy.get(i);\n    }\n  };\n}\n\n/* Proxy an R object method by providing an async function that requests that\n * the worker thread calls the method and then returns the result.\n */\nfunction targetMethod(chan: ChannelMain, target: RTargetPtr, prop: string) {\n  return async (..._args: unknown[]) => {\n    const args = Array.from({ length: _args.length }, (_, idx) => {\n      const arg = _args[idx];\n      return isRObject(arg) ? arg._target : { obj: arg, targetType: 'raw' };\n    });\n\n    const reply = (await chan.request({\n      type: 'callRObjMethod',\n      data: { target, prop, args },\n    })) as RTargetObj;\n\n    switch (reply.targetType) {\n      case 'ptr':\n        return newRProxy(chan, reply);\n      case 'err': {\n        const e = new Error(reply.obj.message);\n        e.name = reply.obj.name;\n        e.stack = reply.obj.stack;\n        throw e;\n      }\n      default: {\n        const proxyReply = replaceInObject(\n          reply,\n          isRTargetPtr,\n          (obj: RTargetPtr, chan: ChannelMain) => newRProxy(chan, obj),\n          chan\n        ) as RTargetObj;\n        return proxyReply.obj;\n      }\n    }\n  };\n}\n\nexport function newRProxy(chan: ChannelMain, target: RTargetPtr): RProxy<RObjImpl> {\n  const proxy = new Proxy(\n    // Assume we are proxying an RFunction if the methods list contains 'exec'.\n    target.obj.methods?.includes('exec') ? Object.assign(empty, { ...target }) : target,\n    {\n      get: (_: RTargetObj, prop: string | number | symbol) => {\n        if (prop === '_target') {\n          return target;\n        } else if (prop === Symbol.asyncIterator) {\n          return targetAsyncIterator(chan, proxy);\n        } else if (target.obj.methods?.includes(prop.toString())) {\n          return targetMethod(chan, target, prop.toString());\n        }\n      },\n      apply: async (_: RTargetObj, _thisArg, args: (RawType | RProxy<RObjImpl>)[]) => {\n        const res = await (newRProxy(chan, target) as RProxy<RObjFunction>).exec(...args);\n        return isRFunction(res) ? res : res.toJs();\n      },\n    }\n  ) as unknown as RProxy<RObjImpl>;\n  return proxy;\n}\n", "import { IN_NODE } from '../webR/compat';\nimport { WebR, WebROptions } from '../webR/webr-main';\n\nexport interface ConsoleCallbacks {\n  stdout?: (line: string) => void;\n  stderr?: (line: string) => void;\n  prompt?: (line: string) => void;\n  canvasExec?: (line: string) => void;\n}\n\n/**\n * Text-based Interactive Console for WebR\n *\n * A helper application to assist in creating an interactive R REPL based on\n * JavaScript callbacks.\n *\n * Callback functions ``stdout`` and ``stderr`` are called with a single line\n * of output as the first argument. The default implementation of `stdout` and\n * `stderr` writes to the console using `console.log` and `console.error`.\n *\n * R code can be sent as input by calling the ``stdin`` method with a single\n * line of textual input.\n *\n * A long running R computation can be interrupted by calling the `interrupt`\n * method.\n *\n * The ``prompt`` callback function is called when webR produces a prompt at\n * the REPL console and is therefore awaiting user input. The prompt character\n * (usually ``>`` or ``+``) is given as the first argument to the callback\n * function. The default implementation of `prompt` shows a JavaScript prompt\n * asking the user for input, and then sends the user input to `stdin`.\n *\n * The ``canvasExec`` callback function is called when webR writes plots to\n * the built-in HTML canvas graphics device.\n *\n * Once constructed, start the Console using the ``run`` method. The `run`\n * method starts an asynchronous infinite loop that waits for output from the\n * webR worker and then calls the relevant callbacks.\n */\nexport class Console {\n  /** The supporting instance of webR */\n  webR: WebR;\n  /** A HTML canvas element\n   *\n   * The canvas graphics device writes to this element by default. Undefined\n   * when HTML canvas is unsupported.\n   */\n  canvas: HTMLCanvasElement | undefined;\n  /** Called when webR outputs to ``stdout`` */\n  #stdout: (line: string) => void;\n  /** Called when webR outputs to ``stderr`` */\n  #stderr: (line: string) => void;\n  /** Called when webR prompts for input */\n  #prompt: (line: string) => void;\n  /** Called when webR writes to the HTML canvas element */\n  #canvasExec: (line: string) => void;\n\n  /**\n   * @param {ConsoleCallbacks} callbacks A list of webR Console callbacks to\n   * be used for this console.\n   * @param {WebROptions} options The options to use for the new instance of\n   * webR started to support this console.\n   */\n  constructor(\n    callbacks: ConsoleCallbacks = {},\n    options: WebROptions = {\n      REnv: {\n        R_HOME: '/usr/lib/R',\n        R_ENABLE_JIT: '0',\n        R_DEFAULT_DEVICE: 'canvas',\n      },\n    }\n  ) {\n    this.webR = new WebR(options);\n    if (!IN_NODE) {\n      this.canvas = document.createElement('canvas');\n      this.canvas.setAttribute('width', '1008');\n      this.canvas.setAttribute('height', '1008');\n    }\n    this.#stdout = callbacks.stdout || this.#defaultStdout;\n    this.#stderr = callbacks.stderr || this.#defaultStderr;\n    this.#prompt = callbacks.prompt || this.#defaultPrompt;\n    this.#canvasExec = callbacks.canvasExec || this.#defaultCanvasExec;\n  }\n\n  /**\n   * Write a line of input to webR's REPL through ``stdin``\n   * @param {string} input A line of input text.\n   */\n  stdin(input: string) {\n    this.webR.writeConsole(input + '\\n');\n  }\n\n  /**\n   * Interrupt a long running R computation and return to the prompt\n   */\n  interrupt() {\n    this.webR.interrupt();\n  }\n\n  /**\n   * The default function called when webR outputs to ``stdout``\n   * @param {string} text The line sent to stdout by webR.\n   */\n  #defaultStdout = (text: string) => {\n    console.log(text);\n  };\n\n  /**\n   * The default function called when webR outputs to ``stderr``\n   * @param {string} text The line sent to stderr by webR.\n   */\n  #defaultStderr = (text: string) => {\n    console.error(text);\n  };\n\n  /**\n   * The default function called when webR writes out a prompt\n   * @param {string} text The text content of the prompt.\n   */\n  #defaultPrompt = (text: string) => {\n    const input = prompt(text);\n    if (input) this.stdin(`${input}\\n`);\n  };\n\n  /**\n   * The default function called when webR writes to HTML canvas\n   * @param {string} exec The canvas API command as a text string.\n   */\n  #defaultCanvasExec = (exec: string) => {\n    if (IN_NODE) {\n      throw new Error('Plotting with HTML canvas is not yet supported under Node');\n    }\n    Function(`this.getContext('2d').${exec}`).bind(this.canvas)();\n  };\n\n  /**\n   * Start the webR console\n   */\n  run() {\n    this.#run();\n  }\n\n  /*\n   * Start the asynchronous infinite loop\n   *\n   * This loop waits for output from webR and dispatches callbacks based on the\n   * message recieved.\n   *\n   * The promise returned by this asynchronous function never resolves.\n   */\n  async #run() {\n    for (;;) {\n      const output = await this.webR.read();\n      switch (output.type) {\n        case 'stdout':\n          this.#stdout(output.data as string);\n          break;\n        case 'stderr':\n          this.#stderr(output.data as string);\n          break;\n        case 'prompt':\n          this.#prompt(output.data as string);\n          break;\n        case 'canvasExec':\n          this.#canvasExec(output.data as string);\n          break;\n        default:\n          console.warn(`Unhandled output type for webR Console: ${output.type}.`);\n      }\n    }\n  }\n}\n", "import { newChannelMain, ChannelMain, ChannelType } from './chan/channel';\nimport { Message } from './chan/message';\nimport { BASE_URL, PKG_BASE_URL } from './config';\nimport { newRProxy } from './proxy';\nimport { unpackScalarVectors, replaceInObject } from './utils';\nimport {\n  RTargetObj,\n  RObject,\n  isRObject,\n  RawType,\n  RList,\n  RObjectTree,\n  NamedObject,\n  REnvironment,\n  RCharacter,\n} from './robj';\n\nexport type EvalRCodeOptions = {\n  captureStreams?: boolean;\n  captureConditions?: boolean;\n  withAutoprint?: boolean;\n  withHandlers?: boolean;\n};\n\nexport { Console, ConsoleCallbacks } from '../console/console';\n\nexport type FSNode = {\n  id: number;\n  name: string;\n  mode: number;\n  isFolder: boolean;\n  contents: { [key: string]: FSNode };\n};\n\nexport interface WebROptions {\n  RArgs?: string[];\n  REnv?: { [key: string]: string };\n  WEBR_URL?: string;\n  PKG_URL?: string;\n  SW_URL?: string;\n  homedir?: string;\n  interactive?: boolean;\n  channelType?: typeof ChannelType[keyof typeof ChannelType];\n}\n\nconst defaultEnv = {\n  R_HOME: '/usr/lib/R',\n  R_ENABLE_JIT: '0',\n};\n\nconst defaultOptions = {\n  RArgs: [],\n  REnv: defaultEnv,\n  WEBR_URL: BASE_URL,\n  SW_URL: '',\n  PKG_URL: PKG_BASE_URL,\n  homedir: '/home/web_user',\n  interactive: true,\n  channelType: ChannelType.Automatic,\n};\n\nexport class WebR {\n  #chan: ChannelMain;\n\n  constructor(options: WebROptions = {}) {\n    const config: Required<WebROptions> = Object.assign(defaultOptions, options);\n    this.#chan = newChannelMain(config);\n  }\n\n  async init() {\n    return await this.#chan.initialised;\n  }\n\n  close() {\n    return this.#chan.close();\n  }\n\n  async read(): Promise<Message> {\n    return await this.#chan.read();\n  }\n\n  async flush(): Promise<Message[]> {\n    return await this.#chan.flush();\n  }\n\n  write(msg: Message) {\n    this.#chan.write(msg);\n  }\n  writeConsole(input: string) {\n    this.write({ type: 'stdin', data: input + '\\n' });\n  }\n\n  interrupt() {\n    this.#chan.interrupt();\n  }\n\n  async installPackages(packages: string[]) {\n    for (const pkg of packages) {\n      const msg = { type: 'installPackage', data: { name: pkg } };\n      await this.#chan.request(msg);\n    }\n  }\n  async putFileData(name: string, data: Uint8Array) {\n    const msg = { type: 'putFileData', data: { name: name, data: data } };\n    return await this.#chan.request(msg);\n  }\n  async getFileData(name: string): Promise<Uint8Array> {\n    return (await this.#chan.request({ type: 'getFileData', data: { name: name } })) as Uint8Array;\n  }\n  async getFSNode(path: string): Promise<FSNode> {\n    return (await this.#chan.request({ type: 'getFSNode', data: { path: path } })) as FSNode;\n  }\n\n  async evalRCode(\n    code: string,\n    env?: REnvironment,\n    options: EvalRCodeOptions = {}\n  ): Promise<{\n    result: RObject;\n    output: unknown[];\n  }> {\n    if (env && !isRObject(env)) {\n      throw new Error('Attempted to evalRcode with invalid environment object');\n    }\n\n    const target = (await this.#chan.request({\n      type: 'evalRCode',\n      data: {\n        code: code,\n        env: env?._target,\n        options: options,\n      },\n    })) as RTargetObj;\n\n    switch (target.targetType) {\n      case 'raw':\n        throw new Error('Unexpected raw target type returned from evalRCode');\n      case 'err': {\n        const e = new Error(target.obj.message);\n        e.name = target.obj.name;\n        e.stack = target.obj.stack;\n        throw e;\n      }\n      default: {\n        const obj = newRProxy(this.#chan, target);\n        obj.preserve();\n        const result = await obj.get(1);\n        const outList = (await obj.get(2)) as RList;\n        const output: any[] = [];\n        for await (const out of outList) {\n          const type = await ((await out.pluck(1, 1)) as RCharacter).toString();\n          if (type === 'stdout' || type === 'stderr') {\n            const obj = (await (out as RList).toObject({ depth: 0 })) as RawType;\n            output.push(unpackScalarVectors(obj));\n          } else {\n            output.push({ type, data: await out.pluck(2) });\n          }\n        }\n        obj.release();\n        return { result, output };\n      }\n    }\n  }\n\n  async newRObject(\n    jsObj: RawType | RawType[] | RObjectTree<RObject> | NamedObject<RawType | RObject>\n  ): Promise<RObject> {\n    const targetObj = replaceInObject(jsObj, isRObject, (obj: RObject) => obj._target);\n    const target = (await this.#chan.request({\n      type: 'newRObject',\n      data: { targetType: 'raw', obj: targetObj },\n    })) as RTargetObj;\n    switch (target.targetType) {\n      case 'raw':\n        throw new Error('Unexpected raw target type returned from newRObject');\n      case 'err': {\n        const e = new Error(target.obj.message);\n        e.name = target.obj.name;\n        e.stack = target.obj.stack;\n        throw e;\n      }\n      default:\n        return newRProxy(this.#chan, target);\n    }\n  }\n}\n"],
  "mappings": "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",
  "names": []
}
