Function: serializeFramedAstm()
serializeFramedAstm(
input,options?):Uint8Array
Serialize an ASTM message (or a bare record list) and frame it into a spec-clean byte stream in one call: the inverse of parseFramedAstm, composing the two emit layers at the edge.
Each record is serialized to spec-clean, CR-terminated wire text (canonical
delimiters, embedded delimiters re-escaped) and then framed independently
(one record per ETX-closed frame run), so the framing exactly mirrors what
decodeAstmFrames reassembles: parseFramedAstm(serializeFramedAstm(msg))
yields an equal message.
A value carrying a character above U+00FF is refused here rather than
framed: the record layer is happy to hold one, but a frame carries bytes and
nothing in the message says which character encoding to turn it into.
A value carrying a raw STX, ETB or ETX is refused too, and being Latin-1
is no exemption: those three are what decodeAstmFrames reads as the
shape of a frame, and framing has no escape sequence to hide one behind. The
record layer is happy to hold those as well, so this is a message that
serializes to records perfectly well and cannot be framed.
Parameters
input
AstmMessage | readonly AstmRecord[]
A parsed AstmMessage or a list of AstmRecords.
options?
ComposeFramesOptions = {}
Frame-encode options.
Returns
Uint8Array
The framed byte stream.
Throws
AstmSerializeError when a value contains an unencodable CR/LF
(ASTM_EMIT_UNENCODABLE_VALUE), or when a record's own type letter would not
survive being written in the canonical set this function serializes with
(ASTM_EMIT_TYPE_LETTER_COLLISION). The second reaches messages parsed under a
different delimiter set, since this function passes no set of its own.
Throws
AstmFrameEncodeError when there are no records to frame
(ASTM_FRAME_EMPTY_RECORD), a value holds a character above U+00FF
(ASTM_FRAME_UNENCODABLE_CHARACTER), or a record holds an STX, ETB or
ETX byte (ASTM_FRAME_RESERVED_BYTE).
Example
import { parseAstmRecords, serializeFramedAstm, parseFramedAstm } from "@cosyte/astm";
const msg = parseAstmRecords("H|\\^&\rR|1|^^^687|28.6|U/L||N||F\rL|1\r");
const bytes = serializeFramedAstm(msg);
parseFramedAstm(bytes).message.records.length; // 3