- Consolidated duplicate UndoManagers to single instance - Fixed connection promise to only resolve on 'connected' status - Fixed WebSocketProvider import (WebsocketProvider) - Added proper doc.destroy() cleanup - Renamed isPresenceInitialized property to avoid conflict Co-Authored-By: Paperclip <noreply@paperclip.ing>
284 lines
9.5 KiB
JavaScript
284 lines
9.5 KiB
JavaScript
import { SolanaError, SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE } from '@solana/errors';
|
|
import { combineCodec, createDecoder, createEncoder, assertByteArrayIsNotEmptyForCodec, assertByteArrayHasEnoughBytesForCodec, toArrayBuffer } from '@solana/codecs-core';
|
|
|
|
// src/assertions.ts
|
|
function assertNumberIsBetweenForCodec(codecDescription, min, max, value) {
|
|
if (value < min || value > max) {
|
|
throw new SolanaError(SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE, {
|
|
codecDescription,
|
|
max,
|
|
min,
|
|
value
|
|
});
|
|
}
|
|
}
|
|
|
|
// src/common.ts
|
|
var Endian = /* @__PURE__ */ ((Endian2) => {
|
|
Endian2[Endian2["Little"] = 0] = "Little";
|
|
Endian2[Endian2["Big"] = 1] = "Big";
|
|
return Endian2;
|
|
})(Endian || {});
|
|
function isLittleEndian(config) {
|
|
return config?.endian === 1 /* Big */ ? false : true;
|
|
}
|
|
function numberEncoderFactory(input) {
|
|
return createEncoder({
|
|
fixedSize: input.size,
|
|
write(value, bytes, offset) {
|
|
if (input.range) {
|
|
assertNumberIsBetweenForCodec(input.name, input.range[0], input.range[1], value);
|
|
}
|
|
const arrayBuffer = new ArrayBuffer(input.size);
|
|
input.set(new DataView(arrayBuffer), value, isLittleEndian(input.config));
|
|
bytes.set(new Uint8Array(arrayBuffer), offset);
|
|
return offset + input.size;
|
|
}
|
|
});
|
|
}
|
|
function numberDecoderFactory(input) {
|
|
return createDecoder({
|
|
fixedSize: input.size,
|
|
read(bytes, offset = 0) {
|
|
assertByteArrayIsNotEmptyForCodec(input.name, bytes, offset);
|
|
assertByteArrayHasEnoughBytesForCodec(input.name, input.size, bytes, offset);
|
|
const view = new DataView(toArrayBuffer(bytes, offset, input.size));
|
|
return [input.get(view, isLittleEndian(input.config)), offset + input.size];
|
|
}
|
|
});
|
|
}
|
|
|
|
// src/f32.ts
|
|
var getF32Encoder = (config = {}) => numberEncoderFactory({
|
|
config,
|
|
name: "f32",
|
|
set: (view, value, le) => view.setFloat32(0, Number(value), le),
|
|
size: 4
|
|
});
|
|
var getF32Decoder = (config = {}) => numberDecoderFactory({
|
|
config,
|
|
get: (view, le) => view.getFloat32(0, le),
|
|
name: "f32",
|
|
size: 4
|
|
});
|
|
var getF32Codec = (config = {}) => combineCodec(getF32Encoder(config), getF32Decoder(config));
|
|
var getF64Encoder = (config = {}) => numberEncoderFactory({
|
|
config,
|
|
name: "f64",
|
|
set: (view, value, le) => view.setFloat64(0, Number(value), le),
|
|
size: 8
|
|
});
|
|
var getF64Decoder = (config = {}) => numberDecoderFactory({
|
|
config,
|
|
get: (view, le) => view.getFloat64(0, le),
|
|
name: "f64",
|
|
size: 8
|
|
});
|
|
var getF64Codec = (config = {}) => combineCodec(getF64Encoder(config), getF64Decoder(config));
|
|
var getI128Encoder = (config = {}) => numberEncoderFactory({
|
|
config,
|
|
name: "i128",
|
|
range: [-BigInt("0x7fffffffffffffffffffffffffffffff") - 1n, BigInt("0x7fffffffffffffffffffffffffffffff")],
|
|
set: (view, value, le) => {
|
|
const leftOffset = le ? 8 : 0;
|
|
const rightOffset = le ? 0 : 8;
|
|
const rightMask = 0xffffffffffffffffn;
|
|
view.setBigInt64(leftOffset, BigInt(value) >> 64n, le);
|
|
view.setBigUint64(rightOffset, BigInt(value) & rightMask, le);
|
|
},
|
|
size: 16
|
|
});
|
|
var getI128Decoder = (config = {}) => numberDecoderFactory({
|
|
config,
|
|
get: (view, le) => {
|
|
const leftOffset = le ? 8 : 0;
|
|
const rightOffset = le ? 0 : 8;
|
|
const left = view.getBigInt64(leftOffset, le);
|
|
const right = view.getBigUint64(rightOffset, le);
|
|
return (left << 64n) + right;
|
|
},
|
|
name: "i128",
|
|
size: 16
|
|
});
|
|
var getI128Codec = (config = {}) => combineCodec(getI128Encoder(config), getI128Decoder(config));
|
|
var getI16Encoder = (config = {}) => numberEncoderFactory({
|
|
config,
|
|
name: "i16",
|
|
range: [-Number("0x7fff") - 1, Number("0x7fff")],
|
|
set: (view, value, le) => view.setInt16(0, Number(value), le),
|
|
size: 2
|
|
});
|
|
var getI16Decoder = (config = {}) => numberDecoderFactory({
|
|
config,
|
|
get: (view, le) => view.getInt16(0, le),
|
|
name: "i16",
|
|
size: 2
|
|
});
|
|
var getI16Codec = (config = {}) => combineCodec(getI16Encoder(config), getI16Decoder(config));
|
|
var getI32Encoder = (config = {}) => numberEncoderFactory({
|
|
config,
|
|
name: "i32",
|
|
range: [-Number("0x7fffffff") - 1, Number("0x7fffffff")],
|
|
set: (view, value, le) => view.setInt32(0, Number(value), le),
|
|
size: 4
|
|
});
|
|
var getI32Decoder = (config = {}) => numberDecoderFactory({
|
|
config,
|
|
get: (view, le) => view.getInt32(0, le),
|
|
name: "i32",
|
|
size: 4
|
|
});
|
|
var getI32Codec = (config = {}) => combineCodec(getI32Encoder(config), getI32Decoder(config));
|
|
var getI64Encoder = (config = {}) => numberEncoderFactory({
|
|
config,
|
|
name: "i64",
|
|
range: [-BigInt("0x7fffffffffffffff") - 1n, BigInt("0x7fffffffffffffff")],
|
|
set: (view, value, le) => view.setBigInt64(0, BigInt(value), le),
|
|
size: 8
|
|
});
|
|
var getI64Decoder = (config = {}) => numberDecoderFactory({
|
|
config,
|
|
get: (view, le) => view.getBigInt64(0, le),
|
|
name: "i64",
|
|
size: 8
|
|
});
|
|
var getI64Codec = (config = {}) => combineCodec(getI64Encoder(config), getI64Decoder(config));
|
|
var getI8Encoder = () => numberEncoderFactory({
|
|
name: "i8",
|
|
range: [-Number("0x7f") - 1, Number("0x7f")],
|
|
set: (view, value) => view.setInt8(0, Number(value)),
|
|
size: 1
|
|
});
|
|
var getI8Decoder = () => numberDecoderFactory({
|
|
get: (view) => view.getInt8(0),
|
|
name: "i8",
|
|
size: 1
|
|
});
|
|
var getI8Codec = () => combineCodec(getI8Encoder(), getI8Decoder());
|
|
var getShortU16Encoder = () => createEncoder({
|
|
getSizeFromValue: (value) => {
|
|
if (value <= 127) return 1;
|
|
if (value <= 16383) return 2;
|
|
return 3;
|
|
},
|
|
maxSize: 3,
|
|
write: (value, bytes, offset) => {
|
|
assertNumberIsBetweenForCodec("shortU16", 0, 65535, value);
|
|
const shortU16Bytes = [0];
|
|
for (let ii = 0; ; ii += 1) {
|
|
const alignedValue = Number(value) >> ii * 7;
|
|
if (alignedValue === 0) {
|
|
break;
|
|
}
|
|
const nextSevenBits = 127 & alignedValue;
|
|
shortU16Bytes[ii] = nextSevenBits;
|
|
if (ii > 0) {
|
|
shortU16Bytes[ii - 1] |= 128;
|
|
}
|
|
}
|
|
bytes.set(shortU16Bytes, offset);
|
|
return offset + shortU16Bytes.length;
|
|
}
|
|
});
|
|
var getShortU16Decoder = () => createDecoder({
|
|
maxSize: 3,
|
|
read: (bytes, offset) => {
|
|
let value = 0;
|
|
let byteCount = 0;
|
|
while (++byteCount) {
|
|
const byteIndex = byteCount - 1;
|
|
const currentByte = bytes[offset + byteIndex];
|
|
const nextSevenBits = 127 & currentByte;
|
|
value |= nextSevenBits << byteIndex * 7;
|
|
if ((currentByte & 128) === 0) {
|
|
break;
|
|
}
|
|
}
|
|
return [value, offset + byteCount];
|
|
}
|
|
});
|
|
var getShortU16Codec = () => combineCodec(getShortU16Encoder(), getShortU16Decoder());
|
|
var getU128Encoder = (config = {}) => numberEncoderFactory({
|
|
config,
|
|
name: "u128",
|
|
range: [0n, BigInt("0xffffffffffffffffffffffffffffffff")],
|
|
set: (view, value, le) => {
|
|
const leftOffset = le ? 8 : 0;
|
|
const rightOffset = le ? 0 : 8;
|
|
const rightMask = 0xffffffffffffffffn;
|
|
view.setBigUint64(leftOffset, BigInt(value) >> 64n, le);
|
|
view.setBigUint64(rightOffset, BigInt(value) & rightMask, le);
|
|
},
|
|
size: 16
|
|
});
|
|
var getU128Decoder = (config = {}) => numberDecoderFactory({
|
|
config,
|
|
get: (view, le) => {
|
|
const leftOffset = le ? 8 : 0;
|
|
const rightOffset = le ? 0 : 8;
|
|
const left = view.getBigUint64(leftOffset, le);
|
|
const right = view.getBigUint64(rightOffset, le);
|
|
return (left << 64n) + right;
|
|
},
|
|
name: "u128",
|
|
size: 16
|
|
});
|
|
var getU128Codec = (config = {}) => combineCodec(getU128Encoder(config), getU128Decoder(config));
|
|
var getU16Encoder = (config = {}) => numberEncoderFactory({
|
|
config,
|
|
name: "u16",
|
|
range: [0, Number("0xffff")],
|
|
set: (view, value, le) => view.setUint16(0, Number(value), le),
|
|
size: 2
|
|
});
|
|
var getU16Decoder = (config = {}) => numberDecoderFactory({
|
|
config,
|
|
get: (view, le) => view.getUint16(0, le),
|
|
name: "u16",
|
|
size: 2
|
|
});
|
|
var getU16Codec = (config = {}) => combineCodec(getU16Encoder(config), getU16Decoder(config));
|
|
var getU32Encoder = (config = {}) => numberEncoderFactory({
|
|
config,
|
|
name: "u32",
|
|
range: [0, Number("0xffffffff")],
|
|
set: (view, value, le) => view.setUint32(0, Number(value), le),
|
|
size: 4
|
|
});
|
|
var getU32Decoder = (config = {}) => numberDecoderFactory({
|
|
config,
|
|
get: (view, le) => view.getUint32(0, le),
|
|
name: "u32",
|
|
size: 4
|
|
});
|
|
var getU32Codec = (config = {}) => combineCodec(getU32Encoder(config), getU32Decoder(config));
|
|
var getU64Encoder = (config = {}) => numberEncoderFactory({
|
|
config,
|
|
name: "u64",
|
|
range: [0n, BigInt("0xffffffffffffffff")],
|
|
set: (view, value, le) => view.setBigUint64(0, BigInt(value), le),
|
|
size: 8
|
|
});
|
|
var getU64Decoder = (config = {}) => numberDecoderFactory({
|
|
config,
|
|
get: (view, le) => view.getBigUint64(0, le),
|
|
name: "u64",
|
|
size: 8
|
|
});
|
|
var getU64Codec = (config = {}) => combineCodec(getU64Encoder(config), getU64Decoder(config));
|
|
var getU8Encoder = () => numberEncoderFactory({
|
|
name: "u8",
|
|
range: [0, Number("0xff")],
|
|
set: (view, value) => view.setUint8(0, Number(value)),
|
|
size: 1
|
|
});
|
|
var getU8Decoder = () => numberDecoderFactory({
|
|
get: (view) => view.getUint8(0),
|
|
name: "u8",
|
|
size: 1
|
|
});
|
|
var getU8Codec = () => combineCodec(getU8Encoder(), getU8Decoder());
|
|
|
|
export { Endian, assertNumberIsBetweenForCodec, getF32Codec, getF32Decoder, getF32Encoder, getF64Codec, getF64Decoder, getF64Encoder, getI128Codec, getI128Decoder, getI128Encoder, getI16Codec, getI16Decoder, getI16Encoder, getI32Codec, getI32Decoder, getI32Encoder, getI64Codec, getI64Decoder, getI64Encoder, getI8Codec, getI8Decoder, getI8Encoder, getShortU16Codec, getShortU16Decoder, getShortU16Encoder, getU128Codec, getU128Decoder, getU128Encoder, getU16Codec, getU16Decoder, getU16Encoder, getU32Codec, getU32Decoder, getU32Encoder, getU64Codec, getU64Decoder, getU64Encoder, getU8Codec, getU8Decoder, getU8Encoder };
|
|
//# sourceMappingURL=index.node.mjs.map
|
|
//# sourceMappingURL=index.node.mjs.map
|