Skip to content

Commit

Permalink
aaaaaaa
Browse files Browse the repository at this point in the history
  • Loading branch information
tgpholly committed May 12, 2023
1 parent a2e59b2 commit 7989e10
Show file tree
Hide file tree
Showing 19 changed files with 664 additions and 3 deletions.
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
# Custom
lib/

# Logs
logs
*.log
Expand Down
9 changes: 9 additions & 0 deletions lib/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/// <reference types="node" />
import { IReader } from "./readers/IReader";
import { IWriter } from "./writers/IWriter";
export declare enum Endian {
LE = 0,
BE = 1
}
export declare function createReader(endianness: Endian, buffer: Buffer): IReader;
export declare function createWriter(endianness: Endian, size?: number): IWriter;
30 changes: 30 additions & 0 deletions lib/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createWriter = exports.createReader = exports.Endian = void 0;
const ReaderBE_1 = require("./readers/ReaderBE");
const ReaderLE_1 = require("./readers/ReaderLE");
const WriterBE_1 = require("./writers/WriterBE");
const WriterLE_1 = require("./writers/WriterLE");
var Endian;
(function (Endian) {
Endian[Endian["LE"] = 0] = "LE";
Endian[Endian["BE"] = 1] = "BE";
})(Endian = exports.Endian || (exports.Endian = {}));
function createReader(endianness, buffer) {
if (endianness === Endian.LE) {
return new ReaderLE_1.ReaderLE(buffer);
}
else {
return new ReaderBE_1.ReaderBE(buffer);
}
}
exports.createReader = createReader;
function createWriter(endianness, size) {
if (endianness === Endian.LE) {
return new WriterLE_1.WriterLE(size);
}
else {
return new WriterBE_1.WriterBE(size);
}
}
exports.createWriter = createWriter;
19 changes: 19 additions & 0 deletions lib/readers/IReader.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/// <reference types="node" />
export interface IReader {
readBuffer(bytes: number): Buffer;
readUint8Array(bytes: number): Uint8Array;
readByte(): number;
readUByte(): number;
readBool(): boolean;
readShort(): number;
readUShort(): number;
readInt(): number;
readUInt(): number;
readLong(): bigint;
readULong(): bigint;
readFloat(): number;
readDouble(): number;
readShortString(): string;
readString(): string;
readString16(): string;
}
2 changes: 2 additions & 0 deletions lib/readers/IReader.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
15 changes: 15 additions & 0 deletions lib/readers/ReaderBE.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { IReader } from "./IReader";
import { ReaderBase } from "./ReaderBase";
export declare class ReaderBE extends ReaderBase implements IReader {
readShort(): number;
readUShort(): number;
readInt(): number;
readUInt(): number;
readLong(): bigint;
readULong(): bigint;
readFloat(): number;
readDouble(): number;
readShortString(): string;
readString(): string;
readString16(): string;
}
71 changes: 71 additions & 0 deletions lib/readers/ReaderBE.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReaderBE = void 0;
const ReaderBase_1 = require("./ReaderBase");
class ReaderBE extends ReaderBase_1.ReaderBase {
readShort() {
const value = this.buffer.readInt16BE(this.offset);
this.offset += 2;
return value;
}
readUShort() {
const value = this.buffer.readUInt16BE(this.offset);
this.offset += 2;
return value;
}
readInt() {
const value = this.buffer.readInt32BE(this.offset);
this.offset += 4;
return value;
}
readUInt() {
const value = this.buffer.readUInt32BE(this.offset);
this.offset += 4;
return value;
}
readLong() {
const value = this.buffer.readBigInt64BE(this.offset);
this.offset += 8;
return value;
}
readULong() {
const value = this.buffer.readBigUint64BE(this.offset);
this.offset += 8;
return value;
}
readFloat() {
const value = this.buffer.readFloatBE(this.offset);
this.offset += 4;
return value;
}
readDouble() {
const value = this.buffer.readDoubleBE(this.offset);
this.offset += 8;
return value;
}
readShortString() {
const length = this.readUByte();
let text = "";
for (let i = 0; i < length; i++) {
text += String.fromCharCode(this.readUByte());
}
return text;
}
readString() {
const length = this.readUShort();
let text = "";
for (let i = 0; i < length; i++) {
text += String.fromCharCode(this.readUByte());
}
return text;
}
readString16() {
const length = this.readUShort();
let text = "";
for (let i = 0; i < length; i++) {
text += String.fromCharCode(this.readUShort());
}
return text;
}
}
exports.ReaderBE = ReaderBE;
11 changes: 11 additions & 0 deletions lib/readers/ReaderBase.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/// <reference types="node" />
export declare class ReaderBase {
buffer: Buffer;
offset: number;
constructor(buffer: Buffer);
readBuffer(bytes: number): Buffer;
readUint8Array(bytes: number): Uint8Array;
readByte(): number;
readUByte(): number;
readBool(): boolean;
}
38 changes: 38 additions & 0 deletions lib/readers/ReaderBase.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReaderBase = void 0;
class ReaderBase {
constructor(buffer) {
this.buffer = buffer;
this.offset = 0;
}
readBuffer(bytes) {
const value = this.buffer.subarray(this.offset, this.offset + bytes);
this.offset += bytes;
return value;
}
// NOTE: This has to be a copy as the subarray is only cropped & offset
// Realistically this is what we want anyway.
readUint8Array(bytes) {
const croppedBuffer = this.readBuffer(bytes);
const newArray = new Uint8Array(croppedBuffer.length);
for (let i = 0; i < croppedBuffer.length; i++) {
newArray[i] = croppedBuffer[i];
}
return newArray;
}
readByte() {
const value = this.buffer.readInt8(this.offset);
this.offset++;
return value;
}
readUByte() {
const value = this.buffer.readUInt8(this.offset);
this.offset++;
return value;
}
readBool() {
return Boolean(this.readUByte());
}
}
exports.ReaderBase = ReaderBase;
15 changes: 15 additions & 0 deletions lib/readers/ReaderLE.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { IReader } from "./IReader";
import { ReaderBase } from "./ReaderBase";
export declare class ReaderLE extends ReaderBase implements IReader {
readShort(): number;
readUShort(): number;
readInt(): number;
readUInt(): number;
readLong(): bigint;
readULong(): bigint;
readFloat(): number;
readDouble(): number;
readShortString(): string;
readString(): string;
readString16(): string;
}
71 changes: 71 additions & 0 deletions lib/readers/ReaderLE.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReaderLE = void 0;
const ReaderBase_1 = require("./ReaderBase");
class ReaderLE extends ReaderBase_1.ReaderBase {
readShort() {
const value = this.buffer.readInt16LE(this.offset);
this.offset += 2;
return value;
}
readUShort() {
const value = this.buffer.readUInt16LE(this.offset);
this.offset += 2;
return value;
}
readInt() {
const value = this.buffer.readInt32LE(this.offset);
this.offset += 4;
return value;
}
readUInt() {
const value = this.buffer.readUInt32LE(this.offset);
this.offset += 4;
return value;
}
readLong() {
const value = this.buffer.readBigInt64LE(this.offset);
this.offset += 8;
return value;
}
readULong() {
const value = this.buffer.readBigUint64LE(this.offset);
this.offset += 8;
return value;
}
readFloat() {
const value = this.buffer.readFloatLE(this.offset);
this.offset += 4;
return value;
}
readDouble() {
const value = this.buffer.readDoubleLE(this.offset);
this.offset += 8;
return value;
}
readShortString() {
const length = this.readUByte();
let text = "";
for (let i = 0; i < length; i++) {
text += String.fromCharCode(this.readUByte());
}
return text;
}
readString() {
const length = this.readUShort();
let text = "";
for (let i = 0; i < length; i++) {
text += String.fromCharCode(this.readUByte());
}
return text;
}
readString16() {
const length = this.readUShort();
let text = "";
for (let i = 0; i < length; i++) {
text += String.fromCharCode(this.readUShort());
}
return text;
}
}
exports.ReaderLE = ReaderLE;
21 changes: 21 additions & 0 deletions lib/writers/IWriter.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/// <reference types="node" />
export interface IWriter {
toBuffer(): Buffer;
toString(): string;
writeBuffer(buffer: Buffer): IWriter;
writeUint8Array(array: Uint8Array): IWriter;
writeByte(value: number): IWriter;
writeUByte(value: number): IWriter;
writeBool(value: boolean | number): IWriter;
writeShort(value: number): IWriter;
writeUShort(value: number): IWriter;
writeInt(value: number): IWriter;
writeUInt(value: number): IWriter;
writeLong(value: number | bigint): IWriter;
writeULong(value: number): IWriter;
writeFloat(value: number): IWriter;
writeDouble(value: number): IWriter;
writeShortString(text: string): IWriter;
writeString(text: string): IWriter;
writeString16(text: string): IWriter;
}
2 changes: 2 additions & 0 deletions lib/writers/IWriter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
15 changes: 15 additions & 0 deletions lib/writers/WriterBE.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { IWriter } from "./IWriter";
import { WriterBase } from "./WriterBase";
export declare class WriterBE extends WriterBase implements IWriter {
writeShort(value: number): this;
writeUShort(value: number): this;
writeInt(value: number): this;
writeUInt(value: number): this;
writeLong(value: number | bigint): this;
writeULong(value: number | bigint): this;
writeFloat(value: number): this;
writeDouble(value: number): this;
writeShortString(text: string): this;
writeString(text: string): this;
writeString16(text: string): this;
}
Loading

0 comments on commit 7989e10

Please sign in to comment.