{
  "version": 3,
  "sources": ["../node_modules/@msgpack/msgpack/src/utils/int.ts", "../node_modules/@msgpack/msgpack/src/utils/utf8.ts", "../node_modules/@msgpack/msgpack/src/ExtData.ts", "../node_modules/@msgpack/msgpack/src/DecodeError.ts", "../node_modules/@msgpack/msgpack/src/timestamp.ts", "../node_modules/@msgpack/msgpack/src/ExtensionCodec.ts", "../node_modules/@msgpack/msgpack/src/utils/typedArrays.ts", "../node_modules/@msgpack/msgpack/src/Encoder.ts", "../node_modules/@msgpack/msgpack/src/encode.ts", "../node_modules/@msgpack/msgpack/src/utils/prettyByte.ts", "../node_modules/@msgpack/msgpack/src/CachedKeyDecoder.ts", "../node_modules/@msgpack/msgpack/src/Decoder.ts", "../node_modules/@msgpack/msgpack/src/decode.ts", "../node_modules/@msgpack/msgpack/src/utils/stream.ts", "../node_modules/@msgpack/msgpack/src/decodeAsync.ts", "../node_modules/@msgpack/msgpack/src/index.ts", "../webR/error.ts", "../webR/compat.ts", "../webR/emscripten.ts", "../webR/robj.ts", "../webR/utils-r.ts", "../webR/robj-worker.ts", "../webR/utils.ts", "../webR/chan/serviceworker.ts"],
  "sourcesContent": ["// Integer Utility\n\nexport const UINT32_MAX = 0xffff_ffff;\n\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\n\nexport function setUint64(view: DataView, offset: number, value: number): void {\n  const high = value / 0x1_0000_0000;\n  const low = value; // high bits are truncated by DataView\n  view.setUint32(offset, high);\n  view.setUint32(offset + 4, low);\n}\n\nexport function setInt64(view: DataView, offset: number, value: number): void {\n  const high = Math.floor(value / 0x1_0000_0000);\n  const low = value; // high bits are truncated by DataView\n  view.setUint32(offset, high);\n  view.setUint32(offset + 4, low);\n}\n\nexport function getInt64(view: DataView, offset: number): number {\n  const high = view.getInt32(offset);\n  const low = view.getUint32(offset + 4);\n  return high * 0x1_0000_0000 + low;\n}\n\nexport function getUint64(view: DataView, offset: number): number {\n  const high = view.getUint32(offset);\n  const low = view.getUint32(offset + 4);\n  return high * 0x1_0000_0000 + low;\n}\n", "/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport { UINT32_MAX } from \"./int\";\n\nconst TEXT_ENCODING_AVAILABLE =\n  (typeof process === \"undefined\" || process?.env?.[\"TEXT_ENCODING\"] !== \"never\") &&\n  typeof TextEncoder !== \"undefined\" &&\n  typeof TextDecoder !== \"undefined\";\n\nexport function utf8Count(str: string): number {\n  const strLength = str.length;\n\n  let byteLength = 0;\n  let pos = 0;\n  while (pos < strLength) {\n    let value = str.charCodeAt(pos++);\n\n    if ((value & 0xffffff80) === 0) {\n      // 1-byte\n      byteLength++;\n      continue;\n    } else if ((value & 0xfffff800) === 0) {\n      // 2-bytes\n      byteLength += 2;\n    } else {\n      // handle surrogate pair\n      if (value >= 0xd800 && value <= 0xdbff) {\n        // high surrogate\n        if (pos < strLength) {\n          const extra = str.charCodeAt(pos);\n          if ((extra & 0xfc00) === 0xdc00) {\n            ++pos;\n            value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n          }\n        }\n      }\n\n      if ((value & 0xffff0000) === 0) {\n        // 3-byte\n        byteLength += 3;\n      } else {\n        // 4-byte\n        byteLength += 4;\n      }\n    }\n  }\n  return byteLength;\n}\n\nexport function utf8EncodeJs(str: string, output: Uint8Array, outputOffset: number): void {\n  const strLength = str.length;\n  let offset = outputOffset;\n  let pos = 0;\n  while (pos < strLength) {\n    let value = str.charCodeAt(pos++);\n\n    if ((value & 0xffffff80) === 0) {\n      // 1-byte\n      output[offset++] = value;\n      continue;\n    } else if ((value & 0xfffff800) === 0) {\n      // 2-bytes\n      output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n    } else {\n      // handle surrogate pair\n      if (value >= 0xd800 && value <= 0xdbff) {\n        // high surrogate\n        if (pos < strLength) {\n          const extra = str.charCodeAt(pos);\n          if ((extra & 0xfc00) === 0xdc00) {\n            ++pos;\n            value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n          }\n        }\n      }\n\n      if ((value & 0xffff0000) === 0) {\n        // 3-byte\n        output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n        output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n      } else {\n        // 4-byte\n        output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n        output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n        output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n      }\n    }\n\n    output[offset++] = (value & 0x3f) | 0x80;\n  }\n}\n\nconst sharedTextEncoder = TEXT_ENCODING_AVAILABLE ? new TextEncoder() : undefined;\nexport const TEXT_ENCODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n  ? UINT32_MAX\n  : typeof process !== \"undefined\" && process?.env?.[\"TEXT_ENCODING\"] !== \"force\"\n  ? 200\n  : 0;\n\nfunction utf8EncodeTEencode(str: string, output: Uint8Array, outputOffset: number): void {\n  output.set(sharedTextEncoder!.encode(str), outputOffset);\n}\n\nfunction utf8EncodeTEencodeInto(str: string, output: Uint8Array, outputOffset: number): void {\n  sharedTextEncoder!.encodeInto(str, output.subarray(outputOffset));\n}\n\nexport const utf8EncodeTE = sharedTextEncoder?.encodeInto ? utf8EncodeTEencodeInto : utf8EncodeTEencode;\n\nconst CHUNK_SIZE = 0x1_000;\n\nexport function utf8DecodeJs(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n  let offset = inputOffset;\n  const end = offset + byteLength;\n\n  const units: Array<number> = [];\n  let result = \"\";\n  while (offset < end) {\n    const byte1 = bytes[offset++]!;\n    if ((byte1 & 0x80) === 0) {\n      // 1 byte\n      units.push(byte1);\n    } else if ((byte1 & 0xe0) === 0xc0) {\n      // 2 bytes\n      const byte2 = bytes[offset++]! & 0x3f;\n      units.push(((byte1 & 0x1f) << 6) | byte2);\n    } else if ((byte1 & 0xf0) === 0xe0) {\n      // 3 bytes\n      const byte2 = bytes[offset++]! & 0x3f;\n      const byte3 = bytes[offset++]! & 0x3f;\n      units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n    } else if ((byte1 & 0xf8) === 0xf0) {\n      // 4 bytes\n      const byte2 = bytes[offset++]! & 0x3f;\n      const byte3 = bytes[offset++]! & 0x3f;\n      const byte4 = bytes[offset++]! & 0x3f;\n      let unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n      if (unit > 0xffff) {\n        unit -= 0x10000;\n        units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n        unit = 0xdc00 | (unit & 0x3ff);\n      }\n      units.push(unit);\n    } else {\n      units.push(byte1);\n    }\n\n    if (units.length >= CHUNK_SIZE) {\n      result += String.fromCharCode(...units);\n      units.length = 0;\n    }\n  }\n\n  if (units.length > 0) {\n    result += String.fromCharCode(...units);\n  }\n\n  return result;\n}\n\nconst sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null;\nexport const TEXT_DECODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n  ? UINT32_MAX\n  : typeof process !== \"undefined\" && process?.env?.[\"TEXT_DECODER\"] !== \"force\"\n  ? 200\n  : 0;\n\nexport function utf8DecodeTD(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n  const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n  return sharedTextDecoder!.decode(stringBytes);\n}\n", "/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nexport class ExtData {\n  constructor(readonly type: number, readonly data: Uint8Array) {}\n}\n", "export class DecodeError extends Error {\n  constructor(message: string) {\n    super(message);\n\n    // fix the prototype chain in a cross-platform way\n    const proto: typeof DecodeError.prototype = Object.create(DecodeError.prototype);\n    Object.setPrototypeOf(this, proto);\n\n    Object.defineProperty(this, \"name\", {\n      configurable: true,\n      enumerable: false,\n      value: DecodeError.name,\n    });\n  }\n}\n", "// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError\";\nimport { getInt64, setInt64 } from \"./utils/int\";\n\nexport const EXT_TIMESTAMP = -1;\n\nexport type TimeSpec = {\n  sec: number;\n  nsec: number;\n};\n\nconst TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nconst TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\n\nexport function encodeTimeSpecToTimestamp({ sec, nsec }: TimeSpec): Uint8Array {\n  if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n    // Here sec >= 0 && nsec >= 0\n    if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n      // timestamp 32 = { sec32 (unsigned) }\n      const rv = new Uint8Array(4);\n      const view = new DataView(rv.buffer);\n      view.setUint32(0, sec);\n      return rv;\n    } else {\n      // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n      const secHigh = sec / 0x100000000;\n      const secLow = sec & 0xffffffff;\n      const rv = new Uint8Array(8);\n      const view = new DataView(rv.buffer);\n      // nsec30 | secHigh2\n      view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n      // secLow32\n      view.setUint32(4, secLow);\n      return rv;\n    }\n  } else {\n    // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n    const rv = new Uint8Array(12);\n    const view = new DataView(rv.buffer);\n    view.setUint32(0, nsec);\n    setInt64(view, 4, sec);\n    return rv;\n  }\n}\n\nexport function encodeDateToTimeSpec(date: Date): TimeSpec {\n  const msec = date.getTime();\n  const sec = Math.floor(msec / 1e3);\n  const nsec = (msec - sec * 1e3) * 1e6;\n\n  // Normalizes { sec, nsec } to ensure nsec is unsigned.\n  const nsecInSec = Math.floor(nsec / 1e9);\n  return {\n    sec: sec + nsecInSec,\n    nsec: nsec - nsecInSec * 1e9,\n  };\n}\n\nexport function encodeTimestampExtension(object: unknown): Uint8Array | null {\n  if (object instanceof Date) {\n    const timeSpec = encodeDateToTimeSpec(object);\n    return encodeTimeSpecToTimestamp(timeSpec);\n  } else {\n    return null;\n  }\n}\n\nexport function decodeTimestampToTimeSpec(data: Uint8Array): TimeSpec {\n  const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n  // data may be 32, 64, or 96 bits\n  switch (data.byteLength) {\n    case 4: {\n      // timestamp 32 = { sec32 }\n      const sec = view.getUint32(0);\n      const nsec = 0;\n      return { sec, nsec };\n    }\n    case 8: {\n      // timestamp 64 = { nsec30, sec34 }\n      const nsec30AndSecHigh2 = view.getUint32(0);\n      const secLow32 = view.getUint32(4);\n      const sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n      const nsec = nsec30AndSecHigh2 >>> 2;\n      return { sec, nsec };\n    }\n    case 12: {\n      // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n\n      const sec = getInt64(view, 4);\n      const nsec = view.getUint32(0);\n      return { sec, nsec };\n    }\n    default:\n      throw new DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${data.length}`);\n  }\n}\n\nexport function decodeTimestampExtension(data: Uint8Array): Date {\n  const timeSpec = decodeTimestampToTimeSpec(data);\n  return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\n\nexport const timestampExtension = {\n  type: EXT_TIMESTAMP,\n  encode: encodeTimestampExtension,\n  decode: decodeTimestampExtension,\n};\n", "// ExtensionCodec to handle MessagePack extensions\n\nimport { ExtData } from \"./ExtData\";\nimport { timestampExtension } from \"./timestamp\";\n\nexport type ExtensionDecoderType<ContextType> = (\n  data: Uint8Array,\n  extensionType: number,\n  context: ContextType,\n) => unknown;\n\nexport type ExtensionEncoderType<ContextType> = (input: unknown, context: ContextType) => Uint8Array | null;\n\n// immutable interface to ExtensionCodec\nexport type ExtensionCodecType<ContextType> = {\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  __brand?: ContextType;\n  tryToEncode(object: unknown, context: ContextType): ExtData | null;\n  decode(data: Uint8Array, extType: number, context: ContextType): unknown;\n};\n\nexport class ExtensionCodec<ContextType = undefined> implements ExtensionCodecType<ContextType> {\n  public static readonly defaultCodec: ExtensionCodecType<undefined> = new ExtensionCodec();\n\n  // ensures ExtensionCodecType<X> matches ExtensionCodec<X>\n  // this will make type errors a lot more clear\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  __brand?: ContextType;\n\n  // built-in extensions\n  private readonly builtInEncoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n  private readonly builtInDecoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n  // custom extensions\n  private readonly encoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n  private readonly decoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n  public constructor() {\n    this.register(timestampExtension);\n  }\n\n  public register({\n    type,\n    encode,\n    decode,\n  }: {\n    type: number;\n    encode: ExtensionEncoderType<ContextType>;\n    decode: ExtensionDecoderType<ContextType>;\n  }): void {\n    if (type >= 0) {\n      // custom extensions\n      this.encoders[type] = encode;\n      this.decoders[type] = decode;\n    } else {\n      // built-in extensions\n      const index = 1 + type;\n      this.builtInEncoders[index] = encode;\n      this.builtInDecoders[index] = decode;\n    }\n  }\n\n  public tryToEncode(object: unknown, context: ContextType): ExtData | null {\n    // built-in extensions\n    for (let i = 0; i < this.builtInEncoders.length; i++) {\n      const encodeExt = this.builtInEncoders[i];\n      if (encodeExt != null) {\n        const data = encodeExt(object, context);\n        if (data != null) {\n          const type = -1 - i;\n          return new ExtData(type, data);\n        }\n      }\n    }\n\n    // custom extensions\n    for (let i = 0; i < this.encoders.length; i++) {\n      const encodeExt = this.encoders[i];\n      if (encodeExt != null) {\n        const data = encodeExt(object, context);\n        if (data != null) {\n          const type = i;\n          return new ExtData(type, data);\n        }\n      }\n    }\n\n    if (object instanceof ExtData) {\n      // to keep ExtData as is\n      return object;\n    }\n    return null;\n  }\n\n  public decode(data: Uint8Array, type: number, context: ContextType): unknown {\n    const decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n    if (decodeExt) {\n      return decodeExt(data, type, context);\n    } else {\n      // decode() does not fail, returns ExtData instead.\n      return new ExtData(type, data);\n    }\n  }\n}\n", "export function ensureUint8Array(buffer: ArrayLike<number> | Uint8Array | ArrayBufferView | ArrayBuffer): Uint8Array {\n  if (buffer instanceof Uint8Array) {\n    return buffer;\n  } else if (ArrayBuffer.isView(buffer)) {\n    return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n  } else if (buffer instanceof ArrayBuffer) {\n    return new Uint8Array(buffer);\n  } else {\n    // ArrayLike<number>\n    return Uint8Array.from(buffer);\n  }\n}\n\nexport function createDataView(buffer: ArrayLike<number> | ArrayBufferView | ArrayBuffer): DataView {\n  if (buffer instanceof ArrayBuffer) {\n    return new DataView(buffer);\n  }\n\n  const bufferView = ensureUint8Array(buffer);\n  return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\n}\n", "import { utf8EncodeJs, utf8Count, TEXT_ENCODER_THRESHOLD, utf8EncodeTE } from \"./utils/utf8\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { setInt64, setUint64 } from \"./utils/int\";\nimport { ensureUint8Array } from \"./utils/typedArrays\";\nimport type { ExtData } from \"./ExtData\";\n\nexport const DEFAULT_MAX_DEPTH = 100;\nexport const DEFAULT_INITIAL_BUFFER_SIZE = 2048;\n\nexport class Encoder<ContextType = undefined> {\n  private pos = 0;\n  private view = new DataView(new ArrayBuffer(this.initialBufferSize));\n  private bytes = new Uint8Array(this.view.buffer);\n\n  public constructor(\n    private readonly extensionCodec: ExtensionCodecType<ContextType> = ExtensionCodec.defaultCodec as any,\n    private readonly context: ContextType = undefined as any,\n    private readonly maxDepth = DEFAULT_MAX_DEPTH,\n    private readonly initialBufferSize = DEFAULT_INITIAL_BUFFER_SIZE,\n    private readonly sortKeys = false,\n    private readonly forceFloat32 = false,\n    private readonly ignoreUndefined = false,\n    private readonly forceIntegerToFloat = false,\n  ) {}\n\n  private reinitializeState() {\n    this.pos = 0;\n  }\n\n  /**\n   * This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.\n   *\n   * @returns Encodes the object and returns a shared reference the encoder's internal buffer.\n   */\n  public encodeSharedRef(object: unknown): Uint8Array {\n    this.reinitializeState();\n    this.doEncode(object, 1);\n    return this.bytes.subarray(0, this.pos);\n  }\n\n  /**\n   * @returns Encodes the object and returns a copy of the encoder's internal buffer.\n   */\n  public encode(object: unknown): Uint8Array {\n    this.reinitializeState();\n    this.doEncode(object, 1);\n    return this.bytes.slice(0, this.pos);\n  }\n\n  private doEncode(object: unknown, depth: number): void {\n    if (depth > this.maxDepth) {\n      throw new Error(`Too deep objects in depth ${depth}`);\n    }\n\n    if (object == null) {\n      this.encodeNil();\n    } else if (typeof object === \"boolean\") {\n      this.encodeBoolean(object);\n    } else if (typeof object === \"number\") {\n      this.encodeNumber(object);\n    } else if (typeof object === \"string\") {\n      this.encodeString(object);\n    } else {\n      this.encodeObject(object, depth);\n    }\n  }\n\n  private ensureBufferSizeToWrite(sizeToWrite: number) {\n    const requiredSize = this.pos + sizeToWrite;\n\n    if (this.view.byteLength < requiredSize) {\n      this.resizeBuffer(requiredSize * 2);\n    }\n  }\n\n  private resizeBuffer(newSize: number) {\n    const newBuffer = new ArrayBuffer(newSize);\n    const newBytes = new Uint8Array(newBuffer);\n    const newView = new DataView(newBuffer);\n\n    newBytes.set(this.bytes);\n\n    this.view = newView;\n    this.bytes = newBytes;\n  }\n\n  private encodeNil() {\n    this.writeU8(0xc0);\n  }\n\n  private encodeBoolean(object: boolean) {\n    if (object === false) {\n      this.writeU8(0xc2);\n    } else {\n      this.writeU8(0xc3);\n    }\n  }\n  private encodeNumber(object: number) {\n    if (Number.isSafeInteger(object) && !this.forceIntegerToFloat) {\n      if (object >= 0) {\n        if (object < 0x80) {\n          // positive fixint\n          this.writeU8(object);\n        } else if (object < 0x100) {\n          // uint 8\n          this.writeU8(0xcc);\n          this.writeU8(object);\n        } else if (object < 0x10000) {\n          // uint 16\n          this.writeU8(0xcd);\n          this.writeU16(object);\n        } else if (object < 0x100000000) {\n          // uint 32\n          this.writeU8(0xce);\n          this.writeU32(object);\n        } else {\n          // uint 64\n          this.writeU8(0xcf);\n          this.writeU64(object);\n        }\n      } else {\n        if (object >= -0x20) {\n          // negative fixint\n          this.writeU8(0xe0 | (object + 0x20));\n        } else if (object >= -0x80) {\n          // int 8\n          this.writeU8(0xd0);\n          this.writeI8(object);\n        } else if (object >= -0x8000) {\n          // int 16\n          this.writeU8(0xd1);\n          this.writeI16(object);\n        } else if (object >= -0x80000000) {\n          // int 32\n          this.writeU8(0xd2);\n          this.writeI32(object);\n        } else {\n          // int 64\n          this.writeU8(0xd3);\n          this.writeI64(object);\n        }\n      }\n    } else {\n      // non-integer numbers\n      if (this.forceFloat32) {\n        // float 32\n        this.writeU8(0xca);\n        this.writeF32(object);\n      } else {\n        // float 64\n        this.writeU8(0xcb);\n        this.writeF64(object);\n      }\n    }\n  }\n\n  private writeStringHeader(byteLength: number) {\n    if (byteLength < 32) {\n      // fixstr\n      this.writeU8(0xa0 + byteLength);\n    } else if (byteLength < 0x100) {\n      // str 8\n      this.writeU8(0xd9);\n      this.writeU8(byteLength);\n    } else if (byteLength < 0x10000) {\n      // str 16\n      this.writeU8(0xda);\n      this.writeU16(byteLength);\n    } else if (byteLength < 0x100000000) {\n      // str 32\n      this.writeU8(0xdb);\n      this.writeU32(byteLength);\n    } else {\n      throw new Error(`Too long string: ${byteLength} bytes in UTF-8`);\n    }\n  }\n\n  private encodeString(object: string) {\n    const maxHeaderSize = 1 + 4;\n    const strLength = object.length;\n\n    if (strLength > TEXT_ENCODER_THRESHOLD) {\n      const byteLength = utf8Count(object);\n      this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n      this.writeStringHeader(byteLength);\n      utf8EncodeTE(object, this.bytes, this.pos);\n      this.pos += byteLength;\n    } else {\n      const byteLength = utf8Count(object);\n      this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n      this.writeStringHeader(byteLength);\n      utf8EncodeJs(object, this.bytes, this.pos);\n      this.pos += byteLength;\n    }\n  }\n\n  private encodeObject(object: unknown, depth: number) {\n    // try to encode objects with custom codec first of non-primitives\n    const ext = this.extensionCodec.tryToEncode(object, this.context);\n    if (ext != null) {\n      this.encodeExtension(ext);\n    } else if (Array.isArray(object)) {\n      this.encodeArray(object, depth);\n    } else if (ArrayBuffer.isView(object)) {\n      this.encodeBinary(object);\n    } else if (typeof object === \"object\") {\n      this.encodeMap(object as Record<string, unknown>, depth);\n    } else {\n      // symbol, function and other special object come here unless extensionCodec handles them.\n      throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`);\n    }\n  }\n\n  private encodeBinary(object: ArrayBufferView) {\n    const size = object.byteLength;\n    if (size < 0x100) {\n      // bin 8\n      this.writeU8(0xc4);\n      this.writeU8(size);\n    } else if (size < 0x10000) {\n      // bin 16\n      this.writeU8(0xc5);\n      this.writeU16(size);\n    } else if (size < 0x100000000) {\n      // bin 32\n      this.writeU8(0xc6);\n      this.writeU32(size);\n    } else {\n      throw new Error(`Too large binary: ${size}`);\n    }\n    const bytes = ensureUint8Array(object);\n    this.writeU8a(bytes);\n  }\n\n  private encodeArray(object: Array<unknown>, depth: number) {\n    const size = object.length;\n    if (size < 16) {\n      // fixarray\n      this.writeU8(0x90 + size);\n    } else if (size < 0x10000) {\n      // array 16\n      this.writeU8(0xdc);\n      this.writeU16(size);\n    } else if (size < 0x100000000) {\n      // array 32\n      this.writeU8(0xdd);\n      this.writeU32(size);\n    } else {\n      throw new Error(`Too large array: ${size}`);\n    }\n    for (const item of object) {\n      this.doEncode(item, depth + 1);\n    }\n  }\n\n  private countWithoutUndefined(object: Record<string, unknown>, keys: ReadonlyArray<string>): number {\n    let count = 0;\n\n    for (const key of keys) {\n      if (object[key] !== undefined) {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  private encodeMap(object: Record<string, unknown>, depth: number) {\n    const keys = Object.keys(object);\n    if (this.sortKeys) {\n      keys.sort();\n    }\n\n    const size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;\n\n    if (size < 16) {\n      // fixmap\n      this.writeU8(0x80 + size);\n    } else if (size < 0x10000) {\n      // map 16\n      this.writeU8(0xde);\n      this.writeU16(size);\n    } else if (size < 0x100000000) {\n      // map 32\n      this.writeU8(0xdf);\n      this.writeU32(size);\n    } else {\n      throw new Error(`Too large map object: ${size}`);\n    }\n\n    for (const key of keys) {\n      const value = object[key];\n\n      if (!(this.ignoreUndefined && value === undefined)) {\n        this.encodeString(key);\n        this.doEncode(value, depth + 1);\n      }\n    }\n  }\n\n  private encodeExtension(ext: ExtData) {\n    const size = ext.data.length;\n    if (size === 1) {\n      // fixext 1\n      this.writeU8(0xd4);\n    } else if (size === 2) {\n      // fixext 2\n      this.writeU8(0xd5);\n    } else if (size === 4) {\n      // fixext 4\n      this.writeU8(0xd6);\n    } else if (size === 8) {\n      // fixext 8\n      this.writeU8(0xd7);\n    } else if (size === 16) {\n      // fixext 16\n      this.writeU8(0xd8);\n    } else if (size < 0x100) {\n      // ext 8\n      this.writeU8(0xc7);\n      this.writeU8(size);\n    } else if (size < 0x10000) {\n      // ext 16\n      this.writeU8(0xc8);\n      this.writeU16(size);\n    } else if (size < 0x100000000) {\n      // ext 32\n      this.writeU8(0xc9);\n      this.writeU32(size);\n    } else {\n      throw new Error(`Too large extension object: ${size}`);\n    }\n    this.writeI8(ext.type);\n    this.writeU8a(ext.data);\n  }\n\n  private writeU8(value: number) {\n    this.ensureBufferSizeToWrite(1);\n\n    this.view.setUint8(this.pos, value);\n    this.pos++;\n  }\n\n  private writeU8a(values: ArrayLike<number>) {\n    const size = values.length;\n    this.ensureBufferSizeToWrite(size);\n\n    this.bytes.set(values, this.pos);\n    this.pos += size;\n  }\n\n  private writeI8(value: number) {\n    this.ensureBufferSizeToWrite(1);\n\n    this.view.setInt8(this.pos, value);\n    this.pos++;\n  }\n\n  private writeU16(value: number) {\n    this.ensureBufferSizeToWrite(2);\n\n    this.view.setUint16(this.pos, value);\n    this.pos += 2;\n  }\n\n  private writeI16(value: number) {\n    this.ensureBufferSizeToWrite(2);\n\n    this.view.setInt16(this.pos, value);\n    this.pos += 2;\n  }\n\n  private writeU32(value: number) {\n    this.ensureBufferSizeToWrite(4);\n\n    this.view.setUint32(this.pos, value);\n    this.pos += 4;\n  }\n\n  private writeI32(value: number) {\n    this.ensureBufferSizeToWrite(4);\n\n    this.view.setInt32(this.pos, value);\n    this.pos += 4;\n  }\n\n  private writeF32(value: number) {\n    this.ensureBufferSizeToWrite(4);\n    this.view.setFloat32(this.pos, value);\n    this.pos += 4;\n  }\n\n  private writeF64(value: number) {\n    this.ensureBufferSizeToWrite(8);\n    this.view.setFloat64(this.pos, value);\n    this.pos += 8;\n  }\n\n  private writeU64(value: number) {\n    this.ensureBufferSizeToWrite(8);\n\n    setUint64(this.view, this.pos, value);\n    this.pos += 8;\n  }\n\n  private writeI64(value: number) {\n    this.ensureBufferSizeToWrite(8);\n\n    setInt64(this.view, this.pos, value);\n    this.pos += 8;\n  }\n}\n", "import { Encoder } from \"./Encoder\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec\";\nimport type { ContextOf, SplitUndefined } from \"./context\";\n\nexport type EncodeOptions<ContextType = undefined> = Partial<\n  Readonly<{\n    extensionCodec: ExtensionCodecType<ContextType>;\n\n    /**\n     * The maximum depth in nested objects and arrays.\n     *\n     * Defaults to 100.\n     */\n    maxDepth: number;\n\n    /**\n     * The initial size of the internal buffer.\n     *\n     * Defaults to 2048.\n     */\n    initialBufferSize: number;\n\n    /**\n     * If `true`, the keys of an object is sorted. In other words, the encoded\n     * binary is canonical and thus comparable to another encoded binary.\n     *\n     * Defaults to `false`. If enabled, it spends more time in encoding objects.\n     */\n    sortKeys: boolean;\n    /**\n     * If `true`, non-integer numbers are encoded in float32, not in float64 (the default).\n     *\n     * Only use it if precisions don't matter.\n     *\n     * Defaults to `false`.\n     */\n    forceFloat32: boolean;\n\n    /**\n     * If `true`, an object property with `undefined` value are ignored.\n     * e.g. `{ foo: undefined }` will be encoded as `{}`, as `JSON.stringify()` does.\n     *\n     * Defaults to `false`. If enabled, it spends more time in encoding objects.\n     */\n    ignoreUndefined: boolean;\n\n    /**\n     * If `true`, integer numbers are encoded as floating point numbers,\n     * with the `forceFloat32` option taken into account.\n     *\n     * Defaults to `false`.\n     */\n    forceIntegerToFloat: boolean;\n  }>\n> &\n  ContextOf<ContextType>;\n\nconst defaultEncodeOptions: EncodeOptions = {};\n\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode<ContextType = undefined>(\n  value: unknown,\n  options: EncodeOptions<SplitUndefined<ContextType>> = defaultEncodeOptions as any,\n): Uint8Array {\n  const encoder = new Encoder(\n    options.extensionCodec,\n    (options as typeof options & { context: any }).context,\n    options.maxDepth,\n    options.initialBufferSize,\n    options.sortKeys,\n    options.forceFloat32,\n    options.ignoreUndefined,\n    options.forceIntegerToFloat,\n  );\n  return encoder.encodeSharedRef(value);\n}\n", "export function prettyByte(byte: number): string {\n  return `${byte < 0 ? \"-\" : \"\"}0x${Math.abs(byte).toString(16).padStart(2, \"0\")}`;\n}\n", "import { utf8DecodeJs } from \"./utils/utf8\";\n\nconst DEFAULT_MAX_KEY_LENGTH = 16;\nconst DEFAULT_MAX_LENGTH_PER_KEY = 16;\n\nexport interface KeyDecoder {\n  canBeCached(byteLength: number): boolean;\n  decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string;\n}\ninterface KeyCacheRecord {\n  readonly bytes: Uint8Array;\n  readonly str: string;\n}\n\nexport class CachedKeyDecoder implements KeyDecoder {\n  hit = 0;\n  miss = 0;\n  private readonly caches: Array<Array<KeyCacheRecord>>;\n\n  constructor(readonly maxKeyLength = DEFAULT_MAX_KEY_LENGTH, readonly maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY) {\n    // avoid `new Array(N)`, which makes a sparse array,\n    // because a sparse array is typically slower than a non-sparse array.\n    this.caches = [];\n    for (let i = 0; i < this.maxKeyLength; i++) {\n      this.caches.push([]);\n    }\n  }\n\n  public canBeCached(byteLength: number): boolean {\n    return byteLength > 0 && byteLength <= this.maxKeyLength;\n  }\n\n  private find(bytes: Uint8Array, inputOffset: number, byteLength: number): string | null {\n    const records = this.caches[byteLength - 1]!;\n\n    FIND_CHUNK: for (const record of records) {\n      const recordBytes = record.bytes;\n\n      for (let j = 0; j < byteLength; j++) {\n        if (recordBytes[j] !== bytes[inputOffset + j]) {\n          continue FIND_CHUNK;\n        }\n      }\n      return record.str;\n    }\n    return null;\n  }\n\n  private store(bytes: Uint8Array, value: string) {\n    const records = this.caches[bytes.length - 1]!;\n    const record: KeyCacheRecord = { bytes, str: value };\n\n    if (records.length >= this.maxLengthPerKey) {\n      // `records` are full!\n      // Set `record` to an arbitrary position.\n      records[(Math.random() * records.length) | 0] = record;\n    } else {\n      records.push(record);\n    }\n  }\n\n  public decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n    const cachedValue = this.find(bytes, inputOffset, byteLength);\n    if (cachedValue != null) {\n      this.hit++;\n      return cachedValue;\n    }\n    this.miss++;\n\n    const str = utf8DecodeJs(bytes, inputOffset, byteLength);\n    // Ensure to copy a slice of bytes because the byte may be NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.\n    const slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);\n    this.store(slicedCopyOfBytes, str);\n    return str;\n  }\n}\n", "import { prettyByte } from \"./utils/prettyByte\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { getInt64, getUint64, UINT32_MAX } from \"./utils/int\";\nimport { utf8DecodeJs, TEXT_DECODER_THRESHOLD, utf8DecodeTD } from \"./utils/utf8\";\nimport { createDataView, ensureUint8Array } from \"./utils/typedArrays\";\nimport { CachedKeyDecoder, KeyDecoder } from \"./CachedKeyDecoder\";\nimport { DecodeError } from \"./DecodeError\";\n\nconst enum State {\n  ARRAY,\n  MAP_KEY,\n  MAP_VALUE,\n}\n\ntype MapKeyType = string | number;\n\nconst isValidMapKeyType = (key: unknown): key is MapKeyType => {\n  const keyType = typeof key;\n\n  return keyType === \"string\" || keyType === \"number\";\n};\n\ntype StackMapState = {\n  type: State.MAP_KEY | State.MAP_VALUE;\n  size: number;\n  key: MapKeyType | null;\n  readCount: number;\n  map: Record<string, unknown>;\n};\n\ntype StackArrayState = {\n  type: State.ARRAY;\n  size: number;\n  array: Array<unknown>;\n  position: number;\n};\n\ntype StackState = StackArrayState | StackMapState;\n\nconst HEAD_BYTE_REQUIRED = -1;\n\nconst EMPTY_VIEW = new DataView(new ArrayBuffer(0));\nconst EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer);\n\n// IE11: Hack to support IE11.\n// IE11: Drop this hack and just use RangeError when IE11 is obsolete.\nexport const DataViewIndexOutOfBoundsError: typeof Error = (() => {\n  try {\n    // IE11: The spec says it should throw RangeError,\n    // IE11: but in IE11 it throws TypeError.\n    EMPTY_VIEW.getInt8(0);\n  } catch (e: any) {\n    return e.constructor;\n  }\n  throw new Error(\"never reached\");\n})();\n\nconst MORE_DATA = new DataViewIndexOutOfBoundsError(\"Insufficient data\");\n\nconst sharedCachedKeyDecoder = new CachedKeyDecoder();\n\nexport class Decoder<ContextType = undefined> {\n  private totalPos = 0;\n  private pos = 0;\n\n  private view = EMPTY_VIEW;\n  private bytes = EMPTY_BYTES;\n  private headByte = HEAD_BYTE_REQUIRED;\n  private readonly stack: Array<StackState> = [];\n\n  public constructor(\n    private readonly extensionCodec: ExtensionCodecType<ContextType> = ExtensionCodec.defaultCodec as any,\n    private readonly context: ContextType = undefined as any,\n    private readonly maxStrLength = UINT32_MAX,\n    private readonly maxBinLength = UINT32_MAX,\n    private readonly maxArrayLength = UINT32_MAX,\n    private readonly maxMapLength = UINT32_MAX,\n    private readonly maxExtLength = UINT32_MAX,\n    private readonly keyDecoder: KeyDecoder | null = sharedCachedKeyDecoder,\n  ) {}\n\n  private reinitializeState() {\n    this.totalPos = 0;\n    this.headByte = HEAD_BYTE_REQUIRED;\n    this.stack.length = 0;\n\n    // view, bytes, and pos will be re-initialized in setBuffer()\n  }\n\n  private setBuffer(buffer: ArrayLike<number> | BufferSource): void {\n    this.bytes = ensureUint8Array(buffer);\n    this.view = createDataView(this.bytes);\n    this.pos = 0;\n  }\n\n  private appendBuffer(buffer: ArrayLike<number> | BufferSource) {\n    if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining(1)) {\n      this.setBuffer(buffer);\n    } else {\n      const remainingData = this.bytes.subarray(this.pos);\n      const newData = ensureUint8Array(buffer);\n\n      // concat remainingData + newData\n      const newBuffer = new Uint8Array(remainingData.length + newData.length);\n      newBuffer.set(remainingData);\n      newBuffer.set(newData, remainingData.length);\n      this.setBuffer(newBuffer);\n    }\n  }\n\n  private hasRemaining(size: number) {\n    return this.view.byteLength - this.pos >= size;\n  }\n\n  private createExtraByteError(posToShow: number): Error {\n    const { view, pos } = this;\n    return new RangeError(`Extra ${view.byteLength - pos} of ${view.byteLength} byte(s) found at buffer[${posToShow}]`);\n  }\n\n  /**\n   * @throws {@link DecodeError}\n   * @throws {@link RangeError}\n   */\n  public decode(buffer: ArrayLike<number> | BufferSource): unknown {\n    this.reinitializeState();\n    this.setBuffer(buffer);\n\n    const object = this.doDecodeSync();\n    if (this.hasRemaining(1)) {\n      throw this.createExtraByteError(this.pos);\n    }\n    return object;\n  }\n\n  public *decodeMulti(buffer: ArrayLike<number> | BufferSource): Generator<unknown, void, unknown> {\n    this.reinitializeState();\n    this.setBuffer(buffer);\n\n    while (this.hasRemaining(1)) {\n      yield this.doDecodeSync();\n    }\n  }\n\n  public async decodeAsync(stream: AsyncIterable<ArrayLike<number> | BufferSource>): Promise<unknown> {\n    let decoded = false;\n    let object: unknown;\n    for await (const buffer of stream) {\n      if (decoded) {\n        throw this.createExtraByteError(this.totalPos);\n      }\n\n      this.appendBuffer(buffer);\n\n      try {\n        object = this.doDecodeSync();\n        decoded = true;\n      } catch (e) {\n        if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n          throw e; // rethrow\n        }\n        // fallthrough\n      }\n      this.totalPos += this.pos;\n    }\n\n    if (decoded) {\n      if (this.hasRemaining(1)) {\n        throw this.createExtraByteError(this.totalPos);\n      }\n      return object;\n    }\n\n    const { headByte, pos, totalPos } = this;\n    throw new RangeError(\n      `Insufficient data in parsing ${prettyByte(headByte)} at ${totalPos} (${pos} in the current buffer)`,\n    );\n  }\n\n  public decodeArrayStream(\n    stream: AsyncIterable<ArrayLike<number> | BufferSource>,\n  ): AsyncGenerator<unknown, void, unknown> {\n    return this.decodeMultiAsync(stream, true);\n  }\n\n  public decodeStream(stream: AsyncIterable<ArrayLike<number> | BufferSource>): AsyncGenerator<unknown, void, unknown> {\n    return this.decodeMultiAsync(stream, false);\n  }\n\n  private async *decodeMultiAsync(stream: AsyncIterable<ArrayLike<number> | BufferSource>, isArray: boolean) {\n    let isArrayHeaderRequired = isArray;\n    let arrayItemsLeft = -1;\n\n    for await (const buffer of stream) {\n      if (isArray && arrayItemsLeft === 0) {\n        throw this.createExtraByteError(this.totalPos);\n      }\n\n      this.appendBuffer(buffer);\n\n      if (isArrayHeaderRequired) {\n        arrayItemsLeft = this.readArraySize();\n        isArrayHeaderRequired = false;\n        this.complete();\n      }\n\n      try {\n        while (true) {\n          yield this.doDecodeSync();\n          if (--arrayItemsLeft === 0) {\n            break;\n          }\n        }\n      } catch (e) {\n        if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n          throw e; // rethrow\n        }\n        // fallthrough\n      }\n      this.totalPos += this.pos;\n    }\n  }\n\n  private doDecodeSync(): unknown {\n    DECODE: while (true) {\n      const headByte = this.readHeadByte();\n      let object: unknown;\n\n      if (headByte >= 0xe0) {\n        // negative fixint (111x xxxx) 0xe0 - 0xff\n        object = headByte - 0x100;\n      } else if (headByte < 0xc0) {\n        if (headByte < 0x80) {\n          // positive fixint (0xxx xxxx) 0x00 - 0x7f\n          object = headByte;\n        } else if (headByte < 0x90) {\n          // fixmap (1000 xxxx) 0x80 - 0x8f\n          const size = headByte - 0x80;\n          if (size !== 0) {\n            this.pushMapState(size);\n            this.complete();\n            continue DECODE;\n          } else {\n            object = {};\n          }\n        } else if (headByte < 0xa0) {\n          // fixarray (1001 xxxx) 0x90 - 0x9f\n          const size = headByte - 0x90;\n          if (size !== 0) {\n            this.pushArrayState(size);\n            this.complete();\n            continue DECODE;\n          } else {\n            object = [];\n          }\n        } else {\n          // fixstr (101x xxxx) 0xa0 - 0xbf\n          const byteLength = headByte - 0xa0;\n          object = this.decodeUtf8String(byteLength, 0);\n        }\n      } else if (headByte === 0xc0) {\n        // nil\n        object = null;\n      } else if (headByte === 0xc2) {\n        // false\n        object = false;\n      } else if (headByte === 0xc3) {\n        // true\n        object = true;\n      } else if (headByte === 0xca) {\n        // float 32\n        object = this.readF32();\n      } else if (headByte === 0xcb) {\n        // float 64\n        object = this.readF64();\n      } else if (headByte === 0xcc) {\n        // uint 8\n        object = this.readU8();\n      } else if (headByte === 0xcd) {\n        // uint 16\n        object = this.readU16();\n      } else if (headByte === 0xce) {\n        // uint 32\n        object = this.readU32();\n      } else if (headByte === 0xcf) {\n        // uint 64\n        object = this.readU64();\n      } else if (headByte === 0xd0) {\n        // int 8\n        object = this.readI8();\n      } else if (headByte === 0xd1) {\n        // int 16\n        object = this.readI16();\n      } else if (headByte === 0xd2) {\n        // int 32\n        object = this.readI32();\n      } else if (headByte === 0xd3) {\n        // int 64\n        object = this.readI64();\n      } else if (headByte === 0xd9) {\n        // str 8\n        const byteLength = this.lookU8();\n        object = this.decodeUtf8String(byteLength, 1);\n      } else if (headByte === 0xda) {\n        // str 16\n        const byteLength = this.lookU16();\n        object = this.decodeUtf8String(byteLength, 2);\n      } else if (headByte === 0xdb) {\n        // str 32\n        const byteLength = this.lookU32();\n        object = this.decodeUtf8String(byteLength, 4);\n      } else if (headByte === 0xdc) {\n        // array 16\n        const size = this.readU16();\n        if (size !== 0) {\n          this.pushArrayState(size);\n          this.complete();\n          continue DECODE;\n        } else {\n          object = [];\n        }\n      } else if (headByte === 0xdd) {\n        // array 32\n        const size = this.readU32();\n        if (size !== 0) {\n          this.pushArrayState(size);\n          this.complete();\n          continue DECODE;\n        } else {\n          object = [];\n        }\n      } else if (headByte === 0xde) {\n        // map 16\n        const size = this.readU16();\n        if (size !== 0) {\n          this.pushMapState(size);\n          this.complete();\n          continue DECODE;\n        } else {\n          object = {};\n        }\n      } else if (headByte === 0xdf) {\n        // map 32\n        const size = this.readU32();\n        if (size !== 0) {\n          this.pushMapState(size);\n          this.complete();\n          continue DECODE;\n        } else {\n          object = {};\n        }\n      } else if (headByte === 0xc4) {\n        // bin 8\n        const size = this.lookU8();\n        object = this.decodeBinary(size, 1);\n      } else if (headByte === 0xc5) {\n        // bin 16\n        const size = this.lookU16();\n        object = this.decodeBinary(size, 2);\n      } else if (headByte === 0xc6) {\n        // bin 32\n        const size = this.lookU32();\n        object = this.decodeBinary(size, 4);\n      } else if (headByte === 0xd4) {\n        // fixext 1\n        object = this.decodeExtension(1, 0);\n      } else if (headByte === 0xd5) {\n        // fixext 2\n        object = this.decodeExtension(2, 0);\n      } else if (headByte === 0xd6) {\n        // fixext 4\n        object = this.decodeExtension(4, 0);\n      } else if (headByte === 0xd7) {\n        // fixext 8\n        object = this.decodeExtension(8, 0);\n      } else if (headByte === 0xd8) {\n        // fixext 16\n        object = this.decodeExtension(16, 0);\n      } else if (headByte === 0xc7) {\n        // ext 8\n        const size = this.lookU8();\n        object = this.decodeExtension(size, 1);\n      } else if (headByte === 0xc8) {\n        // ext 16\n        const size = this.lookU16();\n        object = this.decodeExtension(size, 2);\n      } else if (headByte === 0xc9) {\n        // ext 32\n        const size = this.lookU32();\n        object = this.decodeExtension(size, 4);\n      } else {\n        throw new DecodeError(`Unrecognized type byte: ${prettyByte(headByte)}`);\n      }\n\n      this.complete();\n\n      const stack = this.stack;\n      while (stack.length > 0) {\n        // arrays and maps\n        const state = stack[stack.length - 1]!;\n        if (state.type === State.ARRAY) {\n          state.array[state.position] = object;\n          state.position++;\n          if (state.position === state.size) {\n            stack.pop();\n            object = state.array;\n          } else {\n            continue DECODE;\n          }\n        } else if (state.type === State.MAP_KEY) {\n          if (!isValidMapKeyType(object)) {\n            throw new DecodeError(\"The type of key must be string or number but \" + typeof object);\n          }\n          if (object === \"__proto__\") {\n            throw new DecodeError(\"The key __proto__ is not allowed\");\n          }\n\n          state.key = object;\n          state.type = State.MAP_VALUE;\n          continue DECODE;\n        } else {\n          // it must be `state.type === State.MAP_VALUE` here\n\n          state.map[state.key!] = object;\n          state.readCount++;\n\n          if (state.readCount === state.size) {\n            stack.pop();\n            object = state.map;\n          } else {\n            state.key = null;\n            state.type = State.MAP_KEY;\n            continue DECODE;\n          }\n        }\n      }\n\n      return object;\n    }\n  }\n\n  private readHeadByte(): number {\n    if (this.headByte === HEAD_BYTE_REQUIRED) {\n      this.headByte = this.readU8();\n      // console.log(\"headByte\", prettyByte(this.headByte));\n    }\n\n    return this.headByte;\n  }\n\n  private complete(): void {\n    this.headByte = HEAD_BYTE_REQUIRED;\n  }\n\n  private readArraySize(): number {\n    const headByte = this.readHeadByte();\n\n    switch (headByte) {\n      case 0xdc:\n        return this.readU16();\n      case 0xdd:\n        return this.readU32();\n      default: {\n        if (headByte < 0xa0) {\n          return headByte - 0x90;\n        } else {\n          throw new DecodeError(`Unrecognized array type byte: ${prettyByte(headByte)}`);\n        }\n      }\n    }\n  }\n\n  private pushMapState(size: number) {\n    if (size > this.maxMapLength) {\n      throw new DecodeError(`Max length exceeded: map length (${size}) > maxMapLengthLength (${this.maxMapLength})`);\n    }\n\n    this.stack.push({\n      type: State.MAP_KEY,\n      size,\n      key: null,\n      readCount: 0,\n      map: {},\n    });\n  }\n\n  private pushArrayState(size: number) {\n    if (size > this.maxArrayLength) {\n      throw new DecodeError(`Max length exceeded: array length (${size}) > maxArrayLength (${this.maxArrayLength})`);\n    }\n\n    this.stack.push({\n      type: State.ARRAY,\n      size,\n      array: new Array<unknown>(size),\n      position: 0,\n    });\n  }\n\n  private decodeUtf8String(byteLength: number, headerOffset: number): string {\n    if (byteLength > this.maxStrLength) {\n      throw new DecodeError(\n        `Max length exceeded: UTF-8 byte length (${byteLength}) > maxStrLength (${this.maxStrLength})`,\n      );\n    }\n\n    if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {\n      throw MORE_DATA;\n    }\n\n    const offset = this.pos + headerOffset;\n    let object: string;\n    if (this.stateIsMapKey() && this.keyDecoder?.canBeCached(byteLength)) {\n      object = this.keyDecoder.decode(this.bytes, offset, byteLength);\n    } else if (byteLength > TEXT_DECODER_THRESHOLD) {\n      object = utf8DecodeTD(this.bytes, offset, byteLength);\n    } else {\n      object = utf8DecodeJs(this.bytes, offset, byteLength);\n    }\n    this.pos += headerOffset + byteLength;\n    return object;\n  }\n\n  private stateIsMapKey(): boolean {\n    if (this.stack.length > 0) {\n      const state = this.stack[this.stack.length - 1]!;\n      return state.type === State.MAP_KEY;\n    }\n    return false;\n  }\n\n  private decodeBinary(byteLength: number, headOffset: number): Uint8Array {\n    if (byteLength > this.maxBinLength) {\n      throw new DecodeError(`Max length exceeded: bin length (${byteLength}) > maxBinLength (${this.maxBinLength})`);\n    }\n\n    if (!this.hasRemaining(byteLength + headOffset)) {\n      throw MORE_DATA;\n    }\n\n    const offset = this.pos + headOffset;\n    const object = this.bytes.subarray(offset, offset + byteLength);\n    this.pos += headOffset + byteLength;\n    return object;\n  }\n\n  private decodeExtension(size: number, headOffset: number): unknown {\n    if (size > this.maxExtLength) {\n      throw new DecodeError(`Max length exceeded: ext length (${size}) > maxExtLength (${this.maxExtLength})`);\n    }\n\n    const extType = this.view.getInt8(this.pos + headOffset);\n    const data = this.decodeBinary(size, headOffset + 1 /* extType */);\n    return this.extensionCodec.decode(data, extType, this.context);\n  }\n\n  private lookU8() {\n    return this.view.getUint8(this.pos);\n  }\n\n  private lookU16() {\n    return this.view.getUint16(this.pos);\n  }\n\n  private lookU32() {\n    return this.view.getUint32(this.pos);\n  }\n\n  private readU8(): number {\n    const value = this.view.getUint8(this.pos);\n    this.pos++;\n    return value;\n  }\n\n  private readI8(): number {\n    const value = this.view.getInt8(this.pos);\n    this.pos++;\n    return value;\n  }\n\n  private readU16(): number {\n    const value = this.view.getUint16(this.pos);\n    this.pos += 2;\n    return value;\n  }\n\n  private readI16(): number {\n    const value = this.view.getInt16(this.pos);\n    this.pos += 2;\n    return value;\n  }\n\n  private readU32(): number {\n    const value = this.view.getUint32(this.pos);\n    this.pos += 4;\n    return value;\n  }\n\n  private readI32(): number {\n    const value = this.view.getInt32(this.pos);\n    this.pos += 4;\n    return value;\n  }\n\n  private readU64(): number {\n    const value = getUint64(this.view, this.pos);\n    this.pos += 8;\n    return value;\n  }\n\n  private readI64(): number {\n    const value = getInt64(this.view, this.pos);\n    this.pos += 8;\n    return value;\n  }\n\n  private readF32() {\n    const value = this.view.getFloat32(this.pos);\n    this.pos += 4;\n    return value;\n  }\n\n  private readF64() {\n    const value = this.view.getFloat64(this.pos);\n    this.pos += 8;\n    return value;\n  }\n}\n", "import { Decoder } from \"./Decoder\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec\";\nimport type { ContextOf, SplitUndefined } from \"./context\";\n\nexport type DecodeOptions<ContextType = undefined> = Readonly<\n  Partial<{\n    extensionCodec: ExtensionCodecType<ContextType>;\n\n    /**\n     * Maximum string length.\n     *\n     * Defaults to 4_294_967_295 (UINT32_MAX).\n     */\n    maxStrLength: number;\n    /**\n     * Maximum binary length.\n     *\n     * Defaults to 4_294_967_295 (UINT32_MAX).\n     */\n    maxBinLength: number;\n    /**\n     * Maximum array length.\n     *\n     * Defaults to 4_294_967_295 (UINT32_MAX).\n     */\n    maxArrayLength: number;\n    /**\n     * Maximum map length.\n     *\n     * Defaults to 4_294_967_295 (UINT32_MAX).\n     */\n    maxMapLength: number;\n    /**\n     * Maximum extension length.\n     *\n     * Defaults to 4_294_967_295 (UINT32_MAX).\n     */\n    maxExtLength: number;\n  }>\n> &\n  ContextOf<ContextType>;\n\nexport const defaultDecodeOptions: DecodeOptions = {};\n\n/**\n * It decodes a single MessagePack object in a buffer.\n *\n * This is a synchronous decoding function.\n * See other variants for asynchronous decoding: {@link decodeAsync()}, {@link decodeStream()}, or {@link decodeArrayStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decode<ContextType = undefined>(\n  buffer: ArrayLike<number> | BufferSource,\n  options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): unknown {\n  const decoder = new Decoder(\n    options.extensionCodec,\n    (options as typeof options & { context: any }).context,\n    options.maxStrLength,\n    options.maxBinLength,\n    options.maxArrayLength,\n    options.maxMapLength,\n    options.maxExtLength,\n  );\n  return decoder.decode(buffer);\n}\n\n/**\n * It decodes multiple MessagePack objects in a buffer.\n * This is corresponding to {@link decodeMultiStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMulti<ContextType = undefined>(\n  buffer: ArrayLike<number> | BufferSource,\n  options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): Generator<unknown, void, unknown> {\n  const decoder = new Decoder(\n    options.extensionCodec,\n    (options as typeof options & { context: any }).context,\n    options.maxStrLength,\n    options.maxBinLength,\n    options.maxArrayLength,\n    options.maxMapLength,\n    options.maxExtLength,\n  );\n  return decoder.decodeMulti(buffer);\n}\n", "// utility for whatwg streams\n\n// The living standard of whatwg streams says\n// ReadableStream is also AsyncIterable, but\n// as of June 2019, no browser implements it.\n// See https://streams.spec.whatwg.org/ for details\nexport type ReadableStreamLike<T> = AsyncIterable<T> | ReadableStream<T>;\n\nexport function isAsyncIterable<T>(object: ReadableStreamLike<T>): object is AsyncIterable<T> {\n  return (object as any)[Symbol.asyncIterator] != null;\n}\n\nfunction assertNonNull<T>(value: T | null | undefined): asserts value is T {\n  if (value == null) {\n    throw new Error(\"Assertion Failure: value must not be null nor undefined\");\n  }\n}\n\nexport async function* asyncIterableFromStream<T>(stream: ReadableStream<T>): AsyncIterable<T> {\n  const reader = stream.getReader();\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) {\n        return;\n      }\n      assertNonNull(value);\n      yield value;\n    }\n  } finally {\n    reader.releaseLock();\n  }\n}\n\nexport function ensureAsyncIterable<T>(streamLike: ReadableStreamLike<T>): AsyncIterable<T> {\n  if (isAsyncIterable(streamLike)) {\n    return streamLike;\n  } else {\n    return asyncIterableFromStream(streamLike);\n  }\n}\n", "import { Decoder } from \"./Decoder\";\nimport { ensureAsyncIterable } from \"./utils/stream\";\nimport { defaultDecodeOptions } from \"./decode\";\nimport type { ReadableStreamLike } from \"./utils/stream\";\nimport type { DecodeOptions } from \"./decode\";\nimport type { SplitUndefined } from \"./context\";\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\n export async function decodeAsync<ContextType>(\n  streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n  options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): Promise<unknown> {\n  const stream = ensureAsyncIterable(streamLike);\n\n  const decoder = new Decoder(\n    options.extensionCodec,\n    (options as typeof options & { context: any }).context,\n    options.maxStrLength,\n    options.maxBinLength,\n    options.maxArrayLength,\n    options.maxMapLength,\n    options.maxExtLength,\n  );\n  return decoder.decodeAsync(stream);\n}\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\n export function decodeArrayStream<ContextType>(\n  streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n  options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n  const stream = ensureAsyncIterable(streamLike);\n\n  const decoder = new Decoder(\n    options.extensionCodec,\n    (options as typeof options & { context: any }).context,\n    options.maxStrLength,\n    options.maxBinLength,\n    options.maxArrayLength,\n    options.maxMapLength,\n    options.maxExtLength,\n  );\n\n  return decoder.decodeArrayStream(stream);\n}\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMultiStream<ContextType>(\n  streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n  options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n  const stream = ensureAsyncIterable(streamLike);\n\n  const decoder = new Decoder(\n    options.extensionCodec,\n    (options as typeof options & { context: any }).context,\n    options.maxStrLength,\n    options.maxBinLength,\n    options.maxArrayLength,\n    options.maxMapLength,\n    options.maxExtLength,\n  );\n\n  return decoder.decodeStream(stream);\n}\n\n/**\n * @deprecated Use {@link decodeMultiStream()} instead.\n */\nexport function decodeStream<ContextType>(\n  streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n  options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n  return decodeMultiStream(streamLike, options);\n}\n", "// Main Functions:\n\nimport { encode } from \"./encode\";\nexport { encode };\nimport type { EncodeOptions } from \"./encode\";\nexport type { EncodeOptions };\n\nimport { decode, decodeMulti } from \"./decode\";\nexport { decode, decodeMulti };\nimport type { DecodeOptions } from \"./decode\";\nexport { DecodeOptions };\n\nimport { decodeAsync, decodeArrayStream, decodeMultiStream, decodeStream } from \"./decodeAsync\";\nexport { decodeAsync, decodeArrayStream, decodeMultiStream, decodeStream };\n\nimport { Decoder, DataViewIndexOutOfBoundsError } from \"./Decoder\";\nimport { DecodeError } from \"./DecodeError\";\nexport { Decoder, DecodeError, DataViewIndexOutOfBoundsError };\n\nimport { Encoder } from \"./Encoder\";\nexport { Encoder };\n\n// Utilitiies for Extension Types:\n\nimport { ExtensionCodec } from \"./ExtensionCodec\";\nexport { ExtensionCodec };\nimport type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType } from \"./ExtensionCodec\";\nexport type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType };\nimport { ExtData } from \"./ExtData\";\nexport { ExtData };\n\nimport {\n  EXT_TIMESTAMP,\n  encodeDateToTimeSpec,\n  encodeTimeSpecToTimestamp,\n  decodeTimestampToTimeSpec,\n  encodeTimestampExtension,\n  decodeTimestampExtension,\n} from \"./timestamp\";\nexport {\n  EXT_TIMESTAMP,\n  encodeDateToTimeSpec,\n  encodeTimeSpecToTimestamp,\n  decodeTimestampToTimeSpec,\n  encodeTimestampExtension,\n  decodeTimestampExtension,\n};\n", "/**\n * Custom Error classes that shall be raised by webR.\n * @module Error\n */\n\n/**\n * A general error raised by webR.\n */\nexport class WebRError extends Error {\n  constructor(msg: string) {\n    super(msg);\n    this.name = this.constructor.name;\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Exceptions raised on the webR worker thread that have been forwarded to the\n * main thread through the communication channel.\n */\nexport class WebRWorkerError extends WebRError { }\n\n/**\n * Exceptions related to issues with the webR communication channel.\n */\nexport class WebRChannelError extends WebRError { }\n\n/**\n * Exceptions related to issues with webR object payloads.\n */\nexport class WebRPayloadError extends WebRError { }\n", "import { WebRError } from './error';\n\ninterface 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\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 WebRError('Cannot determine runtime environment');\n}\n", "import type { RPtr, RTypeNumber } from './robj';\nimport type { RObject, RList } from './robj-worker';\nimport type { EvalROptions } from './webr-chan';\nimport type { UnwindProtectException } from './utils-r';\n\nexport interface Module extends EmscriptenModule {\n  /* Add mkdirTree to FS namespace, missing from @types/emscripten at the\n   * time of writing.\n   */\n  FS: typeof FS & {\n    _mount: typeof FS.mount;\n    mkdirTree(path: string): void;\n    filesystems: {\n      [key: string]: Emscripten.FileSystemType;\n    }\n  };\n  ENV: { [key: string]: string };\n  GOT: {\n    [key: string]: { required: boolean; value: number };\n  }\n  createLazyFilesystem: () => void;\n  monitorRunDependencies: (n: number) => void;\n  noImageDecoding: boolean;\n  noAudioDecoding: boolean;\n  noWasmDecoding: boolean;\n  setPrompt: (prompt: string) => void;\n  downloadFileContent: (\n    URL: string,\n    headers?: Array<string>\n  ) => {\n    status: number;\n    response: string | ArrayBuffer;\n  };\n  mountImageUrl: (url: string, mountpoint: string) => void;\n  mountImagePath: (path: string, mountpoint: string) => void;\n  // Exported Emscripten JS API\n  allocateUTF8: typeof allocateUTF8;\n  allocateUTF8OnStack: typeof allocateUTF8OnStack;\n  getValue: typeof getValue;\n  setValue: typeof setValue;\n  UTF8ToString: typeof UTF8ToString;\n  callMain: (args: string[]) => void;\n  getWasmTableEntry: (entry: number) => (...args: any[]) => RPtr;\n  // R symbols from Rinternals.h\n  _ATTRIB: (ptr: RPtr) => RPtr;\n  _CAR: (ptr: RPtr) => RPtr;\n  _CDR: (ptr: RPtr) => RPtr;\n  _CLOENV: (ptr: RPtr) => RPtr;\n  _COMPLEX: (ptr: RPtr) => RPtr;\n  _FRAME: (ptr: RPtr) => RPtr;\n  _INTEGER: (ptr: RPtr) => RPtr;\n  _INTERNAL: (ptr: RPtr) => RPtr;\n  _LENGTH: (ptr: RPtr) => number;\n  _LOGICAL: (ptr: RPtr) => RPtr;\n  _PRINTNAME: (ptr: RPtr) => RPtr;\n  _R_CHAR: (ptr: RPtr) => RPtr;\n  _RAW: (ptr: RPtr) => RPtr;\n  _REAL: (ptr: RPtr) => RPtr;\n  _SETCAR: (x: RPtr, y: RPtr) => void;\n  _STRING_ELT: (ptr: RPtr, idx: number) => RPtr;\n  _STRING_PTR: (ptr: RPtr) => RPtr;\n  _SYMVALUE: (ptr: RPtr) => RPtr;\n  _TAG: (ptr: RPtr) => RPtr;\n  _TYPEOF: (ptr: RPtr) => RPtr;\n  _VECTOR_ELT: (ptr: RPtr, idx: number) => RPtr;\n  _R_lsInternal3: (env: RPtr, all: number, sorted: number) => RPtr;\n  _R_MakeExternalPtr: (p: number, tag: RPtr, prot: RPtr) => RPtr;\n  _R_NewEnv: (enclos: RPtr, hash: number, size: number) => RPtr;\n  _R_ParseEvalString: (code: number, env: RPtr) => RPtr;\n  _R_PreserveObject: (ptr: RPtr) => void;\n  _R_ReleaseObject: (ptr: RPtr) => void;\n  _R_ReplDLLinit: () => void;\n  _R_ReplDLLdo1: () => number;\n  _Rf_ScalarReal: (n: number) => RPtr;\n  _Rf_ScalarLogical: (l: number) => RPtr;\n  _Rf_ScalarInteger: (n: number) => RPtr;\n  _Rf_ScalarString: (s: string) => RPtr;\n  _Rf_allocList: (len: number) => RPtr;\n  _Rf_allocVector: (type: RTypeNumber, len: number) => RPtr;\n  _Rf_defineVar: (symbol: RPtr, value: RPtr, env: RPtr) => void;\n  _Rf_error: (msg: EmPtr) => void;\n  _Rf_eval: (call: RPtr, env: RPtr) => RPtr;\n  _Rf_findVarInFrame: (rho: RPtr, symbol: RPtr) => RPtr;\n  _Rf_listAppend: (source: RPtr, target: RPtr) => RPtr;\n  _Rf_getAttrib: (ptr1: RPtr, ptr2: RPtr) => RPtr;\n  _Rf_initialize_R: (argc: number, argv: RPtr) => void;\n  _Rf_install: (ptr: number) => RPtr;\n  _Rf_installTrChar: (name: RPtr) => RPtr;\n  _Rf_lang1: (ptr1: RPtr) => RPtr;\n  _Rf_lang2: (ptr1: RPtr, ptr2: RPtr) => RPtr;\n  _Rf_lang3: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr) => RPtr;\n  _Rf_lang4: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr, ptr4: RPtr) => RPtr;\n  _Rf_lang5: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr, ptr4: RPtr, ptr5: RPtr) => RPtr;\n  _Rf_lang6: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr, ptr4: RPtr, ptr5: RPtr, ptr6: RPtr) => RPtr;\n  _Rf_mkChar: (ptr: number) => RPtr;\n  _Rf_mkString: (ptr: number) => RPtr;\n  _Rf_onintr: () => void;\n  _Rf_protect: (ptr: RPtr) => RPtr;\n  _R_ContinueUnwind: (cont: RPtr) => never;\n  _R_ProtectWithIndex: (ptr1: RPtr, ptr2: RPtr) => void;\n  _R_Reprotect: (ptr1: RPtr, ptr2: RPtr) => void;\n  _Rf_setAttrib: (ptr1: RPtr, ptr2: RPtr, ptr3: RPtr) => RPtr;\n  _Rf_unprotect: (n: number) => void;\n  _Rf_unprotect_ptr: (ptr: RPtr) => void;\n  _DLLbuf: RPtr;\n  _DLLbufp: RPtr;\n  _R_BaseEnv: RPtr;\n  _R_BracketSymbol: RPtr;\n  _R_Bracket2Symbol: RPtr;\n  _R_DollarSymbol: RPtr;\n  _R_EmptyEnv: RPtr;\n  _R_FalseValue: RPtr;\n  _R_GlobalEnv: RPtr;\n  _R_Interactive: RPtr;\n  _R_NaInt: RPtr;\n  _R_NaReal: RPtr;\n  _R_NaString: RPtr;\n  _R_LogicalNAValue: RPtr;\n  _R_NilValue: RPtr;\n  _R_TrueValue: RPtr;\n  _R_NamesSymbol: RPtr;\n  _R_UnboundValue: RPtr;\n  _SET_STRING_ELT: (ptr: RPtr, idx: number, val: RPtr) => void;\n  _SET_VECTOR_ELT: (ptr: RPtr, idx: number, val: RPtr) => void;\n  _setup_Rmainloop: () => void;\n  _strcpy: (dest: RPtr, src: RPtr) => number;\n  // TODO: Namespace all webR properties\n  webr: {\n    UnwindProtectException: typeof UnwindProtectException;\n    canvas: {\n      [key: number]: {\n        ctx: OffscreenCanvasRenderingContext2D;\n        offscreen: OffscreenCanvas;\n        transmit: boolean;\n      };\n    };\n    readConsole: () => number;\n    resolveInit: () => void;\n    handleEvents: () => void;\n    dataViewer: (data: RPtr, title: string) => void;\n    evalJs: (code: RPtr) => unknown;\n    evalR: (expr: string | RObject, options?: EvalROptions) => RObject;\n    captureR: (expr: string | RObject, options: EvalROptions) => {\n      result: RObject,\n      output: RList,\n      images: ImageBitmap[],\n    };\n    setTimeoutWasm: (ptr: EmPtr, data: EmPtr, delay: number) => void;\n  };\n}\n\nexport const Module = {} as Module;\n\nexport type EmPtr = ReturnType<typeof Module.allocateUTF8>;\n\nexport interface DictEmPtrs {\n  [key: string]: EmPtr;\n}\n\nexport function dictEmFree(dict: { [key: string | number]: EmPtr }) {\n  Object.keys(dict).forEach((key) => Module._free(dict[key]));\n}\n", "/**\n * Common module for working with R objects.\n * @module RObject\n */\nimport * as RMain from './robj-main';\nimport * as RWorker from './robj-worker';\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[RType];\n\n/** @internal */\nexport type RCtor = 'object' | 'dataframe';\n\nexport type Complex = {\n  re: number;\n  im: number;\n};\n\nexport type WebRDataRaw =\n  | number\n  | string\n  | boolean\n  | undefined\n  | null\n  | void\n  | Complex\n  | Error\n  | ArrayBuffer\n  | ArrayBufferView\n  | ImageBitmap\n  | Array<WebRDataRaw>\n  | Map<WebRDataRaw, WebRDataRaw>\n  | Set<WebRDataRaw>\n  | { [key: string]: WebRDataRaw };\n\nexport type NamedEntries<T> = [string | null, T][];\nexport type NamedObject<T> = { [key: string]: T };\n\n/**\n * A union of JavaScript types that are able to be converted into an R object.\n *\n * `WebRData` is used both as a general input argument for R object construction\n * and also as a general return type when converting R objects into JavaScript.\n *\n */\nexport type WebRData =\n  | RMain.RObject\n  | RWorker.RObjectBase\n  | RWorker.RObject\n  | WebRDataRaw\n  | WebRDataJs\n  | WebRData[]\n  | ArrayBuffer\n  | ArrayBufferView\n  | { [key: string]: WebRData };\n\n/**\n * A subset of {@link WebRData} for JavaScript objects that can be converted\n * into R atomic vectors.\n * @typeParam T The JavaScript scalar type associated with the atomic vector.\n */\nexport type WebRDataAtomic<T> =\n  | WebRDataScalar<T>\n  | WebRDataJsAtomic<T>\n  | NamedObject<T | null>\n  | ([T] extends [number] ? ArrayBuffer | ArrayBufferView | (number | null)[] : (T | null)[]);\n\n/**\n * `WebRDataJs` objects form a tree structure, used when serialising R objects\n * into a JavaScript representation.\n *\n * Nested R objects are serialised using the {@link WebRDataJsNode} type,\n * forming branches in the resulting tree structure, with leaves formed by the\n * remaining types.\n */\nexport type WebRDataJs =\n  | WebRDataJsNull\n  | WebRDataJsString\n  | WebRDataJsSymbol\n  | WebRDataJsNode\n  | WebRDataJsAtomic<RWorker.atomicType>;\n\nexport type WebRDataJsNull = {\n  type: 'null';\n};\n\nexport type WebRDataJsString = {\n  type: 'string';\n  value: string;\n};\n\nexport type WebRDataJsSymbol = {\n  type: 'symbol';\n  printname: string | null;\n  symvalue: RPtr | null;\n  internal: RPtr | null;\n};\n\nexport type WebRDataJsNode = {\n  type: 'list' | 'pairlist' | 'environment';\n  names: (string | null)[] | null;\n  values: (WebRDataRaw | RWorker.RObject | RMain.RObject | WebRDataJs)[];\n};\n\nexport type WebRDataJsAtomic<T> = {\n  type: 'logical' | 'integer' | 'double' | 'complex' | 'character' | 'raw';\n  names: (string | null)[] | null;\n  values: (T | null)[];\n};\n\n/**\n * Test for a {@link WebRDataJs} instance.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of a {@link WebRDataJs}.\n */\nexport function isWebRDataJs(value: any): value is WebRDataJs {\n  return !!value && typeof value === 'object'\n    && Object.keys(RTypeMap).includes(value.type as string);\n}\n\n/**\n * A subset of WebRData for scalar JavaScript objects.\n */\nexport type WebRDataScalar<T> = T | RMain.RObject | RWorker.RObjectBase;\n\n/**\n * Test if an object is of type {@link Complex}.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is of type {@link Complex}.\n */\nexport function isComplex(value: any): value is Complex {\n  return !!value && typeof value === 'object' && 're' in value && 'im' in value;\n}\n", "import { Module, DictEmPtrs, dictEmFree } from './emscripten';\nimport { WebRData, RPtr } from './robj';\nimport { RObject, REnvironment, RHandle, handlePtr } from './robj-worker';\n\nexport function protect<T extends RHandle>(x: T): T {\n  Module._Rf_protect(handlePtr(x));\n  return x;\n}\n\nexport function protectInc<T extends RHandle>(x: T, prot: { n: number }): T {\n  Module._Rf_protect(handlePtr(x));\n  ++prot.n;\n  return x;\n}\n\nexport function protectWithIndex(x: RHandle): { loc: number; ptr: RPtr } {\n  // Integer size hardcoded to 4 bytes. This is fine but is there a\n  // way to call sizeof?\n  const pLoc = Module._malloc(4);\n\n  Module._R_ProtectWithIndex(handlePtr(x), pLoc);\n  const loc = Module.getValue(pLoc, 'i32');\n\n  return { loc: loc, ptr: pLoc };\n}\n\nexport function unprotectIndex(index: { ptr: RPtr }): void {\n  Module._Rf_unprotect(1);\n  Module._free(index.ptr);\n}\n\nexport function reprotect<T extends RHandle>(x: T, index: { loc: number; ptr: RPtr }): T {\n  Module._R_Reprotect(handlePtr(x), index.loc);\n  return x;\n}\n\nexport function unprotect(n: number) {\n  Module._Rf_unprotect(n);\n}\n\n// rlang convention: `env`-prefixed functions consistently take `env`\n// as first argument\nexport function envPoke(env: RHandle, sym: RHandle, value: RHandle) {\n  Module._Rf_defineVar(handlePtr(sym), handlePtr(value), handlePtr(env));\n}\n\nexport function parseEvalBare(code: string, env: WebRData): RObject {\n  const strings: DictEmPtrs = {};\n  const prot = { n: 0 };\n\n  try {\n    const envObj = new REnvironment(env);\n    protectInc(envObj, prot);\n\n    strings.code = Module.allocateUTF8(code);\n\n    const out = Module._R_ParseEvalString(strings.code, envObj.ptr);\n    return RObject.wrap(out);\n  } finally {\n    dictEmFree(strings);\n    unprotect(prot.n);\n  }\n}\n\nexport class UnwindProtectException extends Error {\n  cont: RPtr;\n  constructor(message: string, cont: RPtr) {\n    super(message);\n    this.name = 'UnwindProtectException';\n    this.cont = cont;\n  }\n}\n\nexport function safeEval(call: RHandle, env: RHandle): RPtr {\n  return Module.getWasmTableEntry(Module.GOT.ffi_safe_eval.value)(\n    handlePtr(call),\n    handlePtr(env)\n  );\n}\n", "/**\n * Module for working with R objects on the worker thead.\n * @module RWorker\n */\nimport { Module } from './emscripten';\nimport { Complex, isComplex, NamedEntries, NamedObject, WebRDataRaw, WebRDataScalar } from './robj';\nimport { WebRData, WebRDataAtomic, RPtr, RType, RTypeMap, RTypeNumber, RCtor } from './robj';\nimport { isWebRDataJs, WebRDataJs, WebRDataJsAtomic, WebRDataJsNode } from './robj';\nimport { WebRDataJsNull, WebRDataJsString, WebRDataJsSymbol } from './robj';\nimport { envPoke, parseEvalBare, protect, protectInc, unprotect } from './utils-r';\nimport { protectWithIndex, reprotect, unprotectIndex, safeEval } from './utils-r';\nimport { EvalROptions, ShelterID, isShelterID } from './webr-chan';\n\nexport type RHandle = RObject | RPtr;\n\nexport function handlePtr(x: RHandle): RPtr {\n  if (isRObject(x)) {\n    return x.ptr;\n  } else {\n    return x;\n  }\n}\n\n// Throw if an R object does not match a certain R type\nfunction assertRType(obj: RObjectBase, type: RType) {\n  if (Module._TYPEOF(obj.ptr) !== RTypeMap[type]) {\n    throw new Error(`Unexpected object type \"${obj.type()}\" when expecting type \"${type}\"`);\n  }\n}\n\n// TODO: Shelter should be a dictionary not an array\nexport const shelters = new Map<ShelterID, RPtr[]>();\n\n// Use this for implicit protection of objects sent to the main\n// thread. Currently uses the precious list but could use a different\n// mechanism in the future. Unprotection is explicit through\n// `Shelter.destroy()`.\nexport function keep(shelter: ShelterID, x: RHandle) {\n  const ptr = handlePtr(x);\n  Module._R_PreserveObject(ptr);\n\n  // TODO: Remove when shelter transition is complete\n  if (shelter === undefined) {\n    return;\n  }\n\n  if (isShelterID(shelter)) {\n    shelters.get(shelter)!.push(ptr);\n    return;\n  }\n\n  throw new Error('Unexpected shelter type ' + typeof shelter);\n}\n\n// Frees objects preserved with `keep()`. This method is called by\n// users in the main thread to release objects that were automatically\n// protected before being sent away.\nexport function destroy(shelter: ShelterID, x: RHandle) {\n  const ptr = handlePtr(x);\n  Module._R_ReleaseObject(ptr);\n\n  const objs: RPtr[] = shelters.get(shelter)!;\n  const loc = objs.indexOf(ptr);\n\n  if (loc < 0) {\n    throw new Error(\"Can't find object in shelter.\");\n  }\n\n  objs.splice(loc, 1);\n}\n\nexport function purge(shelter: ShelterID) {\n  const ptrs: RPtr[] = shelters.get(shelter)!;\n\n  for (const ptr of ptrs) {\n    try {\n      Module._R_ReleaseObject(ptr);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  shelters.set(shelter, []);\n}\n\nexport interface ToJsOptions {\n  depth: number;\n}\n\nexport type Nullable<T> = T | RNull;\n\nfunction newObjectFromData(obj: WebRData): RObject {\n  // Conversion of WebRDataJs type JS objects\n  if (isWebRDataJs(obj)) {\n    return new (getRWorkerClass(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 RNull();\n  }\n\n  // Direct conversion of scalar JS values\n  if (obj === null) {\n    return new RLogical({ type: 'logical', names: null, values: [null] });\n  }\n  if (typeof obj === 'boolean') {\n    return new RLogical(obj);\n  }\n  if (typeof obj === 'number') {\n    return new RDouble(obj);\n  }\n  if (typeof obj === 'string') {\n    return new RCharacter(obj);\n  }\n  if (isComplex(obj)) {\n    return new RComplex(obj);\n  }\n\n  // Conversion of composite JS objects\n  if (ArrayBuffer.isView(obj) || obj instanceof ArrayBuffer) {\n    return new RRaw(obj);\n  }\n  if (Array.isArray(obj)) {\n    return newObjectFromArray(obj);\n  }\n  // Any other JS object shape is reserved for creating an R `data.frame`\n  if (typeof obj === 'object') {\n    return RDataFrame.fromObject(obj);\n  }\n\n  throw new Error('Robj construction for this JS object is not yet supported');\n}\n\nfunction newObjectFromArray(arr: WebRData[]): RObject {\n  const prot = { n: 0 };\n\n  // Is this a D3 formatted data frame?\n  const hasObjects = arr.every((v) => v && typeof v === 'object' && !isRObject(v) && !isComplex(v));\n  if (hasObjects) {\n    const _arr = arr as { [key: string]: WebRData }[];\n    const isConsistent = _arr.every((a) => {\n      return Object.keys(a).filter((k) => !Object.keys(_arr[0]).includes(k)).length === 0 &&\n        Object.keys(_arr[0]).filter((k) => !Object.keys(a).includes(k)).length === 0;\n    });\n    const isAtomic = _arr.every((a) => Object.values(a).every((v) => {\n      return isAtomicType(v) || isRVectorAtomic(v);\n    }));\n    if (isConsistent && isAtomic) {\n      return RDataFrame.fromD3(_arr);\n    }\n  }\n\n  // Not D3 formatted - Can we shortcut and convert directly?\n  if (arr.every((v) => typeof v === 'boolean' || v === null)) {\n    return new RLogical(arr as (boolean | null)[]);\n  }\n  if (arr.every((v) => typeof v === 'number' || v === null)) {\n    return new RDouble(arr as (number | null)[]);\n  }\n  if (arr.every((v) => typeof v === 'string' || v === null)) {\n    return new RCharacter(arr as (string | null)[]);\n  }\n\n  // Not D3 & mixed types: use R's built in object coercion with c() so as to\n  // match R's built in coercion rules\n  try {\n    const call = new RCall([new RSymbol('c'), ...arr]);\n    protectInc(call, prot);\n    return call.eval();\n  } finally {\n    unprotect(prot.n);\n  }\n}\n\nexport class RObjectBase {\n  ptr: RPtr;\n  constructor(ptr: RPtr) {\n    this.ptr = ptr;\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\nexport class RObject extends RObjectBase {\n  constructor(data: WebRData) {\n    if (!(data instanceof RObjectBase)) {\n      return newObjectFromData(data);\n    }\n\n    super(data.ptr);\n  }\n\n  static wrap<T extends typeof RObject>(this: T, ptr: RPtr): InstanceType<T> {\n    const typeNumber = Module._TYPEOF(ptr) as RTypeNumber;\n    const type = Object.keys(RTypeMap)[Object.values(RTypeMap).indexOf(typeNumber)];\n    return new (getRWorkerClass(type as RType))(new RObjectBase(ptr)) as InstanceType<T>;\n  }\n\n  get [Symbol.toStringTag](): string {\n    return `RObject:${this.type()}`;\n  }\n\n  /** @internal */\n  static getPersistentObject(prop: keyof typeof objs): unknown {\n    return objs[prop];\n  }\n\n  /** @internal */\n  getPropertyValue(prop: keyof this): unknown {\n    return this[prop];\n  }\n\n  inspect(): void {\n    parseEvalBare('.Internal(inspect(x))', { x: this });\n  }\n\n  isNull(): this is RNull {\n    return Module._TYPEOF(this.ptr) === RTypeMap.null;\n  }\n\n  isNa(): boolean {\n    try {\n      const result = parseEvalBare('is.na(x)', { x: this }) as RLogical;\n      protect(result);\n      return result.toBoolean();\n    } finally {\n      unprotect(1);\n    }\n  }\n\n  isUnbound(): boolean {\n    return this.ptr === objs.unboundValue.ptr;\n  }\n\n  attrs(): Nullable<RPairlist> {\n    return RPairlist.wrap(Module._ATTRIB(this.ptr));\n  }\n\n  class(): RCharacter {\n    const prot = { n: 0 };\n    const classCall = new RCall([new RSymbol('class'), this]);\n    protectInc(classCall, prot);\n    try {\n      return classCall.eval() as RCharacter;\n    } finally {\n      unprotect(prot.n);\n    }\n  }\n\n  setNames(values: (string | null)[] | null): this {\n    let namesObj: RObject;\n\n    if (values === null) {\n      namesObj = objs.null;\n    } else if (Array.isArray(values) && values.every((v) => typeof v === 'string' || v === null)) {\n      namesObj = new RCharacter(values);\n    } else {\n      throw new Error('Argument to setNames must be null or an Array of strings or null');\n    }\n\n    // `setAttrib()` protects its inputs\n    Module._Rf_setAttrib(this.ptr, objs.namesSymbol.ptr, namesObj.ptr);\n    return this;\n  }\n\n  names(): (string | null)[] | null {\n    const names = RCharacter.wrap(Module._Rf_getAttrib(this.ptr, objs.namesSymbol.ptr));\n    if (names.isNull()) {\n      return null;\n    } else {\n      return names.toArray();\n    }\n  }\n\n  includes(name: string) {\n    const names = this.names();\n    return names && names.includes(name);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  toJs(options: ToJsOptions = { depth: 0 }, depth = 1): WebRDataJs {\n    throw new Error('This R object cannot be converted to JS');\n  }\n\n  subset(prop: number | string): RObject {\n    return this.#slice(prop, objs.bracketSymbol.ptr);\n  }\n\n  get(prop: number | string): RObject {\n    return this.#slice(prop, objs.bracket2Symbol.ptr);\n  }\n\n  getDollar(prop: string): RObject {\n    return this.#slice(prop, objs.dollarSymbol.ptr);\n  }\n\n  #slice(prop: number | string, op: RPtr): RObject {\n    const prot = { n: 0 };\n\n    try {\n      const idx = new RObject(prop);\n      protectInc(idx, prot);\n\n      const call = Module._Rf_lang3(op, this.ptr, idx.ptr);\n      protectInc(call, prot);\n\n      return RObject.wrap(safeEval(call, objs.baseEnv));\n    } finally {\n      unprotect(prot.n);\n    }\n  }\n\n  pluck(...path: (string | number)[]): RObject | undefined {\n    const index = protectWithIndex(objs.null);\n\n    try {\n      const getter = (obj: RObject, prop: string | number): RObject => {\n        const out = obj.get(prop);\n        return reprotect(out, index);\n      };\n      const result = path.reduce(getter, this);\n\n      return result.isNull() ? undefined : result;\n    } finally {\n      unprotectIndex(index);\n    }\n  }\n\n  set(prop: string | number, value: RObject | WebRDataRaw): RObject {\n    const prot = { n: 0 };\n\n    try {\n      const idx = new RObject(prop);\n      protectInc(idx, prot);\n\n      const valueObj = new RObject(value);\n      protectInc(valueObj, prot);\n\n      const assign = new RSymbol('[[<-');\n      const call = Module._Rf_lang4(assign.ptr, this.ptr, idx.ptr, valueObj.ptr);\n      protectInc(call, prot);\n\n      return RObject.wrap(safeEval(call, objs.baseEnv));\n    } finally {\n      unprotect(prot.n);\n    }\n  }\n\n  /** @internal */\n  static getMethods(obj: RObject) {\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\nexport class RNull extends RObject {\n  constructor() {\n    super(new RObjectBase(Module.getValue(Module._R_NilValue, '*')));\n    return this;\n  }\n\n  toJs(): WebRDataJsNull {\n    return { type: 'null' };\n  }\n}\n\nexport class RSymbol extends RObject {\n  // Note that symbols don't need to be protected. This also means\n  // that allocating symbols in loops with random data is probably a\n  // bad idea because this leaks memory.\n  constructor(x: WebRDataScalar<string>) {\n    if (x instanceof RObjectBase) {\n      assertRType(x, 'symbol');\n      super(x);\n      return;\n    }\n    const name = Module.allocateUTF8(x as string);\n    try {\n      super(new RObjectBase(Module._Rf_install(name)));\n    } finally {\n      Module._free(name);\n    }\n  }\n\n  toJs(): WebRDataJsSymbol {\n    const obj = this.toObject();\n    return {\n      type: 'symbol',\n      printname: obj.printname,\n      symvalue: obj.symvalue,\n      internal: obj.internal,\n    };\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  toString(): string {\n    return this.printname().toString();\n  }\n\n  printname(): RString {\n    return RString.wrap(Module._PRINTNAME(this.ptr));\n  }\n  symvalue(): RObject {\n    return RObject.wrap(Module._SYMVALUE(this.ptr));\n  }\n  internal(): RObject {\n    return RObject.wrap(Module._INTERNAL(this.ptr));\n  }\n}\n\nexport class RPairlist extends RObject {\n  constructor(val: WebRData) {\n    if (val instanceof RObjectBase) {\n      assertRType(val, 'pairlist');\n      super(val);\n      return this;\n    }\n\n    const prot = { n: 0 };\n\n    try {\n      const { names, values } = toWebRData(val);\n\n      const list = RPairlist.wrap(Module._Rf_allocList(values.length));\n      protectInc(list, prot);\n\n      for (\n        let [i, next] = [0, list as Nullable<RPairlist>];\n        !next.isNull();\n        [i, next] = [i + 1, next.cdr()]\n      ) {\n        next.setcar(new RObject(values[i]));\n      }\n\n      list.setNames(names);\n      super(list);\n    } finally {\n      unprotect(prot.n);\n    }\n  }\n\n  get length(): number {\n    return this.toArray().length;\n  }\n\n  toArray(options: ToJsOptions = { depth: 1 }): WebRData[] {\n    return this.toJs(options).values;\n  }\n\n  toObject({\n    allowDuplicateKey = true,\n    allowEmptyKey = false,\n    depth = -1,\n  } = {}): NamedObject<WebRData> {\n    const entries = this.entries({ depth });\n    const keys = entries.map(([k,]) => 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    ) as NamedObject<WebRData>;\n  }\n\n  entries(options: ToJsOptions = { depth: 1 }): NamedEntries<WebRData> {\n    const obj = this.toJs(options);\n    return obj.values.map((v, i) => [obj.names ? obj.names[i] : null, v]);\n  }\n\n  toJs(options: ToJsOptions = { depth: 0 }, depth = 1): WebRDataJsNode {\n    const namesArray: string[] = [];\n    let hasNames = false;\n    const values: WebRDataJsNode['values'] = [];\n\n    for (let next = this as Nullable<RPairlist>; !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.toString());\n      }\n      if (options.depth && depth >= options.depth) {\n        values.push(next.car());\n      } else {\n        values.push(next.car().toJs(options, depth + 1));\n      }\n    }\n    const names = hasNames ? namesArray : null;\n    return { type: 'pairlist', names, values };\n  }\n\n  includes(name: string): boolean {\n    return name in this.toObject();\n  }\n\n  setcar(obj: RObject): void {\n    Module._SETCAR(this.ptr, obj.ptr);\n  }\n\n  car(): RObject {\n    return RObject.wrap(Module._CAR(this.ptr));\n  }\n\n  cdr(): Nullable<RPairlist> {\n    return RObject.wrap(Module._CDR(this.ptr)) as Nullable<RPairlist>;\n  }\n\n  tag(): Nullable<RSymbol> {\n    return RObject.wrap(Module._TAG(this.ptr)) as Nullable<RSymbol>;\n  }\n}\n\nexport class RCall extends RObject {\n  constructor(val: WebRData) {\n    if (val instanceof RObjectBase) {\n      assertRType(val, 'call');\n      super(val);\n      return this;\n    }\n    const prot = { n: 0 };\n\n    try {\n      const { values } = toWebRData(val);\n      const objs = values.map((value) => protectInc(new RObject(value), prot));\n      const call = RCall.wrap(Module._Rf_allocVector(RTypeMap.call, values.length));\n      protectInc(call, prot);\n\n      for (\n        let [i, next] = [0, call as Nullable<RPairlist>];\n        !next.isNull();\n        [i, next] = [i + 1, next.cdr()]\n      ) {\n        next.setcar(objs[i]);\n      }\n      super(call);\n    } finally {\n      unprotect(prot.n);\n    }\n  }\n\n  setcar(obj: RObject): void {\n    Module._SETCAR(this.ptr, obj.ptr);\n  }\n\n  car(): RObject {\n    return RObject.wrap(Module._CAR(this.ptr));\n  }\n\n  cdr(): Nullable<RPairlist> {\n    return RObject.wrap(Module._CDR(this.ptr)) as Nullable<RPairlist>;\n  }\n\n  eval(): RObject {\n    return Module.webr.evalR(this, { env: objs.baseEnv });\n  }\n\n  capture(options: EvalROptions = {}) {\n    return Module.webr.captureR(this, options);\n  }\n\n  deparse(): string {\n    const prot = { n: 0 };\n    try {\n      const call = Module._Rf_lang2(\n        new RSymbol('deparse1').ptr,\n        Module._Rf_lang2(new RSymbol('quote').ptr, this.ptr)\n      );\n      protectInc(call, prot);\n\n      const val = RCharacter.wrap(safeEval(call, objs.baseEnv));\n      protectInc(val, prot);\n\n      return val.toString();\n    } finally {\n      unprotect(prot.n);\n    }\n  }\n}\n\nexport class RList extends RObject {\n  constructor(val: WebRData, names: (string | null)[] | null = null) {\n    if (val instanceof RObjectBase) {\n      assertRType(val, 'list');\n      super(val);\n      if (names) {\n        if (names.length !== this.length) {\n          throw new Error(\n            \"Can't construct named `RList`. Supplied `names` must be the same length as the list.\"\n          );\n        }\n        this.setNames(names);\n      }\n      return this;\n    }\n\n    const prot = { n: 0 };\n\n    try {\n      const data = toWebRData(val);\n      const ptr = Module._Rf_allocVector(RTypeMap.list, data.values.length);\n      protectInc(ptr, prot);\n\n      data.values.forEach((v, i) => {\n        Module._SET_VECTOR_ELT(ptr, i, new RObject(v).ptr);\n      });\n\n      const _names = names ? names : data.names;\n      if (_names && _names.length !== data.values.length) {\n        throw new Error(\n          \"Can't construct named `RList`. Supplied `names` must be the same length as the list.\"\n        );\n      }\n      RObject.wrap(ptr).setNames(_names);\n\n      super(new RObjectBase(ptr));\n    } finally {\n      unprotect(prot.n);\n    }\n  }\n\n  get length(): number {\n    return Module._LENGTH(this.ptr);\n  }\n\n  isDataFrame(): boolean {\n    const classes = RPairlist.wrap(Module._ATTRIB(this.ptr)).get('class') as RNull | RCharacter;\n    return !classes.isNull() && classes.toArray().includes('data.frame');\n  }\n\n  toArray(options: { depth: number } = { depth: 1 }): WebRData[] {\n    return this.toJs(options).values;\n  }\n\n  toObject({\n    allowDuplicateKey = true,\n    allowEmptyKey = false,\n    depth = -1,\n  } = {}): NamedObject<WebRData> {\n    const entries = this.entries({ depth });\n    const keys = entries.map(([k,]) => 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    ) as NamedObject<WebRData>;\n  }\n\n  toD3(): NamedObject<WebRData>[] {\n    if (!this.isDataFrame()) {\n      throw new Error(\n        \"Can't convert R list object to D3 format. Object must be of class 'data.frame'.\"\n      );\n    }\n    const entries = this.entries() as Array<[string, atomicType[]]>;\n    return entries.reduce((a, entry) => {\n      entry[1].forEach((v, j) => a[j] = Object.assign(a[j] || {}, { [entry[0]!]: v }));\n      return a;\n    }, []);\n  }\n\n  entries(options: { depth: number } = { depth: -1 }): NamedEntries<WebRData> {\n    const obj = this.toJs(options);\n\n    // If this is a data frame, assume we have atomic vector columns and can\n    // convert directly to array values by default.\n    if (this.isDataFrame() && options.depth < 0) {\n      obj.values = (obj.values as RVectorAtomic<atomicType>[]).map((v) => v.toArray());\n    }\n    return obj.values.map((v, i) => [obj.names ? obj.names[i] : null, v]);\n  }\n\n  toJs(options: { depth: number } = { depth: 0 }, depth = 1): WebRDataJsNode {\n    return {\n      type: 'list',\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).toJs(options, depth + 1);\n        }\n      }),\n    };\n  }\n}\n\nexport class RDataFrame extends RList {\n  constructor(val: WebRData) {\n    if (val instanceof RObjectBase) {\n      super(val);\n      if (!this.isDataFrame()) {\n        throw new Error(\"Can't construct `RDataFrame`. Supplied R object is not a `data.frame`.\");\n      }\n      return this;\n    }\n    return RDataFrame.fromObject(val);\n  }\n\n  static fromObject(obj: WebRData) {\n    const { names, values } = toWebRData(obj);\n    const prot = { n: 0 };\n\n    // Do we have consistent columns of atomic type? If so, make a `data.frame`.\n    try {\n      const hasNames = !!names && names.length > 0 && names.every((v) => v);\n      const hasArrays = values.length > 0 && values.every((v) => {\n        return Array.isArray(v) || ArrayBuffer.isView(v) || v instanceof ArrayBuffer;\n      });\n\n      if (hasNames && hasArrays) {\n        const _values = values as WebRData[][];\n        const isConsistentLength = _values.every((a) => a.length === _values[0].length);\n        const isAtomic = _values.every((a) => {\n          return isAtomicType(a[0]) || isRVectorAtomic(a[0]);\n        });\n\n        if (isConsistentLength && isAtomic) {\n          const listObj = new RList({\n            type: 'list',\n            names: names,\n            values: _values.map((a) => newObjectFromData(a))\n          });\n          protectInc(listObj, prot);\n\n          const asDataFrame = new RCall([new RSymbol('as.data.frame'), listObj]);\n          protectInc(asDataFrame, prot);\n\n          return new RDataFrame(asDataFrame.eval());\n        }\n      }\n    } finally {\n      unprotect(prot.n);\n    }\n\n    // Not eligible as a `data.frame`, throw an error.\n    throw new Error(\"Can't construct `data.frame`. Source object is not eligible.\");\n  }\n\n  static fromD3(arr: { [key: string]: WebRData }[]) {\n    return this.fromObject(\n      Object.fromEntries(Object.keys(arr[0]).map((k) => [k, arr.map((v) => v[k])]))\n    );\n  }\n}\n\nexport class RFunction extends RObject {\n  exec(...args: (WebRDataRaw | RObject)[]): RObject {\n    const prot = { n: 0 };\n\n    try {\n      const call = new RCall([this, ...args]);\n      protectInc(call, prot);\n      return call.eval();\n    } finally {\n      unprotect(prot.n);\n    }\n  }\n\n  capture(options: EvalROptions = {}, ...args: (WebRDataRaw | RObject)[]) {\n    const prot = { n: 0 };\n\n    try {\n      const call = new RCall([this, ...args]);\n      protectInc(call, prot);\n      return call.capture(options);\n    } finally {\n      unprotect(prot.n);\n    }\n  }\n}\n\nexport class RString extends RObject {\n  // Unlike symbols, strings are not cached and must thus be protected\n  constructor(x: WebRDataScalar<string>) {\n    if (x instanceof RObjectBase) {\n      assertRType(x, 'string');\n      super(x);\n      return;\n    }\n\n    const name = Module.allocateUTF8(x as string);\n\n    try {\n      super(new RObjectBase(Module._Rf_mkChar(name)));\n    } finally {\n      Module._free(name);\n    }\n  }\n\n  toString(): string {\n    return Module.UTF8ToString(Module._R_CHAR(this.ptr));\n  }\n\n  toJs(): WebRDataJsString {\n    return {\n      type: 'string',\n      value: this.toString(),\n    };\n  }\n}\n\nexport class REnvironment extends RObject {\n  constructor(val: WebRData = {}) {\n    if (val instanceof RObjectBase) {\n      assertRType(val, 'environment');\n      super(val);\n      return this;\n    }\n    let nProt = 0;\n\n    try {\n      const { names, values } = toWebRData(val);\n\n      const ptr = protect(Module._R_NewEnv(objs.globalEnv.ptr, 0, 0));\n      ++nProt;\n\n      values.forEach((v, i) => {\n        const name = names ? names[i] : null;\n        if (!name) {\n          throw new Error(\"Can't create object in new environment with empty symbol name\");\n        }\n\n        const sym = new RSymbol(name);\n        const vObj = protect(new RObject(v));\n        try {\n          envPoke(ptr, sym, vObj);\n        } finally {\n          unprotect(1);\n        }\n      });\n\n      super(new RObjectBase(ptr));\n    } finally {\n      unprotect(nProt);\n    }\n  }\n\n  ls(all = false, sorted = true): string[] {\n    const ls = RCharacter.wrap(Module._R_lsInternal3(this.ptr, Number(all), Number(sorted)));\n    return ls.toArray() as string[];\n  }\n\n  bind(name: string, value: WebRData): void {\n    const sym = new RSymbol(name);\n    const valueObj = protect(new RObject(value));\n\n    try {\n      envPoke(this, sym, valueObj);\n    } finally {\n      unprotect(1);\n    }\n  }\n\n  names(): string[] {\n    return this.ls(true, true);\n  }\n\n  frame(): RObject {\n    return RObject.wrap(Module._FRAME(this.ptr));\n  }\n\n  subset(prop: number | string): RObject {\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 = -1 } = {}): NamedObject<WebRData> {\n    const symbols = this.names();\n    return Object.fromEntries(\n      [...Array(symbols.length).keys()].map((i) => {\n        const value = this.getDollar(symbols[i]);\n        return [symbols[i], depth < 0 ? value : value.toJs({ depth })];\n      })\n    );\n  }\n\n  toJs(options: { depth: number } = { depth: 0 }, depth = 1): WebRDataJsNode {\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]).toJs(options, depth + 1);\n      }\n    });\n\n    return {\n      type: 'environment',\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\nexport type atomicType = number | boolean | Complex | string;\n\nabstract class RVectorAtomic<T extends atomicType> extends RObject {\n  constructor(\n    val: WebRDataAtomic<T>,\n    kind: RType,\n    newSetter: (ptr: RPtr) => (v: any, i: number) => void\n  ) {\n    if (val instanceof RObjectBase) {\n      assertRType(val, kind);\n      super(val);\n      return this;\n    }\n\n    const prot = { n: 0 };\n\n    try {\n      const { names, values } = toWebRData(val);\n\n      const ptr = Module._Rf_allocVector(RTypeMap[kind], values.length);\n      protectInc(ptr, prot);\n\n      values.forEach(newSetter(ptr));\n      RObject.wrap(ptr).setNames(names);\n\n      super(new RObjectBase(ptr));\n    } finally {\n      unprotect(prot.n);\n    }\n  }\n\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(): RObject {\n    throw new Error('$ operator is invalid for atomic vectors');\n  }\n\n  detectMissing(): boolean[] {\n    const prot = { n: 0 };\n\n    try {\n      const call = Module._Rf_lang2(new RSymbol('is.na').ptr, this.ptr);\n      protectInc(call, prot);\n\n      const val = RLogical.wrap(safeEval(call, objs.baseEnv));\n      protectInc(val, prot);\n\n      const ret = val.toTypedArray();\n      return Array.from(ret).map((elt) => Boolean(elt));\n    } finally {\n      unprotect(prot.n);\n    }\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,]) => 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    ) as NamedObject<T | null>;\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  toJs(): WebRDataJsAtomic<T> {\n    return {\n      type: this.type() as 'logical' | 'integer' | 'double' | 'complex' | 'character' | 'raw',\n      names: this.names(),\n      values: this.toArray(),\n    };\n  }\n}\n\nexport class RLogical extends RVectorAtomic<boolean> {\n  constructor(val: WebRDataAtomic<boolean>) {\n    super(val, 'logical', RLogical.#newSetter);\n  }\n\n  static #newSetter = (ptr: RPtr) => {\n    const data = Module._LOGICAL(ptr);\n    const naLogical = Module.getValue(Module._R_NaInt, 'i32');\n    return (v: null | boolean, i: number) => {\n      Module.setValue(data + 4 * i, v === null ? naLogical : Boolean(v), 'i32');\n    };\n  };\n\n  getBoolean(idx: number): boolean | null {\n    return this.get(idx).toArray()[0];\n  }\n\n  toBoolean(): boolean {\n    if (this.length !== 1) {\n      throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n    }\n    const val = this.getBoolean(1);\n    if (val === null) {\n      throw new Error(\"Can't convert missing value `NA` to a JS boolean\");\n    }\n    return val;\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 RInteger extends RVectorAtomic<number> {\n  constructor(val: WebRDataAtomic<number>) {\n    super(val, 'integer', RInteger.#newSetter);\n  }\n\n  static #newSetter = (ptr: RPtr) => {\n    const data = Module._INTEGER(ptr);\n    const naInteger = Module.getValue(Module._R_NaInt, 'i32');\n\n    return (v: null | number, i: number) => {\n      Module.setValue(data + 4 * i, v === null ? naInteger : Math.round(Number(v)), 'i32');\n    };\n  };\n\n  getNumber(idx: number): number | null {\n    return this.get(idx).toArray()[0];\n  }\n\n  toNumber(): number {\n    if (this.length !== 1) {\n      throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n    }\n    const val = this.getNumber(1);\n    if (val === null) {\n      throw new Error(\"Can't convert missing value `NA` to a JS number\");\n    }\n    return val;\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 RDouble extends RVectorAtomic<number> {\n  constructor(val: WebRDataAtomic<number>) {\n    super(val, 'double', RDouble.#newSetter);\n  }\n\n  static #newSetter = (ptr: RPtr) => {\n    const data = Module._REAL(ptr);\n    const naDouble = Module.getValue(Module._R_NaReal, 'double');\n\n    return (v: null | number, i: number) => {\n      Module.setValue(data + 8 * i, v === null ? naDouble : v, 'double');\n    };\n  };\n\n  getNumber(idx: number): number | null {\n    return this.get(idx).toArray()[0];\n  }\n\n  toNumber(): number {\n    if (this.length !== 1) {\n      throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n    }\n    const val = this.getNumber(1);\n    if (val === null) {\n      throw new Error(\"Can't convert missing value `NA` to a JS number\");\n    }\n    return val;\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 RComplex extends RVectorAtomic<Complex> {\n  constructor(val: WebRDataAtomic<Complex>) {\n    super(val, 'complex', RComplex.#newSetter);\n  }\n\n  static #newSetter = (ptr: RPtr) => {\n    const data = Module._COMPLEX(ptr);\n    const naDouble = Module.getValue(Module._R_NaReal, 'double');\n\n    return (v: null | Complex, i: number) => {\n      Module.setValue(data + 8 * (2 * i), v === null ? naDouble : v.re, 'double');\n      Module.setValue(data + 8 * (2 * i + 1), v === null ? naDouble : v.im, 'double');\n    };\n  };\n\n  getComplex(idx: number): Complex | null {\n    return this.get(idx).toArray()[0];\n  }\n\n  toComplex(): Complex {\n    if (this.length !== 1) {\n      throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n    }\n    const val = this.getComplex(1);\n    if (val === null) {\n      throw new Error(\"Can't convert missing value `NA` to a JS object\");\n    }\n    return val;\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 RCharacter extends RVectorAtomic<string> {\n  constructor(val: WebRDataAtomic<string>) {\n    super(val, 'character', RCharacter.#newSetter);\n  }\n\n  static #newSetter = (ptr: RPtr) => {\n    return (v: null | string, i: number) => {\n      if (v === null) {\n        Module._SET_STRING_ELT(ptr, i, objs.naString.ptr);\n      } else {\n        Module._SET_STRING_ELT(ptr, i, new RString(v).ptr);\n      }\n    };\n  };\n\n  getString(idx: number): string | null {\n    return this.get(idx).toArray()[0];\n  }\n\n  toString(): string {\n    if (this.length !== 1) {\n      throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n    }\n    const val = this.getString(1);\n    if (val === null) {\n      throw new Error(\"Can't convert missing value `NA` to a JS string\");\n    }\n    return val;\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 RRaw extends RVectorAtomic<number> {\n  constructor(val: WebRDataAtomic<number>) {\n    if (val instanceof ArrayBuffer) {\n      val = new Uint8Array(val);\n    }\n    super(val, 'raw', RRaw.#newSetter);\n  }\n\n  static #newSetter = (ptr: RPtr) => {\n    const data = Module._RAW(ptr);\n\n    return (v: number, i: number) => {\n      Module.setValue(data + i, Number(v), 'i8');\n    };\n  };\n\n  getNumber(idx: number): number | null {\n    return this.get(idx).toArray()[0];\n  }\n\n  toNumber(): number {\n    if (this.length !== 1) {\n      throw new Error(\"Can't convert atomic vector of length > 1 to a scalar JS value\");\n    }\n    const val = this.getNumber(1);\n    if (val === null) {\n      throw new Error(\"Can't convert missing value `NA` to a JS number\");\n    }\n    return val;\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 * Convert the various types possible in the type union WebRData into\n * consistently typed arrays of names and values.\n */\nfunction toWebRData<T>(jsObj: WebRDataAtomic<T>): {\n  names: (string | null)[] | null;\n  values: (T | null)[];\n};\nfunction toWebRData(jsObj: WebRData): WebRData;\nfunction toWebRData(jsObj: WebRData): WebRData {\n  if (isWebRDataJs(jsObj)) {\n    return jsObj;\n  } else if (Array.isArray(jsObj) || ArrayBuffer.isView(jsObj)) {\n    return { names: null, values: jsObj };\n  } else if (jsObj && typeof jsObj === 'object' && !isComplex(jsObj)) {\n    return {\n      names: Object.keys(jsObj),\n      values: Object.values(jsObj),\n    };\n  }\n  return { names: null, values: [jsObj] };\n}\n\nexport function getRWorkerClass(type: RType | RCtor): typeof RObject {\n  const typeClasses: { [key: string]: typeof RObject } = {\n    object: RObject,\n    null: RNull,\n    symbol: RSymbol,\n    pairlist: RPairlist,\n    closure: RFunction,\n    environment: REnvironment,\n    call: RCall,\n    special: RFunction,\n    builtin: RFunction,\n    string: RString,\n    logical: RLogical,\n    integer: RInteger,\n    double: RDouble,\n    complex: RComplex,\n    character: RCharacter,\n    list: RList,\n    raw: RRaw,\n    function: RFunction,\n    dataframe: RDataFrame,\n  };\n  if (type in typeClasses) {\n    return typeClasses[type];\n  }\n  return RObject;\n}\n\n/**\n * Test for an RWorker.RObject instance.\n *\n * RWorker.RObject 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 RObject.\n */\nexport function isRObject(value: any): value is RObject {\n  return value instanceof RObject;\n}\n\n/**\n * Test for an RWorker.RVectorAtomic instance.\n *\n * @private\n * @param {any} value The object to test.\n * @return {boolean} True if the object is an instance of an RVectorAtomic.\n */\nexport function isRVectorAtomic(value: any): value is RVectorAtomic<atomicType> {\n  const atomicRTypes = ['logical', 'integer', 'double', 'complex', 'character'];\n\n  return (\n    (isRObject(value) && atomicRTypes.includes(value.type()))\n    || (isRObject(value) && value.isNa())\n  );\n}\n\n/**\n * Test for an atomicType, including missing `null` values.\n *\n * @private\n * @param {any} value The object to test.\n * @return {boolean} True if the object is of type atomicType.\n */\nexport function isAtomicType(value: any): value is atomicType | null {\n  return (\n    value === null\n    || typeof value === 'number'\n    || typeof value === 'boolean'\n    || typeof value === 'string'\n    || isComplex(value)\n  );\n}\n\n/**\n * A store for persistent R objects, initialised at R startup.\n */\nexport let objs: {\n  baseEnv: REnvironment,\n  bracket2Symbol: RSymbol,\n  bracketSymbol: RSymbol,\n  dollarSymbol: RSymbol,\n  emptyEnv: REnvironment,\n  false: RLogical,\n  globalEnv: REnvironment,\n  na: RLogical,\n  namesSymbol: RSymbol,\n  naString: RObject,\n  null: RNull,\n  true: RLogical,\n  unboundValue: RObject,\n};\n\n/**\n * Populate the persistent R object store.\n * @internal\n */\nexport function initPersistentObjects() {\n  objs = {\n    baseEnv: REnvironment.wrap(Module.getValue(Module._R_BaseEnv, '*')),\n    bracket2Symbol: RSymbol.wrap(Module.getValue(Module._R_Bracket2Symbol, '*')),\n    bracketSymbol: RSymbol.wrap(Module.getValue(Module._R_BracketSymbol, '*')),\n    dollarSymbol: RSymbol.wrap(Module.getValue(Module._R_DollarSymbol, '*')),\n    emptyEnv: REnvironment.wrap(Module.getValue(Module._R_EmptyEnv, '*')),\n    false: RLogical.wrap(Module.getValue(Module._R_FalseValue, '*')),\n    globalEnv: REnvironment.wrap(Module.getValue(Module._R_GlobalEnv, '*')),\n    na: RLogical.wrap(Module.getValue(Module._R_LogicalNAValue, '*')),\n    namesSymbol: RSymbol.wrap(Module.getValue(Module._R_NamesSymbol, '*')),\n    naString: RObject.wrap(Module.getValue(Module._R_NaString, '*')),\n    null: RNull.wrap(Module.getValue(Module._R_NilValue, '*')),\n    true: RLogical.wrap(Module.getValue(Module._R_TrueValue, '*')),\n    unboundValue: RObject.wrap(Module.getValue(Module._R_UnboundValue, '*')),\n  };\n}\n", "import { IN_NODE } from './compat';\nimport { WebRError } from './error';\nimport { RObjectBase } from './robj-worker';\n\nexport type ResolveFn = (_value?: unknown) => void;\nexport type RejectFn = (_reason?: any) => void;\n\nexport function promiseHandles() {\n  const out = {\n    resolve: () => { return; },\n    reject: () => { return; },\n    promise: Promise.resolve(),\n  } as {\n    resolve: ResolveFn,\n    reject: RejectFn,\n    promise: 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<T>(\n  obj: T | T[],\n  test: (obj: any) => boolean,\n  replacer: (obj: any, ...replacerArgs: any[]) => unknown,\n  ...replacerArgs: unknown[]\n): T | T[] {\n  if (obj === null || obj === undefined || isImageBitmap(obj)) {\n    return obj;\n  }\n  if (obj instanceof ArrayBuffer) {\n    return new Uint8Array(obj) as T;\n  }\n  if (test(obj)) {\n    return replacer(obj, ...replacerArgs) as T;\n  }\n  if (Array.isArray(obj) || ArrayBuffer.isView(obj)) {\n    return (obj as unknown[]).map((v) =>\n      replaceInObject(v, test, replacer, ...replacerArgs)\n    ) as T[];\n  }\n  if (obj instanceof RObjectBase) {\n    return obj;\n  }\n  if (typeof obj === 'object') {\n    return Object.fromEntries(\n      Object.entries(obj).map(([k, v]) => [k, replaceInObject(v, test, replacer, ...replacerArgs)])\n    ) as T;\n  }\n  return obj;\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\nexport function isImageBitmap(value: any): value is ImageBitmap {\n  return (typeof ImageBitmap !== 'undefined' && value instanceof ImageBitmap);\n}\n\nexport function throwUnreachable(context?: string) {\n  let msg = 'Reached the unreachable';\n  msg = msg + (context ? ': ' + context : '.');\n\n  throw new WebRError(msg);\n}\n\n// From https://stackoverflow.com/a/9458996\nexport function bufferToBase64(buffer: ArrayBuffer) {\n  let binary = '';\n  const bytes = new Uint8Array(buffer);\n  const len = bytes.byteLength;\n  for (let i = 0; i < len; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return window.btoa(binary);\n}\n", "import { promiseHandles } from '../utils';\nimport { encode, decode } from '@msgpack/msgpack';\nimport { ServiceWorkerHandlers } from './channel';\nimport { WebRChannelError } from '../error';\n\ndeclare let self: ServiceWorkerGlobalScope;\n\nconst requests: {\n  [key: string]: {\n    resolve: (_value?: unknown) => void;\n    reject: (_reason?: any) => void;\n    promise: Promise<unknown>;\n  };\n} = {};\n\nexport function handleInstall() {\n  console.log('webR service worker installed');\n  void self.skipWaiting();\n}\n\nexport function handleActivate(event: ExtendableEvent) {\n  console.log('webR service worker activating');\n  event.waitUntil(self.clients.claim());\n}\n\nasync function sendRequest(clientId: string, uuid: string): Promise<Response> {\n  const client = await self.clients.get(clientId);\n  if (!client) {\n    throw new WebRChannelError('Service worker client not found');\n  }\n\n  if (!(uuid in requests)) {\n    requests[uuid] = promiseHandles();\n    client.postMessage({ type: 'request', data: uuid });\n  }\n\n  const response = await requests[uuid].promise;\n  const headers = { 'Cross-Origin-Embedder-Policy': 'require-corp' };\n  return new Response(encode(response), { headers });\n}\n\nexport function handleFetch(event: FetchEvent) {\n  // console.log('service worker got a fetch', event);\n  const wasmMatch = /__wasm__\\/webr-fetch-request\\//.exec(event.request.url);\n  if (!wasmMatch) {\n    return false;\n  }\n  const requestBody = event.request.arrayBuffer();\n  const requestResponse = requestBody.then(async (body) => {\n    const data = decode(body) as { clientId: string; uuid: string };\n    return await sendRequest(data.clientId, data.uuid);\n  });\n  event.waitUntil(requestResponse);\n  event.respondWith(requestResponse);\n  return true;\n}\n\nexport function handleMessage(event: ExtendableMessageEvent) {\n  // console.log('service worker got a message', event.data);\n  switch (event.data.type) {\n    case 'register-client-main': {\n      void self.clients.claim();\n      const source = event.source as WindowClient;\n      self.clients.get(source.id).then((client) => {\n        if (!client) {\n          throw new WebRChannelError(\"Can't respond to client in service worker message handler\");\n        }\n        client.postMessage({\n          type: 'registration-successful',\n          clientId: source.id,\n        });\n      }, (reason) => {\n        console.log(reason);\n        throw new WebRChannelError(\"Can't respond to client in service worker message handler\");\n      });\n      break;\n    }\n    case 'wasm-webr-fetch-response': {\n      if (event.data.uuid in requests) {\n        requests[event.data.uuid].resolve(event.data.response);\n        delete requests[event.data.uuid];\n      }\n      break;\n    }\n    default:\n      return false;\n  }\n  return true;\n}\n\nexport const webRHandlers: ServiceWorkerHandlers = {\n  handleInstall,\n  handleActivate,\n  handleFetch,\n  handleMessage\n};\n\nself.addEventListener('install', webRHandlers.handleInstall);\nself.addEventListener('activate', webRHandlers.handleActivate);\nself.addEventListener('fetch', webRHandlers.handleFetch);\nself.addEventListener('message', webRHandlers.handleMessage);\n"],
  "mappings": "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",
  "names": ["encode", "decode", "encode", "decode", "objs", "_newSetter"]
}
