UNPKG

xcom2charpool

Version:

Library for reading, manipulating, and managing XCOM 2 character pool binary files, supporting both browser and Node.js environments.

90 lines (89 loc) 4.95 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _ArrayBufferReader_position, _ArrayBufferReader_length; Object.defineProperty(exports, "__esModule", { value: true }); exports.ArrayBufferReader = void 0; const FSting_1 = require("../UE/FSting"); /** * ArrayBuffer-backed Reader implementation for binary decoding. */ class ArrayBufferReader { constructor(source, position, length) { this.source = source; _ArrayBufferReader_position.set(this, 0); _ArrayBufferReader_length.set(this, void 0); if (typeof position === 'number') { __classPrivateFieldSet(this, _ArrayBufferReader_position, position, "f"); } __classPrivateFieldSet(this, _ArrayBufferReader_length, typeof length === 'number' ? length : source.byteLength, "f"); } get length() { return __classPrivateFieldGet(this, _ArrayBufferReader_length, "f"); } get position() { return __classPrivateFieldGet(this, _ArrayBufferReader_position, "f"); } uint32() { this.ensureAvailable(4, 'uint32'); const value = this.source.getUint32(__classPrivateFieldGet(this, _ArrayBufferReader_position, "f"), true); __classPrivateFieldSet(this, _ArrayBufferReader_position, __classPrivateFieldGet(this, _ArrayBufferReader_position, "f") + 4, "f"); return value; } int32() { this.ensureAvailable(4, 'int32'); const value = this.source.getInt32(__classPrivateFieldGet(this, _ArrayBufferReader_position, "f"), true); __classPrivateFieldSet(this, _ArrayBufferReader_position, __classPrivateFieldGet(this, _ArrayBufferReader_position, "f") + 4, "f"); return value; } byte() { this.ensureAvailable(1, 'byte'); const value = this.source.getUint8(__classPrivateFieldGet(this, _ArrayBufferReader_position, "f")); __classPrivateFieldSet(this, _ArrayBufferReader_position, __classPrivateFieldGet(this, _ArrayBufferReader_position, "f") + 1, "f"); return value; } padding() { const padding = this.uint32(); if (padding) { throw new Error(`Expected empty padding, got ${padding.toString(16).padStart(8, '0')}`); } } subarray(length) { if (length < 0) { throw new Error('Attempt to subarray negative length'); } this.ensureAvailable(length, 'subarray'); const sub = new ArrayBufferReader(this.source, __classPrivateFieldGet(this, _ArrayBufferReader_position, "f"), __classPrivateFieldGet(this, _ArrayBufferReader_position, "f") + length); __classPrivateFieldSet(this, _ArrayBufferReader_position, __classPrivateFieldGet(this, _ArrayBufferReader_position, "f") + length, "f"); return sub; } string() { return FSting_1.FSting.read(this); } bytes(length) { if (length < 0) { throw new Error('Attempt to read negative byte length'); } this.ensureAvailable(length, 'bytes'); const start = this.source.byteOffset + __classPrivateFieldGet(this, _ArrayBufferReader_position, "f"); const bytes = new Uint8Array(this.source.buffer, start, length); __classPrivateFieldSet(this, _ArrayBufferReader_position, __classPrivateFieldGet(this, _ArrayBufferReader_position, "f") + length, "f"); return bytes; } ensureAvailable(size, context) { if (__classPrivateFieldGet(this, _ArrayBufferReader_position, "f") + size > this.length) { throw new Error(`Attempt to read beyond buffer length in ${context}. Offset: ${__classPrivateFieldGet(this, _ArrayBufferReader_position, "f")}, requested: ${size}, remaining: ${this.length - __classPrivateFieldGet(this, _ArrayBufferReader_position, "f")}`); } } } exports.ArrayBufferReader = ArrayBufferReader; _ArrayBufferReader_position = new WeakMap(), _ArrayBufferReader_length = new WeakMap();