{"version":3,"sources":["../../src/sbe/annotations.ts","../../src/sbe/template.ts","../../src/sbe/view.ts","../../src/sbe/sbe.ts","../../src/sbe/marshal.ts","../../src/sbe/unmarshal.ts","../../src/sbe/saxlite.ts","../../src/sbe/xmlschema.ts","../../src/sbe/xmltoproto.ts","../../src/sbe/prototoxml.ts"],"names":["size","ScalarType","reflect","nameEnd","rawName","sortedFields","writeField"],"mappings":"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","file":"index.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Read SBE schema annotations from File / Message / Field options.\n * Mirrors `protowire/encoding/sbe/annotations.go`.\n *\n * The SBE extensions (schema_id, version, template_id, length, encoding) are\n * NOT registered with protobuf-es here — their values surface in\n * `proto.options?.$unknown`. We parse those raw bytes directly, matching the\n * Go fallback path.\n */\n\nimport { type DescField, type DescFile, type DescMessage } from \"@bufbuild/protobuf\";\n\nexport const EXT_SCHEMA_ID = 50_100;\nexport const EXT_VERSION = 50_101;\nexport const EXT_TEMPLATE_ID = 50_200;\nexport const EXT_LENGTH = 50_300;\nexport const EXT_ENCODING = 50_301;\n\ninterface UnknownField {\n  no: number;\n  wireType: number;\n  data: Uint8Array;\n}\n\nfunction unknowns(opts: { $unknown?: UnknownField[] } | undefined): UnknownField[] | undefined {\n  return opts?.$unknown;\n}\n\nexport function getFileUint32(file: DescFile, no: number): number | undefined {\n  return readUint32Unknown(unknowns(file.proto.options as { $unknown?: UnknownField[] } | undefined), no);\n}\n\nexport function getMessageUint32(desc: DescMessage, no: number): number | undefined {\n  return readUint32Unknown(unknowns(desc.proto.options as { $unknown?: UnknownField[] } | undefined), no);\n}\n\nexport function getFieldUint32(fd: DescField, no: number): number | undefined {\n  return readUint32Unknown(unknowns(fd.proto.options as { $unknown?: UnknownField[] } | undefined), no);\n}\n\nexport function getFieldString(fd: DescField, no: number): string | undefined {\n  const ufs = unknowns(fd.proto.options as { $unknown?: UnknownField[] } | undefined);\n  if (!ufs) return undefined;\n  for (const uf of ufs) {\n    if (uf.no === no && uf.wireType === 2) {\n      const [len, off] = readVarintWithLength(uf.data);\n      return new TextDecoder().decode(uf.data.subarray(off, off + Number(len)));\n    }\n  }\n  return undefined;\n}\n\nfunction readUint32Unknown(ufs: UnknownField[] | undefined, no: number): number | undefined {\n  if (!ufs) return undefined;\n  for (const uf of ufs) {\n    if (uf.no === no && uf.wireType === 0) {\n      return Number(readVarint(uf.data));\n    }\n  }\n  return undefined;\n}\n\nfunction readVarint(data: Uint8Array): bigint {\n  let result = 0n;\n  let shift = 0n;\n  for (let i = 0; i < data.length && i < 10; i++) {\n    const byte = data[i]!;\n    result |= BigInt(byte & 0x7f) << shift;\n    if ((byte & 0x80) === 0) return result;\n    shift += 7n;\n  }\n  throw new Error(\"sbe: invalid varint in options\");\n}\n\nfunction readVarintWithLength(data: Uint8Array): [bigint, number] {\n  let result = 0n;\n  let shift = 0n;\n  for (let i = 0; i < data.length && i < 10; i++) {\n    const byte = data[i]!;\n    result |= BigInt(byte & 0x7f) << shift;\n    if ((byte & 0x80) === 0) return [result, i + 1];\n    shift += 7n;\n  }\n  throw new Error(\"sbe: invalid varint in options\");\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * SBE wire-layout templates derived from proto descriptors.\n * Mirrors `protowire/encoding/sbe/template.go`.\n */\n\nimport { type DescField, type DescMessage, ScalarType } from \"@bufbuild/protobuf\";\n\nimport {\n  EXT_ENCODING,\n  EXT_LENGTH,\n  EXT_TEMPLATE_ID,\n  getFieldString,\n  getFieldUint32,\n  getMessageUint32,\n} from \"./annotations.js\";\nimport type { ViewSchema } from \"./view.js\";\n\nexport type SbeEncoding =\n  | \"int8\"\n  | \"int16\"\n  | \"int32\"\n  | \"int64\"\n  | \"uint8\"\n  | \"uint16\"\n  | \"uint32\"\n  | \"uint64\"\n  | \"float\"\n  | \"double\"\n  | \"char\";\n\nexport interface FieldTemplate {\n  fd: DescField;\n  offset: number;\n  size: number;\n  /** Empty string for composite fields. */\n  encoding: SbeEncoding | \"\";\n  /** Non-empty for composite (nested message) fields. */\n  composite: FieldTemplate[];\n  /** Lazily populated by view.buildViewSchema for composite fields. */\n  compositeView?: ViewSchema;\n}\n\nexport interface GroupTemplate {\n  fd: DescField;\n  blockLength: number;\n  fields: FieldTemplate[];\n}\n\nexport interface MessageTemplate {\n  desc: DescMessage;\n  templateId: number;\n  schemaId: number;\n  version: number;\n  blockLength: number;\n  fields: FieldTemplate[];\n  groups: GroupTemplate[];\n  /** Lazily populated by View.fromCodec on first use. */\n  view?: ViewSchema;\n}\n\nexport function buildTemplate(\n  desc: DescMessage,\n  schemaId: number,\n  version: number,\n): MessageTemplate {\n  const tid = getMessageUint32(desc, EXT_TEMPLATE_ID);\n  if (tid === undefined) {\n    throw new Error(`sbe: message ${desc.typeName} missing (sbe.template_id)`);\n  }\n\n  const tmpl: MessageTemplate = {\n    desc,\n    templateId: tid,\n    schemaId,\n    version,\n    blockLength: 0,\n    fields: [],\n    groups: [],\n  };\n\n  let offset = 0;\n  for (const fd of sortedFields(desc)) {\n    if (fd.fieldKind === \"map\") {\n      throw new Error(`sbe: map field ${desc.typeName}.${fd.name} not supported`);\n    }\n    if (fd.oneof !== undefined) {\n      throw new Error(`sbe: oneof field ${desc.typeName}.${fd.name} not supported`);\n    }\n\n    if (fd.fieldKind === \"list\" && fd.listKind === \"message\") {\n      tmpl.groups.push(buildGroupTemplate(fd));\n      continue;\n    }\n    if (fd.fieldKind === \"list\") {\n      throw new Error(\n        `sbe: repeated scalar field ${desc.typeName}.${fd.name} not supported; wrap in a message`,\n      );\n    }\n\n    if (fd.fieldKind === \"message\") {\n      const [size, sub] = buildCompositeFields(fd.message);\n      tmpl.fields.push({ fd, offset, size, encoding: \"\", composite: sub });\n      offset += size;\n      continue;\n    }\n\n    const [enc, size] = fieldEncodingSize(fd);\n    tmpl.fields.push({ fd, offset, size, encoding: enc, composite: [] });\n    offset += size;\n  }\n\n  tmpl.blockLength = offset;\n  return tmpl;\n}\n\nfunction buildGroupTemplate(fd: DescField & { fieldKind: \"list\" }): GroupTemplate {\n  if (fd.listKind !== \"message\") {\n    throw new Error(`sbe: group field ${fd.name} must be a repeated message`);\n  }\n  const md = fd.message;\n  const gt: GroupTemplate = { fd, blockLength: 0, fields: [] };\n  let offset = 0;\n  for (const f of sortedFields(md)) {\n    if (f.fieldKind === \"map\") {\n      throw new Error(`sbe: map field in group ${md.typeName} not supported`);\n    }\n    if (f.fieldKind === \"list\") {\n      throw new Error(`sbe: nested repeated field in group ${md.typeName} not supported`);\n    }\n    if (f.fieldKind === \"message\") {\n      const [size, sub] = buildCompositeFields(f.message);\n      gt.fields.push({ fd: f, offset, size, encoding: \"\", composite: sub });\n      offset += size;\n      continue;\n    }\n    const [enc, size] = fieldEncodingSize(f);\n    gt.fields.push({ fd: f, offset, size, encoding: enc, composite: [] });\n    offset += size;\n  }\n  gt.blockLength = offset;\n  return gt;\n}\n\nfunction buildCompositeFields(md: DescMessage): [number, FieldTemplate[]] {\n  const out: FieldTemplate[] = [];\n  let offset = 0;\n  for (const fd of sortedFields(md)) {\n    if (fd.fieldKind === \"list\" || fd.fieldKind === \"map\") {\n      throw new Error(`sbe: composite ${md.typeName} contains list/map field ${fd.name}`);\n    }\n    if (fd.oneof !== undefined) {\n      throw new Error(`sbe: composite ${md.typeName} contains oneof field ${fd.name}`);\n    }\n    if (fd.fieldKind === \"message\") {\n      const [size, sub] = buildCompositeFields(fd.message);\n      out.push({ fd, offset, size, encoding: \"\", composite: sub });\n      offset += size;\n      continue;\n    }\n    const [enc, size] = fieldEncodingSize(fd);\n    out.push({ fd, offset, size, encoding: enc, composite: [] });\n    offset += size;\n  }\n  return [offset, out];\n}\n\nexport function fieldEncodingSize(fd: DescField): [SbeEncoding, number] {\n  const explicit = getFieldString(fd, EXT_ENCODING);\n  if (explicit !== undefined) {\n    switch (explicit) {\n      case \"int8\":\n      case \"uint8\":\n        return [explicit, 1];\n      case \"int16\":\n      case \"uint16\":\n        return [explicit, 2];\n      case \"int32\":\n      case \"uint32\":\n      case \"float\":\n        return [explicit, 4];\n      case \"int64\":\n      case \"uint64\":\n      case \"double\":\n        return [explicit, 8];\n      default:\n        throw new Error(`sbe: unknown encoding ${JSON.stringify(explicit)} on ${fd.name}`);\n    }\n  }\n\n  if (fd.fieldKind === \"enum\") return [\"uint8\", 1];\n  if (fd.fieldKind !== \"scalar\") {\n    throw new Error(`sbe: unsupported field kind ${fd.fieldKind} on ${fd.name}`);\n  }\n\n  switch (fd.scalar) {\n    case ScalarType.BOOL:\n      return [\"uint8\", 1];\n    case ScalarType.INT32:\n    case ScalarType.SINT32:\n    case ScalarType.SFIXED32:\n      return [\"int32\", 4];\n    case ScalarType.INT64:\n    case ScalarType.SINT64:\n    case ScalarType.SFIXED64:\n      return [\"int64\", 8];\n    case ScalarType.UINT32:\n    case ScalarType.FIXED32:\n      return [\"uint32\", 4];\n    case ScalarType.UINT64:\n    case ScalarType.FIXED64:\n      return [\"uint64\", 8];\n    case ScalarType.FLOAT:\n      return [\"float\", 4];\n    case ScalarType.DOUBLE:\n      return [\"double\", 8];\n    case ScalarType.STRING:\n    case ScalarType.BYTES: {\n      const len = getFieldUint32(fd, EXT_LENGTH);\n      if (len === undefined) {\n        const kind = fd.scalar === ScalarType.STRING ? \"string\" : \"bytes\";\n        throw new Error(`sbe: ${kind} field ${fd.name} requires (sbe.length) annotation`);\n      }\n      return [\"char\", len];\n    }\n  }\n}\n\nfunction sortedFields(desc: DescMessage): DescField[] {\n  return [...desc.fields].sort((a, b) => a.number - b.number);\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * SBE View: read-only access into an SBE-encoded buffer with no message\n * allocation. Mirrors `protowire/encoding/sbe/view.go`.\n *\n * Strings still allocate (JavaScript has no `unsafe.String` equivalent), but\n * Bytes() returns a zero-copy `Uint8Array` subarray and Composite() just\n * returns a new View over the same underlying buffer.\n */\n\nimport { GROUP_HEADER_SIZE, HEADER_SIZE, type Codec } from \"./sbe.js\";\nimport type { FieldTemplate, MessageTemplate } from \"./template.js\";\n\nexport interface ViewSchema {\n  fields: Map<string, FieldTemplate>;\n  groups: ViewGroupInfo[];\n}\n\ninterface ViewGroupInfo {\n  name: string;\n  schema: ViewSchema;\n}\n\nexport function buildViewSchema(tmpl: MessageTemplate): ViewSchema {\n  const fields = new Map<string, FieldTemplate>();\n  for (const ft of tmpl.fields) {\n    fields.set(ft.fd.name, ft);\n    if (ft.composite.length > 0) {\n      ft.compositeView = buildFieldsView(ft.composite);\n    }\n  }\n  const groups: ViewGroupInfo[] = [];\n  for (const gt of tmpl.groups) {\n    groups.push({\n      name: gt.fd.name,\n      schema: buildFieldsView(gt.fields),\n    });\n  }\n  return { fields, groups };\n}\n\nfunction buildFieldsView(fields: FieldTemplate[]): ViewSchema {\n  const map = new Map<string, FieldTemplate>();\n  for (const ft of fields) {\n    map.set(ft.fd.name, ft);\n    if (ft.composite.length > 0) {\n      ft.compositeView = buildFieldsView(ft.composite);\n    }\n  }\n  return { fields: map, groups: [] };\n}\n\n/**\n * View provides allocation-free read access to SBE-encoded data. Field\n * accessors decode primitives directly from the underlying buffer.\n */\nexport class View {\n  /** Full SBE message buffer — needed to walk groups past the root block. */\n  private readonly data: Uint8Array;\n  /** Current block (root, group entry, or composite). */\n  private readonly block: Uint8Array;\n  private readonly view: DataView;\n  private readonly schema: ViewSchema;\n  /** Offset of the first group header (end of root block) in `data`. */\n  private readonly groupsStart: number;\n\n  constructor(data: Uint8Array, block: Uint8Array, schema: ViewSchema, groupsStart: number) {\n    this.data = data;\n    this.block = block;\n    this.view = new DataView(block.buffer, block.byteOffset, block.byteLength);\n    this.schema = schema;\n    this.groupsStart = groupsStart;\n  }\n\n  static fromCodec(codec: Codec, data: Uint8Array): View {\n    if (data.length < HEADER_SIZE) {\n      throw new Error(\"sbe: data too short for header\");\n    }\n    const dv = new DataView(data.buffer, data.byteOffset, data.byteLength);\n    const blockLength = dv.getUint16(0, true);\n    const templateId = dv.getUint16(2, true);\n    const tmpl = codec.templateById(templateId);\n    const end = HEADER_SIZE + blockLength;\n    if (data.length < end) {\n      throw new Error(\"sbe: data too short for root block\");\n    }\n    if (!tmpl.view) tmpl.view = buildViewSchema(tmpl);\n    return new View(data, data.subarray(HEADER_SIZE, end), tmpl.view, end);\n  }\n\n  private field(name: string): FieldTemplate {\n    const ft = this.schema.fields.get(name);\n    if (!ft) throw new Error(`sbe: unknown field: ${name}`);\n    return ft;\n  }\n\n  int(name: string): number | bigint {\n    const ft = this.field(name);\n    switch (ft.encoding) {\n      case \"int8\":\n        return this.view.getInt8(ft.offset);\n      case \"int16\":\n        return this.view.getInt16(ft.offset, true);\n      case \"int32\":\n        return this.view.getInt32(ft.offset, true);\n      case \"int64\":\n        return this.view.getBigInt64(ft.offset, true);\n      default:\n        throw new Error(`sbe: field ${name} is not a signed integer`);\n    }\n  }\n\n  uint(name: string): number | bigint {\n    const ft = this.field(name);\n    switch (ft.encoding) {\n      case \"uint8\":\n        return this.view.getUint8(ft.offset);\n      case \"uint16\":\n        return this.view.getUint16(ft.offset, true);\n      case \"uint32\":\n        return this.view.getUint32(ft.offset, true);\n      case \"uint64\":\n        return this.view.getBigUint64(ft.offset, true);\n      default:\n        throw new Error(`sbe: field ${name} is not an unsigned integer`);\n    }\n  }\n\n  float(name: string): number {\n    const ft = this.field(name);\n    switch (ft.encoding) {\n      case \"float\":\n        return this.view.getFloat32(ft.offset, true);\n      case \"double\":\n        return this.view.getFloat64(ft.offset, true);\n      default:\n        throw new Error(`sbe: field ${name} is not a float`);\n    }\n  }\n\n  bool(name: string): boolean {\n    return this.view.getUint8(this.field(name).offset) !== 0;\n  }\n\n  enum(name: string): number {\n    const ft = this.field(name);\n    switch (ft.encoding) {\n      case \"uint8\":\n        return this.view.getUint8(ft.offset);\n      case \"uint16\":\n        return this.view.getUint16(ft.offset, true);\n      default:\n        throw new Error(`sbe: field ${name} has unsupported enum encoding`);\n    }\n  }\n\n  /** Trims trailing NUL padding. */\n  string(name: string): string {\n    const ft = this.field(name);\n    const slice = this.block.subarray(ft.offset, ft.offset + ft.size);\n    let n = slice.length;\n    while (n > 0 && slice[n - 1] === 0) n--;\n    return new TextDecoder().decode(slice.subarray(0, n));\n  }\n\n  /** Zero-copy subarray view over the field's bytes. */\n  bytes(name: string): Uint8Array {\n    const ft = this.field(name);\n    return this.block.subarray(ft.offset, ft.offset + ft.size);\n  }\n\n  composite(name: string): View {\n    const ft = this.field(name);\n    if (!ft.compositeView) {\n      throw new Error(`sbe: field ${name} is not a composite`);\n    }\n    const block = this.block.subarray(ft.offset, ft.offset + ft.size);\n    // Composites cannot contain groups, so groupsStart is irrelevant — pass 0.\n    return new View(this.data, block, ft.compositeView, 0);\n  }\n\n  group(name: string): GroupView {\n    let pos = this.groupsStart;\n    for (const gi of this.schema.groups) {\n      const dv = new DataView(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n      const blockLength = dv.getUint16(pos, true);\n      const count = dv.getUint16(pos + 2, true);\n      if (gi.name === name) {\n        return new GroupView(this.data, pos, blockLength, count, gi.schema);\n      }\n      pos += GROUP_HEADER_SIZE + count * blockLength;\n    }\n    throw new Error(`sbe: unknown group: ${name}`);\n  }\n}\n\nexport class GroupView {\n  private readonly data: Uint8Array;\n  /** Offset in `data` of this group's header. */\n  private readonly base: number;\n  private readonly blockLength: number;\n  private readonly count: number;\n  private readonly schema: ViewSchema;\n\n  constructor(\n    data: Uint8Array,\n    base: number,\n    blockLength: number,\n    count: number,\n    schema: ViewSchema,\n  ) {\n    this.data = data;\n    this.base = base;\n    this.blockLength = blockLength;\n    this.count = count;\n    this.schema = schema;\n  }\n\n  get length(): number {\n    return this.count;\n  }\n\n  entry(i: number): View {\n    if (i < 0 || i >= this.count) {\n      throw new RangeError(`sbe: group entry ${i} out of range [0, ${this.count})`);\n    }\n    const start = this.base + GROUP_HEADER_SIZE + i * this.blockLength;\n    const block = this.data.subarray(start, start + this.blockLength);\n    return new View(this.data, block, this.schema, 0);\n  }\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * SBE codec: registers proto messages by template ID and dispatches to the\n * marshal/unmarshal/view paths. Mirrors `protowire/encoding/sbe/sbe.go`.\n */\n\nimport { type DescFile, type DescMessage, type MessageShape } from \"@bufbuild/protobuf\";\n\nimport { EXT_SCHEMA_ID, EXT_VERSION, getFileUint32 } from \"./annotations.js\";\nimport { buildTemplate, type MessageTemplate } from \"./template.js\";\nimport { View } from \"./view.js\";\n\n/** SBE message header size: blockLength(2) + templateId(2) + schemaId(2) + version(2). */\nexport const HEADER_SIZE = 8;\n\n/** SBE repeating-group header size: blockLength(2) + numInGroup(2). */\nexport const GROUP_HEADER_SIZE = 4;\n\nexport class Codec {\n  readonly byName = new Map<string, MessageTemplate>();\n  readonly byId = new Map<number, MessageTemplate>();\n\n  static fromFiles(...files: DescFile[]): Codec {\n    const c = new Codec();\n    for (const file of files) {\n      const schemaId = getFileUint32(file, EXT_SCHEMA_ID);\n      if (schemaId === undefined) {\n        throw new Error(`sbe: file ${file.name} missing (sbe.schema_id) option`);\n      }\n      const version = getFileUint32(file, EXT_VERSION) ?? 0;\n      for (const desc of file.messages) {\n        c.registerMessage(desc, schemaId, version);\n      }\n    }\n    return c;\n  }\n\n  private registerMessage(desc: DescMessage, schemaId: number, version: number): void {\n    if (hasTemplateId(desc)) {\n      const tmpl = buildTemplate(desc, schemaId, version);\n      this.byName.set(desc.typeName, tmpl);\n      this.byId.set(tmpl.templateId, tmpl);\n    }\n    for (const nested of desc.nestedMessages) {\n      this.registerMessage(nested, schemaId, version);\n    }\n  }\n\n  template(typeName: string): MessageTemplate {\n    const tmpl = this.byName.get(typeName);\n    if (!tmpl) throw new Error(`sbe: no template registered for ${typeName}`);\n    return tmpl;\n  }\n\n  templateById(id: number): MessageTemplate {\n    const tmpl = this.byId.get(id);\n    if (!tmpl) throw new Error(`sbe: unknown template ID ${id}`);\n    return tmpl;\n  }\n\n  /** Construct a zero-allocation reader over an SBE-encoded buffer. */\n  view(data: Uint8Array): View {\n    return View.fromCodec(this, data);\n  }\n}\n\nfunction hasTemplateId(desc: DescMessage): boolean {\n  const ufs = (desc.proto.options as { $unknown?: { no: number }[] } | undefined)?.$unknown;\n  if (!ufs) return false;\n  return ufs.some((u) => u.no === 50_200);\n}\n\n// Re-export MessageShape so consumers can type their own marshal callsites.\nexport type { MessageShape };\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * SBE marshal: serializes a proto message into the SBE binary format using a\n * pre-built MessageTemplate. Mirrors `protowire/encoding/sbe/marshal.go`.\n */\n\nimport { type DescField, type DescMessage, type MessageShape, ScalarType } from \"@bufbuild/protobuf\";\nimport { type ReflectList, type ReflectMessage, reflect } from \"@bufbuild/protobuf/reflect\";\n\nimport { Codec, GROUP_HEADER_SIZE, HEADER_SIZE } from \"./sbe.js\";\nimport type { FieldTemplate, GroupTemplate, MessageTemplate } from \"./template.js\";\n\nexport function marshal<Desc extends DescMessage>(\n  codec: Codec,\n  desc: Desc,\n  msg: MessageShape<Desc>,\n): Uint8Array {\n  const tmpl = codec.template(desc.typeName);\n  return marshalMessage(reflect(desc, msg), tmpl);\n}\n\nfunction marshalMessage(refl: ReflectMessage, tmpl: MessageTemplate): Uint8Array {\n  let total = HEADER_SIZE + tmpl.blockLength;\n  for (const gt of tmpl.groups) {\n    const list = refl.get(gt.fd) as ReflectList<unknown>;\n    total += GROUP_HEADER_SIZE + list.size * gt.blockLength;\n  }\n\n  const buf = new Uint8Array(total);\n  const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n\n  view.setUint16(0, tmpl.blockLength, true);\n  view.setUint16(2, tmpl.templateId, true);\n  view.setUint16(4, tmpl.schemaId, true);\n  view.setUint16(6, tmpl.version, true);\n\n  for (const ft of tmpl.fields) {\n    writeField(view, HEADER_SIZE, ft, refl);\n  }\n\n  let pos = HEADER_SIZE + tmpl.blockLength;\n  for (const gt of tmpl.groups) {\n    pos += marshalGroup(view, pos, refl, gt);\n  }\n\n  return buf;\n}\n\nfunction writeField(\n  view: DataView,\n  base: number,\n  ft: FieldTemplate,\n  refl: ReflectMessage,\n): void {\n  if (ft.composite.length > 0) {\n    const sub = refl.get(ft.fd) as ReflectMessage;\n    for (const sf of ft.composite) {\n      writeField(view, base + ft.offset, sf, sub);\n    }\n    return;\n  }\n\n  const fd = ft.fd;\n  const off = base + ft.offset;\n  const raw = refl.get(fd);\n\n  switch (ft.encoding) {\n    case \"int8\":\n      view.setInt8(off, intToNumber(raw));\n      return;\n    case \"int16\":\n      view.setInt16(off, intToNumber(raw), true);\n      return;\n    case \"int32\":\n      view.setInt32(off, intToNumber(raw), true);\n      return;\n    case \"int64\":\n      view.setBigInt64(off, toBigInt(raw), true);\n      return;\n    case \"uint8\":\n      view.setUint8(off, uintToNumber(fd, raw));\n      return;\n    case \"uint16\":\n      view.setUint16(off, uintToNumber(fd, raw), true);\n      return;\n    case \"uint32\":\n      view.setUint32(off, uintToNumber(fd, raw), true);\n      return;\n    case \"uint64\":\n      view.setBigUint64(off, toBigUint(fd, raw), true);\n      return;\n    case \"float\":\n      view.setFloat32(off, Number(raw), true);\n      return;\n    case \"double\":\n      view.setFloat64(off, Number(raw), true);\n      return;\n    case \"char\": {\n      const bytes = toCharBytes(fd, raw);\n      const len = Math.min(bytes.length, ft.size);\n      const dst = new Uint8Array(view.buffer, view.byteOffset + off, ft.size);\n      dst.set(bytes.subarray(0, len));\n      // Remaining bytes already zero (allocator initialized).\n      return;\n    }\n    case \"\":\n      throw new Error(`sbe: composite field ${fd.name} has no encoding`);\n  }\n}\n\nfunction marshalGroup(\n  view: DataView,\n  pos: number,\n  parent: ReflectMessage,\n  gt: GroupTemplate,\n): number {\n  const list = parent.get(gt.fd) as ReflectList<unknown>;\n  const n = list.size;\n\n  view.setUint16(pos, gt.blockLength, true);\n  view.setUint16(pos + 2, n, true);\n\n  for (let i = 0; i < n; i++) {\n    const entry = list.get(i) as ReflectMessage;\n    const start = pos + GROUP_HEADER_SIZE + i * gt.blockLength;\n    for (const ft of gt.fields) {\n      writeField(view, start, ft, entry);\n    }\n  }\n\n  return GROUP_HEADER_SIZE + n * gt.blockLength;\n}\n\nfunction intToNumber(raw: unknown): number {\n  if (typeof raw === \"bigint\") return Number(raw);\n  return Number(raw);\n}\n\nfunction uintToNumber(fd: DescField, raw: unknown): number {\n  if (fd.fieldKind === \"scalar\" && fd.scalar === ScalarType.BOOL) {\n    return raw ? 1 : 0;\n  }\n  if (typeof raw === \"bigint\") return Number(raw);\n  return Number(raw);\n}\n\nfunction toBigInt(raw: unknown): bigint {\n  if (typeof raw === \"bigint\") return raw;\n  return BigInt(Number(raw));\n}\n\nfunction toBigUint(fd: DescField, raw: unknown): bigint {\n  if (fd.fieldKind === \"scalar\" && fd.scalar === ScalarType.BOOL) {\n    return raw ? 1n : 0n;\n  }\n  if (typeof raw === \"bigint\") return raw;\n  return BigInt(Number(raw));\n}\n\nfunction toCharBytes(fd: DescField, raw: unknown): Uint8Array {\n  if (fd.fieldKind === \"scalar\" && fd.scalar === ScalarType.BYTES) {\n    return raw instanceof Uint8Array ? raw : new Uint8Array(0);\n  }\n  return new TextEncoder().encode(typeof raw === \"string\" ? raw : \"\");\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * SBE unmarshal: decodes an SBE binary buffer into a proto message using a\n * pre-built MessageTemplate. Mirrors `protowire/encoding/sbe/unmarshal.go`.\n */\n\nimport { type DescField, type DescMessage, type MessageShape, ScalarType } from \"@bufbuild/protobuf\";\nimport { type ReflectList, type ReflectMessage, reflect } from \"@bufbuild/protobuf/reflect\";\n\nimport { Codec, GROUP_HEADER_SIZE, HEADER_SIZE } from \"./sbe.js\";\nimport type { FieldTemplate, GroupTemplate, MessageTemplate } from \"./template.js\";\n\nexport function unmarshal<Desc extends DescMessage>(\n  codec: Codec,\n  desc: Desc,\n  msg: MessageShape<Desc>,\n  data: Uint8Array,\n): void {\n  const tmpl = codec.template(desc.typeName);\n  unmarshalMessage(reflect(desc, msg), tmpl, data);\n}\n\nfunction unmarshalMessage(refl: ReflectMessage, tmpl: MessageTemplate, data: Uint8Array): void {\n  if (data.length < HEADER_SIZE) {\n    throw new Error(`sbe: data too short for header: ${data.length} bytes`);\n  }\n  const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n  const blockLength = view.getUint16(0, true);\n  const templateId = view.getUint16(2, true);\n  if (templateId !== tmpl.templateId) {\n    throw new Error(`sbe: template ID mismatch: got ${templateId}, want ${tmpl.templateId}`);\n  }\n\n  const end = HEADER_SIZE + blockLength;\n  if (data.length < end) {\n    throw new Error(`sbe: data too short for root block: need ${end}, have ${data.length}`);\n  }\n\n  for (const ft of tmpl.fields) {\n    readField(view, data, HEADER_SIZE, ft, refl);\n  }\n\n  let pos = end;\n  for (const gt of tmpl.groups) {\n    pos += unmarshalGroup(view, data, pos, refl, gt);\n  }\n}\n\nfunction readField(\n  view: DataView,\n  data: Uint8Array,\n  base: number,\n  ft: FieldTemplate,\n  parent: ReflectMessage,\n): void {\n  if (ft.composite.length > 0) {\n    // Build a fresh sub-message and assign it on the parent.\n    const sub = createMessage(ft.fd);\n    for (const sf of ft.composite) {\n      readField(view, data, base + ft.offset, sf, sub);\n    }\n    parent.set(ft.fd, sub);\n    return;\n  }\n\n  const fd = ft.fd;\n  const off = base + ft.offset;\n\n  switch (ft.encoding) {\n    case \"int8\":\n      setIntField(parent, fd, view.getInt8(off));\n      return;\n    case \"int16\":\n      setIntField(parent, fd, view.getInt16(off, true));\n      return;\n    case \"int32\":\n      setIntField(parent, fd, view.getInt32(off, true));\n      return;\n    case \"int64\":\n      setInt64Field(parent, fd, view.getBigInt64(off, true));\n      return;\n    case \"uint8\":\n      setUintField(parent, fd, view.getUint8(off));\n      return;\n    case \"uint16\":\n      setUintField(parent, fd, view.getUint16(off, true));\n      return;\n    case \"uint32\":\n      setUintField(parent, fd, view.getUint32(off, true));\n      return;\n    case \"uint64\":\n      setUint64Field(parent, fd, view.getBigUint64(off, true));\n      return;\n    case \"float\":\n      parent.set(fd, view.getFloat32(off, true));\n      return;\n    case \"double\":\n      parent.set(fd, view.getFloat64(off, true));\n      return;\n    case \"char\": {\n      const slice = data.subarray(off, off + ft.size);\n      if (fd.fieldKind === \"scalar\" && fd.scalar === ScalarType.BYTES) {\n        // Copy so caller buffer can be reused.\n        parent.set(fd, new Uint8Array(slice));\n      } else {\n        // STRING — trim trailing null padding.\n        let n = slice.length;\n        while (n > 0 && slice[n - 1] === 0) n--;\n        parent.set(fd, new TextDecoder().decode(slice.subarray(0, n)));\n      }\n      return;\n    }\n    case \"\":\n      throw new Error(`sbe: composite field ${fd.name} has no encoding`);\n  }\n}\n\nfunction unmarshalGroup(\n  view: DataView,\n  data: Uint8Array,\n  pos: number,\n  parent: ReflectMessage,\n  gt: GroupTemplate,\n): number {\n  if (data.length < pos + GROUP_HEADER_SIZE) {\n    throw new Error(`sbe: data too short for group header`);\n  }\n  const blockLength = view.getUint16(pos, true);\n  const numInGroup = view.getUint16(pos + 2, true);\n\n  const total = GROUP_HEADER_SIZE + numInGroup * blockLength;\n  if (data.length < pos + total) {\n    throw new Error(\n      `sbe: data too short for group entries: need ${pos + total}, have ${data.length}`,\n    );\n  }\n\n  const list = parent.get(gt.fd) as ReflectList<unknown>;\n  for (let i = 0; i < numInGroup; i++) {\n    const entry = createMessage(gt.fd);\n    const start = pos + GROUP_HEADER_SIZE + i * blockLength;\n    for (const ft of gt.fields) {\n      readField(view, data, start, ft, entry);\n    }\n    list.add(entry);\n  }\n\n  return total;\n}\n\nfunction createMessage(fd: DescField): ReflectMessage {\n  if (fd.fieldKind !== \"message\" && !(fd.fieldKind === \"list\" && fd.listKind === \"message\")) {\n    throw new Error(`sbe: cannot create sub-message for field ${fd.name}`);\n  }\n  // For both single message fields and message-list element types, the\n  // descriptor is `fd.message`.\n  const desc: DescMessage = (fd as { message: DescMessage }).message;\n  return reflect(desc);\n}\n\nfunction setIntField(parent: ReflectMessage, fd: DescField, v: number): void {\n  if (fd.fieldKind !== \"scalar\") {\n    throw new Error(`sbe: setIntField on non-scalar ${fd.name}`);\n  }\n  switch (fd.scalar) {\n    case ScalarType.INT64:\n    case ScalarType.SINT64:\n    case ScalarType.SFIXED64:\n      parent.set(fd, BigInt(v));\n      return;\n    default:\n      parent.set(fd, v);\n  }\n}\n\nfunction setInt64Field(parent: ReflectMessage, fd: DescField, v: bigint): void {\n  if (fd.fieldKind === \"scalar\") {\n    switch (fd.scalar) {\n      case ScalarType.INT32:\n      case ScalarType.SINT32:\n      case ScalarType.SFIXED32:\n        parent.set(fd, Number(v));\n        return;\n    }\n  }\n  parent.set(fd, v);\n}\n\nfunction setUintField(parent: ReflectMessage, fd: DescField, v: number): void {\n  if (fd.fieldKind === \"enum\") {\n    parent.set(fd, v);\n    return;\n  }\n  if (fd.fieldKind !== \"scalar\") {\n    throw new Error(`sbe: setUintField on non-scalar ${fd.name}`);\n  }\n  switch (fd.scalar) {\n    case ScalarType.BOOL:\n      parent.set(fd, v !== 0);\n      return;\n    case ScalarType.UINT64:\n    case ScalarType.FIXED64:\n      parent.set(fd, BigInt(v));\n      return;\n    default:\n      parent.set(fd, v);\n  }\n}\n\nfunction setUint64Field(parent: ReflectMessage, fd: DescField, v: bigint): void {\n  if (fd.fieldKind === \"scalar\") {\n    switch (fd.scalar) {\n      case ScalarType.UINT32:\n      case ScalarType.FIXED32:\n        parent.set(fd, Number(v));\n        return;\n    }\n  }\n  parent.set(fd, v);\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Tiny SAX-style XML parser, sized for SBE schemas only.\n *\n * Handles: prolog (`<?xml ...?>`), comments, DOCTYPE (skipped), open / close /\n * self-closing tags, attributes (single- or double-quoted), char data, the\n * five named entities, and namespace prefixes (stripped, with xmlns:*\n * attributes silently dropped).\n *\n * Does NOT handle: CDATA sections, processing instructions other than the\n * prolog, numeric character references, custom entities, or DTDs. The SBE\n * schema vocabulary doesn't need any of those.\n */\n\nexport interface SaxHandler {\n  onOpen(name: string, attrs: Record<string, string>): void;\n  onClose(name: string): void;\n  /** Called with raw character data between tags. May be all whitespace. */\n  onText(text: string): void;\n}\n\nexport class SaxError extends Error {\n  constructor(\n    message: string,\n    public readonly offset: number,\n  ) {\n    super(`sbe-sax: ${message} at offset ${offset}`);\n  }\n}\n\nexport function parseXml(input: string, handler: SaxHandler): void {\n  const len = input.length;\n  let i = 0;\n\n  while (i < len) {\n    const ch = input[i]!;\n    if (ch !== \"<\") {\n      // Char data up to the next '<'.\n      const start = i;\n      while (i < len && input[i] !== \"<\") i++;\n      handler.onText(decodeEntities(input.substring(start, i)));\n      continue;\n    }\n\n    // ch === '<' — figure out which markup token.\n    if (input.startsWith(\"<!--\", i)) {\n      const end = input.indexOf(\"-->\", i + 4);\n      if (end < 0) throw new SaxError(\"unterminated comment\", i);\n      i = end + 3;\n      continue;\n    }\n    if (input.startsWith(\"<?\", i)) {\n      const end = input.indexOf(\"?>\", i + 2);\n      if (end < 0) throw new SaxError(\"unterminated processing instruction\", i);\n      i = end + 2;\n      continue;\n    }\n    if (input.startsWith(\"<!\", i)) {\n      // DOCTYPE or other declaration — skip to matching '>'.\n      const end = input.indexOf(\">\", i + 2);\n      if (end < 0) throw new SaxError(\"unterminated declaration\", i);\n      i = end + 1;\n      continue;\n    }\n\n    if (input[i + 1] === \"/\") {\n      // Close tag: </name>\n      i += 2;\n      const nameEnd = findTagNameEnd(input, i);\n      const rawName = input.substring(i, nameEnd);\n      i = nameEnd;\n      i = skipSpace(input, i);\n      if (input[i] !== \">\") throw new SaxError(\"expected '>' to end close tag\", i);\n      i++;\n      handler.onClose(stripNamespace(rawName));\n      continue;\n    }\n\n    // Open or self-closing tag: <name attr=\"v\" .../> or <name ...>\n    i++; // past '<'\n    const nameEnd = findTagNameEnd(input, i);\n    if (nameEnd === i) throw new SaxError(\"expected tag name after '<'\", i);\n    const rawName = input.substring(i, nameEnd);\n    i = nameEnd;\n\n    const attrs: Record<string, string> = {};\n    let selfClose = false;\n    while (true) {\n      i = skipSpace(input, i);\n      if (i >= len) throw new SaxError(\"unterminated tag\", i);\n      const c = input[i]!;\n      if (c === \">\") {\n        i++;\n        break;\n      }\n      if (c === \"/\" && input[i + 1] === \">\") {\n        selfClose = true;\n        i += 2;\n        break;\n      }\n\n      // Attribute: name=\"value\" or name='value'\n      const attrNameStart = i;\n      while (i < len && !isAttrNameTerminator(input[i]!)) i++;\n      if (i === attrNameStart) throw new SaxError(\"expected attribute name\", i);\n      const attrName = input.substring(attrNameStart, i);\n\n      i = skipSpace(input, i);\n      if (input[i] !== \"=\") throw new SaxError(`expected '=' after attribute ${attrName}`, i);\n      i++;\n      i = skipSpace(input, i);\n\n      const quote = input[i];\n      if (quote !== '\"' && quote !== \"'\") {\n        throw new SaxError(`expected quoted value for attribute ${attrName}`, i);\n      }\n      i++;\n      const valStart = i;\n      while (i < len && input[i] !== quote) i++;\n      if (i >= len) throw new SaxError(\"unterminated attribute value\", valStart);\n      const rawValue = input.substring(valStart, i);\n      i++; // past closing quote\n\n      // Drop xmlns declarations; the caller handles namespaces uniformly via\n      // stripNamespace on element/attribute names.\n      if (attrName === \"xmlns\" || attrName.startsWith(\"xmlns:\")) continue;\n      attrs[stripNamespace(attrName)] = decodeEntities(rawValue);\n    }\n\n    const name = stripNamespace(rawName);\n    handler.onOpen(name, attrs);\n    if (selfClose) handler.onClose(name);\n  }\n}\n\nfunction findTagNameEnd(input: string, start: number): number {\n  let i = start;\n  while (i < input.length && !isNameTerminator(input[i]!)) i++;\n  return i;\n}\n\nfunction isNameTerminator(c: string): boolean {\n  return c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\" || c === \">\" || c === \"/\";\n}\n\nfunction isAttrNameTerminator(c: string): boolean {\n  return c === \"=\" || c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\" || c === \"/\" || c === \">\";\n}\n\nfunction skipSpace(input: string, i: number): number {\n  while (\n    i < input.length &&\n    (input[i] === \" \" || input[i] === \"\\t\" || input[i] === \"\\n\" || input[i] === \"\\r\")\n  ) {\n    i++;\n  }\n  return i;\n}\n\nfunction stripNamespace(name: string): string {\n  const colon = name.indexOf(\":\");\n  return colon >= 0 ? name.substring(colon + 1) : name;\n}\n\nfunction decodeEntities(s: string): string {\n  if (s.indexOf(\"&\") < 0) return s;\n  return s\n    .replace(/&lt;/g, \"<\")\n    .replace(/&gt;/g, \">\")\n    .replace(/&quot;/g, '\"')\n    .replace(/&apos;/g, \"'\")\n    .replace(/&amp;/g, \"&\");\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * SBE XML schema model + parser. Mirrors the data shape of\n * `protowire/encoding/sbe/xmlschema.go`.\n *\n * Also exports the name-conversion helpers shared between XMLToProto and\n * ProtoToXML.\n */\n\nimport { type SaxHandler, parseXml } from \"./saxlite.js\";\n\nexport interface XMLSchema {\n  package: string;\n  id: number;\n  version: number;\n  byteOrder: string;\n  description: string;\n  types: XMLTypes;\n  messages: XMLMessage[];\n}\n\nexport interface XMLTypes {\n  types: XMLType[];\n  composites: XMLComposite[];\n  enums: XMLEnum[];\n}\n\nexport interface XMLType {\n  name: string;\n  primitiveType: string;\n  length?: number;\n  description?: string;\n}\n\nexport interface XMLComposite {\n  name: string;\n  description?: string;\n  types: XMLType[];\n  refs: XMLRef[];\n}\n\nexport interface XMLRef {\n  name: string;\n  type: string;\n}\n\nexport interface XMLEnum {\n  name: string;\n  encodingType: string;\n  description?: string;\n  validValues: XMLValidValue[];\n}\n\nexport interface XMLValidValue {\n  name: string;\n  value: string;\n}\n\nexport interface XMLMessage {\n  name: string;\n  id: number;\n  description?: string;\n  fields: XMLField[];\n  groups: XMLGroup[];\n}\n\nexport interface XMLField {\n  name: string;\n  id: number;\n  type: string;\n}\n\nexport interface XMLGroup {\n  name: string;\n  id: number;\n  fields: XMLField[];\n}\n\nexport function parseXMLSchema(xml: string): XMLSchema {\n  const schema: XMLSchema = {\n    package: \"\",\n    id: 0,\n    version: 0,\n    byteOrder: \"\",\n    description: \"\",\n    types: { types: [], composites: [], enums: [] },\n    messages: [],\n  };\n\n  // Stack-based builder. The element names are stripped of their `sbe:`\n  // namespace prefix by the SAX layer, so context decisions key off plain\n  // names like \"messageSchema\", \"message\", \"group\", etc.\n  const stack: string[] = [];\n  let currentComposite: XMLComposite | null = null;\n  let currentEnum: XMLEnum | null = null;\n  let currentValidValue: XMLValidValue | null = null;\n  let currentMessage: XMLMessage | null = null;\n  let currentGroup: XMLGroup | null = null;\n  let textBuf = \"\";\n\n  const handler: SaxHandler = {\n    onOpen(name, attrs) {\n      const parent = stack[stack.length - 1];\n      stack.push(name);\n\n      switch (name) {\n        case \"messageSchema\":\n          schema.package = attrs.package ?? \"\";\n          schema.id = parseUint(attrs.id);\n          schema.version = parseUint(attrs.version);\n          schema.byteOrder = attrs.byteOrder ?? \"\";\n          schema.description = attrs.description ?? \"\";\n          return;\n\n        case \"types\":\n          return;\n\n        case \"type\": {\n          const t: XMLType = {\n            name: attrs.name ?? \"\",\n            primitiveType: attrs.primitiveType ?? \"\",\n          };\n          if (attrs.length !== undefined) t.length = parseUint(attrs.length);\n          if (attrs.description !== undefined) t.description = attrs.description;\n          if (parent === \"composite\" && currentComposite) {\n            currentComposite.types.push(t);\n          } else {\n            schema.types.types.push(t);\n          }\n          return;\n        }\n\n        case \"ref\":\n          if (currentComposite) {\n            currentComposite.refs.push({\n              name: attrs.name ?? \"\",\n              type: attrs.type ?? \"\",\n            });\n          }\n          return;\n\n        case \"composite\":\n          currentComposite = {\n            name: attrs.name ?? \"\",\n            types: [],\n            refs: [],\n          };\n          if (attrs.description !== undefined) currentComposite.description = attrs.description;\n          schema.types.composites.push(currentComposite);\n          return;\n\n        case \"enum\":\n          currentEnum = {\n            name: attrs.name ?? \"\",\n            encodingType: attrs.encodingType ?? \"\",\n            validValues: [],\n          };\n          if (attrs.description !== undefined) currentEnum.description = attrs.description;\n          schema.types.enums.push(currentEnum);\n          return;\n\n        case \"validValue\":\n          currentValidValue = { name: attrs.name ?? \"\", value: \"\" };\n          textBuf = \"\";\n          if (currentEnum) currentEnum.validValues.push(currentValidValue);\n          return;\n\n        case \"message\":\n          currentMessage = {\n            name: attrs.name ?? \"\",\n            id: parseUint(attrs.id),\n            fields: [],\n            groups: [],\n          };\n          if (attrs.description !== undefined) currentMessage.description = attrs.description;\n          schema.messages.push(currentMessage);\n          return;\n\n        case \"group\":\n          currentGroup = {\n            name: attrs.name ?? \"\",\n            id: parseUint(attrs.id),\n            fields: [],\n          };\n          if (currentMessage) currentMessage.groups.push(currentGroup);\n          return;\n\n        case \"field\": {\n          const f: XMLField = {\n            name: attrs.name ?? \"\",\n            id: parseUint(attrs.id),\n            type: attrs.type ?? \"\",\n          };\n          if (currentGroup) {\n            currentGroup.fields.push(f);\n          } else if (currentMessage) {\n            currentMessage.fields.push(f);\n          }\n          return;\n        }\n      }\n    },\n\n    onText(text) {\n      // Only validValue cares about char data; everything else is whitespace\n      // between elements that we deliberately drop.\n      if (stack[stack.length - 1] === \"validValue\") {\n        textBuf += text;\n      }\n    },\n\n    onClose(name) {\n      const popped = stack.pop();\n      if (popped !== name) {\n        throw new Error(`sbe-xml: close mismatch: got </${name}>, expected </${popped}>`);\n      }\n      switch (name) {\n        case \"validValue\":\n          if (currentValidValue) currentValidValue.value = textBuf.trim();\n          currentValidValue = null;\n          textBuf = \"\";\n          return;\n        case \"enum\":\n          currentEnum = null;\n          return;\n        case \"composite\":\n          currentComposite = null;\n          return;\n        case \"group\":\n          currentGroup = null;\n          return;\n        case \"message\":\n          currentMessage = null;\n          return;\n      }\n    },\n  };\n\n  parseXml(xml, handler);\n\n  if (stack.length > 0) {\n    throw new Error(`sbe-xml: unclosed elements: ${stack.join(\" > \")}`);\n  }\n  return schema;\n}\n\nfunction parseUint(v: string | undefined): number {\n  if (v === undefined || v === \"\") return 0;\n  const n = Number(v);\n  if (!Number.isFinite(n) || n < 0 || !Number.isInteger(n)) {\n    throw new Error(`sbe-xml: invalid uint value ${JSON.stringify(v)}`);\n  }\n  return n;\n}\n\n// ---------- name conversion helpers (shared with proto↔xml converters) ----------\n\nexport function camelToSnake(s: string): string {\n  let out = \"\";\n  for (let i = 0; i < s.length; i++) {\n    const ch = s[i]!;\n    if (isUpper(ch)) {\n      if (i > 0) {\n        const prev = s[i - 1]!;\n        if (isLower(prev)) {\n          out += \"_\";\n        } else if (i + 1 < s.length && isLower(s[i + 1]!)) {\n          out += \"_\";\n        }\n      }\n      out += ch.toLowerCase();\n    } else {\n      out += ch;\n    }\n  }\n  return out;\n}\n\nexport function snakeToCamel(s: string): string {\n  const parts = s.split(\"_\");\n  let out = \"\";\n  for (let i = 0; i < parts.length; i++) {\n    const p = parts[i]!;\n    if (p === \"\") continue;\n    if (i === 0) {\n      out += p;\n    } else {\n      out += p.charAt(0).toUpperCase() + p.substring(1);\n    }\n  }\n  return out;\n}\n\nexport function camelToScreamingSnake(s: string): string {\n  let out = \"\";\n  for (let i = 0; i < s.length; i++) {\n    const ch = s[i]!;\n    if (isUpper(ch) && i > 0 && isLower(s[i - 1]!)) {\n      out += \"_\";\n    }\n    out += ch.toUpperCase();\n  }\n  return out;\n}\n\nexport function screamingSnakeToPascal(s: string): string {\n  const parts = s.toLowerCase().split(\"_\");\n  let out = \"\";\n  for (const p of parts) {\n    if (p === \"\") continue;\n    out += p.charAt(0).toUpperCase() + p.substring(1);\n  }\n  return out;\n}\n\nexport function stripEnumPrefix(valueName: string, enumName: string): string {\n  const prefix = camelToScreamingSnake(enumName) + \"_\";\n  if (valueName.startsWith(prefix)) {\n    return screamingSnakeToPascal(valueName.substring(prefix.length));\n  }\n  return screamingSnakeToPascal(valueName);\n}\n\nexport function singularPascal(s: string): string {\n  if (s === \"\") return s;\n  let out = s;\n  if (out.endsWith(\"ies\") && out.length > 3) {\n    out = out.substring(0, out.length - 3) + \"y\";\n  } else if (out.endsWith(\"s\") && !out.endsWith(\"ss\") && out.length > 1) {\n    out = out.substring(0, out.length - 1);\n  }\n  return out.charAt(0).toUpperCase() + out.substring(1);\n}\n\nfunction isUpper(ch: string): boolean {\n  return ch >= \"A\" && ch <= \"Z\";\n}\n\nfunction isLower(ch: string): boolean {\n  return ch >= \"a\" && ch <= \"z\";\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Convert an SBE XML schema into proto3 source with sbe annotations.\n * Mirrors `protowire/encoding/sbe/xmltoproto.go`.\n */\n\nimport {\n  type XMLComposite,\n  type XMLEnum,\n  type XMLField,\n  type XMLGroup,\n  type XMLMessage,\n  type XMLSchema,\n  type XMLType,\n  camelToScreamingSnake,\n  camelToSnake,\n  parseXMLSchema,\n  singularPascal,\n} from \"./xmlschema.js\";\n\nconst BUILTINS = [\n  \"int8\",\n  \"int16\",\n  \"int32\",\n  \"int64\",\n  \"uint8\",\n  \"uint16\",\n  \"uint32\",\n  \"uint64\",\n  \"float\",\n  \"double\",\n  \"char\",\n] as const;\n\nexport function xmlToProto(xml: string): string {\n  const schema = parseXMLSchema(xml);\n  return generateProto(schema);\n}\n\nfunction generateProto(schema: XMLSchema): string {\n  // Build type-resolution maps (built-ins seeded first).\n  const typeMap = new Map<string, XMLType>();\n  for (const name of BUILTINS) {\n    typeMap.set(name, { name, primitiveType: name });\n  }\n  for (const t of schema.types.types) typeMap.set(t.name, t);\n\n  const compositeMap = new Map<string, XMLComposite>();\n  for (const c of schema.types.composites) compositeMap.set(c.name, c);\n\n  const enumMap = new Map<string, XMLEnum>();\n  for (const e of schema.types.enums) enumMap.set(e.name, e);\n\n  let out = \"\";\n  out += `syntax = \"proto3\";\\n\\n`;\n  if (schema.package !== \"\") out += `package ${schema.package};\\n\\n`;\n  out += `import \"sbe/annotations.proto\";\\n\\n`;\n  out += `option (sbe.schema_id) = ${schema.id};\\n`;\n  out += `option (sbe.version) = ${schema.version};\\n\\n`;\n\n  for (const e of schema.types.enums) out += writeProtoEnum(e);\n  for (const c of schema.types.composites) {\n    if (c.name === \"messageHeader\" || c.name === \"groupSizeEncoding\") continue;\n    out += writeProtoComposite(c);\n  }\n  for (const m of schema.messages) {\n    out += writeProtoMessage(m, typeMap, compositeMap, enumMap);\n  }\n\n  return out;\n}\n\nfunction writeProtoEnum(e: XMLEnum): string {\n  let out = `enum ${e.name} {\\n`;\n  const prefix = camelToScreamingSnake(e.name);\n  for (const v of e.validValues) {\n    const name = `${prefix}_${camelToScreamingSnake(v.name)}`;\n    out += `  ${name} = ${v.value};\\n`;\n  }\n  out += `}\\n\\n`;\n  return out;\n}\n\nfunction writeProtoComposite(c: XMLComposite): string {\n  let out = `message ${c.name} {\\n`;\n  let fieldNum = 1;\n  for (const t of c.types) {\n    const [protoType, opts] = resolveTypeToProto(t.primitiveType, t.length ?? 0);\n    const name = camelToSnake(t.name);\n    out +=\n      opts !== \"\"\n        ? `  ${protoType} ${name} = ${fieldNum} [${opts}];\\n`\n        : `  ${protoType} ${name} = ${fieldNum};\\n`;\n    fieldNum++;\n  }\n  for (const r of c.refs) {\n    const name = camelToSnake(r.name);\n    out += `  ${r.type} ${name} = ${fieldNum};\\n`;\n    fieldNum++;\n  }\n  out += `}\\n\\n`;\n  return out;\n}\n\nfunction writeProtoMessage(\n  msg: XMLMessage,\n  typeMap: Map<string, XMLType>,\n  compositeMap: Map<string, XMLComposite>,\n  enumMap: Map<string, XMLEnum>,\n): string {\n  let out = `message ${msg.name} {\\n`;\n  out += `  option (sbe.template_id) = ${msg.id};\\n`;\n  for (const f of msg.fields) {\n    out += writeProtoField(f, typeMap, compositeMap, enumMap, \"  \");\n  }\n  for (const g of msg.groups) {\n    out += writeProtoGroup(g, typeMap, compositeMap, enumMap, \"  \");\n  }\n  out += `}\\n\\n`;\n  return out;\n}\n\nfunction writeProtoField(\n  f: XMLField,\n  typeMap: Map<string, XMLType>,\n  compositeMap: Map<string, XMLComposite>,\n  enumMap: Map<string, XMLEnum>,\n  indent: string,\n): string {\n  const name = camelToSnake(f.name);\n\n  if (enumMap.has(f.type)) {\n    return `${indent}${f.type} ${name} = ${f.id};\\n`;\n  }\n  if (compositeMap.has(f.type)) {\n    return `${indent}${f.type} ${name} = ${f.id};\\n`;\n  }\n  const t = typeMap.get(f.type);\n  if (t) {\n    const [protoType, opts] = resolveTypeToProto(t.primitiveType, t.length ?? 0);\n    return opts !== \"\"\n      ? `${indent}${protoType} ${name} = ${f.id} [${opts}];\\n`\n      : `${indent}${protoType} ${name} = ${f.id};\\n`;\n  }\n  // Unknown type — pass through as-is so the user's protoc surfaces the error.\n  return `${indent}${f.type} ${name} = ${f.id};\\n`;\n}\n\nfunction writeProtoGroup(\n  g: XMLGroup,\n  typeMap: Map<string, XMLType>,\n  compositeMap: Map<string, XMLComposite>,\n  enumMap: Map<string, XMLEnum>,\n  indent: string,\n): string {\n  const msgName = singularPascal(g.name);\n  let out = `${indent}message ${msgName} {\\n`;\n  for (const f of g.fields) {\n    out += writeProtoField(f, typeMap, compositeMap, enumMap, indent + \"  \");\n  }\n  out += `${indent}}\\n`;\n  const fieldName = camelToSnake(g.name);\n  out += `${indent}repeated ${msgName} ${fieldName} = ${g.id};\\n`;\n  return out;\n}\n\nfunction resolveTypeToProto(primitiveType: string, length: number): [string, string] {\n  switch (primitiveType) {\n    case \"int8\":\n      return [\"int32\", `(sbe.encoding) = \"int8\"`];\n    case \"int16\":\n      return [\"int32\", `(sbe.encoding) = \"int16\"`];\n    case \"int32\":\n      return [\"int32\", \"\"];\n    case \"int64\":\n      return [\"int64\", \"\"];\n    case \"uint8\":\n      return [\"uint32\", `(sbe.encoding) = \"uint8\"`];\n    case \"uint16\":\n      return [\"uint32\", `(sbe.encoding) = \"uint16\"`];\n    case \"uint32\":\n      return [\"uint32\", \"\"];\n    case \"uint64\":\n      return [\"uint64\", \"\"];\n    case \"float\":\n      return [\"float\", \"\"];\n    case \"double\":\n      return [\"double\", \"\"];\n    case \"char\":\n      if (length > 0) return [\"string\", `(sbe.length) = ${length}`];\n      return [\"string\", `(sbe.length) = 1`];\n    default:\n      return [primitiveType, \"\"];\n  }\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Convert proto file descriptors with SBE annotations to an SBE XML schema.\n * Mirrors `protowire/encoding/sbe/prototoxml.go`.\n */\n\nimport {\n  type DescEnum,\n  type DescField,\n  type DescFile,\n  type DescMessage,\n  ScalarType,\n} from \"@bufbuild/protobuf\";\n\nimport {\n  EXT_ENCODING,\n  EXT_LENGTH,\n  EXT_SCHEMA_ID,\n  EXT_TEMPLATE_ID,\n  EXT_VERSION,\n  getFieldString,\n  getFieldUint32,\n  getFileUint32,\n  getMessageUint32,\n} from \"./annotations.js\";\nimport { snakeToCamel, stripEnumPrefix } from \"./xmlschema.js\";\n\ninterface SbeTypeInfo {\n  primitiveType: string;\n  xmlType: string;\n  length: number;\n}\n\nexport function protoToXml(file: DescFile): string {\n  const schemaId = getFileUint32(file, EXT_SCHEMA_ID);\n  if (schemaId === undefined) {\n    throw new Error(`sbe: file ${file.name} missing (sbe.schema_id)`);\n  }\n  const version = getFileUint32(file, EXT_VERSION) ?? 0;\n\n  // Pre-collect types referenced by template messages.\n  const strLengths = new Set<number>();\n  const composites: DescMessage[] = [];\n  const compositesSeen = new Set<string>();\n  const enums: DescEnum[] = [];\n  const enumsSeen = new Set<string>();\n\n  for (const ed of file.enums) {\n    enums.push(ed);\n    enumsSeen.add(ed.typeName);\n  }\n\n  for (const md of file.messages) {\n    if (getMessageUint32(md, EXT_TEMPLATE_ID) !== undefined) {\n      collectTypes(md, strLengths, composites, compositesSeen, enums, enumsSeen);\n    } else if (!compositesSeen.has(md.typeName)) {\n      compositesSeen.add(md.typeName);\n      composites.push(md);\n    }\n  }\n\n  const lengths = [...strLengths].sort((a, b) => a - b);\n\n  let out = \"\";\n  out += `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n`;\n  out += `<sbe:messageSchema xmlns:sbe=\"http://fixprotocol.io/2016/sbe\"\\n`;\n  out += `                   package=\"${file.proto.package ?? \"\"}\"\\n`;\n  out += `                   id=\"${schemaId}\"\\n`;\n  out += `                   version=\"${version}\"\\n`;\n  out += `                   byteOrder=\"littleEndian\">\\n`;\n\n  out += `    <types>\\n`;\n  out += `        <composite name=\"messageHeader\">\\n`;\n  out += `            <type name=\"blockLength\" primitiveType=\"uint16\"/>\\n`;\n  out += `            <type name=\"templateId\" primitiveType=\"uint16\"/>\\n`;\n  out += `            <type name=\"schemaId\" primitiveType=\"uint16\"/>\\n`;\n  out += `            <type name=\"version\" primitiveType=\"uint16\"/>\\n`;\n  out += `        </composite>\\n`;\n  out += `        <composite name=\"groupSizeEncoding\">\\n`;\n  out += `            <type name=\"blockLength\" primitiveType=\"uint16\"/>\\n`;\n  out += `            <type name=\"numInGroup\" primitiveType=\"uint16\"/>\\n`;\n  out += `        </composite>\\n`;\n\n  for (const l of lengths) {\n    out += `        <type name=\"str${l}\" primitiveType=\"char\" length=\"${l}\"/>\\n`;\n  }\n  for (const e of enums) out += writeEnum(e);\n  for (const md of composites) out += writeComposite(md);\n\n  out += `    </types>\\n`;\n\n  for (const md of file.messages) {\n    const tid = getMessageUint32(md, EXT_TEMPLATE_ID);\n    if (tid !== undefined) out += writeMessage(md, tid);\n  }\n\n  out += `</sbe:messageSchema>\\n`;\n  return out;\n}\n\nfunction collectTypes(\n  md: DescMessage,\n  strLengths: Set<number>,\n  composites: DescMessage[],\n  compositesSeen: Set<string>,\n  enums: DescEnum[],\n  enumsSeen: Set<string>,\n): void {\n  for (const ed of md.nestedEnums) {\n    if (!enumsSeen.has(ed.typeName)) {\n      enumsSeen.add(ed.typeName);\n      enums.push(ed);\n    }\n  }\n\n  for (const f of md.fields) {\n    if (f.fieldKind === \"scalar\" && (f.scalar === ScalarType.STRING || f.scalar === ScalarType.BYTES)) {\n      const len = getFieldUint32(f, EXT_LENGTH);\n      if (len !== undefined) strLengths.add(len);\n    }\n    if (f.fieldKind === \"enum\") {\n      const ed = f.enum;\n      if (!enumsSeen.has(ed.typeName)) {\n        enumsSeen.add(ed.typeName);\n        enums.push(ed);\n      }\n    }\n    if (f.fieldKind === \"message\") {\n      const sub = f.message;\n      if (!compositesSeen.has(sub.typeName)) {\n        compositesSeen.add(sub.typeName);\n        composites.push(sub);\n        collectTypes(sub, strLengths, composites, compositesSeen, enums, enumsSeen);\n      }\n    }\n    if (f.fieldKind === \"list\" && f.listKind === \"message\") {\n      collectTypes(f.message, strLengths, composites, compositesSeen, enums, enumsSeen);\n    }\n  }\n}\n\nfunction writeEnum(ed: DescEnum): string {\n  let out = `        <enum name=\"${ed.name}\" encodingType=\"uint8\">\\n`;\n  for (const v of ed.values) {\n    const valueName = stripEnumPrefix(v.name, ed.name);\n    out += `            <validValue name=\"${valueName}\">${v.number}</validValue>\\n`;\n  }\n  out += `        </enum>\\n`;\n  return out;\n}\n\nfunction writeComposite(md: DescMessage): string {\n  let out = `        <composite name=\"${md.name}\">\\n`;\n  for (const f of sortedFields(md)) {\n    const fieldName = snakeToCamel(f.name);\n    const info = protoFieldToSBEType(f);\n    out +=\n      info.length > 0\n        ? `            <type name=\"${fieldName}\" primitiveType=\"${info.primitiveType}\" length=\"${info.length}\"/>\\n`\n        : `            <type name=\"${fieldName}\" primitiveType=\"${info.primitiveType}\"/>\\n`;\n  }\n  out += `        </composite>\\n`;\n  return out;\n}\n\nfunction writeMessage(md: DescMessage, templateId: number): string {\n  let out = `    <sbe:message name=\"${md.name}\" id=\"${templateId}\">\\n`;\n  for (const f of sortedFields(md)) {\n    if (f.fieldKind === \"list\" && f.listKind === \"message\") {\n      out += writeGroup(f, \"        \");\n      continue;\n    }\n    out += writeField(f, \"        \");\n  }\n  out += `    </sbe:message>\\n`;\n  return out;\n}\n\nfunction writeField(fd: DescField, indent: string): string {\n  const fieldName = snakeToCamel(fd.name);\n  const fieldId = fd.number;\n  if (fd.fieldKind === \"enum\") {\n    return `${indent}<field name=\"${fieldName}\" id=\"${fieldId}\" type=\"${fd.enum.name}\"/>\\n`;\n  }\n  if (fd.fieldKind === \"message\") {\n    return `${indent}<field name=\"${fieldName}\" id=\"${fieldId}\" type=\"${fd.message.name}\"/>\\n`;\n  }\n  const info = protoFieldToSBEType(fd);\n  if (info.length > 0) {\n    return `${indent}<field name=\"${fieldName}\" id=\"${fieldId}\" type=\"str${info.length}\"/>\\n`;\n  }\n  return `${indent}<field name=\"${fieldName}\" id=\"${fieldId}\" type=\"${info.xmlType}\"/>\\n`;\n}\n\nfunction writeGroup(fd: DescField & { fieldKind: \"list\" }, indent: string): string {\n  if (fd.listKind !== \"message\") {\n    throw new Error(`sbe: writeGroup on non-message-list field ${fd.name}`);\n  }\n  const groupName = snakeToCamel(fd.name);\n  const groupId = fd.number;\n  let out = `${indent}<group name=\"${groupName}\" id=\"${groupId}\">\\n`;\n  for (const f of sortedFields(fd.message)) {\n    out += writeField(f, indent + \"    \");\n  }\n  out += `${indent}</group>\\n`;\n  return out;\n}\n\nfunction protoFieldToSBEType(fd: DescField): SbeTypeInfo {\n  const enc = getFieldString(fd, EXT_ENCODING);\n  if (enc !== undefined) {\n    return { primitiveType: enc, xmlType: enc, length: 0 };\n  }\n  if (fd.fieldKind === \"scalar\") {\n    if (fd.scalar === ScalarType.STRING || fd.scalar === ScalarType.BYTES) {\n      const length = getFieldUint32(fd, EXT_LENGTH) ?? 0;\n      return { primitiveType: \"char\", xmlType: \"char\", length };\n    }\n    switch (fd.scalar) {\n      case ScalarType.BOOL:\n        return scalarInfo(\"uint8\");\n      case ScalarType.INT32:\n      case ScalarType.SINT32:\n      case ScalarType.SFIXED32:\n        return scalarInfo(\"int32\");\n      case ScalarType.INT64:\n      case ScalarType.SINT64:\n      case ScalarType.SFIXED64:\n        return scalarInfo(\"int64\");\n      case ScalarType.UINT32:\n      case ScalarType.FIXED32:\n        return scalarInfo(\"uint32\");\n      case ScalarType.UINT64:\n      case ScalarType.FIXED64:\n        return scalarInfo(\"uint64\");\n      case ScalarType.FLOAT:\n        return scalarInfo(\"float\");\n      case ScalarType.DOUBLE:\n        return scalarInfo(\"double\");\n    }\n  }\n  // Fallback (e.g. enum-typed field that doesn't go through this path).\n  return scalarInfo(\"uint8\");\n}\n\nfunction scalarInfo(name: string): SbeTypeInfo {\n  return { primitiveType: name, xmlType: name, length: 0 };\n}\n\nfunction sortedFields(md: DescMessage): DescField[] {\n  return [...md.fields].sort((a, b) => a.number - b.number);\n}\n"]}