"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __accessCheck = (obj, member, msg) => { if (!member.has(obj)) throw TypeError("Cannot " + msg); }; var __privateGet = (obj, member, getter) => { __accessCheck(obj, member, "read from private field"); return getter ? getter.call(obj) : member.get(obj); }; var __privateAdd = (obj, member, value) => { if (member.has(obj)) throw TypeError("Cannot add the same private member more than once"); member instanceof WeakSet ? member.add(obj) : member.set(obj, value); }; var __privateSet = (obj, member, value, setter) => { __accessCheck(obj, member, "write to private field"); setter ? setter.call(obj, value) : member.set(obj, value); return value; }; var __privateWrapper = (obj, member, setter, getter) => ({ set _(value) { __privateSet(obj, member, value, setter); }, get _() { return __privateGet(obj, member, getter); } }); var __privateMethod = (obj, member, method) => { __accessCheck(obj, member, "access private method"); return method; }; // node_modules/@msgpack/msgpack/dist/utils/int.js var require_int = __commonJS({ "node_modules/@msgpack/msgpack/dist/utils/int.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getUint64 = exports.getInt64 = exports.setInt64 = exports.setUint64 = exports.UINT32_MAX = void 0; exports.UINT32_MAX = 4294967295; function setUint64(view, offset, value) { const high = value / 4294967296; const low = value; view.setUint32(offset, high); view.setUint32(offset + 4, low); } exports.setUint64 = setUint64; function setInt64(view, offset, value) { const high = Math.floor(value / 4294967296); const low = value; view.setUint32(offset, high); view.setUint32(offset + 4, low); } exports.setInt64 = setInt64; function getInt64(view, offset) { const high = view.getInt32(offset); const low = view.getUint32(offset + 4); return high * 4294967296 + low; } exports.getInt64 = getInt64; function getUint64(view, offset) { const high = view.getUint32(offset); const low = view.getUint32(offset + 4); return high * 4294967296 + low; } exports.getUint64 = getUint64; } }); // node_modules/@msgpack/msgpack/dist/utils/utf8.js var require_utf8 = __commonJS({ "node_modules/@msgpack/msgpack/dist/utils/utf8.js"(exports) { "use strict"; var _a; var _b; var _c; Object.defineProperty(exports, "__esModule", { value: true }); exports.utf8DecodeTD = exports.TEXT_DECODER_THRESHOLD = exports.utf8DecodeJs = exports.utf8EncodeTE = exports.TEXT_ENCODER_THRESHOLD = exports.utf8EncodeJs = exports.utf8Count = void 0; var int_1 = require_int(); var TEXT_ENCODING_AVAILABLE = (typeof process === "undefined" || ((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a["TEXT_ENCODING"]) !== "never") && typeof TextEncoder !== "undefined" && typeof TextDecoder !== "undefined"; function utf8Count(str) { const strLength = str.length; let byteLength = 0; let pos = 0; while (pos < strLength) { let value = str.charCodeAt(pos++); if ((value & 4294967168) === 0) { byteLength++; continue; } else if ((value & 4294965248) === 0) { byteLength += 2; } else { if (value >= 55296 && value <= 56319) { if (pos < strLength) { const extra = str.charCodeAt(pos); if ((extra & 64512) === 56320) { ++pos; value = ((value & 1023) << 10) + (extra & 1023) + 65536; } } } if ((value & 4294901760) === 0) { byteLength += 3; } else { byteLength += 4; } } } return byteLength; } exports.utf8Count = utf8Count; function utf8EncodeJs(str, output, outputOffset) { const strLength = str.length; let offset = outputOffset; let pos = 0; while (pos < strLength) { let value = str.charCodeAt(pos++); if ((value & 4294967168) === 0) { output[offset++] = value; continue; } else if ((value & 4294965248) === 0) { output[offset++] = value >> 6 & 31 | 192; } else { if (value >= 55296 && value <= 56319) { if (pos < strLength) { const extra = str.charCodeAt(pos); if ((extra & 64512) === 56320) { ++pos; value = ((value & 1023) << 10) + (extra & 1023) + 65536; } } } if ((value & 4294901760) === 0) { output[offset++] = value >> 12 & 15 | 224; output[offset++] = value >> 6 & 63 | 128; } else { output[offset++] = value >> 18 & 7 | 240; output[offset++] = value >> 12 & 63 | 128; output[offset++] = value >> 6 & 63 | 128; } } output[offset++] = value & 63 | 128; } } exports.utf8EncodeJs = utf8EncodeJs; var sharedTextEncoder = TEXT_ENCODING_AVAILABLE ? new TextEncoder() : void 0; exports.TEXT_ENCODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE ? int_1.UINT32_MAX : typeof process !== "undefined" && ((_b = process === null || process === void 0 ? void 0 : process.env) === null || _b === void 0 ? void 0 : _b["TEXT_ENCODING"]) !== "force" ? 200 : 0; function utf8EncodeTEencode(str, output, outputOffset) { output.set(sharedTextEncoder.encode(str), outputOffset); } function utf8EncodeTEencodeInto(str, output, outputOffset) { sharedTextEncoder.encodeInto(str, output.subarray(outputOffset)); } exports.utf8EncodeTE = (sharedTextEncoder === null || sharedTextEncoder === void 0 ? void 0 : sharedTextEncoder.encodeInto) ? utf8EncodeTEencodeInto : utf8EncodeTEencode; var CHUNK_SIZE = 4096; function utf8DecodeJs(bytes, inputOffset, byteLength) { let offset = inputOffset; const end = offset + byteLength; const units = []; let result = ""; while (offset < end) { const byte1 = bytes[offset++]; if ((byte1 & 128) === 0) { units.push(byte1); } else if ((byte1 & 224) === 192) { const byte2 = bytes[offset++] & 63; units.push((byte1 & 31) << 6 | byte2); } else if ((byte1 & 240) === 224) { const byte2 = bytes[offset++] & 63; const byte3 = bytes[offset++] & 63; units.push((byte1 & 31) << 12 | byte2 << 6 | byte3); } else if ((byte1 & 248) === 240) { const byte2 = bytes[offset++] & 63; const byte3 = bytes[offset++] & 63; const byte4 = bytes[offset++] & 63; let unit = (byte1 & 7) << 18 | byte2 << 12 | byte3 << 6 | byte4; if (unit > 65535) { unit -= 65536; units.push(unit >>> 10 & 1023 | 55296); unit = 56320 | unit & 1023; } units.push(unit); } else { units.push(byte1); } if (units.length >= CHUNK_SIZE) { result += String.fromCharCode(...units); units.length = 0; } } if (units.length > 0) { result += String.fromCharCode(...units); } return result; } exports.utf8DecodeJs = utf8DecodeJs; var sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null; exports.TEXT_DECODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE ? int_1.UINT32_MAX : typeof process !== "undefined" && ((_c = process === null || process === void 0 ? void 0 : process.env) === null || _c === void 0 ? void 0 : _c["TEXT_DECODER"]) !== "force" ? 200 : 0; function utf8DecodeTD(bytes, inputOffset, byteLength) { const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength); return sharedTextDecoder.decode(stringBytes); } exports.utf8DecodeTD = utf8DecodeTD; } }); // node_modules/@msgpack/msgpack/dist/ExtData.js var require_ExtData = __commonJS({ "node_modules/@msgpack/msgpack/dist/ExtData.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExtData = void 0; var ExtData = class { constructor(type, data) { this.type = type; this.data = data; } }; exports.ExtData = ExtData; } }); // node_modules/@msgpack/msgpack/dist/DecodeError.js var require_DecodeError = __commonJS({ "node_modules/@msgpack/msgpack/dist/DecodeError.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DecodeError = void 0; var DecodeError = class extends Error { constructor(message) { super(message); const proto = Object.create(DecodeError.prototype); Object.setPrototypeOf(this, proto); Object.defineProperty(this, "name", { configurable: true, enumerable: false, value: DecodeError.name }); } }; exports.DecodeError = DecodeError; } }); // node_modules/@msgpack/msgpack/dist/timestamp.js var require_timestamp = __commonJS({ "node_modules/@msgpack/msgpack/dist/timestamp.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.timestampExtension = exports.decodeTimestampExtension = exports.decodeTimestampToTimeSpec = exports.encodeTimestampExtension = exports.encodeDateToTimeSpec = exports.encodeTimeSpecToTimestamp = exports.EXT_TIMESTAMP = void 0; var DecodeError_1 = require_DecodeError(); var int_1 = require_int(); exports.EXT_TIMESTAMP = -1; var TIMESTAMP32_MAX_SEC = 4294967296 - 1; var TIMESTAMP64_MAX_SEC = 17179869184 - 1; function encodeTimeSpecToTimestamp({ sec, nsec }) { if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) { if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) { const rv = new Uint8Array(4); const view = new DataView(rv.buffer); view.setUint32(0, sec); return rv; } else { const secHigh = sec / 4294967296; const secLow = sec & 4294967295; const rv = new Uint8Array(8); const view = new DataView(rv.buffer); view.setUint32(0, nsec << 2 | secHigh & 3); view.setUint32(4, secLow); return rv; } } else { const rv = new Uint8Array(12); const view = new DataView(rv.buffer); view.setUint32(0, nsec); (0, int_1.setInt64)(view, 4, sec); return rv; } } exports.encodeTimeSpecToTimestamp = encodeTimeSpecToTimestamp; function encodeDateToTimeSpec(date) { const msec = date.getTime(); const sec = Math.floor(msec / 1e3); const nsec = (msec - sec * 1e3) * 1e6; const nsecInSec = Math.floor(nsec / 1e9); return { sec: sec + nsecInSec, nsec: nsec - nsecInSec * 1e9 }; } exports.encodeDateToTimeSpec = encodeDateToTimeSpec; function encodeTimestampExtension(object) { if (object instanceof Date) { const timeSpec = encodeDateToTimeSpec(object); return encodeTimeSpecToTimestamp(timeSpec); } else { return null; } } exports.encodeTimestampExtension = encodeTimestampExtension; function decodeTimestampToTimeSpec(data) { const view = new DataView(data.buffer, data.byteOffset, data.byteLength); switch (data.byteLength) { case 4: { const sec = view.getUint32(0); const nsec = 0; return { sec, nsec }; } case 8: { const nsec30AndSecHigh2 = view.getUint32(0); const secLow32 = view.getUint32(4); const sec = (nsec30AndSecHigh2 & 3) * 4294967296 + secLow32; const nsec = nsec30AndSecHigh2 >>> 2; return { sec, nsec }; } case 12: { const sec = (0, int_1.getInt64)(view, 4); const nsec = view.getUint32(0); return { sec, nsec }; } default: throw new DecodeError_1.DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${data.length}`); } } exports.decodeTimestampToTimeSpec = decodeTimestampToTimeSpec; function decodeTimestampExtension(data) { const timeSpec = decodeTimestampToTimeSpec(data); return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6); } exports.decodeTimestampExtension = decodeTimestampExtension; exports.timestampExtension = { type: exports.EXT_TIMESTAMP, encode: encodeTimestampExtension, decode: decodeTimestampExtension }; } }); // node_modules/@msgpack/msgpack/dist/ExtensionCodec.js var require_ExtensionCodec = __commonJS({ "node_modules/@msgpack/msgpack/dist/ExtensionCodec.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExtensionCodec = void 0; var ExtData_1 = require_ExtData(); var timestamp_1 = require_timestamp(); var ExtensionCodec = class { constructor() { this.builtInEncoders = []; this.builtInDecoders = []; this.encoders = []; this.decoders = []; this.register(timestamp_1.timestampExtension); } register({ type, encode: encode3, decode: decode3 }) { if (type >= 0) { this.encoders[type] = encode3; this.decoders[type] = decode3; } else { const index = 1 + type; this.builtInEncoders[index] = encode3; this.builtInDecoders[index] = decode3; } } tryToEncode(object, context) { for (let i = 0; i < this.builtInEncoders.length; i++) { const encodeExt = this.builtInEncoders[i]; if (encodeExt != null) { const data = encodeExt(object, context); if (data != null) { const type = -1 - i; return new ExtData_1.ExtData(type, data); } } } for (let i = 0; i < this.encoders.length; i++) { const encodeExt = this.encoders[i]; if (encodeExt != null) { const data = encodeExt(object, context); if (data != null) { const type = i; return new ExtData_1.ExtData(type, data); } } } if (object instanceof ExtData_1.ExtData) { return object; } return null; } decode(data, type, context) { const decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type]; if (decodeExt) { return decodeExt(data, type, context); } else { return new ExtData_1.ExtData(type, data); } } }; exports.ExtensionCodec = ExtensionCodec; ExtensionCodec.defaultCodec = new ExtensionCodec(); } }); // node_modules/@msgpack/msgpack/dist/utils/typedArrays.js var require_typedArrays = __commonJS({ "node_modules/@msgpack/msgpack/dist/utils/typedArrays.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createDataView = exports.ensureUint8Array = void 0; function ensureUint8Array(buffer) { if (buffer instanceof Uint8Array) { return buffer; } else if (ArrayBuffer.isView(buffer)) { return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); } else if (buffer instanceof ArrayBuffer) { return new Uint8Array(buffer); } else { return Uint8Array.from(buffer); } } exports.ensureUint8Array = ensureUint8Array; function createDataView(buffer) { if (buffer instanceof ArrayBuffer) { return new DataView(buffer); } const bufferView = ensureUint8Array(buffer); return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength); } exports.createDataView = createDataView; } }); // node_modules/@msgpack/msgpack/dist/Encoder.js var require_Encoder = __commonJS({ "node_modules/@msgpack/msgpack/dist/Encoder.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Encoder = exports.DEFAULT_INITIAL_BUFFER_SIZE = exports.DEFAULT_MAX_DEPTH = void 0; var utf8_1 = require_utf8(); var ExtensionCodec_1 = require_ExtensionCodec(); var int_1 = require_int(); var typedArrays_1 = require_typedArrays(); exports.DEFAULT_MAX_DEPTH = 100; exports.DEFAULT_INITIAL_BUFFER_SIZE = 2048; var Encoder = class { constructor(extensionCodec = ExtensionCodec_1.ExtensionCodec.defaultCodec, context = void 0, maxDepth = exports.DEFAULT_MAX_DEPTH, initialBufferSize = exports.DEFAULT_INITIAL_BUFFER_SIZE, sortKeys = false, forceFloat32 = false, ignoreUndefined = false, forceIntegerToFloat = false) { this.extensionCodec = extensionCodec; this.context = context; this.maxDepth = maxDepth; this.initialBufferSize = initialBufferSize; this.sortKeys = sortKeys; this.forceFloat32 = forceFloat32; this.ignoreUndefined = ignoreUndefined; this.forceIntegerToFloat = forceIntegerToFloat; this.pos = 0; this.view = new DataView(new ArrayBuffer(this.initialBufferSize)); this.bytes = new Uint8Array(this.view.buffer); } reinitializeState() { this.pos = 0; } /** * 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}. * * @returns Encodes the object and returns a shared reference the encoder's internal buffer. */ encodeSharedRef(object) { this.reinitializeState(); this.doEncode(object, 1); return this.bytes.subarray(0, this.pos); } /** * @returns Encodes the object and returns a copy of the encoder's internal buffer. */ encode(object) { this.reinitializeState(); this.doEncode(object, 1); return this.bytes.slice(0, this.pos); } doEncode(object, depth) { if (depth > this.maxDepth) { throw new Error(`Too deep objects in depth ${depth}`); } if (object == null) { this.encodeNil(); } else if (typeof object === "boolean") { this.encodeBoolean(object); } else if (typeof object === "number") { this.encodeNumber(object); } else if (typeof object === "string") { this.encodeString(object); } else { this.encodeObject(object, depth); } } ensureBufferSizeToWrite(sizeToWrite) { const requiredSize = this.pos + sizeToWrite; if (this.view.byteLength < requiredSize) { this.resizeBuffer(requiredSize * 2); } } resizeBuffer(newSize) { const newBuffer = new ArrayBuffer(newSize); const newBytes = new Uint8Array(newBuffer); const newView = new DataView(newBuffer); newBytes.set(this.bytes); this.view = newView; this.bytes = newBytes; } encodeNil() { this.writeU8(192); } encodeBoolean(object) { if (object === false) { this.writeU8(194); } else { this.writeU8(195); } } encodeNumber(object) { if (Number.isSafeInteger(object) && !this.forceIntegerToFloat) { if (object >= 0) { if (object < 128) { this.writeU8(object); } else if (object < 256) { this.writeU8(204); this.writeU8(object); } else if (object < 65536) { this.writeU8(205); this.writeU16(object); } else if (object < 4294967296) { this.writeU8(206); this.writeU32(object); } else { this.writeU8(207); this.writeU64(object); } } else { if (object >= -32) { this.writeU8(224 | object + 32); } else if (object >= -128) { this.writeU8(208); this.writeI8(object); } else if (object >= -32768) { this.writeU8(209); this.writeI16(object); } else if (object >= -2147483648) { this.writeU8(210); this.writeI32(object); } else { this.writeU8(211); this.writeI64(object); } } } else { if (this.forceFloat32) { this.writeU8(202); this.writeF32(object); } else { this.writeU8(203); this.writeF64(object); } } } writeStringHeader(byteLength) { if (byteLength < 32) { this.writeU8(160 + byteLength); } else if (byteLength < 256) { this.writeU8(217); this.writeU8(byteLength); } else if (byteLength < 65536) { this.writeU8(218); this.writeU16(byteLength); } else if (byteLength < 4294967296) { this.writeU8(219); this.writeU32(byteLength); } else { throw new Error(`Too long string: ${byteLength} bytes in UTF-8`); } } encodeString(object) { const maxHeaderSize = 1 + 4; const strLength = object.length; if (strLength > utf8_1.TEXT_ENCODER_THRESHOLD) { const byteLength = (0, utf8_1.utf8Count)(object); this.ensureBufferSizeToWrite(maxHeaderSize + byteLength); this.writeStringHeader(byteLength); (0, utf8_1.utf8EncodeTE)(object, this.bytes, this.pos); this.pos += byteLength; } else { const byteLength = (0, utf8_1.utf8Count)(object); this.ensureBufferSizeToWrite(maxHeaderSize + byteLength); this.writeStringHeader(byteLength); (0, utf8_1.utf8EncodeJs)(object, this.bytes, this.pos); this.pos += byteLength; } } encodeObject(object, depth) { const ext = this.extensionCodec.tryToEncode(object, this.context); if (ext != null) { this.encodeExtension(ext); } else if (Array.isArray(object)) { this.encodeArray(object, depth); } else if (ArrayBuffer.isView(object)) { this.encodeBinary(object); } else if (typeof object === "object") { this.encodeMap(object, depth); } else { throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`); } } encodeBinary(object) { const size = object.byteLength; if (size < 256) { this.writeU8(196); this.writeU8(size); } else if (size < 65536) { this.writeU8(197); this.writeU16(size); } else if (size < 4294967296) { this.writeU8(198); this.writeU32(size); } else { throw new Error(`Too large binary: ${size}`); } const bytes = (0, typedArrays_1.ensureUint8Array)(object); this.writeU8a(bytes); } encodeArray(object, depth) { const size = object.length; if (size < 16) { this.writeU8(144 + size); } else if (size < 65536) { this.writeU8(220); this.writeU16(size); } else if (size < 4294967296) { this.writeU8(221); this.writeU32(size); } else { throw new Error(`Too large array: ${size}`); } for (const item of object) { this.doEncode(item, depth + 1); } } countWithoutUndefined(object, keys) { let count = 0; for (const key of keys) { if (object[key] !== void 0) { count++; } } return count; } encodeMap(object, depth) { const keys = Object.keys(object); if (this.sortKeys) { keys.sort(); } const size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length; if (size < 16) { this.writeU8(128 + size); } else if (size < 65536) { this.writeU8(222); this.writeU16(size); } else if (size < 4294967296) { this.writeU8(223); this.writeU32(size); } else { throw new Error(`Too large map object: ${size}`); } for (const key of keys) { const value = object[key]; if (!(this.ignoreUndefined && value === void 0)) { this.encodeString(key); this.doEncode(value, depth + 1); } } } encodeExtension(ext) { const size = ext.data.length; if (size === 1) { this.writeU8(212); } else if (size === 2) { this.writeU8(213); } else if (size === 4) { this.writeU8(214); } else if (size === 8) { this.writeU8(215); } else if (size === 16) { this.writeU8(216); } else if (size < 256) { this.writeU8(199); this.writeU8(size); } else if (size < 65536) { this.writeU8(200); this.writeU16(size); } else if (size < 4294967296) { this.writeU8(201); this.writeU32(size); } else { throw new Error(`Too large extension object: ${size}`); } this.writeI8(ext.type); this.writeU8a(ext.data); } writeU8(value) { this.ensureBufferSizeToWrite(1); this.view.setUint8(this.pos, value); this.pos++; } writeU8a(values) { const size = values.length; this.ensureBufferSizeToWrite(size); this.bytes.set(values, this.pos); this.pos += size; } writeI8(value) { this.ensureBufferSizeToWrite(1); this.view.setInt8(this.pos, value); this.pos++; } writeU16(value) { this.ensureBufferSizeToWrite(2); this.view.setUint16(this.pos, value); this.pos += 2; } writeI16(value) { this.ensureBufferSizeToWrite(2); this.view.setInt16(this.pos, value); this.pos += 2; } writeU32(value) { this.ensureBufferSizeToWrite(4); this.view.setUint32(this.pos, value); this.pos += 4; } writeI32(value) { this.ensureBufferSizeToWrite(4); this.view.setInt32(this.pos, value); this.pos += 4; } writeF32(value) { this.ensureBufferSizeToWrite(4); this.view.setFloat32(this.pos, value); this.pos += 4; } writeF64(value) { this.ensureBufferSizeToWrite(8); this.view.setFloat64(this.pos, value); this.pos += 8; } writeU64(value) { this.ensureBufferSizeToWrite(8); (0, int_1.setUint64)(this.view, this.pos, value); this.pos += 8; } writeI64(value) { this.ensureBufferSizeToWrite(8); (0, int_1.setInt64)(this.view, this.pos, value); this.pos += 8; } }; exports.Encoder = Encoder; } }); // node_modules/@msgpack/msgpack/dist/encode.js var require_encode = __commonJS({ "node_modules/@msgpack/msgpack/dist/encode.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.encode = void 0; var Encoder_1 = require_Encoder(); var defaultEncodeOptions = {}; function encode3(value, options = defaultEncodeOptions) { const encoder2 = new Encoder_1.Encoder(options.extensionCodec, options.context, options.maxDepth, options.initialBufferSize, options.sortKeys, options.forceFloat32, options.ignoreUndefined, options.forceIntegerToFloat); return encoder2.encodeSharedRef(value); } exports.encode = encode3; } }); // node_modules/@msgpack/msgpack/dist/utils/prettyByte.js var require_prettyByte = __commonJS({ "node_modules/@msgpack/msgpack/dist/utils/prettyByte.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.prettyByte = void 0; function prettyByte(byte) { return `${byte < 0 ? "-" : ""}0x${Math.abs(byte).toString(16).padStart(2, "0")}`; } exports.prettyByte = prettyByte; } }); // node_modules/@msgpack/msgpack/dist/CachedKeyDecoder.js var require_CachedKeyDecoder = __commonJS({ "node_modules/@msgpack/msgpack/dist/CachedKeyDecoder.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CachedKeyDecoder = void 0; var utf8_1 = require_utf8(); var DEFAULT_MAX_KEY_LENGTH = 16; var DEFAULT_MAX_LENGTH_PER_KEY = 16; var CachedKeyDecoder = class { constructor(maxKeyLength = DEFAULT_MAX_KEY_LENGTH, maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY) { this.maxKeyLength = maxKeyLength; this.maxLengthPerKey = maxLengthPerKey; this.hit = 0; this.miss = 0; this.caches = []; for (let i = 0; i < this.maxKeyLength; i++) { this.caches.push([]); } } canBeCached(byteLength) { return byteLength > 0 && byteLength <= this.maxKeyLength; } find(bytes, inputOffset, byteLength) { const records = this.caches[byteLength - 1]; FIND_CHUNK: for (const record of records) { const recordBytes = record.bytes; for (let j = 0; j < byteLength; j++) { if (recordBytes[j] !== bytes[inputOffset + j]) { continue FIND_CHUNK; } } return record.str; } return null; } store(bytes, value) { const records = this.caches[bytes.length - 1]; const record = { bytes, str: value }; if (records.length >= this.maxLengthPerKey) { records[Math.random() * records.length | 0] = record; } else { records.push(record); } } decode(bytes, inputOffset, byteLength) { const cachedValue = this.find(bytes, inputOffset, byteLength); if (cachedValue != null) { this.hit++; return cachedValue; } this.miss++; const str = (0, utf8_1.utf8DecodeJs)(bytes, inputOffset, byteLength); const slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength); this.store(slicedCopyOfBytes, str); return str; } }; exports.CachedKeyDecoder = CachedKeyDecoder; } }); // node_modules/@msgpack/msgpack/dist/Decoder.js var require_Decoder = __commonJS({ "node_modules/@msgpack/msgpack/dist/Decoder.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Decoder = exports.DataViewIndexOutOfBoundsError = void 0; var prettyByte_1 = require_prettyByte(); var ExtensionCodec_1 = require_ExtensionCodec(); var int_1 = require_int(); var utf8_1 = require_utf8(); var typedArrays_1 = require_typedArrays(); var CachedKeyDecoder_1 = require_CachedKeyDecoder(); var DecodeError_1 = require_DecodeError(); var isValidMapKeyType = (key) => { const keyType = typeof key; return keyType === "string" || keyType === "number"; }; var HEAD_BYTE_REQUIRED = -1; var EMPTY_VIEW = new DataView(new ArrayBuffer(0)); var EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer); exports.DataViewIndexOutOfBoundsError = (() => { try { EMPTY_VIEW.getInt8(0); } catch (e) { return e.constructor; } throw new Error("never reached"); })(); var MORE_DATA = new exports.DataViewIndexOutOfBoundsError("Insufficient data"); var sharedCachedKeyDecoder = new CachedKeyDecoder_1.CachedKeyDecoder(); var Decoder = class { constructor(extensionCodec = ExtensionCodec_1.ExtensionCodec.defaultCodec, context = void 0, maxStrLength = int_1.UINT32_MAX, maxBinLength = int_1.UINT32_MAX, maxArrayLength = int_1.UINT32_MAX, maxMapLength = int_1.UINT32_MAX, maxExtLength = int_1.UINT32_MAX, keyDecoder = sharedCachedKeyDecoder) { this.extensionCodec = extensionCodec; this.context = context; this.maxStrLength = maxStrLength; this.maxBinLength = maxBinLength; this.maxArrayLength = maxArrayLength; this.maxMapLength = maxMapLength; this.maxExtLength = maxExtLength; this.keyDecoder = keyDecoder; this.totalPos = 0; this.pos = 0; this.view = EMPTY_VIEW; this.bytes = EMPTY_BYTES; this.headByte = HEAD_BYTE_REQUIRED; this.stack = []; } reinitializeState() { this.totalPos = 0; this.headByte = HEAD_BYTE_REQUIRED; this.stack.length = 0; } setBuffer(buffer) { this.bytes = (0, typedArrays_1.ensureUint8Array)(buffer); this.view = (0, typedArrays_1.createDataView)(this.bytes); this.pos = 0; } appendBuffer(buffer) { if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining(1)) { this.setBuffer(buffer); } else { const remainingData = this.bytes.subarray(this.pos); const newData = (0, typedArrays_1.ensureUint8Array)(buffer); const newBuffer = new Uint8Array(remainingData.length + newData.length); newBuffer.set(remainingData); newBuffer.set(newData, remainingData.length); this.setBuffer(newBuffer); } } hasRemaining(size) { return this.view.byteLength - this.pos >= size; } createExtraByteError(posToShow) { const { view, pos } = this; return new RangeError(`Extra ${view.byteLength - pos} of ${view.byteLength} byte(s) found at buffer[${posToShow}]`); } /** * @throws {@link DecodeError} * @throws {@link RangeError} */ decode(buffer) { this.reinitializeState(); this.setBuffer(buffer); const object = this.doDecodeSync(); if (this.hasRemaining(1)) { throw this.createExtraByteError(this.pos); } return object; } *decodeMulti(buffer) { this.reinitializeState(); this.setBuffer(buffer); while (this.hasRemaining(1)) { yield this.doDecodeSync(); } } async decodeAsync(stream) { let decoded = false; let object; for await (const buffer of stream) { if (decoded) { throw this.createExtraByteError(this.totalPos); } this.appendBuffer(buffer); try { object = this.doDecodeSync(); decoded = true; } catch (e) { if (!(e instanceof exports.DataViewIndexOutOfBoundsError)) { throw e; } } this.totalPos += this.pos; } if (decoded) { if (this.hasRemaining(1)) { throw this.createExtraByteError(this.totalPos); } return object; } const { headByte, pos, totalPos } = this; throw new RangeError(`Insufficient data in parsing ${(0, prettyByte_1.prettyByte)(headByte)} at ${totalPos} (${pos} in the current buffer)`); } decodeArrayStream(stream) { return this.decodeMultiAsync(stream, true); } decodeStream(stream) { return this.decodeMultiAsync(stream, false); } async *decodeMultiAsync(stream, isArray) { let isArrayHeaderRequired = isArray; let arrayItemsLeft = -1; for await (const buffer of stream) { if (isArray && arrayItemsLeft === 0) { throw this.createExtraByteError(this.totalPos); } this.appendBuffer(buffer); if (isArrayHeaderRequired) { arrayItemsLeft = this.readArraySize(); isArrayHeaderRequired = false; this.complete(); } try { while (true) { yield this.doDecodeSync(); if (--arrayItemsLeft === 0) { break; } } } catch (e) { if (!(e instanceof exports.DataViewIndexOutOfBoundsError)) { throw e; } } this.totalPos += this.pos; } } doDecodeSync() { DECODE: while (true) { const headByte = this.readHeadByte(); let object; if (headByte >= 224) { object = headByte - 256; } else if (headByte < 192) { if (headByte < 128) { object = headByte; } else if (headByte < 144) { const size = headByte - 128; if (size !== 0) { this.pushMapState(size); this.complete(); continue DECODE; } else { object = {}; } } else if (headByte < 160) { const size = headByte - 144; if (size !== 0) { this.pushArrayState(size); this.complete(); continue DECODE; } else { object = []; } } else { const byteLength = headByte - 160; object = this.decodeUtf8String(byteLength, 0); } } else if (headByte === 192) { object = null; } else if (headByte === 194) { object = false; } else if (headByte === 195) { object = true; } else if (headByte === 202) { object = this.readF32(); } else if (headByte === 203) { object = this.readF64(); } else if (headByte === 204) { object = this.readU8(); } else if (headByte === 205) { object = this.readU16(); } else if (headByte === 206) { object = this.readU32(); } else if (headByte === 207) { object = this.readU64(); } else if (headByte === 208) { object = this.readI8(); } else if (headByte === 209) { object = this.readI16(); } else if (headByte === 210) { object = this.readI32(); } else if (headByte === 211) { object = this.readI64(); } else if (headByte === 217) { const byteLength = this.lookU8(); object = this.decodeUtf8String(byteLength, 1); } else if (headByte === 218) { const byteLength = this.lookU16(); object = this.decodeUtf8String(byteLength, 2); } else if (headByte === 219) { const byteLength = this.lookU32(); object = this.decodeUtf8String(byteLength, 4); } else if (headByte === 220) { const size = this.readU16(); if (size !== 0) { this.pushArrayState(size); this.complete(); continue DECODE; } else { object = []; } } else if (headByte === 221) { const size = this.readU32(); if (size !== 0) { this.pushArrayState(size); this.complete(); continue DECODE; } else { object = []; } } else if (headByte === 222) { const size = this.readU16(); if (size !== 0) { this.pushMapState(size); this.complete(); continue DECODE; } else { object = {}; } } else if (headByte === 223) { const size = this.readU32(); if (size !== 0) { this.pushMapState(size); this.complete(); continue DECODE; } else { object = {}; } } else if (headByte === 196) { const size = this.lookU8(); object = this.decodeBinary(size, 1); } else if (headByte === 197) { const size = this.lookU16(); object = this.decodeBinary(size, 2); } else if (headByte === 198) { const size = this.lookU32(); object = this.decodeBinary(size, 4); } else if (headByte === 212) { object = this.decodeExtension(1, 0); } else if (headByte === 213) { object = this.decodeExtension(2, 0); } else if (headByte === 214) { object = this.decodeExtension(4, 0); } else if (headByte === 215) { object = this.decodeExtension(8, 0); } else if (headByte === 216) { object = this.decodeExtension(16, 0); } else if (headByte === 199) { const size = this.lookU8(); object = this.decodeExtension(size, 1); } else if (headByte === 200) { const size = this.lookU16(); object = this.decodeExtension(size, 2); } else if (headByte === 201) { const size = this.lookU32(); object = this.decodeExtension(size, 4); } else { throw new DecodeError_1.DecodeError(`Unrecognized type byte: ${(0, prettyByte_1.prettyByte)(headByte)}`); } this.complete(); const stack = this.stack; while (stack.length > 0) { const state = stack[stack.length - 1]; if (state.type === 0) { state.array[state.position] = object; state.position++; if (state.position === state.size) { stack.pop(); object = state.array; } else { continue DECODE; } } else if (state.type === 1) { if (!isValidMapKeyType(object)) { throw new DecodeError_1.DecodeError("The type of key must be string or number but " + typeof object); } if (object === "__proto__") { throw new DecodeError_1.DecodeError("The key __proto__ is not allowed"); } state.key = object; state.type = 2; continue DECODE; } else { state.map[state.key] = object; state.readCount++; if (state.readCount === state.size) { stack.pop(); object = state.map; } else { state.key = null; state.type = 1; continue DECODE; } } } return object; } } readHeadByte() { if (this.headByte === HEAD_BYTE_REQUIRED) { this.headByte = this.readU8(); } return this.headByte; } complete() { this.headByte = HEAD_BYTE_REQUIRED; } readArraySize() { const headByte = this.readHeadByte(); switch (headByte) { case 220: return this.readU16(); case 221: return this.readU32(); default: { if (headByte < 160) { return headByte - 144; } else { throw new DecodeError_1.DecodeError(`Unrecognized array type byte: ${(0, prettyByte_1.prettyByte)(headByte)}`); } } } } pushMapState(size) { if (size > this.maxMapLength) { throw new DecodeError_1.DecodeError(`Max length exceeded: map length (${size}) > maxMapLengthLength (${this.maxMapLength})`); } this.stack.push({ type: 1, size, key: null, readCount: 0, map: {} }); } pushArrayState(size) { if (size > this.maxArrayLength) { throw new DecodeError_1.DecodeError(`Max length exceeded: array length (${size}) > maxArrayLength (${this.maxArrayLength})`); } this.stack.push({ type: 0, size, array: new Array(size), position: 0 }); } decodeUtf8String(byteLength, headerOffset) { var _a; if (byteLength > this.maxStrLength) { throw new DecodeError_1.DecodeError(`Max length exceeded: UTF-8 byte length (${byteLength}) > maxStrLength (${this.maxStrLength})`); } if (this.bytes.byteLength < this.pos + headerOffset + byteLength) { throw MORE_DATA; } const offset = this.pos + headerOffset; let object; if (this.stateIsMapKey() && ((_a = this.keyDecoder) === null || _a === void 0 ? void 0 : _a.canBeCached(byteLength))) { object = this.keyDecoder.decode(this.bytes, offset, byteLength); } else if (byteLength > utf8_1.TEXT_DECODER_THRESHOLD) { object = (0, utf8_1.utf8DecodeTD)(this.bytes, offset, byteLength); } else { object = (0, utf8_1.utf8DecodeJs)(this.bytes, offset, byteLength); } this.pos += headerOffset + byteLength; return object; } stateIsMapKey() { if (this.stack.length > 0) { const state = this.stack[this.stack.length - 1]; return state.type === 1; } return false; } decodeBinary(byteLength, headOffset) { if (byteLength > this.maxBinLength) { throw new DecodeError_1.DecodeError(`Max length exceeded: bin length (${byteLength}) > maxBinLength (${this.maxBinLength})`); } if (!this.hasRemaining(byteLength + headOffset)) { throw MORE_DATA; } const offset = this.pos + headOffset; const object = this.bytes.subarray(offset, offset + byteLength); this.pos += headOffset + byteLength; return object; } decodeExtension(size, headOffset) { if (size > this.maxExtLength) { throw new DecodeError_1.DecodeError(`Max length exceeded: ext length (${size}) > maxExtLength (${this.maxExtLength})`); } const extType = this.view.getInt8(this.pos + headOffset); const data = this.decodeBinary( size, headOffset + 1 /* extType */ ); return this.extensionCodec.decode(data, extType, this.context); } lookU8() { return this.view.getUint8(this.pos); } lookU16() { return this.view.getUint16(this.pos); } lookU32() { return this.view.getUint32(this.pos); } readU8() { const value = this.view.getUint8(this.pos); this.pos++; return value; } readI8() { const value = this.view.getInt8(this.pos); this.pos++; return value; } readU16() { const value = this.view.getUint16(this.pos); this.pos += 2; return value; } readI16() { const value = this.view.getInt16(this.pos); this.pos += 2; return value; } readU32() { const value = this.view.getUint32(this.pos); this.pos += 4; return value; } readI32() { const value = this.view.getInt32(this.pos); this.pos += 4; return value; } readU64() { const value = (0, int_1.getUint64)(this.view, this.pos); this.pos += 8; return value; } readI64() { const value = (0, int_1.getInt64)(this.view, this.pos); this.pos += 8; return value; } readF32() { const value = this.view.getFloat32(this.pos); this.pos += 4; return value; } readF64() { const value = this.view.getFloat64(this.pos); this.pos += 8; return value; } }; exports.Decoder = Decoder; } }); // node_modules/@msgpack/msgpack/dist/decode.js var require_decode = __commonJS({ "node_modules/@msgpack/msgpack/dist/decode.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodeMulti = exports.decode = exports.defaultDecodeOptions = void 0; var Decoder_1 = require_Decoder(); exports.defaultDecodeOptions = {}; function decode3(buffer, options = exports.defaultDecodeOptions) { const decoder2 = new Decoder_1.Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength); return decoder2.decode(buffer); } exports.decode = decode3; function decodeMulti(buffer, options = exports.defaultDecodeOptions) { const decoder2 = new Decoder_1.Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength); return decoder2.decodeMulti(buffer); } exports.decodeMulti = decodeMulti; } }); // node_modules/@msgpack/msgpack/dist/utils/stream.js var require_stream = __commonJS({ "node_modules/@msgpack/msgpack/dist/utils/stream.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ensureAsyncIterable = exports.asyncIterableFromStream = exports.isAsyncIterable = void 0; function isAsyncIterable(object) { return object[Symbol.asyncIterator] != null; } exports.isAsyncIterable = isAsyncIterable; function assertNonNull(value) { if (value == null) { throw new Error("Assertion Failure: value must not be null nor undefined"); } } async function* asyncIterableFromStream(stream) { const reader = stream.getReader(); try { while (true) { const { done, value } = await reader.read(); if (done) { return; } assertNonNull(value); yield value; } } finally { reader.releaseLock(); } } exports.asyncIterableFromStream = asyncIterableFromStream; function ensureAsyncIterable(streamLike) { if (isAsyncIterable(streamLike)) { return streamLike; } else { return asyncIterableFromStream(streamLike); } } exports.ensureAsyncIterable = ensureAsyncIterable; } }); // node_modules/@msgpack/msgpack/dist/decodeAsync.js var require_decodeAsync = __commonJS({ "node_modules/@msgpack/msgpack/dist/decodeAsync.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodeStream = exports.decodeMultiStream = exports.decodeArrayStream = exports.decodeAsync = void 0; var Decoder_1 = require_Decoder(); var stream_1 = require_stream(); var decode_1 = require_decode(); async function decodeAsync(streamLike, options = decode_1.defaultDecodeOptions) { const stream = (0, stream_1.ensureAsyncIterable)(streamLike); const decoder2 = new Decoder_1.Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength); return decoder2.decodeAsync(stream); } exports.decodeAsync = decodeAsync; function decodeArrayStream(streamLike, options = decode_1.defaultDecodeOptions) { const stream = (0, stream_1.ensureAsyncIterable)(streamLike); const decoder2 = new Decoder_1.Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength); return decoder2.decodeArrayStream(stream); } exports.decodeArrayStream = decodeArrayStream; function decodeMultiStream(streamLike, options = decode_1.defaultDecodeOptions) { const stream = (0, stream_1.ensureAsyncIterable)(streamLike); const decoder2 = new Decoder_1.Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength); return decoder2.decodeStream(stream); } exports.decodeMultiStream = decodeMultiStream; function decodeStream(streamLike, options = decode_1.defaultDecodeOptions) { return decodeMultiStream(streamLike, options); } exports.decodeStream = decodeStream; } }); // node_modules/@msgpack/msgpack/dist/index.js var require_dist = __commonJS({ "node_modules/@msgpack/msgpack/dist/index.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodeTimestampExtension = exports.encodeTimestampExtension = exports.decodeTimestampToTimeSpec = exports.encodeTimeSpecToTimestamp = exports.encodeDateToTimeSpec = exports.EXT_TIMESTAMP = exports.ExtData = exports.ExtensionCodec = exports.Encoder = exports.DataViewIndexOutOfBoundsError = exports.DecodeError = exports.Decoder = exports.decodeStream = exports.decodeMultiStream = exports.decodeArrayStream = exports.decodeAsync = exports.decodeMulti = exports.decode = exports.encode = void 0; var encode_1 = require_encode(); Object.defineProperty(exports, "encode", { enumerable: true, get: function() { return encode_1.encode; } }); var decode_1 = require_decode(); Object.defineProperty(exports, "decode", { enumerable: true, get: function() { return decode_1.decode; } }); Object.defineProperty(exports, "decodeMulti", { enumerable: true, get: function() { return decode_1.decodeMulti; } }); var decodeAsync_1 = require_decodeAsync(); Object.defineProperty(exports, "decodeAsync", { enumerable: true, get: function() { return decodeAsync_1.decodeAsync; } }); Object.defineProperty(exports, "decodeArrayStream", { enumerable: true, get: function() { return decodeAsync_1.decodeArrayStream; } }); Object.defineProperty(exports, "decodeMultiStream", { enumerable: true, get: function() { return decodeAsync_1.decodeMultiStream; } }); Object.defineProperty(exports, "decodeStream", { enumerable: true, get: function() { return decodeAsync_1.decodeStream; } }); var Decoder_1 = require_Decoder(); Object.defineProperty(exports, "Decoder", { enumerable: true, get: function() { return Decoder_1.Decoder; } }); Object.defineProperty(exports, "DataViewIndexOutOfBoundsError", { enumerable: true, get: function() { return Decoder_1.DataViewIndexOutOfBoundsError; } }); var DecodeError_1 = require_DecodeError(); Object.defineProperty(exports, "DecodeError", { enumerable: true, get: function() { return DecodeError_1.DecodeError; } }); var Encoder_1 = require_Encoder(); Object.defineProperty(exports, "Encoder", { enumerable: true, get: function() { return Encoder_1.Encoder; } }); var ExtensionCodec_1 = require_ExtensionCodec(); Object.defineProperty(exports, "ExtensionCodec", { enumerable: true, get: function() { return ExtensionCodec_1.ExtensionCodec; } }); var ExtData_1 = require_ExtData(); Object.defineProperty(exports, "ExtData", { enumerable: true, get: function() { return ExtData_1.ExtData; } }); var timestamp_1 = require_timestamp(); Object.defineProperty(exports, "EXT_TIMESTAMP", { enumerable: true, get: function() { return timestamp_1.EXT_TIMESTAMP; } }); Object.defineProperty(exports, "encodeDateToTimeSpec", { enumerable: true, get: function() { return timestamp_1.encodeDateToTimeSpec; } }); Object.defineProperty(exports, "encodeTimeSpecToTimestamp", { enumerable: true, get: function() { return timestamp_1.encodeTimeSpecToTimestamp; } }); Object.defineProperty(exports, "decodeTimestampToTimeSpec", { enumerable: true, get: function() { return timestamp_1.decodeTimestampToTimeSpec; } }); Object.defineProperty(exports, "encodeTimestampExtension", { enumerable: true, get: function() { return timestamp_1.encodeTimestampExtension; } }); Object.defineProperty(exports, "decodeTimestampExtension", { enumerable: true, get: function() { return timestamp_1.decodeTimestampExtension; } }); } }); // node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js var require_XMLHttpRequest = __commonJS({ "node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js"(exports, module2) { var fs = require("fs"); var Url = require("url"); var spawn = require("child_process").spawn; module2.exports = XMLHttpRequest2; XMLHttpRequest2.XMLHttpRequest = XMLHttpRequest2; function XMLHttpRequest2(opts) { "use strict"; opts = opts || {}; var self = this; var http = require("http"); var https = require("https"); var request; var response; var settings = {}; var disableHeaderCheck = false; var defaultHeaders = { "User-Agent": "node-XMLHttpRequest", "Accept": "*/*" }; var headers = Object.assign({}, defaultHeaders); var forbiddenRequestHeaders = [ "accept-charset", "accept-encoding", "access-control-request-headers", "access-control-request-method", "connection", "content-length", "content-transfer-encoding", "cookie", "cookie2", "date", "expect", "host", "keep-alive", "origin", "referer", "te", "trailer", "transfer-encoding", "upgrade", "via" ]; var forbiddenRequestMethods = [ "TRACE", "TRACK", "CONNECT" ]; var sendFlag = false; var errorFlag = false; var abortedFlag = false; var listeners = {}; this.UNSENT = 0; this.OPENED = 1; this.HEADERS_RECEIVED = 2; this.LOADING = 3; this.DONE = 4; this.readyState = this.UNSENT; this.onreadystatechange = null; this.responseText = ""; this.responseXML = ""; this.response = Buffer.alloc(0); this.status = null; this.statusText = null; var isAllowedHttpHeader = function(header) { return disableHeaderCheck || header && forbiddenRequestHeaders.indexOf(header.toLowerCase()) === -1; }; var isAllowedHttpMethod = function(method) { return method && forbiddenRequestMethods.indexOf(method) === -1; }; this.open = function(method, url, async, user, password) { this.abort(); errorFlag = false; abortedFlag = false; if (!isAllowedHttpMethod(method)) { throw new Error("SecurityError: Request method not allowed"); } settings = { "method": method, "url": url.toString(), "async": typeof async !== "boolean" ? true : async, "user": user || null, "password": password || null }; setState(this.OPENED); }; this.setDisableHeaderCheck = function(state) { disableHeaderCheck = state; }; this.setRequestHeader = function(header, value) { if (this.readyState != this.OPENED) { throw new Error("INVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN"); } if (!isAllowedHttpHeader(header)) { console.warn('Refused to set unsafe header "' + header + '"'); return false; } if (sendFlag) { throw new Error("INVALID_STATE_ERR: send flag is true"); } headers[header] = value; return true; }; this.getResponseHeader = function(header) { if (typeof header === "string" && this.readyState > this.OPENED && response.headers[header.toLowerCase()] && !errorFlag) { return response.headers[header.toLowerCase()]; } return null; }; this.getAllResponseHeaders = function() { if (this.readyState < this.HEADERS_RECEIVED || errorFlag) { return ""; } var result = ""; for (var i in response.headers) { if (i !== "set-cookie" && i !== "set-cookie2") { result += i + ": " + response.headers[i] + "\r\n"; } } return result.substr(0, result.length - 2); }; this.getRequestHeader = function(name) { if (typeof name === "string" && headers[name]) { return headers[name]; } return ""; }; this.send = function(data) { if (this.readyState != this.OPENED) { throw new Error("INVALID_STATE_ERR: connection must be opened before send() is called"); } if (sendFlag) { throw new Error("INVALID_STATE_ERR: send has already been called"); } var ssl = false, local = false; var url = Url.parse(settings.url); var host; switch (url.protocol) { case "https:": ssl = true; case "http:": host = url.hostname; break; case "file:": local = true; break; case void 0: case "": host = "localhost"; break; default: throw new Error("Protocol not supported."); } if (local) { if (settings.method !== "GET") { throw new Error("XMLHttpRequest: Only GET method is supported"); } if (settings.async) { fs.readFile(unescape(url.pathname), function(error, data2) { if (error) { self.handleError(error, error.errno || -1); } else { self.status = 200; self.responseText = data2.toString("utf8"); self.response = data2; setState(self.DONE); } }); } else { try { this.response = fs.readFileSync(unescape(url.pathname)); this.responseText = this.response.toString("utf8"); this.status = 200; setState(self.DONE); } catch (e) { this.handleError(e, e.errno || -1); } } return; } var port = url.port || (ssl ? 443 : 80); var uri = url.pathname + (url.search ? url.search : ""); headers["Host"] = host; if (!(ssl && port === 443 || port === 80)) { headers["Host"] += ":" + url.port; } if (settings.user) { if (typeof settings.password == "undefined") { settings.password = ""; } var authBuf = new Buffer(settings.user + ":" + settings.password); headers["Authorization"] = "Basic " + authBuf.toString("base64"); } if (settings.method === "GET" || settings.method === "HEAD") { data = null; } else if (data) { headers["Content-Length"] = Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data); if (!headers["Content-Type"]) { headers["Content-Type"] = "text/plain;charset=UTF-8"; } } else if (settings.method === "POST") { headers["Content-Length"] = 0; } var agent = opts.agent || false; var options = { host, port, path: uri, method: settings.method, headers, agent }; if (ssl) { options.pfx = opts.pfx; options.key = opts.key; options.passphrase = opts.passphrase; options.cert = opts.cert; options.ca = opts.ca; options.ciphers = opts.ciphers; options.rejectUnauthorized = opts.rejectUnauthorized === false ? false : true; } errorFlag = false; if (settings.async) { var doRequest = ssl ? https.request : http.request; sendFlag = true; self.dispatchEvent("readystatechange"); var responseHandler = function(resp2) { response = resp2; if (response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) { settings.url = response.headers.location; var url2 = Url.parse(settings.url); host = url2.hostname; var newOptions = { hostname: url2.hostname, port: url2.port, path: url2.path, method: response.statusCode === 303 ? "GET" : settings.method, headers }; if (ssl) { newOptions.pfx = opts.pfx; newOptions.key = opts.key; newOptions.passphrase = opts.passphrase; newOptions.cert = opts.cert; newOptions.ca = opts.ca; newOptions.ciphers = opts.ciphers; newOptions.rejectUnauthorized = opts.rejectUnauthorized === false ? false : true; } request = doRequest(newOptions, responseHandler).on("error", errorHandler); request.end(); return; } setState(self.HEADERS_RECEIVED); self.status = response.statusCode; response.on("data", function(chunk) { if (chunk) { var data2 = Buffer.from(chunk); self.response = Buffer.concat([self.response, data2]); } if (sendFlag) { setState(self.LOADING); } }); response.on("end", function() { if (sendFlag) { sendFlag = false; setState(self.DONE); self.responseText = self.response.toString("utf8"); } }); response.on("error", function(error) { self.handleError(error); }); }; var errorHandler = function(error) { self.handleError(error); }; request = doRequest(options, responseHandler).on("error", errorHandler); if (opts.autoUnref) { request.on("socket", (socket) => { socket.unref(); }); } if (data) { request.write(data); } request.end(); self.dispatchEvent("loadstart"); } else { var contentFile = ".node-xmlhttprequest-content-" + process.pid; var syncFile = ".node-xmlhttprequest-sync-" + process.pid; fs.writeFileSync(syncFile, "", "utf8"); var execString = "var http = require('http'), https = require('https'), fs = require('fs');var doRequest = http" + (ssl ? "s" : "") + ".request;var options = " + JSON.stringify(options) + ";var responseText = '';var responseData = Buffer.alloc(0);var req = doRequest(options, function(response) {response.on('data', function(chunk) { var data = Buffer.from(chunk); responseText += data.toString('utf8'); responseData = Buffer.concat([responseData, data]);});response.on('end', function() {fs.writeFileSync('" + contentFile + "', JSON.stringify({err: null, data: {statusCode: response.statusCode, headers: response.headers, text: responseText, data: responseData.toString('base64')}}), 'utf8');fs.unlinkSync('" + syncFile + "');});response.on('error', function(error) {fs.writeFileSync('" + contentFile + "', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');fs.unlinkSync('" + syncFile + "');});}).on('error', function(error) {fs.writeFileSync('" + contentFile + "', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');fs.unlinkSync('" + syncFile + "');});" + (data ? "req.write('" + JSON.stringify(data).slice(1, -1).replace(/'/g, "\\'") + "');" : "") + "req.end();"; var syncProc = spawn(process.argv[0], ["-e", execString]); var statusText; while (fs.existsSync(syncFile)) { } self.responseText = fs.readFileSync(contentFile, "utf8"); syncProc.stdin.end(); fs.unlinkSync(contentFile); if (self.responseText.match(/^NODE-XMLHTTPREQUEST-ERROR:/)) { var errorObj = JSON.parse(self.responseText.replace(/^NODE-XMLHTTPREQUEST-ERROR:/, "")); self.handleError(errorObj, 503); } else { self.status = self.responseText.replace(/^NODE-XMLHTTPREQUEST-STATUS:([0-9]*),.*/, "$1"); var resp = JSON.parse(self.responseText.replace(/^NODE-XMLHTTPREQUEST-STATUS:[0-9]*,(.*)/, "$1")); response = { statusCode: self.status, headers: resp.data.headers }; self.responseText = resp.data.text; self.response = Buffer.from(resp.data.data, "base64"); setState(self.DONE, true); } } }; this.handleError = function(error, status) { this.status = status || 0; this.statusText = error; this.responseText = error.stack; errorFlag = true; setState(this.DONE); }; this.abort = function() { if (request) { request.abort(); request = null; } headers = Object.assign({}, defaultHeaders); this.responseText = ""; this.responseXML = ""; this.response = Buffer.alloc(0); errorFlag = abortedFlag = true; if (this.readyState !== this.UNSENT && (this.readyState !== this.OPENED || sendFlag) && this.readyState !== this.DONE) { sendFlag = false; setState(this.DONE); } this.readyState = this.UNSENT; }; this.addEventListener = function(event, callback) { if (!(event in listeners)) { listeners[event] = []; } listeners[event].push(callback); }; this.removeEventListener = function(event, callback) { if (event in listeners) { listeners[event] = listeners[event].filter(function(ev) { return ev !== callback; }); } }; this.dispatchEvent = function(event) { if (typeof self["on" + event] === "function") { if (this.readyState === this.DONE && settings.async) setTimeout(function() { self["on" + event](); }, 0); else self["on" + event](); } if (event in listeners) { for (let i = 0, len = listeners[event].length; i < len; i++) { if (this.readyState === this.DONE) setTimeout(function() { listeners[event][i].call(self); }, 0); else listeners[event][i].call(self); } } }; var setState = function(state) { if (self.readyState === state || self.readyState === self.UNSENT && abortedFlag) return; self.readyState = state; if (settings.async || self.readyState < self.OPENED || self.readyState === self.DONE) { self.dispatchEvent("readystatechange"); } if (self.readyState === self.DONE) { let fire; if (abortedFlag) fire = "abort"; else if (errorFlag) fire = "error"; else fire = "load"; self.dispatchEvent(fire); self.dispatchEvent("loadend"); } }; } } }); // webR/error.ts var WebRError = class extends Error { constructor(msg) { super(msg); this.name = this.constructor.name; Object.setPrototypeOf(this, new.target.prototype); } }; var WebRWorkerError = class extends WebRError { }; var WebRChannelError = class extends WebRError { }; // webR/compat.ts var IN_NODE = typeof process !== "undefined" && process.release && process.release.name === "node"; var loadScript; if (globalThis.document) { loadScript = (url) => new Promise((resolve, reject) => { const script = document.createElement("script"); script.src = url; script.onload = () => resolve(); script.onerror = reject; document.head.appendChild(script); }); } else if (globalThis.importScripts) { loadScript = async (url) => { try { globalThis.importScripts(url); } catch (e) { if (e instanceof TypeError) { await Promise.resolve().then(() => __toESM(require(url))); } else { throw e; } } }; } else if (IN_NODE) { loadScript = async (url) => { const nodePathMod = (await Promise.resolve().then(() => __toESM(require("path")))).default; await Promise.resolve().then(() => __toESM(require(nodePathMod.resolve(url)))); }; } else { throw new WebRError("Cannot determine runtime environment"); } // webR/utils.ts function promiseHandles() { const out = { resolve: (_value) => { }, reject: (_reason) => { }, promise: null }; const promise = new Promise((resolve, reject) => { out.resolve = resolve; out.reject = reject; }); out.promise = promise; return out; } function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } function replaceInObject(obj, test, replacer, ...replacerArgs) { if (obj === null || typeof obj !== "object") { return obj; } if (test(obj)) { return replacer(obj, ...replacerArgs); } if (Array.isArray(obj) || ArrayBuffer.isView(obj)) { return obj.map( (v) => replaceInObject(v, test, replacer, ...replacerArgs) ); } return Object.fromEntries( Object.entries(obj).map(([k, v], i) => [k, replaceInObject(v, test, replacer, ...replacerArgs)]) ); } function newCrossOriginWorker(url, cb) { const req = new XMLHttpRequest(); req.open("get", url, true); req.onload = () => { const worker = new Worker(URL.createObjectURL(new Blob([req.responseText]))); cb(worker); }; req.send(); } function isCrossOrigin(urlString) { if (IN_NODE) return false; const url1 = new URL(location.href); const url2 = new URL(urlString, location.origin); if (url1.host === url2.host && url1.port === url2.port && url1.protocol === url2.protocol) { return false; } return true; } function throwUnreachable(context) { let msg = "Reached the unreachable"; msg = msg + (context ? ": " + context : "."); throw new WebRError(msg); } // webR/chan/task-common.ts var SZ_BUF_DOESNT_FIT = 0; var SZ_BUF_FITS_IDX = 1; var SZ_BUF_SIZE_IDX = 0; var transferCache = /* @__PURE__ */ new WeakMap(); function transfer(obj, transfers) { transferCache.set(obj, transfers); return obj; } function isUUID(x) { return typeof x === "string" && x.length === UUID_LENGTH; } var UUID_LENGTH = 63; function generateUUID() { const result = Array.from({ length: 4 }, randomSegment).join("-"); if (result.length !== UUID_LENGTH) { throw new Error("comlink internal error: UUID has the wrong length"); } return result; } function randomSegment() { let result = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16); const pad = 15 - result.length; if (pad > 0) { result = Array.from({ length: pad }, () => 0).join("") + result; } return result; } // webR/chan/task-main.ts var import_msgpack = __toESM(require_dist()); var encoder = new TextEncoder(); async function syncResponse(endpoint, data, response) { try { let { taskId, sizeBuffer, dataBuffer, signalBuffer } = data; const bytes = (0, import_msgpack.encode)(response); const fits = bytes.length <= dataBuffer.length; Atomics.store(sizeBuffer, SZ_BUF_SIZE_IDX, bytes.length); Atomics.store(sizeBuffer, SZ_BUF_FITS_IDX, +fits); if (!fits) { const [uuid, dataPromise] = requestResponseMessage(endpoint); dataBuffer.set(encoder.encode(uuid)); await signalRequester(signalBuffer, taskId); dataBuffer = (await dataPromise).dataBuffer; } dataBuffer.set(bytes); Atomics.store(sizeBuffer, SZ_BUF_FITS_IDX, 1); await signalRequester(signalBuffer, taskId); } catch (e) { console.warn(e); } } function requestResponseMessage(ep) { const id = generateUUID(); return [ id, new Promise((resolve) => { if (IN_NODE) { ep.once("message", (message) => { if (!message.id || message.id !== id) { return; } resolve(message); }); } else { ep.addEventListener("message", function l(ev) { if (!ev.data || !ev.data.id || ev.data.id !== id) { return; } ep.removeEventListener("message", l); resolve(ev.data); }); } if (ep.start) { ep.start(); } }) ]; } async function signalRequester(signalBuffer, taskId) { const index = (taskId >> 1) % 32; let sleepTime = 1; while (Atomics.compareExchange(signalBuffer, index + 1, 0, taskId) !== 0) { await sleep(sleepTime); if (sleepTime < 32) { sleepTime *= 2; } } Atomics.or(signalBuffer, 0, 1 << index); Atomics.notify(signalBuffer, 0); } // webR/chan/queue.ts var _promises, _resolvers, _add, add_fn; var AsyncQueue = class { constructor() { __privateAdd(this, _add); __privateAdd(this, _promises, void 0); __privateAdd(this, _resolvers, void 0); __privateSet(this, _resolvers, []); __privateSet(this, _promises, []); } reset() { __privateSet(this, _resolvers, []); __privateSet(this, _promises, []); } put(t) { if (!__privateGet(this, _resolvers).length) { __privateMethod(this, _add, add_fn).call(this); } const resolve = __privateGet(this, _resolvers).shift(); resolve(t); } async get() { if (!__privateGet(this, _promises).length) { __privateMethod(this, _add, add_fn).call(this); } const promise = __privateGet(this, _promises).shift(); return promise; } isEmpty() { return !__privateGet(this, _promises).length; } isBlocked() { return !!__privateGet(this, _resolvers).length; } get length() { return __privateGet(this, _promises).length - __privateGet(this, _resolvers).length; } }; _promises = new WeakMap(); _resolvers = new WeakMap(); _add = new WeakSet(); add_fn = function() { __privateGet(this, _promises).push( new Promise((resolve) => { __privateGet(this, _resolvers).push(resolve); }) ); }; // webR/chan/message.ts function newRequest(msg, transferables) { return newRequestResponseMessage( { type: "request", data: { uuid: generateUUID(), msg } }, transferables ); } function newResponse(uuid, resp, transferables) { return newRequestResponseMessage( { type: "response", data: { uuid, resp } }, transferables ); } function newRequestResponseMessage(msg, transferables) { if (transferables) { transfer(msg, transferables); } return msg; } function newSyncRequest(msg, data) { return { type: "sync-request", data: { msg, reqData: data } }; } // webR/payload.ts function webRPayloadAsError(payload) { const e = new WebRWorkerError(payload.obj.message); if (payload.obj.name !== "Error") { e.name = payload.obj.name; } e.stack = payload.obj.stack; return e; } function isWebRPayload(value) { return value && typeof value === "object" && "payloadType" in value && "obj" in value; } function isWebRPayloadPtr(value) { return isWebRPayload(value) && value.payloadType === "ptr"; } // webR/chan/channel.ts var _parked; var ChannelMain = class { constructor() { this.inputQueue = new AsyncQueue(); this.outputQueue = new AsyncQueue(); this.systemQueue = new AsyncQueue(); __privateAdd(this, _parked, /* @__PURE__ */ new Map()); } async read() { return await this.outputQueue.get(); } async flush() { const msg = []; while (!this.outputQueue.isEmpty()) { msg.push(await this.read()); } return msg; } async readSystem() { return await this.systemQueue.get(); } write(msg) { this.inputQueue.put(msg); } async request(msg, transferables) { const req = newRequest(msg, transferables); const { resolve, reject, promise } = promiseHandles(); __privateGet(this, _parked).set(req.data.uuid, { resolve, reject }); this.write(req); return promise; } putClosedMessage() { this.outputQueue.put({ type: "closed" }); } resolveResponse(msg) { const uuid = msg.data.uuid; const handles = __privateGet(this, _parked).get(uuid); if (handles) { const payload = msg.data.resp; __privateGet(this, _parked).delete(uuid); if (payload.payloadType === "err") { handles.reject(webRPayloadAsError(payload)); } else { handles.resolve(payload); } } else { console.warn("Can't find request."); } } }; _parked = new WeakMap(); // webR/chan/task-worker.ts var import_msgpack2 = __toESM(require_dist()); var decoder = new TextDecoder("utf-8"); var _scheduled, _resolved, _result, _exception, _syncGen; var SyncTask = class { constructor(endpoint, msg, transfers = []) { __privateAdd(this, _scheduled, false); __privateAdd(this, _resolved, void 0); __privateAdd(this, _result, void 0); __privateAdd(this, _exception, void 0); __privateAdd(this, _syncGen, void 0); this.syncifier = new _Syncifier(); this.endpoint = endpoint; this.msg = msg; this.transfers = transfers; __privateSet(this, _resolved, false); } scheduleSync() { if (__privateGet(this, _scheduled)) { return; } __privateSet(this, _scheduled, true); this.syncifier.scheduleTask(this); __privateSet(this, _syncGen, this.doSync()); __privateGet(this, _syncGen).next(); return this; } poll() { if (!__privateGet(this, _scheduled)) { throw new Error("Task not synchronously scheduled"); } const { done, value } = __privateGet(this, _syncGen).next(); if (!done) { return false; } __privateSet(this, _resolved, true); __privateSet(this, _result, value); return true; } *doSync() { const { endpoint, msg, transfers } = this; const sizeBuffer = new Int32Array(new SharedArrayBuffer(8)); const signalBuffer = this.signalBuffer; const taskId = this.taskId; let dataBuffer = acquireDataBuffer(UUID_LENGTH); const syncMsg = newSyncRequest(msg, { sizeBuffer, dataBuffer, signalBuffer, taskId }); endpoint.postMessage(syncMsg, transfers); yield; if (Atomics.load(sizeBuffer, SZ_BUF_FITS_IDX) === SZ_BUF_DOESNT_FIT) { const id = decoder.decode(dataBuffer.slice(0, UUID_LENGTH)); releaseDataBuffer(dataBuffer); const size2 = Atomics.load(sizeBuffer, SZ_BUF_SIZE_IDX); dataBuffer = acquireDataBuffer(size2); endpoint.postMessage({ id, dataBuffer }); yield; } const size = Atomics.load(sizeBuffer, SZ_BUF_SIZE_IDX); return (0, import_msgpack2.decode)(dataBuffer.slice(0, size)); } get result() { if (__privateGet(this, _exception)) { throw __privateGet(this, _exception); } if (__privateGet(this, _resolved)) { return __privateGet(this, _result); } throw new Error("Not ready."); } syncify() { this.scheduleSync(); this.syncifier.syncifyTask(this); return this.result; } }; _scheduled = new WeakMap(); _resolved = new WeakMap(); _result = new WeakMap(); _exception = new WeakMap(); _syncGen = new WeakMap(); var _Syncifier = class { constructor() { this.nextTaskId = new Int32Array([1]); this.signalBuffer = new Int32Array(new SharedArrayBuffer(32 * 4 + 4)); this.tasks = /* @__PURE__ */ new Map(); } scheduleTask(task) { task.taskId = this.nextTaskId[0]; this.nextTaskId[0] += 2; task.signalBuffer = this.signalBuffer; this.tasks.set(task.taskId, task); } waitOnSignalBuffer() { const timeout = 50; for (; ; ) { const status = Atomics.wait(this.signalBuffer, 0, 0, timeout); switch (status) { case "ok": case "not-equal": return; case "timed-out": if (interruptBuffer[0] !== 0) { handleInterrupt(); } break; default: throw new Error("Unreachable"); } } } *tasksIdsToWakeup() { const flag = Atomics.load(this.signalBuffer, 0); for (let i = 0; i < 32; i++) { const bit = 1 << i; if (flag & bit) { Atomics.and(this.signalBuffer, 0, ~bit); const wokenTask = Atomics.exchange(this.signalBuffer, i + 1, 0); yield wokenTask; } } } pollTasks(task) { let result = false; for (const wokenTaskId of this.tasksIdsToWakeup()) { const wokenTask = this.tasks.get(wokenTaskId); if (!wokenTask) { throw new Error(`Assertion error: unknown taskId ${wokenTaskId}.`); } if (wokenTask.poll()) { this.tasks.delete(wokenTaskId); if (wokenTask === task) { result = true; } } } return result; } syncifyTask(task) { for (; ; ) { this.waitOnSignalBuffer(); if (this.pollTasks(task)) { return; } } } }; var dataBuffers = []; function acquireDataBuffer(size) { const powerof2 = Math.ceil(Math.log2(size)); if (!dataBuffers[powerof2]) { dataBuffers[powerof2] = []; } const result = dataBuffers[powerof2].pop(); if (result) { result.fill(0); return result; } return new Uint8Array(new SharedArrayBuffer(2 ** powerof2)); } function releaseDataBuffer(buffer) { const powerof2 = Math.ceil(Math.log2(buffer.byteLength)); dataBuffers[powerof2].push(buffer); } var interruptBuffer = new Int32Array(new ArrayBuffer(4)); var handleInterrupt = () => { interruptBuffer[0] = 0; throw new Error("Interrupted!"); }; function setInterruptHandler(handler) { handleInterrupt = handler; } function setInterruptBuffer(buffer) { interruptBuffer = new Int32Array(buffer); } // webR/emscripten.ts var Module2 = {}; function dictEmFree(dict) { Object.keys(dict).forEach((key) => Module2._free(dict[key])); } // webR/chan/channel-shared.ts if (IN_NODE) { globalThis.Worker = require("worker_threads").Worker; } var _interruptBuffer, _handleEventsFromWorker, handleEventsFromWorker_fn, _onMessageFromWorker; var SharedBufferChannelMain = class extends ChannelMain { constructor(config) { super(); __privateAdd(this, _handleEventsFromWorker); __privateAdd(this, _interruptBuffer, void 0); this.close = () => { }; __privateAdd(this, _onMessageFromWorker, async (worker, message) => { if (!message || !message.type) { return; } switch (message.type) { case "resolve": __privateSet(this, _interruptBuffer, new Int32Array(message.data)); this.resolve(); return; case "response": this.resolveResponse(message); return; case "system": this.systemQueue.put(message.data); return; default: this.outputQueue.put(message); return; case "sync-request": { const msg = message; const payload = msg.data.msg; const reqData = msg.data.reqData; switch (payload.type) { case "read": { const response = await this.inputQueue.get(); await syncResponse(worker, reqData, response); break; } default: throw new WebRChannelError(`Unsupported request type '${payload.type}'.`); } return; } case "request": throw new WebRChannelError( "Can't send messages of type 'request' from a worker. Please Use 'sync-request' instead." ); } }); const initWorker = (worker) => { __privateMethod(this, _handleEventsFromWorker, handleEventsFromWorker_fn).call(this, worker); this.close = () => { worker.terminate(); this.putClosedMessage(); }; const msg = { type: "init", data: { config, channelType: ChannelType.SharedArrayBuffer } }; worker.postMessage(msg); }; if (isCrossOrigin(config.baseUrl)) { newCrossOriginWorker( `${config.baseUrl}webr-worker.js`, (worker) => initWorker(worker) ); } else { const worker = new Worker(`${config.baseUrl}webr-worker.js`); initWorker(worker); } ({ resolve: this.resolve, promise: this.initialised } = promiseHandles()); } interrupt() { if (!__privateGet(this, _interruptBuffer)) { throw new WebRChannelError("Failed attempt to interrupt before initialising interruptBuffer"); } this.inputQueue.reset(); __privateGet(this, _interruptBuffer)[0] = 1; } }; _interruptBuffer = new WeakMap(); _handleEventsFromWorker = new WeakSet(); handleEventsFromWorker_fn = function(worker) { if (IN_NODE) { worker.on("message", (message) => { __privateGet(this, _onMessageFromWorker).call(this, worker, message); }); } else { worker.onmessage = (ev) => __privateGet(this, _onMessageFromWorker).call(this, worker, ev.data); } }; _onMessageFromWorker = new WeakMap(); var _ep, _dispatch, _interruptBuffer2, _interrupt; var SharedBufferChannelWorker = class { constructor() { __privateAdd(this, _ep, void 0); __privateAdd(this, _dispatch, () => 0); __privateAdd(this, _interruptBuffer2, new Int32Array(new SharedArrayBuffer(4))); __privateAdd(this, _interrupt, () => { }); this.onMessageFromMainThread = () => { }; __privateSet(this, _ep, IN_NODE ? require("worker_threads").parentPort : globalThis); setInterruptBuffer(__privateGet(this, _interruptBuffer2).buffer); setInterruptHandler(() => this.handleInterrupt()); } resolve() { this.write({ type: "resolve", data: __privateGet(this, _interruptBuffer2).buffer }); } write(msg, transfer2) { __privateGet(this, _ep).postMessage(msg, transfer2); } writeSystem(msg, transfer2) { __privateGet(this, _ep).postMessage({ type: "system", data: msg }, transfer2); } read() { const msg = { type: "read" }; const task = new SyncTask(__privateGet(this, _ep), msg); return task.syncify(); } inputOrDispatch() { for (; ; ) { const msg = this.read(); if (msg.type === "stdin") { return Module2.allocateUTF8(msg.data); } __privateGet(this, _dispatch).call(this, msg); } } run(args) { Module2.callMain(args); } setInterrupt(interrupt) { __privateSet(this, _interrupt, interrupt); } handleInterrupt() { if (__privateGet(this, _interruptBuffer2)[0] !== 0) { __privateGet(this, _interruptBuffer2)[0] = 0; __privateGet(this, _interrupt).call(this); } } setDispatchHandler(dispatch2) { __privateSet(this, _dispatch, dispatch2); } }; _ep = new WeakMap(); _dispatch = new WeakMap(); _interruptBuffer2 = new WeakMap(); _interrupt = new WeakMap(); // webR/chan/channel-service.ts var import_msgpack3 = __toESM(require_dist()); if (IN_NODE) { globalThis.Worker = require("worker_threads").Worker; } var _syncMessageCache, _registration, _interrupted, _registerServiceWorker, registerServiceWorker_fn, _onMessageFromServiceWorker, onMessageFromServiceWorker_fn, _handleEventsFromWorker2, handleEventsFromWorker_fn2, _onMessageFromWorker2; var ServiceWorkerChannelMain = class extends ChannelMain { constructor(config) { super(); __privateAdd(this, _registerServiceWorker); __privateAdd(this, _onMessageFromServiceWorker); __privateAdd(this, _handleEventsFromWorker2); this.close = () => { }; __privateAdd(this, _syncMessageCache, /* @__PURE__ */ new Map()); __privateAdd(this, _registration, void 0); __privateAdd(this, _interrupted, false); __privateAdd(this, _onMessageFromWorker2, async (worker, message) => { if (!message || !message.type) { return; } switch (message.type) { case "resolve": this.resolve(); return; case "response": this.resolveResponse(message); return; case "system": this.systemQueue.put(message.data); return; default: this.outputQueue.put(message); return; case "sync-request": { const request = message.data; __privateGet(this, _syncMessageCache).set(request.data.uuid, request.data.msg); return; } case "request": throw new WebRChannelError( "Can't send messages of type 'request' from a worker.Use service worker fetch request instead." ); } }); const initWorker = (worker) => { __privateMethod(this, _handleEventsFromWorker2, handleEventsFromWorker_fn2).call(this, worker); this.close = () => { worker.terminate(); this.putClosedMessage(); }; __privateMethod(this, _registerServiceWorker, registerServiceWorker_fn).call(this, `${config.serviceWorkerUrl}webr-serviceworker.js`).then( (clientId) => { const msg = { type: "init", data: { config, channelType: ChannelType.ServiceWorker, clientId, location: window.location.href } }; worker.postMessage(msg); } ); }; if (isCrossOrigin(config.serviceWorkerUrl)) { newCrossOriginWorker( `${config.serviceWorkerUrl}webr-worker.js`, (worker) => initWorker(worker) ); } else { const worker = new Worker(`${config.serviceWorkerUrl}webr-worker.js`); initWorker(worker); } ({ resolve: this.resolve, promise: this.initialised } = promiseHandles()); } activeRegistration() { var _a; if (!((_a = __privateGet(this, _registration)) == null ? void 0 : _a.active)) { throw new WebRChannelError("Attempted to obtain a non-existent active registration."); } return __privateGet(this, _registration).active; } interrupt() { __privateSet(this, _interrupted, true); } }; _syncMessageCache = new WeakMap(); _registration = new WeakMap(); _interrupted = new WeakMap(); _registerServiceWorker = new WeakSet(); registerServiceWorker_fn = async function(url) { __privateSet(this, _registration, await navigator.serviceWorker.register(url)); await navigator.serviceWorker.ready; window.addEventListener("beforeunload", () => { var _a; (_a = __privateGet(this, _registration)) == null ? void 0 : _a.unregister(); }); const clientId = await new Promise((resolve) => { navigator.serviceWorker.addEventListener( "message", function listener(event) { if (event.data.type === "registration-successful") { navigator.serviceWorker.removeEventListener("message", listener); resolve(event.data.clientId); } } ); this.activeRegistration().postMessage({ type: "register-client-main" }); }); navigator.serviceWorker.addEventListener("message", (event) => { __privateMethod(this, _onMessageFromServiceWorker, onMessageFromServiceWorker_fn).call(this, event); }); return clientId; }; _onMessageFromServiceWorker = new WeakSet(); onMessageFromServiceWorker_fn = async function(event) { if (event.data.type === "request") { const uuid = event.data.data; const message = __privateGet(this, _syncMessageCache).get(uuid); if (!message) { throw new WebRChannelError("Request not found during service worker XHR request"); } __privateGet(this, _syncMessageCache).delete(uuid); switch (message.type) { case "read": { const response = await this.inputQueue.get(); this.activeRegistration().postMessage({ type: "wasm-webr-fetch-response", uuid, response: newResponse(uuid, response) }); break; } case "interrupt": { const response = __privateGet(this, _interrupted); this.activeRegistration().postMessage({ type: "wasm-webr-fetch-response", uuid, response: newResponse(uuid, response) }); this.inputQueue.reset(); __privateSet(this, _interrupted, false); break; } default: throw new WebRChannelError(`Unsupported request type '${message.type}'.`); } return; } }; _handleEventsFromWorker2 = new WeakSet(); handleEventsFromWorker_fn2 = function(worker) { if (IN_NODE) { worker.on("message", (message) => { __privateGet(this, _onMessageFromWorker2).call(this, worker, message); }); } else { worker.onmessage = (ev) => __privateGet(this, _onMessageFromWorker2).call(this, worker, ev.data); } }; _onMessageFromWorker2 = new WeakMap(); var _ep2, _mainThreadId, _location, _lastInterruptReq, _dispatch2, _interrupt2; var ServiceWorkerChannelWorker = class { constructor(data) { __privateAdd(this, _ep2, void 0); __privateAdd(this, _mainThreadId, void 0); __privateAdd(this, _location, void 0); __privateAdd(this, _lastInterruptReq, Date.now()); __privateAdd(this, _dispatch2, () => 0); __privateAdd(this, _interrupt2, () => { }); this.onMessageFromMainThread = () => { }; if (!data.clientId || !data.location) { throw new WebRChannelError("Can't start service worker channel"); } __privateSet(this, _mainThreadId, data.clientId); __privateSet(this, _location, data.location); __privateSet(this, _ep2, IN_NODE ? require("worker_threads").parentPort : globalThis); } resolve() { this.write({ type: "resolve" }); } write(msg, transfer2) { __privateGet(this, _ep2).postMessage(msg, transfer2); } writeSystem(msg, transfer2) { __privateGet(this, _ep2).postMessage({ type: "system", data: msg }, transfer2); } syncRequest(message) { const request = newRequest(message); this.write({ type: "sync-request", data: request }); let retryCount = 0; for (; ; ) { try { const url = new URL("__wasm__/webr-fetch-request/", __privateGet(this, _location)); const xhr = new XMLHttpRequest(); xhr.timeout = 6e4; xhr.responseType = "arraybuffer"; xhr.open("POST", url, false); const fetchReqBody = { clientId: __privateGet(this, _mainThreadId), uuid: request.data.uuid }; xhr.send((0, import_msgpack3.encode)(fetchReqBody)); return (0, import_msgpack3.decode)(xhr.response); } catch (e) { if (e instanceof DOMException && retryCount++ < 1e3) { console.log("Service worker request failed - resending request"); } else { throw e; } } } } read() { const response = this.syncRequest({ type: "read" }); return response.data.resp; } inputOrDispatch() { for (; ; ) { const msg = this.read(); if (msg.type === "stdin") { return Module2.allocateUTF8(msg.data); } __privateGet(this, _dispatch2).call(this, msg); } } run(args) { Module2.callMain(args); } setInterrupt(interrupt) { __privateSet(this, _interrupt2, interrupt); } handleInterrupt() { if (Date.now() > __privateGet(this, _lastInterruptReq) + 1e3) { __privateSet(this, _lastInterruptReq, Date.now()); const response = this.syncRequest({ type: "interrupt" }); const interrupted = response.data.resp; if (interrupted) { __privateGet(this, _interrupt2).call(this); } } } setDispatchHandler(dispatch2) { __privateSet(this, _dispatch2, dispatch2); } }; _ep2 = new WeakMap(); _mainThreadId = new WeakMap(); _location = new WeakMap(); _lastInterruptReq = new WeakMap(); _dispatch2 = new WeakMap(); _interrupt2 = new WeakMap(); // webR/chan/channel-postmessage.ts if (IN_NODE) { globalThis.Worker = require("worker_threads").Worker; } var _worker, _handleEventsFromWorker3, handleEventsFromWorker_fn3, _onMessageFromWorker3; var PostMessageChannelMain = class extends ChannelMain { constructor(config) { super(); __privateAdd(this, _handleEventsFromWorker3); this.close = () => { }; __privateAdd(this, _worker, void 0); __privateAdd(this, _onMessageFromWorker3, async (worker, message) => { if (!message || !message.type) { return; } switch (message.type) { case "resolve": this.resolve(); return; case "response": this.resolveResponse(message); return; case "system": this.systemQueue.put(message.data); return; default: this.outputQueue.put(message); return; case "request": { const msg = message; const payload = msg.data.msg; switch (payload.type) { case "read": { const input = await this.inputQueue.get(); if (__privateGet(this, _worker)) { const response = newResponse(msg.data.uuid, input); __privateGet(this, _worker).postMessage(response); } break; } default: throw new WebRChannelError(`Unsupported request type '${payload.type}'.`); } return; } case "sync-request": throw new WebRChannelError( "Can't send messages of type 'sync-request' in PostMessage mode. Use 'request' instead." ); } }); const initWorker = (worker) => { __privateSet(this, _worker, worker); __privateMethod(this, _handleEventsFromWorker3, handleEventsFromWorker_fn3).call(this, worker); this.close = () => worker.terminate(); const msg = { type: "init", data: { config, channelType: ChannelType.PostMessage } }; worker.postMessage(msg); }; if (isCrossOrigin(config.baseUrl)) { newCrossOriginWorker( `${config.baseUrl}webr-worker.js`, (worker) => initWorker(worker) ); } else { const worker = new Worker(`${config.baseUrl}webr-worker.js`); initWorker(worker); } ({ resolve: this.resolve, promise: this.initialised } = promiseHandles()); } interrupt() { console.error("Interrupting R execution is not available when using the PostMessage channel"); } }; _worker = new WeakMap(); _handleEventsFromWorker3 = new WeakSet(); handleEventsFromWorker_fn3 = function(worker) { if (IN_NODE) { worker.on("message", (message) => { __privateGet(this, _onMessageFromWorker3).call(this, worker, message); }); } else { worker.onmessage = (ev) => __privateGet(this, _onMessageFromWorker3).call(this, worker, ev.data); } }; _onMessageFromWorker3 = new WeakMap(); var _ep3, _parked2, _dispatch3, _promptDepth, _asyncREPL; var PostMessageChannelWorker = class { constructor() { __privateAdd(this, _ep3, void 0); __privateAdd(this, _parked2, /* @__PURE__ */ new Map()); __privateAdd(this, _dispatch3, () => 0); __privateAdd(this, _promptDepth, 0); /* * This is a fallback REPL for webR running in PostMessage mode. The prompt * section of R's R_ReplDLLdo1 returns empty with -1, which allows this * fallback REPL to yield to the event loop with await. * * The drawback of this approach is that nested REPLs do not work, such as * realine, browser or menu. Attempting to use a nested REPL prints an error * to the JS console. * * R/Wasm errors during execution are caught and the REPL is restarted at the * top level. Any other JS errors are re-thrown. */ __privateAdd(this, _asyncREPL, async () => { for (; ; ) { try { __privateSet(this, _promptDepth, 0); const msg = await this.request({ type: "read" }); if (msg.type === "stdin") { const str = Module.allocateUTF8(msg.data); Module._strcpy(Module._DLLbuf, str); Module.setValue(Module._DLLbufp, Module._DLLbuf, "*"); Module._free(str); try { while (Module._R_ReplDLLdo1() > 0) ; } catch (e) { if (e instanceof WebAssembly.Exception) { Module._R_ReplDLLinit(); Module._R_ReplDLLdo1(); } else { throw e; } } } else { __privateGet(this, _dispatch3).call(this, msg); } } catch (e) { if (!(e instanceof WebAssembly.Exception)) { throw e; } } } }); __privateSet(this, _ep3, IN_NODE ? require("worker_threads").parentPort : globalThis); } resolve() { this.write({ type: "resolve" }); } write(msg, transfer2) { __privateGet(this, _ep3).postMessage(msg, transfer2); } writeSystem(msg, transfer2) { __privateGet(this, _ep3).postMessage({ type: "system", data: msg }, transfer2); } read() { throw new WebRChannelError( "Unable to synchronously read when using the `PostMessage` channel." ); } inputOrDispatch() { if (__privateGet(this, _promptDepth) > 0) { __privateSet(this, _promptDepth, 0); const msg = Module.allocateUTF8OnStack( "Can't block for input when using the PostMessage communication channel." ); Module._Rf_error(msg); } __privateWrapper(this, _promptDepth)._++; return 0; } run(_args) { const args = _args || []; args.unshift("R"); const argc = args.length; const argv = Module._malloc(4 * (argc + 1)); args.forEach((arg, idx) => { const argvPtr = argv + 4 * idx; const argPtr = Module.allocateUTF8(arg); Module.setValue(argvPtr, argPtr, "*"); }); this.writeSystem({ type: "console.warn", data: "WebR is using `PostMessage` communication channel, nested R REPLs are not available." }); Module._Rf_initialize_R(argc, argv); Module._setup_Rmainloop(); Module._R_ReplDLLinit(); Module._R_ReplDLLdo1(); __privateGet(this, _asyncREPL).call(this); } setDispatchHandler(dispatch2) { __privateSet(this, _dispatch3, dispatch2); } async request(msg, transferables) { const req = newRequest(msg, transferables); const { resolve, promise: prom } = promiseHandles(); __privateGet(this, _parked2).set(req.data.uuid, resolve); this.write(req); return prom; } setInterrupt(_) { } handleInterrupt() { } onMessageFromMainThread(message) { const msg = message; const uuid = msg.data.uuid; const resolve = __privateGet(this, _parked2).get(uuid); if (resolve) { __privateGet(this, _parked2).delete(uuid); resolve(msg.data.resp); } else { console.warn("Can't find request."); } } }; _ep3 = new WeakMap(); _parked2 = new WeakMap(); _dispatch3 = new WeakMap(); _promptDepth = new WeakMap(); _asyncREPL = new WeakMap(); // webR/chan/channel-common.ts var ChannelType = { Automatic: 0, SharedArrayBuffer: 1, ServiceWorker: 2, PostMessage: 3 }; function newChannelWorker(msg) { switch (msg.data.channelType) { case ChannelType.SharedArrayBuffer: return new SharedBufferChannelWorker(); case ChannelType.ServiceWorker: return new ServiceWorkerChannelWorker(msg.data); case ChannelType.PostMessage: return new PostMessageChannelWorker(); default: throw new WebRChannelError("Unknown worker channel type recieved"); } } // webR/robj.ts var RTypeMap = { null: 0, symbol: 1, pairlist: 2, closure: 3, environment: 4, promise: 5, call: 6, special: 7, builtin: 8, string: 9, logical: 10, integer: 13, double: 14, complex: 15, character: 16, dots: 17, any: 18, list: 19, expression: 20, bytecode: 21, pointer: 22, weakref: 23, raw: 24, s4: 25, new: 30, free: 31, function: 99 }; function isWebRDataJs(value) { return value && typeof value === "object" && Object.keys(RTypeMap).includes(value.type); } function isComplex(value) { return value && typeof value === "object" && "re" in value && "im" in value; } // webR/utils-r.ts function protect(x) { Module2._Rf_protect(handlePtr(x)); return x; } function protectInc(x, prot) { Module2._Rf_protect(handlePtr(x)); ++prot.n; return x; } function protectWithIndex(x) { const pLoc = Module2._malloc(4); Module2._R_ProtectWithIndex(handlePtr(x), pLoc); const loc = Module2.getValue(pLoc, "i32"); return { loc, ptr: pLoc }; } function unprotectIndex(index) { Module2._Rf_unprotect(1); Module2._free(index.ptr); } function reprotect(x, index) { Module2._R_Reprotect(handlePtr(x), index.loc); return x; } function unprotect(n) { Module2._Rf_unprotect(n); } function envPoke(env, sym, value) { Module2._Rf_defineVar(handlePtr(sym), handlePtr(value), handlePtr(env)); } function parseEvalBare(code, env) { const strings = {}; const prot = { n: 0 }; try { const envObj = new REnvironment(env); protectInc(envObj, prot); strings.code = Module2.allocateUTF8(code); const out = Module2._R_ParseEvalString(strings.code, envObj.ptr); return RObject.wrap(out); } finally { dictEmFree(strings); unprotect(prot.n); } } var UnwindProtectException = class extends Error { constructor(message, cont) { super(message); this.name = "UnwindProtectException"; this.cont = cont; } }; function safeEval(call, env) { return Module2.getWasmTableEntry(Module2.GOT.ffi_safe_eval.value)( handlePtr(call), handlePtr(env) ); } // webR/robj-worker.ts function handlePtr(x) { if (isRObject(x)) { return x.ptr; } else { return x; } } function assertRType(obj, type) { if (Module2._TYPEOF(obj.ptr) !== RTypeMap[type]) { throw new Error(`Unexpected object type "${obj.type()}" when expecting type "${type}"`); } } var shelters = /* @__PURE__ */ new Map(); function keep(shelter, x) { const ptr = handlePtr(x); Module2._R_PreserveObject(ptr); if (shelter === void 0) { return; } if (isUUID(shelter)) { shelters.get(shelter).push(ptr); return; } throw new Error("Unexpected shelter type " + typeof shelter); } function destroy(shelter, x) { const ptr = handlePtr(x); Module2._R_ReleaseObject(ptr); const objs2 = shelters.get(shelter); const loc = objs2.indexOf(ptr); if (loc < 0) { throw new Error("Can't find object in shelter."); } objs2.splice(loc, 1); } function purge(shelter) { const ptrs = shelters.get(shelter); for (const ptr of ptrs) { try { Module2._R_ReleaseObject(ptr); } catch (e) { console.error(e); } } shelters.set(shelter, []); } function newObjectFromData(obj) { if (isWebRDataJs(obj)) { return new (getRWorkerClass(RTypeMap[obj.type]))(obj); } if (obj && typeof obj === "object" && "type" in obj && obj.type === "null") { return new RNull(); } if (obj === null) { return new RLogical({ type: "logical", names: null, values: [null] }); } if (typeof obj === "boolean") { return new RLogical(obj); } if (typeof obj === "number") { return new RDouble(obj); } if (typeof obj === "string") { return new RCharacter(obj); } if (isComplex(obj)) { return new RComplex(obj); } if (Array.isArray(obj)) { return newObjectFromArray(obj); } throw new Error("Robj construction for this JS object is not yet supported"); } function newObjectFromArray(arr) { const prot = { n: 0 }; try { const call = new RCall([new RSymbol("c"), ...arr]); protectInc(call, prot); return call.eval(); } finally { unprotect(prot.n); } } var RObjectBase = class { constructor(ptr) { this.ptr = ptr; } type() { const typeNumber = Module2._TYPEOF(this.ptr); const type = Object.keys(RTypeMap).find( (typeName) => RTypeMap[typeName] === typeNumber ); return type; } }; var _slice, slice_fn; var _RObject = class extends RObjectBase { constructor(data) { if (!(data instanceof RObjectBase)) { return newObjectFromData(data); } super(data.ptr); __privateAdd(this, _slice); } static wrap(ptr) { const type = Module2._TYPEOF(ptr); return new (getRWorkerClass(type))(new RObjectBase(ptr)); } get [Symbol.toStringTag]() { return `RObject:${this.type()}`; } /** @internal */ static getPersistentObject(prop) { return objs[prop]; } /** @internal */ getPropertyValue(prop) { return this[prop]; } inspect() { parseEvalBare(".Internal(inspect(x))", { x: this }); } isNull() { return Module2._TYPEOF(this.ptr) === RTypeMap.null; } isUnbound() { return this.ptr === objs.unboundValue.ptr; } attrs() { return RPairlist.wrap(Module2._ATTRIB(this.ptr)); } setNames(values) { let namesObj; if (values === null) { namesObj = objs.null; } else if (Array.isArray(values) && values.every((v) => typeof v === "string" || v === null)) { namesObj = new RCharacter(values); } else { throw new Error("Argument to setNames must be null or an Array of strings or null"); } Module2._Rf_setAttrib(this.ptr, objs.namesSymbol.ptr, namesObj.ptr); return this; } names() { const names = RCharacter.wrap(Module2._Rf_getAttrib(this.ptr, objs.namesSymbol.ptr)); if (names.isNull()) { return null; } else { return names.toArray(); } } includes(name) { const names = this.names(); return names && names.includes(name); } toJs(options = { depth: 0 }, depth = 1) { throw new Error("This R object cannot be converted to JS"); } subset(prop) { return __privateMethod(this, _slice, slice_fn).call(this, prop, objs.bracketSymbol.ptr); } get(prop) { return __privateMethod(this, _slice, slice_fn).call(this, prop, objs.bracket2Symbol.ptr); } getDollar(prop) { return __privateMethod(this, _slice, slice_fn).call(this, prop, objs.dollarSymbol.ptr); } pluck(...path) { const index = protectWithIndex(objs.null); try { const getter = (obj, prop) => { const out = obj.get(prop); return reprotect(out, index); }; const result = path.reduce(getter, this); return result.isNull() ? void 0 : result; } finally { unprotectIndex(index); } } set(prop, value) { const prot = { n: 0 }; try { const idx = new _RObject(prop); protectInc(idx, prot); const valueObj = new _RObject(value); protectInc(valueObj, prot); const assign = new RSymbol("[[<-"); const call = Module2._Rf_lang4(assign.ptr, this.ptr, idx.ptr, valueObj.ptr); protectInc(call, prot); return _RObject.wrap(safeEval(call, objs.baseEnv)); } finally { unprotect(prot.n); } } /** @internal */ static getMethods(obj) { const props = /* @__PURE__ */ new Set(); let cur = obj; do { Object.getOwnPropertyNames(cur).map((p) => props.add(p)); } while (cur = Object.getPrototypeOf(cur)); return [...props.keys()].filter((i) => typeof obj[i] === "function"); } }; var RObject = _RObject; _slice = new WeakSet(); slice_fn = function(prop, op) { const prot = { n: 0 }; try { const idx = new _RObject(prop); protectInc(idx, prot); const call = Module2._Rf_lang3(op, this.ptr, idx.ptr); protectInc(call, prot); return _RObject.wrap(safeEval(call, objs.baseEnv)); } finally { unprotect(prot.n); } }; var RNull = class extends RObject { constructor() { super(new RObjectBase(Module2.getValue(Module2._R_NilValue, "*"))); return this; } toJs() { return { type: "null" }; } }; var RSymbol = class extends RObject { // Note that symbols don't need to be protected. This also means // that allocating symbols in loops with random data is probably a // bad idea because this leaks memory. constructor(x) { if (x instanceof RObjectBase) { assertRType(x, "symbol"); super(x); return; } const name = Module2.allocateUTF8(x); try { super(new RObjectBase(Module2._Rf_install(name))); } finally { Module2._free(name); } } toJs() { const obj = this.toObject(); return { type: "symbol", printname: obj.printname, symvalue: obj.symvalue, internal: obj.internal }; } toObject() { return { printname: this.printname().isUnbound() ? null : this.printname().toString(), symvalue: this.symvalue().isUnbound() ? null : this.symvalue().ptr, internal: this.internal().isNull() ? null : this.internal().ptr }; } toString() { return this.printname().toString(); } printname() { return RString.wrap(Module2._PRINTNAME(this.ptr)); } symvalue() { return RObject.wrap(Module2._SYMVALUE(this.ptr)); } internal() { return RObject.wrap(Module2._INTERNAL(this.ptr)); } }; var RPairlist = class extends RObject { constructor(val) { if (val instanceof RObjectBase) { assertRType(val, "pairlist"); super(val); return this; } const prot = { n: 0 }; try { const { names, values } = toWebRData(val); const list = RPairlist.wrap(Module2._Rf_allocList(values.length)); protectInc(list, prot); for (let [i, next] = [0, list]; !next.isNull(); [i, next] = [i + 1, next.cdr()]) { next.setcar(new RObject(values[i])); } list.setNames(names); super(list); } finally { unprotect(prot.n); } } get length() { return this.toArray().length; } toArray(options = { depth: 1 }) { return this.toJs(options).values; } toObject({ allowDuplicateKey = true, allowEmptyKey = false, depth = 1 } = {}) { const entries = this.entries({ depth }); const keys = entries.map(([k, v]) => k); if (!allowDuplicateKey && new Set(keys).size !== keys.length) { throw new Error("Duplicate key when converting pairlist without allowDuplicateKey enabled"); } if (!allowEmptyKey && keys.some((k) => !k)) { throw new Error("Empty or null key when converting pairlist without allowEmptyKey enabled"); } return Object.fromEntries( entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx) ); } entries(options = { depth: 1 }) { const obj = this.toJs(options); return obj.values.map((v, i) => [obj.names ? obj.names[i] : null, v]); } toJs(options = { depth: 0 }, depth = 1) { const namesArray = []; let hasNames = false; const values = []; for (let next = this; !next.isNull(); next = next.cdr()) { const symbol = next.tag(); if (symbol.isNull()) { namesArray.push(""); } else { hasNames = true; namesArray.push(symbol.toString()); } if (options.depth && depth >= options.depth) { values.push(next.car()); } else { values.push(next.car().toJs(options, depth + 1)); } } const names = hasNames ? namesArray : null; return { type: "pairlist", names, values }; } includes(name) { return name in this.toObject(); } setcar(obj) { Module2._SETCAR(this.ptr, obj.ptr); } car() { return RObject.wrap(Module2._CAR(this.ptr)); } cdr() { return RObject.wrap(Module2._CDR(this.ptr)); } tag() { return RObject.wrap(Module2._TAG(this.ptr)); } }; var RCall = class extends RObject { constructor(val) { if (val instanceof RObjectBase) { assertRType(val, "call"); super(val); return this; } const prot = { n: 0 }; try { const { values } = toWebRData(val); const objs2 = values.map((value) => protectInc(new RObject(value), prot)); const call = RCall.wrap(Module2._Rf_allocVector(RTypeMap.call, values.length)); protectInc(call, prot); for (let [i, next] = [0, call]; !next.isNull(); [i, next] = [i + 1, next.cdr()]) { next.setcar(objs2[i]); } super(call); } finally { unprotect(prot.n); } } setcar(obj) { Module2._SETCAR(this.ptr, obj.ptr); } car() { return RObject.wrap(Module2._CAR(this.ptr)); } cdr() { return RObject.wrap(Module2._CDR(this.ptr)); } eval() { return RObject.wrap(safeEval(this.ptr, objs.baseEnv)); } }; var RList = class extends RObject { constructor(val) { if (val instanceof RObjectBase) { assertRType(val, "list"); super(val); return this; } const prot = { n: 0 }; try { const { names, values } = toWebRData(val); const ptr = Module2._Rf_allocVector(RTypeMap.list, values.length); protectInc(ptr, prot); values.forEach((v, i) => { Module2._SET_VECTOR_ELT(ptr, i, new RObject(v).ptr); }); RObject.wrap(ptr).setNames(names); super(new RObjectBase(ptr)); } finally { unprotect(prot.n); } } get length() { return Module2._LENGTH(this.ptr); } toArray(options = { depth: 1 }) { return this.toJs(options).values; } toObject({ allowDuplicateKey = true, allowEmptyKey = false, depth = 1 } = {}) { const entries = this.entries({ depth }); const keys = entries.map(([k, v]) => k); if (!allowDuplicateKey && new Set(keys).size !== keys.length) { throw new Error("Duplicate key when converting list without allowDuplicateKey enabled"); } if (!allowEmptyKey && keys.some((k) => !k)) { throw new Error("Empty or null key when converting list without allowEmptyKey enabled"); } return Object.fromEntries( entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx) ); } entries(options = { depth: 1 }) { const obj = this.toJs(options); return obj.values.map((v, i) => [obj.names ? obj.names[i] : null, v]); } toJs(options = { depth: 0 }, depth = 1) { return { type: "list", names: this.names(), values: [...Array(this.length).keys()].map((i) => { if (options.depth && depth >= options.depth) { return this.get(i + 1); } else { return this.get(i + 1).toJs(options, depth + 1); } }) }; } }; var RFunction = class extends RObject { exec(...args) { const prot = { n: 0 }; try { const call = new RCall([this, ...args]); protectInc(call, prot); return call.eval(); } finally { unprotect(prot.n); } } }; var RString = class extends RObject { // Unlike symbols, strings are not cached and must thus be protected constructor(x) { if (x instanceof RObjectBase) { assertRType(x, "string"); super(x); return; } const name = Module2.allocateUTF8(x); try { super(new RObjectBase(Module2._Rf_mkChar(name))); } finally { Module2._free(name); } } toString() { return Module2.UTF8ToString(Module2._R_CHAR(this.ptr)); } toJs() { return { type: "string", value: this.toString() }; } }; var REnvironment = class extends RObject { constructor(val = {}) { if (val instanceof RObjectBase) { assertRType(val, "environment"); super(val); return this; } let nProt = 0; try { const { names, values } = toWebRData(val); const ptr = protect(Module2._R_NewEnv(objs.globalEnv.ptr, 0, 0)); ++nProt; values.forEach((v, i) => { const name = names ? names[i] : null; if (!name) { throw new Error("Can't create object in new environment with empty symbol name"); } const sym = new RSymbol(name); const vObj = protect(new RObject(v)); try { envPoke(ptr, sym, vObj); } finally { unprotect(1); } }); super(new RObjectBase(ptr)); } finally { unprotect(nProt); } } ls(all = false, sorted = true) { const ls = RCharacter.wrap(Module2._R_lsInternal3(this.ptr, Number(all), Number(sorted))); return ls.toArray(); } bind(name, value) { const sym = new RSymbol(name); const valueObj = protect(new RObject(value)); try { envPoke(this, sym, valueObj); } finally { unprotect(1); } } names() { return this.ls(true, true); } frame() { return RObject.wrap(Module2._FRAME(this.ptr)); } subset(prop) { if (typeof prop === "number") { throw new Error("Object of type environment is not subsettable"); } return this.getDollar(prop); } toObject({ depth = 0 } = {}) { const symbols = this.names(); return Object.fromEntries( [...Array(symbols.length).keys()].map((i) => { return [symbols[i], this.getDollar(symbols[i]).toJs({ depth })]; }) ); } toJs(options = { depth: 0 }, depth = 1) { const names = this.names(); const values = [...Array(names.length).keys()].map((i) => { if (options.depth && depth >= options.depth) { return this.getDollar(names[i]); } else { return this.getDollar(names[i]).toJs(options, depth + 1); } }); return { type: "environment", names, values }; } }; var RVectorAtomic = class extends RObject { constructor(val, kind, newSetter) { if (val instanceof RObjectBase) { assertRType(val, kind); super(val); return this; } const prot = { n: 0 }; try { const { names, values } = toWebRData(val); const ptr = Module2._Rf_allocVector(RTypeMap[kind], values.length); protectInc(ptr, prot); values.forEach(newSetter(ptr)); RObject.wrap(ptr).setNames(names); super(new RObjectBase(ptr)); } finally { unprotect(prot.n); } } get length() { return Module2._LENGTH(this.ptr); } get(prop) { return super.get(prop); } subset(prop) { return super.subset(prop); } getDollar(prop) { throw new Error("$ operator is invalid for atomic vectors"); } detectMissing() { const prot = { n: 0 }; try { const call = Module2._Rf_lang2(new RSymbol("is.na").ptr, this.ptr); protectInc(call, prot); const val = RLogical.wrap(safeEval(call, objs.baseEnv)); protectInc(val, prot); const ret = val.toTypedArray(); return Array.from(ret).map((elt) => Boolean(elt)); } finally { unprotect(prot.n); } } toArray() { const arr = this.toTypedArray(); return this.detectMissing().map((m, idx) => m ? null : arr[idx]); } toObject({ allowDuplicateKey = true, allowEmptyKey = false } = {}) { const entries = this.entries(); const keys = entries.map(([k, v]) => k); if (!allowDuplicateKey && new Set(keys).size !== keys.length) { throw new Error( "Duplicate key when converting atomic vector without allowDuplicateKey enabled" ); } if (!allowEmptyKey && keys.some((k) => !k)) { throw new Error( "Empty or null key when converting atomic vector without allowEmptyKey enabled" ); } return Object.fromEntries( entries.filter((u, idx) => entries.findIndex((v) => v[0] === u[0]) === idx) ); } entries() { const values = this.toArray(); const names = this.names(); return values.map((v, i) => [names ? names[i] : null, v]); } toJs() { return { type: this.type(), names: this.names(), values: this.toArray() }; } }; var _newSetter; var _RLogical = class extends RVectorAtomic { constructor(val) { super(val, "logical", __privateGet(_RLogical, _newSetter)); } getBoolean(idx) { return this.get(idx).toArray()[0]; } toBoolean() { if (this.length !== 1) { throw new Error("Can't convert atomic vector of length > 1 to a scalar JS value"); } const val = this.getBoolean(1); if (val === null) { throw new Error("Can't convert missing value `NA` to a JS boolean"); } return val; } toTypedArray() { return new Int32Array( Module2.HEAP32.subarray( Module2._LOGICAL(this.ptr) / 4, Module2._LOGICAL(this.ptr) / 4 + this.length ) ); } toArray() { const arr = this.toTypedArray(); return this.detectMissing().map((m, idx) => m ? null : Boolean(arr[idx])); } }; var RLogical = _RLogical; _newSetter = new WeakMap(); __privateAdd(RLogical, _newSetter, (ptr) => { const data = Module2._LOGICAL(ptr); const naLogical = Module2.getValue(Module2._R_NaInt, "i32"); return (v, i) => { Module2.setValue(data + 4 * i, v === null ? naLogical : Boolean(v), "i32"); }; }); var _newSetter2; var _RInteger = class extends RVectorAtomic { constructor(val) { super(val, "integer", __privateGet(_RInteger, _newSetter2)); } getNumber(idx) { return this.get(idx).toArray()[0]; } toNumber() { if (this.length !== 1) { throw new Error("Can't convert atomic vector of length > 1 to a scalar JS value"); } const val = this.getNumber(1); if (val === null) { throw new Error("Can't convert missing value `NA` to a JS number"); } return val; } toTypedArray() { return new Int32Array( Module2.HEAP32.subarray( Module2._INTEGER(this.ptr) / 4, Module2._INTEGER(this.ptr) / 4 + this.length ) ); } }; var RInteger = _RInteger; _newSetter2 = new WeakMap(); __privateAdd(RInteger, _newSetter2, (ptr) => { const data = Module2._INTEGER(ptr); const naInteger = Module2.getValue(Module2._R_NaInt, "i32"); return (v, i) => { Module2.setValue(data + 4 * i, v === null ? naInteger : Math.round(Number(v)), "i32"); }; }); var _newSetter3; var _RDouble = class extends RVectorAtomic { constructor(val) { super(val, "double", __privateGet(_RDouble, _newSetter3)); } getNumber(idx) { return this.get(idx).toArray()[0]; } toNumber() { if (this.length !== 1) { throw new Error("Can't convert atomic vector of length > 1 to a scalar JS value"); } const val = this.getNumber(1); if (val === null) { throw new Error("Can't convert missing value `NA` to a JS number"); } return val; } toTypedArray() { return new Float64Array( Module2.HEAPF64.subarray(Module2._REAL(this.ptr) / 8, Module2._REAL(this.ptr) / 8 + this.length) ); } }; var RDouble = _RDouble; _newSetter3 = new WeakMap(); __privateAdd(RDouble, _newSetter3, (ptr) => { const data = Module2._REAL(ptr); const naDouble = Module2.getValue(Module2._R_NaReal, "double"); return (v, i) => { Module2.setValue(data + 8 * i, v === null ? naDouble : v, "double"); }; }); var _newSetter4; var _RComplex = class extends RVectorAtomic { constructor(val) { super(val, "complex", __privateGet(_RComplex, _newSetter4)); } getComplex(idx) { return this.get(idx).toArray()[0]; } toComplex() { if (this.length !== 1) { throw new Error("Can't convert atomic vector of length > 1 to a scalar JS value"); } const val = this.getComplex(1); if (val === null) { throw new Error("Can't convert missing value `NA` to a JS object"); } return val; } toTypedArray() { return new Float64Array( Module2.HEAPF64.subarray( Module2._COMPLEX(this.ptr) / 8, Module2._COMPLEX(this.ptr) / 8 + 2 * this.length ) ); } toArray() { const arr = this.toTypedArray(); return this.detectMissing().map( (m, idx) => m ? null : { re: arr[2 * idx], im: arr[2 * idx + 1] } ); } }; var RComplex = _RComplex; _newSetter4 = new WeakMap(); __privateAdd(RComplex, _newSetter4, (ptr) => { const data = Module2._COMPLEX(ptr); const naDouble = Module2.getValue(Module2._R_NaReal, "double"); return (v, i) => { Module2.setValue(data + 8 * (2 * i), v === null ? naDouble : v.re, "double"); Module2.setValue(data + 8 * (2 * i + 1), v === null ? naDouble : v.im, "double"); }; }); var _newSetter5; var _RCharacter = class extends RVectorAtomic { constructor(val) { super(val, "character", __privateGet(_RCharacter, _newSetter5)); } getString(idx) { return this.get(idx).toArray()[0]; } toString() { if (this.length !== 1) { throw new Error("Can't convert atomic vector of length > 1 to a scalar JS value"); } const val = this.getString(1); if (val === null) { throw new Error("Can't convert missing value `NA` to a JS string"); } return val; } toTypedArray() { return new Uint32Array( Module2.HEAPU32.subarray( Module2._STRING_PTR(this.ptr) / 4, Module2._STRING_PTR(this.ptr) / 4 + this.length ) ); } toArray() { return this.detectMissing().map( (m, idx) => m ? null : Module2.UTF8ToString(Module2._R_CHAR(Module2._STRING_ELT(this.ptr, idx))) ); } }; var RCharacter = _RCharacter; _newSetter5 = new WeakMap(); __privateAdd(RCharacter, _newSetter5, (ptr) => { return (v, i) => { if (v === null) { Module2._SET_STRING_ELT(ptr, i, objs.naString.ptr); } else { Module2._SET_STRING_ELT(ptr, i, new RString(v).ptr); } }; }); var _newSetter6; var _RRaw = class extends RVectorAtomic { constructor(val) { super(val, "raw", __privateGet(_RRaw, _newSetter6)); } getNumber(idx) { return this.get(idx).toArray()[0]; } toNumber() { if (this.length !== 1) { throw new Error("Can't convert atomic vector of length > 1 to a scalar JS value"); } const val = this.getNumber(1); if (val === null) { throw new Error("Can't convert missing value `NA` to a JS number"); } return val; } toTypedArray() { return new Uint8Array( Module2.HEAPU8.subarray(Module2._RAW(this.ptr), Module2._RAW(this.ptr) + this.length) ); } }; var RRaw = _RRaw; _newSetter6 = new WeakMap(); __privateAdd(RRaw, _newSetter6, (ptr) => { const data = Module2._RAW(ptr); return (v, i) => { Module2.setValue(data + i, Number(v), "i8"); }; }); function toWebRData(jsObj) { if (isWebRDataJs(jsObj)) { return jsObj; } else if (Array.isArray(jsObj) || ArrayBuffer.isView(jsObj)) { return { names: null, values: jsObj }; } else if (jsObj && typeof jsObj === "object" && !isComplex(jsObj)) { return { names: Object.keys(jsObj), values: Object.values(jsObj) }; } return { names: null, values: [jsObj] }; } function getRWorkerClass(type) { const typeClasses = { [RTypeMap.null]: RNull, [RTypeMap.symbol]: RSymbol, [RTypeMap.pairlist]: RPairlist, [RTypeMap.closure]: RFunction, [RTypeMap.environment]: REnvironment, [RTypeMap.call]: RCall, [RTypeMap.special]: RFunction, [RTypeMap.builtin]: RFunction, [RTypeMap.string]: RString, [RTypeMap.logical]: RLogical, [RTypeMap.integer]: RInteger, [RTypeMap.double]: RDouble, [RTypeMap.complex]: RComplex, [RTypeMap.character]: RCharacter, [RTypeMap.list]: RList, [RTypeMap.raw]: RRaw, [RTypeMap.function]: RFunction }; if (type in typeClasses) { return typeClasses[type]; } return RObject; } function isRObject(value) { return value instanceof RObject; } var objs; function initPersistentObjects() { objs = { baseEnv: REnvironment.wrap(Module2.getValue(Module2._R_BaseEnv, "*")), bracket2Symbol: RSymbol.wrap(Module2.getValue(Module2._R_Bracket2Symbol, "*")), bracketSymbol: RSymbol.wrap(Module2.getValue(Module2._R_BracketSymbol, "*")), dollarSymbol: RSymbol.wrap(Module2.getValue(Module2._R_DollarSymbol, "*")), emptyEnv: REnvironment.wrap(Module2.getValue(Module2._R_EmptyEnv, "*")), false: RLogical.wrap(Module2.getValue(Module2._R_FalseValue, "*")), globalEnv: REnvironment.wrap(Module2.getValue(Module2._R_GlobalEnv, "*")), na: RLogical.wrap(Module2.getValue(Module2._R_LogicalNAValue, "*")), namesSymbol: RSymbol.wrap(Module2.getValue(Module2._R_NamesSymbol, "*")), naString: RObject.wrap(Module2.getValue(Module2._R_NaString, "*")), null: RNull.wrap(Module2.getValue(Module2._R_NilValue, "*")), true: RLogical.wrap(Module2.getValue(Module2._R_TrueValue, "*")), unboundValue: RObject.wrap(Module2.getValue(Module2._R_UnboundValue, "*")) }; } // webR/webr-worker.ts var initialised = false; var chan; var onWorkerMessage = function(msg) { if (!msg || !msg.type) { return; } if (msg.type === "init") { if (initialised) { throw new Error("Can't initialise worker multiple times."); } const messageInit = msg; chan = newChannelWorker(messageInit); init(messageInit.data.config); initialised = true; return; } chan == null ? void 0 : chan.onMessageFromMainThread(msg); }; if (IN_NODE) { require("worker_threads").parentPort.on("message", onWorkerMessage); globalThis.XMLHttpRequest = require_XMLHttpRequest().XMLHttpRequest; } else { globalThis.onmessage = (ev) => onWorkerMessage(ev.data); } var _config; function dispatch(msg) { switch (msg.type) { case "request": { const req = msg; const reqMsg = req.data.msg; const write = (resp, transferables) => chan == null ? void 0 : chan.write(newResponse(req.data.uuid, resp, transferables)); try { switch (reqMsg.type) { case "lookupPath": { const msg2 = reqMsg; const node = Module2.FS.lookupPath(msg2.data.path, {}).node; write({ obj: copyFSNode(node), payloadType: "raw" }); break; } case "mkdir": { const msg2 = reqMsg; write({ obj: copyFSNode(Module2.FS.mkdir(msg2.data.path)), payloadType: "raw" }); break; } case "mount": { const msg2 = reqMsg; const fs = Module2.FS.filesystems[msg2.data.type]; Module2.FS.mount(fs, msg2.data.options, msg2.data.mountpoint); write({ obj: null, payloadType: "raw" }); break; } case "readFile": { const msg2 = reqMsg; const reqData = msg2.data; const out = { obj: Module2.FS.readFile(reqData.path, { encoding: "binary", flags: reqData.flags }), payloadType: "raw" }; write(out, [out.obj.buffer]); break; } case "rmdir": { const msg2 = reqMsg; write({ obj: Module2.FS.rmdir(msg2.data.path), payloadType: "raw" }); break; } case "writeFile": { const msg2 = reqMsg; const reqData = msg2.data; const data = Uint8Array.from(Object.values(reqData.data)); write({ obj: Module2.FS.writeFile(reqData.path, data, { flags: reqData.flags }), payloadType: "raw" }); break; } case "unlink": { const msg2 = reqMsg; write({ obj: Module2.FS.unlink(msg2.data.path), payloadType: "raw" }); break; } case "unmount": { const msg2 = reqMsg; write({ obj: Module2.FS.unmount(msg2.data.path), payloadType: "raw" }); break; } case "newShelter": { const id = generateUUID(); shelters.set(id, []); write({ payloadType: "raw", obj: id }); break; } case "shelterSize": { const msg2 = reqMsg; const size = shelters.get(msg2.data).length; write({ payloadType: "raw", obj: size }); break; } case "shelterPurge": { const msg2 = reqMsg; purge(msg2.data); write({ payloadType: "raw", obj: null }); break; } case "shelterDestroy": { const msg2 = reqMsg; destroy(msg2.data.id, msg2.data.obj.obj.ptr); write({ payloadType: "raw", obj: null }); break; } case "captureR": { const msg2 = reqMsg; const data = msg2.data; const shelter = data.shelter; const prot = { n: 0 }; try { const capture = captureR(data.code, data.options); protectInc(capture, prot); const result = capture.get("result"); const outputs = capture.get(2); keep(shelter, result); const n = outputs.length; const output = []; for (let i = 1; i < n + 1; ++i) { const out = outputs.get(i); const type = out.pluck(1, 1).toString(); const data2 = out.get(2); if (type === "stdout" || type === "stderr") { const msg3 = data2.toString(); output.push({ type, data: msg3 }); } else { keep(shelter, data2); const payload = { obj: { ptr: data2.ptr, type: data2.type(), methods: RObject.getMethods(data2) }, payloadType: "ptr" }; output.push({ type, data: payload }); } } const resultPayload = { payloadType: "ptr", obj: { ptr: result.ptr, type: result.type(), methods: RObject.getMethods(result) } }; write({ payloadType: "raw", obj: { result: resultPayload, output } }); } finally { unprotect(prot.n); } break; } case "evalR": { const msg2 = reqMsg; const result = evalR(msg2.data.code, msg2.data.options); keep(msg2.data.shelter, result); write({ obj: { type: result.type(), ptr: result.ptr, methods: RObject.getMethods(result) }, payloadType: "ptr" }); break; } case "evalRRaw": { const msg2 = reqMsg; const result = evalR(msg2.data.code, msg2.data.options); protect(result); const throwType = () => { throw new Error(`Can't convert object of type ${result.type()} to ${msg2.data.outputType}.`); }; try { let out = void 0; switch (msg2.data.outputType) { case "void": break; case "boolean": switch (result.type()) { case "logical": out = result.toBoolean(); break; default: throwType(); } break; case "boolean[]": switch (result.type()) { case "logical": out = result.toArray(); if (out.some((i) => i === null)) { throwType(); } break; default: throwType(); } break; case "number": switch (result.type()) { case "logical": out = result.toBoolean(); out = Number(out); break; case "integer": out = result.toNumber(); break; case "double": out = result.toNumber(); break; default: throwType(); } break; case "number[]": switch (result.type()) { case "logical": out = result.toArray(); out = out.map((i) => i === null ? throwType() : Number(i)); break; case "integer": out = result.toArray(); if (out.some((i) => i === null)) { throwType(); } break; case "double": out = result.toArray(); if (out.some((i) => i === null)) { throwType(); } break; default: throwType(); } break; case "string": switch (result.type()) { case "character": out = result.toString(); break; default: throwType(); } break; case "string[]": switch (result.type()) { case "character": out = result.toArray(); if (out.some((i) => i === null)) { throwType(); } break; default: throwType(); } break; default: throw new Error("Unexpected output type in `evalRRaw()."); } write({ obj: out, payloadType: "raw" }); break; } finally { unprotect(1); } } case "newRObject": { const msg2 = reqMsg; const payload = newRObject(msg2.data.obj, msg2.data.objType); keep(msg2.data.shelter, payload.obj.ptr); write(payload); break; } case "callRObjectMethod": { const msg2 = reqMsg; const data = msg2.data; const obj = data.payload ? RObject.wrap(data.payload.obj.ptr) : RObject; const payload = callRObjectMethod(obj, data.prop, data.args); if (isWebRPayloadPtr(payload)) { keep(data.shelter, payload.obj.ptr); } write(payload); break; } case "invokeWasmFunction": { const msg2 = reqMsg; const res = Module2.getWasmTableEntry(msg2.data.ptr)(...msg2.data.args); write({ payloadType: "raw", obj: res }); break; } case "installPackage": { const msg2 = reqMsg; evalR(`webr::install( "${msg2.data.name}", repos = "${msg2.data.options.repos ? msg2.data.options.repos : _config.repoUrl}", quiet = ${msg2.data.options.quiet ? "TRUE" : "FALSE"}, mount = ${msg2.data.options.mount ? "TRUE" : "FALSE"} )`); write({ obj: true, payloadType: "raw" }); break; } default: throw new Error("Unknown event `" + reqMsg.type + "`"); } } catch (_e) { const e = _e; write({ payloadType: "err", obj: { name: e.name, message: e.message, stack: e.stack } }); if (e instanceof UnwindProtectException) { Module2._R_ContinueUnwind(e.cont); throwUnreachable(); } } break; } default: throw new Error("Unknown event `" + msg.type + "`"); } } function copyFSNode(obj) { const retObj = { id: obj.id, name: obj.name, mode: obj.mode, isFolder: obj.isFolder, mounted: null, contents: {} }; if (obj.isFolder && obj.contents) { retObj.contents = Object.fromEntries( Object.entries(obj.contents).map(([name, node]) => [name, copyFSNode(node)]) ); } if (obj.mounted !== null) { retObj.mounted = { mountpoint: obj.mounted.mountpoint, root: copyFSNode(obj.mounted.root) }; } return retObj; } function downloadFileContent(URL2, headers = []) { const request = new XMLHttpRequest(); request.open("GET", URL2, false); request.responseType = "arraybuffer"; try { headers.forEach((header) => { const splitHeader = header.split(": "); request.setRequestHeader(splitHeader[0], splitHeader[1]); }); } catch { const responseText = "An error occurred setting headers in XMLHttpRequest"; console.error(responseText); return { status: 400, response: responseText }; } try { request.send(null); const status = IN_NODE ? JSON.parse(String(request.status)).data.statusCode : request.status; if (status >= 200 && status < 300) { return { status, response: request.response }; } else { const responseText = new TextDecoder().decode(request.response); console.error(`Error fetching ${URL2} - ${responseText}`); return { status, response: responseText }; } } catch { return { status: 400, response: "An error occurred in XMLHttpRequest" }; } } function mountImageData(data, metadata, mountpoint) { if (IN_NODE) { const buf = data; const WORKERFS = Module2.FS.filesystems.WORKERFS; if (!WORKERFS.reader) WORKERFS.reader = { readAsArrayBuffer: (chunk) => new Uint8Array(chunk) }; metadata.files.forEach((f) => { const contents = buf.subarray(f.start, f.end); contents.size = contents.byteLength; contents.slice = (start, end) => { const sub = contents.subarray(start, end); sub.size = sub.byteLength; return sub; }; const parts = (mountpoint + f.filename).split("/"); const file = parts.pop(); if (!file) { throw new Error(`Invalid mount path "${mountpoint}${f.filename}".`); } const dir = parts.join("/"); Module2.FS.mkdirTree(dir); const dirNode = Module2.FS.lookupPath(dir, {}).node; WORKERFS.createNode(dirNode, file, WORKERFS.FILE_MODE, 0, contents); }); } else { Module2.FS.mount(Module2.FS.filesystems.WORKERFS, { packages: [{ blob: new Blob([data]), metadata }] }, mountpoint); } } function mountImageUrl(url, mountpoint) { const dataResp = downloadFileContent(url); const metaResp = downloadFileContent(url.replace(new RegExp(".data$"), ".js.metadata")); if (dataResp.status < 200 || dataResp.status >= 300 || metaResp.status < 200 || metaResp.status >= 300) { throw new Error("Unable to download Emscripten filesystem image.See the JavaScript console for further details."); } mountImageData( dataResp.response, JSON.parse(new TextDecoder().decode(metaResp.response)), mountpoint ); } function mountImagePath(path, mountpoint) { const buf = require("fs").readFileSync(path); const metadata = JSON.parse(require("fs").readFileSync( path.replace(new RegExp(".data$"), ".js.metadata"), "utf8" )); mountImageData(buf, metadata, mountpoint); } function newRObject(data, objType) { const RClass = objType === "object" ? RObject : getRWorkerClass(RTypeMap[objType]); const obj = new RClass( replaceInObject( data, isWebRPayloadPtr, (t) => RObject.wrap(t.obj.ptr) ) ); return { obj: { type: obj.type(), ptr: obj.ptr, methods: RObject.getMethods(obj) }, payloadType: "ptr" }; } function callRObjectMethod(obj, prop, args) { if (!(prop in obj)) { throw new ReferenceError(`${prop} is not defined`); } const fn = obj[prop]; if (typeof fn !== "function") { throw Error("Requested property cannot be invoked"); } const res = fn.apply( obj, args.map((arg) => { if (arg.payloadType === "ptr") { return RObject.wrap(arg.obj.ptr); } return replaceInObject( arg.obj, isWebRPayloadPtr, (t) => RObject.wrap(t.obj.ptr) ); }) ); const ret = replaceInObject(res, isRObject, (obj2) => { return { obj: { type: obj2.type(), ptr: obj2.ptr, methods: RObject.getMethods(obj2) }, payloadType: "ptr" }; }); return { obj: ret, payloadType: "raw" }; } function captureR(code, options = {}) { var _a; const prot = { n: 0 }; try { const _options = Object.assign( { env: objs.globalEnv, captureStreams: true, captureConditions: true, withAutoprint: false, throwJsException: true, withHandlers: true }, replaceInObject( options, isWebRPayloadPtr, (t) => RObject.wrap(t.obj.ptr) ) ); const envObj = new REnvironment(_options.env); protectInc(envObj, prot); if (envObj.type() !== "environment") { throw new Error("Attempted to evaluate R code with invalid environment object"); } const tPtr = objs.true.ptr; const fPtr = objs.false.ptr; const fn = parseEvalBare("webr::eval_r", objs.baseEnv); protectInc(fn, prot); const codeObj = new RCharacter(code); protectInc(codeObj, prot); const call = Module2._Rf_lang6( fn.ptr, codeObj.ptr, _options.captureConditions ? tPtr : fPtr, _options.captureStreams ? tPtr : fPtr, _options.withAutoprint ? tPtr : fPtr, _options.withHandlers ? tPtr : fPtr ); protectInc(call, prot); const capture = RList.wrap(safeEval(call, envObj)); protectInc(capture, prot); if (_options.captureConditions && _options.throwJsException) { const output = capture.get("output"); const error = output.toArray().find( (out) => out.get("type").toString() === "error" ); if (error) { throw new Error( ((_a = error.pluck("data", "message")) == null ? void 0 : _a.toString()) || "An error occured evaluating R code." ); } } return capture; } finally { unprotect(prot.n); } } function evalR(code, options = {}) { var _a, _b; const capture = captureR(code, options); Module2._Rf_protect(capture.ptr); try { const output = capture.get("output"); for (let i = 1; i <= output.length; i++) { const out = output.get(i); const outputType = out.get("type").toString(); switch (outputType) { case "stdout": chan == null ? void 0 : chan.writeSystem({ type: "console.log", data: out.get("data").toString() }); break; case "stderr": chan == null ? void 0 : chan.writeSystem({ type: "console.warn", data: out.get("data").toString() }); break; case "message": chan == null ? void 0 : chan.writeSystem({ type: "console.warn", data: ((_a = out.pluck("data", "message")) == null ? void 0 : _a.toString()) || "" }); break; case "warning": chan == null ? void 0 : chan.writeSystem({ type: "console.warn", data: `Warning message: ${((_b = out.pluck("data", "message")) == null ? void 0 : _b.toString()) || ""}` }); break; default: chan == null ? void 0 : chan.writeSystem({ type: "console.warn", data: `Output of type ${outputType}:` }); chan == null ? void 0 : chan.writeSystem({ type: "console.warn", data: out.get("data").toJs() }); break; } } return capture.get("result"); } finally { Module2._Rf_unprotect(1); } } function init(config) { _config = config; const env = { ...config.REnv }; if (!env.TZ) { const fmt = new Intl.DateTimeFormat(); env.TZ = fmt.resolvedOptions().timeZone; } Module2.preRun = []; Module2.arguments = _config.RArgs; Module2.noExitRuntime = true; Module2.noImageDecoding = true; Module2.noAudioDecoding = true; Module2.noInitialRun = true; Module2.noWasmDecoding = true; Module2.preRun.push(() => { if (IN_NODE) { globalThis.FS = Module2.FS; globalThis.chan = chan; } if (_config.createLazyFilesystem) { Module2.createLazyFilesystem(); } Module2.FS.mkdirTree(_config.homedir); Module2.ENV.HOME = _config.homedir; Module2.FS.chdir(_config.homedir); Module2.ENV = Object.assign(Module2.ENV, env); }); chan == null ? void 0 : chan.setDispatchHandler(dispatch); Module2.onRuntimeInitialized = () => { chan == null ? void 0 : chan.run(_config.RArgs); }; Module2.webr = { UnwindProtectException, resolveInit: () => { initPersistentObjects(); chan == null ? void 0 : chan.setInterrupt(Module2._Rf_onintr); Module2.setValue(Module2._R_Interactive, _config.interactive, "*"); evalR(`options(webr_pkg_repos="${_config.repoUrl}")`); chan == null ? void 0 : chan.resolve(); }, readConsole: () => { if (!chan) { throw new Error("Can't read console input without a communication channel"); } return chan.inputOrDispatch(); }, handleEvents: () => { chan == null ? void 0 : chan.handleInterrupt(); }, evalJs: (code) => { try { return (0, eval)(Module2.UTF8ToString(code)); } catch (e) { if (e instanceof UnwindProtectException) { Module2._R_ContinueUnwind(e.cont); throwUnreachable(); } else if (e === Infinity) { throw e; } const msg = Module2.allocateUTF8OnStack( `An error occurred during JavaScript evaluation: ${e.message}` ); Module2._Rf_error(msg); } throwUnreachable(); return 0; }, setTimeoutWasm: (ptr, delay, ...args) => { chan == null ? void 0 : chan.writeSystem({ type: "setTimeoutWasm", data: { ptr, delay, args } }); } }; Module2.locateFile = (path) => _config.baseUrl + path; Module2.downloadFileContent = downloadFileContent; Module2.mountImageUrl = mountImageUrl; Module2.mountImagePath = mountImagePath; Module2.print = (text) => { chan == null ? void 0 : chan.write({ type: "stdout", data: text }); }; Module2.printErr = (text) => { chan == null ? void 0 : chan.write({ type: "stderr", data: text }); }; Module2.setPrompt = (prompt) => { chan == null ? void 0 : chan.write({ type: "prompt", data: prompt }); }; globalThis.Module = Module2; setTimeout(() => { const scriptSrc = `${_config.baseUrl}R.bin.js`; loadScript(scriptSrc); }); } /*! Bundled license information: xmlhttprequest-ssl/lib/XMLHttpRequest.js: (** * Wrapper for built-in http.js to emulate the browser XMLHttpRequest object. * * This can be used with JS designed for browsers to improve reuse of code and * allow the use of existing libraries. * * Usage: include("XMLHttpRequest.js") and use XMLHttpRequest per W3C specs. * * @author Dan DeFelippi * @contributor David Ellis * @license MIT *) */ //# sourceMappingURL=webr-worker.js.map