Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Typed binary parsing for typescript

License

Notifications You must be signed in to change notification settings

blacha/binparse

Repository files navigation

binparse

Typed binary object parser

import { bp } from 'binparse';
const simpleParser = bp.object('SimpleObject', {
 id: bp.lu16,
 x: bp.u8,
 y: bp.u8,
});
const { value, offset } = simpleParser.read([0x01, 0x00, 0x01, 0x02]);
/** byte offset of where the reader finished */
offset; // 3
/** Parsed object */
value.id; // 0x01
value.x; // 0x01;
value.y; // 0x02
value.unk1; // Typescript error

Heavily inspired by zod

Arrays

Read in a variable length array of points

Load the length in as a variable which can be referenced by the array parser for the length

import { bp } from 'binparse';
const PointParser = bp.object('Point', {
 /** X Offset */
 x: bp.lu16,
 /** Y Offset */
 y: bp.lu16,
});
const PointsParser = bp.object('SimpleObject', {
 // Number of points to read
 length: bp.variable('len', bp.u8),
 // Array of points with length "len"
 points: bp.array('Points', PointParser, 'len'),
});
const points = PointsParser.read([0x01, 0x01, 0x00, 0x02, 0x00]);

BitFlags

import { bp } from 'binparse';
const FlagParser = bp.bits('Flags', {
 isRed: 1,
 isGreen: 1,
 isBlue: 1,
 isAlpha: 1,
});
const { value } = FlagParser.read([0b0101]);
value.isRed; // true
value.isGreen; // false
value.isBlue; // true
value.isAlpha; // false

Explicit offsets

import { bp } from 'binparse';
const sparseParser = bp.object('Sparse', {
 first: bp.at(0x30, bp.lu32), // Read a lu32 at 0x30
 second: bp.at(0x60, bp.lu32), // Read a lu32 at 0x60
});
sparseParser.size; // 0x64

Performance

Continuos performance monitoring is done using hyperfine and hyperfine-action

Results can be found at benchmarks.html

About

Typed binary parsing for typescript

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Contributors 2

AltStyle によって変換されたページ (->オリジナル) /