'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); const useBuffer = globalThis.process && !globalThis.process.browser && globalThis.Buffer && typeof globalThis.Buffer.isBuffer === 'function'; const textDecoder = new TextDecoder(); const textEncoder = new TextEncoder(); function isBuffer(buf) { return useBuffer && globalThis.Buffer.isBuffer(buf); } function asU8A(buf) { if (!(buf instanceof Uint8Array)) { return Uint8Array.from(buf); } return isBuffer(buf) ? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength) : buf; } const toString = useBuffer ? (bytes, start, end) => { return end - start > 64 ? globalThis.Buffer.from(bytes.subarray(start, end)).toString('utf8') : utf8Slice(bytes, start, end); } : (bytes, start, end) => { return end - start > 64 ? textDecoder.decode(bytes.subarray(start, end)) : utf8Slice(bytes, start, end); }; const fromString = useBuffer ? string => { return string.length > 64 ? globalThis.Buffer.from(string) : utf8ToBytes(string); } : string => { return string.length > 64 ? textEncoder.encode(string) : utf8ToBytes(string); }; const fromArray = arr => { return Uint8Array.from(arr); }; const slice = useBuffer ? (bytes, start, end) => { if (isBuffer(bytes)) { return new Uint8Array(bytes.subarray(start, end)); } return bytes.slice(start, end); } : (bytes, start, end) => { return bytes.slice(start, end); }; const concat = useBuffer ? (chunks, length) => { chunks = chunks.map(c => c instanceof Uint8Array ? c : globalThis.Buffer.from(c)); return asU8A(globalThis.Buffer.concat(chunks, length)); } : (chunks, length) => { const out = new Uint8Array(length); let off = 0; for (let b of chunks) { if (off + b.length > out.length) { b = b.subarray(0, out.length - off); } out.set(b, off); off += b.length; } return out; }; const alloc = useBuffer ? size => { return globalThis.Buffer.allocUnsafe(size); } : size => { return new Uint8Array(size); }; const toHex = useBuffer ? d => { if (typeof d === 'string') { return d; } return globalThis.Buffer.from(toBytes(d)).toString('hex'); } : d => { if (typeof d === 'string') { return d; } return Array.prototype.reduce.call(toBytes(d), (p, c) => `${ p }${ c.toString(16).padStart(2, '0') }`, ''); }; const fromHex = useBuffer ? hex => { if (hex instanceof Uint8Array) { return hex; } return globalThis.Buffer.from(hex, 'hex'); } : hex => { if (hex instanceof Uint8Array) { return hex; } if (!hex.length) { return new Uint8Array(0); } return new Uint8Array(hex.split('').map((c, i, d) => i % 2 === 0 ? `0x${ c }${ d[i + 1] }` : '').filter(Boolean).map(e => parseInt(e, 16))); }; function toBytes(obj) { if (obj instanceof Uint8Array && obj.constructor.name === 'Uint8Array') { return obj; } if (obj instanceof ArrayBuffer) { return new Uint8Array(obj); } if (ArrayBuffer.isView(obj)) { return new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength); } throw new Error('Unknown type, must be binary type'); } function compare(b1, b2) { if (isBuffer(b1) && isBuffer(b2)) { return b1.compare(b2); } for (let i = 0; i < b1.length; i++) { if (b1[i] === b2[i]) { continue; } return b1[i] < b2[i] ? -1 : 1; } return 0; } function utf8ToBytes(string, units = Infinity) { let codePoint; const length = string.length; let leadSurrogate = null; const bytes = []; for (let i = 0; i < length; ++i) { codePoint = string.charCodeAt(i); if (codePoint > 55295 && codePoint < 57344) { if (!leadSurrogate) { if (codePoint > 56319) { if ((units -= 3) > -1) bytes.push(239, 191, 189); continue; } else if (i + 1 === length) { if ((units -= 3) > -1) bytes.push(239, 191, 189); continue; } leadSurrogate = codePoint; continue; } if (codePoint < 56320) { if ((units -= 3) > -1) bytes.push(239, 191, 189); leadSurrogate = codePoint; continue; } codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536; } else if (leadSurrogate) { if ((units -= 3) > -1) bytes.push(239, 191, 189); } leadSurrogate = null; if (codePoint < 128) { if ((units -= 1) < 0) break; bytes.push(codePoint); } else if (codePoint < 2048) { if ((units -= 2) < 0) break; bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128); } else if (codePoint < 65536) { if ((units -= 3) < 0) break; bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128); } else if (codePoint < 1114112) { if ((units -= 4) < 0) break; bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128); } else { throw new Error('Invalid code point'); } } return bytes; } function utf8Slice(buf, offset, end) { const res = []; while (offset < end) { const firstByte = buf[offset]; let codePoint = null; let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1; if (offset + bytesPerSequence <= end) { let secondByte, thirdByte, fourthByte, tempCodePoint; switch (bytesPerSequence) { case 1: if (firstByte < 128) { codePoint = firstByte; } break; case 2: secondByte = buf[offset + 1]; if ((secondByte & 192) === 128) { tempCodePoint = (firstByte & 31) << 6 | secondByte & 63; if (tempCodePoint > 127) { codePoint = tempCodePoint; } } break; case 3: secondByte = buf[offset + 1]; thirdByte = buf[offset + 2]; if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) { tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63; if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) { codePoint = tempCodePoint; } } break; case 4: secondByte = buf[offset + 1]; thirdByte = buf[offset + 2]; fourthByte = buf[offset + 3]; if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) { tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63; if (tempCodePoint > 65535 && tempCodePoint < 1114112) { codePoint = tempCodePoint; } } } } if (codePoint === null) { codePoint = 65533; bytesPerSequence = 1; } else if (codePoint > 65535) { codePoint -= 65536; res.push(codePoint >>> 10 & 1023 | 55296); codePoint = 56320 | codePoint & 1023; } res.push(codePoint); offset += bytesPerSequence; } return decodeCodePointsArray(res); } const MAX_ARGUMENTS_LENGTH = 4096; function decodeCodePointsArray(codePoints) { const len = codePoints.length; if (len <= MAX_ARGUMENTS_LENGTH) { return String.fromCharCode.apply(String, codePoints); } let res = ''; let i = 0; while (i < len) { res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)); } return res; } exports.alloc = alloc; exports.asU8A = asU8A; exports.compare = compare; exports.concat = concat; exports.decodeCodePointsArray = decodeCodePointsArray; exports.fromArray = fromArray; exports.fromHex = fromHex; exports.fromString = fromString; exports.slice = slice; exports.toHex = toHex; exports.toString = toString; exports.useBuffer = useBuffer;