prioritized.grouping/docs/shinylive/webr/webr-worker.js

4885 lines
157 KiB
JavaScript
Raw Normal View History

2024-01-11 09:43:23 +01:00
"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 <dan@driverdan.com>
* @contributor David Ellis <d.f.ellis@ieee.org>
* @license MIT
*)
*/
//# sourceMappingURL=webr-worker.js.map