{"version":3,"file":"smile-js.cjs","sources":["../src/error.ts","../src/inputStream.ts","../src/sharedStringBuffer.ts","../src/utils.ts","../src/zigZag.ts","../src/ascii.ts","../src/utf8.ts","../src/longString.ts","../node_modules/.pnpm/bit-buffer@0.2.5/node_modules/bit-buffer/bit-buffer.js","../src/float.ts","../src/fixedLengthBigEndian.ts","../src/vInt.ts","../src/bigInteger.ts","../src/safeBinary.ts","../src/bigDecimal.ts","../src/decoder.ts","../src/outputStream.ts","../src/encoder.ts"],"sourcesContent":["/**\n * SMILE error.\n */\nexport class SmileError extends Error {\n  constructor(msg: string) {\n    super(msg);\n  }\n}\n","import {SmileError} from './error.js';\n\nexport const eofError = new SmileError('end of input stream reached');\n\nexport class InputStream {\n    private readonly array: Uint8Array;\n    private index: number = 0;\n\n    constructor(array: Uint8Array) {\n        this.array = array;\n    }\n\n    public isEof(): boolean {\n        return (this.index >= this.array.length);\n    }\n\n    public read(): number {\n        if (this.isEof()) {\n            throw eofError;\n        }\n        const v = this.array[this.index];\n        this.index++;\n        return v;\n    }\n\n    public readArray(n: number): Uint8Array {\n        if (n < 0) {\n            throw new SmileError('invalid read amount');\n        }\n        if (n === 0) {\n            return new Uint8Array([]);\n        }\n        if (this.isEof()) {\n            throw eofError;\n        }\n        const endIndex = Math.min(this.array.length, this.index + n);\n        const readData = new Uint8Array(this.array.subarray(this.index, endIndex));\n        this.index = endIndex;\n        return readData;\n    }\n\n    public peek(): number {\n        if (this.isEof()) {\n            throw eofError;\n        }\n        return this.array[this.index];\n    }\n\n    public skip(n: number) {\n        if (this.isEof()) {\n            throw eofError;\n        }\n        if (n < 0) {\n            throw new SmileError('invalid skip amount');\n        }\n        this.index += n;\n    }\n}\n","import {SmileError} from './error.js';\n\nexport class SharedStringBuffer {\n    private readonly enabled: boolean;\n    private readonly maxStrings: number;\n    private strings: string[];\n    private stringMap: { [key: string]: number };\n\n    constructor(enabled: boolean, maxStrings: number) {\n        this.enabled = enabled;\n        this.maxStrings = maxStrings;\n        this.strings = [];\n        this.stringMap = {};\n        this.reset();\n    }\n\n    private reset(): void {\n        this.strings = [];\n        this.stringMap = {};\n    }\n\n    public addString(s: string): number {\n        if (!this.enabled) {\n            return -1;\n        }\n        const bytes = new TextEncoder().encode(s);\n        if (bytes.length > 64) {\n            return -1;\n        }\n        if (s in this.stringMap) {\n            return this.stringMap[s];\n        }\n        if (this.strings.length >= this.maxStrings) {\n            this.reset();\n        }\n        const index = this.strings.length;\n        this.strings.push(s);\n        this.stringMap[s] = index;\n        return index;\n    };\n\n    public getReference(s: string): number {\n        return ((this.enabled) && (s in this.stringMap)) ? this.stringMap[s] : -1;\n    }\n\n    public getString(index: number): string {\n        if (!this.enabled) {\n            throw new SmileError('shared strings are not enabled');\n        }\n        if (index >= this.strings.length) {\n            throw new SmileError(`shared string reference out of range`);\n        }\n        return this.strings[index];\n    };\n}\n","import {isInteger} from 'lossless-json';\n\nexport function normalizeNumber(value: number | bigint): number | bigint {\n    if (typeof value === 'bigint') {\n        if ((value >= BigInt(Number.MIN_SAFE_INTEGER)) && (value <= BigInt(Number.MAX_SAFE_INTEGER))) {\n            return Number(value);\n        } else {\n            return value;\n        }\n    } else {\n        return value;\n    }\n}\n\nexport function calcByteLen(inputByteLen: number, inputBitsPerByte: number, outputBitsPerByte: number): number {\n    if (inputBitsPerByte > outputBitsPerByte) {\n        return Math.ceil(inputByteLen * inputBitsPerByte / outputBitsPerByte);\n    } else {\n        return Math.floor(inputByteLen * inputBitsPerByte / outputBitsPerByte);\n    }\n}\n\nexport function jsonParseNumber(v: string): unknown {\n    if (isInteger(v)) {\n        const b = BigInt(v);\n        if ((b >= BigInt(Number.MIN_SAFE_INTEGER)) && (b <= BigInt(Number.MAX_SAFE_INTEGER))) {\n            return Number(b);\n        } else {\n            return b;\n        }\n    } else {\n        return parseFloat(v);\n    }\n}\n","import {SmileError} from './error.js';\nimport {normalizeNumber} from './utils.js';\n\nexport class ZigZag {\n    public static decode(value: number | bigint): number | bigint {\n        if (value < 0) {\n            throw new SmileError(\"illegal zigzag value\");\n        }\n        const v = BigInt(value);\n        const isOdd = ((v % BigInt(2)) === BigInt(1));\n        if (isOdd) {\n            return normalizeNumber(-(v + BigInt(1)) / BigInt(2));\n        } else {\n            return normalizeNumber(v / BigInt(2));\n        }\n    }\n\n    public static encode(value: number | bigint): number | bigint {\n        const v = BigInt(value);\n        const isNegative = (v < 0);\n        if (isNegative) {\n            return normalizeNumber((-v * BigInt(2)) - BigInt(1));\n        } else {\n            return normalizeNumber(v * BigInt(2));\n        }\n    }\n}\n","import {InputStream} from './inputStream.js';\nimport {OutputStream} from './outputStream.js';\n\nconst textDecoder = new TextDecoder('ascii');\nconst textEncoder = new TextEncoder(); // HACK 'utf8' is valid for 'ascii'\n\nexport class ASCII {\n    public static decode(bytes: Uint8Array): string {\n        return textDecoder.decode(bytes);\n    }\n\n    public static read(inputStream: InputStream, encodedByteLen: number): string {\n        const encodedBytes = inputStream.readArray(encodedByteLen);\n        return ASCII.decode(encodedBytes);\n    }\n\n    public static encode(s: string): Uint8Array {\n        return textEncoder.encode(s);\n    }\n\n    public static write(outputStream: OutputStream, s: string): void {\n        outputStream.write(ASCII.encode(s));\n    }\n\n    public static isASCII(s: string): boolean {\n        for (let i = 0; i < s.length; i++) {\n            if (s.charCodeAt(i) > 127) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n","import {InputStream} from './inputStream.js';\nimport {OutputStream} from './outputStream.js';\n\nconst textDecoder = new TextDecoder('utf8');\nconst textEncoder = new TextEncoder();\n\nexport class UTF8 {\n    public static decode(bytes: Uint8Array): string {\n        return textDecoder.decode(bytes);\n    }\n\n    public static read(inputStream: InputStream, encodedByteLen: number): string {\n        const encodedBytes = inputStream.readArray(encodedByteLen);\n        return UTF8.decode(encodedBytes);\n    }\n\n    public static encode(s: string): Uint8Array {\n        return textEncoder.encode(s);\n    }\n\n    public static write(outputStream: OutputStream, s: string): void {\n        outputStream.write(UTF8.encode(s));\n    }\n}\n","import {InputStream} from './inputStream.js';\nimport {OutputStream} from './outputStream.js';\nimport {ASCII} from './ascii.js';\nimport {UTF8} from './utf8.js';\n\nexport class LongString {\n    public static read(inputStream: InputStream): Uint8Array {\n        const buffer: number[] = [];\n        while (true) {\n            const c = inputStream.read();\n            if (c === 0xfc) {\n                break;\n            }\n            buffer.push(c);\n        }\n        return new Uint8Array(buffer);\n    }\n\n    public static readASCII(inputStream: InputStream): string {\n        return ASCII.decode(LongString.read(inputStream));\n    }\n\n    public static readUTF8(inputStream: InputStream): string {\n        return UTF8.decode(LongString.read(inputStream));\n    }\n\n    public static write(outputStream: OutputStream, bytes: Uint8Array): void {\n        outputStream.write(bytes);\n        outputStream.write(0xfc);\n    }\n\n    public static writeASCII(outputStream: OutputStream, s: string): void {\n        LongString.write(outputStream, ASCII.encode(s));\n    }\n\n    public static writeUTF8(outputStream: OutputStream, s: string): void {\n        LongString.write(outputStream, UTF8.encode(s));\n    }\n}\n","(function (root) {\n\n/**********************************************************\n *\n * BitView\n *\n * BitView provides a similar interface to the standard\n * DataView, but with support for bit-level reads / writes.\n *\n **********************************************************/\nvar BitView = function (source, byteOffset, byteLength) {\n\tvar isBuffer = source instanceof ArrayBuffer ||\n\t\t(typeof Buffer !== 'undefined' && source instanceof Buffer);\n\n\tif (!isBuffer) {\n\t\tthrow new Error('Must specify a valid ArrayBuffer or Buffer.');\n\t}\n\n\tbyteOffset = byteOffset || 0;\n\tbyteLength = byteLength || source.byteLength /* ArrayBuffer */ || source.length /* Buffer */;\n\n\tthis._view = new Uint8Array(source.buffer || source, byteOffset, byteLength);\n\n\tthis.bigEndian = false;\n};\n\n// Used to massage fp values so we can operate on them\n// at the bit level.\nBitView._scratch = new DataView(new ArrayBuffer(8));\n\nObject.defineProperty(BitView.prototype, 'buffer', {\n\tget: function () { return typeof Buffer !== 'undefined' ?  Buffer.from(this._view.buffer) : this._view.buffer; },\n\tenumerable: true,\n\tconfigurable: false\n});\n\nObject.defineProperty(BitView.prototype, 'byteLength', {\n\tget: function () { return this._view.length; },\n\tenumerable: true,\n\tconfigurable: false\n});\n\nBitView.prototype._setBit = function (offset, on) {\n\tif (on) {\n\t\tthis._view[offset >> 3] |= 1 << (offset & 7);\n\t} else {\n\t\tthis._view[offset >> 3] &= ~(1 << (offset & 7));\n\t}\n};\n\nBitView.prototype.getBits = function (offset, bits, signed) {\n\tvar available = (this._view.length * 8 - offset);\n\n\tif (bits > available) {\n\t\tthrow new Error('Cannot get ' + bits + ' bit(s) from offset ' + offset + ', ' + available + ' available');\n\t}\n\n\tvar value = 0;\n\tfor (var i = 0; i < bits;) {\n\t\tvar remaining = bits - i;\n\t\tvar bitOffset = offset & 7;\n\t\tvar currentByte = this._view[offset >> 3];\n\n\t\t// the max number of bits we can read from the current byte\n\t\tvar read = Math.min(remaining, 8 - bitOffset);\n\n\t\tvar mask, readBits;\n\t\tif (this.bigEndian) {\n\t\t\t// create a mask with the correct bit width\n\t\t\tmask = ~(0xFF << read);\n\t\t\t// shift the bits we want to the start of the byte and mask of the rest\n\t\t\treadBits = (currentByte >> (8 - read - bitOffset)) & mask;\n\n\t\t\tvalue <<= read;\n\t\t\tvalue |= readBits;\n\t\t} else {\n\t\t\t// create a mask with the correct bit width\n\t\t\tmask = ~(0xFF << read);\n\t\t\t// shift the bits we want to the start of the byte and mask off the rest\n\t\t\treadBits = (currentByte >> bitOffset) & mask;\n\n\t\t\tvalue |= readBits << i;\n\t\t}\n\n\t\toffset += read;\n\t\ti += read;\n\t}\n\n\tif (signed) {\n\t\t// If we're not working with a full 32 bits, check the\n\t\t// imaginary MSB for this bit count and convert to a\n\t\t// valid 32-bit signed value if set.\n\t\tif (bits !== 32 && value & (1 << (bits - 1))) {\n\t\t\tvalue |= -1 ^ ((1 << bits) - 1);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\treturn value >>> 0;\n};\n\nBitView.prototype.setBits = function (offset, value, bits) {\n\tvar available = (this._view.length * 8 - offset);\n\n\tif (bits > available) {\n\t\tthrow new Error('Cannot set ' + bits + ' bit(s) from offset ' + offset + ', ' + available + ' available');\n\t}\n\n\tfor (var i = 0; i < bits;) {\n\t\tvar remaining = bits - i;\n\t\tvar bitOffset = offset & 7;\n\t\tvar byteOffset = offset >> 3;\n\t\tvar wrote = Math.min(remaining, 8 - bitOffset);\n\n\t\tvar mask, writeBits, destMask;\n\t\tif (this.bigEndian) {\n\t\t\t// create a mask with the correct bit width\n\t\t\tmask = ~(~0 << wrote);\n\t\t\t// shift the bits we want to the start of the byte and mask of the rest\n\t\t\twriteBits = (value >> (bits - i - wrote)) & mask;\n\n\t\t\tvar destShift = 8 - bitOffset - wrote;\n\t\t\t// destination mask to zero all the bits we're changing first\n\t\t\tdestMask = ~(mask << destShift);\n\n\t\t\tthis._view[byteOffset] =\n\t\t\t\t(this._view[byteOffset] & destMask)\n\t\t\t\t| (writeBits << destShift);\n\n\t\t} else {\n\t\t\t// create a mask with the correct bit width\n\t\t\tmask = ~(0xFF << wrote);\n\t\t\t// shift the bits we want to the start of the byte and mask of the rest\n\t\t\twriteBits = value & mask;\n\t\t\tvalue >>= wrote;\n\n\t\t\t// destination mask to zero all the bits we're changing first\n\t\t\tdestMask = ~(mask << bitOffset);\n\n\t\t\tthis._view[byteOffset] =\n\t\t\t\t(this._view[byteOffset] & destMask)\n\t\t\t\t| (writeBits << bitOffset);\n\t\t}\n\n\t\toffset += wrote;\n\t\ti += wrote;\n\t}\n};\n\nBitView.prototype.getBoolean = function (offset) {\n\treturn this.getBits(offset, 1, false) !== 0;\n};\nBitView.prototype.getInt8 = function (offset) {\n\treturn this.getBits(offset, 8, true);\n};\nBitView.prototype.getUint8 = function (offset) {\n\treturn this.getBits(offset, 8, false);\n};\nBitView.prototype.getInt16 = function (offset) {\n\treturn this.getBits(offset, 16, true);\n};\nBitView.prototype.getUint16 = function (offset) {\n\treturn this.getBits(offset, 16, false);\n};\nBitView.prototype.getInt32 = function (offset) {\n\treturn this.getBits(offset, 32, true);\n};\nBitView.prototype.getUint32 = function (offset) {\n\treturn this.getBits(offset, 32, false);\n};\nBitView.prototype.getFloat32 = function (offset) {\n\tBitView._scratch.setUint32(0, this.getUint32(offset));\n\treturn BitView._scratch.getFloat32(0);\n};\nBitView.prototype.getFloat64 = function (offset) {\n\tBitView._scratch.setUint32(0, this.getUint32(offset));\n\t// DataView offset is in bytes.\n\tBitView._scratch.setUint32(4, this.getUint32(offset+32));\n\treturn BitView._scratch.getFloat64(0);\n};\n\nBitView.prototype.setBoolean = function (offset, value) {\n\tthis.setBits(offset, value ? 1 : 0, 1);\n};\nBitView.prototype.setInt8  =\nBitView.prototype.setUint8 = function (offset, value) {\n\tthis.setBits(offset, value, 8);\n};\nBitView.prototype.setInt16  =\nBitView.prototype.setUint16 = function (offset, value) {\n\tthis.setBits(offset, value, 16);\n};\nBitView.prototype.setInt32  =\nBitView.prototype.setUint32 = function (offset, value) {\n\tthis.setBits(offset, value, 32);\n};\nBitView.prototype.setFloat32 = function (offset, value) {\n\tBitView._scratch.setFloat32(0, value);\n\tthis.setBits(offset, BitView._scratch.getUint32(0), 32);\n};\nBitView.prototype.setFloat64 = function (offset, value) {\n\tBitView._scratch.setFloat64(0, value);\n\tthis.setBits(offset, BitView._scratch.getUint32(0), 32);\n\tthis.setBits(offset+32, BitView._scratch.getUint32(4), 32);\n};\nBitView.prototype.getArrayBuffer = function (offset, byteLength) {\n\tvar buffer = new Uint8Array(byteLength);\n\tfor (var i = 0; i < byteLength; i++) {\n\t\tbuffer[i] = this.getUint8(offset + (i * 8));\n\t}\n\treturn buffer;\n};\n\n/**********************************************************\n *\n * BitStream\n *\n * Small wrapper for a BitView to maintain your position,\n * as well as to handle reading / writing of string data\n * to the underlying buffer.\n *\n **********************************************************/\nvar reader = function (name, size) {\n\treturn function () {\n\t\tif (this._index + size > this._length) {\n\t\t\tthrow new Error('Trying to read past the end of the stream');\n\t\t}\n\t\tvar val = this._view[name](this._index);\n\t\tthis._index += size;\n\t\treturn val;\n\t};\n};\n\nvar writer = function (name, size) {\n\treturn function (value) {\n\t\tthis._view[name](this._index, value);\n\t\tthis._index += size;\n\t};\n};\n\nfunction readASCIIString(stream, bytes) {\n\treturn readString(stream, bytes, false);\n}\n\nfunction readUTF8String(stream, bytes) {\n\treturn readString(stream, bytes, true);\n}\n\nfunction readString(stream, bytes, utf8) {\n\tif (bytes === 0) {\n\t\treturn '';\n\t}\n\tvar i = 0;\n\tvar chars = [];\n\tvar append = true;\n\tvar fixedLength = !!bytes;\n\tif (!bytes) {\n\t\tbytes = Math.floor((stream._length - stream._index) / 8);\n\t}\n\n\t// Read while we still have space available, or until we've\n\t// hit the fixed byte length passed in.\n\twhile (i < bytes) {\n\t\tvar c = stream.readUint8();\n\n\t\t// Stop appending chars once we hit 0x00\n\t\tif (c === 0x00) {\n\t\t\tappend = false;\n\n\t\t\t// If we don't have a fixed length to read, break out now.\n\t\t\tif (!fixedLength) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (append) {\n\t\t\tchars.push(c);\n\t\t}\n\n\t\ti++;\n\t}\n\n\tvar string = String.fromCharCode.apply(null, chars);\n\tif (utf8) {\n\t\ttry {\n\t\t\treturn decodeURIComponent(escape(string)); // https://stackoverflow.com/a/17192845\n\t\t} catch (e) {\n\t\t\treturn string;\n\t\t}\n\t} else {\n\t\treturn string;\n\t}\n}\n\nfunction writeASCIIString(stream, string, bytes) {\n\tvar length = bytes || string.length + 1;  // + 1 for NULL\n\n\tfor (var i = 0; i < length; i++) {\n\t\tstream.writeUint8(i < string.length ? string.charCodeAt(i) : 0x00);\n\t}\n}\n\nfunction writeUTF8String(stream, string, bytes) {\n\tvar byteArray = stringToByteArray(string);\n\n\tvar length = bytes || byteArray.length + 1;  // + 1 for NULL\n\tfor (var i = 0; i < length; i++) {\n\t\tstream.writeUint8(i < byteArray.length ? byteArray[i] : 0x00);\n\t}\n}\n\nfunction stringToByteArray(str) { // https://gist.github.com/volodymyr-mykhailyk/2923227\n\tvar b = [], i, unicode;\n\tfor (i = 0; i < str.length; i++) {\n\t\tunicode = str.charCodeAt(i);\n\t\t// 0x00000000 - 0x0000007f -> 0xxxxxxx\n\t\tif (unicode <= 0x7f) {\n\t\t\tb.push(unicode);\n\t\t\t// 0x00000080 - 0x000007ff -> 110xxxxx 10xxxxxx\n\t\t} else if (unicode <= 0x7ff) {\n\t\t\tb.push((unicode >> 6) | 0xc0);\n\t\t\tb.push((unicode & 0x3F) | 0x80);\n\t\t\t// 0x00000800 - 0x0000ffff -> 1110xxxx 10xxxxxx 10xxxxxx\n\t\t} else if (unicode <= 0xffff) {\n\t\t\tb.push((unicode >> 12) | 0xe0);\n\t\t\tb.push(((unicode >> 6) & 0x3f) | 0x80);\n\t\t\tb.push((unicode & 0x3f) | 0x80);\n\t\t\t// 0x00010000 - 0x001fffff -> 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t} else {\n\t\t\tb.push((unicode >> 18) | 0xf0);\n\t\t\tb.push(((unicode >> 12) & 0x3f) | 0x80);\n\t\t\tb.push(((unicode >> 6) & 0x3f) | 0x80);\n\t\t\tb.push((unicode & 0x3f) | 0x80);\n\t\t}\n\t}\n\n\treturn b;\n}\n\nvar BitStream = function (source, byteOffset, byteLength) {\n\tvar isBuffer = source instanceof ArrayBuffer ||\n\t\t(typeof Buffer !== 'undefined' && source instanceof Buffer);\n\n\tif (!(source instanceof BitView) && !isBuffer) {\n\t\tthrow new Error('Must specify a valid BitView, ArrayBuffer or Buffer');\n\t}\n\n\tif (isBuffer) {\n\t\tthis._view = new BitView(source, byteOffset, byteLength);\n\t} else {\n\t\tthis._view = source;\n\t}\n\n\tthis._index = 0;\n\tthis._startIndex = 0;\n\tthis._length = this._view.byteLength * 8;\n};\n\nObject.defineProperty(BitStream.prototype, 'index', {\n\tget: function () { return this._index - this._startIndex; },\n\tset: function (val) { this._index = val + this._startIndex; },\n\tenumerable: true,\n\tconfigurable: true\n});\n\nObject.defineProperty(BitStream.prototype, 'length', {\n\tget: function () { return this._length - this._startIndex; },\n\tset: function (val) { this._length = val + this._startIndex; },\n\tenumerable  : true,\n\tconfigurable: true\n});\n\nObject.defineProperty(BitStream.prototype, 'bitsLeft', {\n\tget: function () { return this._length - this._index; },\n\tenumerable  : true,\n\tconfigurable: true\n});\n\nObject.defineProperty(BitStream.prototype, 'byteIndex', {\n\t// Ceil the returned value, over compensating for the amount of\n\t// bits written to the stream.\n\tget: function () { return Math.ceil(this._index / 8); },\n\tset: function (val) { this._index = val * 8; },\n\tenumerable: true,\n\tconfigurable: true\n});\n\nObject.defineProperty(BitStream.prototype, 'buffer', {\n\tget: function () { return this._view.buffer; },\n\tenumerable: true,\n\tconfigurable: false\n});\n\nObject.defineProperty(BitStream.prototype, 'view', {\n\tget: function () { return this._view; },\n\tenumerable: true,\n\tconfigurable: false\n});\n\nObject.defineProperty(BitStream.prototype, 'bigEndian', {\n\tget: function () { return this._view.bigEndian; },\n\tset: function (val) { this._view.bigEndian = val; },\n\tenumerable: true,\n\tconfigurable: false\n});\n\nBitStream.prototype.readBits = function (bits, signed) {\n\tvar val = this._view.getBits(this._index, bits, signed);\n\tthis._index += bits;\n\treturn val;\n};\n\nBitStream.prototype.writeBits = function (value, bits) {\n\tthis._view.setBits(this._index, value, bits);\n\tthis._index += bits;\n};\n\nBitStream.prototype.readBoolean = reader('getBoolean', 1);\nBitStream.prototype.readInt8 = reader('getInt8', 8);\nBitStream.prototype.readUint8 = reader('getUint8', 8);\nBitStream.prototype.readInt16 = reader('getInt16', 16);\nBitStream.prototype.readUint16 = reader('getUint16', 16);\nBitStream.prototype.readInt32 = reader('getInt32', 32);\nBitStream.prototype.readUint32 = reader('getUint32', 32);\nBitStream.prototype.readFloat32 = reader('getFloat32', 32);\nBitStream.prototype.readFloat64 = reader('getFloat64', 64);\n\nBitStream.prototype.writeBoolean = writer('setBoolean', 1);\nBitStream.prototype.writeInt8 = writer('setInt8', 8);\nBitStream.prototype.writeUint8 = writer('setUint8', 8);\nBitStream.prototype.writeInt16 = writer('setInt16', 16);\nBitStream.prototype.writeUint16 = writer('setUint16', 16);\nBitStream.prototype.writeInt32 = writer('setInt32', 32);\nBitStream.prototype.writeUint32 = writer('setUint32', 32);\nBitStream.prototype.writeFloat32 = writer('setFloat32', 32);\nBitStream.prototype.writeFloat64 = writer('setFloat64', 64);\n\nBitStream.prototype.readASCIIString = function (bytes) {\n\treturn readASCIIString(this, bytes);\n};\n\nBitStream.prototype.readUTF8String = function (bytes) {\n\treturn readUTF8String(this, bytes);\n};\n\nBitStream.prototype.writeASCIIString = function (string, bytes) {\n\twriteASCIIString(this, string, bytes);\n};\n\nBitStream.prototype.writeUTF8String = function (string, bytes) {\n\twriteUTF8String(this, string, bytes);\n};\nBitStream.prototype.readBitStream = function(bitLength) {\n\tvar slice = new BitStream(this._view);\n\tslice._startIndex = this._index;\n\tslice._index = this._index;\n\tslice.length = bitLength;\n\tthis._index += bitLength;\n\treturn slice;\n};\n\nBitStream.prototype.writeBitStream = function(stream, length) {\n\tif (!length) {\n\t\tlength = stream.bitsLeft;\n\t}\n\n\tvar bitsToWrite;\n\twhile (length > 0) {\n\t\tbitsToWrite = Math.min(length, 32);\n\t\tthis.writeBits(stream.readBits(bitsToWrite), bitsToWrite);\n\t\tlength -= bitsToWrite;\n\t}\n};\n\nBitStream.prototype.readArrayBuffer = function(byteLength) {\n\tvar buffer = this._view.getArrayBuffer(this._index, byteLength);\n\tthis._index += (byteLength * 8);\n\treturn buffer;\n};\n\nBitStream.prototype.writeArrayBuffer = function(buffer, byteLength) {\n\tthis.writeBitStream(new BitStream(buffer), byteLength * 8);\n};\n\n// AMD / RequireJS\nif (typeof define !== 'undefined' && define.amd) {\n\tdefine(function () {\n\t\treturn {\n\t\t\tBitView: BitView,\n\t\t\tBitStream: BitStream\n\t\t};\n\t});\n}\n// Node.js\nelse if (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = {\n\t\tBitView: BitView,\n\t\tBitStream: BitStream\n\t};\n}\n\n}(this));\n","import {SmileError} from './error.js';\n\nfunction toDataView(bytes: Uint8Array): DataView {\n    const buffer = new ArrayBuffer(bytes.length);\n    const view = new DataView(buffer);\n    for (let i = 0; i < bytes.length; i++) {\n        view.setUint8(i, bytes[i])\n    }\n    return view;\n}\n\nexport class Float32 {\n    public static decode(bytes: Uint8Array): number {\n        if (bytes.length !== 4) {\n            throw new SmileError('invalid float32');\n        }\n        return toDataView(bytes).getFloat32(0, false);\n    }\n\n    public static encode(n: number): Uint8Array {\n        const buffer = new ArrayBuffer(4);\n        const view = new DataView(buffer);\n        view.setFloat32(0, n, false);\n        return new Uint8Array(buffer);\n    }\n}\n\nexport class Float64 {\n    public static decode(bytes: Uint8Array): number {\n        if (bytes.length !== 8) {\n            throw new SmileError('invalid float64');\n        }\n        return toDataView(bytes).getFloat64(0, false);\n    }\n\n    public static encode(n: number): Uint8Array {\n        const buffer = new ArrayBuffer(8);\n        const view = new DataView(buffer);\n        view.setFloat64(0, n, false);\n        return new Uint8Array(buffer);\n    }\n}\n","import {BitView} from 'bit-buffer';\nimport {InputStream} from './inputStream.js';\nimport {OutputStream} from './outputStream.js';\nimport {calcByteLen} from './utils.js';\nimport {Float32, Float64} from './float.js';\n\nexport class FixedLengthBigEndian {\n    public static decode(bytes: Uint8Array): Uint8Array {\n        const decodedByteLen = calcByteLen(bytes.length, 7, 8);\n        const arrayBuffer = new ArrayBuffer(decodedByteLen);\n        const bitView = new BitView(arrayBuffer);\n        bitView.bigEndian = true;\n        let bitOffset = 0;\n        let remainingBits = decodedByteLen * 8;\n        for (let i = 0; i < bytes.length; i++) {\n            const b = bytes[i];\n            const bitsToWrite = Math.min(remainingBits, i === 0 ? 7 - ((bytes.length * 7) - (decodedByteLen * 8)) : 7);\n            bitView.setBits(bitOffset, b, bitsToWrite);\n            bitOffset += bitsToWrite;\n            remainingBits -= bitsToWrite;\n        }\n        return new Uint8Array(arrayBuffer);\n    }\n\n    public static read(inputStream: InputStream, decodedByteLen: number): Uint8Array {\n        const encodedByteLen = calcByteLen(decodedByteLen, 8, 7);\n        const encodedBytes = inputStream.readArray(encodedByteLen);\n        return FixedLengthBigEndian.decode(encodedBytes);\n    }\n\n    public static readFloat32(inputStream: InputStream): number {\n        return Float32.decode(FixedLengthBigEndian.read(inputStream, 4));\n    }\n\n    public static readFloat64(inputStream: InputStream): number {\n        return Float64.decode(FixedLengthBigEndian.read(inputStream, 8));\n    }\n\n    public static encode(bytes: Uint8Array): Uint8Array {\n        const encodedByteLen = calcByteLen(bytes.length, 8, 7);\n        const bitView = new BitView(bytes.buffer);\n        bitView.bigEndian = true;\n        let bitOffset = 0;\n        let remainingBits = bytes.length * 8;\n        let bitsToRead = 7 - ((encodedByteLen * 7) - (bytes.length * 8));\n        const encodedBytes: number[] = [];\n        while (remainingBits > 0) {\n            const v = bitView.getBits(bitOffset, bitsToRead);\n            encodedBytes.push(v);\n            bitOffset += bitsToRead;\n            remainingBits -= bitsToRead;\n            bitsToRead = 7;\n        }\n        return new Uint8Array(encodedBytes);\n    }\n\n    public static write(outputStream: OutputStream, bytes: Uint8Array): void {\n        outputStream.write(FixedLengthBigEndian.encode(bytes));\n    }\n\n    public static writeFloat32(outputStream: OutputStream, value: number): void {\n        FixedLengthBigEndian.write(outputStream, Float32.encode(value));\n    }\n\n    public static writeFloat64(outputStream: OutputStream, value: number): void {\n        FixedLengthBigEndian.write(outputStream, Float64.encode(value));\n    }\n}\n","import {SmileError} from './error.js';\nimport {normalizeNumber} from './utils.js';\nimport {InputStream} from './inputStream.js';\nimport {OutputStream} from './outputStream.js';\n\nexport class VInt {\n    public static decode(bytes: Uint8Array): number | bigint {\n        if (bytes.length <= 0) {\n            throw new SmileError('invalid VInt');\n        }\n        let value = BigInt(0);\n        for (let i = 0; i < bytes.length; i++) {\n            const n = bytes[i];\n            if (i < (bytes.length - 1)) {\n                if ((n & 0x80) !== 0x00) {\n                    throw new SmileError('invalid VInt');\n                }\n                value = (value * BigInt(128)) + BigInt(n & 0x7f);\n            } else {\n                if ((n & 0x80) !== 0x80) {\n                    throw new SmileError('invalid VInt');\n                }\n                value = (value * BigInt(64)) + BigInt(n & 0x3f);\n                break;\n            }\n        }\n        return normalizeNumber(value);\n    }\n\n    public static read(inputStream: InputStream): number | bigint {\n        const data: number[] = [];\n        while (true) {\n            const b = inputStream.read();\n            data.push(b);\n            if ((b & 0x80) === 0x80) {\n                break;\n            }\n        }\n        return VInt.decode(new Uint8Array(data));\n    }\n\n    public static encode(n: number | bigint): Uint8Array {\n        if (n < 0) {\n            throw new SmileError('invalid VInt');\n        }\n        const buffer: number[] = [];\n        let v = BigInt(n);\n        while (v > 0) {\n            if (buffer.length === 0) {\n                buffer.push(Number(v % BigInt(64)) | 0x80);\n                v /= BigInt(64);\n            } else {\n                buffer.push(Number(v % BigInt(128)));\n                v /= BigInt(128);\n            }\n        }\n        if (buffer.length === 0) {\n            buffer.push(0x80);\n        }\n        buffer.reverse();\n        return new Uint8Array(buffer);\n    }\n\n    public static write(outputStream: OutputStream, n: number | bigint): void {\n        const encodedBytes = VInt.encode(n);\n        outputStream.write(encodedBytes);\n    }\n}\n","export class BigInteger {\n    public static decode(bytes: Uint8Array): bigint {\n        let n = BigInt(0);\n        if (bytes.length === 0) {\n            return n;\n        }\n        const isNegative = (bytes[0] & 0x80) === 0x80;\n        for (let i = 0; i < bytes.length; i++) {\n            n = (n * BigInt(256)) + BigInt(isNegative ? bytes[i] ^ 0xff : bytes[i]);\n        }\n        if (isNegative) {\n            n = -n - BigInt(1);\n        }\n        return n;\n    }\n\n    public static encode(value: bigint): Uint8Array {\n        const isNegative = (value < 0);\n        let absValue = isNegative ? -value - BigInt(1) : value;\n        const bytes: number[] = [];\n        while (absValue > 0) {\n            const quotient = absValue / BigInt(256);\n            const remainder = Number(absValue % BigInt(256));\n            bytes.push(isNegative ? (remainder ^ 0xff) : remainder);\n            absValue = quotient;\n        }\n        if (isNegative) {\n            const msb = bytes[bytes.length - 1];\n            if ((msb & 0x80) !== 0x80) {\n                bytes.push(0xff);\n            }\n        } else {\n            const msb = bytes[bytes.length - 1];\n            if ((msb & 0x80) !== 0x00) {\n                bytes.push(0);\n            }\n        }\n        bytes.reverse();\n        return new Uint8Array(bytes);\n    }\n}","import {BitView} from 'bit-buffer';\nimport {SmileError} from './error.js';\nimport {calcByteLen} from './utils.js';\nimport {InputStream} from './inputStream.js';\nimport {OutputStream} from './outputStream.js';\nimport {VInt} from './vInt.js';\nimport {BigInteger} from './bigInteger.js';\n\nexport class SafeBinary {\n    public static decode(bytes: Uint8Array): Uint8Array {\n        const decodedByteLen = calcByteLen(bytes.length, 7, 8);\n        const arrayBuffer = new ArrayBuffer(decodedByteLen);\n        const bitView = new BitView(arrayBuffer);\n        bitView.bigEndian = true;\n        let bitOffset = 0;\n        let remainingBits = decodedByteLen * 8;\n        for (let i = 0; i < bytes.length; i++) {\n            const b = bytes[i];\n            const bitsToWrite = Math.min(remainingBits, 7);\n            bitView.setBits(bitOffset, b, bitsToWrite);\n            bitOffset += bitsToWrite;\n            remainingBits -= bitsToWrite;\n        }\n        return new Uint8Array(arrayBuffer);\n    }\n\n    public static read(inputStream: InputStream): Uint8Array {\n        const decodedByteLen = VInt.read(inputStream);\n        if (typeof (decodedByteLen) === 'bigint') {\n            throw new SmileError('invalid length');\n        }\n        const encodedByteLen = calcByteLen(decodedByteLen, 8, 7);\n        const bytes = inputStream.readArray(encodedByteLen);\n        return SafeBinary.decode(bytes);\n    }\n\n    public static readBigInt(inputStream: InputStream): bigint {\n        return BigInteger.decode(SafeBinary.read(inputStream));\n    }\n\n    public static encode(bytes: Uint8Array): Uint8Array {\n        const encodedBytes: number[] = [];\n        const bitView = new BitView(bytes.buffer);\n        bitView.bigEndian = true;\n        let bitOffset = 0;\n        let remainingBits = bytes.length * 8;\n        while (remainingBits > 0) {\n            const bitsToRead = Math.min(remainingBits, 7);\n            const n = bitView.getBits(bitOffset, bitsToRead);\n            encodedBytes.push(n);\n            bitOffset += bitsToRead;\n            remainingBits -= bitsToRead;\n        }\n        return new Uint8Array(encodedBytes);\n    }\n\n    public static write(outputStream: OutputStream, bytes: Uint8Array): void {\n        VInt.write(outputStream, bytes.length);\n        outputStream.write(SafeBinary.encode(bytes));\n    }\n\n    public static writeBigInt(outputStream: OutputStream, value: bigint): void {\n        SafeBinary.write(outputStream, BigInteger.encode(value));\n    }\n}\n","import {InputStream} from './inputStream.js';\nimport {SmileError} from './error.js';\nimport {ZigZag} from './zigZag.js';\nimport {VInt} from './vInt.js';\nimport {SafeBinary} from './safeBinary.js';\n\nexport class BigDecimal {\n    public static read(inputStream: InputStream): number {\n        const scale = ZigZag.decode(VInt.read(inputStream));\n        if (typeof scale === 'bigint') {\n            throw new SmileError('invalid scale');\n        }\n        const magnitude = SafeBinary.readBigInt(inputStream);\n        return Number(magnitude) * Math.pow(10, -scale);\n    }\n\n    // TODO encode/write\n}\n","import {InputStream} from './inputStream.js';\nimport {SmileError} from './error.js';\nimport {SharedStringBuffer} from './sharedStringBuffer.js';\nimport {ZigZag} from './zigZag.js';\nimport {ASCII} from './ascii.js';\nimport {UTF8} from './utf8.js';\nimport {LongString} from './longString.js';\nimport {FixedLengthBigEndian} from './fixedLengthBigEndian.js';\nimport {SafeBinary} from './safeBinary.js';\nimport {BigDecimal} from './bigDecimal.js';\nimport {VInt} from './vInt.js';\n\n/**\n * Decoder options.\n */\nexport interface DecoderOptions {\n}\n\nconst defaultDecoderOptions: DecoderOptions = {};\n\n/**\n * Decode SMILE-encoded data.\n *\n * @param data SMILE-encoded data\n * @param options decoder options\n * @deprecated Use {@link decode} instead\n */\nexport function parse(data: Uint8Array, options?: Partial<DecoderOptions>): any {\n    return new DecoderContext(data, options).decode();\n}\n\n/**\n * Decode SMILE-encoded data.\n *\n * @param data SMILE-encoded data\n * @param options decoder options\n */\nexport function decode(data: Uint8Array, options?: Partial<DecoderOptions>): any {\n    return new DecoderContext(data, options).decode();\n}\n\nclass DecoderContext {\n    private readonly inputStream: InputStream;\n    private readonly options: DecoderOptions;\n    private sharedPropertyName: boolean;\n    private sharedStringValue: boolean;\n    private rawBinary: boolean;\n    private version: number;\n    private sharedPropertyNames: SharedStringBuffer;\n    private sharedStringValues: SharedStringBuffer;\n\n    constructor(data: Uint8Array, options?: Partial<DecoderOptions>) {\n        this.inputStream = new InputStream(data);\n        if (options !== undefined) {\n            this.options = {\n                ...defaultDecoderOptions,\n                ...options,\n            }\n        } else {\n            this.options = defaultDecoderOptions;\n        }\n\n        this.sharedPropertyName = false;\n        this.sharedStringValue = false;\n        this.rawBinary = false;\n        this.version = 0;\n\n        // TODO\n        this.sharedPropertyNames = new SharedStringBuffer(false, 1024);\n        this.sharedStringValues = new SharedStringBuffer(false, 1024);\n    }\n\n    public decode(): any {\n        // parse header\n        const b0 = this.inputStream.read();\n        const b1 = this.inputStream.read();\n        const b2 = this.inputStream.read();\n\n        if ((b0 !== 0x3a) || (b1 !== 0x29) || (b2 !== 0x0a)) {\n            throw new SmileError('invalid Smile header');\n        }\n\n        const b3 = this.inputStream.read();\n        this.sharedPropertyName = (b3 & 0x01) === 0x01;\n        this.sharedStringValue = (b3 & 0x02) === 0x02;\n        this.rawBinary = (b3 & 0x04) === 0x04;\n        this.version = b3 >> 4;\n\n        this.sharedPropertyNames = new SharedStringBuffer(this.sharedPropertyName, 1024);\n        this.sharedStringValues = new SharedStringBuffer(this.sharedStringValue, 1024);\n\n        return this.readValue();\n    };\n\n    private readValue(): any {\n        const token = this.inputStream.read();\n        const tokenClass = token >> 5;\n        const tokenValue = token & 0x1f;\n        switch (tokenClass) {\n            case 0: { // Short Shared Value String reference (single byte)\n                return this.sharedStringValues.getString(tokenValue - 1);\n            }\n            case 1: { // Simple literals, numbers\n                return this.readSimpleLiteralValue(token);\n            }\n            case 2: { // Tiny ASCII (1 - 32 bytes == chars)\n                const encodedByteLen = tokenValue + 1;\n                const value = ASCII.read(this.inputStream, encodedByteLen);\n                this.sharedStringValues.addString(value);\n                return value;\n            }\n            case 3: { // Short ASCII (33 - 64 bytes == chars)\n                const encodedByteLen = tokenValue + 33;\n                const value = ASCII.read(this.inputStream, encodedByteLen);\n                this.sharedStringValues.addString(value);\n                return value;\n            }\n            case 4: { // Tiny Unicode (2 - 33 bytes; <= 33 characters)\n                const encodedByteLen = tokenValue + 2;\n                const value = UTF8.read(this.inputStream, encodedByteLen);\n                this.sharedStringValues.addString(value);\n                return value;\n            }\n            case 5: { // Short Unicode (34 - 64 bytes; <= 64 characters)\n                const encodedByteLen = tokenValue + 34;\n                const value = UTF8.read(this.inputStream, encodedByteLen);\n                this.sharedStringValues.addString(value);\n                return value;\n            }\n            case 6: { // Small integers (single byte)\n                return ZigZag.decode(tokenValue);\n            }\n            case 7: { // Binary / Long text / structure markers\n                return this.readBinaryLongTextStructureValues(token);\n            }\n            default: {\n                throw new SmileError(`unknown token class: ${tokenClass}`);\n            }\n        }\n    }\n\n    private readSimpleLiteralValue(token: number): any {\n        if (token === 0x20) { // empty string\n            return '';\n        } else if (token === 0x21) { // null\n            return null;\n        } else if (token === 0x22) { // false\n            return false;\n        } else if (token === 0x23) { // true\n            return true;\n        } else if (token === 0x24) { // 32-bit integer; zigzag encoded, 1 - 5 data bytes\n            return ZigZag.decode(VInt.read(this.inputStream));\n        } else if (token === 0x25) { // 64-bit integer; zigzag encoded, 5 - 10 data bytes\n            return ZigZag.decode(VInt.read(this.inputStream));\n        } else if (token === 0x26) { // BigInteger\n            return SafeBinary.readBigInt(this.inputStream);\n        } else if (token === 0x28) { // 32-bit float\n            return FixedLengthBigEndian.readFloat32(this.inputStream);\n        } else if (token === 0x29) { // 64-bit double\n            return FixedLengthBigEndian.readFloat64(this.inputStream);\n        } else if (token === 0x2a) { // BigDecimal\n            return BigDecimal.read(this.inputStream);\n        } else {\n            throw new SmileError('invalid value token 0x' + token.toString(16));\n        }\n    }\n\n    private readBinaryLongTextStructureValues(token: number): any {\n        if (token === 0xe0) { // Long (variable length) ASCII text\n            return LongString.readASCII(this.inputStream);\n        } else if (token === 0xe4) { // Long (variable length) Unicode text\n            return LongString.readUTF8(this.inputStream);\n        } else if (token === 0xe8) { // Binary, 7-bit encoded\n            return SafeBinary.read(this.inputStream);\n        } else if ((token >= 0xec) && (token <= 0xef)) { // Shared String reference, long\n            const reference = ((token & 0x03) << 8) | this.inputStream.read();\n            return this.sharedStringValues.getString(reference);\n        } else if (token === 0xf8) { // START_ARRAY\n            const array: any[] = [];\n            while (this.inputStream.peek() !== 0xf9) { // END_ARRAY\n                array.push(this.readValue());\n            }\n            this.inputStream.read(); // consume END_ARRAY\n            return array;\n        } else if (token === 0xfa) { // START_OBJECT\n            const object: { [key: string]: any } = {};\n            while (this.inputStream.peek() !== 0xfb) { // END_OBJECT\n                const key = this.readKey();\n                const value = this.readValue();\n                object[key] = value;\n            }\n            this.inputStream.read(); // consume END_OBJECT\n            return object;\n        } else if (token === 0xfd) { // Binary (raw)\n            const len = VInt.read(this.inputStream);\n            if (typeof(len) === 'bigint') {\n                throw new SmileError('invalid length');\n            }\n            return this.inputStream.readArray(len);\n        } else {\n            throw new SmileError('invalid value token 0x' + token.toString(16));\n        }\n    }\n\n    private readKey(): string {\n        const token = this.inputStream.read();\n        if (token === 0x20) { // Special constant name '' (empty String)\n            return '';\n        } else if ((token >= 0x30) && (token <= 0x33)) { // 'Long' shared key name reference (2 byte token)\n            const reference = ((token & 0x03) << 8) | this.inputStream.read();\n            return this.sharedPropertyNames.getString(reference);\n        } else if (token === 0x34) { // Long (not-yet-shared) Unicode name\n            return LongString.readUTF8(this.inputStream);\n        } else if ((token >= 0x40) && (token <= 0x7f)) { // 'Short' shared key name reference\n            const reference = token & 0x3f;\n            return this.sharedPropertyNames.getString(reference);\n        } else if ((token >= 0x80) && (token <= 0xbf)) { // Short Ascii names\n            const encodedByteLen = (token & 0x3f) + 1;\n            const s = ASCII.read(this.inputStream, encodedByteLen);\n            this.sharedPropertyNames.addString(s);\n            return s;\n        } else if ((token >= 0xc0) && (token <= 0xf7)) { // Short Unicode names\n            const encodedByteLen = (token & 0x3f) + 2;\n            const s = UTF8.read(this.inputStream, encodedByteLen);\n            this.sharedPropertyNames.addString(s);\n            return s;\n        } else {\n            throw new SmileError('invalid key token 0x' + token.toString(16));\n        }\n    }\n}\n","export class OutputStream {\n    private buffer: number[];\n\n    constructor() {\n        this.buffer = [];\n    }\n\n    public write(n: number | number[] | Uint8Array): void {\n        if (Array.isArray(n) || (n instanceof Uint8Array)) {\n            this.buffer = this.buffer.concat(Array.from(n));\n        } else {\n            this.buffer.push(n);\n        }\n    }\n\n    public toUint8Array(): Uint8Array {\n        return new Uint8Array(this.buffer);\n    }\n}\n","import {OutputStream} from './outputStream.js';\nimport {SharedStringBuffer} from './sharedStringBuffer.js';\nimport {SmileError} from './error.js';\nimport {FixedLengthBigEndian} from './fixedLengthBigEndian.js';\nimport {ZigZag} from './zigZag.js';\nimport {VInt} from './vInt.js';\nimport {SafeBinary} from './safeBinary.js';\nimport {ASCII} from './ascii.js';\nimport {UTF8} from './utf8.js';\nimport {LongString} from './longString.js';\n\n/**\n * Encoder options.\n */\nexport interface EncoderOptions {\n    sharedPropertyName: boolean;\n    sharedStringValue: boolean;\n    rawBinary: boolean;\n}\n\nconst defaultEncoderOptions: EncoderOptions = {\n    sharedPropertyName: true,\n    sharedStringValue: false,\n    rawBinary: false,\n};\n\nconst version = 0;\nconst MAX_INT32 = 2147483647;\nconst MIN_INT32 = -2147483648;\nconst MAX_INT64 = BigInt('9223372036854775807');\nconst MIN_INT64 = BigInt('-9223372036854775808');\n\n/**\n * SMILE-encode the specified value.\n *\n * @param value value\n * @param options encoder options\n */\nexport function encode(value: any, options?: Partial<EncoderOptions>): Uint8Array {\n    return new EncoderContext(value, options).encode();\n}\n\nclass EncoderContext {\n    private readonly value: any;\n    private readonly options: EncoderOptions;\n    private readonly outputStream: OutputStream;\n    private readonly sharedPropertyNames: SharedStringBuffer;\n    private readonly sharedStringValues: SharedStringBuffer;\n\n    constructor(value: any, options?: Partial<EncoderOptions>) {\n        this.value = value;\n        if (options !== undefined) {\n            this.options = {\n                ...defaultEncoderOptions,\n                ...options,\n            }\n        } else {\n            this.options = defaultEncoderOptions;\n        }\n\n        this.outputStream = new OutputStream();\n        this.sharedPropertyNames = new SharedStringBuffer(this.options.sharedPropertyName, 1024);\n        this.sharedStringValues = new SharedStringBuffer(this.options.sharedStringValue, 1024);\n    }\n\n    public encode(): Uint8Array {\n        this.outputStream.write([0x3a, 0x29, 0x0a]);\n        let options = version << 4;\n        if (this.options.sharedPropertyName) {\n            options |= 0x01;\n        }\n        if (this.options.sharedStringValue) {\n            options |= 0x02;\n        }\n        if (this.options.rawBinary) {\n            options |= 0x04;\n        }\n        this.outputStream.write(options);\n\n        this.writeValue(this.value);\n\n        return this.outputStream.toUint8Array();\n    }\n\n    private writeValue(value: any): void {\n        if ((value === undefined) || (value === null)) {\n            this.writeNull();\n            return;\n        } else if (value instanceof Uint8Array) {\n            this.writeBinary(value as Uint8Array);\n            return;\n        } else if (Array.isArray(value)) {\n            this.writeArray(value as any[]);\n            return;\n        } else {\n            const type = typeof value;\n            switch (type) {\n                case 'undefined':\n                    this.writeNull();\n                    return;\n                case 'boolean':\n                    this.writeBoolean(value as boolean);\n                    return;\n                case 'string':\n                    this.writeString(value as string);\n                    return;\n                case 'number':\n                    this.writeNumber(value as number);\n                    return;\n                case 'bigint':\n                    this.writeBigInt(value as bigint);\n                    return;\n                case 'object':\n                    this.writeObject(value as { [key: string]: any });\n                    return;\n                default:\n                    throw new SmileError('unsupported type: ' + type);\n            }\n        }\n    }\n\n    private writeNull(): void {\n        this.outputStream.write(0x21);\n    }\n\n    private writeBoolean(b: boolean): void {\n        if (b) {\n            this.outputStream.write(0x23);\n        } else {\n            this.outputStream.write(0x22);\n        }\n    }\n\n    private writeString(s: string): void {\n        if (s === '') {\n            this.outputStream.write(0x20);\n            return;\n        }\n        const reference = this.sharedStringValues.getReference(s);\n        if (reference >= 0) { // has reference\n            if (reference < 31) {\n                this.outputStream.write(0x00 | (reference + 1));\n                return;\n            } else {\n                this.outputStream.write(0xec | ((reference >> 8) & 0x03));\n                this.outputStream.write(reference & 0xff);\n                return;\n            }\n        } else { // no reference\n            this.sharedStringValues.addString(s);\n            if (ASCII.isASCII(s)) {\n                if (s.length <= 32) {\n                    this.outputStream.write(0x40 | (s.length - 1));\n                    ASCII.write(this.outputStream, s);\n                    return;\n                } else if (s.length <= 64) {\n                    this.outputStream.write(0x60 | (s.length - 33));\n                    ASCII.write(this.outputStream, s);\n                    return;\n                } else {\n                    this.outputStream.write(0xe0);\n                    LongString.writeASCII(this.outputStream, s);\n                    return;\n                }\n            } else {\n                const encodedBytes = UTF8.encode(s);\n                if (encodedBytes.length <= 33) {\n                    this.outputStream.write(0x80 | (encodedBytes.length - 2));\n                    UTF8.write(this.outputStream, s);\n                    return;\n                } else if (encodedBytes.length <= 64) {\n                    this.outputStream.write(0xa0 | (encodedBytes.length - 34));\n                    UTF8.write(this.outputStream, s);\n                    return;\n                } else {\n                    this.outputStream.write(0xe4);\n                    LongString.writeUTF8(this.outputStream, s);\n                    return;\n                }\n            }\n        }\n    }\n\n    private writeNumber(n: number): void {\n        if (Number.isSafeInteger(n)) { // safe integer\n            if ((n >= -16) && (n <= 15)) { // small integer\n                const zigZagEncodedValue = ZigZag.encode(n);\n                if ((typeof zigZagEncodedValue === 'number') && (zigZagEncodedValue < 32)) {\n                    this.outputStream.write(0xc0 | zigZagEncodedValue);\n                } else {\n                    throw new SmileError('unexpected error');\n                }\n            } else if ((n >= MIN_INT32) && (n <= MAX_INT32)) { // int32\n                this.outputStream.write(0x24);\n                VInt.write(this.outputStream, ZigZag.encode(n));\n            } else if ((n >= Number.MIN_SAFE_INTEGER) && (n <= Number.MAX_SAFE_INTEGER)) { // int64\n                this.outputStream.write(0x25);\n                VInt.write(this.outputStream, ZigZag.encode(n));\n            } else { // treat everything else as int64\n                this.outputStream.write(0x25);\n                VInt.write(this.outputStream, ZigZag.encode(n));\n            }\n        } else { // treat everything else as double\n            this.outputStream.write(0x29);\n            FixedLengthBigEndian.writeFloat64(this.outputStream, n);\n        }\n    }\n\n    private writeBigInt(n: bigint): void {\n        this.outputStream.write(0x26);\n        SafeBinary.writeBigInt(this.outputStream, n);\n    }\n\n    private writeArray(array: any[]): void {\n        this.outputStream.write(0xf8);\n        for (let i = 0; i < array.length; i++) {\n            this.writeValue(array[i]);\n        }\n        this.outputStream.write(0xf9);\n    }\n\n    private writeObject(o: { [key: string]: any }): void {\n        this.outputStream.write(0xfa);\n        for (const key in o) {\n            const value = o[key];\n            this.writeKey(key);\n            this.writeValue(value);\n        }\n        this.outputStream.write(0xfb);\n    }\n\n    private writeBinary(data: Uint8Array): void {\n        if (this.options.rawBinary) {\n            this.outputStream.write(0xfd);\n            VInt.write(this.outputStream, data.length);\n            this.outputStream.write(data);\n        } else {\n            this.outputStream.write(0xe8);\n            SafeBinary.write(this.outputStream, data);\n        }\n    }\n\n    private writeKey(s: string): void {\n        if (s === '') {\n            this.outputStream.write(0x20);\n            return;\n        }\n        const reference = this.sharedPropertyNames.getReference(s);\n        if (reference >= 0) { // has reference\n            if (reference < 64) {\n                this.outputStream.write(0x40 | reference);\n                return;\n            } else {\n                this.outputStream.write(0x30 | ((reference >> 8) & 0x03));\n                this.outputStream.write(reference & 0xff);\n                return;\n            }\n        } else { // no reference\n            this.sharedPropertyNames.addString(s);\n            if (ASCII.isASCII(s)) {\n                if (s.length <= 64) {\n                    this.outputStream.write(0x80 | (s.length - 1));\n                    ASCII.write(this.outputStream, s);\n                    return;\n                } else {\n                    this.outputStream.write(0x34);\n                    LongString.writeUTF8(this.outputStream, s);\n                    return;\n                }\n            } else {\n                const encodedBytes = UTF8.encode(s);\n                if (encodedBytes.length <= 56) {\n                    this.outputStream.write(0xc0 | (encodedBytes.length - 2));\n                    UTF8.write(this.outputStream, s);\n                    return;\n                } else {\n                    this.outputStream.write(0x34);\n                    LongString.writeUTF8(this.outputStream, s);\n                    return;\n                }\n            }\n        }\n    }\n}\n"],"names":["SmileError","msg","eofError","InputStream","array","v","n","endIndex","readData","SharedStringBuffer","enabled","maxStrings","s","index","normalizeNumber","value","calcByteLen","inputByteLen","inputBitsPerByte","outputBitsPerByte","ZigZag","textDecoder","textEncoder","ASCII","bytes","inputStream","encodedByteLen","encodedBytes","outputStream","i","UTF8","LongString","buffer","c","root","BitView","source","byteOffset","byteLength","isBuffer","offset","on","bits","signed","available","remaining","bitOffset","currentByte","read","mask","readBits","wrote","writeBits","destMask","destShift","reader","name","size","val","writer","readASCIIString","stream","readString","readUTF8String","utf8","chars","append","fixedLength","string","writeASCIIString","length","writeUTF8String","byteArray","stringToByteArray","str","b","unicode","BitStream","bitLength","slice","bitsToWrite","module","toDataView","view","Float32","Float64","FixedLengthBigEndian","decodedByteLen","arrayBuffer","bitView","remainingBits","bitsToRead","VInt","data","BigInteger","isNegative","absValue","quotient","remainder","SafeBinary","BigDecimal","scale","magnitude","defaultDecoderOptions","parse","options","DecoderContext","decode","b0","b1","b2","b3","token","tokenClass","tokenValue","reference","object","key","len","OutputStream","defaultEncoderOptions","version","MAX_INT32","MIN_INT32","encode","EncoderContext","type","zigZagEncodedValue","o"],"mappings":"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","x_google_ignoreList":[8]}