mirror of
https://github.com/agdamsbo/prioritized.grouping.git
synced 2025-09-12 18:49:39 +02:00
7 lines
285 KiB
Text
7 lines
285 KiB
Text
{
|
|
"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/utils.ts", "../webR/chan/task-common.ts", "../webR/chan/task-main.ts", "../webR/chan/queue.ts", "../webR/chan/message.ts", "../webR/payload.ts", "../webR/chan/channel.ts", "../webR/chan/task-worker.ts", "../webR/emscripten.ts", "../webR/chan/channel-shared.ts", "../webR/chan/channel-service.ts", "../webR/chan/channel-postmessage.ts", "../webR/chan/channel-common.ts", "../webR/config.ts", "../webR/robj-main.ts", "../webR/robj.ts", "../webR/utils-r.ts", "../webR/robj-worker.ts", "../webR/proxy.ts", "../webR/console.ts", "../webR/webr-main.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 { IN_NODE } from './compat';\nimport { WebRError } from './error';\n\nexport type ResolveFn = (_value?: unknown) => void;\nexport type RejectFn = (_reason?: any) => void;\n\nexport function promiseHandles() {\n const out = {\n resolve: (_value?: unknown) => {},\n reject: (_reason?: any) => {},\n promise: null as unknown as Promise<unknown>,\n };\n\n const promise = new Promise((resolve, reject) => {\n out.resolve = resolve;\n out.reject = reject;\n });\n out.promise = promise;\n\n return out;\n}\n\nexport function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function replaceInObject<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 || typeof obj !== 'object') {\n return obj;\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 return Object.fromEntries(\n Object.entries(obj).map(([k, v], i) => [k, replaceInObject(v, test, replacer, ...replacerArgs)])\n ) as T;\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 throwUnreachable(context?: string) {\n let msg = 'Reached the unreachable';\n msg = msg + (context ? ': ' + context : '.');\n\n throw new WebRError(msg);\n}\n", "// Original code from Synclink and Comlink. Released under Apache 2.0.\n\nexport const SZ_BUF_DOESNT_FIT = 0;\nexport const SZ_BUF_FITS_IDX = 1;\nexport const SZ_BUF_SIZE_IDX = 0;\n\nexport interface Endpoint extends EventSource {\n postMessage(message: any, transfer?: Transferable[]): void;\n start?: () => void;\n}\n\nexport interface EventSource {\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: {}): void;\n\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: {}\n ): void;\n}\n\nexport function toWireValue(value: any): [any, Transferable[]] {\n return [value, transferCache.get(value) || []];\n}\n\nconst transferCache = new WeakMap<any, Transferable[]>();\nexport function transfer<T>(obj: T, transfers: Transferable[]): T {\n transferCache.set(obj, transfers);\n return obj;\n}\n\nexport type UUID = string;\n\nexport function isUUID(x: any): x is UUID {\n return typeof x === 'string' && x.length === UUID_LENGTH;\n}\n\nexport const UUID_LENGTH = 63;\n\nexport function generateUUID(): UUID {\n const result = Array.from({ length: 4 }, randomSegment).join('-');\n if (result.length !== UUID_LENGTH) {\n throw new Error('comlink internal error: UUID has the wrong length');\n }\n return result;\n}\n\nfunction randomSegment() {\n let result = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16);\n const pad = 15 - result.length;\n if (pad > 0) {\n result = Array.from({ length: pad }, () => 0).join('') + result;\n }\n return result;\n}\n", "// Original code from Synclink and Comlink. Released under Apache 2.0.\n\nimport { Endpoint, SZ_BUF_FITS_IDX, SZ_BUF_SIZE_IDX, generateUUID } from './task-common';\n\nimport { sleep } from '../utils';\nimport { SyncRequestData } from './message';\nimport { encode } from '@msgpack/msgpack';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\n\nconst encoder = new TextEncoder();\n\n/**\n * Respond to a blocking request. Most of the work has already been done in\n * asynclink, we are just responsible here for getting the return value back to\n * the requester through this slightly convoluted Atomics protocol.\n * @param {Endpoint} endpoint A message port to receive messages from. Other\n * thread is blocked, so we can't send messages back.\n * @param {SyncRequestData} data The message that was recieved. We will use it\n * to read out the buffers to write the answer into. NOTE: requester\n * owns buffers.\n * @param {any} response The value we want to send back to the requester. We\n * have to encode it into data_buffer.\n */\nexport async function syncResponse(endpoint: Endpoint, data: SyncRequestData, response: any) {\n try {\n let { taskId, sizeBuffer, dataBuffer, signalBuffer } = data;\n // console.warn(msg);\n\n const bytes = encode(response);\n const fits = bytes.length <= dataBuffer.length;\n\n Atomics.store(sizeBuffer, SZ_BUF_SIZE_IDX, bytes.length);\n Atomics.store(sizeBuffer, SZ_BUF_FITS_IDX, +fits);\n if (!fits) {\n // console.log(\" need larger buffer\", taskId)\n // Request larger buffer\n const [uuid, dataPromise] = requestResponseMessage(endpoint);\n\n // Write UUID into dataBuffer so syncRequest knows where to respond to.\n dataBuffer.set(encoder.encode(uuid));\n await signalRequester(signalBuffer, taskId!);\n\n // Wait for response with new bigger dataBuffer\n dataBuffer = (await dataPromise).dataBuffer as Uint8Array;\n }\n\n // Encode result into dataBuffer\n dataBuffer.set(bytes);\n Atomics.store(sizeBuffer, SZ_BUF_FITS_IDX, +true);\n\n // console.log(\" signaling completion\", taskId)\n await signalRequester(signalBuffer, taskId as number);\n } catch (e) {\n console.warn(e);\n }\n}\n\nfunction requestResponseMessage(ep: Endpoint): [string, Promise<any>] {\n const id = generateUUID();\n return [\n id,\n new Promise((resolve) => {\n if (IN_NODE) {\n (ep as unknown as NodeWorker).once('message', (message: any) => {\n if (!message.id || message.id !== id) {\n return;\n }\n resolve(message);\n });\n } else {\n ep.addEventListener('message', function l(ev: MessageEvent) {\n if (!ev.data || !ev.data.id || ev.data.id !== id) {\n return;\n }\n ep.removeEventListener('message', l as EventListenerOrEventListenerObject);\n resolve(ev.data);\n } as EventListenerOrEventListenerObject);\n }\n if (ep.start) {\n ep.start();\n }\n }),\n ];\n}\n\nasync function signalRequester(signalBuffer: Int32Array, taskId: number) {\n const index = (taskId >> 1) % 32;\n let sleepTime = 1;\n while (Atomics.compareExchange(signalBuffer, index + 1, 0, taskId) !== 0) {\n // No Atomics.asyncWait except on Chrome =(\n await sleep(sleepTime);\n if (sleepTime < 32) {\n // exponential backoff\n sleepTime *= 2;\n }\n }\n Atomics.or(signalBuffer, 0, 1 << index);\n Atomics.notify(signalBuffer, 0);\n}\n", "// From https://stackoverflow.com/questions/47157428/how-to-implement-a-pseudo-blocking-async-queue-in-js-ts\n/**\n * @module Queue\n */\n\n/**\n * Asynchronous queue mechanism to be used by the communication channels.\n * @typeParam T The type of item to be stored in the queue.\n */\nexport class AsyncQueue<T> {\n #promises: Promise<T>[];\n #resolvers: ((t: T) => void)[];\n\n constructor() {\n this.#resolvers = [];\n this.#promises = [];\n }\n\n reset() {\n this.#resolvers = [];\n this.#promises = [];\n }\n\n put(t: T) {\n if (!this.#resolvers.length) {\n this.#add();\n }\n const resolve = this.#resolvers.shift()!;\n resolve(t);\n }\n\n async get() {\n if (!this.#promises.length) {\n this.#add();\n }\n const promise = this.#promises.shift()!;\n return promise;\n }\n\n isEmpty() {\n return !this.#promises.length;\n }\n\n isBlocked() {\n return !!this.#resolvers.length;\n }\n\n get length() {\n return this.#promises.length - this.#resolvers.length;\n }\n\n #add() {\n this.#promises.push(\n new Promise((resolve) => {\n this.#resolvers.push(resolve);\n })\n );\n }\n}\n", "/**\n * WebR communication channel messaging and request types.\n * @module Message\n */\nimport { generateUUID, transfer, UUID } from './task-common';\n\n/** A webR communication channel message. */\nexport interface Message {\n type: string;\n data?: any;\n}\n\n/** A webR communication channel request. */\nexport interface Request {\n type: 'request';\n data: {\n uuid: UUID;\n msg: Message;\n };\n}\n\n/** A webR communication channel response. */\nexport interface Response {\n type: 'response';\n data: {\n uuid: UUID;\n resp: unknown;\n };\n}\n\n/** @internal */\nexport function newRequest(msg: Message, transferables?: [Transferable]): Request {\n return newRequestResponseMessage(\n {\n type: 'request',\n data: {\n uuid: generateUUID(),\n msg: msg,\n },\n },\n transferables\n );\n}\n\n/** @internal */\nexport function newResponse(uuid: UUID, resp: unknown, transferables?: [Transferable]): Response {\n return newRequestResponseMessage(\n {\n type: 'response',\n data: {\n uuid,\n resp,\n },\n },\n transferables\n );\n}\n\n/** @internal */\nfunction newRequestResponseMessage<T>(msg: T, transferables?: [Transferable]): T {\n // Signal to Synclink that the data contains objects we wish to\n // transfer, as in `postMessage()`\n if (transferables) {\n transfer(msg, transferables);\n }\n return msg;\n}\n\n/** A webR communication channel sync-request.\n * @internal\n */\nexport interface SyncRequest {\n type: 'sync-request';\n data: {\n msg: Message;\n reqData: SyncRequestData;\n };\n}\n\n/** Transfer data required when using sync-request with SharedArrayBuffer.\n * @internal */\nexport interface SyncRequestData {\n taskId?: number;\n sizeBuffer: Int32Array;\n signalBuffer: Int32Array;\n dataBuffer: Uint8Array;\n}\n\n/** @internal */\nexport function newSyncRequest(msg: Message, data: SyncRequestData): SyncRequest {\n return {\n type: 'sync-request',\n data: { msg, reqData: data },\n };\n}\n", "/**\n * Types containing references to R objects, raw data or errors over the webR\n * communication channel.\n * @module Payload\n */\nimport { WebRDataRaw, RPtr, RType } from './robj';\nimport { WebRWorkerError } from './error';\n\nexport type WebRPayloadRaw = {\n obj: WebRDataRaw;\n payloadType: 'raw';\n};\n\nexport type WebRPayloadPtr = {\n obj: {\n type?: RType;\n ptr: RPtr;\n methods?: string[];\n };\n payloadType: 'ptr';\n};\n\nexport type WebRPayloadErr = {\n obj: {\n message: string;\n name: string;\n stack?: string;\n };\n payloadType: 'err';\n};\n\n// On the main side we shouldn't see any error payload as these are\n// rethrown as JS exceptions\nexport type WebRPayload = WebRPayloadRaw | WebRPayloadPtr;\nexport type WebRPayloadWorker = WebRPayloadRaw | WebRPayloadPtr | WebRPayloadErr;\n\n/* @internal */\nexport function webRPayloadAsError(payload: WebRPayloadErr): Error {\n const e = new WebRWorkerError(payload.obj.message);\n // Forward the error name to the main thread, if more specific than a general `Error`\n if (payload.obj.name !== 'Error') {\n e.name = payload.obj.name;\n }\n e.stack = payload.obj.stack;\n return e;\n}\n\n/**\n * Test for an WebRPayload instance.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an WebRPayload.\n */\nexport function isWebRPayload(value: any): value is WebRPayload {\n return value && typeof value === 'object' && 'payloadType' in value && 'obj' in value;\n}\n\n/**\n * Test for an WebRPayloadPtr instance.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an WebRPayloadPtr.\n */\nexport function isWebRPayloadPtr(value: any): value is WebRPayloadPtr {\n return isWebRPayload(value) && value.payloadType === 'ptr';\n}\n\n/**\n * Test for an WebRPayloadRaw instance.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an WebRPayloadRaw.\n */\nexport function isWebRPayloadRaw(value: any): value is WebRPayloadRaw {\n return isWebRPayload(value) && value.payloadType === 'raw';\n}\n", "/**\n * Interfaces for the webR main and worker thread communication channels.\n * @module Channel\n */\n\nimport { promiseHandles, ResolveFn, RejectFn } from '../utils';\nimport { AsyncQueue } from './queue';\nimport { Message, newRequest, Response } from './message';\nimport { WebRPayload, WebRPayloadWorker, webRPayloadAsError } from '../payload';\n\n// The channel structure is asymetric:\n//\n// - The main thread maintains the input and output queues. All\n// messages sent from main are stored in the input queue. The input\n// queue is pull-based, it's the worker that initiates a transfer\n// via a sync-request.\n//\n// The output queue is filled at the initiative of the worker. The\n// main thread asynchronously reads from this queue, typically in an\n// async infloop.\n//\n// - The worker synchronously reads from the input queue. Reading a\n// message blocks until an input is available. Writing a message to\n// the output queue is equivalent to calling `postMessage()` and\n// returns immediately.\n//\n// Note that the messages sent from main to worker need to be\n// serialised. There is no structured cloning involved, and\n// ArrayBuffers can't be transferred, only copied.\n\nexport abstract class ChannelMain {\n inputQueue = new AsyncQueue<Message>();\n outputQueue = new AsyncQueue<Message>();\n systemQueue = new AsyncQueue<Message>();\n\n #parked = new Map<string, { resolve: ResolveFn; reject: RejectFn }>();\n\n abstract initialised: Promise<unknown>;\n abstract close(): void;\n abstract interrupt(): void;\n\n async read(): Promise<Message> {\n return await this.outputQueue.get();\n }\n\n async flush(): Promise<Message[]> {\n const msg: Message[] = [];\n while (!this.outputQueue.isEmpty()) {\n msg.push(await this.read());\n }\n return msg;\n }\n\n async readSystem(): Promise<Message> {\n return await this.systemQueue.get();\n }\n\n write(msg: Message): void {\n this.inputQueue.put(msg);\n }\n\n async request(msg: Message, transferables?: [Transferable]): Promise<WebRPayload> {\n const req = newRequest(msg, transferables);\n\n const { resolve, reject, promise } = promiseHandles();\n this.#parked.set(req.data.uuid, { resolve, reject });\n\n this.write(req);\n return promise as Promise<WebRPayload>;\n }\n\n protected putClosedMessage(): void {\n this.outputQueue.put({ type: 'closed' });\n }\n\n protected resolveResponse(msg: Response) {\n const uuid = msg.data.uuid;\n const handles = this.#parked.get(uuid);\n\n if (handles) {\n const payload = msg.data.resp as WebRPayloadWorker;\n this.#parked.delete(uuid);\n\n if (payload.payloadType === 'err') {\n handles.reject(webRPayloadAsError(payload));\n } else {\n handles.resolve(payload);\n }\n } else {\n console.warn(\"Can't find request.\");\n }\n }\n}\n\nexport interface ChannelWorker {\n resolve(): void;\n write(msg: Message, transfer?: [Transferable]): void;\n writeSystem(msg: Message, transfer?: [Transferable]): void;\n read(): Message;\n handleInterrupt(): void;\n setInterrupt(interrupt: () => void): void;\n run(args: string[]): void;\n inputOrDispatch: () => number;\n setDispatchHandler: (dispatch: (msg: Message) => void) => void;\n onMessageFromMainThread: (msg: Message) => void;\n}\n\n/**\n * Handler functions dealing with setup and commmunication over a Service Worker.\n */\nexport interface ServiceWorkerHandlers {\n handleActivate: (this: ServiceWorkerGlobalScope, ev: ExtendableEvent) => any;\n handleFetch: (this: ServiceWorkerGlobalScope, ev: FetchEvent) => any;\n handleInstall: (this: ServiceWorkerGlobalScope, ev: ExtendableEvent) => any;\n handleMessage: (this: ServiceWorkerGlobalScope, ev: ExtendableMessageEvent) => any;\n}\n", "// Original code from Synclink and Comlink. Released under Apache 2.0.\n\nimport {\n Endpoint,\n SZ_BUF_DOESNT_FIT,\n SZ_BUF_FITS_IDX,\n SZ_BUF_SIZE_IDX,\n UUID_LENGTH,\n} from './task-common';\n\nimport { newSyncRequest, Message } from './message';\nimport { decode } from '@msgpack/msgpack';\n\nconst decoder = new TextDecoder('utf-8');\n\nexport class SyncTask {\n endpoint: Endpoint;\n msg: Message;\n transfers: Transferable[];\n\n #scheduled = false;\n #resolved: boolean;\n #result?: any;\n #exception?: any;\n\n // sync only\n taskId?: number;\n #syncGen?: Generator<void, unknown, void>;\n sizeBuffer?: Int32Array;\n signalBuffer?: Int32Array;\n syncifier = new _Syncifier();\n\n constructor(endpoint: Endpoint, msg: Message, transfers: Transferable[] = []) {\n this.endpoint = endpoint;\n this.msg = msg;\n this.transfers = transfers;\n this.#resolved = false;\n }\n\n scheduleSync() {\n if (this.#scheduled) {\n return;\n }\n this.#scheduled = true;\n\n this.syncifier.scheduleTask(this);\n this.#syncGen = this.doSync();\n this.#syncGen.next();\n return this;\n }\n\n poll() {\n if (!this.#scheduled) {\n throw new Error('Task not synchronously scheduled');\n }\n\n const { done, value } = this.#syncGen!.next();\n if (!done) {\n return false;\n }\n\n this.#resolved = true;\n this.#result = value;\n\n return true;\n }\n\n *doSync() {\n // just use syncRequest.\n const { endpoint, msg, transfers } = this;\n const sizeBuffer = new Int32Array(new SharedArrayBuffer(8));\n const signalBuffer = this.signalBuffer!;\n const taskId = this.taskId;\n\n // Ensure status is cleared. We will notify\n let dataBuffer = acquireDataBuffer(UUID_LENGTH);\n // console.log(\"===requesting\", taskId);\n\n const syncMsg = newSyncRequest(msg, {\n sizeBuffer,\n dataBuffer,\n signalBuffer,\n taskId,\n });\n\n endpoint.postMessage(syncMsg, transfers);\n yield;\n\n if (Atomics.load(sizeBuffer, SZ_BUF_FITS_IDX) === SZ_BUF_DOESNT_FIT) {\n // There wasn't enough space, make a bigger dataBuffer.\n // First read uuid for response out of current dataBuffer\n const id = decoder.decode(dataBuffer.slice(0, UUID_LENGTH));\n releaseDataBuffer(dataBuffer);\n const size = Atomics.load(sizeBuffer, SZ_BUF_SIZE_IDX);\n dataBuffer = acquireDataBuffer(size);\n // console.log(\"===bigger data buffer\", taskId);\n endpoint.postMessage({ id, dataBuffer });\n yield;\n }\n\n const size = Atomics.load(sizeBuffer, SZ_BUF_SIZE_IDX);\n // console.log(\"===completing\", taskId);\n return decode(dataBuffer.slice(0, size));\n }\n\n get result() {\n if (this.#exception) {\n throw this.#exception;\n }\n // console.log(this.#resolved);\n if (this.#resolved) {\n return this.#result as unknown;\n }\n throw new Error('Not ready.');\n }\n\n syncify(): any {\n this.scheduleSync();\n this.syncifier.syncifyTask(this);\n return this.result;\n }\n}\n\nclass _Syncifier {\n nextTaskId: Int32Array;\n signalBuffer: Int32Array;\n tasks: Map<number, SyncTask>;\n\n constructor() {\n this.nextTaskId = new Int32Array([1]);\n this.signalBuffer = new Int32Array(new SharedArrayBuffer(32 * 4 + 4));\n this.tasks = new Map();\n }\n\n scheduleTask(task: SyncTask) {\n task.taskId = this.nextTaskId[0];\n this.nextTaskId[0] += 2;\n task.signalBuffer = this.signalBuffer;\n this.tasks.set(task.taskId, task);\n }\n\n waitOnSignalBuffer() {\n const timeout = 50;\n for (;;) {\n const status = Atomics.wait(this.signalBuffer, 0, 0, timeout);\n switch (status) {\n case 'ok':\n case 'not-equal':\n return;\n case 'timed-out':\n if (interruptBuffer[0] !== 0) {\n handleInterrupt();\n }\n break;\n default:\n throw new Error('Unreachable');\n }\n }\n }\n\n *tasksIdsToWakeup() {\n const flag = Atomics.load(this.signalBuffer, 0);\n for (let i = 0; i < 32; i++) {\n const bit = 1 << i;\n if (flag & bit) {\n Atomics.and(this.signalBuffer, 0, ~bit);\n const wokenTask = Atomics.exchange(this.signalBuffer, i + 1, 0);\n yield wokenTask;\n }\n }\n }\n\n pollTasks(task?: SyncTask) {\n let result = false;\n for (const wokenTaskId of this.tasksIdsToWakeup()) {\n // console.log(\"poll task\", wokenTaskId, \"looking for\",task);\n const wokenTask = this.tasks.get(wokenTaskId);\n if (!wokenTask) {\n throw new Error(`Assertion error: unknown taskId ${wokenTaskId}.`);\n }\n if (wokenTask.poll()) {\n // console.log(\"completed task \", wokenTaskId, wokenTask, wokenTask._result);\n this.tasks.delete(wokenTaskId);\n if (wokenTask === task) {\n result = true;\n }\n }\n }\n return result;\n }\n\n syncifyTask(task: SyncTask) {\n for (;;) {\n this.waitOnSignalBuffer();\n // console.log(\"syncifyTask:: woke\");\n if (this.pollTasks(task)) {\n return;\n }\n }\n }\n}\n\nconst dataBuffers: Uint8Array[][] = [];\n\nfunction acquireDataBuffer(size: number): Uint8Array {\n const powerof2 = Math.ceil(Math.log2(size));\n if (!dataBuffers[powerof2]) {\n dataBuffers[powerof2] = [];\n }\n const result = dataBuffers[powerof2].pop();\n if (result) {\n result.fill(0);\n return result;\n }\n return new Uint8Array(new SharedArrayBuffer(2 ** powerof2));\n}\n\nfunction releaseDataBuffer(buffer: Uint8Array) {\n const powerof2 = Math.ceil(Math.log2(buffer.byteLength));\n dataBuffers[powerof2].push(buffer);\n}\n\nlet interruptBuffer = new Int32Array(new ArrayBuffer(4));\n\nlet handleInterrupt = (): void => {\n interruptBuffer[0] = 0;\n throw new Error('Interrupted!');\n};\n\n/**\n * Sets the interrupt handler. This is called when the computation is\n * interrupted. Should zero the interrupt buffer and throw an exception.\n * @internal\n */\nexport function setInterruptHandler(handler: () => void) {\n handleInterrupt = handler;\n}\n\n/**\n * Sets the interrupt buffer. Should be a shared array buffer. When element 0\n * is set non-zero it signals an interrupt.\n * @internal\n */\nexport function setInterruptBuffer(buffer: ArrayBufferLike) {\n interruptBuffer = new Int32Array(buffer);\n}\n", "import type { RPtr, RTypeNumber } from './robj';\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 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 canvasExec: (op: 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) => Function;\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 readConsole: () => number;\n resolveInit: () => void;\n handleEvents: () => void;\n evalJs: (code: RPtr) => number;\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", "import { promiseHandles, newCrossOriginWorker, isCrossOrigin } from '../utils';\nimport { Message, Response, SyncRequest } from './message';\nimport { Endpoint } from './task-common';\nimport { syncResponse } from './task-main';\nimport { ChannelMain, ChannelWorker } from './channel';\nimport { ChannelType } from './channel-common';\nimport { WebROptions } from '../webr-main';\nimport { WebRChannelError } from '../error';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\nif (IN_NODE) {\n (globalThis as any).Worker = require('worker_threads').Worker as NodeWorker;\n}\n\n// Main ----------------------------------------------------------------\n\nexport class SharedBufferChannelMain extends ChannelMain {\n #interruptBuffer?: Int32Array;\n\n initialised: Promise<unknown>;\n resolve: (_?: unknown) => void;\n close = () => {};\n\n constructor(config: Required<WebROptions>) {\n super();\n const initWorker = (worker: Worker) => {\n this.#handleEventsFromWorker(worker);\n this.close = () => {\n worker.terminate();\n this.putClosedMessage();\n };\n const msg = {\n type: 'init',\n data: { config, channelType: ChannelType.SharedArrayBuffer },\n } as Message;\n worker.postMessage(msg);\n };\n\n if (isCrossOrigin(config.baseUrl)) {\n newCrossOriginWorker(`${config.baseUrl}webr-worker.js`, (worker: Worker) =>\n initWorker(worker)\n );\n } else {\n const worker = new Worker(`${config.baseUrl}webr-worker.js`);\n initWorker(worker);\n }\n\n ({ resolve: this.resolve, promise: this.initialised } = promiseHandles());\n }\n\n interrupt() {\n if (!this.#interruptBuffer) {\n throw new WebRChannelError('Failed attempt to interrupt before initialising interruptBuffer');\n }\n this.inputQueue.reset();\n this.#interruptBuffer[0] = 1;\n }\n\n #handleEventsFromWorker(worker: Worker) {\n if (IN_NODE) {\n (worker as unknown as NodeWorker).on('message', (message: Message) => {\n this.#onMessageFromWorker(worker, message);\n });\n } else {\n worker.onmessage = (ev: MessageEvent) =>\n this.#onMessageFromWorker(worker, ev.data as Message);\n }\n }\n\n #onMessageFromWorker = async (worker: Worker, message: Message) => {\n if (!message || !message.type) {\n return;\n }\n\n switch (message.type) {\n case 'resolve':\n this.#interruptBuffer = new Int32Array(message.data as SharedArrayBuffer);\n this.resolve();\n return;\n\n case 'response':\n this.resolveResponse(message as Response);\n return;\n\n case 'system':\n this.systemQueue.put(message.data as Message);\n return;\n\n default:\n this.outputQueue.put(message);\n return;\n\n case 'sync-request': {\n const msg = message as SyncRequest;\n const payload = msg.data.msg;\n const reqData = msg.data.reqData;\n\n switch (payload.type) {\n case 'read': {\n const response = await this.inputQueue.get();\n await syncResponse(worker, reqData, response);\n break;\n }\n default:\n throw new WebRChannelError(`Unsupported request type '${payload.type}'.`);\n }\n return;\n }\n case 'request':\n throw new WebRChannelError(\n \"Can't send messages of type 'request' from a worker. Please Use 'sync-request' instead.\"\n );\n }\n };\n}\n\n// Worker --------------------------------------------------------------\n\nimport { SyncTask, setInterruptHandler, setInterruptBuffer } from './task-worker';\nimport { Module } from '../emscripten';\n\nexport class SharedBufferChannelWorker implements ChannelWorker {\n #ep: Endpoint;\n #dispatch: (msg: Message) => void = () => 0;\n #interruptBuffer = new Int32Array(new SharedArrayBuffer(4));\n #interrupt = () => {};\n onMessageFromMainThread: (msg: Message) => void = () => {};\n\n constructor() {\n this.#ep = (IN_NODE ? require('worker_threads').parentPort : globalThis) as Endpoint;\n setInterruptBuffer(this.#interruptBuffer.buffer);\n setInterruptHandler(() => this.handleInterrupt());\n }\n\n resolve() {\n this.write({ type: 'resolve', data: this.#interruptBuffer.buffer });\n }\n\n write(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage(msg, transfer);\n }\n\n writeSystem(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage({ type: 'system', data: msg }, transfer);\n }\n\n read(): Message {\n const msg = { type: 'read' } as Message;\n const task = new SyncTask(this.#ep, msg);\n return task.syncify() as Message;\n }\n\n inputOrDispatch(): number {\n for (;;) {\n const msg = this.read();\n if (msg.type === 'stdin') {\n return Module.allocateUTF8(msg.data as string);\n }\n this.#dispatch(msg);\n }\n }\n\n run(args: string[]) {\n Module.callMain(args);\n }\n\n setInterrupt(interrupt: () => void) {\n this.#interrupt = interrupt;\n }\n\n handleInterrupt() {\n if (this.#interruptBuffer[0] !== 0) {\n this.#interruptBuffer[0] = 0;\n this.#interrupt();\n }\n }\n\n setDispatchHandler(dispatch: (msg: Message) => void) {\n this.#dispatch = dispatch;\n }\n}\n", "import { promiseHandles, newCrossOriginWorker, isCrossOrigin } from '../utils';\nimport {\n Message,\n newRequest,\n Response,\n Request,\n newResponse,\n} from './message';\nimport { encode, decode } from '@msgpack/msgpack';\nimport { Endpoint } from './task-common';\nimport { ChannelMain, ChannelWorker } from './channel';\nimport { ChannelType } from './channel-common';\nimport { WebROptions } from '../webr-main';\nimport { WebRChannelError } from '../error';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\nif (IN_NODE) {\n (globalThis as any).Worker = require('worker_threads').Worker as NodeWorker;\n}\n\n// Main ----------------------------------------------------------------\n\nexport class ServiceWorkerChannelMain extends ChannelMain {\n initialised: Promise<unknown>;\n\n resolve: (_?: unknown) => void;\n close = () => {};\n\n #syncMessageCache = new Map<string, Message>();\n #registration?: ServiceWorkerRegistration;\n #interrupted = false;\n\n constructor(config: Required<WebROptions>) {\n super();\n const initWorker = (worker: Worker) => {\n this.#handleEventsFromWorker(worker);\n this.close = () => {\n worker.terminate();\n this.putClosedMessage();\n };\n this.#registerServiceWorker(`${config.serviceWorkerUrl}webr-serviceworker.js`).then(\n (clientId) => {\n const msg = {\n type: 'init',\n data: {\n config,\n channelType: ChannelType.ServiceWorker,\n clientId,\n location: window.location.href,\n },\n } as Message;\n worker.postMessage(msg);\n }\n );\n };\n\n if (isCrossOrigin(config.serviceWorkerUrl)) {\n newCrossOriginWorker(`${config.serviceWorkerUrl}webr-worker.js`, (worker: Worker) =>\n initWorker(worker)\n );\n } else {\n const worker = new Worker(`${config.serviceWorkerUrl}webr-worker.js`);\n initWorker(worker);\n }\n\n ({ resolve: this.resolve, promise: this.initialised } = promiseHandles());\n }\n\n activeRegistration(): ServiceWorker {\n if (!this.#registration?.active) {\n throw new WebRChannelError('Attempted to obtain a non-existent active registration.');\n }\n return this.#registration.active;\n }\n\n interrupt() {\n this.#interrupted = true;\n }\n\n async #registerServiceWorker(url: string): Promise<string> {\n // Register service worker\n this.#registration = await navigator.serviceWorker.register(url);\n await navigator.serviceWorker.ready;\n window.addEventListener('beforeunload', () => {\n this.#registration?.unregister();\n });\n\n // Ensure we can communicate with service worker and we have a client ID\n const clientId = await new Promise<string>((resolve) => {\n navigator.serviceWorker.addEventListener(\n 'message',\n function listener(event: MessageEvent<{ type: string; clientId: string }>) {\n if (event.data.type === 'registration-successful') {\n navigator.serviceWorker.removeEventListener('message', listener);\n resolve(event.data.clientId);\n }\n }\n );\n this.activeRegistration().postMessage({ type: 'register-client-main' });\n });\n\n // Setup listener for service worker messages\n navigator.serviceWorker.addEventListener('message', (event: MessageEvent<Request>) => {\n this.#onMessageFromServiceWorker(event);\n });\n return clientId;\n }\n\n async #onMessageFromServiceWorker(event: MessageEvent<Message>) {\n if (event.data.type === 'request') {\n const uuid = event.data.data as string;\n const message = this.#syncMessageCache.get(uuid);\n if (!message) {\n throw new WebRChannelError('Request not found during service worker XHR request');\n }\n this.#syncMessageCache.delete(uuid);\n switch (message.type) {\n case 'read': {\n const response = await this.inputQueue.get();\n this.activeRegistration().postMessage({\n type: 'wasm-webr-fetch-response',\n uuid: uuid,\n response: newResponse(uuid, response),\n });\n break;\n }\n case 'interrupt': {\n const response = this.#interrupted;\n this.activeRegistration().postMessage({\n type: 'wasm-webr-fetch-response',\n uuid: uuid,\n response: newResponse(uuid, response),\n });\n this.inputQueue.reset();\n this.#interrupted = false;\n break;\n }\n default:\n throw new WebRChannelError(`Unsupported request type '${message.type}'.`);\n }\n return;\n }\n }\n\n #handleEventsFromWorker(worker: Worker) {\n if (IN_NODE) {\n (worker as unknown as NodeWorker).on('message', (message: Message) => {\n this.#onMessageFromWorker(worker, message);\n });\n } else {\n worker.onmessage = (ev: MessageEvent) =>\n this.#onMessageFromWorker(worker, ev.data as Message);\n }\n }\n\n #onMessageFromWorker = async (worker: Worker, message: Message) => {\n if (!message || !message.type) {\n return;\n }\n\n switch (message.type) {\n case 'resolve':\n this.resolve();\n return;\n\n case 'response':\n this.resolveResponse(message as Response);\n return;\n\n case 'system':\n this.systemQueue.put(message.data as Message);\n return;\n\n default:\n this.outputQueue.put(message);\n return;\n\n case 'sync-request': {\n const request = message.data as Request;\n this.#syncMessageCache.set(request.data.uuid, request.data.msg);\n return;\n }\n\n case 'request':\n throw new WebRChannelError(\n \"Can't send messages of type 'request' from a worker.\" +\n 'Use service worker fetch request instead.'\n );\n }\n };\n}\n\n// Worker --------------------------------------------------------------\n\nimport { Module } from '../emscripten';\n\nexport class ServiceWorkerChannelWorker implements ChannelWorker {\n #ep: Endpoint;\n #mainThreadId: string;\n #location: string;\n #lastInterruptReq = Date.now();\n #dispatch: (msg: Message) => void = () => 0;\n #interrupt = () => {};\n onMessageFromMainThread: (msg: Message) => void = () => {};\n\n constructor(data: { clientId?: string; location?: string }) {\n if (!data.clientId || !data.location) {\n throw new WebRChannelError(\"Can't start service worker channel\");\n }\n this.#mainThreadId = data.clientId;\n this.#location = data.location;\n this.#ep = (IN_NODE ? require('worker_threads').parentPort : globalThis) as Endpoint;\n }\n\n resolve() {\n this.write({ type: 'resolve' });\n }\n\n write(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage(msg, transfer);\n }\n\n writeSystem(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage({ type: 'system', data: msg }, transfer);\n }\n\n syncRequest(message: Message): Response {\n /*\n * Browsers timeout service workers after about 5 minutes on inactivity.\n * See e.g. service_worker_version.cc in Chromium.\n *\n * To avoid the service worker being shut down, we timeout our XHR after\n * 1 minute and then resend the request as a keep-alive. The service worker\n * uses the message UUID to identify the request and continue waiting for a\n * response from where it left off.\n */\n const request = newRequest(message);\n this.write({ type: 'sync-request', data: request });\n\n let retryCount = 0;\n for (;;) {\n try {\n const url = new URL('__wasm__/webr-fetch-request/', this.#location);\n const xhr = new XMLHttpRequest();\n xhr.timeout = 60000;\n xhr.responseType = 'arraybuffer';\n xhr.open('POST', url, false);\n const fetchReqBody = {\n clientId: this.#mainThreadId,\n uuid: request.data.uuid,\n };\n xhr.send(encode(fetchReqBody));\n return decode(xhr.response as ArrayBuffer) as Response;\n } catch (e: any) {\n if (e instanceof DOMException && retryCount++ < 1000) {\n console.log('Service worker request failed - resending request');\n } else {\n throw e;\n }\n }\n }\n }\n\n read(): Message {\n const response = this.syncRequest({ type: 'read' });\n return response.data.resp as Message;\n }\n\n inputOrDispatch(): number {\n for (;;) {\n const msg = this.read();\n if (msg.type === 'stdin') {\n return Module.allocateUTF8(msg.data as string);\n }\n this.#dispatch(msg);\n }\n }\n\n run(args: string[]) {\n Module.callMain(args);\n }\n\n setInterrupt(interrupt: () => void) {\n this.#interrupt = interrupt;\n }\n\n handleInterrupt() {\n /* During R computation we have no way to directly interrupt the worker\n * thread. Instead, we hook into R's PolledEvents. Since we are not using\n * SharedArrayBuffer as a signal method, we instead send a message to the\n * main thread to ask if we should interrupt R.\n *\n * The rate of requests is limited to once per second. This stops the\n * browser being overloaded with XHR sync requests while R is working.\n */\n if (Date.now() > this.#lastInterruptReq + 1000) {\n this.#lastInterruptReq = Date.now();\n const response = this.syncRequest({ type: 'interrupt' });\n const interrupted = response.data.resp as boolean;\n if (interrupted) {\n this.#interrupt();\n }\n }\n }\n\n setDispatchHandler(dispatch: (msg: Message) => void) {\n this.#dispatch = dispatch;\n }\n}\n", "import { promiseHandles, ResolveFn, newCrossOriginWorker, isCrossOrigin } from '../utils';\nimport { Message, newRequest, Response, Request, newResponse } from './message';\nimport { Endpoint } from './task-common';\nimport { ChannelType } from './channel-common';\nimport { WebROptions } from '../webr-main';\nimport { ChannelMain } from './channel';\nimport { WebRChannelError } from '../error';\n\nimport { IN_NODE } from '../compat';\nimport type { Worker as NodeWorker } from 'worker_threads';\nif (IN_NODE) {\n (globalThis as any).Worker = require('worker_threads').Worker as NodeWorker;\n}\n\n// Main ----------------------------------------------------------------\n\nexport class PostMessageChannelMain extends ChannelMain {\n\n initialised: Promise<unknown>;\n resolve: (_?: unknown) => void;\n close = () => {};\n #worker?: Worker;\n\n constructor(config: Required<WebROptions>) {\n super();\n const initWorker = (worker: Worker) => {\n this.#worker = worker;\n this.#handleEventsFromWorker(worker);\n this.close = () => worker.terminate();\n const msg = {\n type: 'init',\n data: { config, channelType: ChannelType.PostMessage },\n } as Message;\n worker.postMessage(msg);\n };\n\n if (isCrossOrigin(config.baseUrl)) {\n newCrossOriginWorker(`${config.baseUrl}webr-worker.js`, (worker: Worker) =>\n initWorker(worker)\n );\n } else {\n const worker = new Worker(`${config.baseUrl}webr-worker.js`);\n initWorker(worker);\n }\n\n ({ resolve: this.resolve, promise: this.initialised } = promiseHandles());\n }\n\n interrupt() {\n console.error('Interrupting R execution is not available when using the PostMessage channel');\n }\n\n #handleEventsFromWorker(worker: Worker) {\n if (IN_NODE) {\n (worker as unknown as NodeWorker).on('message', (message: Message) => {\n this.#onMessageFromWorker(worker, message);\n });\n } else {\n worker.onmessage = (ev: MessageEvent) =>\n this.#onMessageFromWorker(worker, ev.data as Message);\n }\n }\n\n #onMessageFromWorker = async (worker: Worker, message: Message) => {\n if (!message || !message.type) {\n return;\n }\n\n switch (message.type) {\n case 'resolve':\n this.resolve();\n return;\n\n case 'response':\n this.resolveResponse(message as Response);\n return;\n\n case 'system':\n this.systemQueue.put(message.data as Message);\n return;\n\n default:\n this.outputQueue.put(message);\n return;\n\n case 'request': {\n const msg = message as Request;\n const payload = msg.data.msg;\n\n switch (payload.type) {\n case 'read': {\n const input = await this.inputQueue.get();\n if (this.#worker) {\n const response = newResponse(msg.data.uuid, input);\n this.#worker.postMessage(response);\n }\n break;\n }\n default:\n throw new WebRChannelError(`Unsupported request type '${payload.type}'.`);\n }\n return;\n }\n\n case 'sync-request':\n throw new WebRChannelError(\n \"Can't send messages of type 'sync-request' in PostMessage mode. Use 'request' instead.\"\n );\n }\n };\n}\n\n// Worker --------------------------------------------------------------\n\nimport { Module as _Module } from '../emscripten';\n\ndeclare let Module: _Module;\n\nexport class PostMessageChannelWorker {\n #ep: Endpoint;\n #parked = new Map<string, ResolveFn>();\n #dispatch: (msg: Message) => void = () => 0;\n #promptDepth = 0;\n\n constructor() {\n this.#ep = (IN_NODE ? require('worker_threads').parentPort : globalThis) as Endpoint;\n }\n\n resolve() {\n this.write({ type: 'resolve' });\n }\n\n write(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage(msg, transfer);\n }\n\n writeSystem(msg: Message, transfer?: [Transferable]) {\n this.#ep.postMessage({ type: 'system', data: msg }, transfer);\n }\n\n read(): Message {\n throw new WebRChannelError(\n 'Unable to synchronously read when using the `PostMessage` channel.'\n );\n }\n\n inputOrDispatch(): number {\n if (this.#promptDepth > 0) {\n this.#promptDepth = 0;\n const msg = Module.allocateUTF8OnStack(\n \"Can't block for input when using the PostMessage communication channel.\"\n );\n Module._Rf_error(msg);\n }\n this.#promptDepth++;\n // Unable to block, so just return a NULL\n return 0;\n }\n\n run(_args: string[]) {\n const args: string[] = _args || [];\n args.unshift('R');\n const argc = args.length;\n const argv = Module._malloc(4 * (argc + 1));\n args.forEach((arg, idx) => {\n const argvPtr = argv + 4 * idx;\n const argPtr = Module.allocateUTF8(arg);\n Module.setValue(argvPtr, argPtr, '*');\n });\n\n this.writeSystem({\n type: 'console.warn',\n data: 'WebR is using `PostMessage` communication channel, nested R REPLs are not available.',\n });\n\n Module._Rf_initialize_R(argc, argv);\n Module._setup_Rmainloop();\n Module._R_ReplDLLinit();\n Module._R_ReplDLLdo1();\n this.#asyncREPL();\n }\n\n setDispatchHandler(dispatch: (msg: Message) => void) {\n this.#dispatch = dispatch;\n }\n\n async request(msg: Message, transferables?: [Transferable]): Promise<any> {\n const req = newRequest(msg, transferables);\n\n const { resolve: resolve, promise: prom } = promiseHandles();\n this.#parked.set(req.data.uuid, resolve);\n\n this.write(req);\n return prom;\n }\n\n setInterrupt(_: () => void) {}\n handleInterrupt() {}\n\n onMessageFromMainThread(message: Message) {\n const msg = message as Response;\n const uuid = msg.data.uuid;\n const resolve = this.#parked.get(uuid);\n\n if (resolve) {\n this.#parked.delete(uuid);\n resolve(msg.data.resp);\n } else {\n console.warn(\"Can't find request.\");\n }\n }\n\n /*\n * This is a fallback REPL for webR running in PostMessage mode. The prompt\n * section of R's R_ReplDLLdo1 returns empty with -1, which allows this\n * fallback REPL to yield to the event loop with await.\n *\n * The drawback of this approach is that nested REPLs do not work, such as\n * realine, browser or menu. Attempting to use a nested REPL prints an error\n * to the JS console.\n *\n * R/Wasm errors during execution are caught and the REPL is restarted at the\n * top level. Any other JS errors are re-thrown.\n */\n #asyncREPL = async () => {\n for (;;) {\n try {\n this.#promptDepth = 0;\n const msg = (await this.request({ type: 'read' })) as Message;\n if (msg.type === 'stdin') {\n // Copy the new input into WASM memory\n const str = Module.allocateUTF8(msg.data as string);\n Module._strcpy(Module._DLLbuf, str);\n Module.setValue(Module._DLLbufp, Module._DLLbuf, '*');\n Module._free(str);\n\n // Execute the R code using a single step of R's built in REPL\n try {\n while (Module._R_ReplDLLdo1() > 0);\n } catch (e: any) {\n if (e instanceof (WebAssembly as any).Exception) {\n // R error: clear command buffer and reproduce prompt\n Module._R_ReplDLLinit();\n Module._R_ReplDLLdo1();\n } else {\n throw e;\n }\n }\n } else {\n this.#dispatch(msg);\n }\n } catch (e) {\n // Don't break the REPL loop on any other Wasm issues\n if (!(e instanceof (WebAssembly as any).Exception)) {\n throw e;\n }\n }\n }\n };\n}\n", "import { SharedBufferChannelMain, SharedBufferChannelWorker } from './channel-shared';\nimport { ServiceWorkerChannelMain, ServiceWorkerChannelWorker } from './channel-service';\nimport { PostMessageChannelMain, PostMessageChannelWorker } from './channel-postmessage';\nimport { WebROptions } from '../webr-main';\nimport { WebRChannelError } from '../error';\n\n// This file refers to objects imported from `./channel-shared` and\n// `./channel-service.` These can't be included in `./channel` as this\n// causes a circular dependency issue.\n\nexport const ChannelType = {\n Automatic: 0,\n SharedArrayBuffer: 1,\n ServiceWorker: 2,\n PostMessage: 3,\n} as const;\n\nexport type ChannelInitMessage = {\n type: string;\n data: {\n config: Required<WebROptions>;\n channelType: Exclude<\n (typeof ChannelType)[keyof typeof ChannelType],\n typeof ChannelType.Automatic\n >;\n clientId?: string;\n location?: string;\n };\n};\n\nexport function newChannelMain(data: Required<WebROptions>) {\n switch (data.channelType) {\n case ChannelType.SharedArrayBuffer:\n return new SharedBufferChannelMain(data);\n case ChannelType.ServiceWorker:\n return new ServiceWorkerChannelMain(data);\n case ChannelType.PostMessage:\n return new PostMessageChannelMain(data);\n case ChannelType.Automatic:\n default:\n if (typeof SharedArrayBuffer !== 'undefined') {\n return new SharedBufferChannelMain(data);\n } else {\n return new PostMessageChannelMain(data);\n }\n }\n}\n\nexport function newChannelWorker(msg: ChannelInitMessage) {\n switch (msg.data.channelType) {\n case ChannelType.SharedArrayBuffer:\n return new SharedBufferChannelWorker();\n case ChannelType.ServiceWorker:\n return new ServiceWorkerChannelWorker(msg.data);\n case ChannelType.PostMessage:\n return new PostMessageChannelWorker();\n default:\n throw new WebRChannelError('Unknown worker channel type recieved');\n }\n}\n", "import { IN_NODE } from './compat';\n\nexport const BASE_URL = IN_NODE ? __dirname + '/' : 'https://webr.r-wasm.org/v0.2.2/';\nexport const PKG_BASE_URL = 'https://repo.r-wasm.org';\n", "/**\n * Module for working with R objects on the main thead through\n * JavaScript proxies. The `RObject` types in `RMain` are aliases for\n * proxies to the corresponding types in `RWorker`. For instance,\n * `RMain.RCharacter` is an alias for `RMain.RProxy<RWorker.RCharacter>`.\n * The proxies automatically and asynchronously forward method and\n * getter calls to the implementations on the R worker side.\n * @module RMain\n */\nimport type { RProxy } from './proxy';\nimport { isWebRPayloadPtr } from './payload';\nimport * as RWorker from './robj-worker';\n\n// RProxy<RWorker.RObject> type aliases\nexport type RObject = RProxy<RWorker.RObject>;\nexport type RNull = RProxy<RWorker.RNull>;\nexport type RSymbol = RProxy<RWorker.RSymbol>;\nexport type RPairlist = RProxy<RWorker.RPairlist>;\nexport type REnvironment = RProxy<RWorker.REnvironment>;\nexport type RString = RProxy<RWorker.RString>;\nexport type RLogical = RProxy<RWorker.RLogical>;\nexport type RInteger = RProxy<RWorker.RInteger>;\nexport type RDouble = RProxy<RWorker.RDouble>;\nexport type RComplex = RProxy<RWorker.RComplex>;\nexport type RCharacter = RProxy<RWorker.RCharacter>;\nexport type RList = RProxy<RWorker.RList>;\nexport type RRaw = RProxy<RWorker.RRaw>;\nexport type RCall = RProxy<RWorker.RCall>;\n// RFunction proxies are callable\nexport type RFunction = RProxy<RWorker.RFunction> & ((...args: unknown[]) => Promise<unknown>);\n\n/**\n * Test for an RObject instance\n *\n * RObject is the user facing interface to R objects.\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RObject.\n */\nexport function isRObject(value: any): value is RObject {\n return (\n value &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'payloadType' in value &&\n isWebRPayloadPtr(value._payload)\n );\n}\n\n/**\n * Test for an RNull instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RNull.\n */\nexport function isRNull(value: any): value is RNull {\n return isRObject(value) && value._payload.obj.type === 'null';\n}\n\n/**\n * Test for an RSymbol instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RSymbol.\n */\nexport function isRSymbol(value: any): value is RSymbol {\n return isRObject(value) && value._payload.obj.type === 'symbol';\n}\n\n/**\n * Test for an RPairlist instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RPairlist.\n */\nexport function isRPairlist(value: any): value is RPairlist {\n return isRObject(value) && value._payload.obj.type === 'pairlist';\n}\n\n/**\n * Test for an REnvironment instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an REnvironment.\n */\nexport function isREnvironment(value: any): value is REnvironment {\n return isRObject(value) && value._payload.obj.type === 'environment';\n}\n\n/**\n * Test for an RLogical instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RLogical.\n */\nexport function isRLogical(value: any): value is RLogical {\n return isRObject(value) && value._payload.obj.type === 'logical';\n}\n\n/**\n * Test for an RInteger instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RInteger.\n */\nexport function isRInteger(value: any): value is RInteger {\n return isRObject(value) && value._payload.obj.type === 'integer';\n}\n\n/**\n * Test for an RDouble instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RDouble.\n */\nexport function isRDouble(value: any): value is RDouble {\n return isRObject(value) && value._payload.obj.type === 'double';\n}\n\n/**\n * Test for an RComplex instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RComplex.\n */\nexport function isRComplex(value: any): value is RComplex {\n return isRObject(value) && value._payload.obj.type === 'complex';\n}\n\n/**\n * Test for an RCharacter instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RCharacter.\n */\nexport function isRCharacter(value: any): value is RCharacter {\n return isRObject(value) && value._payload.obj.type === 'character';\n}\n\n/**\n * Test for an RList instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RList.\n */\nexport function isRList(value: any): value is RList {\n return isRObject(value) && value._payload.obj.type === 'list';\n}\n\n/**\n * Test for an RRaw instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RRaw.\n */\nexport function isRRaw(value: any): value is RRaw {\n return isRObject(value) && value._payload.obj.type === 'raw';\n}\n\n/**\n * Test for an RCall instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RCall.\n */\nexport function isRCall(value: any): value is RCall {\n return isRObject(value) && value._payload.obj.type === 'call';\n}\n\n/**\n * Test for an RFunction instance\n * @param {any} value The object to test.\n * @returns {boolean} True if the object is an instance of an RFunction.\n */\nexport function isRFunction(value: any): value is RFunction {\n return Boolean(isRObject(value) && value._payload.obj.methods?.includes('exec'));\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)[keyof typeof RTypeMap];\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 | 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 | { [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 | (T | null)[]\n | WebRDataJsAtomic<T>\n | NamedObject<T | null>;\n\n/**\n * `WebRDataJs` objects form a tree structure, used when serialising R objects\n * into a JavaScript respresentation.\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' && 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 } 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 { 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(RTypeMap[obj.type]))(obj);\n }\n\n // Conversion of explicit R NULL value\n if (obj && typeof obj === 'object' && 'type' in obj && obj.type === 'null') {\n return new 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 if (Array.isArray(obj)) {\n return newObjectFromArray(obj);\n }\n\n throw new Error('Robj construction for this JS object is not yet supported');\n}\n\n// JS arrays are interpreted using R's c() function, so as to match\n// R's built in coercion rules\nfunction newObjectFromArray(arr: WebRData[]) {\n const prot = { n: 0 };\n\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 type = Module._TYPEOF(ptr);\n return new (getRWorkerClass(type as RTypeNumber))(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 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 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 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, v]) => k);\n if (!allowDuplicateKey && new Set(keys).size !== keys.length) {\n throw new Error('Duplicate key when converting pairlist without allowDuplicateKey enabled');\n }\n if (!allowEmptyKey && keys.some((k) => !k)) {\n throw new Error('Empty or null key when converting pairlist without allowEmptyKey enabled');\n }\n return Object.fromEntries(\n entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx)\n );\n }\n\n entries(options: 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 RObject.wrap(safeEval(this.ptr, objs.baseEnv));\n }\n}\n\nexport class RList extends RObject {\n constructor(val: WebRData) {\n if (val instanceof RObjectBase) {\n assertRType(val, 'list');\n super(val);\n return this;\n }\n\n const prot = { n: 0 };\n\n try {\n const { names, values } = toWebRData(val);\n const ptr = Module._Rf_allocVector(RTypeMap.list, values.length);\n protectInc(ptr, prot);\n\n values.forEach((v, i) => {\n Module._SET_VECTOR_ELT(ptr, i, new RObject(v).ptr);\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 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, v]) => k);\n if (!allowDuplicateKey && new Set(keys).size !== keys.length) {\n throw new Error('Duplicate key when converting list without allowDuplicateKey enabled');\n }\n if (!allowEmptyKey && keys.some((k) => !k)) {\n throw new Error('Empty or null key when converting list without allowEmptyKey enabled');\n }\n return Object.fromEntries(\n entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx)\n );\n }\n\n entries(options: { depth: number } = { depth: 1 }): NamedEntries<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: { 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 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\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 = 0 } = {}): NamedObject<WebRData> {\n const symbols = this.names();\n return Object.fromEntries(\n [...Array(symbols.length).keys()].map((i) => {\n return [symbols[i], this.getDollar(symbols[i]).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(prop: string): 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, v]) => k);\n if (!allowDuplicateKey && new Set(keys).size !== keys.length) {\n throw new Error(\n 'Duplicate key when converting atomic vector without allowDuplicateKey enabled'\n );\n }\n if (!allowEmptyKey && keys.some((k) => !k)) {\n throw new Error(\n 'Empty or null key when converting atomic vector without allowEmptyKey enabled'\n );\n }\n return Object.fromEntries(\n entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx)\n );\n }\n\n entries(): NamedEntries<T | null> {\n const values = this.toArray();\n const names = this.names();\n return values.map((v, i) => [names ? names[i] : null, v]);\n }\n\n 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 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: RTypeNumber): typeof RObject {\n const typeClasses: { [key: number]: typeof RObject } = {\n [RTypeMap.null]: RNull,\n [RTypeMap.symbol]: RSymbol,\n [RTypeMap.pairlist]: RPairlist,\n [RTypeMap.closure]: RFunction,\n [RTypeMap.environment]: REnvironment,\n [RTypeMap.call]: RCall,\n [RTypeMap.special]: RFunction,\n [RTypeMap.builtin]: RFunction,\n [RTypeMap.string]: RString,\n [RTypeMap.logical]: RLogical,\n [RTypeMap.integer]: RInteger,\n [RTypeMap.double]: RDouble,\n [RTypeMap.complex]: RComplex,\n [RTypeMap.character]: RCharacter,\n [RTypeMap.list]: RList,\n [RTypeMap.raw]: RRaw,\n [RTypeMap.function]: RFunction,\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 * 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", "/**\n * Proxy R objects on the webR worker thread so that they can be accessed from\n * the main thread.\n * @module Proxy\n */\nimport { ChannelMain } from './chan/channel';\nimport { replaceInObject } from './utils';\nimport { isWebRPayloadPtr, WebRPayloadPtr, WebRPayload } from './payload';\nimport { RType, WebRData, WebRDataRaw } from './robj';\nimport { isRObject, RObject, isRFunction } from './robj-main';\nimport * as RWorker from './robj-worker';\nimport { ShelterID, CallRObjectMethodMessage, NewRObjectMessage } from './webr-chan';\nimport type * as Payload from './payload';\nimport { WebRError, WebRPayloadError } from './error';\n\n/**\n * Obtain a union of the keys corresponding to methods of a given class `T`.\n * @typeParam T The type to provide the methods for.\n */\nexport type Methods<T> = {\n [P in keyof T]: T[P] extends (...args: any) => any ? P : never;\n}[keyof T];\n\n/**\n * Distributive conditional type for {@link RProxy}.\n *\n * Distributes {@link RProxy} over any {@link RWorker.RObject} in the given\n * union type U.\n * @typeParam U The type union to distribute {@link RProxy} over.\n */\nexport type DistProxy<U> = U extends RWorker.RObject ? RProxy<U> : U;\n\n/**\n * Convert {@link RWorker.RObject} properties for use with an {@link RProxy}.\n *\n * Properties in the type parameter `T` are mapped so that {@link RProxy} is\n * distributed over any {@link RWorker.RObject} types, then wrapped in a\n * Promise.\n *\n * Function signatures are mapped so that arguments with {@link RWorker.RObject}\n * type instead take {@link RProxy}<{@link RWorker.RObject}> type. Other\n * function arguments remain as they are. The function return type is also\n * converted to a corresponding type using `RProxify` recursively.\n * @typeParam T The type to convert.\n */\nexport type RProxify<T> = T extends Array<any>\n ? Promise<DistProxy<T[0]>[]>\n : T extends (...args: infer U) => any\n ? (\n ...args: {\n [V in keyof U]: DistProxy<U[V]>;\n }\n ) => RProxify<ReturnType<T>>\n : Promise<DistProxy<T>>;\n\n/**\n * Create an {@link RProxy} based on an {@link RWorker.RObject} type parameter.\n *\n * R objects created via an {@link RProxy} are intended to be used in place of\n * {@link RWorker.RObject} on the main thread. An {@link RProxy} object has the\n * same instance methods as the given {@link RWorker.RObject} parameter, with\n * the following differences:\n * * Method arguments take `RProxy` in place of {@link RWorker.RObject}.\n *\n * * Where an {@link RWorker.RObject} would be returned, an `RProxy` is\n * returned instead.\n *\n * * All return types are wrapped in a Promise.\n *\n * If required, the {@link Payload.WebRPayloadPtr} object associated with the\n * proxy can be accessed directly through the `_payload` property.\n * @typeParam T The {@link RWorker.RObject} type to convert into `RProxy` type.\n */\nexport type RProxy<T extends RWorker.RObject> = { [P in Methods<T>]: RProxify<T[P]> } & {\n _payload: WebRPayloadPtr;\n [Symbol.asyncIterator](): AsyncGenerator<RProxy<RWorker.RObject>, void, unknown>;\n};\n\n/**\n * Create a proxy constructor based on a {@link RWorker.RObject} class.\n *\n * The class constructors and static methods of the given subclass of\n * {@link RWorker.RObject} are proxied, and the proxied constructor returns a\n * promise to an R object of a given {@link RProxy} type.\n * @typeParam T The type of the {@link RWorker.RObject} class to be proxied.\n * @typeParam R The type to be returned from the proxied class constructor.\n */\nexport type ProxyConstructor<T,R> = (T extends abstract new (...args: infer U) => any\n ? {\n new (\n ...args: {\n [V in keyof U]: U[V];\n }\n ): Promise<R>;\n }\n : never) & {\n [P in Methods<typeof RWorker.RObject>]: RProxify<(typeof RWorker.RObject)[P]>;\n };\n\n/* The empty function is used as base when we are proxying RFunction objects.\n * This enables function call semantics on the proxy using the apply hook.\n */\nfunction empty() {}\n\n/* Proxy the asyncIterator property for R objects with a length. This allows us\n * to use the `for await (i of obj){}` JavaScript syntax.\n */\nfunction targetAsyncIterator(chan: ChannelMain, proxy: RProxy<RWorker.RObject>) {\n return async function* () {\n // Get the R object's length\n const msg: CallRObjectMethodMessage = {\n type: 'callRObjectMethod',\n data: {\n payload: proxy._payload,\n prop: 'getPropertyValue',\n args: [{ payloadType: 'raw', obj: 'length' }],\n shelter: undefined, // TODO\n },\n };\n const reply = await chan.request(msg);\n\n // Throw an error if there was some problem accessing the object length\n if (typeof reply.obj !== 'number') {\n throw new WebRError('Cannot iterate over object, unexpected type for length property.');\n }\n\n // Loop through the object and yield values\n for (let i = 1; i <= reply.obj; i++) {\n yield proxy.get(i);\n }\n };\n}\n\n/**\n * Proxy an R object method by providing an async function that requests that\n * the worker thread calls the method and then returns the result.\n *\n * When the optional payload argument has not been provided, an\n * {@link RWorker.RObject} static method is called.\n * @internal\n */\nexport function targetMethod(chan: ChannelMain, prop: string): any;\nexport function targetMethod(chan: ChannelMain, prop: string, payload: WebRPayloadPtr): any;\nexport function targetMethod(chan: ChannelMain, prop: string, payload?: WebRPayloadPtr): any {\n return async (..._args: WebRData[]) => {\n const args = _args.map((arg) => {\n if (isRObject(arg)) {\n return arg._payload;\n }\n return {\n obj: replaceInObject(arg, isRObject, (obj: RObject) => obj._payload),\n payloadType: 'raw',\n } as WebRPayload;\n });\n\n const msg: CallRObjectMethodMessage = {\n type: 'callRObjectMethod',\n data: { payload, prop, args: args },\n };\n const reply = await chan.request(msg);\n\n switch (reply.payloadType) {\n case 'ptr':\n return newRProxy(chan, reply);\n case 'raw': {\n const proxyReply = replaceInObject(\n reply,\n isWebRPayloadPtr,\n (obj: WebRPayloadPtr, chan: ChannelMain) => newRProxy(chan, obj),\n chan\n ) as WebRPayload;\n return proxyReply.obj;\n }\n }\n };\n}\n\n/* Proxy the `RWorker` class constructors. This allows us to create a new R\n * object on the worker thread from a given JS object.\n */\nasync function newRObject(\n chan: ChannelMain,\n objType: RType | 'object',\n shelter: ShelterID,\n value: WebRData\n) {\n const msg: NewRObjectMessage = {\n type: 'newRObject',\n data: {\n objType,\n obj: replaceInObject(value, isRObject, (obj: RObject) => obj._payload),\n shelter: shelter,\n },\n };\n const payload = await chan.request(msg);\n switch (payload.payloadType) {\n case 'raw':\n throw new WebRPayloadError('Unexpected raw payload type returned from newRObject');\n case 'ptr':\n return newRProxy(chan, payload);\n }\n}\n\n/**\n * Proxy an R object.\n *\n * The proxy targets a particular R object in WebAssembly memory. Methods of the\n * relevant subclass of {@link RWorker.RObject} are proxied, enabling\n * structured manipulation of R objects from the main thread.\n * @param {ChannelMain} chan The current main thread communication channel.\n * @param {WebRPayloadPtr} payload A webR payload referencing an R object.\n * @returns {RProxy<RWorker.RObject>} An {@link RObject} corresponding to the\n * referenced R object.\n */\nexport function newRProxy(chan: ChannelMain, payload: WebRPayloadPtr): RProxy<RWorker.RObject> {\n const proxy = new Proxy(\n // Assume we are proxying an RFunction if the methods list contains 'exec'.\n payload.obj.methods?.includes('exec') ? Object.assign(empty, { ...payload }) : payload,\n {\n get: (_: WebRPayload, prop: string | number | symbol) => {\n if (prop === '_payload') {\n return payload;\n } else if (prop === Symbol.asyncIterator) {\n return targetAsyncIterator(chan, proxy);\n } else if (payload.obj.methods?.includes(prop.toString())) {\n return targetMethod(chan, prop.toString(), payload);\n }\n },\n apply: async (_: WebRPayload, _thisArg, args: (WebRDataRaw | RProxy<RWorker.RObject>)[]) => {\n const res = await (newRProxy(chan, payload) as RProxy<RWorker.RFunction>).exec(...args);\n return isRFunction(res) ? res : res.toJs();\n },\n }\n ) as unknown as RProxy<RWorker.RObject>;\n return proxy;\n}\n\n/**\n * Proxy an {@link RWorker.RObject} class.s\n * @param {ChannelMain} chan The current main thread communication channel.\n * @param {ShelterID} shelter The shelter ID to protect returned objects with.\n * @param {(RType | 'object')} objType The R object type, or `'object'` for the\n * generic {@link RWorker.RObject} class.\n * @returns {ProxyConstructor} A proxy to the R object subclass corresponding to\n * the given value of the `objType` argument.\n * @typeParam T The type of the {@link RWorker.RObject} class to be proxied.\n * @typeParam R The type to be returned from the proxied class constructor.\n */\nexport function newRClassProxy<T, R>(\n chan: ChannelMain,\n shelter: ShelterID,\n objType: RType | 'object'\n) {\n return new Proxy(RWorker.RObject, {\n construct: (_, args: [WebRData]) => newRObject(chan, objType, shelter, ...args),\n get: (_, prop: string | number | symbol) => {\n return targetMethod(chan, prop.toString());\n },\n }) as unknown as ProxyConstructor<T,R>;\n}\n", "import { IN_NODE } from './compat';\nimport { WebR, WebROptions } from './webr-main';\n\nexport interface ConsoleCallbacks {\n stdout?: (line: string) => void;\n stderr?: (line: string) => void;\n prompt?: (line: string) => void;\n canvasImage?: (image: ImageBitmap) => void;\n canvasNewPage?: () => void;\n}\n\n/**\n * Text-based Interactive Console for WebR\n *\n * A helper application to assist in creating an interactive R REPL based on\n * JavaScript callbacks.\n *\n * Callback functions ``stdout`` and ``stderr`` are called with a single line\n * of output as the first argument. The default implementation of `stdout` and\n * `stderr` writes to the console using `console.log` and `console.error`.\n *\n * R code can be sent as input by calling the ``stdin`` method with a single\n * line of textual input.\n *\n * A long running R computation can be interrupted by calling the `interrupt`\n * method.\n *\n * The ``prompt`` callback function is called when webR produces a prompt at\n * the REPL console and is therefore awaiting user input. The prompt character\n * (usually ``>`` or ``+``) is given as the first argument to the callback\n * function. The default implementation of `prompt` shows a JavaScript prompt\n * asking the user for input, and then sends the user input to `stdin`.\n *\n * The ``canvasImage`` callback function is called when webR writes plots to\n * the built-in HTML canvas graphics device.\n *\n * The ``canvasNewPage`` callback function is called when webR creates a new\n * plot.\n *\n * Once constructed, start the Console using the ``run`` method. The `run`\n * method starts an asynchronous infinite loop that waits for output from the\n * webR worker and then calls the relevant callbacks.\n */\nexport class Console {\n /** The supporting instance of webR */\n webR: WebR;\n /**\n * A HTML canvas element\n *\n * The canvas graphics device writes to this element by default. Undefined\n * when HTML canvas is unsupported.\n */\n canvas: HTMLCanvasElement | undefined;\n /** Called when webR outputs to ``stdout`` */\n #stdout: (line: string) => void;\n /** Called when webR outputs to ``stderr`` */\n #stderr: (line: string) => void;\n /** Called when webR prompts for input */\n #prompt: (line: string) => void;\n /** Called when webR writes to the HTML canvas element */\n #canvasImage: (image: ImageBitmap) => void;\n /** Called when webR creates a new plot */\n #canvasNewPage: () => void;\n\n /**\n * @param {ConsoleCallbacks} callbacks A list of webR Console callbacks to\n * be used for this console.\n * @param {WebROptions} options The options to use for the new instance of\n * webR started to support this console.\n */\n constructor(\n callbacks: ConsoleCallbacks = {},\n options: WebROptions = {\n REnv: {\n R_HOME: '/usr/lib/R',\n FONTCONFIG_PATH: '/etc/fonts',\n R_ENABLE_JIT: '0',\n },\n }\n ) {\n this.webR = new WebR(options);\n if (!IN_NODE) {\n this.canvas = document.createElement('canvas');\n this.canvas.setAttribute('width', '1008');\n this.canvas.setAttribute('height', '1008');\n }\n this.#stdout = callbacks.stdout || this.#defaultStdout;\n this.#stderr = callbacks.stderr || this.#defaultStderr;\n this.#prompt = callbacks.prompt || this.#defaultPrompt;\n this.#canvasImage = callbacks.canvasImage || this.#defaultcanvasImage;\n this.#canvasNewPage = callbacks.canvasNewPage || this.#defaultcanvasNewPage;\n this.webR.evalRVoid('options(device=webr::canvas)');\n }\n\n /**\n * Write a line of input to webR's REPL through ``stdin``\n * @param {string} input A line of input text.\n */\n stdin(input: string) {\n this.webR.writeConsole(input);\n }\n\n /**\n * Interrupt a long running R computation and return to the prompt\n */\n interrupt() {\n this.webR.interrupt();\n }\n\n /**\n * The default function called when webR outputs to ``stdout``\n * @param {string} text The line sent to stdout by webR.\n */\n #defaultStdout = (text: string) => {\n console.log(text);\n };\n\n /**\n * The default function called when webR outputs to ``stderr``\n * @param {string} text The line sent to stderr by webR.\n */\n #defaultStderr = (text: string) => {\n console.error(text);\n };\n\n /**\n * The default function called when webR writes out a prompt\n * @param {string} text The text content of the prompt.\n */\n #defaultPrompt = (text: string) => {\n const input = prompt(text);\n if (input) this.stdin(`${input}\\n`);\n };\n\n /**\n * The default function called when webR writes to HTML canvas\n * @param {ImageBitmap} image An ImageBitmap containing the image data.\n */\n #defaultcanvasImage = (image: ImageBitmap) => {\n if (IN_NODE) {\n throw new Error('Plotting with HTML canvas is not yet supported under Node');\n }\n this.canvas!.getContext('2d')!.drawImage(image, 0, 0);\n };\n\n /**\n * The default function called when webR creates a new plot\n */\n #defaultcanvasNewPage = () => {\n if (IN_NODE) {\n throw new Error('Plotting with HTML canvas is not yet supported under Node');\n }\n this.canvas!.getContext('2d')!.clearRect(0, 0, this.canvas!.width, this.canvas!.height);\n };\n\n /**\n * Start the webR console\n */\n run() {\n this.#run();\n }\n\n /*\n * Start the asynchronous infinite loop\n *\n * This loop waits for output from webR and dispatches callbacks based on the\n * message recieved.\n *\n * The promise returned by this asynchronous function resolves only once the\n * webR communication channel has closed.\n */\n async #run() {\n for (;;) {\n const output = await this.webR.read();\n switch (output.type) {\n case 'stdout':\n this.#stdout(output.data as string);\n break;\n case 'stderr':\n this.#stderr(output.data as string);\n break;\n case 'prompt':\n this.#prompt(output.data as string);\n break;\n case 'canvas':\n if (output.data.event === 'canvasImage') {\n this.#canvasImage(output.data.image as ImageBitmap);\n } else if (output.data.event === 'canvasNewPage') {\n this.#canvasNewPage();\n }\n break;\n case 'closed':\n return;\n default:\n console.warn(`Unhandled output type for webR Console: ${output.type}.`);\n }\n }\n }\n}\n", "/**\n * The webR JavaScript API.\n * @module WebR\n */\n\nimport { ChannelMain } from './chan/channel';\nimport { newChannelMain, ChannelType } from './chan/channel-common';\nimport { Message } from './chan/message';\nimport { BASE_URL, PKG_BASE_URL } from './config';\nimport { EmPtr } from './emscripten';\nimport { WebRPayloadPtr } from './payload';\nimport { newRProxy, newRClassProxy } from './proxy';\nimport { isRObject, RCharacter, RComplex, RDouble } from './robj-main';\nimport { REnvironment, RSymbol, RInteger } from './robj-main';\nimport { RList, RLogical, RNull, RObject, RPairlist, RRaw, RString, RCall } from './robj-main';\nimport { replaceInObject } from './utils';\nimport * as RWorker from './robj-worker';\nimport { WebRError, WebRPayloadError } from './error';\n\nimport {\n CaptureRMessage,\n EvalRMessage,\n EvalRMessageOutputType,\n EvalRMessageRaw,\n EvalROptions,\n FSMessage,\n FSMountMessage,\n FSReadFileMessage,\n FSWriteFileMessage,\n InstallPackagesOptions,\n InvokeWasmFunctionMessage,\n NewShelterMessage,\n ShelterDestroyMessage,\n ShelterMessage,\n} from './webr-chan';\n\nexport { Console, ConsoleCallbacks } from './console';\nexport * from './robj-main';\nexport * from './error';\nexport { ChannelType } from './chan/channel-common';\n\n/**\n * The webR FS API for interacting with the Emscripten Virtual File System.\n */\nexport interface WebRFS {\n /**\n * Lookup information about a file or directory node in the Emscripten\n * virtual file system.\n * @param {string} path Path to the requested node.\n * @returns {Promise<FSNode>} The requested node.\n */\n lookupPath: (path: string) => Promise<FSNode>;\n /**\n * Create a directory on the Emscripten virtual file system.\n * @param {string} path Path of the directory to create.\n * @returns {Promise<FSNode>} The newly created directory node.\n */\n mkdir: (path: string) => Promise<FSNode>;\n /**\n * Get the content of a file on the Emscripten virtual file system.\n * @param {string} path Path of the file to read.\n * @param {string} [flags] Open the file with the specified flags.\n * @returns {Promise<Uint8Array>} The content of the requested file.\n */\n readFile: (path: string, flags?: string) => Promise<Uint8Array>;\n /**\n * Remove a directory on the Emscripten virtual file system.\n * @param {string} path Path of the directory to remove.\n */\n rmdir: (path: string) => Promise<void>;\n /**\n * Write a new file to the Emscripten virtual file system.\n * @param {string} path Path of the new file.\n * @param {Uint8Array} data The content of the new file.\n * @param {string} [flags] Open the file with the specified flags.\n */\n writeFile: (path: string, data: ArrayBufferView, flags?: string) => Promise<void>;\n /**\n * Unlink a node on the Emscripten virtual file system. If that node was the\n * last link to a file it is is deleted.\n * @param {string} path Path of the target node.\n */\n unlink: (path: string) => Promise<void>;\n}\n\n/** A filesystem entry in the Emscripten Virtual File System */\nexport type FSNode = {\n id: number;\n name: string;\n mode: number;\n isFolder: boolean;\n contents?: { [key: string]: FSNode };\n mounted: null | {\n mountpoint: string;\n root: FSNode;\n }\n};\n\n/** An Emscripten Filesystem type */\nexport type FSType = 'NODEFS' | 'WORKERFS';\n\n/**\n * Configuration settings to be used when mounting Filesystem objects with\n * Emscripten\n * */\nexport type FSMountOptions<T extends FSType = FSType> =\n T extends 'NODEFS' ? { root: string } : {\n blobs?: Array<{name: string, data: Blob}>;\n files?: Array<File | FileList>;\n packages?: Array<{ metadata: any, blob: Blob }>;\n };\n\n/**\n * The configuration settings to be used when starting webR.\n */\nexport interface WebROptions {\n /**\n * Command line arguments to be passed to R.\n * Default: `[]`.\n */\n RArgs?: string[];\n\n /**\n * Environment variables to be made available for the R process.\n * Default: `{ R_HOME: '/usr/lib/R', R_ENABLE_JIT: 0 }`.\n */\n REnv?: { [key: string]: string };\n\n /**\n * The base URL used for downloading R WebAssembly binaries.\n * Default: `'https://webr.r-wasm.org/[version]/'`\n */\n baseUrl?: string;\n\n /**\n * The repo URL to use when downloading R WebAssembly packages.\n * Default: `'https://repo.r-wasm.org/`\n */\n repoUrl?: string;\n\n /**\n * The base URL from where to load JavaScript worker scripts when loading\n * webR with the ServiceWorker communication channel mode.\n * Default: `''`\n */\n serviceWorkerUrl?: string;\n\n /**\n * The WebAssembly user's home directory and initial working directory.\n * Default: `'/home/web_user'`\n */\n homedir?: string;\n\n /**\n * Start R in interactive mode?\n * Default: `true`.\n */\n interactive?: boolean;\n\n /**\n * Set the communication channel type to be used.\n * Default: `channelType.Automatic`\n */\n channelType?: (typeof ChannelType)[keyof typeof ChannelType];\n\n /**\n * Create the lazy virtual filesystem entries before starting R?\n * Default: `true`.\n */\n createLazyFilesystem?: boolean;\n}\n\nconst defaultEnv = {\n FONTCONFIG_PATH: '/etc/fonts',\n R_HOME: '/usr/lib/R',\n R_ENABLE_JIT: '0',\n};\n\nconst defaultOptions = {\n RArgs: [],\n REnv: defaultEnv,\n baseUrl: BASE_URL,\n serviceWorkerUrl: '',\n repoUrl: PKG_BASE_URL,\n homedir: '/home/web_user',\n interactive: true,\n channelType: ChannelType.Automatic,\n createLazyFilesystem: true,\n};\n\n/**\n * The webR class is used to initialize and interact with the webR system.\n *\n * Start webR by constructing an instance of the WebR class, optionally passing\n * an options argument of type {@link WebROptions}. WebR will begin to download\n * and start a version of R built for WebAssembly in a worker thread.\n */\nexport class WebR {\n #chan: ChannelMain;\n #initialised: Promise<unknown>;\n globalShelter!: Shelter;\n\n RObject!: ReturnType<typeof newRClassProxy<typeof RWorker.RObject, RObject>>;\n RLogical!: ReturnType<typeof newRClassProxy<typeof RWorker.RLogical, RLogical>>;\n RInteger!: ReturnType<typeof newRClassProxy<typeof RWorker.RInteger, RInteger>>;\n RDouble!: ReturnType<typeof newRClassProxy<typeof RWorker.RDouble, RDouble>>;\n RCharacter!: ReturnType<typeof newRClassProxy<typeof RWorker.RCharacter, RCharacter>>;\n RComplex!: ReturnType<typeof newRClassProxy<typeof RWorker.RComplex, RComplex>>;\n RRaw!: ReturnType<typeof newRClassProxy<typeof RWorker.RRaw, RRaw>>;\n RList!: ReturnType<typeof newRClassProxy<typeof RWorker.RList, RList>>;\n RPairlist!: ReturnType<typeof newRClassProxy<typeof RWorker.RPairlist, RPairlist>>;\n REnvironment!: ReturnType<typeof newRClassProxy<typeof RWorker.REnvironment, REnvironment>>;\n RSymbol!: ReturnType<typeof newRClassProxy<typeof RWorker.RSymbol, RSymbol>>;\n RString!: ReturnType<typeof newRClassProxy<typeof RWorker.RString, RString>>;\n RCall!: ReturnType<typeof newRClassProxy<typeof RWorker.RCall, RCall>>;\n\n objs: {\n baseEnv: REnvironment;\n globalEnv: REnvironment;\n null: RNull;\n true: RLogical;\n false: RLogical;\n na: RLogical;\n };\n\n Shelter;\n\n constructor(options: WebROptions = {}) {\n const config: Required<WebROptions> = {\n ...defaultOptions,\n ...options,\n REnv: {\n ...defaultOptions.REnv,\n ...options.REnv,\n }\n };\n this.#chan = newChannelMain(config);\n\n this.objs = {} as typeof this.objs;\n this.Shelter = newShelterProxy(this.#chan);\n\n this.#initialised = this.#chan.initialised.then(async () => {\n this.globalShelter = await new this.Shelter();\n\n this.RObject = this.globalShelter.RObject;\n this.RLogical = this.globalShelter.RLogical;\n this.RInteger = this.globalShelter.RInteger;\n this.RDouble = this.globalShelter.RDouble;\n this.RComplex = this.globalShelter.RComplex;\n this.RCharacter = this.globalShelter.RCharacter;\n this.RRaw = this.globalShelter.RRaw;\n this.RList = this.globalShelter.RList;\n this.RPairlist = this.globalShelter.RPairlist;\n this.REnvironment = this.globalShelter.REnvironment;\n this.RSymbol = this.globalShelter.RSymbol;\n this.RString = this.globalShelter.RString;\n this.RCall = this.globalShelter.RCall;\n\n this.objs = {\n baseEnv: (await this.RObject.getPersistentObject('baseEnv')) as REnvironment,\n globalEnv: (await this.RObject.getPersistentObject('globalEnv')) as REnvironment,\n null: (await this.RObject.getPersistentObject('null')) as RNull,\n true: (await this.RObject.getPersistentObject('true')) as RLogical,\n false: (await this.RObject.getPersistentObject('false')) as RLogical,\n na: (await this.RObject.getPersistentObject('na')) as RLogical,\n };\n\n this.#handleSystemMessages();\n });\n }\n\n /**\n * @returns {Promise<void>} A promise that resolves once webR has been\n * intialised.\n */\n async init() {\n return this.#initialised;\n }\n\n async #handleSystemMessages() {\n for (;;) {\n const msg = await this.#chan.readSystem();\n switch (msg.type) {\n case 'setTimeoutWasm':\n /* Handle messages requesting a delayed invocation of a wasm function.\n * TODO: Reimplement without using the main thread once it is possible\n * to yield in the worker thread.\n */\n setTimeout(\n (ptr: EmPtr, args: number[]) => {\n this.invokeWasmFunction(ptr, ...args);\n },\n msg.data.delay as number,\n msg.data.ptr,\n msg.data.args\n );\n break;\n case 'console.log':\n console.log(msg.data);\n break;\n case 'console.warn':\n console.warn(msg.data);\n break;\n case 'console.error':\n console.error(msg.data);\n break;\n default:\n throw new WebRError('Unknown system message type `' + msg.type + '`');\n }\n }\n }\n\n /**\n * Close the communication channel between the main thread and the worker\n * thread cleanly. Once this has been executed, webR will be unable to\n * continue.\n */\n close() {\n this.#chan.close();\n }\n\n /**\n * Read from the communication channel and return an output message.\n * @returns {Promise<Message>} The output message\n */\n async read(): Promise<Message> {\n return await this.#chan.read();\n }\n\n /**\n * Flush the output queue in the communication channel and return all output\n * messages.\n * @returns {Promise<Message[]>} The output messages\n */\n async flush(): Promise<Message[]> {\n return await this.#chan.flush();\n }\n\n /**\n * Send a message to the communication channel input queue.\n * @param {Message} msg Message to be added to the input queue.\n */\n write(msg: Message) {\n this.#chan.write(msg);\n }\n\n /**\n * Send a line of standard input to the communication channel input queue.\n * @param {string} input Message to be added to the input queue.\n */\n writeConsole(input: string) {\n this.write({ type: 'stdin', data: input + '\\n' });\n }\n\n /** Attempt to interrupt a running R computation. */\n interrupt() {\n this.#chan.interrupt();\n }\n\n /**\n * Install a list of R packages from a Wasm binary package repo.\n * @param {string[]} packages An array of R package names.\n * @param {InstallPackagesOptions} [options] Options to be used when\n * installing webR packages.\n */\n async installPackages(packages: string[], options?: InstallPackagesOptions) {\n const op = Object.assign({\n quiet: false,\n mount: true\n }, options);\n\n for (const name of packages) {\n const msg = { type: 'installPackage', data: { name, options: op } };\n await this.#chan.request(msg);\n }\n }\n\n /**\n * Destroy an R object reference.\n * @param {RObject} x An R object reference.\n */\n async destroy(x: RObject) {\n await this.globalShelter.destroy(x);\n }\n\n /**\n * Evaluate the given R code.\n *\n * Stream outputs and any conditions raised during exectution are written to\n * the JavaScript console.\n * @param {string} code The R code to evaluate.\n * @param {EvalROptions} [options] Options for the execution environment.\n * @returns {Promise<RObject>} The result of the computation.\n */\n async evalR(code: string, options?: EvalROptions): Promise<RObject> {\n return this.globalShelter.evalR(code, options);\n }\n\n async evalRVoid(code: string, options?: EvalROptions) {\n return this.evalRRaw(code, 'void', options);\n }\n\n async evalRBoolean(code: string, options?: EvalROptions) {\n return this.evalRRaw(code, 'boolean', options);\n }\n\n async evalRNumber(code: string, options?: EvalROptions) {\n return this.evalRRaw(code, 'number', options);\n }\n\n async evalRString(code: string, options?: EvalROptions) {\n return this.evalRRaw(code, 'string', options);\n }\n\n /**\n * Evaluate the given R code, returning the result as a raw JavaScript object.\n * @param {string} code The R code to evaluate.\n * @param {EvalRMessageOutputType} outputType JavaScript type to return the result as.\n * @param {EvalROptions} [options] Options for the execution environment.\n * @returns {Promise<unknown>} The result of the computation.\n */\n async evalRRaw(code: string, outputType: 'void', options?: EvalROptions): Promise<void>;\n async evalRRaw(code: string, outputType: 'boolean', options?: EvalROptions): Promise<boolean>;\n async evalRRaw(code: string, outputType: 'boolean[]', options?: EvalROptions): Promise<boolean[]>;\n async evalRRaw(code: string, outputType: 'number', options?: EvalROptions): Promise<number>;\n async evalRRaw(code: string, outputType: 'number[]', options?: EvalROptions): Promise<number[]>;\n async evalRRaw(code: string, outputType: 'string', options?: EvalROptions): Promise<string>;\n async evalRRaw(code: string, outputType: 'string[]', options?: EvalROptions): Promise<string[]>;\n async evalRRaw(code: string, outputType: EvalRMessageOutputType, options: EvalROptions = {}) {\n const opts = replaceInObject(options, isRObject, (obj: RObject) => obj._payload);\n const msg: EvalRMessageRaw = {\n type: 'evalRRaw',\n data: { code: code, options: opts as EvalROptions, outputType: outputType },\n };\n const payload = await this.#chan.request(msg);\n\n switch (payload.payloadType) {\n case 'raw':\n return payload.obj;\n case 'ptr':\n throw new WebRPayloadError('Unexpected ptr payload type returned from evalRVoid');\n }\n }\n\n async invokeWasmFunction(ptr: EmPtr, ...args: number[]): Promise<EmPtr> {\n const msg = {\n type: 'invokeWasmFunction',\n data: { ptr, args },\n } as InvokeWasmFunctionMessage;\n const resp = await this.#chan.request(msg);\n return resp.obj as EmPtr;\n }\n\n FS = {\n lookupPath: async (path: string): Promise<FSNode> => {\n const msg: FSMessage = { type: 'lookupPath', data: { path } };\n const payload = await this.#chan.request(msg);\n return payload.obj as FSNode;\n },\n mkdir: async (path: string): Promise<FSNode> => {\n const msg: FSMessage = { type: 'mkdir', data: { path } };\n const payload = await this.#chan.request(msg);\n return payload.obj as FSNode;\n },\n mount: async <T extends FSType>(\n type: T,\n options: FSMountOptions<T>,\n mountpoint: string\n ): Promise<void> => {\n const msg: FSMountMessage = { type: 'mount', data: { type, options, mountpoint } };\n await this.#chan.request(msg);\n },\n readFile: async (path: string, flags?: string): Promise<Uint8Array> => {\n const msg: FSReadFileMessage = { type: 'readFile', data: { path, flags } };\n const payload = await this.#chan.request(msg);\n return payload.obj as Uint8Array;\n },\n rmdir: async (path: string): Promise<void> => {\n const msg: FSMessage = { type: 'rmdir', data: { path } };\n await this.#chan.request(msg);\n },\n writeFile: async (path: string, data: ArrayBufferView, flags?: string): Promise<void> => {\n const msg: FSWriteFileMessage = { type: 'writeFile', data: { path, data, flags } };\n await this.#chan.request(msg);\n },\n unlink: async (path: string): Promise<void> => {\n const msg: FSMessage = { type: 'unlink', data: { path } };\n await this.#chan.request(msg);\n },\n unmount: async (mountpoint: string): Promise<void> => {\n const msg: FSMessage = { type: 'unmount', data: { path: mountpoint } };\n await this.#chan.request(msg);\n },\n };\n}\n\n/** WebR shelters provide fine-grained control over the lifetime of R objects. */\nexport class Shelter {\n #id = '';\n #chan: ChannelMain;\n #initialised = false;\n\n RObject!: ReturnType<typeof newRClassProxy<typeof RWorker.RObject, RObject>>;\n RLogical!: ReturnType<typeof newRClassProxy<typeof RWorker.RLogical, RLogical>>;\n RInteger!: ReturnType<typeof newRClassProxy<typeof RWorker.RInteger, RInteger>>;\n RDouble!: ReturnType<typeof newRClassProxy<typeof RWorker.RDouble, RDouble>>;\n RCharacter!: ReturnType<typeof newRClassProxy<typeof RWorker.RCharacter, RCharacter>>;\n RComplex!: ReturnType<typeof newRClassProxy<typeof RWorker.RComplex, RComplex>>;\n RRaw!: ReturnType<typeof newRClassProxy<typeof RWorker.RRaw, RRaw>>;\n RList!: ReturnType<typeof newRClassProxy<typeof RWorker.RList, RList>>;\n RPairlist!: ReturnType<typeof newRClassProxy<typeof RWorker.RPairlist, RPairlist>>;\n REnvironment!: ReturnType<typeof newRClassProxy<typeof RWorker.REnvironment, REnvironment>>;\n RSymbol!: ReturnType<typeof newRClassProxy<typeof RWorker.RSymbol, RSymbol>>;\n RString!: ReturnType<typeof newRClassProxy<typeof RWorker.RString, RString>>;\n RCall!: ReturnType<typeof newRClassProxy<typeof RWorker.RCall, RCall>>;\n\n /** @internal */\n constructor(chan: ChannelMain) {\n this.#chan = chan;\n }\n\n /** @internal */\n async init() {\n if (this.#initialised) {\n return;\n }\n\n const msg = { type: 'newShelter' } as NewShelterMessage;\n const payload = await this.#chan.request(msg);\n this.#id = payload.obj as string;\n\n this.RObject = newRClassProxy<typeof RWorker.RObject, RObject>(this.#chan, this.#id, 'object');\n this.RLogical = newRClassProxy<typeof RWorker.RLogical, RLogical>(this.#chan, this.#id, 'logical');\n this.RInteger = newRClassProxy<typeof RWorker.RInteger, RInteger>(this.#chan, this.#id, 'integer');\n this.RDouble = newRClassProxy<typeof RWorker.RDouble, RDouble>(this.#chan, this.#id, 'double');\n this.RComplex = newRClassProxy<typeof RWorker.RComplex, RComplex>(this.#chan, this.#id, 'complex');\n this.RCharacter = newRClassProxy<typeof RWorker.RCharacter, RCharacter>(this.#chan, this.#id, 'character');\n this.RRaw = newRClassProxy<typeof RWorker.RRaw, RRaw>(this.#chan, this.#id, 'raw');\n this.RList = newRClassProxy<typeof RWorker.RList, RList>(this.#chan, this.#id, 'list');\n this.RPairlist = newRClassProxy<typeof RWorker.RPairlist, RPairlist>(this.#chan, this.#id, 'pairlist');\n this.REnvironment = newRClassProxy<typeof RWorker.REnvironment, REnvironment>(this.#chan, this.#id, 'environment');\n this.RSymbol = newRClassProxy<typeof RWorker.RSymbol, RSymbol>(this.#chan, this.#id, 'symbol');\n this.RString = newRClassProxy<typeof RWorker.RString, RString>(this.#chan, this.#id, 'string');\n this.RCall = newRClassProxy<typeof RWorker.RCall, RCall>(this.#chan, this.#id, 'call');\n\n this.#initialised = true;\n }\n\n async purge() {\n const msg: ShelterMessage = {\n type: 'shelterPurge',\n data: this.#id,\n };\n await this.#chan.request(msg);\n }\n\n async destroy(x: RObject) {\n const msg: ShelterDestroyMessage = {\n type: 'shelterDestroy',\n data: { id: this.#id, obj: x._payload },\n };\n await this.#chan.request(msg);\n }\n\n async size(): Promise<number> {\n const msg: ShelterMessage = {\n type: 'shelterSize',\n data: this.#id,\n };\n const payload = await this.#chan.request(msg);\n return payload.obj as number;\n }\n\n /**\n * Evaluate the given R code.\n *\n * Stream outputs and any conditions raised during exectution are written to\n * the JavaScript console. The returned R object is protected by the shelter.\n * @param {string} code The R code to evaluate.\n * @param {EvalROptions} [options] Options for the execution environment.\n * @returns {Promise<RObject>} The result of the computation.\n */\n async evalR(code: string, options: EvalROptions = {}): Promise<RObject> {\n const opts = replaceInObject(options, isRObject, (obj: RObject) => obj._payload);\n const msg: EvalRMessage = {\n type: 'evalR',\n data: { code: code, options: opts as EvalROptions, shelter: this.#id },\n };\n const payload = await this.#chan.request(msg);\n\n switch (payload.payloadType) {\n case 'raw':\n throw new WebRPayloadError('Unexpected payload type returned from evalR');\n default:\n return newRProxy(this.#chan, payload);\n }\n }\n\n /**\n * Evaluate the given R code, capturing output.\n *\n * Stream outputs and conditions raised during exectution are captured and\n * returned as part of the output of this function. Returned R objects are\n * protected by the shelter.\n * @param {string} code The R code to evaluate.\n * @param {EvalROptions} [options] Options for the execution environment.\n * @returns {Promise<{result: RObject, output: unknown[]}>} An object\n * containing the result of the computation and and array of captured output.\n */\n async captureR(code: string, options: EvalROptions = {}): Promise<{\n result: RObject;\n output: unknown[];\n }> {\n const opts = replaceInObject(options, isRObject, (obj: RObject) => obj._payload);\n const msg: CaptureRMessage = {\n type: 'captureR',\n data: {\n code: code,\n options: opts as EvalROptions,\n shelter: this.#id,\n },\n };\n const payload = await this.#chan.request(msg);\n\n switch (payload.payloadType) {\n case 'ptr':\n throw new WebRPayloadError('Unexpected payload type returned from evalR');\n\n case 'raw': {\n const data = payload.obj as {\n result: WebRPayloadPtr;\n output: { type: string; data: any }[];\n };\n const result = newRProxy(this.#chan, data.result);\n const output = data.output;\n\n for (let i = 0; i < output.length; ++i) {\n if (output[i].type !== 'stdout' && output[i].type !== 'stderr') {\n output[i].data = newRProxy(this.#chan, output[i].data as WebRPayloadPtr);\n }\n }\n\n return { result, output };\n }\n }\n }\n}\n\nfunction newShelterProxy(chan: ChannelMain) {\n return new Proxy(Shelter, {\n construct: async () => {\n const out = new Shelter(chan);\n await out.init();\n return out;\n },\n }) as unknown as {\n new (): Promise<Shelter>;\n };\n}\n"],
|
|
"mappings": "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",
|
|
"names": ["exports", "setUint64", "view", "offset", "value", "high", "low", "setInt64", "getInt64", "getUint64", "int_1", "TEXT_ENCODING_AVAILABLE", "_a", "utf8Count", "str", "strLength", "byteLength", "pos", "value", "extra", "exports", "utf8EncodeJs", "output", "outputOffset", "offset", "sharedTextEncoder", "_b", "utf8EncodeTEencode", "utf8EncodeTEencodeInto", "CHUNK_SIZE", "utf8DecodeJs", "bytes", "inputOffset", "end", "units", "result", "byte1", "byte2", "byte3", "byte4", "unit", "sharedTextDecoder", "_c", "utf8DecodeTD", "stringBytes", "ExtData", "type", "data", "exports", "DecodeError", "message", "proto", "exports", "DecodeError_1", "int_1", "exports", "TIMESTAMP32_MAX_SEC", "TIMESTAMP64_MAX_SEC", "encodeTimeSpecToTimestamp", "sec", "nsec", "rv", "secHigh", "secLow", "view", "encodeDateToTimeSpec", "date", "msec", "nsecInSec", "encodeTimestampExtension", "object", "timeSpec", "decodeTimestampToTimeSpec", "data", "nsec30AndSecHigh2", "secLow32", "decodeTimestampExtension", "ExtData_1", "timestamp_1", "ExtensionCodec", "type", "encode", "decode", "index", "object", "context", "i", "encodeExt", "data", "decodeExt", "exports", "ensureUint8Array", "buffer", "exports", "createDataView", "bufferView", "utf8_1", "ExtensionCodec_1", "int_1", "typedArrays_1", "exports", "Encoder", "extensionCodec", "context", "maxDepth", "initialBufferSize", "sortKeys", "forceFloat32", "ignoreUndefined", "forceIntegerToFloat", "object", "depth", "sizeToWrite", "requiredSize", "newSize", "newBuffer", "newBytes", "newView", "byteLength", "ext", "size", "bytes", "item", "keys", "count", "key", "value", "values", "Encoder_1", "defaultEncodeOptions", "encode", "value", "options", "exports", "prettyByte", "byte", "exports", "utf8_1", "DEFAULT_MAX_KEY_LENGTH", "DEFAULT_MAX_LENGTH_PER_KEY", "CachedKeyDecoder", "maxKeyLength", "maxLengthPerKey", "i", "byteLength", "bytes", "inputOffset", "records", "FIND_CHUNK", "record", "recordBytes", "j", "value", "cachedValue", "str", "slicedCopyOfBytes", "exports", "prettyByte_1", "ExtensionCodec_1", "int_1", "utf8_1", "typedArrays_1", "CachedKeyDecoder_1", "DecodeError_1", "isValidMapKeyType", "key", "keyType", "HEAD_BYTE_REQUIRED", "EMPTY_VIEW", "EMPTY_BYTES", "exports", "e", "MORE_DATA", "sharedCachedKeyDecoder", "Decoder", "extensionCodec", "context", "maxStrLength", "maxBinLength", "maxArrayLength", "maxMapLength", "maxExtLength", "keyDecoder", "buffer", "remainingData", "newData", "newBuffer", "size", "posToShow", "view", "pos", "object", "stream", "decoded", "headByte", "totalPos", "isArray", "isArrayHeaderRequired", "arrayItemsLeft", "DECODE", "byteLength", "stack", "state", "headerOffset", "offset", "_a", "headOffset", "extType", "data", "value", "Decoder_1", "exports", "decode", "buffer", "options", "decodeMulti", "isAsyncIterable", "object", "exports", "assertNonNull", "value", "asyncIterableFromStream", "stream", "reader", "done", "ensureAsyncIterable", "streamLike", "Decoder_1", "stream_1", "decode_1", "decodeAsync", "streamLike", "options", "stream", "exports", "decodeArrayStream", "decodeMultiStream", "decodeStream", "encode_1", "exports", "decode_1", "decodeAsync_1", "Decoder_1", "DecodeError_1", "Encoder_1", "ExtensionCodec_1", "ExtData_1", "timestamp_1", "WebRError", "msg", "WebRWorkerError", "WebRChannelError", "WebRPayloadError", "IN_NODE", "loadScript", "url", "resolve", "reject", "script", "__toESM", "__require", "nodePathMod", "WebRError", "promiseHandles", "out", "_value", "_reason", "promise", "resolve", "reject", "sleep", "ms", "replaceInObject", "obj", "test", "replacer", "replacerArgs", "v", "k", "i", "newCrossOriginWorker", "url", "cb", "req", "worker", "isCrossOrigin", "urlString", "IN_NODE", "url1", "url2", "transferCache", "transfer", "obj", "transfers", "UUID_LENGTH", "generateUUID", "result", "randomSegment", "pad", "import_msgpack", "encoder", "syncResponse", "endpoint", "data", "response", "taskId", "sizeBuffer", "dataBuffer", "signalBuffer", "bytes", "fits", "uuid", "dataPromise", "requestResponseMessage", "signalRequester", "e", "ep", "id", "generateUUID", "resolve", "IN_NODE", "message", "l", "ev", "index", "sleepTime", "sleep", "_promises", "_resolvers", "_add", "add_fn", "AsyncQueue", "__privateAdd", "__privateSet", "t", "__privateGet", "__privateMethod", "resolve", "newRequest", "msg", "transferables", "newRequestResponseMessage", "generateUUID", "newResponse", "uuid", "resp", "transfer", "newSyncRequest", "data", "webRPayloadAsError", "payload", "WebRWorkerError", "isWebRPayload", "value", "isWebRPayloadPtr", "_parked", "ChannelMain", "AsyncQueue", "__privateAdd", "msg", "transferables", "req", "newRequest", "resolve", "reject", "promise", "promiseHandles", "__privateGet", "uuid", "handles", "payload", "webRPayloadAsError", "import_msgpack", "decoder", "_scheduled", "_resolved", "_result", "_exception", "_syncGen", "SyncTask", "endpoint", "msg", "transfers", "__privateAdd", "_Syncifier", "__privateSet", "__privateGet", "done", "value", "sizeBuffer", "signalBuffer", "taskId", "dataBuffer", "acquireDataBuffer", "UUID_LENGTH", "syncMsg", "newSyncRequest", "id", "releaseDataBuffer", "size", "task", "interruptBuffer", "handleInterrupt", "flag", "i", "bit", "result", "wokenTaskId", "wokenTask", "dataBuffers", "powerof2", "buffer", "setInterruptHandler", "handler", "setInterruptBuffer", "Module", "dictEmFree", "dict", "key", "IN_NODE", "_interruptBuffer", "_handleEventsFromWorker", "handleEventsFromWorker_fn", "_onMessageFromWorker", "SharedBufferChannelMain", "ChannelMain", "config", "__privateAdd", "worker", "message", "__privateSet", "msg", "payload", "reqData", "response", "syncResponse", "WebRChannelError", "initWorker", "__privateMethod", "ChannelType", "isCrossOrigin", "newCrossOriginWorker", "promiseHandles", "__privateGet", "ev", "_ep", "_dispatch", "_interrupt", "SharedBufferChannelWorker", "setInterruptBuffer", "setInterruptHandler", "transfer", "SyncTask", "Module", "args", "interrupt", "dispatch", "import_msgpack", "IN_NODE", "_syncMessageCache", "_registration", "_interrupted", "_registerServiceWorker", "registerServiceWorker_fn", "_onMessageFromServiceWorker", "onMessageFromServiceWorker_fn", "_handleEventsFromWorker", "handleEventsFromWorker_fn", "_onMessageFromWorker", "ServiceWorkerChannelMain", "ChannelMain", "config", "__privateAdd", "worker", "message", "request", "__privateGet", "WebRChannelError", "initWorker", "__privateMethod", "clientId", "msg", "ChannelType", "isCrossOrigin", "newCrossOriginWorker", "promiseHandles", "_a", "__privateSet", "url", "resolve", "listener", "event", "uuid", "response", "newResponse", "ev", "_ep", "_mainThreadId", "_location", "_lastInterruptReq", "_dispatch", "_interrupt", "ServiceWorkerChannelWorker", "data", "transfer", "newRequest", "retryCount", "xhr", "fetchReqBody", "e", "Module", "args", "interrupt", "dispatch", "IN_NODE", "_worker", "_handleEventsFromWorker", "handleEventsFromWorker_fn", "_onMessageFromWorker", "PostMessageChannelMain", "ChannelMain", "config", "__privateAdd", "worker", "message", "msg", "payload", "input", "__privateGet", "response", "newResponse", "WebRChannelError", "initWorker", "__privateSet", "__privateMethod", "ChannelType", "isCrossOrigin", "newCrossOriginWorker", "promiseHandles", "ev", "_ep", "_parked", "_dispatch", "_promptDepth", "_asyncREPL", "PostMessageChannelWorker", "str", "e", "transfer", "__privateWrapper", "_args", "args", "argc", "argv", "arg", "idx", "argvPtr", "argPtr", "dispatch", "transferables", "req", "newRequest", "resolve", "prom", "_", "uuid", "ChannelType", "newChannelMain", "data", "SharedBufferChannelMain", "ServiceWorkerChannelMain", "PostMessageChannelMain", "BASE_URL", "IN_NODE", "PKG_BASE_URL", "isRObject", "value", "isWebRPayloadPtr", "isRNull", "isRSymbol", "isRPairlist", "isREnvironment", "isRLogical", "isRInteger", "isRDouble", "isRComplex", "isRCharacter", "isRList", "isRRaw", "isRCall", "isRFunction", "_a", "RTypeMap", "isWebRDataJs", "value", "isComplex", "protect", "x", "Module", "handlePtr", "protectInc", "prot", "protectWithIndex", "pLoc", "unprotectIndex", "index", "reprotect", "unprotect", "n", "envPoke", "env", "sym", "value", "parseEvalBare", "code", "strings", "envObj", "REnvironment", "out", "RObject", "dictEmFree", "safeEval", "call", "env", "Module", "handlePtr", "handlePtr", "x", "isRObject", "assertRType", "obj", "type", "Module", "RTypeMap", "newObjectFromData", "obj", "isWebRDataJs", "getRWorkerClass", "RTypeMap", "RNull", "RLogical", "RDouble", "RCharacter", "isComplex", "RComplex", "newObjectFromArray", "arr", "prot", "call", "RCall", "RSymbol", "protectInc", "unprotect", "RObjectBase", "ptr", "typeNumber", "Module", "typeName", "_slice", "slice_fn", "_RObject", "data", "__privateAdd", "type", "prop", "objs", "parseEvalBare", "RPairlist", "values", "namesObj", "v", "names", "name", "options", "depth", "__privateMethod", "path", "index", "protectWithIndex", "getter", "out", "reprotect", "result", "unprotectIndex", "value", "idx", "valueObj", "assign", "safeEval", "props", "cur", "p", "i", "RObject", "op", "x", "assertRType", "RString", "val", "toWebRData", "list", "next", "allowDuplicateKey", "allowEmptyKey", "entries", "keys", "k", "u", "namesArray", "hasNames", "symbol", "RList", "RFunction", "args", "REnvironment", "nProt", "protect", "sym", "vObj", "envPoke", "all", "sorted", "symbols", "RVectorAtomic", "kind", "newSetter", "ret", "elt", "m", "_newSetter", "_RLogical", "__privateGet", "naLogical", "_RInteger", "RInteger", "naInteger", "_RDouble", "naDouble", "_RComplex", "_RCharacter", "_RRaw", "RRaw", "jsObj", "typeClasses", "isRObject", "empty", "targetAsyncIterator", "chan", "proxy", "msg", "reply", "WebRError", "i", "targetMethod", "prop", "payload", "_args", "args", "arg", "isRObject", "replaceInObject", "obj", "newRProxy", "isWebRPayloadPtr", "newRObject", "objType", "shelter", "value", "WebRPayloadError", "_a", "_", "_thisArg", "res", "isRFunction", "newRClassProxy", "RObject", "_stdout", "_stderr", "_prompt", "_canvasImage", "_canvasNewPage", "_defaultStdout", "_defaultStderr", "_defaultPrompt", "_defaultcanvasImage", "_defaultcanvasNewPage", "_run", "run_fn", "Console", "callbacks", "options", "__privateAdd", "text", "input", "image", "IN_NODE", "WebR", "__privateSet", "__privateGet", "__privateMethod", "output", "defaultEnv", "defaultOptions", "BASE_URL", "PKG_BASE_URL", "ChannelType", "_chan", "_initialised", "_handleSystemMessages", "handleSystemMessages_fn", "WebR", "options", "__privateAdd", "path", "msg", "__privateGet", "type", "mountpoint", "flags", "data", "config", "__privateSet", "newChannelMain", "newShelterProxy", "__privateMethod", "input", "packages", "op", "name", "x", "code", "outputType", "opts", "replaceInObject", "isRObject", "obj", "payload", "WebRPayloadError", "ptr", "args", "WebRError", "_id", "Shelter", "chan", "newRClassProxy", "newRProxy", "result", "output", "i", "out"]
|
|
}
|