mirror of
https://github.com/LukeHagar/relay.git
synced 2025-12-06 04:21:14 +00:00
160 lines
5.9 KiB
JavaScript
160 lines
5.9 KiB
JavaScript
var _a, _b, _c;
|
|
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
|
|
import { UINT32_MAX } from "./int.mjs";
|
|
var TEXT_ENCODING_AVAILABLE = (typeof process === "undefined" || ((_a = process === null || process === void 0 ? void 0 : process.env) === null || _a === void 0 ? void 0 : _a["TEXT_ENCODING"]) !== "never") &&
|
|
typeof TextEncoder !== "undefined" &&
|
|
typeof TextDecoder !== "undefined";
|
|
export 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;
|
|
}
|
|
export 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;
|
|
export var TEXT_ENCODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE
|
|
? UINT32_MAX
|
|
: typeof process !== "undefined" && ((_b = process === null || process === void 0 ? void 0 : process.env) === null || _b === void 0 ? void 0 : _b["TEXT_ENCODING"]) !== "force"
|
|
? 200
|
|
: 0;
|
|
function utf8EncodeTEencode(str, output, outputOffset) {
|
|
output.set(sharedTextEncoder.encode(str), outputOffset);
|
|
}
|
|
function utf8EncodeTEencodeInto(str, output, outputOffset) {
|
|
sharedTextEncoder.encodeInto(str, output.subarray(outputOffset));
|
|
}
|
|
export var utf8EncodeTE = (sharedTextEncoder === null || sharedTextEncoder === void 0 ? void 0 : sharedTextEncoder.encodeInto) ? utf8EncodeTEencodeInto : utf8EncodeTEencode;
|
|
var CHUNK_SIZE = 4096;
|
|
export 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, units);
|
|
units.length = 0;
|
|
}
|
|
}
|
|
if (units.length > 0) {
|
|
result += String.fromCharCode.apply(String, units);
|
|
}
|
|
return result;
|
|
}
|
|
var sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null;
|
|
export var TEXT_DECODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE
|
|
? UINT32_MAX
|
|
: typeof process !== "undefined" && ((_c = process === null || process === void 0 ? void 0 : process.env) === null || _c === void 0 ? void 0 : _c["TEXT_DECODER"]) !== "force"
|
|
? 200
|
|
: 0;
|
|
export function utf8DecodeTD(bytes, inputOffset, byteLength) {
|
|
var stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);
|
|
return sharedTextDecoder.decode(stringBytes);
|
|
}
|
|
//# sourceMappingURL=utf8.mjs.map
|