mayu-live 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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