zon-format
Version:
ZON: The most token-efficient serialization format for LLMs - beats CSV, TOON, JSON, and all competitors
152 lines (151 loc) • 3.92 kB
JavaScript
;
/**
* Binary ZON Format Constants and Type Markers
*
* Inspired by MessagePack with ZON-specific extensions
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.TypeMarker = exports.MAGIC_HEADER = void 0;
exports.isPositiveFixint = isPositiveFixint;
exports.isNegativeFixint = isNegativeFixint;
exports.isFixmap = isFixmap;
exports.getFixmapSize = getFixmapSize;
exports.isFixarray = isFixarray;
exports.getFixarraySize = getFixarraySize;
exports.isFixstr = isFixstr;
exports.getFixstrSize = getFixstrSize;
exports.createPositiveFixint = createPositiveFixint;
exports.createNegativeFixint = createNegativeFixint;
exports.createFixmap = createFixmap;
exports.createFixarray = createFixarray;
exports.createFixstr = createFixstr;
/**
* Binary ZON magic header (4 bytes): "ZNB\x01"
*/
exports.MAGIC_HEADER = new Uint8Array([0x5A, 0x4E, 0x42, 0x01]); // "ZNB" + version 1
/**
* Type markers for Binary ZON
*
* Layout inspired by MessagePack:
* - 0x00-0x7F: Positive fixint (0-127)
* - 0x80-0x8F: Fixmap (0-15 entries)
* - 0x90-0x9F: Fixarray (0-15 elements)
* - 0xA0-0xBF: Fixstr (0-31 bytes)
* - 0xC0-0xDF: Special types & extensions
*/
exports.TypeMarker = {
// Special values
NIL: 0xC0,
FALSE: 0xC2, // Changed from F to match bool values
TRUE: 0xC3, // Changed from T to match bool values
// Binary data
BIN8: 0xC4, // Binary data (length: uint8)
BIN16: 0xC5, // Binary data (length: uint16)
BIN32: 0xC6, // Binary data (length: uint32)
// Strings
STR8: 0xD9, // String (length: uint8)
STR16: 0xDA, // String (length: uint16)
STR32: 0xDB, // String (length: uint32)
// Arrays
ARRAY16: 0xDC, // Array (length: uint16)
ARRAY32: 0xDD, // Array (length: uint32)
// Maps/Objects
MAP16: 0xDE, // Map (length: uint16)
MAP32: 0xDF, // Map (length: uint32)
// Floats
FLOAT32: 0xCA,
FLOAT64: 0xCB,
// Integers
UINT8: 0xCC,
UINT16: 0xCD,
UINT32: 0xCE,
UINT64: 0xCF,
INT8: 0xD0,
INT16: 0xD1,
INT32: 0xD2,
INT64: 0xD3,
// ZON-specific extensions (0xD4-0xD8)
EXT_METADATA: 0xD4, // Document metadata
EXT_COMPRESSED: 0xD5, // Compressed block
EXT_TABLE: 0xD6, // ZON table structure
EXT_DELTA: 0xD7, // Delta-encoded array
EXT_SPARSE: 0xD8, // Sparse array
};
/**
* Check if byte is a positive fixint (0x00-0x7F)
*/
function isPositiveFixint(byte) {
return byte >= 0x00 && byte <= 0x7F;
}
/**
* Check if byte is a negative fixint (0xE0-0xFF)
*/
function isNegativeFixint(byte) {
return byte >= 0xE0 && byte <= 0xFF;
}
/**
* Check if byte is a fixmap marker (0x80-0x8F)
*/
function isFixmap(byte) {
return byte >= 0x80 && byte <= 0x8F;
}
/**
* Get fixmap size from marker
*/
function getFixmapSize(byte) {
return byte & 0x0F;
}
/**
* Check if byte is a fixarray marker (0x90-0x9F)
*/
function isFixarray(byte) {
return byte >= 0x90 && byte <= 0x9F;
}
/**
* Get fixarray size from marker
*/
function getFixarraySize(byte) {
return byte & 0x0F;
}
/**
* Check if byte is a fixstr marker (0xA0-0xBF)
*/
function isFixstr(byte) {
return byte >= 0xA0 && byte <= 0xBF;
}
/**
* Get fixstr size from marker
*/
function getFixstrSize(byte) {
return byte & 0x1F;
}
/**
* Create fixint marker for positive integers 0-127
*/
function createPositiveFixint(value) {
return value & 0x7F;
}
/**
* Create negative fixint marker for integers -32 to -1
*/
function createNegativeFixint(value) {
return value & 0xFF;
}
/**
* Create fixmap marker for maps with 0-15 entries
*/
function createFixmap(size) {
return 0x80 | (size & 0x0F);
}
/**
* Create fixarray marker for arrays with 0-15 elements
*/
function createFixarray(size) {
return 0x90 | (size & 0x0F);
}
/**
* Create fixstr marker for strings with 0-31 bytes
*/
function createFixstr(size) {
return 0xA0 | (size & 0x1F);
}