diff --git a/Agent/Program.cs b/Agent/Program.cs
index 0d6e2ad1..8568d60a 100644
--- a/Agent/Program.cs
+++ b/Agent/Program.cs
@@ -50,17 +50,6 @@ namespace Remotely.Agent
SetWorkingDirectory();
var argDict = ProcessArgs(args);
- JsonConvert.DefaultSettings = () =>
- {
- var settings = new JsonSerializerSettings();
- settings.Error = (sender, arg) =>
- {
- arg.ErrorContext.Handled = true;
- };
- return settings;
- };
-
-
if (argDict.ContainsKey("update"))
{
Updater.CoreUpdate();
diff --git a/ScreenCast.Core/Capture/ScreenCasterBase.cs b/ScreenCast.Core/Capture/ScreenCasterBase.cs
index e075f26c..4db8e85e 100644
--- a/ScreenCast.Core/Capture/ScreenCasterBase.cs
+++ b/ScreenCast.Core/Capture/ScreenCasterBase.cs
@@ -73,7 +73,7 @@ namespace Remotely.ScreenCast.Core.Capture
{
try
{
- if (viewer.Latency > 30000)
+ if (viewer.IsStalled())
{
// Viewer isn't responding. Abort sending.
break;
@@ -88,19 +88,9 @@ namespace Remotely.ScreenCast.Core.Capture
fpsQueue.Enqueue(DateTime.Now);
Debug.WriteLine($"Capture FPS: {fpsQueue.Count}");
}
-
- if (viewer.OutputBuffer > 150_000)
- {
- Debug.WriteLine($"Waiting for buffer to clear. Size: {viewer.OutputBuffer}");
- await Task.Delay(50);
- continue;
- }
- if (viewer.RtcSession?.CurrentBuffer > 100_000)
- {
- Debug.WriteLine($"Throttling output due to WebRTC buffer. Size: {viewer.RtcSession.CurrentBuffer}");
- await Task.Delay((int)(viewer.RtcSession.CurrentBuffer - 100_000));
- }
+ await viewer.ThrottleIfNeeded();
+
capturer.GetNextFrame();
@@ -118,10 +108,10 @@ namespace Remotely.ScreenCast.Core.Capture
capturer.CaptureFullscreen = false;
}
- if (viewer.AutoAdjustQuality && viewer.Latency > 1000)
+ if (viewer.ShouldAdjustQuality())
{
var quality = (int)(viewer.ImageQuality * 1000 / viewer.Latency);
- Debug.WriteLine($"Auto-adjusting image quality. Latency: {viewer.Latency}. Quality: {quality}");
+ Logger.Debug($"Auto-adjusting image quality. Latency: {viewer.Latency}. Quality: {quality}");
encodedImageBytes = ImageUtils.EncodeBitmap(newImage, new EncoderParameters()
{
Param = new[]
@@ -137,16 +127,18 @@ namespace Remotely.ScreenCast.Core.Capture
if (encodedImageBytes?.Length > 0)
{
- if (viewer.RtcSession.IsDataChannelOpen)
+ if (viewer.IsUsingWebRtc())
{
viewer.RtcSession.SendCaptureFrame(diffArea.Left, diffArea.Top, diffArea.Width, diffArea.Height, encodedImageBytes);
-
+ viewer.WebSocketBuffer = 0;
+ viewer.Latency = 0;
}
else
{
await casterSocket.SendScreenCapture(encodedImageBytes, viewerID, diffArea.Left, diffArea.Top, diffArea.Width, diffArea.Height, DateTime.UtcNow);
viewer.Latency += 300;
- viewer.OutputBuffer += encodedImageBytes.Length;
+ // Shave some off so it doesn't get deadlocked by dropped frames.
+ viewer.WebSocketBuffer += (int)(encodedImageBytes.Length * .9);
}
}
}
@@ -165,6 +157,8 @@ namespace Remotely.ScreenCast.Core.Capture
Logger.Write($"Ended screen cast. Requester: {requesterName}. Viewer ID: {viewerID}.");
viewers.TryRemove(viewerID, out _);
+ viewer.Dispose();
+
capturer.Dispose();
// Close if no one is viewing.
diff --git a/ScreenCast.Core/Communication/CasterSocket.cs b/ScreenCast.Core/Communication/CasterSocket.cs
index d790a9e5..e5d20a6f 100644
--- a/ScreenCast.Core/Communication/CasterSocket.cs
+++ b/ScreenCast.Core/Communication/CasterSocket.cs
@@ -316,7 +316,7 @@ namespace Remotely.ScreenCast.Core.Communication
{
var latency = DateTime.UtcNow - sentTime;
viewer.Latency = latency.TotalMilliseconds;
- viewer.OutputBuffer -= bytesReceived;
+ viewer.WebSocketBuffer = Math.Max(0, viewer.WebSocketBuffer - bytesReceived);
}
});
diff --git a/ScreenCast.Core/Communication/WebRtcSession.cs b/ScreenCast.Core/Communication/WebRtcSession.cs
index 417016f8..cac3ea23 100644
--- a/ScreenCast.Core/Communication/WebRtcSession.cs
+++ b/ScreenCast.Core/Communication/WebRtcSession.cs
@@ -1,6 +1,7 @@
using MessagePack;
using Microsoft.MixedReality.WebRTC;
using Remotely.ScreenCast.Core.Models;
+using Remotely.ScreenCast.Core.Services;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -26,8 +27,16 @@ namespace Remotely.ScreenCast.Core.Communication
PeerConnection.AddIceCandidate(sdpMid, sdpMlineIndex, candidate);
}
+ public void Dispose()
+ {
+ PeerConnection?.Dispose();
+ CaptureChannel?.Dispose();
+ }
+
public async Task Init()
{
+ CaptureChannel?.Dispose();
+ PeerConnection?.Dispose();
PeerConnection = new PeerConnection();
var config = new PeerConnectionConfiguration()
@@ -51,7 +60,6 @@ namespace Remotely.ScreenCast.Core.Communication
CaptureChannel.StateChanged += CaptureChannel_StateChanged;
PeerConnection.CreateOffer();
}
-
public void SendCaptureFrame(int left, int top, int width, int height, byte[] imageBytes)
{
CaptureChannel.SendMessage(MessagePackSerializer.Serialize(new FrameInfo()
@@ -75,39 +83,43 @@ namespace Remotely.ScreenCast.Core.Communication
private void CaptureChannel_MessageReceived(byte[] obj)
{
- Debug.WriteLine($"DataChannel message received. Size: {obj.Length}");
+ Logger.Debug($"DataChannel message received. Size: {obj.Length}");
}
- private void CaptureChannel_StateChanged()
+ private async void CaptureChannel_StateChanged()
{
- Debug.WriteLine($"DataChannel state changed. New State: {CaptureChannel.State}");
+ Logger.Debug($"DataChannel state changed. New State: {CaptureChannel.State}");
+ if (CaptureChannel.State == DataChannel.ChannelState.Closed)
+ {
+ await Init();
+ }
}
private void DataChannel_BufferingChanged(ulong previous, ulong current, ulong limit)
{
- Debug.WriteLine($"DataChannel buffering changed. Previous: {previous}. Current: {current}. Limit: {limit}.");
+ Logger.Debug($"DataChannel buffering changed. Previous: {previous}. Current: {current}. Limit: {limit}.");
CurrentBuffer = current;
}
private void PeerConnection_Connected()
{
- Debug.WriteLine("PeerConnection connected.");
+ Logger.Debug("PeerConnection connected.");
}
private void PeerConnection_IceCandidateReadytoSend(string candidate, int sdpMlineindex, string sdpMid)
{
- Debug.WriteLine("Ice candidate ready to send.");
+ Logger.Debug("Ice candidate ready to send.");
IceCandidateReady?.Invoke(this, (candidate, sdpMlineindex, sdpMid));
}
private void PeerConnection_IceStateChanged(IceConnectionState newState)
{
- Debug.WriteLine($"Ice state changed to {newState}.");
+ Logger.Debug($"Ice state changed to {newState}.");
}
private void PeerConnection_LocalSdpReadytoSend(string type, string sdp)
{
- Debug.WriteLine($"Local SDP ready.");
+ Logger.Debug($"Local SDP ready.");
LocalSdpReady?.Invoke(this, sdp);
}
}
diff --git a/ScreenCast.Core/Models/Viewer.cs b/ScreenCast.Core/Models/Viewer.cs
index 4d3815a0..41a326ea 100644
--- a/ScreenCast.Core/Models/Viewer.cs
+++ b/ScreenCast.Core/Models/Viewer.cs
@@ -1,6 +1,7 @@
using Remotely.ScreenCast.Core.Capture;
using Remotely.ScreenCast.Core.Communication;
using Remotely.ScreenCast.Core.Interfaces;
+using Remotely.ScreenCast.Core.Services;
using System;
using System.Collections.Generic;
using System.Drawing;
@@ -10,7 +11,7 @@ using System.Threading.Tasks;
namespace Remotely.ScreenCast.Core.Models
{
- public class Viewer
+ public class Viewer : IDisposable
{
private long imageQuality = 50;
@@ -54,8 +55,44 @@ namespace Remotely.ScreenCast.Core.Models
public double Latency { get; set; } = 1;
public string Name { get; set; }
- public int OutputBuffer { get; set; }
+ public int WebSocketBuffer { get; set; }
public WebRtcSession RtcSession { get; set; }
public string ViewerConnectionID { get; set; }
+
+ public void Dispose()
+ {
+ EncoderParams?.Dispose();
+ Capturer?.Dispose();
+ RtcSession?.Dispose();
+ }
+
+ public bool IsStalled()
+ {
+ return RtcSession?.IsDataChannelOpen != true && Latency > 30000;
+ }
+
+ public async Task ThrottleIfNeeded()
+ {
+ if (IsUsingWebRtc() && RtcSession?.CurrentBuffer > 100_000)
+ {
+ Logger.Debug($"Throttling output due to WebRTC buffer. Size: {RtcSession.CurrentBuffer}");
+ await Task.Delay((int)Math.Ceiling((RtcSession.CurrentBuffer - 100_000) * .0025));
+ }
+ else if (!IsUsingWebRtc() && WebSocketBuffer > 150_000)
+ {
+ Logger.Debug($"Throttling output due to websocket buffer. Size: {WebSocketBuffer}");
+ await Task.Delay((int)Math.Ceiling((WebSocketBuffer - 150_000) * .0025));
+ }
+ }
+
+ public bool ShouldAdjustQuality()
+ {
+ return !IsUsingWebRtc() && AutoAdjustQuality && Latency > 1000;
+ }
+
+ public bool IsUsingWebRtc()
+ {
+ return RtcSession?.IsDataChannelOpen == true;
+ }
}
}
diff --git a/ScreenCast.Core/Services/Logger.cs b/ScreenCast.Core/Services/Logger.cs
index 1fb851e0..9b830919 100644
--- a/ScreenCast.Core/Services/Logger.cs
+++ b/ScreenCast.Core/Services/Logger.cs
@@ -1,45 +1,38 @@
-using Microsoft.Extensions.Logging;
-using System;
-using System.Collections.Generic;
+using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
-using System.Text;
-using System.Text.Json;
-using System.Threading.Tasks;
namespace Remotely.ScreenCast.Core.Services
{
public static class Logger
{
- public static object WriteLock { get; } = new object();
+ private static string LogPath => Path.Combine(Path.GetTempPath(), "Remotely_Logs.log");
+ private static object WriteLock { get; } = new object();
+ public static void Debug(string message)
+ {
+ lock (WriteLock)
+ {
+#if DEBUG
+ CheckLogFileExists();
+
+ File.AppendAllText(LogPath, $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}\t[DEBUG]\t{message}{Environment.NewLine}");
+
+#endif
+ System.Diagnostics.Debug.WriteLine(message);
+ }
+
+ }
+
public static void Write(string message)
{
try
{
lock (WriteLock)
{
- var path = Path.Combine(Path.GetTempPath(), "Remotely_Logs.log");
- if (!File.Exists(path))
- {
- File.Create(path).Close();
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
- {
- Process.Start("sudo", $"chmod 666 {path}").WaitForExit();
- }
- }
- if (File.Exists(path))
- {
- var fi = new FileInfo(path);
- while (fi.Length > 1000000)
- {
- var content = File.ReadAllLines(path);
- File.WriteAllLines(path, content.Skip(10));
- fi = new FileInfo(path);
- }
- }
- File.AppendAllText(path, $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}\t[INFO]\t{message}{Environment.NewLine}");
+ CheckLogFileExists();
+ File.AppendAllText(LogPath, $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}\t[INFO]\t{message}{Environment.NewLine}");
Console.WriteLine(message);
}
}
@@ -52,39 +45,13 @@ namespace Remotely.ScreenCast.Core.Services
{
try
{
- var exception = ex;
- var path = Path.Combine(Path.GetTempPath(), "Remotely_Logs.log");
+ CheckLogFileExists();
- if (!File.Exists(path))
- {
- File.Create(path).Close();
- if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
- {
- Process.Start("sudo", $"chmod 666 {path}").WaitForExit();
- }
- }
+ var exception = ex;
while (exception != null)
{
- var jsonError = new
- {
- Type = "Error",
- Timestamp = DateTime.Now.ToString(),
- Message = exception?.Message,
- Source = exception?.Source,
- StackTrace = exception?.StackTrace,
- };
- if (File.Exists(path))
- {
- var fi = new FileInfo(path);
- while (fi.Length > 1000000)
- {
- var content = File.ReadAllLines(path);
- File.WriteAllLines(path, content.Skip(10));
- fi = new FileInfo(path);
- }
- }
- File.AppendAllText(path, $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}\t[ERROR]\t{exception?.Message}\t{exception?.StackTrace}\t{exception?.Source}{Environment.NewLine}");
+ File.AppendAllText(LogPath, $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}\t[ERROR]\t{exception?.Message}\t{exception?.StackTrace}\t{exception?.Source}{Environment.NewLine}");
Console.WriteLine(exception.Message);
exception = exception.InnerException;
}
@@ -92,5 +59,27 @@ namespace Remotely.ScreenCast.Core.Services
catch { }
}
}
+
+ private static void CheckLogFileExists()
+ {
+ if (!File.Exists(LogPath))
+ {
+ File.Create(LogPath).Close();
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
+ {
+ Process.Start("sudo", $"chmod 666 {LogPath}").WaitForExit();
+ }
+ }
+ if (File.Exists(LogPath))
+ {
+ var fi = new FileInfo(LogPath);
+ while (fi.Length > 1000000)
+ {
+ var content = File.ReadAllLines(LogPath);
+ File.WriteAllLines(LogPath, content.Skip(10));
+ fi = new FileInfo(LogPath);
+ }
+ }
+ }
}
}
diff --git a/ScreenCast.Win/Properties/PublishProfiles/win-x64-debug.pubxml b/ScreenCast.Win/Properties/PublishProfiles/win-x64-debug.pubxml
new file mode 100644
index 00000000..35947dd1
--- /dev/null
+++ b/ScreenCast.Win/Properties/PublishProfiles/win-x64-debug.pubxml
@@ -0,0 +1,17 @@
+
+
+
+
+ FileSystem
+ Debug
+ x64
+ netcoreapp3.1
+ ..\Agent\bin\Release\netcoreapp3.1\win10-x64\publish\ScreenCast
+ false
+ win10-x64
+ True
+ False
+
+
\ No newline at end of file
diff --git a/Server/Pages/RemoteControl.cshtml b/Server/Pages/RemoteControl.cshtml
index a28fe9df..af7de1fe 100644
--- a/Server/Pages/RemoteControl.cshtml
+++ b/Server/Pages/RemoteControl.cshtml
@@ -33,12 +33,14 @@
+
+
diff --git a/Server/Pages/_DataGrid.cshtml b/Server/Pages/_DataGrid.cshtml
index a0e831a4..cf3a1098 100644
--- a/Server/Pages/_DataGrid.cshtml
+++ b/Server/Pages/_DataGrid.cshtml
@@ -19,26 +19,28 @@
-
-
-
- | Online |
- Device Name |
- Alias |
- Current User |
- Last Online |
- Platform |
- OS Description |
- Free Storage |
- Total Storage (GB) |
- Free Memory |
- Total Memory (GB) |
- |
-
-
-
-
-
-
+
+
+
+
+ | Online |
+ Device Name |
+ Alias |
+ Current User |
+ Last Online |
+ Platform |
+ OS Description |
+ Free Storage |
+ Total Storage (GB) |
+ Free Memory |
+ Total Memory (GB) |
+ |
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Server/Server.csproj b/Server/Server.csproj
index a5717348..ac21b5b1 100644
--- a/Server/Server.csproj
+++ b/Server/Server.csproj
@@ -89,6 +89,10 @@
+
+
+
+
diff --git a/Server/package.json b/Server/package.json
index 8d7bba93..4ff599f1 100644
--- a/Server/package.json
+++ b/Server/package.json
@@ -8,5 +8,8 @@
"@types/bootstrap": "^4.3.1",
"@types/jquery": "^3.3.31",
"msgpack5": "^4.2.1"
+ },
+ "dependencies": {
+ "@msgpack/msgpack": "^1.11.0"
}
}
diff --git a/Server/wwwroot/lib/msgpack/msgpack.js b/Server/wwwroot/lib/msgpack/msgpack.js
new file mode 100644
index 00000000..4f520b50
--- /dev/null
+++ b/Server/wwwroot/lib/msgpack/msgpack.js
@@ -0,0 +1,1901 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define([], factory);
+ else if(typeof exports === 'object')
+ exports["MessagePack"] = factory();
+ else
+ root["MessagePack"] = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+
+// CONCATENATED MODULE: ./src/utils/utf8.ts
+var __read = (undefined && undefined.__read) || function (o, n) {
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
+ if (!m) return o;
+ var i = m.call(o), r, ar = [], e;
+ try {
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+ }
+ catch (error) { e = { error: error }; }
+ finally {
+ try {
+ if (r && !r.done && (m = i["return"])) m.call(i);
+ }
+ finally { if (e) throw e.error; }
+ }
+ return ar;
+};
+var __spread = (undefined && undefined.__spread) || function () {
+ for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
+ return ar;
+};
+var utf8_a;
+var TEXT_ENCODING_AVAILABLE = true && typeof TextEncoder !== "undefined" && typeof TextDecoder !== "undefined";
+function utf8Count(str) {
+ var strLength = str.length;
+ var byteLength = 0;
+ var pos = 0;
+ while (pos < strLength) {
+ var value = str.charCodeAt(pos++);
+ if ((value & 0xffffff80) === 0) {
+ // 1-byte
+ byteLength++;
+ continue;
+ }
+ else if ((value & 0xfffff800) === 0) {
+ // 2-bytes
+ byteLength += 2;
+ }
+ else {
+ // handle surrogate pair
+ if (value >= 0xd800 && value <= 0xdbff) {
+ // high surrogate
+ if (pos < strLength) {
+ var extra = str.charCodeAt(pos);
+ if ((extra & 0xfc00) === 0xdc00) {
+ ++pos;
+ value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;
+ }
+ }
+ }
+ if ((value & 0xffff0000) === 0) {
+ // 3-byte
+ byteLength += 3;
+ }
+ else {
+ // 4-byte
+ byteLength += 4;
+ }
+ }
+ }
+ return byteLength;
+}
+function utf8EncodeJs(str, output, outputOffset) {
+ var strLength = str.length;
+ var offset = outputOffset;
+ var pos = 0;
+ while (pos < strLength) {
+ var value = str.charCodeAt(pos++);
+ if ((value & 0xffffff80) === 0) {
+ // 1-byte
+ output[offset++] = value;
+ continue;
+ }
+ else if ((value & 0xfffff800) === 0) {
+ // 2-bytes
+ output[offset++] = ((value >> 6) & 0x1f) | 0xc0;
+ }
+ else {
+ // handle surrogate pair
+ if (value >= 0xd800 && value <= 0xdbff) {
+ // high surrogate
+ if (pos < strLength) {
+ var extra = str.charCodeAt(pos);
+ if ((extra & 0xfc00) === 0xdc00) {
+ ++pos;
+ value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;
+ }
+ }
+ }
+ if ((value & 0xffff0000) === 0) {
+ // 3-byte
+ output[offset++] = ((value >> 12) & 0x0f) | 0xe0;
+ output[offset++] = ((value >> 6) & 0x3f) | 0x80;
+ }
+ else {
+ // 4-byte
+ output[offset++] = ((value >> 18) & 0x07) | 0xf0;
+ output[offset++] = ((value >> 12) & 0x3f) | 0x80;
+ output[offset++] = ((value >> 6) & 0x3f) | 0x80;
+ }
+ }
+ output[offset++] = (value & 0x3f) | 0x80;
+ }
+}
+var sharedTextEncoder = TEXT_ENCODING_AVAILABLE ? new TextEncoder() : undefined;
+var TEXT_ENCODER_THRESHOLD = true ? 200 : undefined;
+function utf8EncodeTEencode(str, output, outputOffset) {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ output.set(sharedTextEncoder.encode(str), outputOffset);
+}
+function utf8EncodeTEencodeInto(str, output, outputOffset) {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ sharedTextEncoder.encodeInto(str, output.subarray(outputOffset));
+}
+var utf8EncodeTE = ((utf8_a = sharedTextEncoder) === null || utf8_a === void 0 ? void 0 : utf8_a.encodeInto) ? utf8EncodeTEencodeInto : utf8EncodeTEencode;
+var CHUNK_SIZE = 4096;
+function utf8DecodeJs(bytes, inputOffset, byteLength) {
+ var offset = inputOffset;
+ var end = offset + byteLength;
+ var units = [];
+ var result = "";
+ while (offset < end) {
+ var byte1 = bytes[offset++];
+ if ((byte1 & 0x80) === 0) {
+ // 1 byte
+ units.push(byte1);
+ }
+ else if ((byte1 & 0xe0) === 0xc0) {
+ // 2 bytes
+ var byte2 = bytes[offset++] & 0x3f;
+ units.push(((byte1 & 0x1f) << 6) | byte2);
+ }
+ else if ((byte1 & 0xf0) === 0xe0) {
+ // 3 bytes
+ var byte2 = bytes[offset++] & 0x3f;
+ var byte3 = bytes[offset++] & 0x3f;
+ units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);
+ }
+ else if ((byte1 & 0xf8) === 0xf0) {
+ // 4 bytes
+ var byte2 = bytes[offset++] & 0x3f;
+ var byte3 = bytes[offset++] & 0x3f;
+ var byte4 = bytes[offset++] & 0x3f;
+ var unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;
+ if (unit > 0xffff) {
+ unit -= 0x10000;
+ units.push(((unit >>> 10) & 0x3ff) | 0xd800);
+ unit = 0xdc00 | (unit & 0x3ff);
+ }
+ units.push(unit);
+ }
+ else {
+ units.push(byte1);
+ }
+ if (units.length >= CHUNK_SIZE) {
+ result += String.fromCharCode.apply(String, __spread(units));
+ units.length = 0;
+ }
+ }
+ if (units.length > 0) {
+ result += String.fromCharCode.apply(String, __spread(units));
+ }
+ return result;
+}
+var sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null;
+var TEXT_DECODER_THRESHOLD = true ? 200 : undefined;
+function utf8DecodeTD(bytes, inputOffset, byteLength) {
+ var stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ return sharedTextDecoder.decode(stringBytes);
+}
+
+// CONCATENATED MODULE: ./src/ExtData.ts
+/**
+ * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.
+ */
+var ExtData = /** @class */ (function () {
+ function ExtData(type, data) {
+ this.type = type;
+ this.data = data;
+ }
+ return ExtData;
+}());
+
+
+// CONCATENATED MODULE: ./src/utils/int.ts
+// DataView extension to handle int64 / uint64,
+// where the actual range is 53-bits integer (a.k.a. safe integer)
+function setUint64(view, offset, value) {
+ var high = value / 4294967296;
+ var low = value; // high bits are truncated by DataView
+ view.setUint32(offset, high);
+ view.setUint32(offset + 4, low);
+}
+function setInt64(view, offset, value) {
+ var high = Math.floor(value / 4294967296);
+ var low = value; // high bits are truncated by DataView
+ view.setUint32(offset, high);
+ view.setUint32(offset + 4, low);
+}
+function getInt64(view, offset) {
+ var high = view.getInt32(offset);
+ var low = view.getUint32(offset + 4);
+ return high * 4294967296 + low;
+}
+function getUint64(view, offset) {
+ var high = view.getUint32(offset);
+ var low = view.getUint32(offset + 4);
+ return high * 4294967296 + low;
+}
+
+// CONCATENATED MODULE: ./src/timestamp.ts
+// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type
+
+var EXT_TIMESTAMP = -1;
+var TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int
+var TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int
+function encodeTimeSpecToTimestamp(_a) {
+ var sec = _a.sec, nsec = _a.nsec;
+ if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {
+ // Here sec >= 0 && nsec >= 0
+ if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {
+ // timestamp 32 = { sec32 (unsigned) }
+ var rv = new Uint8Array(4);
+ var view = new DataView(rv.buffer);
+ view.setUint32(0, sec);
+ return rv;
+ }
+ else {
+ // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }
+ var secHigh = sec / 0x100000000;
+ var secLow = sec & 0xffffffff;
+ var rv = new Uint8Array(8);
+ var view = new DataView(rv.buffer);
+ // nsec30 | secHigh2
+ view.setUint32(0, (nsec << 2) | (secHigh & 0x3));
+ // secLow32
+ view.setUint32(4, secLow);
+ return rv;
+ }
+ }
+ else {
+ // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }
+ var rv = new Uint8Array(12);
+ var view = new DataView(rv.buffer);
+ view.setUint32(0, nsec);
+ setInt64(view, 4, sec);
+ return rv;
+ }
+}
+function encodeDateToTimeSpec(date) {
+ var msec = date.getTime();
+ var sec = Math.floor(msec / 1e3);
+ var nsec = (msec - sec * 1e3) * 1e6;
+ // Normalizes { sec, nsec } to ensure nsec is unsigned.
+ var nsecInSec = Math.floor(nsec / 1e9);
+ return {
+ sec: sec + nsecInSec,
+ nsec: nsec - nsecInSec * 1e9,
+ };
+}
+function encodeTimestampExtension(object) {
+ if (object instanceof Date) {
+ var timeSpec = encodeDateToTimeSpec(object);
+ return encodeTimeSpecToTimestamp(timeSpec);
+ }
+ else {
+ return null;
+ }
+}
+function decodeTimestampToTimeSpec(data) {
+ var view = new DataView(data.buffer, data.byteOffset, data.byteLength);
+ // data may be 32, 64, or 96 bits
+ switch (data.byteLength) {
+ case 4: {
+ // timestamp 32 = { sec32 }
+ var sec = view.getUint32(0);
+ var nsec = 0;
+ return { sec: sec, nsec: nsec };
+ }
+ case 8: {
+ // timestamp 64 = { nsec30, sec34 }
+ var nsec30AndSecHigh2 = view.getUint32(0);
+ var secLow32 = view.getUint32(4);
+ var sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;
+ var nsec = nsec30AndSecHigh2 >>> 2;
+ return { sec: sec, nsec: nsec };
+ }
+ case 12: {
+ // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }
+ var sec = getInt64(view, 4);
+ var nsec = view.getUint32(0);
+ return { sec: sec, nsec: nsec };
+ }
+ default:
+ throw new Error("Unrecognized data size for timestamp: " + data.length);
+ }
+}
+function decodeTimestampExtension(data) {
+ var timeSpec = decodeTimestampToTimeSpec(data);
+ return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);
+}
+var timestampExtension = {
+ type: EXT_TIMESTAMP,
+ encode: encodeTimestampExtension,
+ decode: decodeTimestampExtension,
+};
+
+// CONCATENATED MODULE: ./src/ExtensionCodec.ts
+// ExtensionCodec to handle MessagePack extensions
+
+
+var ExtensionCodec_ExtensionCodec = /** @class */ (function () {
+ function ExtensionCodec() {
+ // built-in extensions
+ this.builtInEncoders = [];
+ this.builtInDecoders = [];
+ // custom extensions
+ this.encoders = [];
+ this.decoders = [];
+ this.register(timestampExtension);
+ }
+ ExtensionCodec.prototype.register = function (_a) {
+ var type = _a.type, encode = _a.encode, decode = _a.decode;
+ if (type >= 0) {
+ // custom extensions
+ this.encoders[type] = encode;
+ this.decoders[type] = decode;
+ }
+ else {
+ // built-in extensions
+ var index = 1 + type;
+ this.builtInEncoders[index] = encode;
+ this.builtInDecoders[index] = decode;
+ }
+ };
+ ExtensionCodec.prototype.tryToEncode = function (object, context) {
+ // built-in extensions
+ for (var i = 0; i < this.builtInEncoders.length; i++) {
+ var encoder = this.builtInEncoders[i];
+ if (encoder != null) {
+ var data = encoder(object, context);
+ if (data != null) {
+ var type = -1 - i;
+ return new ExtData(type, data);
+ }
+ }
+ }
+ // custom extensions
+ for (var i = 0; i < this.encoders.length; i++) {
+ var encoder = this.encoders[i];
+ if (encoder != null) {
+ var data = encoder(object, context);
+ if (data != null) {
+ var type = i;
+ return new ExtData(type, data);
+ }
+ }
+ }
+ if (object instanceof ExtData) {
+ // to keep ExtData as is
+ return object;
+ }
+ return null;
+ };
+ ExtensionCodec.prototype.decode = function (data, type, context) {
+ var decoder = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];
+ if (decoder) {
+ return decoder(data, type, context);
+ }
+ else {
+ // decode() does not fail, returns ExtData instead.
+ return new ExtData(type, data);
+ }
+ };
+ ExtensionCodec.defaultCodec = new ExtensionCodec();
+ return ExtensionCodec;
+}());
+
+
+// CONCATENATED MODULE: ./src/utils/typedArrays.ts
+function ensureUint8Array(buffer) {
+ if (buffer instanceof Uint8Array) {
+ return buffer;
+ }
+ else if (ArrayBuffer.isView(buffer)) {
+ return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
+ }
+ else if (buffer instanceof ArrayBuffer) {
+ return new Uint8Array(buffer);
+ }
+ else {
+ // ArrayLike
+ return Uint8Array.from(buffer);
+ }
+}
+function createDataView(buffer) {
+ if (buffer instanceof ArrayBuffer) {
+ return new DataView(buffer);
+ }
+ var bufferView = ensureUint8Array(buffer);
+ return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);
+}
+
+// CONCATENATED MODULE: ./src/Encoder.ts
+var Encoder_values = (undefined && undefined.__values) || function(o) {
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+ if (m) return m.call(o);
+ if (o && typeof o.length === "number") return {
+ next: function () {
+ if (o && i >= o.length) o = void 0;
+ return { value: o && o[i++], done: !o };
+ }
+ };
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+};
+
+
+
+
+var DEFAULT_MAX_DEPTH = 100;
+var DEFAULT_INITIAL_BUFFER_SIZE = 2048;
+var Encoder_Encoder = /** @class */ (function () {
+ function Encoder(extensionCodec, context, maxDepth, initialBufferSize, sortKeys, forceFloat32) {
+ if (extensionCodec === void 0) { extensionCodec = ExtensionCodec_ExtensionCodec.defaultCodec; }
+ if (maxDepth === void 0) { maxDepth = DEFAULT_MAX_DEPTH; }
+ if (initialBufferSize === void 0) { initialBufferSize = DEFAULT_INITIAL_BUFFER_SIZE; }
+ if (sortKeys === void 0) { sortKeys = false; }
+ if (forceFloat32 === void 0) { forceFloat32 = false; }
+ this.extensionCodec = extensionCodec;
+ this.context = context;
+ this.maxDepth = maxDepth;
+ this.initialBufferSize = initialBufferSize;
+ this.sortKeys = sortKeys;
+ this.forceFloat32 = forceFloat32;
+ this.pos = 0;
+ this.view = new DataView(new ArrayBuffer(this.initialBufferSize));
+ this.bytes = new Uint8Array(this.view.buffer);
+ }
+ Encoder.prototype.encode = function (object, depth) {
+ if (depth > this.maxDepth) {
+ throw new Error("Too deep objects in depth " + depth);
+ }
+ if (object == null) {
+ this.encodeNil();
+ }
+ else if (typeof object === "boolean") {
+ this.encodeBoolean(object);
+ }
+ else if (typeof object === "number") {
+ this.encodeNumber(object);
+ }
+ else if (typeof object === "string") {
+ this.encodeString(object);
+ }
+ else {
+ this.encodeObject(object, depth);
+ }
+ };
+ Encoder.prototype.getUint8Array = function () {
+ return this.bytes.subarray(0, this.pos);
+ };
+ Encoder.prototype.ensureBufferSizeToWrite = function (sizeToWrite) {
+ var requiredSize = this.pos + sizeToWrite;
+ if (this.view.byteLength < requiredSize) {
+ this.resizeBuffer(requiredSize * 2);
+ }
+ };
+ Encoder.prototype.resizeBuffer = function (newSize) {
+ var newBuffer = new ArrayBuffer(newSize);
+ var newBytes = new Uint8Array(newBuffer);
+ var newView = new DataView(newBuffer);
+ newBytes.set(this.bytes);
+ this.view = newView;
+ this.bytes = newBytes;
+ };
+ Encoder.prototype.encodeNil = function () {
+ this.writeU8(0xc0);
+ };
+ Encoder.prototype.encodeBoolean = function (object) {
+ if (object === false) {
+ this.writeU8(0xc2);
+ }
+ else {
+ this.writeU8(0xc3);
+ }
+ };
+ Encoder.prototype.encodeNumber = function (object) {
+ if (Number.isSafeInteger(object)) {
+ if (object >= 0) {
+ if (object < 0x80) {
+ // positive fixint
+ this.writeU8(object);
+ }
+ else if (object < 0x100) {
+ // uint 8
+ this.writeU8(0xcc);
+ this.writeU8(object);
+ }
+ else if (object < 0x10000) {
+ // uint 16
+ this.writeU8(0xcd);
+ this.writeU16(object);
+ }
+ else if (object < 0x100000000) {
+ // uint 32
+ this.writeU8(0xce);
+ this.writeU32(object);
+ }
+ else {
+ // uint 64
+ this.writeU8(0xcf);
+ this.writeU64(object);
+ }
+ }
+ else {
+ if (object >= -0x20) {
+ // nagative fixint
+ this.writeU8(0xe0 | (object + 0x20));
+ }
+ else if (object >= -0x80) {
+ // int 8
+ this.writeU8(0xd0);
+ this.writeI8(object);
+ }
+ else if (object >= -0x8000) {
+ // int 16
+ this.writeU8(0xd1);
+ this.writeI16(object);
+ }
+ else if (object >= -0x80000000) {
+ // int 32
+ this.writeU8(0xd2);
+ this.writeI32(object);
+ }
+ else {
+ // int 64
+ this.writeU8(0xd3);
+ this.writeI64(object);
+ }
+ }
+ }
+ else {
+ // non-integer numbers
+ if (this.forceFloat32) {
+ // float 32
+ this.writeU8(0xca);
+ this.writeF32(object);
+ }
+ else {
+ // float 64
+ this.writeU8(0xcb);
+ this.writeF64(object);
+ }
+ }
+ };
+ Encoder.prototype.writeStringHeader = function (byteLength) {
+ if (byteLength < 32) {
+ // fixstr
+ this.writeU8(0xa0 + byteLength);
+ }
+ else if (byteLength < 0x100) {
+ // str 8
+ this.writeU8(0xd9);
+ this.writeU8(byteLength);
+ }
+ else if (byteLength < 0x10000) {
+ // str 16
+ this.writeU8(0xda);
+ this.writeU16(byteLength);
+ }
+ else if (byteLength < 0x100000000) {
+ // str 32
+ this.writeU8(0xdb);
+ this.writeU32(byteLength);
+ }
+ else {
+ throw new Error("Too long string: " + byteLength + " bytes in UTF-8");
+ }
+ };
+ Encoder.prototype.encodeString = function (object) {
+ var maxHeaderSize = 1 + 4;
+ var strLength = object.length;
+ if (TEXT_ENCODING_AVAILABLE && strLength > TEXT_ENCODER_THRESHOLD) {
+ var byteLength = utf8Count(object);
+ this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);
+ this.writeStringHeader(byteLength);
+ utf8EncodeTE(object, this.bytes, this.pos);
+ this.pos += byteLength;
+ }
+ else {
+ var byteLength = utf8Count(object);
+ this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);
+ this.writeStringHeader(byteLength);
+ utf8EncodeJs(object, this.bytes, this.pos);
+ this.pos += byteLength;
+ }
+ };
+ Encoder.prototype.encodeObject = function (object, depth) {
+ // try to encode objects with custom codec first of non-primitives
+ var ext = this.extensionCodec.tryToEncode(object, this.context);
+ if (ext != null) {
+ this.encodeExtension(ext);
+ }
+ else if (Array.isArray(object)) {
+ this.encodeArray(object, depth);
+ }
+ else if (ArrayBuffer.isView(object)) {
+ this.encodeBinary(object);
+ }
+ else if (typeof object === "object") {
+ this.encodeMap(object, depth);
+ }
+ else {
+ // symbol, function and other special object come here unless extensionCodec handles them.
+ throw new Error("Unrecognized object: " + Object.prototype.toString.apply(object));
+ }
+ };
+ Encoder.prototype.encodeBinary = function (object) {
+ var size = object.byteLength;
+ if (size < 0x100) {
+ // bin 8
+ this.writeU8(0xc4);
+ this.writeU8(size);
+ }
+ else if (size < 0x10000) {
+ // bin 16
+ this.writeU8(0xc5);
+ this.writeU16(size);
+ }
+ else if (size < 0x100000000) {
+ // bin 32
+ this.writeU8(0xc6);
+ this.writeU32(size);
+ }
+ else {
+ throw new Error("Too large binary: " + size);
+ }
+ var bytes = ensureUint8Array(object);
+ this.writeU8a(bytes);
+ };
+ Encoder.prototype.encodeArray = function (object, depth) {
+ var e_1, _a;
+ var size = object.length;
+ if (size < 16) {
+ // fixarray
+ this.writeU8(0x90 + size);
+ }
+ else if (size < 0x10000) {
+ // array 16
+ this.writeU8(0xdc);
+ this.writeU16(size);
+ }
+ else if (size < 0x100000000) {
+ // array 32
+ this.writeU8(0xdd);
+ this.writeU32(size);
+ }
+ else {
+ throw new Error("Too large array: " + size);
+ }
+ try {
+ for (var object_1 = Encoder_values(object), object_1_1 = object_1.next(); !object_1_1.done; object_1_1 = object_1.next()) {
+ var item = object_1_1.value;
+ this.encode(item, depth + 1);
+ }
+ }
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
+ finally {
+ try {
+ if (object_1_1 && !object_1_1.done && (_a = object_1.return)) _a.call(object_1);
+ }
+ finally { if (e_1) throw e_1.error; }
+ }
+ };
+ Encoder.prototype.encodeMap = function (object, depth) {
+ var keys = Object.keys(object);
+ if (this.sortKeys) {
+ keys.sort();
+ }
+ var size = keys.length;
+ if (size < 16) {
+ // fixmap
+ this.writeU8(0x80 + size);
+ }
+ else if (size < 0x10000) {
+ // map 16
+ this.writeU8(0xde);
+ this.writeU16(size);
+ }
+ else if (size < 0x100000000) {
+ // map 32
+ this.writeU8(0xdf);
+ this.writeU32(size);
+ }
+ else {
+ throw new Error("Too large map object: " + size);
+ }
+ for (var i = 0; i < size; i++) {
+ var key = keys[i];
+ this.encodeString(key);
+ this.encode(object[key], depth + 1);
+ }
+ };
+ Encoder.prototype.encodeExtension = function (ext) {
+ var size = ext.data.length;
+ if (size === 1) {
+ // fixext 1
+ this.writeU8(0xd4);
+ }
+ else if (size === 2) {
+ // fixext 2
+ this.writeU8(0xd5);
+ }
+ else if (size === 4) {
+ // fixext 4
+ this.writeU8(0xd6);
+ }
+ else if (size === 8) {
+ // fixext 8
+ this.writeU8(0xd7);
+ }
+ else if (size === 16) {
+ // fixext 16
+ this.writeU8(0xd8);
+ }
+ else if (size < 0x100) {
+ // ext 8
+ this.writeU8(0xc7);
+ this.writeU8(size);
+ }
+ else if (size < 0x10000) {
+ // ext 16
+ this.writeU8(0xc8);
+ this.writeU16(size);
+ }
+ else if (size < 0x100000000) {
+ // ext 32
+ this.writeU8(0xc9);
+ this.writeU32(size);
+ }
+ else {
+ throw new Error("Too large extension object: " + size);
+ }
+ this.writeI8(ext.type);
+ this.writeU8a(ext.data);
+ };
+ Encoder.prototype.writeU8 = function (value) {
+ this.ensureBufferSizeToWrite(1);
+ this.view.setUint8(this.pos, value);
+ this.pos++;
+ };
+ Encoder.prototype.writeU8a = function (values) {
+ var size = values.length;
+ this.ensureBufferSizeToWrite(size);
+ this.bytes.set(values, this.pos);
+ this.pos += size;
+ };
+ Encoder.prototype.writeI8 = function (value) {
+ this.ensureBufferSizeToWrite(1);
+ this.view.setInt8(this.pos, value);
+ this.pos++;
+ };
+ Encoder.prototype.writeU16 = function (value) {
+ this.ensureBufferSizeToWrite(2);
+ this.view.setUint16(this.pos, value);
+ this.pos += 2;
+ };
+ Encoder.prototype.writeI16 = function (value) {
+ this.ensureBufferSizeToWrite(2);
+ this.view.setInt16(this.pos, value);
+ this.pos += 2;
+ };
+ Encoder.prototype.writeU32 = function (value) {
+ this.ensureBufferSizeToWrite(4);
+ this.view.setUint32(this.pos, value);
+ this.pos += 4;
+ };
+ Encoder.prototype.writeI32 = function (value) {
+ this.ensureBufferSizeToWrite(4);
+ this.view.setInt32(this.pos, value);
+ this.pos += 4;
+ };
+ Encoder.prototype.writeF32 = function (value) {
+ this.ensureBufferSizeToWrite(4);
+ this.view.setFloat32(this.pos, value);
+ this.pos += 4;
+ };
+ Encoder.prototype.writeF64 = function (value) {
+ this.ensureBufferSizeToWrite(8);
+ this.view.setFloat64(this.pos, value);
+ this.pos += 8;
+ };
+ Encoder.prototype.writeU64 = function (value) {
+ this.ensureBufferSizeToWrite(8);
+ setUint64(this.view, this.pos, value);
+ this.pos += 8;
+ };
+ Encoder.prototype.writeI64 = function (value) {
+ this.ensureBufferSizeToWrite(8);
+ setInt64(this.view, this.pos, value);
+ this.pos += 8;
+ };
+ return Encoder;
+}());
+
+
+// CONCATENATED MODULE: ./src/encode.ts
+
+var defaultEncodeOptions = {};
+/**
+ * It encodes `value` in the MessagePack format and
+ * returns a byte buffer.
+ *
+ * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.
+ */
+function encode(value, options) {
+ if (options === void 0) { options = defaultEncodeOptions; }
+ var encoder = new Encoder_Encoder(options.extensionCodec, options.context, options.maxDepth, options.initialBufferSize, options.sortKeys, options.forceFloat32);
+ encoder.encode(value, 1);
+ return encoder.getUint8Array();
+}
+
+// CONCATENATED MODULE: ./src/utils/prettyByte.ts
+function prettyByte(byte) {
+ return (byte < 0 ? "-" : "") + "0x" + Math.abs(byte)
+ .toString(16)
+ .padStart(2, "0");
+}
+
+// CONCATENATED MODULE: ./src/CachedKeyDecoder.ts
+
+var DEFAULT_MAX_KEY_LENGTH = 16;
+var DEFAULT_MAX_LENGTH_PER_KEY = 16;
+var CachedKeyDecoder_CachedKeyDecoder = /** @class */ (function () {
+ function CachedKeyDecoder(maxKeyLength, maxLengthPerKey) {
+ if (maxKeyLength === void 0) { maxKeyLength = DEFAULT_MAX_KEY_LENGTH; }
+ if (maxLengthPerKey === void 0) { maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY; }
+ this.maxKeyLength = maxKeyLength;
+ this.maxLengthPerKey = maxLengthPerKey;
+ // avoid `new Array(N)` to create a non-sparse array for performance.
+ this.caches = [];
+ for (var i = 0; i < this.maxKeyLength; i++) {
+ this.caches.push([]);
+ }
+ }
+ CachedKeyDecoder.prototype.canBeCached = function (byteLength) {
+ return byteLength > 0 && byteLength <= this.maxKeyLength;
+ };
+ CachedKeyDecoder.prototype.get = function (bytes, inputOffset, byteLength) {
+ var records = this.caches[byteLength - 1];
+ var recordsLength = records.length;
+ FIND_CHUNK: for (var i = 0; i < recordsLength; i++) {
+ var record = records[i];
+ var recordBytes = record.bytes;
+ for (var j = 0; j < byteLength; j++) {
+ if (recordBytes[j] !== bytes[inputOffset + j]) {
+ continue FIND_CHUNK;
+ }
+ }
+ return record.value;
+ }
+ return null;
+ };
+ CachedKeyDecoder.prototype.store = function (bytes, value) {
+ var records = this.caches[bytes.length - 1];
+ var record = { bytes: bytes, value: value };
+ if (records.length >= this.maxLengthPerKey) {
+ // `records` are full!
+ // Set `record` to a randomized position.
+ records[(Math.random() * records.length) | 0] = record;
+ }
+ else {
+ records.push(record);
+ }
+ };
+ CachedKeyDecoder.prototype.decode = function (bytes, inputOffset, byteLength) {
+ var cachedValue = this.get(bytes, inputOffset, byteLength);
+ if (cachedValue != null) {
+ return cachedValue;
+ }
+ var value = utf8DecodeJs(bytes, inputOffset, byteLength);
+ // Ensure to copy a slice of bytes because the byte may be NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.
+ var slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);
+ this.store(slicedCopyOfBytes, value);
+ return value;
+ };
+ return CachedKeyDecoder;
+}());
+
+
+// CONCATENATED MODULE: ./src/Decoder.ts
+var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ 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;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+};
+var __asyncValues = (undefined && undefined.__asyncValues) || function (o) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var m = o[Symbol.asyncIterator], i;
+ 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);
+ 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); }); }; }
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+};
+var __await = (undefined && undefined.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
+var __asyncGenerator = (undefined && undefined.__asyncGenerator) || function (thisArg, _arguments, generator) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
+ 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); }); }; }
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+ function fulfill(value) { resume("next", value); }
+ function reject(value) { resume("throw", value); }
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+};
+
+
+
+
+
+
+var isValidMapKeyType = function (key) {
+ var keyType = typeof key;
+ return keyType === "string" || keyType === "number";
+};
+var HEAD_BYTE_REQUIRED = -1;
+var EMPTY_VIEW = new DataView(new ArrayBuffer(0));
+var EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer);
+// IE11: Hack to support IE11.
+// IE11: Drop this hack and just use RangeError when IE11 is obsolete.
+var DataViewIndexOutOfBoundsError = (function () {
+ try {
+ // IE11: The spec says it should throw RangeError,
+ // IE11: but in IE11 it throws TypeError.
+ EMPTY_VIEW.getInt8(0);
+ }
+ catch (e) {
+ return e.constructor;
+ }
+ throw new Error("never reached");
+})();
+var MORE_DATA = new DataViewIndexOutOfBoundsError("Insufficient data");
+var DEFAULT_MAX_LENGTH = 4294967295; // uint32_max
+var sharedCachedKeyDecoder = new CachedKeyDecoder_CachedKeyDecoder();
+var Decoder_Decoder = /** @class */ (function () {
+ function Decoder(extensionCodec, context, maxStrLength, maxBinLength, maxArrayLength, maxMapLength, maxExtLength, cachedKeyDecoder) {
+ if (extensionCodec === void 0) { extensionCodec = ExtensionCodec_ExtensionCodec.defaultCodec; }
+ if (maxStrLength === void 0) { maxStrLength = DEFAULT_MAX_LENGTH; }
+ if (maxBinLength === void 0) { maxBinLength = DEFAULT_MAX_LENGTH; }
+ if (maxArrayLength === void 0) { maxArrayLength = DEFAULT_MAX_LENGTH; }
+ if (maxMapLength === void 0) { maxMapLength = DEFAULT_MAX_LENGTH; }
+ if (maxExtLength === void 0) { maxExtLength = DEFAULT_MAX_LENGTH; }
+ if (cachedKeyDecoder === void 0) { cachedKeyDecoder = sharedCachedKeyDecoder; }
+ this.extensionCodec = extensionCodec;
+ this.context = context;
+ this.maxStrLength = maxStrLength;
+ this.maxBinLength = maxBinLength;
+ this.maxArrayLength = maxArrayLength;
+ this.maxMapLength = maxMapLength;
+ this.maxExtLength = maxExtLength;
+ this.cachedKeyDecoder = cachedKeyDecoder;
+ this.totalPos = 0;
+ this.pos = 0;
+ this.view = EMPTY_VIEW;
+ this.bytes = EMPTY_BYTES;
+ this.headByte = HEAD_BYTE_REQUIRED;
+ this.stack = [];
+ }
+ Decoder.prototype.setBuffer = function (buffer) {
+ this.bytes = ensureUint8Array(buffer);
+ this.view = createDataView(this.bytes);
+ this.pos = 0;
+ };
+ Decoder.prototype.appendBuffer = function (buffer) {
+ if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining()) {
+ this.setBuffer(buffer);
+ }
+ else {
+ // retried because data is insufficient
+ var remainingData = this.bytes.subarray(this.pos);
+ var newData = ensureUint8Array(buffer);
+ var concated = new Uint8Array(remainingData.length + newData.length);
+ concated.set(remainingData);
+ concated.set(newData, remainingData.length);
+ this.setBuffer(concated);
+ }
+ };
+ Decoder.prototype.hasRemaining = function (size) {
+ if (size === void 0) { size = 1; }
+ return this.view.byteLength - this.pos >= size;
+ };
+ Decoder.prototype.createNoExtraBytesError = function (posToShow) {
+ var _a = this, view = _a.view, pos = _a.pos;
+ return new RangeError("Extra " + (view.byteLength - pos) + " byte(s) found at buffer[" + posToShow + "]");
+ };
+ Decoder.prototype.decodeSingleSync = function () {
+ var object = this.decodeSync();
+ if (this.hasRemaining()) {
+ throw this.createNoExtraBytesError(this.pos);
+ }
+ return object;
+ };
+ Decoder.prototype.decodeSingleAsync = function (stream) {
+ var stream_1, stream_1_1;
+ var e_1, _a;
+ return __awaiter(this, void 0, void 0, function () {
+ var decoded, object, buffer, e_1_1, _b, headByte, pos, totalPos;
+ return __generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ decoded = false;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 6, 7, 12]);
+ stream_1 = __asyncValues(stream);
+ _c.label = 2;
+ case 2: return [4 /*yield*/, stream_1.next()];
+ case 3:
+ if (!(stream_1_1 = _c.sent(), !stream_1_1.done)) return [3 /*break*/, 5];
+ buffer = stream_1_1.value;
+ if (decoded) {
+ throw this.createNoExtraBytesError(this.totalPos);
+ }
+ this.appendBuffer(buffer);
+ try {
+ object = this.decodeSync();
+ decoded = true;
+ }
+ catch (e) {
+ if (!(e instanceof DataViewIndexOutOfBoundsError)) {
+ throw e; // rethrow
+ }
+ // fallthrough
+ }
+ this.totalPos += this.pos;
+ _c.label = 4;
+ case 4: return [3 /*break*/, 2];
+ case 5: return [3 /*break*/, 12];
+ case 6:
+ e_1_1 = _c.sent();
+ e_1 = { error: e_1_1 };
+ return [3 /*break*/, 12];
+ case 7:
+ _c.trys.push([7, , 10, 11]);
+ if (!(stream_1_1 && !stream_1_1.done && (_a = stream_1.return))) return [3 /*break*/, 9];
+ return [4 /*yield*/, _a.call(stream_1)];
+ case 8:
+ _c.sent();
+ _c.label = 9;
+ case 9: return [3 /*break*/, 11];
+ case 10:
+ if (e_1) throw e_1.error;
+ return [7 /*endfinally*/];
+ case 11: return [7 /*endfinally*/];
+ case 12:
+ if (decoded) {
+ if (this.hasRemaining()) {
+ throw this.createNoExtraBytesError(this.totalPos);
+ }
+ return [2 /*return*/, object];
+ }
+ _b = this, headByte = _b.headByte, pos = _b.pos, totalPos = _b.totalPos;
+ throw new RangeError("Insufficient data in parcing " + prettyByte(headByte) + " at " + totalPos + " (" + pos + " in the current buffer)");
+ }
+ });
+ });
+ };
+ Decoder.prototype.decodeArrayStream = function (stream) {
+ return this.decodeMultiAsync(stream, true);
+ };
+ Decoder.prototype.decodeStream = function (stream) {
+ return this.decodeMultiAsync(stream, false);
+ };
+ Decoder.prototype.decodeMultiAsync = function (stream, isArray) {
+ return __asyncGenerator(this, arguments, function decodeMultiAsync_1() {
+ var isArrayHeaderRequired, arrayItemsLeft, stream_2, stream_2_1, buffer, e_2, e_3_1;
+ var e_3, _a;
+ return __generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ isArrayHeaderRequired = isArray;
+ arrayItemsLeft = -1;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 13, 14, 19]);
+ stream_2 = __asyncValues(stream);
+ _b.label = 2;
+ case 2: return [4 /*yield*/, __await(stream_2.next())];
+ case 3:
+ if (!(stream_2_1 = _b.sent(), !stream_2_1.done)) return [3 /*break*/, 12];
+ buffer = stream_2_1.value;
+ if (isArray && arrayItemsLeft === 0) {
+ throw this.createNoExtraBytesError(this.totalPos);
+ }
+ this.appendBuffer(buffer);
+ if (isArrayHeaderRequired) {
+ arrayItemsLeft = this.readArraySize();
+ isArrayHeaderRequired = false;
+ this.complete();
+ }
+ _b.label = 4;
+ case 4:
+ _b.trys.push([4, 9, , 10]);
+ _b.label = 5;
+ case 5:
+ if (false) {}
+ return [4 /*yield*/, __await(this.decodeSync())];
+ case 6: return [4 /*yield*/, _b.sent()];
+ case 7:
+ _b.sent();
+ if (--arrayItemsLeft === 0) {
+ return [3 /*break*/, 8];
+ }
+ return [3 /*break*/, 5];
+ case 8: return [3 /*break*/, 10];
+ case 9:
+ e_2 = _b.sent();
+ if (!(e_2 instanceof DataViewIndexOutOfBoundsError)) {
+ throw e_2; // rethrow
+ }
+ return [3 /*break*/, 10];
+ case 10:
+ this.totalPos += this.pos;
+ _b.label = 11;
+ case 11: return [3 /*break*/, 2];
+ case 12: return [3 /*break*/, 19];
+ case 13:
+ e_3_1 = _b.sent();
+ e_3 = { error: e_3_1 };
+ return [3 /*break*/, 19];
+ case 14:
+ _b.trys.push([14, , 17, 18]);
+ if (!(stream_2_1 && !stream_2_1.done && (_a = stream_2.return))) return [3 /*break*/, 16];
+ return [4 /*yield*/, __await(_a.call(stream_2))];
+ case 15:
+ _b.sent();
+ _b.label = 16;
+ case 16: return [3 /*break*/, 18];
+ case 17:
+ if (e_3) throw e_3.error;
+ return [7 /*endfinally*/];
+ case 18: return [7 /*endfinally*/];
+ case 19: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ Decoder.prototype.decodeSync = function () {
+ DECODE: while (true) {
+ var headByte = this.readHeadByte();
+ var object = void 0;
+ if (headByte >= 0xe0) {
+ // negative fixint (111x xxxx) 0xe0 - 0xff
+ object = headByte - 0x100;
+ }
+ else if (headByte < 0xc0) {
+ if (headByte < 0x80) {
+ // positive fixint (0xxx xxxx) 0x00 - 0x7f
+ object = headByte;
+ }
+ else if (headByte < 0x90) {
+ // fixmap (1000 xxxx) 0x80 - 0x8f
+ var size = headByte - 0x80;
+ if (size !== 0) {
+ this.pushMapState(size);
+ this.complete();
+ continue DECODE;
+ }
+ else {
+ object = {};
+ }
+ }
+ else if (headByte < 0xa0) {
+ // fixarray (1001 xxxx) 0x90 - 0x9f
+ var size = headByte - 0x90;
+ if (size !== 0) {
+ this.pushArrayState(size);
+ this.complete();
+ continue DECODE;
+ }
+ else {
+ object = [];
+ }
+ }
+ else {
+ // fixstr (101x xxxx) 0xa0 - 0xbf
+ var byteLength = headByte - 0xa0;
+ object = this.decodeUtf8String(byteLength, 0);
+ }
+ }
+ else if (headByte === 0xc0) {
+ // nil
+ object = null;
+ }
+ else if (headByte === 0xc2) {
+ // false
+ object = false;
+ }
+ else if (headByte === 0xc3) {
+ // true
+ object = true;
+ }
+ else if (headByte === 0xca) {
+ // float 32
+ object = this.readF32();
+ }
+ else if (headByte === 0xcb) {
+ // float 64
+ object = this.readF64();
+ }
+ else if (headByte === 0xcc) {
+ // uint 8
+ object = this.readU8();
+ }
+ else if (headByte === 0xcd) {
+ // uint 16
+ object = this.readU16();
+ }
+ else if (headByte === 0xce) {
+ // uint 32
+ object = this.readU32();
+ }
+ else if (headByte === 0xcf) {
+ // uint 64
+ object = this.readU64();
+ }
+ else if (headByte === 0xd0) {
+ // int 8
+ object = this.readI8();
+ }
+ else if (headByte === 0xd1) {
+ // int 16
+ object = this.readI16();
+ }
+ else if (headByte === 0xd2) {
+ // int 32
+ object = this.readI32();
+ }
+ else if (headByte === 0xd3) {
+ // int 64
+ object = this.readI64();
+ }
+ else if (headByte === 0xd9) {
+ // str 8
+ var byteLength = this.lookU8();
+ object = this.decodeUtf8String(byteLength, 1);
+ }
+ else if (headByte === 0xda) {
+ // str 16
+ var byteLength = this.lookU16();
+ object = this.decodeUtf8String(byteLength, 2);
+ }
+ else if (headByte === 0xdb) {
+ // str 32
+ var byteLength = this.lookU32();
+ object = this.decodeUtf8String(byteLength, 4);
+ }
+ else if (headByte === 0xdc) {
+ // array 16
+ var size = this.readU16();
+ if (size !== 0) {
+ this.pushArrayState(size);
+ this.complete();
+ continue DECODE;
+ }
+ else {
+ object = [];
+ }
+ }
+ else if (headByte === 0xdd) {
+ // array 32
+ var size = this.readU32();
+ if (size !== 0) {
+ this.pushArrayState(size);
+ this.complete();
+ continue DECODE;
+ }
+ else {
+ object = [];
+ }
+ }
+ else if (headByte === 0xde) {
+ // map 16
+ var size = this.readU16();
+ if (size !== 0) {
+ this.pushMapState(size);
+ this.complete();
+ continue DECODE;
+ }
+ else {
+ object = {};
+ }
+ }
+ else if (headByte === 0xdf) {
+ // map 32
+ var size = this.readU32();
+ if (size !== 0) {
+ this.pushMapState(size);
+ this.complete();
+ continue DECODE;
+ }
+ else {
+ object = {};
+ }
+ }
+ else if (headByte === 0xc4) {
+ // bin 8
+ var size = this.lookU8();
+ object = this.decodeBinary(size, 1);
+ }
+ else if (headByte === 0xc5) {
+ // bin 16
+ var size = this.lookU16();
+ object = this.decodeBinary(size, 2);
+ }
+ else if (headByte === 0xc6) {
+ // bin 32
+ var size = this.lookU32();
+ object = this.decodeBinary(size, 4);
+ }
+ else if (headByte === 0xd4) {
+ // fixext 1
+ object = this.decodeExtension(1, 0);
+ }
+ else if (headByte === 0xd5) {
+ // fixext 2
+ object = this.decodeExtension(2, 0);
+ }
+ else if (headByte === 0xd6) {
+ // fixext 4
+ object = this.decodeExtension(4, 0);
+ }
+ else if (headByte === 0xd7) {
+ // fixext 8
+ object = this.decodeExtension(8, 0);
+ }
+ else if (headByte === 0xd8) {
+ // fixext 16
+ object = this.decodeExtension(16, 0);
+ }
+ else if (headByte === 0xc7) {
+ // ext 8
+ var size = this.lookU8();
+ object = this.decodeExtension(size, 1);
+ }
+ else if (headByte === 0xc8) {
+ // ext 16
+ var size = this.lookU16();
+ object = this.decodeExtension(size, 2);
+ }
+ else if (headByte === 0xc9) {
+ // ext 32
+ var size = this.lookU32();
+ object = this.decodeExtension(size, 4);
+ }
+ else {
+ throw new Error("Unrecognized type byte: " + prettyByte(headByte));
+ }
+ this.complete();
+ var stack = this.stack;
+ while (stack.length > 0) {
+ // arrays and maps
+ var state = stack[stack.length - 1];
+ if (state.type === 0 /* ARRAY */) {
+ state.array[state.position] = object;
+ state.position++;
+ if (state.position === state.size) {
+ stack.pop();
+ object = state.array;
+ }
+ else {
+ continue DECODE;
+ }
+ }
+ else if (state.type === 1 /* MAP_KEY */) {
+ if (!isValidMapKeyType(object)) {
+ throw new Error("The type of key must be string or number but " + typeof object);
+ }
+ state.key = object;
+ state.type = 2 /* MAP_VALUE */;
+ continue DECODE;
+ }
+ else {
+ // it must be `state.type === State.MAP_VALUE` here
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ state.map[state.key] = object;
+ state.readCount++;
+ if (state.readCount === state.size) {
+ stack.pop();
+ object = state.map;
+ }
+ else {
+ state.key = null;
+ state.type = 1 /* MAP_KEY */;
+ continue DECODE;
+ }
+ }
+ }
+ return object;
+ }
+ };
+ Decoder.prototype.readHeadByte = function () {
+ if (this.headByte === HEAD_BYTE_REQUIRED) {
+ this.headByte = this.readU8();
+ // console.log("headByte", prettyByte(this.headByte));
+ }
+ return this.headByte;
+ };
+ Decoder.prototype.complete = function () {
+ this.headByte = HEAD_BYTE_REQUIRED;
+ };
+ Decoder.prototype.readArraySize = function () {
+ var headByte = this.readHeadByte();
+ switch (headByte) {
+ case 0xdc:
+ return this.readU16();
+ case 0xdd:
+ return this.readU32();
+ default: {
+ if (headByte < 0xa0) {
+ return headByte - 0x90;
+ }
+ else {
+ throw new Error("Unrecognized array type byte: " + prettyByte(headByte));
+ }
+ }
+ }
+ };
+ Decoder.prototype.pushMapState = function (size) {
+ if (size > this.maxMapLength) {
+ throw new Error("Max length exceeded: map length (" + size + ") > maxMapLengthLength (" + this.maxMapLength + ")");
+ }
+ this.stack.push({
+ type: 1 /* MAP_KEY */,
+ size: size,
+ key: null,
+ readCount: 0,
+ map: {},
+ });
+ };
+ Decoder.prototype.pushArrayState = function (size) {
+ if (size > this.maxArrayLength) {
+ throw new Error("Max length exceeded: array length (" + size + ") > maxArrayLength (" + this.maxArrayLength + ")");
+ }
+ this.stack.push({
+ type: 0 /* ARRAY */,
+ size: size,
+ array: new Array(size),
+ position: 0,
+ });
+ };
+ Decoder.prototype.decodeUtf8String = function (byteLength, headerOffset) {
+ var _a;
+ if (byteLength > this.maxStrLength) {
+ throw new Error("Max length exceeded: UTF-8 byte length (" + byteLength + ") > maxStrLength (" + this.maxStrLength + ")");
+ }
+ if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {
+ throw MORE_DATA;
+ }
+ var offset = this.pos + headerOffset;
+ var object;
+ if (this.stateIsMapKey() && ((_a = this.cachedKeyDecoder) === null || _a === void 0 ? void 0 : _a.canBeCached(byteLength))) {
+ object = this.cachedKeyDecoder.decode(this.bytes, offset, byteLength);
+ }
+ else if (TEXT_ENCODING_AVAILABLE && byteLength > TEXT_DECODER_THRESHOLD) {
+ object = utf8DecodeTD(this.bytes, offset, byteLength);
+ }
+ else {
+ object = utf8DecodeJs(this.bytes, offset, byteLength);
+ }
+ this.pos += headerOffset + byteLength;
+ return object;
+ };
+ Decoder.prototype.stateIsMapKey = function () {
+ if (this.stack.length > 0) {
+ var state = this.stack[this.stack.length - 1];
+ return state.type === 1 /* MAP_KEY */;
+ }
+ return false;
+ };
+ Decoder.prototype.decodeBinary = function (byteLength, headOffset) {
+ if (byteLength > this.maxBinLength) {
+ throw new Error("Max length exceeded: bin length (" + byteLength + ") > maxBinLength (" + this.maxBinLength + ")");
+ }
+ if (!this.hasRemaining(byteLength + headOffset)) {
+ throw MORE_DATA;
+ }
+ var offset = this.pos + headOffset;
+ var object = this.bytes.subarray(offset, offset + byteLength);
+ this.pos += headOffset + byteLength;
+ return object;
+ };
+ Decoder.prototype.decodeExtension = function (size, headOffset) {
+ if (size > this.maxExtLength) {
+ throw new Error("Max length exceeded: ext length (" + size + ") > maxExtLength (" + this.maxExtLength + ")");
+ }
+ var extType = this.view.getInt8(this.pos + headOffset);
+ var data = this.decodeBinary(size, headOffset + 1 /* extType */);
+ return this.extensionCodec.decode(data, extType, this.context);
+ };
+ Decoder.prototype.lookU8 = function () {
+ return this.view.getUint8(this.pos);
+ };
+ Decoder.prototype.lookU16 = function () {
+ return this.view.getUint16(this.pos);
+ };
+ Decoder.prototype.lookU32 = function () {
+ return this.view.getUint32(this.pos);
+ };
+ Decoder.prototype.readU8 = function () {
+ var value = this.view.getUint8(this.pos);
+ this.pos++;
+ return value;
+ };
+ Decoder.prototype.readI8 = function () {
+ var value = this.view.getInt8(this.pos);
+ this.pos++;
+ return value;
+ };
+ Decoder.prototype.readU16 = function () {
+ var value = this.view.getUint16(this.pos);
+ this.pos += 2;
+ return value;
+ };
+ Decoder.prototype.readI16 = function () {
+ var value = this.view.getInt16(this.pos);
+ this.pos += 2;
+ return value;
+ };
+ Decoder.prototype.readU32 = function () {
+ var value = this.view.getUint32(this.pos);
+ this.pos += 4;
+ return value;
+ };
+ Decoder.prototype.readI32 = function () {
+ var value = this.view.getInt32(this.pos);
+ this.pos += 4;
+ return value;
+ };
+ Decoder.prototype.readU64 = function () {
+ var value = getUint64(this.view, this.pos);
+ this.pos += 8;
+ return value;
+ };
+ Decoder.prototype.readI64 = function () {
+ var value = getInt64(this.view, this.pos);
+ this.pos += 8;
+ return value;
+ };
+ Decoder.prototype.readF32 = function () {
+ var value = this.view.getFloat32(this.pos);
+ this.pos += 4;
+ return value;
+ };
+ Decoder.prototype.readF64 = function () {
+ var value = this.view.getFloat64(this.pos);
+ this.pos += 8;
+ return value;
+ };
+ return Decoder;
+}());
+
+
+// CONCATENATED MODULE: ./src/decode.ts
+
+var defaultDecodeOptions = {};
+/**
+ * It decodes a MessagePack-encoded buffer.
+ *
+ * This is a synchronous decoding function. See other variants for asynchronous decoding: `decodeAsync()`, `decodeStream()`, `decodeArrayStream()`.
+ */
+function decode(buffer, options) {
+ if (options === void 0) { options = defaultDecodeOptions; }
+ var decoder = new Decoder_Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);
+ decoder.setBuffer(buffer); // decodeSync() requires only one buffer
+ return decoder.decodeSingleSync();
+}
+
+// CONCATENATED MODULE: ./src/utils/stream.ts
+// utility for whatwg streams
+var stream_generator = (undefined && undefined.__generator) || function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ 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;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+};
+var stream_await = (undefined && undefined.__await) || function (v) { return this instanceof stream_await ? (this.v = v, this) : new stream_await(v); }
+var stream_asyncGenerator = (undefined && undefined.__asyncGenerator) || function (thisArg, _arguments, generator) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
+ 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); }); }; }
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+ function step(r) { r.value instanceof stream_await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+ function fulfill(value) { resume("next", value); }
+ function reject(value) { resume("throw", value); }
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+};
+function isAsyncIterable(object) {
+ return object[Symbol.asyncIterator] != null;
+}
+function asyncIterableFromStream(stream) {
+ return stream_asyncGenerator(this, arguments, function asyncIterableFromStream_1() {
+ var reader, _a, done, value;
+ return stream_generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ reader = stream.getReader();
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, , 9, 10]);
+ _b.label = 2;
+ case 2:
+ if (false) {}
+ return [4 /*yield*/, stream_await(reader.read())];
+ case 3:
+ _a = _b.sent(), done = _a.done, value = _a.value;
+ if (!done) return [3 /*break*/, 5];
+ return [4 /*yield*/, stream_await(void 0)];
+ case 4: return [2 /*return*/, _b.sent()];
+ case 5: return [4 /*yield*/, stream_await(value)];
+ case 6: return [4 /*yield*/, _b.sent()];
+ case 7:
+ _b.sent();
+ return [3 /*break*/, 2];
+ case 8: return [3 /*break*/, 10];
+ case 9:
+ reader.releaseLock();
+ return [7 /*endfinally*/];
+ case 10: return [2 /*return*/];
+ }
+ });
+ });
+}
+function ensureAsyncIterabe(streamLike) {
+ if (isAsyncIterable(streamLike)) {
+ return streamLike;
+ }
+ else {
+ return asyncIterableFromStream(streamLike);
+ }
+}
+
+// CONCATENATED MODULE: ./src/decodeAsync.ts
+var decodeAsync_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var decodeAsync_generator = (undefined && undefined.__generator) || function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ 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;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+};
+
+
+
+function decodeAsync(streamLike, options) {
+ if (options === void 0) { options = defaultDecodeOptions; }
+ return decodeAsync_awaiter(this, void 0, void 0, function () {
+ var stream, decoder;
+ return decodeAsync_generator(this, function (_a) {
+ stream = ensureAsyncIterabe(streamLike);
+ decoder = new Decoder_Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);
+ return [2 /*return*/, decoder.decodeSingleAsync(stream)];
+ });
+ });
+}
+function decodeArrayStream(streamLike, options) {
+ if (options === void 0) { options = defaultDecodeOptions; }
+ var stream = ensureAsyncIterabe(streamLike);
+ var decoder = new Decoder_Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);
+ return decoder.decodeArrayStream(stream);
+}
+function decodeStream(streamLike, options) {
+ if (options === void 0) { options = defaultDecodeOptions; }
+ var stream = ensureAsyncIterabe(streamLike);
+ var decoder = new Decoder_Decoder(options.extensionCodec, options.context, options.maxStrLength, options.maxBinLength, options.maxArrayLength, options.maxMapLength, options.maxExtLength);
+ return decoder.decodeStream(stream);
+}
+
+// CONCATENATED MODULE: ./src/index.ts
+/* concated harmony reexport encode */__webpack_require__.d(__webpack_exports__, "encode", function() { return encode; });
+/* concated harmony reexport decode */__webpack_require__.d(__webpack_exports__, "decode", function() { return decode; });
+/* concated harmony reexport decodeAsync */__webpack_require__.d(__webpack_exports__, "decodeAsync", function() { return decodeAsync; });
+/* concated harmony reexport decodeArrayStream */__webpack_require__.d(__webpack_exports__, "decodeArrayStream", function() { return decodeArrayStream; });
+/* concated harmony reexport decodeStream */__webpack_require__.d(__webpack_exports__, "decodeStream", function() { return decodeStream; });
+/* concated harmony reexport Decoder */__webpack_require__.d(__webpack_exports__, "Decoder", function() { return Decoder_Decoder; });
+/* concated harmony reexport Encoder */__webpack_require__.d(__webpack_exports__, "Encoder", function() { return Encoder_Encoder; });
+/* concated harmony reexport ExtensionCodec */__webpack_require__.d(__webpack_exports__, "ExtensionCodec", function() { return ExtensionCodec_ExtensionCodec; });
+/* concated harmony reexport ExtData */__webpack_require__.d(__webpack_exports__, "ExtData", function() { return ExtData; });
+/* concated harmony reexport EXT_TIMESTAMP */__webpack_require__.d(__webpack_exports__, "EXT_TIMESTAMP", function() { return EXT_TIMESTAMP; });
+/* concated harmony reexport encodeDateToTimeSpec */__webpack_require__.d(__webpack_exports__, "encodeDateToTimeSpec", function() { return encodeDateToTimeSpec; });
+/* concated harmony reexport encodeTimeSpecToTimestamp */__webpack_require__.d(__webpack_exports__, "encodeTimeSpecToTimestamp", function() { return encodeTimeSpecToTimestamp; });
+/* concated harmony reexport decodeTimestampToTimeSpec */__webpack_require__.d(__webpack_exports__, "decodeTimestampToTimeSpec", function() { return decodeTimestampToTimeSpec; });
+/* concated harmony reexport encodeTimestampExtension */__webpack_require__.d(__webpack_exports__, "encodeTimestampExtension", function() { return encodeTimestampExtension; });
+/* concated harmony reexport decodeTimestampExtension */__webpack_require__.d(__webpack_exports__, "decodeTimestampExtension", function() { return decodeTimestampExtension; });
+// Main Functions:
+
+
+
+/**
+ * @experimental `Decoder` is exported for experimental use.
+ */
+
+/**
+ * @experimental `Encoder` is exported for experimental use.
+ */
+
+// Utilitiies for Extension Types:
+
+
+
+
+
+/***/ })
+/******/ ]);
+});
+//# sourceMappingURL=msgpack.js.map
\ No newline at end of file
diff --git a/Server/wwwroot/lib/msgpack/msgpack.js.map b/Server/wwwroot/lib/msgpack/msgpack.js.map
new file mode 100644
index 00000000..e426b105
--- /dev/null
+++ b/Server/wwwroot/lib/msgpack/msgpack.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack://MessagePack/webpack/universalModuleDefinition","webpack://MessagePack/webpack/bootstrap","webpack://MessagePack/./src/utils/utf8.ts","webpack://MessagePack/./src/ExtData.ts","webpack://MessagePack/./src/utils/int.ts","webpack://MessagePack/./src/timestamp.ts","webpack://MessagePack/./src/ExtensionCodec.ts","webpack://MessagePack/./src/utils/typedArrays.ts","webpack://MessagePack/./src/Encoder.ts","webpack://MessagePack/./src/encode.ts","webpack://MessagePack/./src/utils/prettyByte.ts","webpack://MessagePack/./src/CachedKeyDecoder.ts","webpack://MessagePack/./src/Decoder.ts","webpack://MessagePack/./src/decode.ts","webpack://MessagePack/./src/utils/stream.ts","webpack://MessagePack/./src/decodeAsync.ts","webpack://MessagePack/./src/index.ts"],"names":[],"mappings":"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","file":"msgpack.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"MessagePack\"] = factory();\n\telse\n\t\troot[\"MessagePack\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export const TEXT_ENCODING_AVAILABLE =\n process.env.TEXT_ENCODING !== \"never\" && typeof TextEncoder !== \"undefined\" && typeof TextDecoder !== \"undefined\";\n\nexport function utf8Count(str: string): number {\n const strLength = str.length;\n\n let byteLength = 0;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n } else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\n\nexport function utf8EncodeJs(str: string, output: Uint8Array, outputOffset: number): void {\n const strLength = str.length;\n let offset = outputOffset;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n } else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\n\nconst sharedTextEncoder = TEXT_ENCODING_AVAILABLE ? new TextEncoder() : undefined;\nexport const TEXT_ENCODER_THRESHOLD = process.env.TEXT_ENCODING !== \"force\" ? 200 : 0;\n\nfunction utf8EncodeTEencode(str: string, output: Uint8Array, outputOffset: number): void {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n output.set(sharedTextEncoder!.encode(str), outputOffset);\n}\n\nfunction utf8EncodeTEencodeInto(str: string, output: Uint8Array, outputOffset: number): void {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n sharedTextEncoder!.encodeInto(str, output.subarray(outputOffset));\n}\n\nexport const utf8EncodeTE = sharedTextEncoder?.encodeInto ? utf8EncodeTEencodeInto : utf8EncodeTEencode;\n\nconst CHUNK_SIZE = 0x1_000;\n\nexport function utf8DecodeJs(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n let offset = inputOffset;\n const end = offset + byteLength;\n\n const units: Array = [];\n let result = \"\";\n while (offset < end) {\n const byte1 = bytes[offset++];\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n } else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n const byte2 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n } else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n const byte2 = bytes[offset++] & 0x3f;\n const byte3 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n } else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n const byte2 = bytes[offset++] & 0x3f;\n const byte3 = bytes[offset++] & 0x3f;\n const byte4 = bytes[offset++] & 0x3f;\n let unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n } else {\n units.push(byte1);\n }\n\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode(...units);\n units.length = 0;\n }\n }\n\n if (units.length > 0) {\n result += String.fromCharCode(...units);\n }\n\n return result;\n}\n\nconst sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null;\nexport const TEXT_DECODER_THRESHOLD = process.env.TEXT_DECODER !== \"force\" ? 200 : 0;\n\nexport function utf8DecodeTD(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return sharedTextDecoder!.decode(stringBytes);\n}\n","/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nexport class ExtData {\n constructor(readonly type: number, readonly data: Uint8Array) {}\n}\n","// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\n\nexport function setUint64(view: DataView, offset: number, value: number): void {\n const high = value / 0x1_0000_0000;\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function setInt64(view: DataView, offset: number, value: number): void {\n const high = Math.floor(value / 0x1_0000_0000);\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function getInt64(view: DataView, offset: number) {\n const high = view.getInt32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n\nexport function getUint64(view: DataView, offset: number) {\n const high = view.getUint32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n","// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { getInt64, setInt64 } from \"./utils/int\";\n\nexport const EXT_TIMESTAMP = -1;\n\nexport type TimeSpec = {\n sec: number;\n nsec: number;\n};\n\nconst TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nconst TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\n\nexport function encodeTimeSpecToTimestamp({ sec, nsec }: TimeSpec): Uint8Array {\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n const rv = new Uint8Array(4);\n const view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n } else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n const secHigh = sec / 0x100000000;\n const secLow = sec & 0xffffffff;\n const rv = new Uint8Array(8);\n const view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n } else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n const rv = new Uint8Array(12);\n const view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\n\nexport function encodeDateToTimeSpec(date: Date): TimeSpec {\n const msec = date.getTime();\n const sec = Math.floor(msec / 1e3);\n const nsec = (msec - sec * 1e3) * 1e6;\n\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n const nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\n\nexport function encodeTimestampExtension(object: unknown): Uint8Array | null {\n if (object instanceof Date) {\n const timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n } else {\n return null;\n }\n}\n\nexport function decodeTimestampToTimeSpec(data: Uint8Array): TimeSpec {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n const sec = view.getUint32(0);\n const nsec = 0;\n return { sec, nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n const nsec30AndSecHigh2 = view.getUint32(0);\n const secLow32 = view.getUint32(4);\n const sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n const nsec = nsec30AndSecHigh2 >>> 2;\n return { sec, nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n\n const sec = getInt64(view, 4);\n const nsec = view.getUint32(0);\n return { sec, nsec };\n }\n default:\n throw new Error(`Unrecognized data size for timestamp: ${data.length}`);\n }\n}\n\nexport function decodeTimestampExtension(data: Uint8Array): Date {\n const timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\n\nexport const timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n","// ExtensionCodec to handle MessagePack extensions\n\nimport { ExtData } from \"./ExtData\";\nimport { timestampExtension } from \"./timestamp\";\n\nexport type ExtensionDecoderType = (\n data: Uint8Array,\n extensionType: number,\n context: ContextType,\n) => unknown;\n\nexport type ExtensionEncoderType = (input: unknown, context: ContextType) => Uint8Array | null;\n\n// immutable interfce to ExtensionCodec\nexport type ExtensionCodecType = {\n __brand?: ContextType;\n tryToEncode(object: unknown, context: ContextType): ExtData | null;\n decode(data: Uint8Array, extType: number, context: ContextType): unknown;\n};\n\nexport class ExtensionCodec implements ExtensionCodecType {\n public static readonly defaultCodec: ExtensionCodecType = new ExtensionCodec();\n\n // ensures ExtensionCodecType matches ExtensionCodec\n // this will make type errors a lot more clear\n __brand?: ContextType;\n\n // built-in extensions\n private readonly builtInEncoders: Array | undefined | null> = [];\n private readonly builtInDecoders: Array | undefined | null> = [];\n\n // custom extensions\n private readonly encoders: Array | undefined | null> = [];\n private readonly decoders: Array | undefined | null> = [];\n\n public constructor() {\n this.register(timestampExtension);\n }\n\n public register({\n type,\n encode,\n decode,\n }: {\n type: number;\n encode: ExtensionEncoderType;\n decode: ExtensionDecoderType;\n }): void {\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n } else {\n // built-in extensions\n const index = 1 + type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n }\n\n public tryToEncode(object: unknown, context: ContextType): ExtData | null {\n // built-in extensions\n for (let i = 0; i < this.builtInEncoders.length; i++) {\n const encoder = this.builtInEncoders[i];\n if (encoder != null) {\n const data = encoder(object, context);\n if (data != null) {\n const type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n\n // custom extensions\n for (let i = 0; i < this.encoders.length; i++) {\n const encoder = this.encoders[i];\n if (encoder != null) {\n const data = encoder(object, context);\n if (data != null) {\n const type = i;\n return new ExtData(type, data);\n }\n }\n }\n\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n }\n\n public decode(data: Uint8Array, type: number, context: ContextType): unknown {\n const decoder = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decoder) {\n return decoder(data, type, context);\n } else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n }\n}\n","export function ensureUint8Array(buffer: ArrayLike | Uint8Array | ArrayBufferView | ArrayBuffer) {\n if (buffer instanceof Uint8Array) {\n return buffer;\n } else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n } else if (buffer instanceof ArrayBuffer) {\n return new Uint8Array(buffer);\n } else {\n // ArrayLike\n return Uint8Array.from(buffer);\n }\n}\n\nexport function createDataView(buffer: ArrayLike | ArrayBufferView | ArrayBuffer): DataView {\n if (buffer instanceof ArrayBuffer) {\n return new DataView(buffer);\n }\n\n const bufferView = ensureUint8Array(buffer);\n return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\n}\n","import { utf8EncodeJs, utf8Count, TEXT_ENCODING_AVAILABLE, TEXT_ENCODER_THRESHOLD, utf8EncodeTE } from \"./utils/utf8\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { setInt64, setUint64 } from \"./utils/int\";\nimport { ensureUint8Array } from \"./utils/typedArrays\";\nimport { ExtData } from \"./ExtData\";\n\nexport const DEFAULT_MAX_DEPTH = 100;\nexport const DEFAULT_INITIAL_BUFFER_SIZE = 2048;\n\nexport class Encoder {\n private pos = 0;\n private view = new DataView(new ArrayBuffer(this.initialBufferSize));\n private bytes = new Uint8Array(this.view.buffer);\n\n constructor(\n readonly extensionCodec: ExtensionCodecType = ExtensionCodec.defaultCodec as any,\n readonly context: ContextType,\n readonly maxDepth = DEFAULT_MAX_DEPTH,\n readonly initialBufferSize = DEFAULT_INITIAL_BUFFER_SIZE,\n readonly sortKeys = false,\n readonly forceFloat32 = false,\n ) {}\n\n encode(object: unknown, depth: number): void {\n if (depth > this.maxDepth) {\n throw new Error(`Too deep objects in depth ${depth}`);\n }\n\n if (object == null) {\n this.encodeNil();\n } else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n } else if (typeof object === \"number\") {\n this.encodeNumber(object);\n } else if (typeof object === \"string\") {\n this.encodeString(object);\n } else {\n this.encodeObject(object, depth);\n }\n }\n\n getUint8Array(): Uint8Array {\n return this.bytes.subarray(0, this.pos);\n }\n\n ensureBufferSizeToWrite(sizeToWrite: number) {\n const requiredSize = this.pos + sizeToWrite;\n\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n }\n\n resizeBuffer(newSize: number) {\n const newBuffer = new ArrayBuffer(newSize);\n const newBytes = new Uint8Array(newBuffer);\n const newView = new DataView(newBuffer);\n\n newBytes.set(this.bytes);\n\n this.view = newView;\n this.bytes = newBytes;\n }\n\n encodeNil() {\n this.writeU8(0xc0);\n }\n\n encodeBoolean(object: boolean) {\n if (object === false) {\n this.writeU8(0xc2);\n } else {\n this.writeU8(0xc3);\n }\n }\n encodeNumber(object: number) {\n if (Number.isSafeInteger(object)) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n } else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n } else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n } else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n } else {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n }\n } else {\n if (object >= -0x20) {\n // nagative fixint\n this.writeU8(0xe0 | (object + 0x20));\n } else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n } else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n } else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n } else {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n }\n }\n } else {\n // non-integer numbers\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n } else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n }\n }\n\n writeStringHeader(byteLength: number) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n } else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n } else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n } else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n } else {\n throw new Error(`Too long string: ${byteLength} bytes in UTF-8`);\n }\n }\n\n encodeString(object: string) {\n const maxHeaderSize = 1 + 4;\n const strLength = object.length;\n\n if (TEXT_ENCODING_AVAILABLE && strLength > TEXT_ENCODER_THRESHOLD) {\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeTE(object, this.bytes, this.pos);\n this.pos += byteLength;\n } else {\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeJs(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n }\n\n encodeObject(object: unknown, depth: number) {\n // try to encode objects with custom codec first of non-primitives\n const ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n } else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n } else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n } else if (typeof object === \"object\") {\n this.encodeMap(object as Record, depth);\n } else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`);\n }\n }\n\n encodeBinary(object: ArrayBufferView) {\n const size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n } else {\n throw new Error(`Too large binary: ${size}`);\n }\n const bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n }\n\n encodeArray(object: Array, depth: number) {\n const size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n } else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n } else {\n throw new Error(`Too large array: ${size}`);\n }\n for (const item of object) {\n this.encode(item, depth + 1);\n }\n }\n\n encodeMap(object: Record, depth: number) {\n const keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n const size = keys.length;\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n } else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n } else {\n throw new Error(`Too large map object: ${size}`);\n }\n\n for (let i = 0; i < size; i++) {\n const key = keys[i];\n this.encodeString(key);\n this.encode(object[key], depth + 1);\n }\n }\n\n encodeExtension(ext: ExtData) {\n const size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n } else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n } else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n } else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n } else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n } else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n } else {\n throw new Error(`Too large extension object: ${size}`);\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n }\n\n writeU8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setUint8(this.pos, value);\n this.pos++;\n }\n\n writeU8a(values: ArrayLike) {\n const size = values.length;\n this.ensureBufferSizeToWrite(size);\n\n this.bytes.set(values, this.pos);\n this.pos += size;\n }\n\n writeI8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setInt8(this.pos, value);\n this.pos++;\n }\n\n writeU16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n }\n\n writeI16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n }\n\n writeU32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n }\n\n writeI32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n }\n\n writeF32(value: number) {\n this.ensureBufferSizeToWrite(4);\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n }\n\n writeF64(value: number) {\n this.ensureBufferSizeToWrite(8);\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n }\n\n writeU64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n }\n\n writeI64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n }\n}\n","import { ExtensionCodecType } from \"./ExtensionCodec\";\nimport { Encoder } from \"./Encoder\";\nimport { ContextOf, SplitUndefined } from \"./context\";\n\nexport type EncodeOptions = Partial<\n Readonly<{\n extensionCodec: ExtensionCodecType;\n maxDepth: number;\n initialBufferSize: number;\n sortKeys: boolean;\n\n /**\n * If `true`, non-integer numbers are encoded in float32, not in float64 (the default).\n *\n * Only use it if precisions don't matter.\n */\n forceFloat32: boolean;\n }>\n> &\n ContextOf;\n\nconst defaultEncodeOptions: EncodeOptions = {};\n\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode(\n value: unknown,\n options: EncodeOptions> = defaultEncodeOptions as any,\n): Uint8Array {\n const encoder = new Encoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxDepth,\n options.initialBufferSize,\n options.sortKeys,\n options.forceFloat32,\n );\n encoder.encode(value, 1);\n return encoder.getUint8Array();\n}\n","export function prettyByte(byte: number): string {\n return `${byte < 0 ? \"-\" : \"\"}0x${Math.abs(byte)\n .toString(16)\n .padStart(2, \"0\")}`;\n}\n","import { utf8DecodeJs } from \"./utils/utf8\";\n\ninterface KeyCacheRecord {\n readonly bytes: Uint8Array;\n readonly value: string;\n}\n\nconst DEFAULT_MAX_KEY_LENGTH = 16;\nconst DEFAULT_MAX_LENGTH_PER_KEY = 16;\n\nexport class CachedKeyDecoder {\n private readonly caches: Array>;\n\n constructor(readonly maxKeyLength = DEFAULT_MAX_KEY_LENGTH, readonly maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY) {\n // avoid `new Array(N)` to create a non-sparse array for performance.\n this.caches = [];\n for (let i = 0; i < this.maxKeyLength; i++) {\n this.caches.push([]);\n }\n }\n\n public canBeCached(byteLength: number) {\n return byteLength > 0 && byteLength <= this.maxKeyLength;\n }\n\n private get(bytes: Uint8Array, inputOffset: number, byteLength: number): string | null {\n const records = this.caches[byteLength - 1];\n const recordsLength = records.length;\n\n FIND_CHUNK: for (let i = 0; i < recordsLength; i++) {\n const record = records[i];\n const recordBytes = record.bytes;\n\n for (let j = 0; j < byteLength; j++) {\n if (recordBytes[j] !== bytes[inputOffset + j]) {\n continue FIND_CHUNK;\n }\n }\n return record.value;\n }\n return null;\n }\n\n private store(bytes: Uint8Array, value: string) {\n const records = this.caches[bytes.length - 1];\n const record: KeyCacheRecord = { bytes, value };\n\n if (records.length >= this.maxLengthPerKey) {\n // `records` are full!\n // Set `record` to a randomized position.\n records[(Math.random() * records.length) | 0] = record;\n } else {\n records.push(record);\n }\n }\n\n public decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const cachedValue = this.get(bytes, inputOffset, byteLength);\n if (cachedValue != null) {\n return cachedValue;\n }\n\n const value = utf8DecodeJs(bytes, inputOffset, byteLength);\n // Ensure to copy a slice of bytes because the byte may be NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.\n const slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);\n this.store(slicedCopyOfBytes, value);\n return value;\n }\n}\n","import { prettyByte } from \"./utils/prettyByte\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { getInt64, getUint64 } from \"./utils/int\";\nimport { utf8DecodeJs, TEXT_ENCODING_AVAILABLE, TEXT_DECODER_THRESHOLD, utf8DecodeTD } from \"./utils/utf8\";\nimport { createDataView, ensureUint8Array } from \"./utils/typedArrays\";\nimport { CachedKeyDecoder } from \"./CachedKeyDecoder\";\n\nconst enum State {\n ARRAY,\n MAP_KEY,\n MAP_VALUE,\n}\n\ntype MapKeyType = string | number;\n\nconst isValidMapKeyType = (key: unknown): key is MapKeyType => {\n const keyType = typeof key;\n\n return keyType === \"string\" || keyType === \"number\";\n};\n\ntype StackMapState = {\n type: State.MAP_KEY | State.MAP_VALUE;\n size: number;\n key: MapKeyType | null;\n readCount: number;\n map: Record;\n};\n\ntype StackArrayState = {\n type: State.ARRAY;\n size: number;\n array: Array;\n position: number;\n};\n\ntype StackState = StackArrayState | StackMapState;\n\nconst HEAD_BYTE_REQUIRED = -1;\n\nconst EMPTY_VIEW = new DataView(new ArrayBuffer(0));\nconst EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer);\n\n// IE11: Hack to support IE11.\n// IE11: Drop this hack and just use RangeError when IE11 is obsolete.\nexport const DataViewIndexOutOfBoundsError: typeof Error = (() => {\n try {\n // IE11: The spec says it should throw RangeError,\n // IE11: but in IE11 it throws TypeError.\n EMPTY_VIEW.getInt8(0);\n } catch (e) {\n return e.constructor;\n }\n throw new Error(\"never reached\");\n})();\n\nconst MORE_DATA = new DataViewIndexOutOfBoundsError(\"Insufficient data\");\n\nconst DEFAULT_MAX_LENGTH = 0xffff_ffff; // uint32_max\n\nconst sharedCachedKeyDecoder = new CachedKeyDecoder();\n\nexport class Decoder {\n totalPos = 0;\n pos = 0;\n\n view = EMPTY_VIEW;\n bytes = EMPTY_BYTES;\n headByte = HEAD_BYTE_REQUIRED;\n readonly stack: Array = [];\n\n constructor(\n readonly extensionCodec: ExtensionCodecType = ExtensionCodec.defaultCodec as any,\n readonly context: ContextType,\n readonly maxStrLength = DEFAULT_MAX_LENGTH,\n readonly maxBinLength = DEFAULT_MAX_LENGTH,\n readonly maxArrayLength = DEFAULT_MAX_LENGTH,\n readonly maxMapLength = DEFAULT_MAX_LENGTH,\n readonly maxExtLength = DEFAULT_MAX_LENGTH,\n readonly cachedKeyDecoder: CachedKeyDecoder | null = sharedCachedKeyDecoder,\n ) {}\n\n setBuffer(buffer: ArrayLike | ArrayBuffer): void {\n this.bytes = ensureUint8Array(buffer);\n this.view = createDataView(this.bytes);\n this.pos = 0;\n }\n\n appendBuffer(buffer: ArrayLike) {\n if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining()) {\n this.setBuffer(buffer);\n } else {\n // retried because data is insufficient\n const remainingData = this.bytes.subarray(this.pos);\n const newData = ensureUint8Array(buffer);\n const concated = new Uint8Array(remainingData.length + newData.length);\n concated.set(remainingData);\n concated.set(newData, remainingData.length);\n this.setBuffer(concated);\n }\n }\n\n hasRemaining(size = 1) {\n return this.view.byteLength - this.pos >= size;\n }\n\n createNoExtraBytesError(posToShow: number): Error {\n const { view, pos } = this;\n return new RangeError(`Extra ${view.byteLength - pos} byte(s) found at buffer[${posToShow}]`);\n }\n\n decodeSingleSync(): unknown {\n const object = this.decodeSync();\n if (this.hasRemaining()) {\n throw this.createNoExtraBytesError(this.pos);\n }\n return object;\n }\n\n async decodeSingleAsync(stream: AsyncIterable>): Promise {\n let decoded = false;\n let object: unknown;\n for await (const buffer of stream) {\n if (decoded) {\n throw this.createNoExtraBytesError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n try {\n object = this.decodeSync();\n decoded = true;\n } catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n\n if (decoded) {\n if (this.hasRemaining()) {\n throw this.createNoExtraBytesError(this.totalPos);\n }\n return object;\n }\n\n const { headByte, pos, totalPos } = this;\n throw new RangeError(\n `Insufficient data in parcing ${prettyByte(headByte)} at ${totalPos} (${pos} in the current buffer)`,\n );\n }\n\n decodeArrayStream(stream: AsyncIterable>) {\n return this.decodeMultiAsync(stream, true);\n }\n\n decodeStream(stream: AsyncIterable>) {\n return this.decodeMultiAsync(stream, false);\n }\n\n private async *decodeMultiAsync(stream: AsyncIterable>, isArray: boolean) {\n let isArrayHeaderRequired = isArray;\n let arrayItemsLeft = -1;\n\n for await (const buffer of stream) {\n if (isArray && arrayItemsLeft === 0) {\n throw this.createNoExtraBytesError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n if (isArrayHeaderRequired) {\n arrayItemsLeft = this.readArraySize();\n isArrayHeaderRequired = false;\n this.complete();\n }\n\n try {\n while (true) {\n yield this.decodeSync();\n if (--arrayItemsLeft === 0) {\n break;\n }\n }\n } catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n }\n\n decodeSync(): unknown {\n DECODE: while (true) {\n const headByte = this.readHeadByte();\n let object: unknown;\n\n if (headByte >= 0xe0) {\n // negative fixint (111x xxxx) 0xe0 - 0xff\n object = headByte - 0x100;\n } else if (headByte < 0xc0) {\n if (headByte < 0x80) {\n // positive fixint (0xxx xxxx) 0x00 - 0x7f\n object = headByte;\n } else if (headByte < 0x90) {\n // fixmap (1000 xxxx) 0x80 - 0x8f\n const size = headByte - 0x80;\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte < 0xa0) {\n // fixarray (1001 xxxx) 0x90 - 0x9f\n const size = headByte - 0x90;\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else {\n // fixstr (101x xxxx) 0xa0 - 0xbf\n const byteLength = headByte - 0xa0;\n object = this.decodeUtf8String(byteLength, 0);\n }\n } else if (headByte === 0xc0) {\n // nil\n object = null;\n } else if (headByte === 0xc2) {\n // false\n object = false;\n } else if (headByte === 0xc3) {\n // true\n object = true;\n } else if (headByte === 0xca) {\n // float 32\n object = this.readF32();\n } else if (headByte === 0xcb) {\n // float 64\n object = this.readF64();\n } else if (headByte === 0xcc) {\n // uint 8\n object = this.readU8();\n } else if (headByte === 0xcd) {\n // uint 16\n object = this.readU16();\n } else if (headByte === 0xce) {\n // uint 32\n object = this.readU32();\n } else if (headByte === 0xcf) {\n // uint 64\n object = this.readU64();\n } else if (headByte === 0xd0) {\n // int 8\n object = this.readI8();\n } else if (headByte === 0xd1) {\n // int 16\n object = this.readI16();\n } else if (headByte === 0xd2) {\n // int 32\n object = this.readI32();\n } else if (headByte === 0xd3) {\n // int 64\n object = this.readI64();\n } else if (headByte === 0xd9) {\n // str 8\n const byteLength = this.lookU8();\n object = this.decodeUtf8String(byteLength, 1);\n } else if (headByte === 0xda) {\n // str 16\n const byteLength = this.lookU16();\n object = this.decodeUtf8String(byteLength, 2);\n } else if (headByte === 0xdb) {\n // str 32\n const byteLength = this.lookU32();\n object = this.decodeUtf8String(byteLength, 4);\n } else if (headByte === 0xdc) {\n // array 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xdd) {\n // array 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xde) {\n // map 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xdf) {\n // map 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xc4) {\n // bin 8\n const size = this.lookU8();\n object = this.decodeBinary(size, 1);\n } else if (headByte === 0xc5) {\n // bin 16\n const size = this.lookU16();\n object = this.decodeBinary(size, 2);\n } else if (headByte === 0xc6) {\n // bin 32\n const size = this.lookU32();\n object = this.decodeBinary(size, 4);\n } else if (headByte === 0xd4) {\n // fixext 1\n object = this.decodeExtension(1, 0);\n } else if (headByte === 0xd5) {\n // fixext 2\n object = this.decodeExtension(2, 0);\n } else if (headByte === 0xd6) {\n // fixext 4\n object = this.decodeExtension(4, 0);\n } else if (headByte === 0xd7) {\n // fixext 8\n object = this.decodeExtension(8, 0);\n } else if (headByte === 0xd8) {\n // fixext 16\n object = this.decodeExtension(16, 0);\n } else if (headByte === 0xc7) {\n // ext 8\n const size = this.lookU8();\n object = this.decodeExtension(size, 1);\n } else if (headByte === 0xc8) {\n // ext 16\n const size = this.lookU16();\n object = this.decodeExtension(size, 2);\n } else if (headByte === 0xc9) {\n // ext 32\n const size = this.lookU32();\n object = this.decodeExtension(size, 4);\n } else {\n throw new Error(`Unrecognized type byte: ${prettyByte(headByte)}`);\n }\n\n this.complete();\n\n const stack = this.stack;\n while (stack.length > 0) {\n // arrays and maps\n const state = stack[stack.length - 1];\n if (state.type === State.ARRAY) {\n state.array[state.position] = object;\n state.position++;\n if (state.position === state.size) {\n stack.pop();\n object = state.array;\n } else {\n continue DECODE;\n }\n } else if (state.type === State.MAP_KEY) {\n if (!isValidMapKeyType(object)) {\n throw new Error(\"The type of key must be string or number but \" + typeof object);\n }\n\n state.key = object;\n state.type = State.MAP_VALUE;\n continue DECODE;\n } else {\n // it must be `state.type === State.MAP_VALUE` here\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n state.map[state.key!] = object;\n state.readCount++;\n\n if (state.readCount === state.size) {\n stack.pop();\n object = state.map;\n } else {\n state.key = null;\n state.type = State.MAP_KEY;\n continue DECODE;\n }\n }\n }\n\n return object;\n }\n }\n\n readHeadByte(): number {\n if (this.headByte === HEAD_BYTE_REQUIRED) {\n this.headByte = this.readU8();\n // console.log(\"headByte\", prettyByte(this.headByte));\n }\n\n return this.headByte;\n }\n\n complete(): void {\n this.headByte = HEAD_BYTE_REQUIRED;\n }\n\n readArraySize(): number {\n const headByte = this.readHeadByte();\n\n switch (headByte) {\n case 0xdc:\n return this.readU16();\n case 0xdd:\n return this.readU32();\n default: {\n if (headByte < 0xa0) {\n return headByte - 0x90;\n } else {\n throw new Error(`Unrecognized array type byte: ${prettyByte(headByte)}`);\n }\n }\n }\n }\n\n pushMapState(size: number) {\n if (size > this.maxMapLength) {\n throw new Error(`Max length exceeded: map length (${size}) > maxMapLengthLength (${this.maxMapLength})`);\n }\n\n this.stack.push({\n type: State.MAP_KEY,\n size,\n key: null,\n readCount: 0,\n map: {},\n });\n }\n\n pushArrayState(size: number) {\n if (size > this.maxArrayLength) {\n throw new Error(`Max length exceeded: array length (${size}) > maxArrayLength (${this.maxArrayLength})`);\n }\n\n this.stack.push({\n type: State.ARRAY,\n size,\n array: new Array(size),\n position: 0,\n });\n }\n\n decodeUtf8String(byteLength: number, headerOffset: number): string {\n if (byteLength > this.maxStrLength) {\n throw new Error(`Max length exceeded: UTF-8 byte length (${byteLength}) > maxStrLength (${this.maxStrLength})`);\n }\n\n if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headerOffset;\n let object: string;\n if (this.stateIsMapKey() && this.cachedKeyDecoder?.canBeCached(byteLength)) {\n object = this.cachedKeyDecoder.decode(this.bytes, offset, byteLength);\n } else if (TEXT_ENCODING_AVAILABLE && byteLength > TEXT_DECODER_THRESHOLD) {\n object = utf8DecodeTD(this.bytes, offset, byteLength);\n } else {\n object = utf8DecodeJs(this.bytes, offset, byteLength);\n }\n this.pos += headerOffset + byteLength;\n return object;\n }\n\n stateIsMapKey(): boolean {\n if (this.stack.length > 0) {\n const state = this.stack[this.stack.length - 1];\n return state.type === State.MAP_KEY;\n }\n return false;\n }\n\n decodeBinary(byteLength: number, headOffset: number): Uint8Array {\n if (byteLength > this.maxBinLength) {\n throw new Error(`Max length exceeded: bin length (${byteLength}) > maxBinLength (${this.maxBinLength})`);\n }\n\n if (!this.hasRemaining(byteLength + headOffset)) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headOffset;\n const object = this.bytes.subarray(offset, offset + byteLength);\n this.pos += headOffset + byteLength;\n return object;\n }\n\n decodeExtension(size: number, headOffset: number): unknown {\n if (size > this.maxExtLength) {\n throw new Error(`Max length exceeded: ext length (${size}) > maxExtLength (${this.maxExtLength})`);\n }\n\n const extType = this.view.getInt8(this.pos + headOffset);\n const data = this.decodeBinary(size, headOffset + 1 /* extType */);\n return this.extensionCodec.decode(data, extType, this.context);\n }\n\n lookU8() {\n return this.view.getUint8(this.pos);\n }\n\n lookU16() {\n return this.view.getUint16(this.pos);\n }\n\n lookU32() {\n return this.view.getUint32(this.pos);\n }\n\n readU8(): number {\n const value = this.view.getUint8(this.pos);\n this.pos++;\n return value;\n }\n\n readI8(): number {\n const value = this.view.getInt8(this.pos);\n this.pos++;\n return value;\n }\n\n readU16(): number {\n const value = this.view.getUint16(this.pos);\n this.pos += 2;\n return value;\n }\n\n readI16(): number {\n const value = this.view.getInt16(this.pos);\n this.pos += 2;\n return value;\n }\n\n readU32(): number {\n const value = this.view.getUint32(this.pos);\n this.pos += 4;\n return value;\n }\n\n readI32(): number {\n const value = this.view.getInt32(this.pos);\n this.pos += 4;\n return value;\n }\n\n readU64(): number {\n const value = getUint64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n readI64(): number {\n const value = getInt64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n readF32() {\n const value = this.view.getFloat32(this.pos);\n this.pos += 4;\n return value;\n }\n\n readF64() {\n const value = this.view.getFloat64(this.pos);\n this.pos += 8;\n return value;\n }\n}\n","import { ExtensionCodecType } from \"./ExtensionCodec\";\nimport { Decoder } from \"./Decoder\";\nimport { ContextOf, SplitUndefined } from \"./context\";\n\nexport type DecodeOptions = Readonly<\n Partial<{\n extensionCodec: ExtensionCodecType;\n\n /**\n * Maximum string length.\n * Default to 4_294_967_295 (UINT32_MAX).\n */\n maxStrLength: number;\n /**\n * Maximum binary length.\n * Default to 4_294_967_295 (UINT32_MAX).\n */\n maxBinLength: number;\n /**\n * Maximum array length.\n * Default to 4_294_967_295 (UINT32_MAX).\n */\n maxArrayLength: number;\n /**\n * Maximum map length.\n * Default to 4_294_967_295 (UINT32_MAX).\n */\n maxMapLength: number;\n /**\n * Maximum extension length.\n * Default to 4_294_967_295 (UINT32_MAX).\n */\n maxExtLength: number;\n }>\n> &\n ContextOf;\n\nexport const defaultDecodeOptions: DecodeOptions = {};\n\n/**\n * It decodes a MessagePack-encoded buffer.\n *\n * This is a synchronous decoding function. See other variants for asynchronous decoding: `decodeAsync()`, `decodeStream()`, `decodeArrayStream()`.\n */\nexport function decode(\n buffer: ArrayLike | ArrayBuffer,\n options: DecodeOptions> = defaultDecodeOptions as any,\n): unknown {\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n decoder.setBuffer(buffer); // decodeSync() requires only one buffer\n return decoder.decodeSingleSync();\n}\n","// utility for whatwg streams\n\n// The living standard of whatwg streams says\n// ReadableStream is also AsyncIterable, but\n// as of June 2019, no browser implements it.\n// See https://streams.spec.whatwg.org/ for details\nexport type ReadableStreamLike = AsyncIterable | ReadableStream;\n\nexport function isAsyncIterable(object: object): object is AsyncIterable {\n return (object as any)[Symbol.asyncIterator] != null;\n}\n\nexport async function* asyncIterableFromStream(stream: ReadableStream): AsyncIterable {\n const reader = stream.getReader();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function ensureAsyncIterabe(streamLike: ReadableStreamLike): AsyncIterable {\n if (isAsyncIterable(streamLike)) {\n return streamLike;\n } else {\n return asyncIterableFromStream(streamLike);\n }\n}\n","import { Decoder } from \"./Decoder\";\nimport { defaultDecodeOptions, DecodeOptions } from \"./decode\";\nimport { ensureAsyncIterabe, ReadableStreamLike } from \"./utils/stream\";\nimport { SplitUndefined } from \"./context\";\n\nexport async function decodeAsync(\n streamLike: ReadableStreamLike>,\n options: DecodeOptions> = defaultDecodeOptions as any,\n): Promise {\n const stream = ensureAsyncIterabe(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decodeSingleAsync(stream);\n}\n\nexport function decodeArrayStream(\n streamLike: ReadableStreamLike>,\n options: DecodeOptions> = defaultDecodeOptions as any,\n) {\n const stream = ensureAsyncIterabe(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n\n return decoder.decodeArrayStream(stream);\n}\n\nexport function decodeStream(\n streamLike: ReadableStreamLike>,\n options: DecodeOptions> = defaultDecodeOptions as any,\n) {\n const stream = ensureAsyncIterabe(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n\n return decoder.decodeStream(stream);\n}\n","// Main Functions:\n\nexport { encode, EncodeOptions } from \"./encode\";\nexport { decode, DecodeOptions } from \"./decode\";\nexport { decodeAsync, decodeArrayStream, decodeStream } from \"./decodeAsync\";\n\n/**\n * @experimental `Decoder` is exported for experimental use.\n */\nexport { Decoder } from \"./Decoder\";\n\n/**\n * @experimental `Encoder` is exported for experimental use.\n */\nexport { Encoder } from \"./Encoder\";\n\n// Utilitiies for Extension Types:\n\nexport { ExtensionCodec, ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType } from \"./ExtensionCodec\";\nexport { ExtData } from \"./ExtData\";\nexport {\n EXT_TIMESTAMP,\n encodeDateToTimeSpec,\n encodeTimeSpecToTimestamp,\n decodeTimestampToTimeSpec,\n encodeTimestampExtension,\n decodeTimestampExtension,\n} from \"./timestamp\";\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/Server/wwwroot/lib/msgpack/msgpack.min.js b/Server/wwwroot/lib/msgpack/msgpack.min.js
new file mode 100644
index 00000000..6512ac2c
--- /dev/null
+++ b/Server/wwwroot/lib/msgpack/msgpack.min.js
@@ -0,0 +1,2 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.MessagePack=t():e.MessagePack=t()}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r.r(t);var n,i=function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,o=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return s},o=function(){for(var e=[],t=0;t=55296&&i<=56319&&n65535&&(f-=65536,s.push(f>>>10&1023|55296),f=56320|1023&f),s.push(f)}else s.push(h);s.length>=4096&&(a+=String.fromCharCode.apply(String,o(s)),s.length=0)}return s.length>0&&(a+=String.fromCharCode.apply(String,o(s))),a}var f=s?new TextDecoder:null;var l=function(e,t){this.type=e,this.data=t};function p(e,t,r){var n=Math.floor(r/4294967296),i=r;e.setUint32(t,n),e.setUint32(t+4,i)}function d(e,t){return 4294967296*e.getInt32(t)+e.getUint32(t+4)}function y(e){var t=e.sec,r=e.nsec;if(t>=0&&r>=0&&t<=17179869183){if(0===r&&t<=4294967295){var n=new Uint8Array(4);return(s=new DataView(n.buffer)).setUint32(0,t),n}var i=t/4294967296,o=4294967295&t;n=new Uint8Array(8);return(s=new DataView(n.buffer)).setUint32(0,r<<2|3&i),s.setUint32(4,o),n}var s;n=new Uint8Array(12);return(s=new DataView(n.buffer)).setUint32(0,r),p(s,4,t),n}function w(e){var t=e.getTime(),r=Math.floor(t/1e3),n=1e6*(t-1e3*r),i=Math.floor(n/1e9);return{sec:r+i,nsec:n-1e9*i}}function v(e){return e instanceof Date?y(w(e)):null}function g(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(e.byteLength){case 4:return{sec:t.getUint32(0),nsec:0};case 8:var r=t.getUint32(0);return{sec:4294967296*(3&r)+t.getUint32(4),nsec:r>>>2};case 12:return{sec:d(t,4),nsec:t.getUint32(0)};default:throw new Error("Unrecognized data size for timestamp: "+e.length)}}function b(e){var t=g(e);return new Date(1e3*t.sec+t.nsec/1e6)}var x={type:-1,encode:v,decode:b},m=function(){function e(){this.builtInEncoders=[],this.builtInDecoders=[],this.encoders=[],this.decoders=[],this.register(x)}return e.prototype.register=function(e){var t=e.type,r=e.encode,n=e.decode;if(t>=0)this.encoders[t]=r,this.decoders[t]=n;else{var i=1+t;this.builtInEncoders[i]=r,this.builtInDecoders[i]=n}},e.prototype.tryToEncode=function(e,t){for(var r=0;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},E=function(){function e(e,t,r,n,i,o){void 0===e&&(e=m.defaultCodec),void 0===r&&(r=100),void 0===n&&(n=2048),void 0===i&&(i=!1),void 0===o&&(o=!1),this.extensionCodec=e,this.context=t,this.maxDepth=r,this.initialBufferSize=n,this.sortKeys=i,this.forceFloat32=o,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}return e.prototype.encode=function(e,t){if(t>this.maxDepth)throw new Error("Too deep objects in depth "+t);null==e?this.encodeNil():"boolean"==typeof e?this.encodeBoolean(e):"number"==typeof e?this.encodeNumber(e):"string"==typeof e?this.encodeString(e):this.encodeObject(e,t)},e.prototype.getUint8Array=function(){return this.bytes.subarray(0,this.pos)},e.prototype.ensureBufferSizeToWrite=function(e){var t=this.pos+e;this.view.byteLength=0?e<128?this.writeU8(e):e<256?(this.writeU8(204),this.writeU8(e)):e<65536?(this.writeU8(205),this.writeU16(e)):e<4294967296?(this.writeU8(206),this.writeU32(e)):(this.writeU8(207),this.writeU64(e)):e>=-32?this.writeU8(224|e+32):e>=-128?(this.writeU8(208),this.writeI8(e)):e>=-32768?(this.writeU8(209),this.writeI16(e)):e>=-2147483648?(this.writeU8(210),this.writeI32(e)):(this.writeU8(211),this.writeI64(e)):this.forceFloat32?(this.writeU8(202),this.writeF32(e)):(this.writeU8(203),this.writeF64(e))},e.prototype.writeStringHeader=function(e){if(e<32)this.writeU8(160+e);else if(e<256)this.writeU8(217),this.writeU8(e);else if(e<65536)this.writeU8(218),this.writeU16(e);else{if(!(e<4294967296))throw new Error("Too long string: "+e+" bytes in UTF-8");this.writeU8(219),this.writeU32(e)}},e.prototype.encodeString=function(e){var t=e.length;if(s&&t>200){var r=a(e);this.ensureBufferSizeToWrite(5+r),this.writeStringHeader(r),c(e,this.bytes,this.pos),this.pos+=r}else{r=a(e);this.ensureBufferSizeToWrite(5+r),this.writeStringHeader(r),function(e,t,r){for(var n=e.length,i=r,o=0;o>6&31|192;else{if(s>=55296&&s<=56319&&o>12&15|224,t[i++]=s>>6&63|128):(t[i++]=s>>18&7|240,t[i++]=s>>12&63|128,t[i++]=s>>6&63|128)}t[i++]=63&s|128}else t[i++]=s}}(e,this.bytes,this.pos),this.pos+=r}},e.prototype.encodeObject=function(e,t){var r=this.extensionCodec.tryToEncode(e,this.context);if(null!=r)this.encodeExtension(r);else if(Array.isArray(e))this.encodeArray(e,t);else if(ArrayBuffer.isView(e))this.encodeBinary(e);else{if("object"!=typeof e)throw new Error("Unrecognized object: "+Object.prototype.toString.apply(e));this.encodeMap(e,t)}},e.prototype.encodeBinary=function(e){var t=e.byteLength;if(t<256)this.writeU8(196),this.writeU8(t);else if(t<65536)this.writeU8(197),this.writeU16(t);else{if(!(t<4294967296))throw new Error("Too large binary: "+t);this.writeU8(198),this.writeU32(t)}var r=U(e);this.writeU8a(r)},e.prototype.encodeArray=function(e,t){var r,n,i=e.length;if(i<16)this.writeU8(144+i);else if(i<65536)this.writeU8(220),this.writeU16(i);else{if(!(i<4294967296))throw new Error("Too large array: "+i);this.writeU8(221),this.writeU32(i)}try{for(var o=S(e),s=o.next();!s.done;s=o.next()){var a=s.value;this.encode(a,t+1)}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},e.prototype.encodeMap=function(e,t){var r=Object.keys(e);this.sortKeys&&r.sort();var n=r.length;if(n<16)this.writeU8(128+n);else if(n<65536)this.writeU8(222),this.writeU16(n);else{if(!(n<4294967296))throw new Error("Too large map object: "+n);this.writeU8(223),this.writeU32(n)}for(var i=0;i0&&e<=this.maxKeyLength},e.prototype.get=function(e,t,r){var n=this.caches[r-1],i=n.length;e:for(var o=0;o=this.maxLengthPerKey?r[Math.random()*r.length|0]=n:r.push(n)},e.prototype.decode=function(e,t,r){var n=this.get(e,t,r);if(null!=n)return n;var i=u(e,t,r),o=Uint8Array.prototype.slice.call(e,t,t+r);return this.store(o,i),i},e}(),T=function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{h(n.next(e))}catch(e){o(e)}}function a(e){try{h(n.throw(e))}catch(e){o(e)}}function h(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}h((n=n.apply(e,t||[])).next())}))},k=function(e,t){var r,n,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,n=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!(i=(i=s.trys).length>0&&i[i.length-1])&&(6===o[0]||2===o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]1||a(e,t)}))})}function a(e,t){try{(r=i[e](t)).value instanceof z?Promise.resolve(r.value.v).then(h,c):u(o[0][2],r)}catch(e){u(o[0][3],e)}var r}function h(e){a("next",e)}function c(e){a("throw",e)}function u(e,t){e(t),o.shift(),o.length&&a(o[0][0],o[0][1])}},D=new DataView(new ArrayBuffer(0)),P=new Uint8Array(D.buffer),j=function(){try{D.getInt8(0)}catch(e){return e.constructor}throw new Error("never reached")}(),F=new j("Insufficient data"),O=new I,W=function(){function e(e,t,r,n,i,o,s,a){void 0===e&&(e=m.defaultCodec),void 0===r&&(r=4294967295),void 0===n&&(n=4294967295),void 0===i&&(i=4294967295),void 0===o&&(o=4294967295),void 0===s&&(s=4294967295),void 0===a&&(a=O),this.extensionCodec=e,this.context=t,this.maxStrLength=r,this.maxBinLength=n,this.maxArrayLength=i,this.maxMapLength=o,this.maxExtLength=s,this.cachedKeyDecoder=a,this.totalPos=0,this.pos=0,this.view=D,this.bytes=P,this.headByte=-1,this.stack=[]}return e.prototype.setBuffer=function(e){this.bytes=U(e),this.view=function(e){if(e instanceof ArrayBuffer)return new DataView(e);var t=U(e);return new DataView(t.buffer,t.byteOffset,t.byteLength)}(this.bytes),this.pos=0},e.prototype.appendBuffer=function(e){if(-1!==this.headByte||this.hasRemaining()){var t=this.bytes.subarray(this.pos),r=U(e),n=new Uint8Array(t.length+r.length);n.set(t),n.set(r,t.length),this.setBuffer(n)}else this.setBuffer(e)},e.prototype.hasRemaining=function(e){return void 0===e&&(e=1),this.view.byteLength-this.pos>=e},e.prototype.createNoExtraBytesError=function(e){var t=this.view,r=this.pos;return new RangeError("Extra "+(t.byteLength-r)+" byte(s) found at buffer["+e+"]")},e.prototype.decodeSingleSync=function(){var e=this.decodeSync();if(this.hasRemaining())throw this.createNoExtraBytesError(this.pos);return e},e.prototype.decodeSingleAsync=function(e){var t,r,n,i;return T(this,void 0,void 0,(function(){var o,s,a,h,c,u,f,l;return k(this,(function(p){switch(p.label){case 0:o=!1,p.label=1;case 1:p.trys.push([1,6,7,12]),t=M(e),p.label=2;case 2:return[4,t.next()];case 3:if((r=p.sent()).done)return[3,5];if(a=r.value,o)throw this.createNoExtraBytesError(this.totalPos);this.appendBuffer(a);try{s=this.decodeSync(),o=!0}catch(e){if(!(e instanceof j))throw e}this.totalPos+=this.pos,p.label=4;case 4:return[3,2];case 5:return[3,12];case 6:return h=p.sent(),n={error:h},[3,12];case 7:return p.trys.push([7,,10,11]),r&&!r.done&&(i=t.return)?[4,i.call(t)]:[3,9];case 8:p.sent(),p.label=9;case 9:return[3,11];case 10:if(n)throw n.error;return[7];case 11:return[7];case 12:if(o){if(this.hasRemaining())throw this.createNoExtraBytesError(this.totalPos);return[2,s]}throw u=(c=this).headByte,f=c.pos,l=c.totalPos,new RangeError("Insufficient data in parcing "+A(u)+" at "+l+" ("+f+" in the current buffer)")}}))}))},e.prototype.decodeArrayStream=function(e){return this.decodeMultiAsync(e,!0)},e.prototype.decodeStream=function(e){return this.decodeMultiAsync(e,!1)},e.prototype.decodeMultiAsync=function(e,t){return C(this,arguments,(function(){var r,n,i,o,s,a,h,c,u;return k(this,(function(f){switch(f.label){case 0:r=t,n=-1,f.label=1;case 1:f.trys.push([1,13,14,19]),i=M(e),f.label=2;case 2:return[4,z(i.next())];case 3:if((o=f.sent()).done)return[3,12];if(s=o.value,t&&0===n)throw this.createNoExtraBytesError(this.totalPos);this.appendBuffer(s),r&&(n=this.readArraySize(),r=!1,this.complete()),f.label=4;case 4:f.trys.push([4,9,,10]),f.label=5;case 5:return[4,z(this.decodeSync())];case 6:return[4,f.sent()];case 7:return f.sent(),0==--n?[3,8]:[3,5];case 8:return[3,10];case 9:if(!((a=f.sent())instanceof j))throw a;return[3,10];case 10:this.totalPos+=this.pos,f.label=11;case 11:return[3,2];case 12:return[3,19];case 13:return h=f.sent(),c={error:h},[3,19];case 14:return f.trys.push([14,,17,18]),o&&!o.done&&(u=i.return)?[4,z(u.call(i))]:[3,16];case 15:f.sent(),f.label=16;case 16:return[3,18];case 17:if(c)throw c.error;return[7];case 18:return[7];case 19:return[2]}}))}))},e.prototype.decodeSync=function(){e:for(;;){var e=this.readHeadByte(),t=void 0;if(e>=224)t=e-256;else if(e<192)if(e<128)t=e;else if(e<144){if(0!==(n=e-128)){this.pushMapState(n),this.complete();continue e}t={}}else if(e<160){if(0!==(n=e-144)){this.pushArrayState(n),this.complete();continue e}t=[]}else{var r=e-160;t=this.decodeUtf8String(r,0)}else if(192===e)t=null;else if(194===e)t=!1;else if(195===e)t=!0;else if(202===e)t=this.readF32();else if(203===e)t=this.readF64();else if(204===e)t=this.readU8();else if(205===e)t=this.readU16();else if(206===e)t=this.readU32();else if(207===e)t=this.readU64();else if(208===e)t=this.readI8();else if(209===e)t=this.readI16();else if(210===e)t=this.readI32();else if(211===e)t=this.readI64();else if(217===e){r=this.lookU8();t=this.decodeUtf8String(r,1)}else if(218===e){r=this.lookU16();t=this.decodeUtf8String(r,2)}else if(219===e){r=this.lookU32();t=this.decodeUtf8String(r,4)}else if(220===e){if(0!==(n=this.readU16())){this.pushArrayState(n),this.complete();continue e}t=[]}else if(221===e){if(0!==(n=this.readU32())){this.pushArrayState(n),this.complete();continue e}t=[]}else if(222===e){if(0!==(n=this.readU16())){this.pushMapState(n),this.complete();continue e}t={}}else if(223===e){if(0!==(n=this.readU32())){this.pushMapState(n),this.complete();continue e}t={}}else if(196===e){var n=this.lookU8();t=this.decodeBinary(n,1)}else if(197===e){n=this.lookU16();t=this.decodeBinary(n,2)}else if(198===e){n=this.lookU32();t=this.decodeBinary(n,4)}else if(212===e)t=this.decodeExtension(1,0);else if(213===e)t=this.decodeExtension(2,0);else if(214===e)t=this.decodeExtension(4,0);else if(215===e)t=this.decodeExtension(8,0);else if(216===e)t=this.decodeExtension(16,0);else if(199===e){n=this.lookU8();t=this.decodeExtension(n,1)}else if(200===e){n=this.lookU16();t=this.decodeExtension(n,2)}else{if(201!==e)throw new Error("Unrecognized type byte: "+A(e));n=this.lookU32();t=this.decodeExtension(n,4)}this.complete();for(var i=this.stack;i.length>0;){var o=i[i.length-1];if(0===o.type){if(o.array[o.position]=t,o.position++,o.position!==o.size)continue e;i.pop(),t=o.array}else{if(1===o.type){if(s=void 0,"string"!==(s=typeof t)&&"number"!==s)throw new Error("The type of key must be string or number but "+typeof t);o.key=t,o.type=2;continue e}if(o.map[o.key]=t,o.readCount++,o.readCount!==o.size){o.key=null,o.type=1;continue e}i.pop(),t=o.map}}return t}var s},e.prototype.readHeadByte=function(){return-1===this.headByte&&(this.headByte=this.readU8()),this.headByte},e.prototype.complete=function(){this.headByte=-1},e.prototype.readArraySize=function(){var e=this.readHeadByte();switch(e){case 220:return this.readU16();case 221:return this.readU32();default:if(e<160)return e-144;throw new Error("Unrecognized array type byte: "+A(e))}},e.prototype.pushMapState=function(e){if(e>this.maxMapLength)throw new Error("Max length exceeded: map length ("+e+") > maxMapLengthLength ("+this.maxMapLength+")");this.stack.push({type:1,size:e,key:null,readCount:0,map:{}})},e.prototype.pushArrayState=function(e){if(e>this.maxArrayLength)throw new Error("Max length exceeded: array length ("+e+") > maxArrayLength ("+this.maxArrayLength+")");this.stack.push({type:0,size:e,array:new Array(e),position:0})},e.prototype.decodeUtf8String=function(e,t){var r;if(e>this.maxStrLength)throw new Error("Max length exceeded: UTF-8 byte length ("+e+") > maxStrLength ("+this.maxStrLength+")");if(this.bytes.byteLength200?function(e,t,r){var n=e.subarray(t,t+r);return f.decode(n)}(this.bytes,i,e):u(this.bytes,i,e),this.pos+=t+e,n},e.prototype.stateIsMapKey=function(){return this.stack.length>0&&1===this.stack[this.stack.length-1].type},e.prototype.decodeBinary=function(e,t){if(e>this.maxBinLength)throw new Error("Max length exceeded: bin length ("+e+") > maxBinLength ("+this.maxBinLength+")");if(!this.hasRemaining(e+t))throw F;var r=this.pos+t,n=this.bytes.subarray(r,r+e);return this.pos+=t+e,n},e.prototype.decodeExtension=function(e,t){if(e>this.maxExtLength)throw new Error("Max length exceeded: ext length ("+e+") > maxExtLength ("+this.maxExtLength+")");var r=this.view.getInt8(this.pos+t),n=this.decodeBinary(e,t+1);return this.extensionCodec.decode(n,r,this.context)},e.prototype.lookU8=function(){return this.view.getUint8(this.pos)},e.prototype.lookU16=function(){return this.view.getUint16(this.pos)},e.prototype.lookU32=function(){return this.view.getUint32(this.pos)},e.prototype.readU8=function(){var e=this.view.getUint8(this.pos);return this.pos++,e},e.prototype.readI8=function(){var e=this.view.getInt8(this.pos);return this.pos++,e},e.prototype.readU16=function(){var e=this.view.getUint16(this.pos);return this.pos+=2,e},e.prototype.readI16=function(){var e=this.view.getInt16(this.pos);return this.pos+=2,e},e.prototype.readU32=function(){var e=this.view.getUint32(this.pos);return this.pos+=4,e},e.prototype.readI32=function(){var e=this.view.getInt32(this.pos);return this.pos+=4,e},e.prototype.readU64=function(){var e,t,r=(e=this.view,t=this.pos,4294967296*e.getUint32(t)+e.getUint32(t+4));return this.pos+=8,r},e.prototype.readI64=function(){var e=d(this.view,this.pos);return this.pos+=8,e},e.prototype.readF32=function(){var e=this.view.getFloat32(this.pos);return this.pos+=4,e},e.prototype.readF64=function(){var e=this.view.getFloat64(this.pos);return this.pos+=8,e},e}(),K={};function V(e,t){void 0===t&&(t=K);var r=new W(t.extensionCodec,t.context,t.maxStrLength,t.maxBinLength,t.maxArrayLength,t.maxMapLength,t.maxExtLength);return r.setBuffer(e),r.decodeSingleSync()}var _=function(e,t){var r,n,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,n=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!(i=(i=s.trys).length>0&&i[i.length-1])&&(6===o[0]||2===o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]1||a(e,t)}))})}function a(e,t){try{(r=i[e](t)).value instanceof N?Promise.resolve(r.value.v).then(h,c):u(o[0][2],r)}catch(e){u(o[0][3],e)}var r}function h(e){a("next",e)}function c(e){a("throw",e)}function u(e,t){e(t),o.shift(),o.length&&a(o[0][0],o[0][1])}};function H(e){return null!=e[Symbol.asyncIterator]?e:function(e){return R(this,arguments,(function(){var t,r,n,i;return _(this,(function(o){switch(o.label){case 0:t=e.getReader(),o.label=1;case 1:o.trys.push([1,,9,10]),o.label=2;case 2:return[4,N(t.read())];case 3:return r=o.sent(),n=r.done,i=r.value,n?[4,N(void 0)]:[3,5];case 4:return[2,o.sent()];case 5:return[4,N(i)];case 6:return[4,o.sent()];case 7:return o.sent(),[3,2];case 8:return[3,10];case 9:return t.releaseLock(),[7];case 10:return[2]}}))}))}(e)}var G=function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function s(e){try{h(n.next(e))}catch(e){o(e)}}function a(e){try{h(n.throw(e))}catch(e){o(e)}}function h(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}h((n=n.apply(e,t||[])).next())}))},X=function(e,t){var r,n,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,n=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!(i=(i=s.trys).length>0&&i[i.length-1])&&(6===o[0]||2===o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n } else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\n\nexport function utf8EncodeJs(str: string, output: Uint8Array, outputOffset: number): void {\n const strLength = str.length;\n let offset = outputOffset;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n } else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\n\nconst sharedTextEncoder = TEXT_ENCODING_AVAILABLE ? new TextEncoder() : undefined;\nexport const TEXT_ENCODER_THRESHOLD = process.env.TEXT_ENCODING !== \"force\" ? 200 : 0;\n\nfunction utf8EncodeTEencode(str: string, output: Uint8Array, outputOffset: number): void {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n output.set(sharedTextEncoder!.encode(str), outputOffset);\n}\n\nfunction utf8EncodeTEencodeInto(str: string, output: Uint8Array, outputOffset: number): void {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n sharedTextEncoder!.encodeInto(str, output.subarray(outputOffset));\n}\n\nexport const utf8EncodeTE = sharedTextEncoder?.encodeInto ? utf8EncodeTEencodeInto : utf8EncodeTEencode;\n\nconst CHUNK_SIZE = 0x1_000;\n\nexport function utf8DecodeJs(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n let offset = inputOffset;\n const end = offset + byteLength;\n\n const units: Array = [];\n let result = \"\";\n while (offset < end) {\n const byte1 = bytes[offset++];\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n } else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n const byte2 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n } else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n const byte2 = bytes[offset++] & 0x3f;\n const byte3 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n } else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n const byte2 = bytes[offset++] & 0x3f;\n const byte3 = bytes[offset++] & 0x3f;\n const byte4 = bytes[offset++] & 0x3f;\n let unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n } else {\n units.push(byte1);\n }\n\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode(...units);\n units.length = 0;\n }\n }\n\n if (units.length > 0) {\n result += String.fromCharCode(...units);\n }\n\n return result;\n}\n\nconst sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null;\nexport const TEXT_DECODER_THRESHOLD = process.env.TEXT_DECODER !== \"force\" ? 200 : 0;\n\nexport function utf8DecodeTD(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return sharedTextDecoder!.decode(stringBytes);\n}\n","/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nexport class ExtData {\n constructor(readonly type: number, readonly data: Uint8Array) {}\n}\n","// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\n\nexport function setUint64(view: DataView, offset: number, value: number): void {\n const high = value / 0x1_0000_0000;\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function setInt64(view: DataView, offset: number, value: number): void {\n const high = Math.floor(value / 0x1_0000_0000);\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function getInt64(view: DataView, offset: number) {\n const high = view.getInt32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n\nexport function getUint64(view: DataView, offset: number) {\n const high = view.getUint32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n","// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { getInt64, setInt64 } from \"./utils/int\";\n\nexport const EXT_TIMESTAMP = -1;\n\nexport type TimeSpec = {\n sec: number;\n nsec: number;\n};\n\nconst TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nconst TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\n\nexport function encodeTimeSpecToTimestamp({ sec, nsec }: TimeSpec): Uint8Array {\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n const rv = new Uint8Array(4);\n const view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n } else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n const secHigh = sec / 0x100000000;\n const secLow = sec & 0xffffffff;\n const rv = new Uint8Array(8);\n const view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n } else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n const rv = new Uint8Array(12);\n const view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\n\nexport function encodeDateToTimeSpec(date: Date): TimeSpec {\n const msec = date.getTime();\n const sec = Math.floor(msec / 1e3);\n const nsec = (msec - sec * 1e3) * 1e6;\n\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n const nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\n\nexport function encodeTimestampExtension(object: unknown): Uint8Array | null {\n if (object instanceof Date) {\n const timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n } else {\n return null;\n }\n}\n\nexport function decodeTimestampToTimeSpec(data: Uint8Array): TimeSpec {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n const sec = view.getUint32(0);\n const nsec = 0;\n return { sec, nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n const nsec30AndSecHigh2 = view.getUint32(0);\n const secLow32 = view.getUint32(4);\n const sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n const nsec = nsec30AndSecHigh2 >>> 2;\n return { sec, nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n\n const sec = getInt64(view, 4);\n const nsec = view.getUint32(0);\n return { sec, nsec };\n }\n default:\n throw new Error(`Unrecognized data size for timestamp: ${data.length}`);\n }\n}\n\nexport function decodeTimestampExtension(data: Uint8Array): Date {\n const timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\n\nexport const timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n","// ExtensionCodec to handle MessagePack extensions\n\nimport { ExtData } from \"./ExtData\";\nimport { timestampExtension } from \"./timestamp\";\n\nexport type ExtensionDecoderType = (\n data: Uint8Array,\n extensionType: number,\n context: ContextType,\n) => unknown;\n\nexport type ExtensionEncoderType = (input: unknown, context: ContextType) => Uint8Array | null;\n\n// immutable interfce to ExtensionCodec\nexport type ExtensionCodecType = {\n __brand?: ContextType;\n tryToEncode(object: unknown, context: ContextType): ExtData | null;\n decode(data: Uint8Array, extType: number, context: ContextType): unknown;\n};\n\nexport class ExtensionCodec implements ExtensionCodecType {\n public static readonly defaultCodec: ExtensionCodecType = new ExtensionCodec();\n\n // ensures ExtensionCodecType matches ExtensionCodec\n // this will make type errors a lot more clear\n __brand?: ContextType;\n\n // built-in extensions\n private readonly builtInEncoders: Array | undefined | null> = [];\n private readonly builtInDecoders: Array | undefined | null> = [];\n\n // custom extensions\n private readonly encoders: Array | undefined | null> = [];\n private readonly decoders: Array | undefined | null> = [];\n\n public constructor() {\n this.register(timestampExtension);\n }\n\n public register({\n type,\n encode,\n decode,\n }: {\n type: number;\n encode: ExtensionEncoderType;\n decode: ExtensionDecoderType;\n }): void {\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n } else {\n // built-in extensions\n const index = 1 + type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n }\n\n public tryToEncode(object: unknown, context: ContextType): ExtData | null {\n // built-in extensions\n for (let i = 0; i < this.builtInEncoders.length; i++) {\n const encoder = this.builtInEncoders[i];\n if (encoder != null) {\n const data = encoder(object, context);\n if (data != null) {\n const type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n\n // custom extensions\n for (let i = 0; i < this.encoders.length; i++) {\n const encoder = this.encoders[i];\n if (encoder != null) {\n const data = encoder(object, context);\n if (data != null) {\n const type = i;\n return new ExtData(type, data);\n }\n }\n }\n\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n }\n\n public decode(data: Uint8Array, type: number, context: ContextType): unknown {\n const decoder = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decoder) {\n return decoder(data, type, context);\n } else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n }\n}\n","export function ensureUint8Array(buffer: ArrayLike | Uint8Array | ArrayBufferView | ArrayBuffer) {\n if (buffer instanceof Uint8Array) {\n return buffer;\n } else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n } else if (buffer instanceof ArrayBuffer) {\n return new Uint8Array(buffer);\n } else {\n // ArrayLike\n return Uint8Array.from(buffer);\n }\n}\n\nexport function createDataView(buffer: ArrayLike | ArrayBufferView | ArrayBuffer): DataView {\n if (buffer instanceof ArrayBuffer) {\n return new DataView(buffer);\n }\n\n const bufferView = ensureUint8Array(buffer);\n return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\n}\n","import { utf8EncodeJs, utf8Count, TEXT_ENCODING_AVAILABLE, TEXT_ENCODER_THRESHOLD, utf8EncodeTE } from \"./utils/utf8\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { setInt64, setUint64 } from \"./utils/int\";\nimport { ensureUint8Array } from \"./utils/typedArrays\";\nimport { ExtData } from \"./ExtData\";\n\nexport const DEFAULT_MAX_DEPTH = 100;\nexport const DEFAULT_INITIAL_BUFFER_SIZE = 2048;\n\nexport class Encoder {\n private pos = 0;\n private view = new DataView(new ArrayBuffer(this.initialBufferSize));\n private bytes = new Uint8Array(this.view.buffer);\n\n constructor(\n readonly extensionCodec: ExtensionCodecType = ExtensionCodec.defaultCodec as any,\n readonly context: ContextType,\n readonly maxDepth = DEFAULT_MAX_DEPTH,\n readonly initialBufferSize = DEFAULT_INITIAL_BUFFER_SIZE,\n readonly sortKeys = false,\n readonly forceFloat32 = false,\n ) {}\n\n encode(object: unknown, depth: number): void {\n if (depth > this.maxDepth) {\n throw new Error(`Too deep objects in depth ${depth}`);\n }\n\n if (object == null) {\n this.encodeNil();\n } else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n } else if (typeof object === \"number\") {\n this.encodeNumber(object);\n } else if (typeof object === \"string\") {\n this.encodeString(object);\n } else {\n this.encodeObject(object, depth);\n }\n }\n\n getUint8Array(): Uint8Array {\n return this.bytes.subarray(0, this.pos);\n }\n\n ensureBufferSizeToWrite(sizeToWrite: number) {\n const requiredSize = this.pos + sizeToWrite;\n\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n }\n\n resizeBuffer(newSize: number) {\n const newBuffer = new ArrayBuffer(newSize);\n const newBytes = new Uint8Array(newBuffer);\n const newView = new DataView(newBuffer);\n\n newBytes.set(this.bytes);\n\n this.view = newView;\n this.bytes = newBytes;\n }\n\n encodeNil() {\n this.writeU8(0xc0);\n }\n\n encodeBoolean(object: boolean) {\n if (object === false) {\n this.writeU8(0xc2);\n } else {\n this.writeU8(0xc3);\n }\n }\n encodeNumber(object: number) {\n if (Number.isSafeInteger(object)) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n } else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n } else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n } else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n } else {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n }\n } else {\n if (object >= -0x20) {\n // nagative fixint\n this.writeU8(0xe0 | (object + 0x20));\n } else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n } else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n } else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n } else {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n }\n }\n } else {\n // non-integer numbers\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n } else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n }\n }\n\n writeStringHeader(byteLength: number) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n } else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n } else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n } else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n } else {\n throw new Error(`Too long string: ${byteLength} bytes in UTF-8`);\n }\n }\n\n encodeString(object: string) {\n const maxHeaderSize = 1 + 4;\n const strLength = object.length;\n\n if (TEXT_ENCODING_AVAILABLE && strLength > TEXT_ENCODER_THRESHOLD) {\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeTE(object, this.bytes, this.pos);\n this.pos += byteLength;\n } else {\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeJs(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n }\n\n encodeObject(object: unknown, depth: number) {\n // try to encode objects with custom codec first of non-primitives\n const ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n } else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n } else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n } else if (typeof object === \"object\") {\n this.encodeMap(object as Record, depth);\n } else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`);\n }\n }\n\n encodeBinary(object: ArrayBufferView) {\n const size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n } else {\n throw new Error(`Too large binary: ${size}`);\n }\n const bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n }\n\n encodeArray(object: Array, depth: number) {\n const size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n } else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n } else {\n throw new Error(`Too large array: ${size}`);\n }\n for (const item of object) {\n this.encode(item, depth + 1);\n }\n }\n\n encodeMap(object: Record, depth: number) {\n const keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n const size = keys.length;\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n } else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n } else {\n throw new Error(`Too large map object: ${size}`);\n }\n\n for (let i = 0; i < size; i++) {\n const key = keys[i];\n this.encodeString(key);\n this.encode(object[key], depth + 1);\n }\n }\n\n encodeExtension(ext: ExtData) {\n const size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n } else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n } else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n } else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n } else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n } else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n } else {\n throw new Error(`Too large extension object: ${size}`);\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n }\n\n writeU8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setUint8(this.pos, value);\n this.pos++;\n }\n\n writeU8a(values: ArrayLike) {\n const size = values.length;\n this.ensureBufferSizeToWrite(size);\n\n this.bytes.set(values, this.pos);\n this.pos += size;\n }\n\n writeI8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setInt8(this.pos, value);\n this.pos++;\n }\n\n writeU16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n }\n\n writeI16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n }\n\n writeU32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n }\n\n writeI32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n }\n\n writeF32(value: number) {\n this.ensureBufferSizeToWrite(4);\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n }\n\n writeF64(value: number) {\n this.ensureBufferSizeToWrite(8);\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n }\n\n writeU64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n }\n\n writeI64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n }\n}\n","import { ExtensionCodecType } from \"./ExtensionCodec\";\nimport { Encoder } from \"./Encoder\";\nimport { ContextOf, SplitUndefined } from \"./context\";\n\nexport type EncodeOptions = Partial<\n Readonly<{\n extensionCodec: ExtensionCodecType;\n maxDepth: number;\n initialBufferSize: number;\n sortKeys: boolean;\n\n /**\n * If `true`, non-integer numbers are encoded in float32, not in float64 (the default).\n *\n * Only use it if precisions don't matter.\n */\n forceFloat32: boolean;\n }>\n> &\n ContextOf;\n\nconst defaultEncodeOptions: EncodeOptions = {};\n\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode(\n value: unknown,\n options: EncodeOptions> = defaultEncodeOptions as any,\n): Uint8Array {\n const encoder = new Encoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxDepth,\n options.initialBufferSize,\n options.sortKeys,\n options.forceFloat32,\n );\n encoder.encode(value, 1);\n return encoder.getUint8Array();\n}\n","export function prettyByte(byte: number): string {\n return `${byte < 0 ? \"-\" : \"\"}0x${Math.abs(byte)\n .toString(16)\n .padStart(2, \"0\")}`;\n}\n","import { utf8DecodeJs } from \"./utils/utf8\";\n\ninterface KeyCacheRecord {\n readonly bytes: Uint8Array;\n readonly value: string;\n}\n\nconst DEFAULT_MAX_KEY_LENGTH = 16;\nconst DEFAULT_MAX_LENGTH_PER_KEY = 16;\n\nexport class CachedKeyDecoder {\n private readonly caches: Array>;\n\n constructor(readonly maxKeyLength = DEFAULT_MAX_KEY_LENGTH, readonly maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY) {\n // avoid `new Array(N)` to create a non-sparse array for performance.\n this.caches = [];\n for (let i = 0; i < this.maxKeyLength; i++) {\n this.caches.push([]);\n }\n }\n\n public canBeCached(byteLength: number) {\n return byteLength > 0 && byteLength <= this.maxKeyLength;\n }\n\n private get(bytes: Uint8Array, inputOffset: number, byteLength: number): string | null {\n const records = this.caches[byteLength - 1];\n const recordsLength = records.length;\n\n FIND_CHUNK: for (let i = 0; i < recordsLength; i++) {\n const record = records[i];\n const recordBytes = record.bytes;\n\n for (let j = 0; j < byteLength; j++) {\n if (recordBytes[j] !== bytes[inputOffset + j]) {\n continue FIND_CHUNK;\n }\n }\n return record.value;\n }\n return null;\n }\n\n private store(bytes: Uint8Array, value: string) {\n const records = this.caches[bytes.length - 1];\n const record: KeyCacheRecord = { bytes, value };\n\n if (records.length >= this.maxLengthPerKey) {\n // `records` are full!\n // Set `record` to a randomized position.\n records[(Math.random() * records.length) | 0] = record;\n } else {\n records.push(record);\n }\n }\n\n public decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const cachedValue = this.get(bytes, inputOffset, byteLength);\n if (cachedValue != null) {\n return cachedValue;\n }\n\n const value = utf8DecodeJs(bytes, inputOffset, byteLength);\n // Ensure to copy a slice of bytes because the byte may be NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.\n const slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);\n this.store(slicedCopyOfBytes, value);\n return value;\n }\n}\n","import { prettyByte } from \"./utils/prettyByte\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { getInt64, getUint64 } from \"./utils/int\";\nimport { utf8DecodeJs, TEXT_ENCODING_AVAILABLE, TEXT_DECODER_THRESHOLD, utf8DecodeTD } from \"./utils/utf8\";\nimport { createDataView, ensureUint8Array } from \"./utils/typedArrays\";\nimport { CachedKeyDecoder } from \"./CachedKeyDecoder\";\n\nconst enum State {\n ARRAY,\n MAP_KEY,\n MAP_VALUE,\n}\n\ntype MapKeyType = string | number;\n\nconst isValidMapKeyType = (key: unknown): key is MapKeyType => {\n const keyType = typeof key;\n\n return keyType === \"string\" || keyType === \"number\";\n};\n\ntype StackMapState = {\n type: State.MAP_KEY | State.MAP_VALUE;\n size: number;\n key: MapKeyType | null;\n readCount: number;\n map: Record;\n};\n\ntype StackArrayState = {\n type: State.ARRAY;\n size: number;\n array: Array;\n position: number;\n};\n\ntype StackState = StackArrayState | StackMapState;\n\nconst HEAD_BYTE_REQUIRED = -1;\n\nconst EMPTY_VIEW = new DataView(new ArrayBuffer(0));\nconst EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer);\n\n// IE11: Hack to support IE11.\n// IE11: Drop this hack and just use RangeError when IE11 is obsolete.\nexport const DataViewIndexOutOfBoundsError: typeof Error = (() => {\n try {\n // IE11: The spec says it should throw RangeError,\n // IE11: but in IE11 it throws TypeError.\n EMPTY_VIEW.getInt8(0);\n } catch (e) {\n return e.constructor;\n }\n throw new Error(\"never reached\");\n})();\n\nconst MORE_DATA = new DataViewIndexOutOfBoundsError(\"Insufficient data\");\n\nconst DEFAULT_MAX_LENGTH = 0xffff_ffff; // uint32_max\n\nconst sharedCachedKeyDecoder = new CachedKeyDecoder();\n\nexport class Decoder {\n totalPos = 0;\n pos = 0;\n\n view = EMPTY_VIEW;\n bytes = EMPTY_BYTES;\n headByte = HEAD_BYTE_REQUIRED;\n readonly stack: Array = [];\n\n constructor(\n readonly extensionCodec: ExtensionCodecType = ExtensionCodec.defaultCodec as any,\n readonly context: ContextType,\n readonly maxStrLength = DEFAULT_MAX_LENGTH,\n readonly maxBinLength = DEFAULT_MAX_LENGTH,\n readonly maxArrayLength = DEFAULT_MAX_LENGTH,\n readonly maxMapLength = DEFAULT_MAX_LENGTH,\n readonly maxExtLength = DEFAULT_MAX_LENGTH,\n readonly cachedKeyDecoder: CachedKeyDecoder | null = sharedCachedKeyDecoder,\n ) {}\n\n setBuffer(buffer: ArrayLike | ArrayBuffer): void {\n this.bytes = ensureUint8Array(buffer);\n this.view = createDataView(this.bytes);\n this.pos = 0;\n }\n\n appendBuffer(buffer: ArrayLike) {\n if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining()) {\n this.setBuffer(buffer);\n } else {\n // retried because data is insufficient\n const remainingData = this.bytes.subarray(this.pos);\n const newData = ensureUint8Array(buffer);\n const concated = new Uint8Array(remainingData.length + newData.length);\n concated.set(remainingData);\n concated.set(newData, remainingData.length);\n this.setBuffer(concated);\n }\n }\n\n hasRemaining(size = 1) {\n return this.view.byteLength - this.pos >= size;\n }\n\n createNoExtraBytesError(posToShow: number): Error {\n const { view, pos } = this;\n return new RangeError(`Extra ${view.byteLength - pos} byte(s) found at buffer[${posToShow}]`);\n }\n\n decodeSingleSync(): unknown {\n const object = this.decodeSync();\n if (this.hasRemaining()) {\n throw this.createNoExtraBytesError(this.pos);\n }\n return object;\n }\n\n async decodeSingleAsync(stream: AsyncIterable>): Promise {\n let decoded = false;\n let object: unknown;\n for await (const buffer of stream) {\n if (decoded) {\n throw this.createNoExtraBytesError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n try {\n object = this.decodeSync();\n decoded = true;\n } catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n\n if (decoded) {\n if (this.hasRemaining()) {\n throw this.createNoExtraBytesError(this.totalPos);\n }\n return object;\n }\n\n const { headByte, pos, totalPos } = this;\n throw new RangeError(\n `Insufficient data in parcing ${prettyByte(headByte)} at ${totalPos} (${pos} in the current buffer)`,\n );\n }\n\n decodeArrayStream(stream: AsyncIterable>) {\n return this.decodeMultiAsync(stream, true);\n }\n\n decodeStream(stream: AsyncIterable>) {\n return this.decodeMultiAsync(stream, false);\n }\n\n private async *decodeMultiAsync(stream: AsyncIterable>, isArray: boolean) {\n let isArrayHeaderRequired = isArray;\n let arrayItemsLeft = -1;\n\n for await (const buffer of stream) {\n if (isArray && arrayItemsLeft === 0) {\n throw this.createNoExtraBytesError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n if (isArrayHeaderRequired) {\n arrayItemsLeft = this.readArraySize();\n isArrayHeaderRequired = false;\n this.complete();\n }\n\n try {\n while (true) {\n yield this.decodeSync();\n if (--arrayItemsLeft === 0) {\n break;\n }\n }\n } catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n }\n\n decodeSync(): unknown {\n DECODE: while (true) {\n const headByte = this.readHeadByte();\n let object: unknown;\n\n if (headByte >= 0xe0) {\n // negative fixint (111x xxxx) 0xe0 - 0xff\n object = headByte - 0x100;\n } else if (headByte < 0xc0) {\n if (headByte < 0x80) {\n // positive fixint (0xxx xxxx) 0x00 - 0x7f\n object = headByte;\n } else if (headByte < 0x90) {\n // fixmap (1000 xxxx) 0x80 - 0x8f\n const size = headByte - 0x80;\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte < 0xa0) {\n // fixarray (1001 xxxx) 0x90 - 0x9f\n const size = headByte - 0x90;\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else {\n // fixstr (101x xxxx) 0xa0 - 0xbf\n const byteLength = headByte - 0xa0;\n object = this.decodeUtf8String(byteLength, 0);\n }\n } else if (headByte === 0xc0) {\n // nil\n object = null;\n } else if (headByte === 0xc2) {\n // false\n object = false;\n } else if (headByte === 0xc3) {\n // true\n object = true;\n } else if (headByte === 0xca) {\n // float 32\n object = this.readF32();\n } else if (headByte === 0xcb) {\n // float 64\n object = this.readF64();\n } else if (headByte === 0xcc) {\n // uint 8\n object = this.readU8();\n } else if (headByte === 0xcd) {\n // uint 16\n object = this.readU16();\n } else if (headByte === 0xce) {\n // uint 32\n object = this.readU32();\n } else if (headByte === 0xcf) {\n // uint 64\n object = this.readU64();\n } else if (headByte === 0xd0) {\n // int 8\n object = this.readI8();\n } else if (headByte === 0xd1) {\n // int 16\n object = this.readI16();\n } else if (headByte === 0xd2) {\n // int 32\n object = this.readI32();\n } else if (headByte === 0xd3) {\n // int 64\n object = this.readI64();\n } else if (headByte === 0xd9) {\n // str 8\n const byteLength = this.lookU8();\n object = this.decodeUtf8String(byteLength, 1);\n } else if (headByte === 0xda) {\n // str 16\n const byteLength = this.lookU16();\n object = this.decodeUtf8String(byteLength, 2);\n } else if (headByte === 0xdb) {\n // str 32\n const byteLength = this.lookU32();\n object = this.decodeUtf8String(byteLength, 4);\n } else if (headByte === 0xdc) {\n // array 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xdd) {\n // array 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xde) {\n // map 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xdf) {\n // map 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xc4) {\n // bin 8\n const size = this.lookU8();\n object = this.decodeBinary(size, 1);\n } else if (headByte === 0xc5) {\n // bin 16\n const size = this.lookU16();\n object = this.decodeBinary(size, 2);\n } else if (headByte === 0xc6) {\n // bin 32\n const size = this.lookU32();\n object = this.decodeBinary(size, 4);\n } else if (headByte === 0xd4) {\n // fixext 1\n object = this.decodeExtension(1, 0);\n } else if (headByte === 0xd5) {\n // fixext 2\n object = this.decodeExtension(2, 0);\n } else if (headByte === 0xd6) {\n // fixext 4\n object = this.decodeExtension(4, 0);\n } else if (headByte === 0xd7) {\n // fixext 8\n object = this.decodeExtension(8, 0);\n } else if (headByte === 0xd8) {\n // fixext 16\n object = this.decodeExtension(16, 0);\n } else if (headByte === 0xc7) {\n // ext 8\n const size = this.lookU8();\n object = this.decodeExtension(size, 1);\n } else if (headByte === 0xc8) {\n // ext 16\n const size = this.lookU16();\n object = this.decodeExtension(size, 2);\n } else if (headByte === 0xc9) {\n // ext 32\n const size = this.lookU32();\n object = this.decodeExtension(size, 4);\n } else {\n throw new Error(`Unrecognized type byte: ${prettyByte(headByte)}`);\n }\n\n this.complete();\n\n const stack = this.stack;\n while (stack.length > 0) {\n // arrays and maps\n const state = stack[stack.length - 1];\n if (state.type === State.ARRAY) {\n state.array[state.position] = object;\n state.position++;\n if (state.position === state.size) {\n stack.pop();\n object = state.array;\n } else {\n continue DECODE;\n }\n } else if (state.type === State.MAP_KEY) {\n if (!isValidMapKeyType(object)) {\n throw new Error(\"The type of key must be string or number but \" + typeof object);\n }\n\n state.key = object;\n state.type = State.MAP_VALUE;\n continue DECODE;\n } else {\n // it must be `state.type === State.MAP_VALUE` here\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n state.map[state.key!] = object;\n state.readCount++;\n\n if (state.readCount === state.size) {\n stack.pop();\n object = state.map;\n } else {\n state.key = null;\n state.type = State.MAP_KEY;\n continue DECODE;\n }\n }\n }\n\n return object;\n }\n }\n\n readHeadByte(): number {\n if (this.headByte === HEAD_BYTE_REQUIRED) {\n this.headByte = this.readU8();\n // console.log(\"headByte\", prettyByte(this.headByte));\n }\n\n return this.headByte;\n }\n\n complete(): void {\n this.headByte = HEAD_BYTE_REQUIRED;\n }\n\n readArraySize(): number {\n const headByte = this.readHeadByte();\n\n switch (headByte) {\n case 0xdc:\n return this.readU16();\n case 0xdd:\n return this.readU32();\n default: {\n if (headByte < 0xa0) {\n return headByte - 0x90;\n } else {\n throw new Error(`Unrecognized array type byte: ${prettyByte(headByte)}`);\n }\n }\n }\n }\n\n pushMapState(size: number) {\n if (size > this.maxMapLength) {\n throw new Error(`Max length exceeded: map length (${size}) > maxMapLengthLength (${this.maxMapLength})`);\n }\n\n this.stack.push({\n type: State.MAP_KEY,\n size,\n key: null,\n readCount: 0,\n map: {},\n });\n }\n\n pushArrayState(size: number) {\n if (size > this.maxArrayLength) {\n throw new Error(`Max length exceeded: array length (${size}) > maxArrayLength (${this.maxArrayLength})`);\n }\n\n this.stack.push({\n type: State.ARRAY,\n size,\n array: new Array(size),\n position: 0,\n });\n }\n\n decodeUtf8String(byteLength: number, headerOffset: number): string {\n if (byteLength > this.maxStrLength) {\n throw new Error(`Max length exceeded: UTF-8 byte length (${byteLength}) > maxStrLength (${this.maxStrLength})`);\n }\n\n if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headerOffset;\n let object: string;\n if (this.stateIsMapKey() && this.cachedKeyDecoder?.canBeCached(byteLength)) {\n object = this.cachedKeyDecoder.decode(this.bytes, offset, byteLength);\n } else if (TEXT_ENCODING_AVAILABLE && byteLength > TEXT_DECODER_THRESHOLD) {\n object = utf8DecodeTD(this.bytes, offset, byteLength);\n } else {\n object = utf8DecodeJs(this.bytes, offset, byteLength);\n }\n this.pos += headerOffset + byteLength;\n return object;\n }\n\n stateIsMapKey(): boolean {\n if (this.stack.length > 0) {\n const state = this.stack[this.stack.length - 1];\n return state.type === State.MAP_KEY;\n }\n return false;\n }\n\n decodeBinary(byteLength: number, headOffset: number): Uint8Array {\n if (byteLength > this.maxBinLength) {\n throw new Error(`Max length exceeded: bin length (${byteLength}) > maxBinLength (${this.maxBinLength})`);\n }\n\n if (!this.hasRemaining(byteLength + headOffset)) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headOffset;\n const object = this.bytes.subarray(offset, offset + byteLength);\n this.pos += headOffset + byteLength;\n return object;\n }\n\n decodeExtension(size: number, headOffset: number): unknown {\n if (size > this.maxExtLength) {\n throw new Error(`Max length exceeded: ext length (${size}) > maxExtLength (${this.maxExtLength})`);\n }\n\n const extType = this.view.getInt8(this.pos + headOffset);\n const data = this.decodeBinary(size, headOffset + 1 /* extType */);\n return this.extensionCodec.decode(data, extType, this.context);\n }\n\n lookU8() {\n return this.view.getUint8(this.pos);\n }\n\n lookU16() {\n return this.view.getUint16(this.pos);\n }\n\n lookU32() {\n return this.view.getUint32(this.pos);\n }\n\n readU8(): number {\n const value = this.view.getUint8(this.pos);\n this.pos++;\n return value;\n }\n\n readI8(): number {\n const value = this.view.getInt8(this.pos);\n this.pos++;\n return value;\n }\n\n readU16(): number {\n const value = this.view.getUint16(this.pos);\n this.pos += 2;\n return value;\n }\n\n readI16(): number {\n const value = this.view.getInt16(this.pos);\n this.pos += 2;\n return value;\n }\n\n readU32(): number {\n const value = this.view.getUint32(this.pos);\n this.pos += 4;\n return value;\n }\n\n readI32(): number {\n const value = this.view.getInt32(this.pos);\n this.pos += 4;\n return value;\n }\n\n readU64(): number {\n const value = getUint64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n readI64(): number {\n const value = getInt64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n readF32() {\n const value = this.view.getFloat32(this.pos);\n this.pos += 4;\n return value;\n }\n\n readF64() {\n const value = this.view.getFloat64(this.pos);\n this.pos += 8;\n return value;\n }\n}\n","import { ExtensionCodecType } from \"./ExtensionCodec\";\nimport { Decoder } from \"./Decoder\";\nimport { ContextOf, SplitUndefined } from \"./context\";\n\nexport type DecodeOptions = Readonly<\n Partial<{\n extensionCodec: ExtensionCodecType;\n\n /**\n * Maximum string length.\n * Default to 4_294_967_295 (UINT32_MAX).\n */\n maxStrLength: number;\n /**\n * Maximum binary length.\n * Default to 4_294_967_295 (UINT32_MAX).\n */\n maxBinLength: number;\n /**\n * Maximum array length.\n * Default to 4_294_967_295 (UINT32_MAX).\n */\n maxArrayLength: number;\n /**\n * Maximum map length.\n * Default to 4_294_967_295 (UINT32_MAX).\n */\n maxMapLength: number;\n /**\n * Maximum extension length.\n * Default to 4_294_967_295 (UINT32_MAX).\n */\n maxExtLength: number;\n }>\n> &\n ContextOf;\n\nexport const defaultDecodeOptions: DecodeOptions = {};\n\n/**\n * It decodes a MessagePack-encoded buffer.\n *\n * This is a synchronous decoding function. See other variants for asynchronous decoding: `decodeAsync()`, `decodeStream()`, `decodeArrayStream()`.\n */\nexport function decode(\n buffer: ArrayLike | ArrayBuffer,\n options: DecodeOptions> = defaultDecodeOptions as any,\n): unknown {\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n decoder.setBuffer(buffer); // decodeSync() requires only one buffer\n return decoder.decodeSingleSync();\n}\n","// utility for whatwg streams\n\n// The living standard of whatwg streams says\n// ReadableStream is also AsyncIterable, but\n// as of June 2019, no browser implements it.\n// See https://streams.spec.whatwg.org/ for details\nexport type ReadableStreamLike = AsyncIterable | ReadableStream;\n\nexport function isAsyncIterable(object: object): object is AsyncIterable {\n return (object as any)[Symbol.asyncIterator] != null;\n}\n\nexport async function* asyncIterableFromStream(stream: ReadableStream): AsyncIterable {\n const reader = stream.getReader();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function ensureAsyncIterabe(streamLike: ReadableStreamLike): AsyncIterable {\n if (isAsyncIterable(streamLike)) {\n return streamLike;\n } else {\n return asyncIterableFromStream(streamLike);\n }\n}\n","import { Decoder } from \"./Decoder\";\nimport { defaultDecodeOptions, DecodeOptions } from \"./decode\";\nimport { ensureAsyncIterabe, ReadableStreamLike } from \"./utils/stream\";\nimport { SplitUndefined } from \"./context\";\n\nexport async function decodeAsync(\n streamLike: ReadableStreamLike>,\n options: DecodeOptions> = defaultDecodeOptions as any,\n): Promise {\n const stream = ensureAsyncIterabe(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decodeSingleAsync(stream);\n}\n\nexport function decodeArrayStream(\n streamLike: ReadableStreamLike>,\n options: DecodeOptions> = defaultDecodeOptions as any,\n) {\n const stream = ensureAsyncIterabe(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n\n return decoder.decodeArrayStream(stream);\n}\n\nexport function decodeStream(\n streamLike: ReadableStreamLike>,\n options: DecodeOptions> = defaultDecodeOptions as any,\n) {\n const stream = ensureAsyncIterabe(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n\n return decoder.decodeStream(stream);\n}\n","// Main Functions:\n\nexport { encode, EncodeOptions } from \"./encode\";\nexport { decode, DecodeOptions } from \"./decode\";\nexport { decodeAsync, decodeArrayStream, decodeStream } from \"./decodeAsync\";\n\n/**\n * @experimental `Decoder` is exported for experimental use.\n */\nexport { Decoder } from \"./Decoder\";\n\n/**\n * @experimental `Encoder` is exported for experimental use.\n */\nexport { Encoder } from \"./Encoder\";\n\n// Utilitiies for Extension Types:\n\nexport { ExtensionCodec, ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType } from \"./ExtensionCodec\";\nexport { ExtData } from \"./ExtData\";\nexport {\n EXT_TIMESTAMP,\n encodeDateToTimeSpec,\n encodeTimeSpecToTimestamp,\n decodeTimestampToTimeSpec,\n encodeTimestampExtension,\n decodeTimestampExtension,\n} from \"./timestamp\";\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/Server/wwwroot/scripts/CommandProcessor.js b/Server/wwwroot/scripts/CommandProcessor.js
index dd1cd4fa..acfe02cb 100644
--- a/Server/wwwroot/scripts/CommandProcessor.js
+++ b/Server/wwwroot/scripts/CommandProcessor.js
@@ -18,6 +18,9 @@ export function EvaluateCurrentCommandText() {
DisplayCommandShortcuts(UI.ConsoleTextArea.value.slice(1));
return;
}
+ if (UI.ConsoleTextArea.value.endsWith(" ")) {
+ return;
+ }
var relevantText = GetRelevantCommandText(UI.ConsoleTextArea.value);
var commandInputArray = Main.Utilities.Split(relevantText, " ", 2);
var matchingCommands = GetCommandCompletions(commandInputArray[0]);
diff --git a/Server/wwwroot/scripts/CommandProcessor.js.map b/Server/wwwroot/scripts/CommandProcessor.js.map
index 22cb93a1..cf206fbd 100644
--- a/Server/wwwroot/scripts/CommandProcessor.js.map
+++ b/Server/wwwroot/scripts/CommandProcessor.js.map
@@ -1 +1 @@
-{"version":3,"file":"CommandProcessor.js","sourceRoot":"","sources":["CommandProcessor.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"CommandProcessor.js","sourceRoot":"","sources":["CommandProcessor.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Server/wwwroot/scripts/CommandProcessor.ts b/Server/wwwroot/scripts/CommandProcessor.ts
index 12546bf1..2b0c274b 100644
--- a/Server/wwwroot/scripts/CommandProcessor.ts
+++ b/Server/wwwroot/scripts/CommandProcessor.ts
@@ -21,6 +21,9 @@ export function EvaluateCurrentCommandText() {
DisplayCommandShortcuts(UI.ConsoleTextArea.value.slice(1));
return;
}
+ if (UI.ConsoleTextArea.value.endsWith(" ")) {
+ return;
+ }
var relevantText = GetRelevantCommandText(UI.ConsoleTextArea.value);
var commandInputArray = Main.Utilities.Split(relevantText, " ", 2);
var matchingCommands = GetCommandCompletions(commandInputArray[0]);
diff --git a/Server/wwwroot/scripts/RemoteControl/RCBrowserSockets.js b/Server/wwwroot/scripts/RemoteControl/RCBrowserSockets.js
index ce0bcd27..08d79c40 100644
--- a/Server/wwwroot/scripts/RemoteControl/RCBrowserSockets.js
+++ b/Server/wwwroot/scripts/RemoteControl/RCBrowserSockets.js
@@ -37,6 +37,9 @@ export class RCBrowserSockets {
if (candidate) {
this.Connection.invoke("SendIceCandidateToAgent", candidate.candidate, candidate.sdpMLineIndex, candidate.sdpMid);
}
+ else {
+ this.Connection.invoke("SendIceCandidateToAgent", "", 0, "");
+ }
}
SendRtcAnswer(sessionDescription) {
this.Connection.invoke("SendRtcAnswerToAgent", sessionDescription.sdp);
@@ -136,6 +139,7 @@ export class RCBrowserSockets {
UI.Screen2DContext.clearRect(0, 0, width, height);
});
hubConnection.on("ScreenCapture", (buffer, left, top, width, height, captureTime) => {
+ console.log("Websocket frame received.");
this.SendLatencyUpdate(captureTime, buffer.byteLength);
var url = window.URL.createObjectURL(new Blob([buffer]));
var img = document.createElement("img");
diff --git a/Server/wwwroot/scripts/RemoteControl/RCBrowserSockets.js.map b/Server/wwwroot/scripts/RemoteControl/RCBrowserSockets.js.map
index a45fb264..c1e9b2cc 100644
--- a/Server/wwwroot/scripts/RemoteControl/RCBrowserSockets.js.map
+++ b/Server/wwwroot/scripts/RemoteControl/RCBrowserSockets.js.map
@@ -1 +1 @@
-{"version":3,"file":"RCBrowserSockets.js","sourceRoot":"","sources":["RCBrowserSockets.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"RCBrowserSockets.js","sourceRoot":"","sources":["RCBrowserSockets.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Server/wwwroot/scripts/RemoteControl/RCBrowserSockets.ts b/Server/wwwroot/scripts/RemoteControl/RCBrowserSockets.ts
index b1e3e03b..aa9863da 100644
--- a/Server/wwwroot/scripts/RemoteControl/RCBrowserSockets.ts
+++ b/Server/wwwroot/scripts/RemoteControl/RCBrowserSockets.ts
@@ -51,6 +51,9 @@ export class RCBrowserSockets {
if (candidate) {
this.Connection.invoke("SendIceCandidateToAgent", candidate.candidate, candidate.sdpMLineIndex, candidate.sdpMid);
}
+ else {
+ this.Connection.invoke("SendIceCandidateToAgent", "", 0, "");
+ }
}
SendRtcAnswer(sessionDescription: RTCSessionDescription) {
this.Connection.invoke("SendRtcAnswerToAgent", sessionDescription.sdp);
@@ -152,7 +155,7 @@ export class RCBrowserSockets {
UI.Screen2DContext.clearRect(0, 0, width, height);
});
hubConnection.on("ScreenCapture", (buffer: Uint8Array, left:number, top:number, width:number, height:number, captureTime: Date) => {
-
+ console.log("Websocket frame received.");
this.SendLatencyUpdate(captureTime, buffer.byteLength);
var url = window.URL.createObjectURL(new Blob([buffer]));
diff --git a/Server/wwwroot/scripts/RemoteControl/RtcSession.js b/Server/wwwroot/scripts/RemoteControl/RtcSession.js
index fc2adcfa..b00a6223 100644
--- a/Server/wwwroot/scripts/RemoteControl/RtcSession.js
+++ b/Server/wwwroot/scripts/RemoteControl/RtcSession.js
@@ -3,7 +3,7 @@ import * as Utilities from "../Utilities.js";
import { RemoteControl } from "./Main.js";
export class RtcSession {
constructor() {
- this.MsgPack5 = new window['msgpack5']();
+ this.MessagePack = window['MessagePack'];
}
Init() {
this.PeerConnection = new RTCPeerConnection({
@@ -24,8 +24,13 @@ export class RtcSession {
this.DataChannel.onerror = (ev) => {
console.log("Data channel error.", ev.error);
};
- this.DataChannel.onmessage = (ev) => {
- var frameInfo = this.MsgPack5.decode(ev.data);
+ this.DataChannel.onmessage = async (ev) => {
+ var data = ev.data;
+ if (ev.data.arrayBuffer) {
+ data = await ev.data.arrayBuffer();
+ }
+ console.log("WebRTC frame received. Size: " + data.byteLength);
+ var frameInfo = this.MessagePack.decode(data);
var url = window.URL.createObjectURL(new Blob([frameInfo.ImageBytes]));
var img = document.createElement("img");
img.onload = () => {
diff --git a/Server/wwwroot/scripts/RemoteControl/RtcSession.js.map b/Server/wwwroot/scripts/RemoteControl/RtcSession.js.map
index cf14a19e..9f5ed326 100644
--- a/Server/wwwroot/scripts/RemoteControl/RtcSession.js.map
+++ b/Server/wwwroot/scripts/RemoteControl/RtcSession.js.map
@@ -1 +1 @@
-{"version":3,"file":"RtcSession.js","sourceRoot":"","sources":["RtcSession.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"RtcSession.js","sourceRoot":"","sources":["RtcSession.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Server/wwwroot/scripts/RemoteControl/RtcSession.ts b/Server/wwwroot/scripts/RemoteControl/RtcSession.ts
index 270f5b67..8c67566a 100644
--- a/Server/wwwroot/scripts/RemoteControl/RtcSession.ts
+++ b/Server/wwwroot/scripts/RemoteControl/RtcSession.ts
@@ -6,7 +6,7 @@ import { RemoteControl } from "./Main.js";
export class RtcSession {
PeerConnection: RTCPeerConnection;
DataChannel: RTCDataChannel;
- MsgPack5: any = new window['msgpack5']();
+ MessagePack: any = window['MessagePack'];
Init() {
this.PeerConnection = new RTCPeerConnection({
iceServers: [
@@ -27,8 +27,14 @@ export class RtcSession {
this.DataChannel.onerror = (ev) => {
console.log("Data channel error.", ev.error);
};
- this.DataChannel.onmessage = (ev) => {
- var frameInfo = this.MsgPack5.decode(ev.data) as FrameInfo;
+ this.DataChannel.onmessage = async (ev) => {
+ var data = ev.data;
+
+ if (ev.data.arrayBuffer) {
+ data = await ev.data.arrayBuffer();
+ }
+ console.log("WebRTC frame received. Size: " + data.byteLength);
+ var frameInfo = this.MessagePack.decode(data) as FrameInfo;
var url = window.URL.createObjectURL(new Blob([frameInfo.ImageBytes]));
var img = document.createElement("img");
img.onload = () => {