Added char type and Segment.isString
This commit is contained in:
100
src/types.ts
100
src/types.ts
@@ -1,9 +1,7 @@
|
||||
|
||||
/**
|
||||
* Type definitions for the packet parsing library.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Enumeration of supported field types for dissecting packets.
|
||||
*
|
||||
@@ -13,62 +11,63 @@
|
||||
*/
|
||||
export const FieldType = {
|
||||
// Boolean types
|
||||
BOOL: 'BOOL', // Boolean value (stored as a byte, 0 for false, non-zero for true)
|
||||
BOOL: "BOOL", // Boolean value (stored as a byte, 0 for false, non-zero for true)
|
||||
|
||||
// Number types
|
||||
BITS: 'BITS', // 1-bit values stored in a number (1 bit per value, packed into bytes)
|
||||
INT8: 'INT8', // 8-bit signed integer (1 byte)
|
||||
INT16_LE: 'INT16_LE', // 16-bit signed integer (little-endian)
|
||||
INT16_BE: 'INT16_BE', // 16-bit signed integer (big-endian)
|
||||
INT32_LE: 'INT32_LE', // 32-bit signed integer (little-endian)
|
||||
INT32_BE: 'INT32_BE', // 32-bit signed integer (big-endian)
|
||||
INT64_LE: 'INT64_LE', // 64-bit signed integer (little-endian)
|
||||
INT64_BE: 'INT64_BE', // 64-bit signed integer (big-endian)
|
||||
UINT8: 'UINT8', // 8-bit unsigned integer
|
||||
UINT16_LE: 'UINT16_LE', // 16-bit unsigned integer (little-endian)
|
||||
UINT16_BE: 'UINT16_BE', // 16-bit unsigned integer (big-endian)
|
||||
UINT32_LE: 'UINT32_LE', // 32-bit unsigned integer (little-endian)
|
||||
UINT32_BE: 'UINT32_BE', // 32-bit unsigned integer (big-endian)
|
||||
UINT64_LE: 'UINT64_LE', // 64-bit unsigned integer (little-endian)
|
||||
UINT64_BE: 'UINT64_BE', // 64-bit unsigned integer (big-endian)
|
||||
FLOAT32_LE: 'FLOAT32_LE', // 32-bit IEEE floating point (little-endian)
|
||||
FLOAT32_BE: 'FLOAT32_BE', // 32-bit IEEE floating point (big-endian)
|
||||
FLOAT64_LE: 'FLOAT64_LE', // 64-bit IEEE floating point (little-endian)
|
||||
FLOAT64_BE: 'FLOAT64_BE', // 64-bit IEEE floating point (big-endian)
|
||||
VARINT: 'VARINT', // Variable-length integer (unsigned, LEB128 encoding)
|
||||
VARSINT: 'VARSINT', // Variable-length integer (signed, LEB128 encoding)
|
||||
BITS: "BITS", // 1-bit values stored in a number (1 bit per value, packed into bytes)
|
||||
CHAR: "CHAR", // 8-bit character (1 byte)
|
||||
INT8: "INT8", // 8-bit signed integer (1 byte)
|
||||
INT16_LE: "INT16_LE", // 16-bit signed integer (little-endian)
|
||||
INT16_BE: "INT16_BE", // 16-bit signed integer (big-endian)
|
||||
INT32_LE: "INT32_LE", // 32-bit signed integer (little-endian)
|
||||
INT32_BE: "INT32_BE", // 32-bit signed integer (big-endian)
|
||||
INT64_LE: "INT64_LE", // 64-bit signed integer (little-endian)
|
||||
INT64_BE: "INT64_BE", // 64-bit signed integer (big-endian)
|
||||
UINT8: "UINT8", // 8-bit unsigned integer
|
||||
UINT16_LE: "UINT16_LE", // 16-bit unsigned integer (little-endian)
|
||||
UINT16_BE: "UINT16_BE", // 16-bit unsigned integer (big-endian)
|
||||
UINT32_LE: "UINT32_LE", // 32-bit unsigned integer (little-endian)
|
||||
UINT32_BE: "UINT32_BE", // 32-bit unsigned integer (big-endian)
|
||||
UINT64_LE: "UINT64_LE", // 64-bit unsigned integer (little-endian)
|
||||
UINT64_BE: "UINT64_BE", // 64-bit unsigned integer (big-endian)
|
||||
FLOAT32_LE: "FLOAT32_LE", // 32-bit IEEE floating point (little-endian)
|
||||
FLOAT32_BE: "FLOAT32_BE", // 32-bit IEEE floating point (big-endian)
|
||||
FLOAT64_LE: "FLOAT64_LE", // 64-bit IEEE floating point (little-endian)
|
||||
FLOAT64_BE: "FLOAT64_BE", // 64-bit IEEE floating point (big-endian)
|
||||
VARINT: "VARINT", // Variable-length integer (unsigned, LEB128 encoding)
|
||||
VARSINT: "VARSINT", // Variable-length integer (signed, LEB128 encoding)
|
||||
|
||||
// Date/time types (stored as integer timestamps)
|
||||
DATE32_LE: 'DATE32_LE', // 32-bit integer date (e.g., seconds since epoch) little-endian
|
||||
DATE32_BE: 'DATE32_BE', // 32-bit integer date big-endian
|
||||
DATE64_LE: 'DATE64_LE', // 64-bit integer date (e.g., ms since epoch) little-endian
|
||||
DATE64_BE: 'DATE64_BE', // 64-bit integer date big-endian
|
||||
DATE32_LE: "DATE32_LE", // 32-bit integer date (e.g., seconds since epoch) little-endian
|
||||
DATE32_BE: "DATE32_BE", // 32-bit integer date big-endian
|
||||
DATE64_LE: "DATE64_LE", // 64-bit integer date (e.g., ms since epoch) little-endian
|
||||
DATE64_BE: "DATE64_BE", // 64-bit integer date big-endian
|
||||
|
||||
// Array buffer types
|
||||
BYTES: 'BYTES', // 8-bits per value array (Uint8Array)
|
||||
C_STRING: 'C_STRING', // Null-terminated string (C-style) (Uint8Array)
|
||||
UTF8_STRING: 'UTF8_STRING', // UTF-8 encoded string (Uint8Array)
|
||||
WORDS: 'WORDS', // 16-bits per value array (Uint16Array)
|
||||
DWORDS: 'DWORDS', // 32-bits per value array (Uint32Array)
|
||||
QWORDS: 'QWORDS', // 64-bits per value array (BigUint64Array)
|
||||
BYTES: "BYTES", // 8-bits per value array (Uint8Array)
|
||||
C_STRING: "C_STRING", // Null-terminated string (C-style) (Uint8Array)
|
||||
UTF8_STRING: "UTF8_STRING", // UTF-8 encoded string (Uint8Array)
|
||||
WORDS: "WORDS", // 16-bits per value array (Uint16Array)
|
||||
DWORDS: "DWORDS", // 32-bits per value array (Uint32Array)
|
||||
QWORDS: "QWORDS", // 64-bits per value array (BigUint64Array)
|
||||
|
||||
// Aliases
|
||||
FLAG: 'BOOL', // alternate name for boolean/flag fields
|
||||
STRING: 'UTF8_STRING', // alias for UTF8 encoded strings
|
||||
FLAG: "BOOL", // alternate name for boolean/flag fields
|
||||
STRING: "UTF8_STRING" // alias for UTF8 encoded strings
|
||||
} as const;
|
||||
|
||||
export type FieldType = typeof FieldType[keyof typeof FieldType];
|
||||
export type FieldType = (typeof FieldType)[keyof typeof FieldType];
|
||||
|
||||
/**
|
||||
* Interface for a packet, which can be dissected into segments and fields. This is a placeholder
|
||||
* for any additional properties or methods that may be needed for representing a packet in the future.
|
||||
*/
|
||||
export interface Packet {
|
||||
data: string | Uint8Array | ArrayBuffer; // Raw packet data as an ArrayBuffer
|
||||
snr?: number; // Optional signal-to-noise ratio (for radio packets)
|
||||
rssi?: number; // Optional received signal strength indicator (for radio packets)
|
||||
parsed?: unknown; // Optional parsed representation of the packet (e.g., a structured object)
|
||||
dissected?: Dissected; // Optional dissected representation of the packet (array of segments)
|
||||
data: string | Uint8Array | ArrayBuffer; // Raw packet data as an ArrayBuffer
|
||||
snr?: number; // Optional signal-to-noise ratio (for radio packets)
|
||||
rssi?: number; // Optional received signal strength indicator (for radio packets)
|
||||
parsed?: unknown; // Optional parsed representation of the packet (e.g., a structured object)
|
||||
dissected?: Dissected; // Optional dissected representation of the packet (array of segments)
|
||||
|
||||
/**
|
||||
* Method to dissect the packet into segments and fields, returning an array of segments.
|
||||
@@ -108,8 +107,9 @@ export type Dissected = Segment[];
|
||||
* Each field specifies the type and length of data it represents.
|
||||
*/
|
||||
export interface Segment {
|
||||
name: string;
|
||||
data?: ArrayBuffer; // Optional raw data for the segment (if needed for parsing / serialization)
|
||||
name: string;
|
||||
data?: ArrayBuffer; // Optional raw data for the segment (if needed for parsing / serialization)
|
||||
isString?: boolean; // Optional flag indicating if the segment represents a string (for special handling)
|
||||
fields: Field[];
|
||||
}
|
||||
|
||||
@@ -118,11 +118,11 @@ export interface Segment {
|
||||
* for bit fields and array lengths.
|
||||
*/
|
||||
export interface Field {
|
||||
type: FieldType;
|
||||
name: string;
|
||||
value?: unknown; // Optional value for the field (used for serialization or as a default value)
|
||||
bits?: BitField[]; // Optional array of bit field definitions (for BITS type)
|
||||
length?: number; // Optional length for array types (e.g., BYTES, WORDS)
|
||||
type: FieldType;
|
||||
name: string;
|
||||
value?: unknown; // Optional value for the field (used for serialization or as a default value)
|
||||
bits?: BitField[]; // Optional array of bit field definitions (for BITS type)
|
||||
length?: number; // Optional length for array types (e.g., BYTES, WORDS)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -131,6 +131,6 @@ export interface Field {
|
||||
*/
|
||||
export interface BitField {
|
||||
name: string;
|
||||
size: number; // Number of bits for this field (must be > 0)
|
||||
size: number; // Number of bits for this field (must be > 0)
|
||||
lsb?: boolean; // Optional flag indicating if this field is the least significant bit in the byte (for BITS type)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user