mayu-live 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/lib/mayu/client/dist/DecompressionStreamPolyfill-0710fe09.js +1 -0
  4. data/lib/mayu/client/dist/DecompressionStreamPolyfill-0710fe09.js.br +0 -0
  5. data/lib/mayu/client/dist/DecompressionStreamPolyfill-0710fe09.js.map +1 -0
  6. data/lib/mayu/client/dist/DecompressionStreamPolyfill-0710fe09.js.map.br +0 -0
  7. data/lib/mayu/client/dist/custom-elements/mayu-alert-cd7ad2a4.js.map +1 -1
  8. data/lib/mayu/client/dist/custom-elements/mayu-disconnected-9f349f46.js.map +1 -1
  9. data/lib/mayu/client/dist/custom-elements/mayu-exception-63df4e8c.js.map +1 -1
  10. data/lib/mayu/client/dist/custom-elements/mayu-ping-f7c763db.js +1 -0
  11. data/lib/mayu/client/dist/custom-elements/mayu-ping-f7c763db.js.map +1 -0
  12. data/lib/mayu/client/dist/custom-elements/mayu-progress-bar-eb3e1ac8.js.map +1 -1
  13. data/lib/mayu/client/dist/entries.json +1 -1
  14. data/lib/mayu/client/dist/main-b7403aa1.js +1 -0
  15. data/lib/mayu/client/dist/main-b7403aa1.js.br +0 -0
  16. data/lib/mayu/client/dist/main-b7403aa1.js.map +1 -0
  17. data/lib/mayu/client/dist/main-b7403aa1.js.map.br +0 -0
  18. data/lib/mayu/client/package.json +12 -12
  19. data/lib/mayu/client/src/custom-elements/mayu-ping.html +2 -3
  20. data/lib/mayu/client/src/custom-elements/mayu-ping.ts +56 -14
  21. data/lib/mayu/client/src/main.ts +9 -11
  22. data/lib/mayu/resources/transformers/haml.rb +4 -4
  23. data/lib/mayu/version.rb +1 -1
  24. metadata +12 -12
  25. data/lib/mayu/client/dist/DecompressionStreamPolyfill-3ceba43e.js +0 -1
  26. data/lib/mayu/client/dist/DecompressionStreamPolyfill-3ceba43e.js.br +0 -0
  27. data/lib/mayu/client/dist/DecompressionStreamPolyfill-3ceba43e.js.map +0 -1
  28. data/lib/mayu/client/dist/DecompressionStreamPolyfill-3ceba43e.js.map.br +0 -0
  29. data/lib/mayu/client/dist/custom-elements/mayu-ping-c498c2a6.js +0 -1
  30. data/lib/mayu/client/dist/custom-elements/mayu-ping-c498c2a6.js.map +0 -1
  31. data/lib/mayu/client/dist/main-8506b35d.js +0 -1
  32. data/lib/mayu/client/dist/main-8506b35d.js.br +0 -0
  33. data/lib/mayu/client/dist/main-8506b35d.js.map +0 -1
  34. data/lib/mayu/client/dist/main-8506b35d.js.map.br +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-b7403aa1.js","sources":["../../../../node_modules/@msgpack/msgpack/dist.es5+esm/utils/int.mjs","../../../../node_modules/@msgpack/msgpack/dist.es5+esm/utils/utf8.mjs","../../../../node_modules/@msgpack/msgpack/dist.es5+esm/ExtData.mjs","../../../../node_modules/@msgpack/msgpack/dist.es5+esm/DecodeError.mjs","../../../../node_modules/@msgpack/msgpack/dist.es5+esm/timestamp.mjs","../../../../node_modules/@msgpack/msgpack/dist.es5+esm/ExtensionCodec.mjs","../../../../node_modules/@msgpack/msgpack/dist.es5+esm/utils/typedArrays.mjs","../../../../node_modules/@msgpack/msgpack/dist.es5+esm/utils/prettyByte.mjs","../../../../node_modules/@msgpack/msgpack/dist.es5+esm/CachedKeyDecoder.mjs","../src/MimeTypes.ts","../../../../node_modules/@msgpack/msgpack/dist.es5+esm/Decoder.mjs","../../../../node_modules/@msgpack/msgpack/dist.es5+esm/decode.mjs","../../../../node_modules/@msgpack/msgpack/dist.es5+esm/utils/stream.mjs","../../../../node_modules/@msgpack/msgpack/dist.es5+esm/decodeAsync.mjs","../src/utils.ts","../src/logger.ts","../src/DecompressionStream.ts","../src/stream.ts","../src/NodeTree.ts","../src/h.ts","../src/serializeEvent.ts","../src/main.ts"],"sourcesContent":["// Integer Utility\nexport var UINT32_MAX = 4294967295;\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\nexport function setUint64(view, offset, value) {\n var high = value / 4294967296;\n var low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\nexport function setInt64(view, offset, value) {\n var high = Math.floor(value / 4294967296);\n var low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\nexport function getInt64(view, offset) {\n var high = view.getInt32(offset);\n var low = view.getUint32(offset + 4);\n return high * 4294967296 + low;\n}\nexport function getUint64(view, offset) {\n var high = view.getUint32(offset);\n var low = view.getUint32(offset + 4);\n return high * 4294967296 + low;\n}\n//# sourceMappingURL=int.mjs.map","var _a, _b, _c;\n/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport { UINT32_MAX } from \"./int.mjs\";\nvar 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\") &&\n typeof TextEncoder !== \"undefined\" &&\n typeof TextDecoder !== \"undefined\";\nexport function utf8Count(str) {\n var strLength = str.length;\n var byteLength = 0;\n var pos = 0;\n while (pos < strLength) {\n var value = str.charCodeAt(pos++);\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n }\n else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n }\n else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n var extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n }\n else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\nexport function utf8EncodeJs(str, output, outputOffset) {\n var strLength = str.length;\n var offset = outputOffset;\n var pos = 0;\n while (pos < strLength) {\n var value = str.charCodeAt(pos++);\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n }\n else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n }\n else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n var extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\nvar sharedTextEncoder = TEXT_ENCODING_AVAILABLE ? new TextEncoder() : undefined;\nexport var TEXT_ENCODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && ((_b = process === null || process === void 0 ? void 0 : process.env) === null || _b === void 0 ? void 0 : _b[\"TEXT_ENCODING\"]) !== \"force\"\n ? 200\n : 0;\nfunction utf8EncodeTEencode(str, output, outputOffset) {\n output.set(sharedTextEncoder.encode(str), outputOffset);\n}\nfunction utf8EncodeTEencodeInto(str, output, outputOffset) {\n sharedTextEncoder.encodeInto(str, output.subarray(outputOffset));\n}\nexport var utf8EncodeTE = (sharedTextEncoder === null || sharedTextEncoder === void 0 ? void 0 : sharedTextEncoder.encodeInto) ? utf8EncodeTEencodeInto : utf8EncodeTEencode;\nvar CHUNK_SIZE = 4096;\nexport function utf8DecodeJs(bytes, inputOffset, byteLength) {\n var offset = inputOffset;\n var end = offset + byteLength;\n var units = [];\n var result = \"\";\n while (offset < end) {\n var byte1 = bytes[offset++];\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n }\n else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n var byte2 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n }\n else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n var byte2 = bytes[offset++] & 0x3f;\n var byte3 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n }\n else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n var byte2 = bytes[offset++] & 0x3f;\n var byte3 = bytes[offset++] & 0x3f;\n var byte4 = bytes[offset++] & 0x3f;\n var unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n }\n else {\n units.push(byte1);\n }\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode.apply(String, units);\n units.length = 0;\n }\n }\n if (units.length > 0) {\n result += String.fromCharCode.apply(String, units);\n }\n return result;\n}\nvar sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null;\nexport var TEXT_DECODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && ((_c = process === null || process === void 0 ? void 0 : process.env) === null || _c === void 0 ? void 0 : _c[\"TEXT_DECODER\"]) !== \"force\"\n ? 200\n : 0;\nexport function utf8DecodeTD(bytes, inputOffset, byteLength) {\n var stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n return sharedTextDecoder.decode(stringBytes);\n}\n//# sourceMappingURL=utf8.mjs.map","/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nvar ExtData = /** @class */ (function () {\n function ExtData(type, data) {\n this.type = type;\n this.data = data;\n }\n return ExtData;\n}());\nexport { ExtData };\n//# sourceMappingURL=ExtData.mjs.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar DecodeError = /** @class */ (function (_super) {\n __extends(DecodeError, _super);\n function DecodeError(message) {\n var _this = _super.call(this, message) || this;\n // fix the prototype chain in a cross-platform way\n var proto = Object.create(DecodeError.prototype);\n Object.setPrototypeOf(_this, proto);\n Object.defineProperty(_this, \"name\", {\n configurable: true,\n enumerable: false,\n value: DecodeError.name,\n });\n return _this;\n }\n return DecodeError;\n}(Error));\nexport { DecodeError };\n//# sourceMappingURL=DecodeError.mjs.map","// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError.mjs\";\nimport { getInt64, setInt64 } from \"./utils/int.mjs\";\nexport var EXT_TIMESTAMP = -1;\nvar TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nvar TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\nexport function encodeTimeSpecToTimestamp(_a) {\n var sec = _a.sec, nsec = _a.nsec;\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n var rv = new Uint8Array(4);\n var view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n }\n else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n var secHigh = sec / 0x100000000;\n var secLow = sec & 0xffffffff;\n var rv = new Uint8Array(8);\n var view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n }\n else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n var rv = new Uint8Array(12);\n var view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\nexport function encodeDateToTimeSpec(date) {\n var msec = date.getTime();\n var sec = Math.floor(msec / 1e3);\n var nsec = (msec - sec * 1e3) * 1e6;\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n var nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\nexport function encodeTimestampExtension(object) {\n if (object instanceof Date) {\n var timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n }\n else {\n return null;\n }\n}\nexport function decodeTimestampToTimeSpec(data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n var sec = view.getUint32(0);\n var nsec = 0;\n return { sec: sec, nsec: nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n var nsec30AndSecHigh2 = view.getUint32(0);\n var secLow32 = view.getUint32(4);\n var sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n var nsec = nsec30AndSecHigh2 >>> 2;\n return { sec: sec, nsec: nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n var sec = getInt64(view, 4);\n var nsec = view.getUint32(0);\n return { sec: sec, nsec: nsec };\n }\n default:\n throw new DecodeError(\"Unrecognized data size for timestamp (expected 4, 8, or 12): \".concat(data.length));\n }\n}\nexport function decodeTimestampExtension(data) {\n var timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\nexport var timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n//# sourceMappingURL=timestamp.mjs.map","// ExtensionCodec to handle MessagePack extensions\nimport { ExtData } from \"./ExtData.mjs\";\nimport { timestampExtension } from \"./timestamp.mjs\";\nvar ExtensionCodec = /** @class */ (function () {\n function ExtensionCodec() {\n // built-in extensions\n this.builtInEncoders = [];\n this.builtInDecoders = [];\n // custom extensions\n this.encoders = [];\n this.decoders = [];\n this.register(timestampExtension);\n }\n ExtensionCodec.prototype.register = function (_a) {\n var type = _a.type, encode = _a.encode, decode = _a.decode;\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n }\n else {\n // built-in extensions\n var index = 1 + type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n };\n ExtensionCodec.prototype.tryToEncode = function (object, context) {\n // built-in extensions\n for (var i = 0; i < this.builtInEncoders.length; i++) {\n var encodeExt = this.builtInEncoders[i];\n if (encodeExt != null) {\n var data = encodeExt(object, context);\n if (data != null) {\n var type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n // custom extensions\n for (var i = 0; i < this.encoders.length; i++) {\n var encodeExt = this.encoders[i];\n if (encodeExt != null) {\n var data = encodeExt(object, context);\n if (data != null) {\n var type = i;\n return new ExtData(type, data);\n }\n }\n }\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n };\n ExtensionCodec.prototype.decode = function (data, type, context) {\n var decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decodeExt) {\n return decodeExt(data, type, context);\n }\n else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n };\n ExtensionCodec.defaultCodec = new ExtensionCodec();\n return ExtensionCodec;\n}());\nexport { ExtensionCodec };\n//# sourceMappingURL=ExtensionCodec.mjs.map","export function ensureUint8Array(buffer) {\n if (buffer instanceof Uint8Array) {\n return buffer;\n }\n else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n else if (buffer instanceof ArrayBuffer) {\n return new Uint8Array(buffer);\n }\n else {\n // ArrayLike<number>\n return Uint8Array.from(buffer);\n }\n}\nexport function createDataView(buffer) {\n if (buffer instanceof ArrayBuffer) {\n return new DataView(buffer);\n }\n var bufferView = ensureUint8Array(buffer);\n return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\n}\n//# sourceMappingURL=typedArrays.mjs.map","export function prettyByte(byte) {\n return \"\".concat(byte < 0 ? \"-\" : \"\", \"0x\").concat(Math.abs(byte).toString(16).padStart(2, \"0\"));\n}\n//# sourceMappingURL=prettyByte.mjs.map","import { utf8DecodeJs } from \"./utils/utf8.mjs\";\nvar DEFAULT_MAX_KEY_LENGTH = 16;\nvar DEFAULT_MAX_LENGTH_PER_KEY = 16;\nvar CachedKeyDecoder = /** @class */ (function () {\n function CachedKeyDecoder(maxKeyLength, maxLengthPerKey) {\n if (maxKeyLength === void 0) { maxKeyLength = DEFAULT_MAX_KEY_LENGTH; }\n if (maxLengthPerKey === void 0) { maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY; }\n this.maxKeyLength = maxKeyLength;\n this.maxLengthPerKey = maxLengthPerKey;\n this.hit = 0;\n this.miss = 0;\n // avoid `new Array(N)`, which makes a sparse array,\n // because a sparse array is typically slower than a non-sparse array.\n this.caches = [];\n for (var i = 0; i < this.maxKeyLength; i++) {\n this.caches.push([]);\n }\n }\n CachedKeyDecoder.prototype.canBeCached = function (byteLength) {\n return byteLength > 0 && byteLength <= this.maxKeyLength;\n };\n CachedKeyDecoder.prototype.find = function (bytes, inputOffset, byteLength) {\n var records = this.caches[byteLength - 1];\n FIND_CHUNK: for (var _i = 0, records_1 = records; _i < records_1.length; _i++) {\n var record = records_1[_i];\n var recordBytes = record.bytes;\n for (var j = 0; j < byteLength; j++) {\n if (recordBytes[j] !== bytes[inputOffset + j]) {\n continue FIND_CHUNK;\n }\n }\n return record.str;\n }\n return null;\n };\n CachedKeyDecoder.prototype.store = function (bytes, value) {\n var records = this.caches[bytes.length - 1];\n var record = { bytes: bytes, str: value };\n if (records.length >= this.maxLengthPerKey) {\n // `records` are full!\n // Set `record` to an arbitrary position.\n records[(Math.random() * records.length) | 0] = record;\n }\n else {\n records.push(record);\n }\n };\n CachedKeyDecoder.prototype.decode = function (bytes, inputOffset, byteLength) {\n var cachedValue = this.find(bytes, inputOffset, byteLength);\n if (cachedValue != null) {\n this.hit++;\n return cachedValue;\n }\n this.miss++;\n var str = utf8DecodeJs(bytes, inputOffset, byteLength);\n // Ensure to copy a slice of bytes because the byte may be NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.\n var slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);\n this.store(slicedCopyOfBytes, str);\n return str;\n };\n return CachedKeyDecoder;\n}());\nexport { CachedKeyDecoder };\n//# sourceMappingURL=CachedKeyDecoder.mjs.map","export const enum MimeTypes {\n MAYU_SESSION = \"application/vnd.mayu.session\",\n MAYU_STREAM = \"application/vnd.mayu.eventstream\",\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __asyncValues = (this && this.__asyncValues) || function (o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n};\nvar __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }\nvar __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n};\nimport { prettyByte } from \"./utils/prettyByte.mjs\";\nimport { ExtensionCodec } from \"./ExtensionCodec.mjs\";\nimport { getInt64, getUint64, UINT32_MAX } from \"./utils/int.mjs\";\nimport { utf8DecodeJs, TEXT_DECODER_THRESHOLD, utf8DecodeTD } from \"./utils/utf8.mjs\";\nimport { createDataView, ensureUint8Array } from \"./utils/typedArrays.mjs\";\nimport { CachedKeyDecoder } from \"./CachedKeyDecoder.mjs\";\nimport { DecodeError } from \"./DecodeError.mjs\";\nvar isValidMapKeyType = function (key) {\n var keyType = typeof key;\n return keyType === \"string\" || keyType === \"number\";\n};\nvar HEAD_BYTE_REQUIRED = -1;\nvar EMPTY_VIEW = new DataView(new ArrayBuffer(0));\nvar EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer);\n// IE11: Hack to support IE11.\n// IE11: Drop this hack and just use RangeError when IE11 is obsolete.\nexport var DataViewIndexOutOfBoundsError = (function () {\n try {\n // IE11: The spec says it should throw RangeError,\n // IE11: but in IE11 it throws TypeError.\n EMPTY_VIEW.getInt8(0);\n }\n catch (e) {\n return e.constructor;\n }\n throw new Error(\"never reached\");\n})();\nvar MORE_DATA = new DataViewIndexOutOfBoundsError(\"Insufficient data\");\nvar sharedCachedKeyDecoder = new CachedKeyDecoder();\nvar Decoder = /** @class */ (function () {\n function Decoder(extensionCodec, context, maxStrLength, maxBinLength, maxArrayLength, maxMapLength, maxExtLength, keyDecoder) {\n if (extensionCodec === void 0) { extensionCodec = ExtensionCodec.defaultCodec; }\n if (context === void 0) { context = undefined; }\n if (maxStrLength === void 0) { maxStrLength = UINT32_MAX; }\n if (maxBinLength === void 0) { maxBinLength = UINT32_MAX; }\n if (maxArrayLength === void 0) { maxArrayLength = UINT32_MAX; }\n if (maxMapLength === void 0) { maxMapLength = UINT32_MAX; }\n if (maxExtLength === void 0) { maxExtLength = UINT32_MAX; }\n if (keyDecoder === void 0) { keyDecoder = sharedCachedKeyDecoder; }\n this.extensionCodec = extensionCodec;\n this.context = context;\n this.maxStrLength = maxStrLength;\n this.maxBinLength = maxBinLength;\n this.maxArrayLength = maxArrayLength;\n this.maxMapLength = maxMapLength;\n this.maxExtLength = maxExtLength;\n this.keyDecoder = keyDecoder;\n this.totalPos = 0;\n this.pos = 0;\n this.view = EMPTY_VIEW;\n this.bytes = EMPTY_BYTES;\n this.headByte = HEAD_BYTE_REQUIRED;\n this.stack = [];\n }\n Decoder.prototype.reinitializeState = function () {\n this.totalPos = 0;\n this.headByte = HEAD_BYTE_REQUIRED;\n this.stack.length = 0;\n // view, bytes, and pos will be re-initialized in setBuffer()\n };\n Decoder.prototype.setBuffer = function (buffer) {\n this.bytes = ensureUint8Array(buffer);\n this.view = createDataView(this.bytes);\n this.pos = 0;\n };\n Decoder.prototype.appendBuffer = function (buffer) {\n if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining(1)) {\n this.setBuffer(buffer);\n }\n else {\n var remainingData = this.bytes.subarray(this.pos);\n var newData = ensureUint8Array(buffer);\n // concat remainingData + newData\n var newBuffer = new Uint8Array(remainingData.length + newData.length);\n newBuffer.set(remainingData);\n newBuffer.set(newData, remainingData.length);\n this.setBuffer(newBuffer);\n }\n };\n Decoder.prototype.hasRemaining = function (size) {\n return this.view.byteLength - this.pos >= size;\n };\n Decoder.prototype.createExtraByteError = function (posToShow) {\n var _a = this, view = _a.view, pos = _a.pos;\n return new RangeError(\"Extra \".concat(view.byteLength - pos, \" of \").concat(view.byteLength, \" byte(s) found at buffer[\").concat(posToShow, \"]\"));\n };\n /**\n * @throws {@link DecodeError}\n * @throws {@link RangeError}\n */\n Decoder.prototype.decode = function (buffer) {\n this.reinitializeState();\n this.setBuffer(buffer);\n var object = this.doDecodeSync();\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.pos);\n }\n return object;\n };\n Decoder.prototype.decodeMulti = function (buffer) {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.reinitializeState();\n this.setBuffer(buffer);\n _a.label = 1;\n case 1:\n if (!this.hasRemaining(1)) return [3 /*break*/, 3];\n return [4 /*yield*/, this.doDecodeSync()];\n case 2:\n _a.sent();\n return [3 /*break*/, 1];\n case 3: return [2 /*return*/];\n }\n });\n };\n Decoder.prototype.decodeAsync = function (stream) {\n var stream_1, stream_1_1;\n var e_1, _a;\n return __awaiter(this, void 0, void 0, function () {\n var decoded, object, buffer, e_1_1, _b, headByte, pos, totalPos;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n decoded = false;\n _c.label = 1;\n case 1:\n _c.trys.push([1, 6, 7, 12]);\n stream_1 = __asyncValues(stream);\n _c.label = 2;\n case 2: return [4 /*yield*/, stream_1.next()];\n case 3:\n if (!(stream_1_1 = _c.sent(), !stream_1_1.done)) return [3 /*break*/, 5];\n buffer = stream_1_1.value;\n if (decoded) {\n throw this.createExtraByteError(this.totalPos);\n }\n this.appendBuffer(buffer);\n try {\n object = this.doDecodeSync();\n decoded = true;\n }\n catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n _c.label = 4;\n case 4: return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 12];\n case 6:\n e_1_1 = _c.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 12];\n case 7:\n _c.trys.push([7, , 10, 11]);\n if (!(stream_1_1 && !stream_1_1.done && (_a = stream_1.return))) return [3 /*break*/, 9];\n return [4 /*yield*/, _a.call(stream_1)];\n case 8:\n _c.sent();\n _c.label = 9;\n case 9: return [3 /*break*/, 11];\n case 10:\n if (e_1) throw e_1.error;\n return [7 /*endfinally*/];\n case 11: return [7 /*endfinally*/];\n case 12:\n if (decoded) {\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.totalPos);\n }\n return [2 /*return*/, object];\n }\n _b = this, headByte = _b.headByte, pos = _b.pos, totalPos = _b.totalPos;\n throw new RangeError(\"Insufficient data in parsing \".concat(prettyByte(headByte), \" at \").concat(totalPos, \" (\").concat(pos, \" in the current buffer)\"));\n }\n });\n });\n };\n Decoder.prototype.decodeArrayStream = function (stream) {\n return this.decodeMultiAsync(stream, true);\n };\n Decoder.prototype.decodeStream = function (stream) {\n return this.decodeMultiAsync(stream, false);\n };\n Decoder.prototype.decodeMultiAsync = function (stream, isArray) {\n return __asyncGenerator(this, arguments, function decodeMultiAsync_1() {\n var isArrayHeaderRequired, arrayItemsLeft, stream_2, stream_2_1, buffer, e_2, e_3_1;\n var e_3, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n isArrayHeaderRequired = isArray;\n arrayItemsLeft = -1;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 13, 14, 19]);\n stream_2 = __asyncValues(stream);\n _b.label = 2;\n case 2: return [4 /*yield*/, __await(stream_2.next())];\n case 3:\n if (!(stream_2_1 = _b.sent(), !stream_2_1.done)) return [3 /*break*/, 12];\n buffer = stream_2_1.value;\n if (isArray && arrayItemsLeft === 0) {\n throw this.createExtraByteError(this.totalPos);\n }\n this.appendBuffer(buffer);\n if (isArrayHeaderRequired) {\n arrayItemsLeft = this.readArraySize();\n isArrayHeaderRequired = false;\n this.complete();\n }\n _b.label = 4;\n case 4:\n _b.trys.push([4, 9, , 10]);\n _b.label = 5;\n case 5:\n if (!true) return [3 /*break*/, 8];\n return [4 /*yield*/, __await(this.doDecodeSync())];\n case 6: return [4 /*yield*/, _b.sent()];\n case 7:\n _b.sent();\n if (--arrayItemsLeft === 0) {\n return [3 /*break*/, 8];\n }\n return [3 /*break*/, 5];\n case 8: return [3 /*break*/, 10];\n case 9:\n e_2 = _b.sent();\n if (!(e_2 instanceof DataViewIndexOutOfBoundsError)) {\n throw e_2; // rethrow\n }\n return [3 /*break*/, 10];\n case 10:\n this.totalPos += this.pos;\n _b.label = 11;\n case 11: return [3 /*break*/, 2];\n case 12: return [3 /*break*/, 19];\n case 13:\n e_3_1 = _b.sent();\n e_3 = { error: e_3_1 };\n return [3 /*break*/, 19];\n case 14:\n _b.trys.push([14, , 17, 18]);\n if (!(stream_2_1 && !stream_2_1.done && (_a = stream_2.return))) return [3 /*break*/, 16];\n return [4 /*yield*/, __await(_a.call(stream_2))];\n case 15:\n _b.sent();\n _b.label = 16;\n case 16: return [3 /*break*/, 18];\n case 17:\n if (e_3) throw e_3.error;\n return [7 /*endfinally*/];\n case 18: return [7 /*endfinally*/];\n case 19: return [2 /*return*/];\n }\n });\n });\n };\n Decoder.prototype.doDecodeSync = function () {\n DECODE: while (true) {\n var headByte = this.readHeadByte();\n var object = void 0;\n if (headByte >= 0xe0) {\n // negative fixint (111x xxxx) 0xe0 - 0xff\n object = headByte - 0x100;\n }\n else if (headByte < 0xc0) {\n if (headByte < 0x80) {\n // positive fixint (0xxx xxxx) 0x00 - 0x7f\n object = headByte;\n }\n else if (headByte < 0x90) {\n // fixmap (1000 xxxx) 0x80 - 0x8f\n var size = headByte - 0x80;\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = {};\n }\n }\n else if (headByte < 0xa0) {\n // fixarray (1001 xxxx) 0x90 - 0x9f\n var size = headByte - 0x90;\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = [];\n }\n }\n else {\n // fixstr (101x xxxx) 0xa0 - 0xbf\n var byteLength = headByte - 0xa0;\n object = this.decodeUtf8String(byteLength, 0);\n }\n }\n else if (headByte === 0xc0) {\n // nil\n object = null;\n }\n else if (headByte === 0xc2) {\n // false\n object = false;\n }\n else if (headByte === 0xc3) {\n // true\n object = true;\n }\n else if (headByte === 0xca) {\n // float 32\n object = this.readF32();\n }\n else if (headByte === 0xcb) {\n // float 64\n object = this.readF64();\n }\n else if (headByte === 0xcc) {\n // uint 8\n object = this.readU8();\n }\n else if (headByte === 0xcd) {\n // uint 16\n object = this.readU16();\n }\n else if (headByte === 0xce) {\n // uint 32\n object = this.readU32();\n }\n else if (headByte === 0xcf) {\n // uint 64\n object = this.readU64();\n }\n else if (headByte === 0xd0) {\n // int 8\n object = this.readI8();\n }\n else if (headByte === 0xd1) {\n // int 16\n object = this.readI16();\n }\n else if (headByte === 0xd2) {\n // int 32\n object = this.readI32();\n }\n else if (headByte === 0xd3) {\n // int 64\n object = this.readI64();\n }\n else if (headByte === 0xd9) {\n // str 8\n var byteLength = this.lookU8();\n object = this.decodeUtf8String(byteLength, 1);\n }\n else if (headByte === 0xda) {\n // str 16\n var byteLength = this.lookU16();\n object = this.decodeUtf8String(byteLength, 2);\n }\n else if (headByte === 0xdb) {\n // str 32\n var byteLength = this.lookU32();\n object = this.decodeUtf8String(byteLength, 4);\n }\n else if (headByte === 0xdc) {\n // array 16\n var size = this.readU16();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = [];\n }\n }\n else if (headByte === 0xdd) {\n // array 32\n var size = this.readU32();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = [];\n }\n }\n else if (headByte === 0xde) {\n // map 16\n var size = this.readU16();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = {};\n }\n }\n else if (headByte === 0xdf) {\n // map 32\n var size = this.readU32();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n }\n else {\n object = {};\n }\n }\n else if (headByte === 0xc4) {\n // bin 8\n var size = this.lookU8();\n object = this.decodeBinary(size, 1);\n }\n else if (headByte === 0xc5) {\n // bin 16\n var size = this.lookU16();\n object = this.decodeBinary(size, 2);\n }\n else if (headByte === 0xc6) {\n // bin 32\n var size = this.lookU32();\n object = this.decodeBinary(size, 4);\n }\n else if (headByte === 0xd4) {\n // fixext 1\n object = this.decodeExtension(1, 0);\n }\n else if (headByte === 0xd5) {\n // fixext 2\n object = this.decodeExtension(2, 0);\n }\n else if (headByte === 0xd6) {\n // fixext 4\n object = this.decodeExtension(4, 0);\n }\n else if (headByte === 0xd7) {\n // fixext 8\n object = this.decodeExtension(8, 0);\n }\n else if (headByte === 0xd8) {\n // fixext 16\n object = this.decodeExtension(16, 0);\n }\n else if (headByte === 0xc7) {\n // ext 8\n var size = this.lookU8();\n object = this.decodeExtension(size, 1);\n }\n else if (headByte === 0xc8) {\n // ext 16\n var size = this.lookU16();\n object = this.decodeExtension(size, 2);\n }\n else if (headByte === 0xc9) {\n // ext 32\n var size = this.lookU32();\n object = this.decodeExtension(size, 4);\n }\n else {\n throw new DecodeError(\"Unrecognized type byte: \".concat(prettyByte(headByte)));\n }\n this.complete();\n var stack = this.stack;\n while (stack.length > 0) {\n // arrays and maps\n var state = stack[stack.length - 1];\n if (state.type === 0 /* State.ARRAY */) {\n state.array[state.position] = object;\n state.position++;\n if (state.position === state.size) {\n stack.pop();\n object = state.array;\n }\n else {\n continue DECODE;\n }\n }\n else if (state.type === 1 /* State.MAP_KEY */) {\n if (!isValidMapKeyType(object)) {\n throw new DecodeError(\"The type of key must be string or number but \" + typeof object);\n }\n if (object === \"__proto__\") {\n throw new DecodeError(\"The key __proto__ is not allowed\");\n }\n state.key = object;\n state.type = 2 /* State.MAP_VALUE */;\n continue DECODE;\n }\n else {\n // it must be `state.type === State.MAP_VALUE` here\n state.map[state.key] = object;\n state.readCount++;\n if (state.readCount === state.size) {\n stack.pop();\n object = state.map;\n }\n else {\n state.key = null;\n state.type = 1 /* State.MAP_KEY */;\n continue DECODE;\n }\n }\n }\n return object;\n }\n };\n Decoder.prototype.readHeadByte = function () {\n if (this.headByte === HEAD_BYTE_REQUIRED) {\n this.headByte = this.readU8();\n // console.log(\"headByte\", prettyByte(this.headByte));\n }\n return this.headByte;\n };\n Decoder.prototype.complete = function () {\n this.headByte = HEAD_BYTE_REQUIRED;\n };\n Decoder.prototype.readArraySize = function () {\n var headByte = this.readHeadByte();\n switch (headByte) {\n case 0xdc:\n return this.readU16();\n case 0xdd:\n return this.readU32();\n default: {\n if (headByte < 0xa0) {\n return headByte - 0x90;\n }\n else {\n throw new DecodeError(\"Unrecognized array type byte: \".concat(prettyByte(headByte)));\n }\n }\n }\n };\n Decoder.prototype.pushMapState = function (size) {\n if (size > this.maxMapLength) {\n throw new DecodeError(\"Max length exceeded: map length (\".concat(size, \") > maxMapLengthLength (\").concat(this.maxMapLength, \")\"));\n }\n this.stack.push({\n type: 1 /* State.MAP_KEY */,\n size: size,\n key: null,\n readCount: 0,\n map: {},\n });\n };\n Decoder.prototype.pushArrayState = function (size) {\n if (size > this.maxArrayLength) {\n throw new DecodeError(\"Max length exceeded: array length (\".concat(size, \") > maxArrayLength (\").concat(this.maxArrayLength, \")\"));\n }\n this.stack.push({\n type: 0 /* State.ARRAY */,\n size: size,\n array: new Array(size),\n position: 0,\n });\n };\n Decoder.prototype.decodeUtf8String = function (byteLength, headerOffset) {\n var _a;\n if (byteLength > this.maxStrLength) {\n throw new DecodeError(\"Max length exceeded: UTF-8 byte length (\".concat(byteLength, \") > maxStrLength (\").concat(this.maxStrLength, \")\"));\n }\n if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {\n throw MORE_DATA;\n }\n var offset = this.pos + headerOffset;\n var object;\n if (this.stateIsMapKey() && ((_a = this.keyDecoder) === null || _a === void 0 ? void 0 : _a.canBeCached(byteLength))) {\n object = this.keyDecoder.decode(this.bytes, offset, byteLength);\n }\n else if (byteLength > TEXT_DECODER_THRESHOLD) {\n object = utf8DecodeTD(this.bytes, offset, byteLength);\n }\n else {\n object = utf8DecodeJs(this.bytes, offset, byteLength);\n }\n this.pos += headerOffset + byteLength;\n return object;\n };\n Decoder.prototype.stateIsMapKey = function () {\n if (this.stack.length > 0) {\n var state = this.stack[this.stack.length - 1];\n return state.type === 1 /* State.MAP_KEY */;\n }\n return false;\n };\n Decoder.prototype.decodeBinary = function (byteLength, headOffset) {\n if (byteLength > this.maxBinLength) {\n throw new DecodeError(\"Max length exceeded: bin length (\".concat(byteLength, \") > maxBinLength (\").concat(this.maxBinLength, \")\"));\n }\n if (!this.hasRemaining(byteLength + headOffset)) {\n throw MORE_DATA;\n }\n var offset = this.pos + headOffset;\n var object = this.bytes.subarray(offset, offset + byteLength);\n this.pos += headOffset + byteLength;\n return object;\n };\n Decoder.prototype.decodeExtension = function (size, headOffset) {\n if (size > this.maxExtLength) {\n throw new DecodeError(\"Max length exceeded: ext length (\".concat(size, \") > maxExtLength (\").concat(this.maxExtLength, \")\"));\n }\n var extType = this.view.getInt8(this.pos + headOffset);\n var data = this.decodeBinary(size, headOffset + 1 /* extType */);\n return this.extensionCodec.decode(data, extType, this.context);\n };\n Decoder.prototype.lookU8 = function () {\n return this.view.getUint8(this.pos);\n };\n Decoder.prototype.lookU16 = function () {\n return this.view.getUint16(this.pos);\n };\n Decoder.prototype.lookU32 = function () {\n return this.view.getUint32(this.pos);\n };\n Decoder.prototype.readU8 = function () {\n var value = this.view.getUint8(this.pos);\n this.pos++;\n return value;\n };\n Decoder.prototype.readI8 = function () {\n var value = this.view.getInt8(this.pos);\n this.pos++;\n return value;\n };\n Decoder.prototype.readU16 = function () {\n var value = this.view.getUint16(this.pos);\n this.pos += 2;\n return value;\n };\n Decoder.prototype.readI16 = function () {\n var value = this.view.getInt16(this.pos);\n this.pos += 2;\n return value;\n };\n Decoder.prototype.readU32 = function () {\n var value = this.view.getUint32(this.pos);\n this.pos += 4;\n return value;\n };\n Decoder.prototype.readI32 = function () {\n var value = this.view.getInt32(this.pos);\n this.pos += 4;\n return value;\n };\n Decoder.prototype.readU64 = function () {\n var value = getUint64(this.view, this.pos);\n this.pos += 8;\n return value;\n };\n Decoder.prototype.readI64 = function () {\n var value = getInt64(this.view, this.pos);\n this.pos += 8;\n return value;\n };\n Decoder.prototype.readF32 = function () {\n var value = this.view.getFloat32(this.pos);\n this.pos += 4;\n return value;\n };\n Decoder.prototype.readF64 = function () {\n var value = this.view.getFloat64(this.pos);\n this.pos += 8;\n return value;\n };\n return Decoder;\n}());\nexport { Decoder };\n//# sourceMappingURL=Decoder.mjs.map","import { Decoder } from \"./Decoder.mjs\";\nexport var defaultDecodeOptions = {};\n/**\n * It decodes a single MessagePack object in a buffer.\n *\n * This is a synchronous decoding function.\n * See other variants for asynchronous decoding: {@link decodeAsync()}, {@link decodeStream()}, or {@link decodeArrayStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decode(buffer, options) {\n if (options === void 0) { options = defaultDecodeOptions; }\n var decoder = new Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);\n return decoder.decode(buffer);\n}\n/**\n * It decodes multiple MessagePack objects in a buffer.\n * This is corresponding to {@link decodeMultiStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMulti(buffer, options) {\n if (options === void 0) { options = defaultDecodeOptions; }\n var decoder = new Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);\n return decoder.decodeMulti(buffer);\n}\n//# sourceMappingURL=decode.mjs.map","// utility for whatwg streams\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }\nvar __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n};\nexport function isAsyncIterable(object) {\n return object[Symbol.asyncIterator] != null;\n}\nfunction assertNonNull(value) {\n if (value == null) {\n throw new Error(\"Assertion Failure: value must not be null nor undefined\");\n }\n}\nexport function asyncIterableFromStream(stream) {\n return __asyncGenerator(this, arguments, function asyncIterableFromStream_1() {\n var reader, _a, done, value;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n reader = stream.getReader();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 9, 10]);\n _b.label = 2;\n case 2:\n if (!true) return [3 /*break*/, 8];\n return [4 /*yield*/, __await(reader.read())];\n case 3:\n _a = _b.sent(), done = _a.done, value = _a.value;\n if (!done) return [3 /*break*/, 5];\n return [4 /*yield*/, __await(void 0)];\n case 4: return [2 /*return*/, _b.sent()];\n case 5:\n assertNonNull(value);\n return [4 /*yield*/, __await(value)];\n case 6: return [4 /*yield*/, _b.sent()];\n case 7:\n _b.sent();\n return [3 /*break*/, 2];\n case 8: return [3 /*break*/, 10];\n case 9:\n reader.releaseLock();\n return [7 /*endfinally*/];\n case 10: return [2 /*return*/];\n }\n });\n });\n}\nexport function ensureAsyncIterable(streamLike) {\n if (isAsyncIterable(streamLike)) {\n return streamLike;\n }\n else {\n return asyncIterableFromStream(streamLike);\n }\n}\n//# sourceMappingURL=stream.mjs.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { Decoder } from \"./Decoder.mjs\";\nimport { ensureAsyncIterable } from \"./utils/stream.mjs\";\nimport { defaultDecodeOptions } from \"./decode.mjs\";\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeAsync(streamLike, options) {\n if (options === void 0) { options = defaultDecodeOptions; }\n return __awaiter(this, void 0, void 0, function () {\n var stream, decoder;\n return __generator(this, function (_a) {\n stream = ensureAsyncIterable(streamLike);\n decoder = new Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);\n return [2 /*return*/, decoder.decodeAsync(stream)];\n });\n });\n}\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeArrayStream(streamLike, options) {\n if (options === void 0) { options = defaultDecodeOptions; }\n var stream = ensureAsyncIterable(streamLike);\n var decoder = new Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);\n return decoder.decodeArrayStream(stream);\n}\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMultiStream(streamLike, options) {\n if (options === void 0) { options = defaultDecodeOptions; }\n var stream = ensureAsyncIterable(streamLike);\n var decoder = new Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);\n return decoder.decodeStream(stream);\n}\n/**\n * @deprecated Use {@link decodeMultiStream()} instead.\n */\nexport function decodeStream(streamLike, options) {\n if (options === void 0) { options = defaultDecodeOptions; }\n return decodeMultiStream(streamLike, options);\n}\n//# sourceMappingURL=decodeAsync.mjs.map","export function stringifyJSON(payload: any, space?: number) {\n return JSON.stringify(\n payload,\n (_key: string, value: any) => {\n if (typeof value === \"bigint\") {\n return Number(value);\n } else if (value instanceof Blob) {\n return `Blob{type: ${value.type}, size: ${value.size}}`;\n } else {\n return value;\n }\n },\n space\n );\n}\n\nexport async function sleep(ms = 1000) {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nexport class FatalError extends Error {}\n\nexport async function retry<T>(fn: () => Promise<T>): Promise<T> {\n const maxAttempts = 10;\n let attempts = 0;\n\n while (true) {\n try {\n return await fn();\n } catch (e) {\n if (e instanceof FatalError) {\n throw e;\n }\n\n if (attempts >= maxAttempts) {\n console.error(\"Reached the maximum number of attempts!\");\n throw e;\n }\n\n const waitTime = attempts + Math.random();\n\n console.error(\n `Got error (attempts: ${attempts}, wait: ${waitTime.toFixed(2)})`,\n e\n );\n\n const logTimes = Math.ceil(waitTime);\n const sleepTime = waitTime / logTimes;\n\n for (let i = 0; i < logTimes; i++) {\n console.warn(\n `Retrying in ${(waitTime - i * sleepTime).toFixed(2)} seconds`\n );\n await sleep(sleepTime * 1000);\n }\n\n attempts++;\n }\n }\n}\n\nexport function* splitChunk(chunk: Uint8Array) {\n let offset = 0;\n\n while (offset < chunk.byteLength) {\n yield chunk.slice(offset, offset + 1024);\n offset += 1024;\n }\n}\n","export function createSilentLogger() {\n const noop = (..._args: any[]) => {};\n\n return {\n info: noop,\n log: noop,\n warn: noop,\n error: noop,\n success: noop,\n group: noop,\n groupEnd: noop,\n };\n}\n\nfunction generateStyle(color: string) {\n return [\n `background: ${color}`,\n `border: 1px solid rgba(0, 0, 0, 0.5)`,\n `border-radius: 2px`,\n `padding: 0 2px`,\n `color: #000`,\n `font-weight: bold`,\n ].join(\";\");\n}\n\nexport function createLogger(prefix = \"mayu/\") {\n return {\n info: console.info.bind(\n console,\n `%c${prefix}info`,\n generateStyle(\"#35baf6\")\n ),\n log: console.info.bind(console, `%c${prefix}log`, generateStyle(\"#ccc\")),\n error: console.error.bind(\n console,\n `%c${prefix}error`,\n generateStyle(\"#f6685e\")\n ),\n warn: console.warn.bind(\n console,\n `%c${prefix}warn`,\n generateStyle(\"#ffc107\")\n ),\n success: console.info.bind(\n console,\n `%c${prefix}success`,\n generateStyle(\"#a2cf6e\")\n ),\n group: console.group.bind(console),\n groupEnd: console.groupEnd.bind(console),\n };\n}\n\nconst SILENT = false;\n\nexport default SILENT ? createSilentLogger() : createLogger();\n","import logger from \"./logger\";\n\nconst DecompressionStreamPromise = new Promise<typeof DecompressionStream>(\n async (resolve) => {\n if (typeof DecompressionStream !== \"undefined\") {\n logger.success(\"Using standard DecompressionStream\");\n return resolve(DecompressionStream);\n }\n\n logger.warn(\"Using DecompressionStream polyfill\");\n resolve((await import(\"./DecompressionStreamPolyfill\")).default);\n }\n);\n\nexport default await DecompressionStreamPromise;\n","import { decodeMultiStream, ExtensionCodec } from \"@msgpack/msgpack\";\nimport { stringifyJSON, retry, FatalError, sleep } from \"./utils\";\nimport { MimeTypes } from \"./MimeTypes\";\nimport logger from \"./logger\";\nimport DecompressionStream from \"./DecompressionStream\";\n\nfunction createExtensionCodec() {\n const extensionCodec = new ExtensionCodec();\n\n extensionCodec.register({\n type: 0x01,\n encode() {\n throw new Error(\"Not implemented\");\n },\n decode(buffer: Uint8Array) {\n return new Blob([buffer], { type: \"application/vnd.mayu.session\" });\n },\n });\n\n return extensionCodec;\n}\n\nasync function startStream(sessionId: string, encryptedState?: Blob) {\n const res = await resume(sessionId, encryptedState);\n\n if (!res.ok) {\n const text = await res.text();\n\n if (res.status == 503) {\n // Server is shutting down, so retry..\n throw new Error(`${res.status}: ${text}`);\n }\n\n throw new FatalError(`${res.status}: ${text}`);\n }\n\n if (!res.body) {\n throw new FatalError(\"body is null\");\n }\n\n const decompressionStream = new DecompressionStream(\"deflate-raw\");\n\n return res.body.pipeThrough(decompressionStream);\n}\n\ntype ServerMessage = [id: string, event: string, payload: any];\ntype SessionStreamMessage = [string, any];\n\nfunction resume(sessionId: string, encryptedState?: Blob) {\n if (!encryptedState) {\n return retry(() =>\n fetch(`/__mayu/session/${sessionId}/init`, {\n method: \"POST\",\n })\n );\n }\n\n return retry(() =>\n fetch(`/__mayu/session/${sessionId}/resume`, {\n method: \"POST\",\n headers: { \"content-type\": MimeTypes.MAYU_SESSION },\n body: encryptedState,\n })\n );\n}\n\nfunction errorMessage(e: any) {\n if (e instanceof Error) {\n return e.message;\n }\n\n if (typeof e === \"string\") {\n return e;\n }\n\n return String(e);\n}\n\nexport async function* sessionStream(\n sessionId: string\n): AsyncGenerator<SessionStreamMessage> {\n let isRunning = true;\n let encryptedState: Blob | undefined;\n let isConnected = false;\n const extensionCodec = createExtensionCodec();\n let reason: string | undefined;\n\n while (isRunning) {\n try {\n const stream = await retry(() => startStream(sessionId, encryptedState));\n\n try {\n for await (const message of decodeMultiStream(stream, {\n extensionCodec,\n })) {\n const [id, event, payload] = message as ServerMessage;\n\n if (!isConnected) {\n isConnected = true;\n yield [\"system.connected\", {}];\n }\n\n if (encryptedState) {\n logger.info(\"Clearing encryptedState\");\n encryptedState = undefined;\n }\n\n try {\n switch (event) {\n case \"session.transfer\":\n yield [\"session.transfer\", {}];\n encryptedState = payload;\n logger.info(\"Setting encryptedState\", payload);\n break;\n case \"pong\":\n yield [\n \"ping\",\n {\n values: {\n client: performance.now() - Number(payload.pong),\n server: payload.server,\n },\n region: payload.region,\n instance: payload.instance,\n },\n ];\n break;\n case \"ping\":\n postCallback(sessionId, \"ping\", {\n pong: payload,\n ping: performance.now(),\n });\n break;\n default:\n yield [event, payload];\n }\n } catch (e) {\n reason = errorMessage(e);\n logger.error(e);\n }\n }\n } catch (e) {\n reason = errorMessage(e);\n logger.error(e);\n }\n\n isConnected = false;\n\n if (isRunning) {\n reason ||= \"Stream ended unexpectedly\";\n }\n\n yield [\"system.disconnected\", { transferring: !!encryptedState, reason }];\n } catch (e) {\n logger.error(e);\n\n if (e instanceof FatalError) {\n isRunning = false;\n isConnected = false;\n yield [\"system.disconnected\", { reason: e.message }];\n return;\n }\n\n await sleep(1000);\n }\n }\n}\n\nasync function postCallback(sessionId: string, callbackId: string, data: any) {\n return fetch(`/__mayu/session/${sessionId}/${callbackId}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: stringifyJSON(data),\n });\n}\n","import { createLogger, createSilentLogger } from \"./logger\";\n\nconst SILENT = true;\nconst logger = SILENT ? createSilentLogger() : createLogger(\"mayu/NodeTree/\");\n\nexport type IdNode = { id: number; ch?: [IdNode]; type: string };\ntype CacheEntry = { node: Node; childIds: Set<number> };\n\ntype InsertPatch = {\n type: \"insert\";\n parent: number;\n before?: number;\n after?: number;\n html: string;\n ids: any;\n};\n\ntype RemovePatch = { type: \"remove\"; id: number };\n\ntype MovePatch = {\n type: \"move\";\n parent: number;\n id: number;\n before?: number;\n after?: number;\n};\n\ntype StylePatch = { type: \"css\"; id: number; attr: string; value?: string };\ntype StylesheetPatch = { type: \"stylesheet\"; paths: string[] };\n\ntype AddTextPatch = { type: \"text\"; id: number; text: string };\ntype AppendTextPatch = { type: \"text\"; id: number; append: string };\ntype TextPatch = AddTextPatch | AppendTextPatch;\n\ntype AttributePatch = {\n type: \"attr\";\n id: number;\n name: string;\n value?: string;\n};\n\nexport type Patch =\n | InsertPatch\n | MovePatch\n | RemovePatch\n | TextPatch\n | AttributePatch\n | StylePatch\n | StylesheetPatch;\n\nfunction cloneScriptElement(element: HTMLScriptElement) {\n const script = document.createElement(\"script\");\n script.text = element.innerHTML;\n for (const attr of element.attributes) {\n // console.log(\"Setting attribute\", attr.name, \"to\", attr.value);\n script.setAttribute(attr.name, attr.value);\n }\n return script;\n}\n\nfunction replaceScriptNodes(parent: Node, node: Node) {\n if ((node as Element).tagName === \"SCRIPT\") {\n parent.replaceChild(cloneScriptElement(node as HTMLScriptElement), node);\n return;\n }\n\n for (const child of node.childNodes) {\n replaceScriptNodes(node, child);\n }\n}\n\nfunction handleAutofocus(node: Node) {\n if (node instanceof HTMLInputElement) {\n if (node.autofocus) {\n node.focus();\n return;\n }\n }\n\n for (const child of node.childNodes) {\n handleAutofocus(child);\n }\n}\n\nclass NodeTree {\n #cache = new Map<number, CacheEntry>();\n\n constructor(root: IdNode, element = document.documentElement) {\n this.updateCache(element, root);\n //console.log(JSON.stringify(root, null, 2))\n }\n\n apply(patches: Patch[]) {\n for (const patch of patches) {\n this.applyPatch(patch);\n }\n }\n\n applyPatch(patch: Patch) {\n switch (patch.type) {\n case \"insert\": {\n this.insert(patch);\n return;\n }\n case \"move\": {\n this.move(patch);\n break;\n }\n case \"remove\": {\n this.remove(patch.id);\n break;\n }\n case \"css\": {\n const element = this.#getEntry(patch.id).node as HTMLElement;\n\n if (patch.value) {\n element.style.setProperty(patch.attr, patch.value);\n } else {\n element.style.removeProperty(patch.attr);\n }\n }\n case \"text\": {\n if (\"text\" in patch) {\n this.updateText(patch.id, patch.text);\n }\n\n if (\"append\" in patch) {\n this.appendText(patch.id, patch.append);\n }\n break;\n }\n case \"attr\": {\n if (patch.value !== undefined) {\n this.setAttribute(patch.id, patch.name, patch.value);\n } else {\n this.removeAttribute(patch.id, patch.name);\n }\n break;\n }\n case \"stylesheet\": {\n for (const href of patch.paths) {\n // TODO: This should be possible in Chrome, but not yet in Firefox.\n // const stylesheet = await import(path, { assert: { type: 'css' } });\n // document.adoptedStyleSheets.push(stylesheet)\n if (document.querySelector(`link[href=\"${href}\"]`)) {\n continue;\n }\n\n const link = document.createElement(\"link\");\n link.setAttribute(\"rel\", \"stylesheet\");\n link.setAttribute(\"href\", href);\n document.head.insertAdjacentElement(\"beforeend\", link);\n }\n\n break;\n }\n default: {\n console.error(\"Unknown patch\", patch);\n }\n }\n }\n\n updateText(id: number, text: string) {\n const node = this.#getEntry(id).node;\n\n if (node.nodeType !== node.TEXT_NODE) {\n throw new Error(\"Trying to update text on a non text node\");\n }\n\n node.textContent = text;\n }\n\n appendText(id: number, text: string) {\n const node = this.#getEntry(id).node;\n\n if (node.nodeType !== node.TEXT_NODE) {\n throw new Error(\"Trying to update text on a non text node\");\n }\n\n node.textContent += text;\n }\n\n setAttribute(id: number, name: string, value: string) {\n const node = this.#getEntry(id).node as Element;\n\n // logger.log(\"Trying to set attribute\", name, value);\n\n if (name === \"open\") {\n if (node instanceof HTMLDialogElement) {\n node.showModal();\n return;\n }\n }\n\n if (node instanceof HTMLInputElement) {\n if (name === \"value\") {\n node.value = value;\n }\n\n if (name === \"checked\") {\n node.checked = true;\n }\n\n if (name === \"indeterminate\") {\n node.indeterminate = true;\n return;\n }\n }\n\n if (name === \"initial_value\") {\n name = \"value\";\n } else {\n name = name.replaceAll(/_/g, \"\");\n }\n\n node.setAttribute(name, value);\n }\n\n removeAttribute(id: number, name: string) {\n const node = this.#getEntry(id).node as Element;\n\n if (name === \"open\") {\n if (node instanceof HTMLDialogElement) {\n node.open = false;\n node.close();\n }\n }\n\n if (node instanceof HTMLInputElement) {\n if (name === \"value\") {\n node.value = \"\";\n }\n\n if (name === \"checked\") {\n node.checked = false;\n }\n\n if (name === \"indeterminate\") {\n node.indeterminate = false;\n return;\n }\n }\n\n node.removeAttribute(name);\n }\n\n insert({ parent, before, after, ids, html }: InsertPatch) {\n logger.group(`Trying to insert html into`, parent);\n\n const parentEntry = this.#getEntry(parent);\n const referenceId = before || after;\n const referenceEntry = referenceId && this.#cache.get(referenceId);\n\n const template = document\n .createRange()\n .createContextualFragment(`<template>${html}</template>`)\n .firstElementChild!;\n const content = (template as HTMLTemplateElement).content;\n\n const children = Array.from(content.childNodes).reverse();\n\n const idsArray = [ids].flat();\n\n idsArray.forEach((idTreeNode, i) => {\n parentEntry.childIds.add(idTreeNode.id);\n const entry = this.#cache.get(idTreeNode.id);\n const node = entry?.node || children[i];\n const ref = referenceEntry\n ? after\n ? referenceEntry.node.nextSibling\n : referenceEntry.node\n : null;\n\n const insertedNode = parentEntry.node.insertBefore(node, ref);\n\n if (entry) {\n (entry.node as HTMLElement).outerHTML = (node as HTMLElement).outerHTML;\n }\n\n requestIdleCallback(() => {\n handleAutofocus(insertedNode);\n });\n\n requestIdleCallback(() => {\n replaceScriptNodes(parentEntry.node, insertedNode);\n });\n\n this.updateCache(insertedNode, idTreeNode);\n });\n\n logger.groupEnd();\n }\n\n #getEntry(id: number) {\n const entry = this.#cache.get(id);\n\n if (!entry) {\n logger.error(\"Could not find\", id, \"in cache!\");\n logger.error(Array.from(this.#cache.keys()));\n throw new Error(`Could not find ${id} in cache!`);\n }\n\n return entry;\n }\n\n remove(nodeId: number) {\n logger.info(\"Trying to remove\", nodeId);\n\n try {\n const entry = this.#getEntry(nodeId);\n const parentNode = entry.node.parentNode;\n\n if (parentNode) {\n const parentId = parentNode.__MAYU_ID;\n const parentEntry = this.#cache.get(parentId);\n\n logger.log(`Removing child`, entry.node.textContent);\n parentNode.removeChild(entry.node);\n\n if (parentEntry) {\n parentEntry.childIds.delete(nodeId);\n }\n } else {\n logger.warn(`Node`, entry.node.__MAYU_ID, \"has no parent??\");\n }\n\n this.#removeRecursiveFromCache(nodeId, false);\n } catch (e) {\n logger.warn(e);\n }\n }\n\n move({ id, parent, before, after }: MovePatch) {\n const entry = this.#getEntry(id);\n const parentEntry = this.#getEntry(parent);\n const refId = before || after;\n const refEntry = refId && this.#cache.get(refId);\n\n const ref = refEntry ? (after ? refEntry.node : refEntry.node) : null;\n\n logger.log(\n \"Moving\",\n entry.node.textContent,\n before ? \"before\" : after ? \"after\" : \"last\",\n ref?.textContent || parentEntry.node.__MAYU_ID\n );\n logger.log({ before, after });\n logger.log(ref?.textContent);\n\n parentEntry.node.insertBefore(entry.node, ref);\n }\n\n #removeRecursiveFromCache(id: number, includeParent = false) {\n const entry = this.#cache.get(id);\n\n if (!entry) return;\n\n logger.group(\"Removing from cache\", id);\n\n if (includeParent) {\n const parentEntry = this.#cache.get(entry.node.parentNode!.__MAYU_ID);\n parentEntry?.childIds?.delete(id);\n }\n\n this.#cache.delete(id);\n\n entry.childIds.forEach((childId) => {\n this.#removeRecursiveFromCache(childId, false);\n });\n\n entry.childIds.delete(id);\n\n logger.groupEnd();\n }\n\n isIgnoredNode(node: Node) {\n if (node.nodeType === node.TEXT_NODE) return false;\n if (node.nodeType === node.COMMENT_NODE) return false;\n if (node.nodeType === node.ELEMENT_NODE) {\n const dataset = (node as HTMLElement).dataset;\n if (typeof dataset.mayuId === \"string\") return false;\n }\n\n return true;\n }\n\n updateCache(node: Node, idTreeNode: IdNode) {\n if (!node) {\n logger.error(idTreeNode);\n throw new Error(\"No node found for idTreeNode\");\n }\n const childIds = new Set((idTreeNode.ch || []).map((child) => child.id));\n\n this.#removeRecursiveFromCache(idTreeNode.id);\n\n this.#cache.set(idTreeNode.id, { node, childIds });\n node.__MAYU_ID = idTreeNode.id;\n\n logger.group(\n \"Add to cache\",\n idTreeNode.id,\n \"type\",\n node.nodeName,\n idTreeNode.type\n );\n\n // logger.log('Updating cache for', node, 'with id', idTreeNode.i)\n\n let i = 0;\n const ch = idTreeNode.ch || [];\n\n node.childNodes.forEach((childNode) => {\n if (this.isIgnoredNode(childNode)) {\n logger.warn(`Ignored:`, childNode);\n return;\n }\n\n const childIdNode = ch[i++];\n\n if (!childIdNode) {\n logger.error(\n `No childIdNode at index`,\n i,\n \"on node\",\n null,\n \"with parent id\",\n idTreeNode.id,\n \"and child node\",\n null\n );\n return;\n }\n\n this.updateCache(childNode, childIdNode);\n });\n\n if (i < ch.length) {\n // throw new Error(\"hello\");\n }\n\n logger.groupEnd();\n }\n}\n\nexport default NodeTree;\n","export default function h(\n type: string,\n children: any[] = [],\n attrs: Record<string, any> = {}\n) {\n const el = document.createElement(type);\n\n for (const [key, value] of Object.entries(attrs)) {\n if (value) {\n if (value === true) {\n el.setAttribute(key, key);\n } else {\n el.setAttribute(key, value);\n }\n }\n }\n\n children.forEach((child) => {\n if ((child as any) instanceof Node) {\n el.appendChild(child);\n } else if (child) {\n el.appendChild(document.createTextNode(String(child)));\n }\n });\n\n return el;\n}\n","function serializeElement(obj: any) {\n if (obj instanceof HTMLFormElement) {\n const formData = Object.fromEntries(new FormData(obj).entries());\n\n return {\n tagName: obj.tagName,\n id: obj.id,\n method: obj.method,\n target: obj.target,\n name: obj.name,\n formData,\n };\n }\n\n if (obj instanceof HTMLSelectElement) {\n return {\n tagName: obj.tagName,\n id: obj.id,\n type: obj.type,\n name: obj.name,\n value: obj.value,\n };\n }\n\n if (obj instanceof HTMLDetailsElement) {\n return {\n tagName: obj.tagName,\n id: obj.id,\n open: obj.open,\n };\n }\n\n if (obj instanceof HTMLInputElement) {\n return {\n tagName: obj.tagName,\n id: obj.id,\n type: obj.type,\n name: obj.name,\n value: obj.value,\n checked: obj.checked,\n };\n }\n\n if (obj instanceof HTMLButtonElement) {\n return {\n tagName: obj.tagName,\n id: obj.id,\n type: obj.type,\n name: obj.name,\n value: obj.value,\n };\n }\n\n if (obj instanceof HTMLElement) {\n return {\n tagName: obj.tagName,\n id: obj.id,\n };\n }\n\n return {};\n}\n\nfunction serializeEvent(e: Event) {\n const payload: Record<string, any> = {};\n\n payload.type = e.constructor.name;\n\n if (e.currentTarget) {\n payload.currentTarget = serializeElement(e.currentTarget);\n }\n\n if (e.target) {\n payload.target = serializeElement(e.target);\n }\n\n if (e instanceof MouseEvent) {\n payload.buttons = e.buttons;\n }\n\n if (e instanceof SubmitEvent) {\n if (e.submitter instanceof HTMLElement) {\n payload.submitter = serializeElement(e.submitter);\n }\n }\n\n return payload;\n}\n\nexport default serializeEvent;\n","import { sessionStream } from \"./stream\";\nimport NodeTree from \"./NodeTree\";\nimport h from \"./h\";\nimport type MayuPingElement from \"./custom-elements/mayu-ping\";\nimport type MayuLogElement from \"./custom-elements/mayu-log\";\nimport type MayuExceptionElement from \"./custom-elements/mayu-exception\";\nimport type MayuAlertElement from \"./custom-elements/mayu-alert\";\n\nimport serializeEvent from \"./serializeEvent\";\n\nimport logger from \"./logger\";\n\nconst onDOMContentLoaded = new Promise<void>((resolve) => {\n if (document.readyState !== \"loading\") {\n return resolve();\n }\n\n window.addEventListener(\"DOMContentLoaded\", () => resolve());\n});\n\nfunction shouldPreventDefault(e: Event) {\n if (typeof TouchEvent !== \"undefined\") {\n if (e instanceof TouchEvent) {\n return false;\n }\n }\n return true;\n}\n\nasync function showException({\n type,\n message,\n backtrace,\n}: {\n type: string;\n message: string;\n backtrace: string[];\n}) {\n await import(\"./custom-elements/mayu-exception\");\n\n const cleanedBacktrace = backtrace\n .filter((line) => !/\\/vendor\\/bundle\\//.test(line))\n .join(\"\\n\");\n\n const el = h(\"mayu-exception\", [\n h(\"span\", [`${type}: ${message}`], { slot: \"title\" }),\n h(\"span\", [cleanedBacktrace], { slot: \"backtrace\" }),\n ]);\n\n document.body.appendChild(el);\n}\n\nasync function showAlert(message: string) {\n await import(\"./custom-elements/mayu-alert\");\n const elem = document.createElement(\"mayu-alert\") as MayuAlertElement;\n elem.setAttribute(\"message\", message);\n document.body.appendChild(elem);\n}\n\nclass MayuGlobal {\n #sessionId: string;\n\n constructor(sessionId: string) {\n this.#sessionId = sessionId;\n\n onDOMContentLoaded.then(() => {\n window.addEventListener(\"popstate\", () => {\n return navigateTo(this.#sessionId, location.pathname);\n });\n });\n }\n\n async handle(e: Event, handlerId: string) {\n if (shouldPreventDefault(e)) {\n e.preventDefault();\n }\n\n const payload = serializeEvent(e);\n console.log(payload);\n // progressBar.setAttribute(\"progress\", \"0\");\n\n await mayuCallback(this.#sessionId, handlerId, payload);\n\n let didRun = false;\n const timeout = setTimeout(() => {\n // progressBar.setAttribute(\"progress\", \"25\");\n didRun = true;\n }, 1);\n\n clearTimeout(timeout);\n\n // progressBar.setAttribute(\"progress\", \"100\");\n }\n\n async navigate(e: MouseEvent) {\n if (e.metaKey || e.ctrlKey) return;\n\n e.preventDefault();\n const anchor = (e.target as HTMLElement).closest(\"a\");\n\n if (!anchor) {\n logger.error(\"Could not find anchor element for\", e.target);\n return;\n }\n\n const url = new URL((anchor as HTMLAnchorElement).href);\n // progressBar.setAttribute(\"progress\", \"0\");\n return navigateTo(this.#sessionId, url.pathname + url.search);\n }\n}\n\nfunction mayuCallback(sessionId: string, handlerId: string, payload: any) {\n return fetch(`/__mayu/session/${sessionId}/callback/${handlerId}`, {\n method: \"POST\",\n headers: new Headers({\n \"content-type\": \"application/json\",\n \"x-request-time\": String(performance.now()),\n }),\n body: JSON.stringify(payload),\n }).then(logRequestTime);\n}\n\nasync function navigateTo(sessionId: string, url: string) {\n return fetch(`/__mayu/session/${sessionId}/navigate`, {\n method: \"POST\",\n headers: new Headers({\n \"content-type\": \"text/plain; charset=utf-8\",\n \"x-request-time\": String(performance.now()),\n }),\n body: url,\n }).then(logRequestTime);\n}\n\nfunction logRequestTime(res: Response) {\n const requestTime = res.headers.get(\"x-request-time\");\n\n if (requestTime) {\n console.log(\"Pong:\", performance.now() - Number(requestTime), \"ms\");\n }\n\n return res;\n}\n\nfunction getSessionIdFromUrl(url: string) {\n const index = url.lastIndexOf(\"#\");\n if (index === -1) {\n throw new Error(`No # found in script url: ${url}`);\n }\n return url.slice(index + 1);\n}\n\nfunction loadCustomElements() {\n import(\"./custom-elements/mayu-ping\");\n import(\"./custom-elements/mayu-disconnected\");\n import(\"./custom-elements/mayu-progress-bar\");\n import(\"./custom-elements/mayu-exception\");\n import(\"./custom-elements/mayu-alert\");\n}\n\nasync function main(url: string) {\n const sessionId = getSessionIdFromUrl(url);\n const mayu = new MayuGlobal(sessionId);\n window.Mayu = mayu;\n\n let nodeTree: NodeTree | undefined;\n\n const disconnectedElement = document.createElement(\"mayu-disconnected\");\n\n const pingElement = document.createElement(\"mayu-ping\") as MayuPingElement;\n pingElement.setAttribute(\"region\", \"Connecting...\");\n pingElement.setAttribute(\"status\", \"connecting\");\n document.body.appendChild(pingElement);\n\n for await (const [event, payload] of sessionStream(sessionId)) {\n switch (event) {\n case \"system.connected\":\n loadCustomElements();\n\n pingElement.setAttribute(\"region\", \"Connected!\");\n pingElement.setAttribute(\"status\", \"connected\");\n logger.success(\"Connected!\");\n\n document.body\n .querySelectorAll(\"mayu-disconnected\")\n .forEach((el) => el.remove());\n break;\n case \"system.disconnected\":\n if (payload.transferring) {\n pingElement.setAttribute(\"region\", \"Transferring…\");\n pingElement.setAttribute(\"status\", \"transferring\");\n break;\n }\n\n pingElement.setAttribute(\"region\", \"Disconnected\");\n pingElement.setAttribute(\"status\", \"disconnected\");\n\n logger.error(\"Disconnected\");\n\n disconnectedElement.setAttribute(\"reason\", payload.reason);\n\n if (disconnectedElement.parentElement !== document.body) {\n document.body.appendChild(disconnectedElement);\n }\n break;\n case \"session.init\":\n await onDOMContentLoaded;\n nodeTree = new NodeTree(payload.ids);\n break;\n case \"session.patch\":\n nodeTree?.apply(payload);\n break;\n case \"session.navigate\":\n const path = payload.path;\n\n if (path !== location.pathname) {\n logger.info(\"Navigating to\", path);\n history.pushState({}, \"\", path);\n // progressBar.setAttribute(\"progress\", \"100\");\n }\n break;\n case \"session.action\":\n handleAction(payload.type, payload.payload);\n break;\n case \"session.keep_alive\":\n break;\n case \"session.transfer\":\n pingElement.setAttribute(\"region\", \"Transferring\");\n pingElement.setAttribute(\"status\", \"transferring\");\n break;\n case \"session.exception\":\n showException(payload);\n break;\n case \"ping\":\n const values = Object.values(payload.values) as number[];\n const mean = values.reduce((a, b) => a + b, 0.0) / values.length;\n pingElement.setAttribute(\"ping\", `${mean.toFixed(2)} ms`);\n pingElement.setAttribute(\"instance\", payload.instance);\n pingElement.setAttribute(\"region\", payload.region);\n pingElement.setAttribute(\"status\", \"ping\");\n break;\n default:\n logger.warn(\"Unhandled event:\", event, payload);\n break;\n }\n }\n\n function handleAction(type: string, payload: any) {\n switch (type) {\n case \"scroll_into_view\": {\n scrollIntoView(payload.selector, payload.options || {});\n break;\n }\n case \"alert\": {\n showAlert(payload);\n break;\n }\n default: {\n logger.error(\"Unhandled action:\", type, payload);\n break;\n }\n }\n }\n\n function scrollIntoView(selector: string, options: Record<string, string>) {\n const elem = document.querySelector(selector);\n\n if (elem) {\n elem.scrollIntoView({\n block: \"start\",\n inline: \"nearest\",\n behavior: \"smooth\",\n ...options,\n });\n } else {\n console.error(\n \"Could not find element to scrollIntoView, selector:\",\n selector\n );\n }\n }\n}\n\nexport default main(import.meta.url);\n"],"names":["_a","_b","_c","UINT32_MAX","getInt64","view","offset","getInt32","getUint32","TEXT_ENCODING_AVAILABLE","process","env","TextEncoder","TextDecoder","sharedTextEncoder","undefined","encodeInto","utf8DecodeJs","bytes","inputOffset","byteLength","end","units","result","byte1","push","byte2","byte3","unit","length","String","fromCharCode","apply","sharedTextDecoder","TEXT_DECODER_THRESHOLD","extendStatics","ExtData","type","data","this","__extends","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","TypeError","__","constructor","create","DecodeError","_super","message","_this","proto","defineProperty","configurable","enumerable","value","name","Error","TIMESTAMP32_MAX_SEC","TIMESTAMP64_MAX_SEC","encodeTimeSpecToTimestamp","sec","nsec","rv","Uint8Array","DataView","buffer","setUint32","secHigh","secLow","high","Math","floor","low","setInt64","timestampExtension","encode","object","msec","nsecInSec","Date","getTime","decode","timeSpec","byteOffset","nsec30AndSecHigh2","concat","decodeTimestampToTimeSpec","ExtensionCodec","builtInEncoders","builtInDecoders","encoders","decoders","register","index","tryToEncode","context","i","encodeExt","decodeExt","defaultCodec","ensureUint8Array","ArrayBuffer","isView","from","prettyByte","byte","abs","toString","padStart","MimeTypes","CachedKeyDecoder","maxKeyLength","maxLengthPerKey","hit","miss","caches","canBeCached","find","FIND_CHUNK","_i","records_1","record","recordBytes","j","str","store","records","random","cachedValue","slicedCopyOfBytes","slice","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","e","rejected","done","then","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","pop","__asyncValues","o","asyncIterator","m","__values","settle","__await","__asyncGenerator","q","a","resume","r","fulfill","shift","EMPTY_VIEW","EMPTY_BYTES","DataViewIndexOutOfBoundsError","getInt8","MORE_DATA","sharedCachedKeyDecoder","Decoder","extensionCodec","maxStrLength","maxBinLength","maxArrayLength","maxMapLength","maxExtLength","keyDecoder","totalPos","pos","headByte","stack","reinitializeState","setBuffer","bufferView","createDataView","appendBuffer","hasRemaining","remainingData","subarray","newData","newBuffer","set","size","createExtraByteError","posToShow","RangeError","doDecodeSync","decodeMulti","decodeAsync","stream","stream_1","stream_1_1","e_1","decoded","e_1_1","error","decodeArrayStream","decodeMultiAsync","decodeStream","isArray","arguments","isArrayHeaderRequired","arrayItemsLeft","stream_2","stream_2_1","e_2","e_3_1","e_3","readArraySize","complete","DECODE","readHeadByte","pushMapState","pushArrayState","decodeUtf8String","readF32","readF64","readU8","readU16","readU32","readU64","readI8","readI16","readI32","readI64","lookU8","lookU16","lookU32","decodeBinary","decodeExtension","state","array","position","keyType","key","map","readCount","headerOffset","stateIsMapKey","stringBytes","utf8DecodeTD","headOffset","extType","getUint8","getUint16","getInt16","getFloat32","getFloat64","defaultDecodeOptions","asyncIterableFromStream","reader","getReader","read","assertNonNull","releaseLock","ensureAsyncIterable","streamLike","decodeMultiStream","options","async","sleep","ms","setTimeout","FatalError","retry","fn","attempts","console","waitTime","toFixed","logTimes","ceil","sleepTime","warn","generateStyle","color","join","logger$1","prefix","info","bind","log","success","group","groupEnd","createLogger","DecompressionStreamPromise","DecompressionStream","logger","import","default","DecompressionStream$1","startStream","sessionId","encryptedState","res","fetch","method","headers","MAYU_SESSION","ok","text","status","decompressionStream","pipeThrough","errorMessage","sessionStream","isRunning","isConnected","Blob","createExtensionCodec","reason","id","event","payload","values","client","performance","now","Number","pong","server","region","instance","postCallback","ping","transferring","callbackId","JSON","stringify","_key","space","noop","_args","createSilentLogger","replaceScriptNodes","parent","node","tagName","child","childNodes","replaceChild","element","script","document","createElement","innerHTML","attr","attributes","setAttribute","cloneScriptElement","handleAutofocus","HTMLInputElement","autofocus","focus","NodeTree","cache","Map","root","documentElement","updateCache","patches","patch","applyPatch","insert","move","remove","getEntry","style","setProperty","removeProperty","updateText","appendText","append","removeAttribute","href","paths","querySelector","link","head","insertAdjacentElement","nodeType","TEXT_NODE","textContent","HTMLDialogElement","showModal","checked","indeterminate","replaceAll","open","close","before","after","ids","html","parentEntry","referenceId","referenceEntry","get","content","createRange","createContextualFragment","firstElementChild","children","reverse","flat","forEach","idTreeNode","childIds","add","entry","ref","nextSibling","insertedNode","insertBefore","outerHTML","requestIdleCallback","keys","nodeId","parentNode","parentId","__MAYU_ID","removeChild","delete","removeRecursiveFromCache","refId","refEntry","includeParent","childId","isIgnoredNode","COMMENT_NODE","ELEMENT_NODE","dataset","mayuId","Set","ch","nodeName","childNode","childIdNode","h","attrs","el","entries","Node","appendChild","createTextNode","serializeElement","obj","HTMLFormElement","formData","fromEntries","FormData","target","HTMLSelectElement","HTMLDetailsElement","HTMLButtonElement","HTMLElement","onDOMContentLoaded","readyState","window","addEventListener","showException","backtrace","cleanedBacktrace","filter","line","test","slot","MayuGlobal","navigateTo","location","pathname","handlerId","TouchEvent","shouldPreventDefault","preventDefault","currentTarget","MouseEvent","buttons","SubmitEvent","submitter","serializeEvent","Headers","logRequestTime","mayuCallback","timeout","clearTimeout","metaKey","ctrlKey","anchor","closest","url","URL","search","requestTime","main$1","lastIndexOf","getSessionIdFromUrl","mayu","nodeTree","Mayu","disconnectedElement","pingElement","querySelectorAll","parentElement","path","history","pushState","handleAction","mean","reduce","selector","elem","scrollIntoView","block","inline","behavior","showAlert","main"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,10,11,12,13]}
@@ -20,20 +20,20 @@
20
20
  },
21
21
  "devDependencies": {
22
22
  "@msgpack/msgpack": "^2.8.0",
23
- "@rollup/plugin-commonjs": "^24.0.0",
24
- "@rollup/plugin-node-resolve": "^15.0.1",
25
- "@rollup/plugin-typescript": "^10.0.1",
26
- "@types/serviceworker": "^0.0.59",
27
- "esbuild": "^0.16.10",
28
- "fflate": "^0.7.4",
29
- "html-minifier-terser": "^7.1.0",
30
- "rollup": "^3.8.1",
23
+ "@rollup/plugin-commonjs": "^25.0.0",
24
+ "@rollup/plugin-node-resolve": "^15.1.0",
25
+ "@rollup/plugin-typescript": "^11.1.1",
26
+ "@types/serviceworker": "^0.0.67",
27
+ "esbuild": "^0.18.0",
28
+ "fflate": "^0.8.0",
29
+ "html-minifier-terser": "^7.2.0",
30
+ "rollup": "^3.24.0",
31
31
  "rollup-plugin-delete": "^2.0.0",
32
- "rollup-plugin-visualizer": "^5.8.3",
33
- "tslib": "^2.4.1",
34
- "typescript": "^4.9.4"
32
+ "rollup-plugin-visualizer": "^5.9.0",
33
+ "tslib": "^2.5.3",
34
+ "typescript": "^5.1.3"
35
35
  },
36
36
  "dependencies": {
37
- "@rollup/plugin-terser": "^0.2.1"
37
+ "@rollup/plugin-terser": "^0.4.3"
38
38
  }
39
39
  }
@@ -10,7 +10,6 @@
10
10
  font-size: 0.9em;
11
11
  padding: 0.2em 0.5em;
12
12
  border-top-right-radius: 3px;
13
- pointer-events: none;
14
13
  text-shadow: 0 0 2px #000, 0 0 2px #000, 0 0 2px #000, 0 0 2px #000,
15
14
  0 0 2px #000, 0 0 2px #000, 0 0 2px #000, 0 0 2px #000, 0 0 2px #000,
16
15
  0 0 2px #000;
@@ -29,8 +28,8 @@
29
28
  background: #0866f799;
30
29
  }
31
30
  </style>
32
- <div class="mayu-ping">
31
+ <div inert class="mayu-ping">
33
32
  Ping:
34
33
  <span class="ping">N/A</span>
35
- (<span class="region">N/A</span>)
34
+ (<span class="instance">N/A</span> @ <span class="region">N/A</span>)
36
35
  </div>
@@ -3,10 +3,50 @@ import html from "./mayu-ping.html";
3
3
  const template = document.createElement("template");
4
4
  template.innerHTML = html;
5
5
 
6
+ const REGION_NAMES: Record<string, string> = {
7
+ ams: "Amsterdam, Netherlands",
8
+ arn: "Stockholm, Sweden",
9
+ atl: "Atlanta, Georgia (US)",
10
+ bog: "Bogotá, Colombia",
11
+ bom: "Mumbai, India",
12
+ bos: "Boston, Massachusetts (US)",
13
+ cdg: "Paris, France",
14
+ den: "Denver, Colorado (US)",
15
+ dfw: "Dallas, Texas (US)",
16
+ ewr: "Secaucus, NJ (US)",
17
+ eze: "Ezeiza, Argentina",
18
+ fra: "Frankfurt, Germany",
19
+ gdl: "Guadalajara, Mexico",
20
+ gig: "Rio de Janeiro, Brazil",
21
+ gru: "Sao Paulo, Brazil",
22
+ hkg: "Hong Kong, Hong Kong",
23
+ iad: "Ashburn, Virginia (US)",
24
+ jnb: "Johannesburg, South Africa",
25
+ lax: "Los Angeles, California (US)",
26
+ lhr: "London, United Kingdom",
27
+ maa: "Chennai (Madras), India",
28
+ mad: "Madrid, Spain",
29
+ mia: "Miami, Florida (US)",
30
+ nrt: "Tokyo, Japan",
31
+ ord: "Chicago, Illinois (US)",
32
+ otp: "Bucharest, Romania",
33
+ phx: "Phoenix, Arizona (US)",
34
+ qro: "Querétaro, Mexico",
35
+ scl: "Santiago, Chile",
36
+ sea: "Seattle, Washington (US)",
37
+ sin: "Singapore, Singapore",
38
+ sjc: "San Jose, California (US)",
39
+ syd: "Sydney, Australia",
40
+ waw: "Warsaw, Poland",
41
+ yul: "Montreal, Canada",
42
+ yyz: "Toronto, Canada",
43
+ };
44
+
6
45
  class MayuPing extends HTMLElement {
7
- div?: HTMLDivElement;
8
- ping?: HTMLSpanElement;
9
- region?: HTMLSpanElement;
46
+ #div?: HTMLDivElement;
47
+ #ping?: HTMLSpanElement;
48
+ #instance?: HTMLSpanElement;
49
+ #region?: HTMLSpanElement;
10
50
 
11
51
  static observedAttributes = ["ping", "region", "status"];
12
52
 
@@ -19,29 +59,31 @@ class MayuPing extends HTMLElement {
19
59
  template.content.cloneNode(true)
20
60
  ) as DocumentFragment;
21
61
 
22
- this.div = this.shadowRoot!.querySelector(".mayu-ping") as HTMLDivElement;
23
- this.ping = this.shadowRoot!.querySelector(".ping") as HTMLSpanElement;
24
- this.region = this.shadowRoot!.querySelector(".region") as HTMLSpanElement;
62
+ this.#div = this.shadowRoot!.querySelector(".mayu-ping") as HTMLDivElement;
63
+ this.#ping = this.shadowRoot!.querySelector(".ping") as HTMLSpanElement;
64
+ this.#instance = this.shadowRoot!.querySelector(
65
+ ".instance"
66
+ ) as HTMLSpanElement;
67
+ this.#region = this.shadowRoot!.querySelector(".region") as HTMLSpanElement;
25
68
  }
26
69
 
27
70
  attributeChangedCallback(name: string, oldValue: string, newValue: string) {
28
71
  switch (name) {
29
72
  case "ping":
30
- if (!this.ping) break;
31
- this.ping.textContent = newValue;
73
+ this.#ping!.textContent = newValue;
74
+ break;
75
+ case "instance":
76
+ this.#instance!.textContent = newValue;
32
77
  break;
33
78
  case "region":
34
- if (!this.region) break;
35
- this.region.textContent = newValue;
79
+ this.#region!.textContent = REGION_NAMES[newValue] || newValue;
36
80
  break;
37
81
  case "status":
38
- if (!this.div) break;
39
-
40
82
  if (oldValue && oldValue !== newValue) {
41
- this.div!.classList.remove(`status-${oldValue}`);
83
+ this.#div!.classList.remove(`status-${oldValue}`);
42
84
  }
43
85
  if (newValue) {
44
- this.div!.classList.add(`status-${newValue}`);
86
+ this.#div!.classList.add(`status-${newValue}`);
45
87
  }
46
88
  break;
47
89
  }
@@ -112,10 +112,10 @@ class MayuGlobal {
112
112
  function mayuCallback(sessionId: string, handlerId: string, payload: any) {
113
113
  return fetch(`/__mayu/session/${sessionId}/callback/${handlerId}`, {
114
114
  method: "POST",
115
- headers: {
115
+ headers: new Headers({
116
116
  "content-type": "application/json",
117
- "x-request-time": performance.now(),
118
- },
117
+ "x-request-time": String(performance.now()),
118
+ }),
119
119
  body: JSON.stringify(payload),
120
120
  }).then(logRequestTime);
121
121
  }
@@ -123,15 +123,15 @@ function mayuCallback(sessionId: string, handlerId: string, payload: any) {
123
123
  async function navigateTo(sessionId: string, url: string) {
124
124
  return fetch(`/__mayu/session/${sessionId}/navigate`, {
125
125
  method: "POST",
126
- headers: {
126
+ headers: new Headers({
127
127
  "content-type": "text/plain; charset=utf-8",
128
- "x-request-time": performance.now(),
129
- },
128
+ "x-request-time": String(performance.now()),
129
+ }),
130
130
  body: url,
131
131
  }).then(logRequestTime);
132
132
  }
133
133
 
134
- function logRequestTime(res) {
134
+ function logRequestTime(res: Response) {
135
135
  const requestTime = res.headers.get("x-request-time");
136
136
 
137
137
  if (requestTime) {
@@ -234,10 +234,8 @@ async function main(url: string) {
234
234
  const values = Object.values(payload.values) as number[];
235
235
  const mean = values.reduce((a, b) => a + b, 0.0) / values.length;
236
236
  pingElement.setAttribute("ping", `${mean.toFixed(2)} ms`);
237
- pingElement.setAttribute(
238
- "region",
239
- `${payload.instance} @ ${payload.region}`
240
- );
237
+ pingElement.setAttribute("instance", payload.instance);
238
+ pingElement.setAttribute("region", payload.region);
241
239
  pingElement.setAttribute("status", "ping");
242
240
  break;
243
241
  default:
@@ -637,7 +637,7 @@ module Mayu
637
637
  def group_condition(type, chunk)
638
638
  parse_ruby(join_ruby_script_nodes(chunk), fix: true) => [statement]
639
639
 
640
- visitor = SyntaxTree::Visitor::MutationVisitor.new
640
+ visitor = MutationVisitor.new
641
641
 
642
642
  chunk.shift if type == :case
643
643
 
@@ -792,7 +792,7 @@ module Mayu
792
792
 
793
793
  parse_ruby(source, fix: true) => [statement]
794
794
 
795
- visitor = SyntaxTree::Visitor::MutationVisitor.new
795
+ visitor = MutationVisitor.new
796
796
 
797
797
  visitor.mutate("Statements[body: [VoidStmt]]") do
798
798
  @builder.Statements(visit_tag_children(node.children))
@@ -834,7 +834,7 @@ module Mayu
834
834
  end
835
835
 
836
836
  def wrap_handler_mutation_visitor
837
- visitor = SyntaxTree::Visitor::MutationVisitor.new
837
+ visitor = MutationVisitor.new
838
838
 
839
839
  visitor.mutate(
840
840
  "Assoc[key: Label, value: VCall[value: Ident]]"
@@ -855,7 +855,7 @@ module Mayu
855
855
  end
856
856
 
857
857
  def string_keys_to_labels_mutation_visitor
858
- visitor = SyntaxTree::Visitor::MutationVisitor.new
858
+ visitor = MutationVisitor.new
859
859
 
860
860
  visitor.mutate("Assoc[key: StringLiteral]") do |assoc|
861
861
  @builder.Assoc(
data/lib/mayu/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Mayu
5
- VERSION = "0.0.2"
5
+ VERSION = "0.0.3"
6
6
  end