forked from olcxjas-softworks/LarpixClient
115 lines
3.6 KiB
JavaScript
115 lines
3.6 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.isArrayBuffer = isArrayBuffer;
|
|
exports.isSharedArrayBuffer = isSharedArrayBuffer;
|
|
exports.isArrayBufferLike = isArrayBufferLike;
|
|
exports.isArrayBufferView = isArrayBufferView;
|
|
exports.isBufferSource = isBufferSource;
|
|
exports.assertBufferSource = assertBufferSource;
|
|
exports.toUint8Array = toUint8Array;
|
|
exports.toUint8ArrayCopy = toUint8ArrayCopy;
|
|
exports.toArrayBuffer = toArrayBuffer;
|
|
exports.toArrayBufferLike = toArrayBufferLike;
|
|
exports.toView = toView;
|
|
exports.toViewCopy = toViewCopy;
|
|
const ARRAY_BUFFER_TAG = "[object ArrayBuffer]";
|
|
const SHARED_ARRAY_BUFFER_TAG = "[object SharedArrayBuffer]";
|
|
function tagOf(value) {
|
|
return Object.prototype.toString.call(value);
|
|
}
|
|
function isDataViewConstructor(type) {
|
|
return type === DataView || type.prototype instanceof DataView;
|
|
}
|
|
function bytesPerElement(type) {
|
|
if (isDataViewConstructor(type)) {
|
|
return 1;
|
|
}
|
|
const value = type.BYTES_PER_ELEMENT;
|
|
return value ?? 1;
|
|
}
|
|
function isArrayBufferViewLike(value) {
|
|
if (ArrayBuffer.isView(value)) {
|
|
return true;
|
|
}
|
|
if (!value || typeof value !== "object") {
|
|
return false;
|
|
}
|
|
const view = value;
|
|
return typeof view.byteOffset === "number"
|
|
&& typeof view.byteLength === "number"
|
|
&& isArrayBufferLike(view.buffer);
|
|
}
|
|
function copyBytes(data) {
|
|
const view = toUint8Array(data);
|
|
const copy = new Uint8Array(view.byteLength);
|
|
copy.set(view);
|
|
return copy;
|
|
}
|
|
function isArrayBuffer(value) {
|
|
return tagOf(value) === ARRAY_BUFFER_TAG;
|
|
}
|
|
function isSharedArrayBuffer(value) {
|
|
return typeof SharedArrayBuffer !== "undefined" && tagOf(value) === SHARED_ARRAY_BUFFER_TAG;
|
|
}
|
|
function isArrayBufferLike(value) {
|
|
return isArrayBuffer(value) || isSharedArrayBuffer(value);
|
|
}
|
|
function isArrayBufferView(value) {
|
|
return isArrayBufferViewLike(value);
|
|
}
|
|
function isBufferSource(value) {
|
|
return isArrayBufferLike(value) || isArrayBufferView(value);
|
|
}
|
|
function assertBufferSource(value) {
|
|
if (!isBufferSource(value)) {
|
|
throw new TypeError("Expected ArrayBuffer, SharedArrayBuffer, or ArrayBufferView");
|
|
}
|
|
}
|
|
function toUint8Array(data) {
|
|
assertBufferSource(data);
|
|
if (isArrayBufferLike(data)) {
|
|
return new Uint8Array(data);
|
|
}
|
|
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
}
|
|
function toUint8ArrayCopy(data) {
|
|
return copyBytes(data);
|
|
}
|
|
function toArrayBuffer(data) {
|
|
assertBufferSource(data);
|
|
if (isArrayBuffer(data)) {
|
|
return data;
|
|
}
|
|
const buffer = new ArrayBuffer(data.byteLength);
|
|
new Uint8Array(buffer).set(toUint8Array(data));
|
|
return buffer;
|
|
}
|
|
function toArrayBufferLike(data) {
|
|
assertBufferSource(data);
|
|
if (isArrayBufferLike(data)) {
|
|
return data;
|
|
}
|
|
if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {
|
|
return data.buffer;
|
|
}
|
|
return copyBytes(data).buffer;
|
|
}
|
|
function toView(data, type) {
|
|
assertBufferSource(data);
|
|
if (ArrayBuffer.isView(data) && data.constructor === type) {
|
|
return data;
|
|
}
|
|
const view = toUint8Array(data);
|
|
const elementSize = bytesPerElement(type);
|
|
if (view.byteOffset % elementSize !== 0 || view.byteLength % elementSize !== 0) {
|
|
throw new RangeError(`Cannot create ${type.name} over unaligned byte range`);
|
|
}
|
|
if (isDataViewConstructor(type)) {
|
|
return new type(view.buffer, view.byteOffset, view.byteLength);
|
|
}
|
|
return new type(view.buffer, view.byteOffset, view.byteLength / elementSize);
|
|
}
|
|
function toViewCopy(data, type) {
|
|
const copy = toUint8ArrayCopy(data);
|
|
return toView(copy, type);
|
|
}
|