Ultra-fast MessagePack implementation with extensions for records and structured cloning
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Basic MessagePack serialization and deserialization functions providing high-performance encoding and decoding of JavaScript values to/from binary MessagePack format.
Serializes a JavaScript value to MessagePack binary format using the default packr instance.
/**
* Serializes a JavaScript value to MessagePack binary format
* @param value - The value to serialize
* @param encodeOptions - Optional encoding options (buffer mode flags)
* @returns Buffer containing the MessagePack encoded data
*/
function pack(value: any, encodeOptions?: number): Buffer;Usage Examples:
import { pack } from "msgpackr";
// Basic serialization
const data = { name: "Alice", age: 25, active: true };
const packed = pack(data);
// With arrays and nested objects
const complex = {
users: [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" }
],
metadata: { version: "1.0", timestamp: new Date() }
};
const packedComplex = pack(complex);
// With buffer mode options
const packedWithOptions = pack(data, REUSE_BUFFER_MODE);Alias for the pack function, providing the same functionality with alternative naming.
/**
* Alias for pack - serializes a JavaScript value to MessagePack binary format
* @param value - The value to serialize
* @param encodeOptions - Optional encoding options (buffer mode flags)
* @returns Buffer containing the MessagePack encoded data
*/
function encode(value: any, encodeOptions?: number): Buffer;Deserializes MessagePack binary data back to JavaScript values using the default unpackr instance.
/**
* Deserializes MessagePack binary data back to JavaScript values
* @param messagePack - Buffer or Uint8Array containing MessagePack data
* @param options - Optional unpacking options or byte offset
* @returns The deserialized JavaScript value
*/
function unpack(messagePack: Buffer | Uint8Array, options?: UnpackOptions): any;
type UnpackOptions = {
start?: number; // Starting byte offset
end?: number; // Ending byte offset
lazy?: boolean; // Enable lazy unpacking
} | number; // Or just a numeric offsetUsage Examples:
import { unpack } from "msgpackr";
// Basic deserialization
const packed = /* MessagePack buffer */;
const data = unpack(packed);
// With byte range options
const partialData = unpack(packed, { start: 10, end: 50 });
// With numeric offset
const offsetData = unpack(packed, 10);
// With lazy unpacking
const lazyData = unpack(packed, { lazy: true });Alias for the unpack function, providing the same functionality with alternative naming.
/**
* Alias for unpack - deserializes MessagePack binary data back to JavaScript values
* @param messagePack - Buffer or Uint8Array containing MessagePack data
* @param options - Optional unpacking options or byte offset
* @returns The deserialized JavaScript value
*/
function decode(messagePack: Buffer | Uint8Array, options?: UnpackOptions): any;Deserializes multiple MessagePack values from a single buffer, either returning an array or processing via callback.
/**
* Deserializes multiple MessagePack values from a single buffer
* @param messagePack - Buffer containing multiple MessagePack encoded values
* @returns Array of deserialized values
*/
function unpackMultiple(messagePack: Buffer | Uint8Array): any[];
/**
* Deserializes multiple MessagePack values with callback processing
* @param messagePack - Buffer containing multiple MessagePack encoded values
* @param forEach - Callback function called for each unpacked value
*/
function unpackMultiple(
messagePack: Buffer | Uint8Array,
forEach: (value: any, start?: number, end?: number) => any
): void;Usage Examples:
import { unpackMultiple } from "msgpackr";
// Unpack to array
const buffer = /* Buffer with multiple MessagePack values */;
const values = unpackMultiple(buffer);
console.log(values); // [value1, value2, value3, ...]
// Process with callback
unpackMultiple(buffer, (value, start, end) => {
console.log(`Value: ${value}, range: ${start}-${end}`);
// Process each value individually
});
// Stream-like processing
const results = [];
unpackMultiple(buffer, (value) => {
if (value.type === 'important') {
results.push(value);
}
});The core functions may throw errors in the following scenarios:
import { pack, unpack } from "msgpackr";
try {
const packed = pack(someData);
const unpacked = unpack(packed);
} catch (error) {
if (error.incomplete) {
// Handle incomplete MessagePack data
console.log('Incomplete data at position:', error.lastPosition);
console.log('Partial values:', error.values);
} else {
// Handle other errors
console.error('Packing/unpacking error:', error.message);
}
}const REUSE_BUFFER_MODE: number; // Reuse internal buffers for performance
const RESET_BUFFER_MODE: number; // Reset buffers between operations
const RESERVE_START_SPACE: number; // Reserve space at buffer start