diff --git a/src/WABinary/encode.ts b/src/WABinary/encode.ts index 5685f5f..8c91fbd 100644 --- a/src/WABinary/encode.ts +++ b/src/WABinary/encode.ts @@ -4,10 +4,19 @@ import { FullJid, jidDecode } from './jid-utils' import type { BinaryNode, BinaryNodeCodingOptions } from './types' export const encodeBinaryNode = ( - { tag, attrs, content }: BinaryNode, + node: BinaryNode, opts: Pick = constants, buffer: number[] = [0] -) => { +): Buffer => { + const encoded = encodeBinaryNodeInner(node, opts, buffer) + return Buffer.from(encoded) +} + +const encodeBinaryNodeInner = ( + { tag, attrs, content }: BinaryNode, + opts: Pick, + buffer: number[] +): number[] => { const { TAGS, TOKEN_MAP } = opts const pushByte = (value: number) => buffer.push(value & 0xff) @@ -224,7 +233,7 @@ export const encodeBinaryNode = ( } else if(Array.isArray(content)) { writeListStart(content.length) for(const item of content) { - encodeBinaryNode(item, opts, buffer) + encodeBinaryNodeInner(item, opts, buffer) } } else if(typeof content === 'undefined') { // do nothing @@ -232,5 +241,5 @@ export const encodeBinaryNode = ( throw new Error(`invalid children for header "${tag}": ${content} (${typeof content})`) } - return Buffer.from(buffer) + return buffer }