{"version":3,"sources":["../../src/pxf/token.ts","../../src/pxf/errors.ts","../../src/pxf/lexer.ts","../../src/pxf/schema.ts","../../src/pxf/parser.ts","../../src/pxf/format.ts","../../src/pxf/annotations.ts","../../src/pxf/duration.ts","../../src/pxf/descriptor.ts","../../src/pxf/result.ts","../../src/pxf/decode.ts","../../src/pxf/encode.ts","../../src/pxf/dataset_reader.ts"],"names":["TokenKind","k","isIdentStart","isDigit","create","reflect","decodeBase64","v","toBinary","ScalarType","encodeBase64","fromBinary","HEX","isIdentPart"],"mappings":"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","file":"index.cjs","sourcesContent":["// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Lexical tokens and source positions for PXF (Proto eXpressive Format).\n * Mirrors `protowire/encoding/pxf/token.go`.\n */\n\nexport const enum TokenKind {\n  EOF = 0,\n  ILLEGAL = 1,\n  NEWLINE = 2,\n  COMMENT = 3,\n\n  IDENT = 4,\n  STRING = 5,\n  INT = 6,\n  FLOAT = 7,\n  BOOL = 8,\n  NULL = 9,\n  BYTES = 10,\n  TIMESTAMP = 11,\n  DURATION = 12,\n\n  LBRACE = 13,\n  RBRACE = 14,\n  LBRACKET = 15,\n  RBRACKET = 16,\n  LPAREN = 17,\n  RPAREN = 18,\n  EQUALS = 19,\n  COLON = 20,\n  COMMA = 21,\n\n  AT_TYPE = 22,\n  /** Generic `@<ident>` where ident is none of the spec-reserved\n   * directive names. Token.value holds the bare name (no leading `@`);\n   * the parser uses it as the directive's name. */\n  AT_DIRECTIVE = 23,\n  /** `@dataset` — row-oriented bulk-data directive (draft §3.4.4). */\n  AT_DATASET = 24,\n  /** `@proto` — embedded protobuf schema directive (draft §3.4.5). */\n  AT_PROTO = 25,\n}\n\nconst tokenNames: Record<number, string> = {\n  [TokenKind.EOF]: \"EOF\",\n  [TokenKind.ILLEGAL]: \"ILLEGAL\",\n  [TokenKind.NEWLINE]: \"newline\",\n  [TokenKind.COMMENT]: \"comment\",\n  [TokenKind.IDENT]: \"identifier\",\n  [TokenKind.STRING]: \"string\",\n  [TokenKind.INT]: \"integer\",\n  [TokenKind.FLOAT]: \"float\",\n  [TokenKind.BOOL]: \"bool\",\n  [TokenKind.NULL]: \"null\",\n  [TokenKind.BYTES]: \"bytes\",\n  [TokenKind.TIMESTAMP]: \"timestamp\",\n  [TokenKind.DURATION]: \"duration\",\n  [TokenKind.LBRACE]: \"{\",\n  [TokenKind.RBRACE]: \"}\",\n  [TokenKind.LBRACKET]: \"[\",\n  [TokenKind.RBRACKET]: \"]\",\n  [TokenKind.LPAREN]: \"(\",\n  [TokenKind.RPAREN]: \")\",\n  [TokenKind.EQUALS]: \"=\",\n  [TokenKind.COLON]: \":\",\n  [TokenKind.COMMA]: \",\",\n  [TokenKind.AT_TYPE]: \"@type\",\n  [TokenKind.AT_DIRECTIVE]: \"@<directive>\",\n  [TokenKind.AT_DATASET]: \"@dataset\",\n  [TokenKind.AT_PROTO]: \"@proto\",\n};\n\nexport function tokenKindName(k: TokenKind): string {\n  return tokenNames[k] ?? `TokenKind(${k})`;\n}\n\nexport interface Position {\n  readonly line: number;\n  readonly column: number;\n  /** Byte offset into the lexer's input. Used by directive body\n   * extraction to slice the raw bytes between `{` and `}`; line/column\n   * remain the primary user-facing identifier. Zero is the start of\n   * input. */\n  readonly offset: number;\n}\n\nexport function positionString(p: Position): string {\n  return `${p.line}:${p.column}`;\n}\n\nexport interface Token {\n  readonly kind: TokenKind;\n  readonly value: string;\n  readonly pos: Position;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Position-aware errors for PXF parse / decode.\n * Mirrors `protowire/encoding/pxf/errors.go`.\n */\n\nimport { type Position, positionString } from \"./token.js\";\n\nexport class PxfError extends Error {\n  readonly pos: Position;\n\n  constructor(pos: Position, msg: string) {\n    super(`${positionString(pos)}: ${msg}`);\n    this.name = \"PxfError\";\n    this.pos = pos;\n  }\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Tokenizer for PXF (Proto eXpressive Format).\n * Mirrors `protowire/encoding/pxf/lexer.go`.\n *\n * Recognizes:\n *  - Comments: `# ...`, `// ...`, `/* ... *\\/`\n *  - Strings: `\"...\"` (with `\\\"`, `\\\\`, `\\n`, `\\t`, `\\r` escapes) and\n *    `\"\"\"...\"\"\"` triple-quoted with closing-line indent dedent\n *  - Bytes: `b\"<base64>\"` (standard or raw, validated at lex time)\n *  - Integers, floats (with optional sign and exponent)\n *  - RFC 3339 timestamps: 4 digits + `-` triggers timestamp lex; validated\n *  - Go-style durations: digits + a unit letter (h/m/s/ns/us/ms); validated\n *  - Identifiers (with `.` allowed for dotted package names), `true` /\n *    `false` / `null` keywords, `@type` directive\n *  - Punctuation: `{ } [ ] = : ,`\n */\n\nimport { type Position, type Token, TokenKind } from \"./token.js\";\n\nexport interface LexerState {\n  readonly pos: number;\n  readonly line: number;\n  readonly col: number;\n}\n\nexport class Lexer {\n  private pos = 0;\n  private line = 1;\n  private col = 1;\n\n  constructor(private readonly input: string) {}\n\n  /** Snapshot the lexer's position. Used by the parser to peek the\n   * next token without consuming it. */\n  snapshot(): LexerState {\n    return { pos: this.pos, line: this.line, col: this.col };\n  }\n\n  restore(s: LexerState): void {\n    this.pos = s.pos;\n    this.line = s.line;\n    this.col = s.col;\n  }\n\n  /** Returns the next token. Returns an EOF token at end-of-input forever. */\n  next(): Token {\n    this.skipSpaces();\n    if (this.pos >= this.input.length) {\n      return { kind: TokenKind.EOF, value: \"\", pos: this.currentPos() };\n    }\n\n    const pos = this.currentPos();\n    const ch = this.peek();\n\n    if (ch === \"\\n\") {\n      this.advance();\n      return { kind: TokenKind.NEWLINE, value: \"\\n\", pos };\n    }\n\n    if (ch === \"#\") return this.lexLineComment(pos);\n    if (ch === \"/\" && this.peekAt(1) === \"/\") return this.lexLineComment(pos);\n    if (ch === \"/\" && this.peekAt(1) === \"*\") return this.lexBlockComment(pos);\n\n    if (ch === '\"') {\n      if (this.peekAt(1) === '\"' && this.peekAt(2) === '\"') {\n        return this.lexTripleString(pos);\n      }\n      return this.lexString(pos);\n    }\n    if (ch === \"b\" && this.peekAt(1) === '\"') return this.lexBytes(pos);\n\n    switch (ch) {\n      case \"{\": this.advance(); return { kind: TokenKind.LBRACE, value: \"{\", pos };\n      case \"}\": this.advance(); return { kind: TokenKind.RBRACE, value: \"}\", pos };\n      case \"[\": this.advance(); return { kind: TokenKind.LBRACKET, value: \"[\", pos };\n      case \"]\": this.advance(); return { kind: TokenKind.RBRACKET, value: \"]\", pos };\n      case \"(\": this.advance(); return { kind: TokenKind.LPAREN, value: \"(\", pos };\n      case \")\": this.advance(); return { kind: TokenKind.RPAREN, value: \")\", pos };\n      case \"=\": this.advance(); return { kind: TokenKind.EQUALS, value: \"=\", pos };\n      case \":\": this.advance(); return { kind: TokenKind.COLON, value: \":\", pos };\n      case \",\": this.advance(); return { kind: TokenKind.COMMA, value: \",\", pos };\n      case \"@\": return this.lexDirective(pos);\n    }\n\n    if (ch === \"-\" || isDigit(ch)) return this.lexNumber(pos);\n    if (isIdentStart(ch)) return this.lexIdent(pos);\n\n    this.advance();\n    return { kind: TokenKind.ILLEGAL, value: ch, pos };\n  }\n\n  /** Iterate until EOF, useful for tests and consumers that want everything up front. */\n  *tokens(): Generator<Token> {\n    while (true) {\n      const t = this.next();\n      yield t;\n      if (t.kind === TokenKind.EOF) return;\n    }\n  }\n\n  private peek(): string {\n    return this.pos < this.input.length ? this.input[this.pos]! : \"\";\n  }\n\n  private peekAt(offset: number): string {\n    const i = this.pos + offset;\n    return i < this.input.length ? this.input[i]! : \"\";\n  }\n\n  private advance(): string {\n    if (this.pos >= this.input.length) return \"\";\n    const ch = this.input[this.pos]!;\n    this.pos++;\n    if (ch === \"\\n\") {\n      this.line++;\n      this.col = 1;\n    } else {\n      this.col++;\n    }\n    return ch;\n  }\n\n  private currentPos(): Position {\n    return { line: this.line, column: this.col, offset: this.pos };\n  }\n\n  /** Raw input view — used by parseDirective to slice the body bytes\n   * between `{` and `}` once the matching brace has been located. */\n  inputView(): string {\n    return this.input;\n  }\n\n  /**\n   * Reposition the lexer to `target` (a char index into the input),\n   * recomputing line/col by scanning forward from the current position.\n   * Used by parseProtoDirective to skip past an `@proto` brace-body\n   * whose interior is protobuf source rather than PXF.\n   */\n  repositionTo(target: number): void {\n    if (target < this.pos) {\n      // Re-scan from start; needed when target lands behind us (rare).\n      this.pos = 0;\n      this.line = 1;\n      this.col = 1;\n    }\n    while (this.pos < target && this.pos < this.input.length) {\n      const ch = this.input[this.pos]!;\n      this.pos++;\n      if (ch === \"\\n\") {\n        this.line++;\n        this.col = 1;\n      } else {\n        this.col++;\n      }\n    }\n  }\n\n  private skipSpaces(): void {\n    while (this.pos < this.input.length) {\n      const ch = this.input[this.pos]!;\n      if (ch === \" \" || ch === \"\\t\" || ch === \"\\r\") {\n        this.advance();\n      } else {\n        break;\n      }\n    }\n  }\n\n  private lexLineComment(pos: Position): Token {\n    const start = this.pos;\n    while (this.pos < this.input.length && this.input[this.pos] !== \"\\n\") {\n      this.advance();\n    }\n    return { kind: TokenKind.COMMENT, value: this.input.slice(start, this.pos), pos };\n  }\n\n  private lexBlockComment(pos: Position): Token {\n    const start = this.pos;\n    this.advance(); // /\n    this.advance(); // *\n    while (this.pos + 1 < this.input.length) {\n      if (this.input[this.pos] === \"*\" && this.input[this.pos + 1] === \"/\") {\n        this.advance(); // *\n        this.advance(); // /\n        return { kind: TokenKind.COMMENT, value: this.input.slice(start, this.pos), pos };\n      }\n      this.advance();\n    }\n    return { kind: TokenKind.ILLEGAL, value: \"unterminated block comment\", pos };\n  }\n\n  private lexString(pos: Position): Token {\n    this.advance(); // opening \"\n    let out = \"\";\n    while (this.pos < this.input.length) {\n      const ch = this.advance();\n      if (ch === '\"') {\n        return { kind: TokenKind.STRING, value: out, pos };\n      }\n      if (ch !== \"\\\\\") {\n        out += ch;\n        continue;\n      }\n      if (this.pos >= this.input.length) {\n        return { kind: TokenKind.ILLEGAL, value: \"unterminated escape sequence\", pos };\n      }\n      const esc = this.advance();\n      switch (esc) {\n        case '\"': case \"\\\\\": case \"'\": case \"?\":\n          out += esc; break;\n        case \"a\": out += \"\\x07\"; break;\n        case \"b\": out += \"\\x08\"; break;\n        case \"f\": out += \"\\x0c\"; break;\n        case \"n\": out += \"\\n\"; break;\n        case \"r\": out += \"\\r\"; break;\n        case \"t\": out += \"\\t\"; break;\n        case \"v\": out += \"\\x0b\"; break;\n        case \"x\": {\n          // Exactly 2 hex digits → 1 byte, appended as a Latin-1 code unit.\n          const b = this.readHexByte();\n          if (b === null) {\n            return { kind: TokenKind.ILLEGAL, value: \"invalid \\\\x escape: expected 2 hex digits\", pos };\n          }\n          out += String.fromCharCode(b);\n          break;\n        }\n        case \"0\": case \"1\": case \"2\": case \"3\": {\n          // \\nnn — exactly 3 octal digits, leading 0–3 keeps the value ≤ 0xFF.\n          const b = this.readOctRest(esc);\n          if (b === null) {\n            return { kind: TokenKind.ILLEGAL, value: \"invalid octal escape: expected 3 octal digits\", pos };\n          }\n          out += String.fromCharCode(b);\n          break;\n        }\n        case \"u\": {\n          const r = this.readHexRune(4);\n          if (r === null || !isValidRune(r)) {\n            return { kind: TokenKind.ILLEGAL, value: \"invalid \\\\u escape: expected 4 hex digits forming a valid codepoint\", pos };\n          }\n          out += String.fromCodePoint(r);\n          break;\n        }\n        case \"U\": {\n          const r = this.readHexRune(8);\n          if (r === null || !isValidRune(r)) {\n            return { kind: TokenKind.ILLEGAL, value: \"invalid \\\\U escape: expected 8 hex digits forming a valid codepoint\", pos };\n          }\n          out += String.fromCodePoint(r);\n          break;\n        }\n        default:\n          return { kind: TokenKind.ILLEGAL, value: `unknown escape sequence \\\\${esc}`, pos };\n      }\n    }\n    return { kind: TokenKind.ILLEGAL, value: \"unterminated string\", pos };\n  }\n\n  /** Reads exactly 2 hex digits from the current position. */\n  private readHexByte(): number | null {\n    if (this.pos + 1 >= this.input.length) return null;\n    const hi = hexVal(this.input[this.pos]!);\n    const lo = hexVal(this.input[this.pos + 1]!);\n    if (hi === null || lo === null) return null;\n    this.advance(); this.advance();\n    return (hi << 4) | lo;\n  }\n\n  /** Reads exactly N hex digits from the current position. */\n  private readHexRune(n: number): number | null {\n    if (this.pos + n > this.input.length) return null;\n    let r = 0;\n    for (let i = 0; i < n; i++) {\n      const v = hexVal(this.input[this.pos]!);\n      if (v === null) return null;\n      r = (r << 4) | v;\n      this.advance();\n    }\n    return r;\n  }\n\n  /** Reads two more octal digits after the leading one already consumed\n   *  (as part of `\\nnn` — exactly 3 octal digits total). The caller has\n   *  restricted `first` to 0–3 so the value can't exceed 0xFF. */\n  private readOctRest(first: string): number | null {\n    if (this.pos + 1 >= this.input.length) return null;\n    const d1 = octVal(this.input[this.pos]!);\n    const d2 = octVal(this.input[this.pos + 1]!);\n    if (d1 === null || d2 === null) return null;\n    this.advance(); this.advance();\n    return ((first.charCodeAt(0) - 0x30) << 6) | (d1 << 3) | d2;\n  }\n\n  private lexTripleString(pos: Position): Token {\n    this.advance(); // \"\n    this.advance(); // \"\n    this.advance(); // \"\n    const start = this.pos;\n    while (this.pos + 2 < this.input.length) {\n      if (\n        this.input[this.pos] === '\"' &&\n        this.input[this.pos + 1] === '\"' &&\n        this.input[this.pos + 2] === '\"'\n      ) {\n        const raw = this.input.slice(start, this.pos);\n        this.advance(); // \"\n        this.advance(); // \"\n        this.advance(); // \"\n        return { kind: TokenKind.STRING, value: dedent(raw), pos };\n      }\n      this.advance();\n    }\n    return { kind: TokenKind.ILLEGAL, value: \"unterminated triple-quoted string\", pos };\n  }\n\n  private lexBytes(pos: Position): Token {\n    this.advance(); // b\n    if (this.pos >= this.input.length || this.input[this.pos] !== '\"') {\n      return { kind: TokenKind.ILLEGAL, value: \"expected '\\\"' after b\", pos };\n    }\n    this.advance(); // opening \"\n    const start = this.pos;\n    while (this.pos < this.input.length) {\n      const ch = this.input[this.pos];\n      if (ch === '\"') {\n        const raw = this.input.slice(start, this.pos);\n        this.advance(); // closing \"\n        if (!isValidBase64(raw)) {\n          return { kind: TokenKind.ILLEGAL, value: \"invalid base64 in bytes literal\", pos };\n        }\n        return { kind: TokenKind.BYTES, value: raw, pos };\n      }\n      if (ch === \"\\n\") {\n        return { kind: TokenKind.ILLEGAL, value: \"unterminated bytes literal\", pos };\n      }\n      this.advance();\n    }\n    return { kind: TokenKind.ILLEGAL, value: \"unterminated bytes literal\", pos };\n  }\n\n  private lexDirective(pos: Position): Token {\n    this.advance(); // @\n    const start = this.pos;\n    while (this.pos < this.input.length && isIdentPart(this.input[this.pos]!)) {\n      this.advance();\n    }\n    const name = this.input.slice(start, this.pos);\n    if (name === \"\") {\n      return { kind: TokenKind.ILLEGAL, value: \"@\", pos };\n    }\n    if (name === \"type\") {\n      return { kind: TokenKind.AT_TYPE, value: \"@type\", pos };\n    }\n    if (name === \"dataset\") {\n      return { kind: TokenKind.AT_DATASET, value: \"@dataset\", pos };\n    }\n    if (name === \"proto\") {\n      return { kind: TokenKind.AT_PROTO, value: \"@proto\", pos };\n    }\n    // AT_DIRECTIVE's Token.value carries the bare name (no `@`); the\n    // parser uses this directly as Directive.name.\n    return { kind: TokenKind.AT_DIRECTIVE, value: name, pos };\n  }\n\n  private lexNumber(pos: Position): Token {\n    const start = this.pos;\n    let neg = false;\n    if (this.peek() === \"-\") {\n      neg = true;\n      this.advance();\n      if (this.pos >= this.input.length || !isDigit(this.peek())) {\n        return { kind: TokenKind.ILLEGAL, value: \"-\", pos };\n      }\n    }\n\n    const digitStart = this.pos;\n    while (this.pos < this.input.length && isDigit(this.peek())) {\n      this.advance();\n    }\n    const digitCount = this.pos - digitStart;\n\n    // Timestamp: exactly 4 digits followed by '-', only non-negative.\n    if (!neg && digitCount === 4 && this.pos < this.input.length && this.peek() === \"-\") {\n      return this.lexTimestamp(pos, start);\n    }\n\n    // Float: '.' or 'e'/'E'.\n    if (this.pos < this.input.length) {\n      const c = this.peek();\n      if (c === \".\" || c === \"e\" || c === \"E\") return this.lexFloat(pos, start);\n    }\n\n    // Duration: digits followed by a time-unit letter.\n    if (this.pos < this.input.length && isDurationUnit(this.peek())) {\n      return this.lexDuration(pos, start);\n    }\n\n    return { kind: TokenKind.INT, value: this.input.slice(start, this.pos), pos };\n  }\n\n  private lexFloat(pos: Position, start: number): Token {\n    if (this.peek() === \".\") {\n      this.advance();\n      while (this.pos < this.input.length && isDigit(this.peek())) this.advance();\n    }\n    if (this.pos < this.input.length && (this.peek() === \"e\" || this.peek() === \"E\")) {\n      this.advance();\n      if (this.pos < this.input.length && (this.peek() === \"+\" || this.peek() === \"-\")) {\n        this.advance();\n      }\n      while (this.pos < this.input.length && isDigit(this.peek())) this.advance();\n    }\n    return { kind: TokenKind.FLOAT, value: this.input.slice(start, this.pos), pos };\n  }\n\n  private lexTimestamp(pos: Position, start: number): Token {\n    while (this.pos < this.input.length) {\n      const ch = this.peek();\n      if (\n        ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\" ||\n        ch === \",\" || ch === \"]\" || ch === \"}\" || ch === \"#\"\n      ) break;\n      if (ch === \"/\" && (this.peekAt(1) === \"/\" || this.peekAt(1) === \"*\")) break;\n      this.advance();\n    }\n    const raw = this.input.slice(start, this.pos);\n    if (!isValidRfc3339(raw)) {\n      return { kind: TokenKind.ILLEGAL, value: \"invalid timestamp: \" + raw, pos };\n    }\n    return { kind: TokenKind.TIMESTAMP, value: raw, pos };\n  }\n\n  private lexDuration(pos: Position, start: number): Token {\n    while (this.pos < this.input.length) {\n      const ch = this.peek();\n      if (!(isDigit(ch) || isLowerAlpha(ch) || ch === \".\")) break;\n      this.advance();\n    }\n    const raw = this.input.slice(start, this.pos);\n    if (!isValidGoDuration(raw)) {\n      return { kind: TokenKind.ILLEGAL, value: \"invalid duration: \" + raw, pos };\n    }\n    return { kind: TokenKind.DURATION, value: raw, pos };\n  }\n\n  private lexIdent(pos: Position): Token {\n    const start = this.pos;\n    while (this.pos < this.input.length && isIdentPart(this.input[this.pos]!)) {\n      this.advance();\n    }\n    const val = this.input.slice(start, this.pos);\n    if (val === \"true\" || val === \"false\") {\n      return { kind: TokenKind.BOOL, value: val, pos };\n    }\n    if (val === \"null\") {\n      return { kind: TokenKind.NULL, value: val, pos };\n    }\n    return { kind: TokenKind.IDENT, value: val, pos };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction isDigit(ch: string): boolean {\n  return ch >= \"0\" && ch <= \"9\";\n}\n\nfunction isIdentStart(ch: string): boolean {\n  return (ch >= \"a\" && ch <= \"z\") || (ch >= \"A\" && ch <= \"Z\") || ch === \"_\";\n}\n\nfunction isIdentPart(ch: string): boolean {\n  return isIdentStart(ch) || isDigit(ch) || ch === \".\";\n}\n\nfunction isDurationUnit(ch: string): boolean {\n  return ch === \"h\" || ch === \"m\" || ch === \"s\" || ch === \"n\" || ch === \"u\";\n}\n\nfunction hexVal(ch: string): number | null {\n  if (ch >= \"0\" && ch <= \"9\") return ch.charCodeAt(0) - 0x30;\n  if (ch >= \"a\" && ch <= \"f\") return ch.charCodeAt(0) - 0x61 + 10;\n  if (ch >= \"A\" && ch <= \"F\") return ch.charCodeAt(0) - 0x41 + 10;\n  return null;\n}\n\nfunction octVal(ch: string): number | null {\n  if (ch >= \"0\" && ch <= \"7\") return ch.charCodeAt(0) - 0x30;\n  return null;\n}\n\n/** Mirrors Go's utf8.ValidRune: rejects > U+10FFFF and the surrogate range. */\nfunction isValidRune(r: number): boolean {\n  return r >= 0 && r <= 0x10FFFF && (r < 0xD800 || r > 0xDFFF);\n}\n\nfunction isLowerAlpha(ch: string): boolean {\n  return ch >= \"a\" && ch <= \"z\";\n}\n\n/**\n * Strip the closing-line indent from each line in a triple-quoted string body.\n * Leading newline (right after opening `\"\"\"`) is stripped. If the line before\n * the closing `\"\"\"` is whitespace-only, that whitespace becomes the base\n * indent and is removed from each preceding line.\n */\nfunction dedent(s: string): string {\n  if (s.length > 0 && s[0] === \"\\n\") s = s.slice(1);\n  const lines = s.split(\"\\n\");\n  if (lines.length === 0) return \"\";\n  const last = lines[lines.length - 1]!;\n  if (last.trim() === \"\") {\n    const indent = last;\n    lines.pop();\n    for (let i = 0; i < lines.length; i++) {\n      const line = lines[i]!;\n      if (line.startsWith(indent)) lines[i] = line.slice(indent.length);\n    }\n  }\n  return lines.join(\"\\n\");\n}\n\n/**\n * Validate RFC 3339 timestamps, accepting both `Z` and numeric offsets, plus\n * optional fractional seconds. Calendar fields are sanity-checked via Date.\n */\nconst RFC3339_RE =\n  /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$/;\n\nfunction isValidRfc3339(s: string): boolean {\n  const m = RFC3339_RE.exec(s);\n  if (!m) return false;\n  // Date.parse normalizes; require non-NaN. This catches e.g. month 13.\n  return !Number.isNaN(Date.parse(s));\n}\n\n/**\n * Validate a Go-style duration: a possibly-signed sequence of decimal numbers\n * each followed by a unit (`ns`, `us`, `µs`, `ms`, `s`, `m`, `h`).\n *\n * The lexer never feeds in `µs` because µ is non-ASCII and isn't accepted\n * during the digit/letter scan, but the regex permits it for completeness.\n */\nconst GO_DURATION_RE = /^-?(\\d+(\\.\\d+)?(ns|us|µs|ms|s|m|h))+$/;\n\nfunction isValidGoDuration(s: string): boolean {\n  return GO_DURATION_RE.test(s);\n}\n\n/**\n * Accept either standard (padded) or raw (unpadded) base64. Length-mod-4\n * rule weeds out a `==`-padded string of size 1 and similar nonsense.\n */\nfunction isValidBase64(s: string): boolean {\n  if (s === \"\") return true;\n  if (!/^[A-Za-z0-9+/]+={0,2}$/.test(s)) return false;\n  if (s.indexOf(\"=\") === -1) {\n    return s.length % 4 !== 1; // raw: any length except mod 4 == 1\n  }\n  return s.length % 4 === 0; // standard: length must be a multiple of 4\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * PXF schema-level conformance check per draft §3.13. A protobuf schema\n * bound for PXF use MUST NOT declare a message field, oneof, or enum\n * value whose name is case-sensitively equal to a PXF value keyword\n * (`null` / `true` / `false`) — such a name lexes as the keyword, so\n * the declared element is unreachable from PXF surface syntax.\n *\n * Enforcement runs at descriptor-bind time inside `unmarshal` /\n * `unmarshalFull`. Callers that have already validated their\n * descriptors (typically via `validateDescriptor` in a one-time\n * codegen or registry-load pass) may set\n * `UnmarshalOptions.skipValidate` to bypass the per-call recheck.\n *\n * Mirrors `protowire/encoding/pxf/schema.go`.\n */\n\nimport { type DescEnum, type DescFile, type DescMessage } from \"@bufbuild/protobuf\";\n\n/** Which kind of schema element collides with a reserved PXF value keyword. */\nexport type ViolationKind = \"field\" | \"oneof\" | \"enumValue\";\n\n/** A schema element whose name collides with a reserved PXF keyword. */\nexport interface Violation {\n  /** .proto file path the offending element is declared in. */\n  readonly file: string;\n  /** Fully-qualified protobuf name (e.g. \"trades.v1.Side.null\"). */\n  readonly element: string;\n  /** Bare reserved identifier (\"null\" / \"true\" / \"false\"). */\n  readonly name: string;\n  readonly kind: ViolationKind;\n}\n\n/** Human-readable one-line description of `v`. */\nexport function violationString(v: Violation): string {\n  const kindLabel =\n    v.kind === \"field\" ? \"message field\" : v.kind === \"oneof\" ? \"oneof\" : \"enum value\";\n  return `${v.file}: ${kindLabel} \"${v.element}\" uses PXF-reserved name \"${v.name}\" (draft §3.13)`;\n}\n\n/**\n * Walks the file containing `desc` and returns every reserved-name\n * collision among messages, oneofs, and enum values reachable from\n * that file. The returned array is sorted by element fully-qualified\n * name for stable output. An empty array means the schema is\n * conformant.\n *\n * The check is case-sensitive: identifiers such as \"NULL\" or \"True\"\n * lex as ordinary identifiers and are accepted.\n */\nexport function validateDescriptor(desc: DescMessage | null | undefined): Violation[] {\n  if (!desc) return [];\n  return validateFile(desc.file);\n}\n\n/**\n * Walks `fd` and returns every reserved-name collision in the file.\n * See {@link validateDescriptor} for the rule and semantics.\n */\nexport function validateFile(fd: DescFile | null | undefined): Violation[] {\n  if (!fd) return [];\n  const path = fd.name;\n  const out: Violation[] = [];\n  for (const msg of fd.messages) walkMessage(path, msg, out);\n  for (const en of fd.enums) walkEnum(path, en, out);\n  out.sort((a, b) => (a.element < b.element ? -1 : a.element > b.element ? 1 : 0));\n  return out;\n}\n\nconst RESERVED = new Set([\"null\", \"true\", \"false\"]);\n\n/**\n * Directive names the spec reserves for future allocation (draft §3.4.6).\n * v1 decoders MUST reject these as unknown reserved directives so\n * applications cannot squat the names before the spec allocates\n * semantics to them.\n *\n * The names with their own production (`type`, `dataset`, `proto`) don't\n * appear here — they're handled directly by the lexer. The spec-\n * registered `entry` doesn't appear either — it's a valid named-directive\n * with documented shape (draft §3.4.3).\n */\nexport const FUTURE_RESERVED_DIRECTIVES: ReadonlySet<string> = new Set([\n  \"table\",\n  \"datasource\",\n  \"view\",\n  \"procedure\",\n  \"function\",\n  \"permissions\",\n]);\n\nfunction walkMessage(path: string, md: DescMessage, out: Violation[]): void {\n  for (const f of md.fields) {\n    if (RESERVED.has(f.name)) {\n      // DescField doesn't carry a typeName; build it from the parent\n      // message's fully-qualified typeName and the field name.\n      out.push({\n        file: path,\n        element: `${md.typeName}.${f.name}`,\n        name: f.name,\n        kind: \"field\",\n      });\n    }\n  }\n  // bufbuild's DescMessage.oneofs already filters synthetic oneofs\n  // emitted for proto3 `optional` fields — matching Go's IsSynthetic()\n  // filter — so we can iterate it directly.\n  for (const o of md.oneofs) {\n    if (RESERVED.has(o.name)) {\n      // OneofDescriptor doesn't carry typeName directly; build it from\n      // the parent message and the oneof name.\n      const element = `${md.typeName}.${o.name}`;\n      out.push({ file: path, element, name: o.name, kind: \"oneof\" });\n    }\n  }\n  for (const inner of md.nestedMessages) walkMessage(path, inner, out);\n  for (const en of md.nestedEnums) walkEnum(path, en, out);\n}\n\nfunction walkEnum(path: string, en: DescEnum, out: Violation[]): void {\n  for (const v of en.values) {\n    if (RESERVED.has(v.name)) {\n      // Proto enum value names live at the enum's PARENT scope, not\n      // under the enum name itself (same as cpp's behavior). bufbuild\n      // doesn't expose a typeName for EnumValue, so construct it:\n      // parent message typeName (if nested) / file package + value name.\n      const parent = en.parent;\n      const scope = parent ? parent.typeName : en.file.proto.package;\n      const element = scope ? `${scope}.${v.name}` : v.name;\n      out.push({ file: path, element, name: v.name, kind: \"enumValue\" });\n    }\n  }\n}\n\n/**\n * Join a list of violations into a single error message suitable for\n * throwing from a decode call. Returns `undefined` when `vs` is empty.\n */\nexport function asValidationErrorMessage(vs: Violation[]): string | undefined {\n  if (vs.length === 0) return undefined;\n  const lines = vs.map((v) => \"  \" + violationString(v));\n  return \"PXF schema reserved-name violations:\\n\" + lines.join(\"\\n\");\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Recursive-descent parser for PXF.\n * Mirrors `protowire/encoding/pxf/parser.go`.\n *\n * Newlines and comments are absorbed at the lexer-token boundary. Comments\n * accumulate in a pending buffer and are attached as `leadingComments` to\n * the next entry. Trailing inline comments are not yet captured (Go's parser\n * also leaves `TrailingComment` empty on the parser hot path; the\n * formatter populates it).\n */\n\nimport {\n  type Assignment,\n  type Block,\n  type BlockVal,\n  type BytesVal,\n  type Comment,\n  type Directive,\n  type Document,\n  type Entry,\n  type ListVal,\n  type MapEntry,\n  type DatasetDirective,\n  type DatasetRow,\n  type ProtoDirective,\n  type Value,\n} from \"./ast.js\";\nimport { FUTURE_RESERVED_DIRECTIVES } from \"./schema.js\";\nimport { PxfError } from \"./errors.js\";\nimport { Lexer } from \"./lexer.js\";\nimport { type Position, type Token, TokenKind, tokenKindName } from \"./token.js\";\n\nexport function parse(input: string): Document {\n  return new Parser(input).parseDocument();\n}\n\nclass Parser {\n  private readonly lex: Lexer;\n  private current!: Token;\n  private pendingComments: Comment[] = [];\n\n  constructor(input: string) {\n    this.lex = new Lexer(input);\n    this.advance();\n  }\n\n  /**\n   * Consume the next token, swallowing newlines and accumulating comments\n   * into `pendingComments`. Returns the new `this.current` so callers can\n   * pattern-match on it without TypeScript's narrowing-of-mutable-fields\n   * limitations getting in the way.\n   */\n  private advance(): Token {\n    while (true) {\n      this.current = this.lex.next();\n      if (this.current.kind === TokenKind.NEWLINE) continue;\n      if (this.current.kind === TokenKind.COMMENT) {\n        this.pendingComments.push({\n          pos: this.current.pos,\n          text: this.current.value,\n        });\n        continue;\n      }\n      return this.current;\n    }\n  }\n\n  private flushComments(): Comment[] {\n    if (this.pendingComments.length === 0) return [];\n    const c = this.pendingComments;\n    this.pendingComments = [];\n    return c;\n  }\n\n  parseDocument(): Document {\n    const leadingComments = this.flushComments();\n    let typeUrl = \"\";\n    const directives: Directive[] = [];\n    const datasets: DatasetDirective[] = [];\n    const protos: ProtoDirective[] = [];\n    let bodyOffset = 0;\n\n    // Top-of-document directive prelude. @type, @<name>, and @dataset may\n    // interleave in any order; @type populates typeUrl, @<name> appends\n    // to directives, @dataset appends to tables. bodyOffset tracks the\n    // byte immediately after the last directive's last token so\n    // consumers (e.g. chameleon) can hash from there; stays 0 when\n    // there are no directives.\n    let sawType = false;\n    let firstTablePos: Position | null = null;\n    directives_loop: for (;;) {\n      switch (this.current.kind) {\n        case TokenKind.AT_TYPE: {\n          if (firstTablePos !== null) {\n            throw new PxfError(\n              this.current.pos,\n              \"@dataset directive cannot coexist with @type; the @dataset header declares the document's type (draft §3.4.4)\",\n            );\n          }\n          sawType = true;\n          const next = this.advance();\n          if (next.kind !== TokenKind.IDENT) {\n            throw new PxfError(\n              next.pos,\n              `expected type name after @type, got ${tokenKindName(next.kind)}`,\n            );\n          }\n          typeUrl = next.value;\n          bodyOffset = next.pos.offset + next.value.length;\n          this.advance();\n          break;\n        }\n        case TokenKind.AT_DIRECTIVE: {\n          const { directive, endOffset } = this.parseDirective();\n          directives.push(directive);\n          bodyOffset = endOffset;\n          break;\n        }\n        case TokenKind.AT_DATASET: {\n          if (sawType) {\n            throw new PxfError(\n              this.current.pos,\n              \"@dataset directive cannot coexist with @type; the @dataset header declares the document's type (draft §3.4.4)\",\n            );\n          }\n          const { table, endOffset } = this.parseDatasetDirective();\n          if (firstTablePos === null) firstTablePos = table.pos;\n          datasets.push(table);\n          bodyOffset = endOffset;\n          break;\n        }\n        case TokenKind.AT_PROTO: {\n          const { proto, endOffset } = this.parseProtoDirective();\n          protos.push(proto);\n          bodyOffset = endOffset;\n          break;\n        }\n        default:\n          break directives_loop;\n      }\n    }\n\n    // Standalone constraint (draft §3.4.4): a document containing any\n    // @dataset directive MUST NOT also carry top-level field entries;\n    // the @dataset header IS the document's type declaration.\n    if (firstTablePos !== null && this.current.kind !== TokenKind.EOF) {\n      throw new PxfError(\n        firstTablePos,\n        \"@dataset directive cannot coexist with top-level field entries; the document's payload is the @dataset rows (draft §3.4.4)\",\n      );\n    }\n\n    const entries: Entry[] = [];\n    while (this.current.kind !== TokenKind.EOF) {\n      // Top-level: only field_entry is allowed. The document represents a\n      // proto message, never a map<K,V>; map_entry (`:` form) is reserved\n      // for the inside of a `{ ... }` block.\n      entries.push(this.parseEntry({ allowMapEntry: false }));\n    }\n    return { typeUrl, directives, datasets, protos, bodyOffset, entries, leadingComments };\n  }\n\n  /**\n   * peekKind returns the kind of the next significant token (skipping\n   * newlines and comments) without consuming it. Used by parseDirective\n   * to disambiguate \"this IDENT is a directive prefix\" from \"this IDENT\n   * is a body field key\".\n   */\n  private peekKind(): TokenKind {\n    const snap = this.lex.snapshot();\n    const savedCurrent = this.current;\n    const nComments = this.pendingComments.length;\n    this.advance();\n    const k = this.current.kind;\n    this.lex.restore(snap);\n    this.current = savedCurrent;\n    this.pendingComments.length = nComments;\n    return k;\n  }\n\n  /**\n   * parseDirective reads `@<name> *(<prefix-id>) [{ ... }]`. AT_DIRECTIVE\n   * is current on entry. Returns the directive plus the byte offset\n   * immediately past the directive's last token (the `}` for block form,\n   * the last prefix identifier for bare form, or `@<name>` if neither\n   * is present).\n   *\n   * One-token lookahead disambiguates zero-or-more prefix identifiers\n   * from body field keys: an IDENT followed by `=` or `:` is a body key,\n   * not a prefix.\n   */\n  private parseDirective(): { directive: Directive; endOffset: number } {\n    const leadingComments = this.flushComments();\n    const atPos = this.current.pos;\n    const name = this.current.value;\n    if (FUTURE_RESERVED_DIRECTIVES.has(name)) {\n      throw new PxfError(\n        atPos,\n        `@${name} is a spec-reserved directive name with no v1 semantics (draft §3.4.6)`,\n      );\n    }\n    const prefixes: string[] = [];\n    let endOffset = atPos.offset + 1 + name.length; // `@` + name\n    this.advance();\n\n    // Zero-or-more prefix identifiers.\n    while (this.current.kind === TokenKind.IDENT) {\n      const next = this.peekKind();\n      if (next === TokenKind.EQUALS || next === TokenKind.COLON) break;\n      prefixes.push(this.current.value);\n      endOffset = this.current.pos.offset + this.current.value.length;\n      this.advance();\n    }\n\n    // Back-compat: a single prefix populates the legacy `type` field,\n    // matching v0.72.0's single-Type shape so existing consumers\n    // (e.g. chameleon's `@header T { ... }` reader) keep working.\n    const type = prefixes.length === 1 ? prefixes[0]! : \"\";\n\n    let body = \"\";\n    let hasBody = false;\n    if (this.current.kind === TokenKind.LBRACE) {\n      const open = this.current.pos.offset;\n      // Use parseBlockVal to validate inner content (string / brace /\n      // comment well-formedness); then slice the raw bytes between `{`\n      // and `}` from the input for body.\n      this.parseBlockVal();\n      const close = findMatchingBrace(this.lex.inputView(), open);\n      if (close < 0) {\n        // parseBlockVal succeeded so a matching brace must exist —\n        // defensive belt-and-braces.\n        throw new PxfError(atPos, `directive @${name}: unmatched '{'`);\n      }\n      body = this.lex.inputView().slice(open + 1, close);\n      hasBody = true;\n      endOffset = close + 1;\n    }\n\n    return {\n      directive: { pos: atPos, name, prefixes, type, body, hasBody, leadingComments },\n      endOffset,\n    };\n  }\n\n  /**\n   * parseDatasetDirective reads `@dataset <type> ( col1, col2, ... ) row*`.\n   * AT_DATASET is current on entry. See draft §3.4.4.\n   */\n  private parseDatasetDirective(): { table: DatasetDirective; endOffset: number } {\n    const leadingComments = this.flushComments();\n    const atPos = this.current.pos;\n    this.advance(); // consume @dataset\n\n    // Optional row message type. MAY be omitted when an anonymous @proto\n    // directive precedes the dataset (draft §3.4.4 Anonymous binding).\n    let type = \"\";\n    if ((this.current.kind as TokenKind) === TokenKind.IDENT) {\n      type = this.current.value;\n      this.advance();\n    }\n\n    // Required: column list in `( ... )`. At least one column.\n    if ((this.current.kind as TokenKind) !== TokenKind.LPAREN) {\n      throw new PxfError(\n        this.current.pos,\n        `expected '(' to start @dataset column list, got ${tokenKindName(this.current.kind)}`,\n      );\n    }\n    this.advance(); // consume (\n\n    if (this.current.kind !== TokenKind.IDENT) {\n      throw new PxfError(\n        this.current.pos,\n        `@dataset column list must contain at least one field name, got ${tokenKindName(this.current.kind)}`,\n      );\n    }\n    const columns: string[] = [];\n    for (;;) {\n      if (this.current.kind !== TokenKind.IDENT) {\n        throw new PxfError(\n          this.current.pos,\n          `expected column field name, got ${tokenKindName(this.current.kind)}`,\n        );\n      }\n      const col = this.current.value;\n      // v1: column entries are unqualified field names; dotted paths\n      // reserved for a future revision.\n      if (col.includes(\".\")) {\n        throw new PxfError(\n          this.current.pos,\n          `@dataset column ${JSON.stringify(col)}: dotted column paths are not supported in v1 (draft §3.4.4)`,\n        );\n      }\n      columns.push(col);\n      this.advance();\n      if ((this.current.kind as TokenKind) === TokenKind.COMMA) {\n        this.advance();\n        continue;\n      }\n      if ((this.current.kind as TokenKind) === TokenKind.RPAREN) break;\n      throw new PxfError(\n        this.current.pos,\n        `expected ',' or ')' in @dataset column list, got ${tokenKindName(this.current.kind)}`,\n      );\n    }\n    let endOffset = this.current.pos.offset + 1; // past `)`\n    this.advance(); // consume )\n\n    const rows: DatasetRow[] = [];\n    while ((this.current.kind as TokenKind) === TokenKind.LPAREN) {\n      const r = this.parseDatasetRow(columns.length);\n      rows.push(r.row);\n      endOffset = r.endOffset;\n    }\n    return {\n      table: { pos: atPos, type, columns, rows, leadingComments },\n      endOffset,\n    };\n  }\n\n  /**\n   * parseDatasetRow reads `( cell ( ',' cell )* )` with an arity check\n   * against `expected`. LPAREN is current on entry.\n   */\n  private parseDatasetRow(expected: number): { row: DatasetRow; endOffset: number } {\n    const pos = this.current.pos;\n    this.advance(); // consume (\n\n    const cells: (Value | null)[] = [];\n    cells.push(this.parseRowCell());\n    while ((this.current.kind as TokenKind) === TokenKind.COMMA) {\n      this.advance();\n      cells.push(this.parseRowCell());\n    }\n    if (this.current.kind !== TokenKind.RPAREN) {\n      throw new PxfError(\n        this.current.pos,\n        `expected ',' or ')' in @dataset row, got ${tokenKindName(this.current.kind)}`,\n      );\n    }\n    const endOffset = this.current.pos.offset + 1;\n    this.advance(); // consume )\n    if (cells.length !== expected) {\n      throw new PxfError(\n        pos,\n        `@dataset row has ${cells.length} cells, expected ${expected} (column count)`,\n      );\n    }\n    return { row: { pos, cells }, endOffset };\n  }\n\n  /**\n   * parseProtoDirective reads `@proto <body>` (draft §3.4.5). AT_PROTO\n   * is current on entry. Four body shapes are lexically distinguished:\n   *\n   *   - `@proto { ... }`                 (anonymous)\n   *   - `@proto <dotted-name> { ... }`   (named)\n   *   - `@proto \"\"\"...\"\"\"`               (source-form file)\n   *   - `@proto b\"...\"`                  (descriptor)\n   *\n   * For brace-bounded shapes the body is sliced as raw bytes between\n   * `{` and the matching `}` (exclusive); the contents are protobuf\n   * source and are NOT decoded as PXF entries.\n   */\n  private parseProtoDirective(): { proto: ProtoDirective; endOffset: number } {\n    const leadingComments = this.flushComments();\n    const atPos = this.current.pos;\n    this.advance(); // consume @proto\n\n    switch (this.current.kind) {\n      case TokenKind.LBRACE: {\n        const { body, endOffset } = this.captureBraceBody(\"@proto (anonymous form)\", atPos);\n        return {\n          proto: { pos: atPos, shape: \"anonymous\", typeName: \"\", body, leadingComments },\n          endOffset,\n        };\n      }\n      case TokenKind.IDENT: {\n        const typeName = this.current.value;\n        this.advance();\n        if ((this.current.kind as TokenKind) !== TokenKind.LBRACE) {\n          throw new PxfError(\n            this.current.pos,\n            `expected '{' after @proto ${typeName}, got ${tokenKindName(this.current.kind)}`,\n          );\n        }\n        const { body, endOffset } = this.captureBraceBody(`@proto ${typeName}`, atPos);\n        return {\n          proto: { pos: atPos, shape: \"named\", typeName, body, leadingComments },\n          endOffset,\n        };\n      }\n      case TokenKind.STRING: {\n        const body = new TextEncoder().encode(this.current.value);\n        const endOffset = this.current.pos.offset + this.current.value.length;\n        this.advance();\n        return {\n          proto: { pos: atPos, shape: \"source\", typeName: \"\", body, leadingComments },\n          endOffset,\n        };\n      }\n      case TokenKind.BYTES: {\n        const raw = this.current.value;\n        let decoded: Uint8Array;\n        try {\n          decoded = decodeBase64(raw);\n        } catch (e) {\n          throw new PxfError(\n            this.current.pos,\n            `@proto descriptor body: invalid base64: ${(e as Error).message}`,\n          );\n        }\n        const endOffset = this.current.pos.offset + raw.length + 3; // b\" … \"\n        this.advance();\n        return {\n          proto: { pos: atPos, shape: \"descriptor\", typeName: \"\", body: decoded, leadingComments },\n          endOffset,\n        };\n      }\n      default:\n        throw new PxfError(\n          this.current.pos,\n          `expected '{', dotted identifier, triple-quoted string, or b\"...\" after @proto, got ${tokenKindName(this.current.kind)}`,\n        );\n    }\n  }\n\n  /**\n   * Slice raw bytes between `{` and the matching `}` (both exclusive)\n   * without decoding the body as PXF. LBRACE is current on entry.\n   * Repositions the lexer past the closing brace.\n   */\n  private captureBraceBody(label: string, atPos: Position): { body: Uint8Array; endOffset: number } {\n    const open = this.current.pos.offset;\n    const close = findMatchingBrace(this.lex.inputView(), open);\n    if (close < 0) {\n      throw new PxfError(atPos, `${label}: unmatched '{'`);\n    }\n    const bodyStr = this.lex.inputView().slice(open + 1, close);\n    const body = new TextEncoder().encode(bodyStr);\n    this.lex.repositionTo(close + 1);\n    this.advance();\n    return { body, endOffset: close + 1 };\n  }\n\n  /**\n   * parseRowCell consumes one cell of a @dataset row. Returns null for an\n   * empty cell (no value between two commas, or at row start/end).\n   * Rejects list ('[ ... ]') and block ('{ ... }') values per v1\n   * cell-grammar (draft §3.4.4).\n   */\n  private parseRowCell(): Value | null {\n    switch (this.current.kind) {\n      case TokenKind.COMMA:\n      case TokenKind.RPAREN:\n        return null;\n      case TokenKind.LBRACKET:\n        throw new PxfError(\n          this.current.pos,\n          \"@dataset cells cannot contain list values in v1 (draft §3.4.4)\",\n        );\n      case TokenKind.LBRACE:\n        throw new PxfError(\n          this.current.pos,\n          \"@dataset cells cannot contain block values in v1 (draft §3.4.4)\",\n        );\n      default:\n        return this.parseValue();\n    }\n  }\n\n  private parseEntry(opts: { allowMapEntry: boolean } = { allowMapEntry: true }): Entry {\n    const leadingComments = this.flushComments();\n    const pos = this.current.pos;\n    const k = this.current.kind;\n\n    if (k !== TokenKind.IDENT && k !== TokenKind.STRING && k !== TokenKind.INT) {\n      throw new PxfError(\n        pos,\n        `expected identifier, string, or integer, got ${tokenKindName(k)} (${JSON.stringify(this.current.value)})`,\n      );\n    }\n    const keyKind = k;\n    const key = this.current.value;\n    this.advance();\n\n    switch (this.current.kind) {\n      case TokenKind.EQUALS: {\n        // `=` denotes a field assignment on a proto message; the key must be\n        // an identifier (= proto field name). Map-style keys (string/integer)\n        // are only valid with `:`. See docs/grammar.ebnf → field_entry.\n        if (keyKind !== TokenKind.IDENT) {\n          throw new PxfError(\n            pos,\n            `field assignment with '=' requires an identifier key, got ${tokenKindName(keyKind)} (${JSON.stringify(key)}); use ':' for map entries`,\n          );\n        }\n        this.advance();\n        const value = this.parseValue();\n        const a: Assignment = {\n          kind: \"assignment\",\n          pos,\n          key,\n          value,\n          leadingComments,\n          trailingComment: \"\",\n        };\n        return a;\n      }\n      case TokenKind.COLON: {\n        // Map entry. Only allowed inside a `{ ... }` block, never at\n        // document top level. See docs/grammar.ebnf → document.\n        if (!opts.allowMapEntry) {\n          throw new PxfError(\n            pos,\n            `map entry (':' form) is only allowed inside a '{ … }' block; use '=' for top-level field assignments`,\n          );\n        }\n        this.advance();\n        const value = this.parseValue();\n        const m: MapEntry = {\n          kind: \"mapEntry\",\n          pos,\n          key,\n          value,\n          leadingComments,\n          trailingComment: \"\",\n        };\n        return m;\n      }\n      case TokenKind.LBRACE: {\n        // `{ ... }` denotes a submessage field; same identifier-only rule\n        // as `=` applies. See docs/grammar.ebnf → field_entry.\n        if (keyKind !== TokenKind.IDENT) {\n          throw new PxfError(\n            pos,\n            `submessage block requires an identifier key, got ${tokenKindName(keyKind)} (${JSON.stringify(key)})`,\n          );\n        }\n        this.advance(); // consume {\n        const entries = this.parseBody();\n        const b: Block = {\n          kind: \"block\",\n          pos,\n          name: key,\n          entries,\n          leadingComments,\n        };\n        return b;\n      }\n      default:\n        throw new PxfError(\n          this.current.pos,\n          `expected '=', ':', or '{' after ${JSON.stringify(key)}, got ${tokenKindName(this.current.kind)}`,\n        );\n    }\n  }\n\n  private parseValue(): Value {\n    const pos = this.current.pos;\n    const tok = this.current;\n\n    switch (tok.kind) {\n      case TokenKind.STRING: {\n        this.advance();\n        return { kind: \"string\", pos, value: tok.value };\n      }\n      case TokenKind.INT: {\n        this.advance();\n        return { kind: \"int\", pos, raw: tok.value };\n      }\n      case TokenKind.FLOAT: {\n        this.advance();\n        return { kind: \"float\", pos, raw: tok.value };\n      }\n      case TokenKind.BOOL: {\n        this.advance();\n        return { kind: \"bool\", pos, value: tok.value === \"true\" };\n      }\n      case TokenKind.BYTES: {\n        this.advance();\n        const v: BytesVal = { kind: \"bytes\", pos, value: decodeBase64(tok.value) };\n        return v;\n      }\n      case TokenKind.TIMESTAMP: {\n        this.advance();\n        return { kind: \"timestamp\", pos, raw: tok.value };\n      }\n      case TokenKind.DURATION: {\n        this.advance();\n        return { kind: \"duration\", pos, raw: tok.value };\n      }\n      case TokenKind.NULL: {\n        this.advance();\n        return { kind: \"null\", pos };\n      }\n      case TokenKind.IDENT: {\n        this.advance();\n        return { kind: \"ident\", pos, name: tok.value };\n      }\n      case TokenKind.LBRACKET:\n        return this.parseList();\n      case TokenKind.LBRACE:\n        return this.parseBlockVal();\n      default:\n        throw new PxfError(\n          pos,\n          `expected value, got ${tokenKindName(tok.kind)} (${JSON.stringify(tok.value)})`,\n        );\n    }\n  }\n\n  private parseList(): ListVal {\n    const pos = this.current.pos;\n    this.advance(); // consume [\n\n    const elements: Value[] = [];\n    while (\n      this.current.kind !== TokenKind.RBRACKET &&\n      this.current.kind !== TokenKind.EOF\n    ) {\n      elements.push(this.parseValue());\n      if (this.current.kind === TokenKind.COMMA) this.advance();\n    }\n    if (this.current.kind !== TokenKind.RBRACKET) {\n      throw new PxfError(\n        this.current.pos,\n        `expected ']', got ${tokenKindName(this.current.kind)}`,\n      );\n    }\n    this.advance();\n    return { kind: \"list\", pos, elements };\n  }\n\n  private parseBlockVal(): BlockVal {\n    const pos = this.current.pos;\n    this.advance(); // consume {\n    const entries = this.parseBody();\n    return { kind: \"blockVal\", pos, entries };\n  }\n\n  private parseBody(): Entry[] {\n    const entries: Entry[] = [];\n    while (\n      this.current.kind !== TokenKind.RBRACE &&\n      this.current.kind !== TokenKind.EOF\n    ) {\n      entries.push(this.parseEntry());\n    }\n    if (this.current.kind !== TokenKind.RBRACE) {\n      throw new PxfError(\n        this.current.pos,\n        `expected '}', got ${tokenKindName(this.current.kind)}`,\n      );\n    }\n    this.advance();\n    return entries;\n  }\n}\n\n/**\n * findMatchingBrace returns the index of the `}` that matches the `{`\n * at `openOffset`. Mirrors the lexer's string / comment handling so\n * braces inside literals don't confuse the brace count. Returns -1 on\n * unterminated input. Used by parseDirective to slice the raw bytes of\n * a directive's inline block.\n */\nexport function findMatchingBrace(input: string, openOffset: number): number {\n  let depth = 1;\n  let i = openOffset + 1;\n  const n = input.length;\n  const skipString = (j: number): number => {\n    if (j + 2 < n && input[j + 1] === '\"' && input[j + 2] === '\"') {\n      let k = j + 3;\n      while (k + 2 < n) {\n        if (input[k] === '\"' && input[k + 1] === '\"' && input[k + 2] === '\"') return k + 3;\n        k++;\n      }\n      return -1;\n    }\n    let k = j + 1;\n    while (k < n) {\n      if (input[k] === \"\\\\\") {\n        if (k + 1 >= n) return -1;\n        k += 2;\n        continue;\n      }\n      if (input[k] === '\"') return k + 1;\n      if (input[k] === \"\\n\") return -1;\n      k++;\n    }\n    return -1;\n  };\n  const skipBytes = (j: number): number => {\n    let k = j + 2; // past `b\"`\n    while (k < n) {\n      if (input[k] === \"\\\\\") {\n        if (k + 1 >= n) return -1;\n        k += 2;\n        continue;\n      }\n      if (input[k] === '\"') return k + 1;\n      if (input[k] === \"\\n\") return -1;\n      k++;\n    }\n    return -1;\n  };\n  const skipEol = (j: number): number => {\n    while (j < n && input[j] !== \"\\n\") j++;\n    return j;\n  };\n  while (i < n) {\n    const ch = input[i]!;\n    if (ch === \"{\") {\n      depth++;\n      i++;\n    } else if (ch === \"}\") {\n      depth--;\n      if (depth === 0) return i;\n      i++;\n    } else if (ch === '\"') {\n      i = skipString(i);\n      if (i < 0) return -1;\n    } else if (ch === \"b\" && i + 1 < n && input[i + 1] === '\"') {\n      i = skipBytes(i);\n      if (i < 0) return -1;\n    } else if (ch === \"#\") {\n      i = skipEol(i + 1);\n    } else if (ch === \"/\" && i + 1 < n && input[i + 1] === \"/\") {\n      i = skipEol(i + 2);\n    } else if (ch === \"/\" && i + 1 < n && input[i + 1] === \"*\") {\n      let j = i + 2;\n      let closed = false;\n      while (j + 1 < n) {\n        if (input[j] === \"*\" && input[j + 1] === \"/\") {\n          j += 2;\n          closed = true;\n          break;\n        }\n        j++;\n      }\n      if (!closed) return -1;\n      i = j;\n    } else {\n      i++;\n    }\n  }\n  return -1;\n}\n\n/**\n * Decode a base64-encoded string (standard or raw — the lexer accepts both).\n * Padding is added back if the input was raw, so atob can decode it.\n */\nexport function decodeBase64(s: string): Uint8Array {\n  let padded = s;\n  const mod = padded.length % 4;\n  if (mod === 2) padded += \"==\";\n  else if (mod === 3) padded += \"=\";\n  // mod 0 → already padded; mod 1 was rejected at lex time.\n  if (typeof atob !== \"undefined\") {\n    const bin = atob(padded);\n    const out = new Uint8Array(bin.length);\n    for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n    return out;\n  }\n  // Node fallback (Buffer is global in Node, may not be in some bundlers)\n  const buf = (globalThis as { Buffer?: { from(s: string, enc: string): Uint8Array } }).Buffer;\n  if (buf) return new Uint8Array(buf.from(padded, \"base64\"));\n  throw new Error(\"no base64 decoder available (atob / Buffer)\");\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Format an AST Document back to PXF source text, preserving comments.\n * Mirrors `protowire/encoding/pxf/format.go`.\n *\n * This is the \"round-trip via AST\" path used by the `protowire fmt`\n * subcommand. It is lossy in two ways the Go formatter is also lossy:\n *  - List elements are always comma-separated on output (commas are\n *    optional in input).\n *  - The string quoter only re-emits the escape sequences the lexer\n *    accepts (`\\\"`, `\\\\`, `\\n`, `\\t`, `\\r`); all other characters,\n *    including non-printable control chars, pass through verbatim.\n *    Use a `bytes` field for arbitrary binary data.\n */\n\nimport type {\n  Comment,\n  Document,\n  Entry,\n  Value,\n} from \"./ast.js\";\n\nexport interface FormatOptions {\n  /** Indent unit; default is two spaces. */\n  readonly indent?: string;\n}\n\nexport function format(doc: Document, options: FormatOptions = {}): string {\n  const indent = options.indent ?? \"  \";\n  const f = new Formatter(indent);\n\n  if (doc.typeUrl !== \"\") {\n    f.write(\"@type \");\n    f.write(doc.typeUrl);\n    f.write(\"\\n\\n\");\n  }\n\n  f.writeComments(doc.leadingComments, 0);\n  f.formatEntries(doc.entries, 0);\n\n  return f.finish();\n}\n\nclass Formatter {\n  private out: string[] = [];\n  constructor(private readonly indent: string) {}\n\n  finish(): string {\n    return this.out.join(\"\");\n  }\n\n  write(s: string): void {\n    this.out.push(s);\n  }\n\n  writeIndent(level: number): void {\n    for (let i = 0; i < level; i++) this.out.push(this.indent);\n  }\n\n  writeComments(comments: readonly Comment[], level: number): void {\n    for (const c of comments) {\n      this.writeIndent(level);\n      this.write(c.text);\n      this.write(\"\\n\");\n    }\n  }\n\n  formatEntries(entries: readonly Entry[], level: number): void {\n    for (const e of entries) {\n      switch (e.kind) {\n        case \"assignment\": {\n          this.writeComments(e.leadingComments, level);\n          this.writeIndent(level);\n          this.write(e.key);\n          this.write(\" = \");\n          this.formatValue(e.value, level);\n          if (e.trailingComment !== \"\") {\n            this.write(\" \");\n            this.write(e.trailingComment);\n          }\n          this.write(\"\\n\");\n          break;\n        }\n        case \"mapEntry\": {\n          this.writeComments(e.leadingComments, level);\n          this.writeIndent(level);\n          this.write(needsQuoting(e.key) ? quoteString(e.key) : e.key);\n          this.write(\": \");\n          this.formatValue(e.value, level);\n          if (e.trailingComment !== \"\") {\n            this.write(\" \");\n            this.write(e.trailingComment);\n          }\n          this.write(\"\\n\");\n          break;\n        }\n        case \"block\": {\n          this.writeComments(e.leadingComments, level);\n          this.writeIndent(level);\n          this.write(e.name);\n          this.write(\" {\\n\");\n          this.formatEntries(e.entries, level + 1);\n          this.writeIndent(level);\n          this.write(\"}\\n\");\n          break;\n        }\n      }\n    }\n  }\n\n  formatValue(v: Value, level: number): void {\n    switch (v.kind) {\n      case \"string\":\n        this.write(quoteString(v.value));\n        return;\n      case \"int\":\n        this.write(v.raw);\n        return;\n      case \"float\":\n        this.write(v.raw);\n        return;\n      case \"bool\":\n        this.write(v.value ? \"true\" : \"false\");\n        return;\n      case \"bytes\":\n        this.write('b\"');\n        this.write(encodeBase64(v.value));\n        this.write('\"');\n        return;\n      case \"null\":\n        this.write(\"null\");\n        return;\n      case \"ident\":\n        this.write(v.name);\n        return;\n      case \"timestamp\":\n        this.write(v.raw);\n        return;\n      case \"duration\":\n        this.write(v.raw);\n        return;\n      case \"list\": {\n        this.write(\"[\\n\");\n        for (let i = 0; i < v.elements.length; i++) {\n          this.writeIndent(level + 1);\n          this.formatValue(v.elements[i]!, level + 1);\n          if (i < v.elements.length - 1) this.write(\",\");\n          this.write(\"\\n\");\n        }\n        this.writeIndent(level);\n        this.write(\"]\");\n        return;\n      }\n      case \"blockVal\": {\n        this.write(\"{\\n\");\n        this.formatEntries(v.entries, level + 1);\n        this.writeIndent(level);\n        this.write(\"}\");\n        return;\n      }\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Re-emit a string in PXF source syntax. Mirrors the schema-bound encoder's\n * `writeQuotedString` (encode.ts): emits the simple escape mnemonics for\n * `\"`, `\\`, `\\n`, `\\r`, `\\t`, and `\\xHH` for any other byte under 0x20.\n * Code units ≥ 0x20 pass through literally — valid UTF-8 stays UTF-8.\n */\nconst HEX = \"0123456789abcdef\";\n\nfunction quoteString(s: string): string {\n  let out = '\"';\n  for (let i = 0; i < s.length; i++) {\n    const code = s.charCodeAt(i);\n    switch (code) {\n      case 0x22: out += '\\\\\"'; break;\n      case 0x5c: out += \"\\\\\\\\\"; break;\n      case 0x0a: out += \"\\\\n\"; break;\n      case 0x0d: out += \"\\\\r\"; break;\n      case 0x09: out += \"\\\\t\"; break;\n      default:\n        if (code < 0x20) {\n          out += \"\\\\x\" + HEX[(code >> 4) & 0xf] + HEX[code & 0xf];\n        } else {\n          out += s[i];\n        }\n    }\n  }\n  out += '\"';\n  return out;\n}\n\n/**\n * A map key needs quoting when it isn't a valid identifier — first char\n * must be `[A-Za-z_]`, subsequent chars must be `[A-Za-z0-9_]`. Numeric\n * keys (e.g. `404`) are emitted unquoted by their string form too, but\n * the parser accepts them as INT tokens, so this fast-path is fine.\n */\nfunction needsQuoting(s: string): boolean {\n  if (s === \"\") return true;\n  for (let i = 0; i < s.length; i++) {\n    const ch = s[i]!;\n    if (i === 0) {\n      if (!isIdentStart(ch)) return true;\n    } else {\n      if (!isIdentStart(ch) && !isDigit(ch)) return true;\n    }\n  }\n  return false;\n}\n\nfunction isIdentStart(ch: string): boolean {\n  return (ch >= \"a\" && ch <= \"z\") || (ch >= \"A\" && ch <= \"Z\") || ch === \"_\";\n}\n\nfunction isDigit(ch: string): boolean {\n  return ch >= \"0\" && ch <= \"9\";\n}\n\nfunction encodeBase64(bytes: Uint8Array): string {\n  if (typeof btoa !== \"undefined\") {\n    let bin = \"\";\n    for (let i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]!);\n    return btoa(bin);\n  }\n  const buf = (globalThis as { Buffer?: { from(b: Uint8Array): { toString(enc: string): string } } }).Buffer;\n  if (buf) return buf.from(bytes).toString(\"base64\");\n  throw new Error(\"no base64 encoder available (btoa / Buffer)\");\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Read PXF field annotations (`pxf.required`, `pxf.default`) and discover the\n * `_null` FieldMask. Mirrors `protowire/encoding/pxf/annotations.go`.\n *\n * The `pxf/annotations.proto` extensions are NOT registered with protobuf-es\n * here; the values land in `FieldOptions.$unknown`. We parse those raw\n * varint / length-delimited bytes directly, matching the Go fallback path.\n */\n\nimport { type DescField, type DescMessage } from \"@bufbuild/protobuf\";\n\nconst EXT_REQUIRED = 50_000;\nconst EXT_DEFAULT = 50_001;\n\nexport function isRequired(fd: DescField): boolean {\n  const ufs = fd.proto.options?.$unknown;\n  if (!ufs) return false;\n  for (const uf of ufs) {\n    if (uf.no === EXT_REQUIRED && uf.wireType === 0) {\n      // Varint payload — interpret as bool.\n      return readVarint(uf.data) !== 0n;\n    }\n  }\n  return false;\n}\n\nexport function getDefault(fd: DescField): string | undefined {\n  const ufs = fd.proto.options?.$unknown;\n  if (!ufs) return undefined;\n  for (const uf of ufs) {\n    if (uf.no === EXT_DEFAULT && uf.wireType === 2) {\n      // LengthDelimited payload: data starts with a length varint, then the\n      // string bytes. protobuf-es records the full prefixed payload here.\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\n/**\n * Returns the `_null` field on `desc` if it exists and is a\n * `google.protobuf.FieldMask`. Returns undefined otherwise.\n */\nexport function findNullMaskField(desc: DescMessage): DescField | undefined {\n  for (const f of desc.fields) {\n    if (\n      f.name === \"_null\" &&\n      f.fieldKind === \"message\" &&\n      f.message.typeName === \"google.protobuf.FieldMask\"\n    ) {\n      return f;\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(\"invalid varint in field 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(\"invalid varint in field options\");\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n//\n// Go-style duration parse + format. Public exports of the helpers\n// that the schema-bound `marshal` / `unmarshal` use internally for\n// `google.protobuf.Duration` fields.\n//\n// Consumer use case: an editor UI that round-trips a config file\n// holding Duration fields through unmarshal → typed message → user\n// edit → marshal. The UI's form field is naturally a Go-duration\n// string (`\"720h\"`, `\"1h30m\"`), not a `{seconds, nanos}` struct.\n// `formatGoDuration` converts the parsed Duration to its string\n// form for display; `parseGoDuration` converts the user's input\n// back to the `{seconds, nanos}` shape that `@bufbuild/protobuf`'s\n// `create()` accepts for the Duration init field.\n//\n// The format is Go's `time.Duration.String()` grammar:\n//   <signed> <units>\n//   units := <num>[.<frac>] (ns | us | µs | ms | s | m | h)+\n//\n// Examples:\n//   \"0s\"         → { seconds: 0n,    nanos: 0 }\n//   \"720h\"       → { seconds: 2592000n, nanos: 0 }\n//   \"1h30m\"      → { seconds: 5400n,  nanos: 0 }\n//   \"500µs\"      → { seconds: 0n,    nanos: 500000 }\n//   \"-2.5s\"      → { seconds: -2n,   nanos: -500000000 }\n//\n// The decoder and encoder both import from this module so a single\n// definition of Go-duration semantics powers both directions.\n\nconst NANOS_PER_SECOND = 1_000_000_000n;\nconst NANOS_PER_MICRO = 1_000n;\nconst NANOS_PER_MILLI = 1_000_000n;\n\nconst GO_DURATION_PART_RE = /^(\\d+)(\\.\\d+)?(ns|us|µs|ms|s|m|h)/;\n\nconst GO_DURATION_UNIT_NANOS: Record<string, bigint> = {\n  ns: 1n,\n  us: 1_000n,\n  \"µs\": 1_000n,\n  ms: 1_000_000n,\n  s: 1_000_000_000n,\n  m: 60_000_000_000n,\n  h: 3_600_000_000_000n,\n};\n\n/** DurationParts mirrors the seconds/nanos split that\n *  `google.protobuf.Duration` carries on the wire. Both fields share\n *  the overall sign — negative durations have negative seconds AND\n *  negative nanos (or zero on whichever doesn't contribute). */\nexport interface DurationParts {\n  seconds: bigint;\n  nanos: number;\n}\n\n/** Options for `formatGoDuration`. */\nexport interface FormatGoDurationOptions {\n  /**\n   * Strip trailing zero-valued h/m/s units from the emitted literal\n   * (e.g. `720h0m0s` → `720h`, `1h30m0s` → `1h30m`). Internal zero\n   * units between non-zero ones (`1h0m30s`) and sub-second forms\n   * (`<n>ns`, `<n>µs`, `<n>ms`) are preserved unchanged. The\n   * canonical zero `0s` always passes through.\n   *\n   * Default `false` preserves byte-equivalence with Go's\n   * `time.Duration.String()` (the property the v1.0 line guarantees\n   * for `marshal` output).\n   */\n  compact?: boolean;\n}\n\n/**\n * Parse a Go-style duration literal (e.g. `1h30m`, `-2.5s`, `100ms`)\n * into proto Duration `{seconds, nanos}`. Both parts share the\n * overall sign.\n *\n * Throws on syntax errors. Accepts a leading `+` or `-`; rejects an\n * empty string. The single-character literal `\"0\"` is treated as zero\n * even though it lacks a unit suffix (mirrors Go's `time.ParseDuration`\n * for the same edge case).\n *\n * Suitable for direct use as the init shape for `@bufbuild/protobuf`'s\n * `create(DurationSchema, ...)` — protobuf-es accepts a plain\n * `{seconds, nanos}` object there.\n */\nexport function parseGoDuration(s: string): DurationParts {\n  if (s === \"0\") return { seconds: 0n, nanos: 0 };\n  let neg = false;\n  if (s.startsWith(\"-\") || s.startsWith(\"+\")) {\n    neg = s[0] === \"-\";\n    s = s.slice(1);\n  }\n  if (s === \"\") throw new Error(\"invalid duration\");\n  let totalNanos = 0n;\n  while (s.length > 0) {\n    const m = GO_DURATION_PART_RE.exec(s);\n    if (m === null) throw new Error(`invalid duration: ${s}`);\n    const intPart = m[1]!;\n    const fracPart = m[2] ?? \"\";\n    const unit = m[3]!;\n    const unitNanos = GO_DURATION_UNIT_NANOS[unit];\n    if (unitNanos === undefined) throw new Error(`unknown duration unit: ${unit}`);\n    totalNanos += BigInt(intPart) * unitNanos;\n    if (fracPart !== \"\") {\n      const fracDigits = fracPart.slice(1);\n      const fracInt = BigInt(fracDigits);\n      const denom = 10n ** BigInt(fracDigits.length);\n      totalNanos += (fracInt * unitNanos) / denom;\n    }\n    s = s.slice(m[0].length);\n  }\n  if (neg) totalNanos = -totalNanos;\n  const sign = totalNanos < 0n ? -1n : 1n;\n  const abs = sign * totalNanos;\n  const secondsAbs = abs / NANOS_PER_SECOND;\n  const nanosAbs = abs % NANOS_PER_SECOND;\n  return {\n    seconds: sign * secondsAbs,\n    nanos: Number(sign * nanosAbs),\n  };\n}\n\n/**\n * Format a proto Duration `{seconds, nanos}` as a Go-style duration\n * string. Mirrors `time.Duration.String()`: leading-zero h/m units\n * are omitted, sub-second durations use the smallest unit\n * (ns / µs / ms) that gives a non-zero leading digit, and `0s` is the\n * canonical zero.\n *\n * Pass `{ compact: true }` to strip trailing zero h/m/s units\n * (`720h0m0s` → `720h`); the default is full Go-canonical output for\n * byte-equivalence with the Go reference.\n */\nexport function formatGoDuration(\n  d: DurationParts,\n  options?: FormatGoDurationOptions,\n): string {\n  const compact = options?.compact ?? false;\n\n  let total = d.seconds * NANOS_PER_SECOND + BigInt(d.nanos);\n  if (total === 0n) return \"0s\";\n\n  const neg = total < 0n;\n  if (neg) total = -total;\n\n  let out: string;\n  if (total < NANOS_PER_SECOND) {\n    if (total < NANOS_PER_MICRO) {\n      out = `${total.toString()}ns`;\n    } else if (total < NANOS_PER_MILLI) {\n      out = `${trimFraction(total, NANOS_PER_MICRO)}µs`;\n    } else {\n      out = `${trimFraction(total, NANOS_PER_MILLI)}ms`;\n    }\n  } else {\n    const secsPart = total / NANOS_PER_SECOND;\n    const fracNanos = total % NANOS_PER_SECOND;\n    const sec = secsPart % 60n;\n    const minTotal = secsPart / 60n;\n    const minute = minTotal % 60n;\n    const hour = minTotal / 60n;\n\n    const secStr = trimFraction(sec * NANOS_PER_SECOND + fracNanos, NANOS_PER_SECOND);\n\n    if (hour > 0n) {\n      out = `${hour.toString()}h${minute.toString()}m${secStr}s`;\n    } else if (minute > 0n) {\n      out = `${minute.toString()}m${secStr}s`;\n    } else {\n      out = `${secStr}s`;\n    }\n    if (compact) {\n      out = compactTrailingZeroUnits(out);\n    }\n  }\n  return neg ? `-${out}` : out;\n}\n\n/**\n * Trim trailing zero-valued h/m/s units. The `0` must be preceded by\n * a unit letter (h/m/s/µ/n), never by a digit — `720h` is never\n * trimmed to `72`. Internal zero units between non-zero ones\n * (`1h0m30s`) are preserved per Go's structural emit rule.\n */\nfunction compactTrailingZeroUnits(s: string): string {\n  if (s === \"0s\" || s === \"-0s\") return s;\n  const neg = s.startsWith(\"-\");\n  let body = neg ? s.slice(1) : s;\n  let prev = \"\";\n  while (prev !== body) {\n    prev = body;\n    const m = body.match(/^(.+?[hmsµn])0(h|m|s)$/);\n    if (m !== null) {\n      const trimmed = m[1];\n      if (trimmed !== undefined && trimmed !== \"\") {\n        body = trimmed;\n      }\n    }\n  }\n  return neg ? `-${body}` : body;\n}\n\n/**\n * Format `value / unit` with up to (digits-of-unit) fractional places,\n * trailing zeros trimmed. Returns \"5\" not \"5.000\". Used by\n * `formatGoDuration` to print \"1.5\" out of `1500ms` ÷ `1000ms`.\n */\nfunction trimFraction(value: bigint, unit: bigint): string {\n  const whole = value / unit;\n  const remainder = value % unit;\n  if (remainder === 0n) return whole.toString();\n  // Pad the remainder to width(unit)-1 zeros (i.e. 9 zeros for\n  // nanoseconds), then trim trailing zeros to keep the literal terse.\n  const unitDigits = unit.toString().length - 1;\n  const fracStr = remainder.toString().padStart(unitDigits, \"0\");\n  const trimmed = fracStr.replace(/0+$/, \"\");\n  return `${whole.toString()}.${trimmed}`;\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Tiny adapter helpers over `@bufbuild/protobuf` descriptors.\n *\n * protobuf-es v2 already exposes a clean discriminated-union DescField\n * (fieldKind: \"scalar\" | \"list\" | \"message\" | \"enum\" | \"map\") and ScalarType\n * enum, so we only need a few helpers. The most important one is lookup by\n * proto source name: DescMessage.field is keyed by JS-idiomatic localName,\n * but PXF text uses the proto source name (e.g. \"string_field\" not\n * \"stringField\").\n */\n\nimport { type DescField, type DescMessage } from \"@bufbuild/protobuf\";\n\n/**\n * Find a field by its proto source name (e.g. \"string_field\").\n * Returns undefined if no such field exists.\n */\nexport function findFieldByProtoName(\n  desc: DescMessage,\n  name: string,\n): DescField | undefined {\n  for (const f of desc.fields) {\n    if (f.name === name) return f;\n  }\n  return undefined;\n}\n\nconst wrapperTypes = new Set([\n  \"google.protobuf.BoolValue\",\n  \"google.protobuf.BytesValue\",\n  \"google.protobuf.DoubleValue\",\n  \"google.protobuf.FloatValue\",\n  \"google.protobuf.Int32Value\",\n  \"google.protobuf.Int64Value\",\n  \"google.protobuf.StringValue\",\n  \"google.protobuf.UInt32Value\",\n  \"google.protobuf.UInt64Value\",\n]);\n\nexport function isWrapperType(desc: DescMessage): boolean {\n  return wrapperTypes.has(desc.typeName);\n}\n\nexport function isTimestamp(desc: DescMessage): boolean {\n  return desc.typeName === \"google.protobuf.Timestamp\";\n}\n\nexport function isDuration(desc: DescMessage): boolean {\n  return desc.typeName === \"google.protobuf.Duration\";\n}\n\nexport function isAny(desc: DescMessage): boolean {\n  return desc.typeName === \"google.protobuf.Any\";\n}\n\nexport function isFieldMask(desc: DescMessage): boolean {\n  return desc.typeName === \"google.protobuf.FieldMask\";\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Field-level presence metadata from PXF decoding.\n * Mirrors `protowire/encoding/pxf/result.go`.\n *\n * Fields are identified by dotted paths (e.g., \"name\", \"nested.value\").\n *\n * Result also surfaces the document-root directives the decoder saw:\n *   - `directives()` — generic `@<name> *(prefix) [{ ... }]` blocks,\n *     in source order, excluding the spec-defined directives\n *     (`@type`, `@dataset`, `@proto`, `@entry`).\n *   - `datasets()` — `@dataset <type> ( cols ) row*` directives, in\n *     source order. A document with any `@dataset` has no body entries,\n *     so the rows are the document's payload — consumers walk\n *     `DatasetDirective.rows` and bind each row's cells to a fresh\n *     instance of `DatasetDirective.type` via their own schema.\n *   - `protos()` — `@proto <body>` directives (draft §3.4.5), in\n *     source order. Each carries one of four body shapes (anonymous,\n *     named, source, descriptor).\n */\n\nimport { type Directive, type DatasetDirective, type ProtoDirective } from \"./ast.js\";\n\nexport class Result {\n  private readonly nullFields = new Set<string>();\n  private readonly presentFields = new Set<string>();\n  private readonly directivesList: Directive[] = [];\n  private readonly datasetsList: DatasetDirective[] = [];\n  private readonly protosList: ProtoDirective[] = [];\n\n  markNull(path: string): void {\n    this.nullFields.add(path);\n    this.presentFields.add(path);\n  }\n\n  markPresent(path: string): void {\n    this.presentFields.add(path);\n  }\n\n  /** True if the field at `path` was explicitly set to null. */\n  isNull(path: string): boolean {\n    return this.nullFields.has(path);\n  }\n\n  /** True if the field at `path` was not mentioned in the input. */\n  isAbsent(path: string): boolean {\n    return !this.presentFields.has(path);\n  }\n\n  /** True if the field at `path` was set to a concrete (non-null) value. */\n  isSet(path: string): boolean {\n    return this.presentFields.has(path) && !this.nullFields.has(path);\n  }\n\n  /** Paths of all fields explicitly set to null. */\n  nullPaths(): string[] {\n    return [...this.nullFields];\n  }\n\n  // Directive accessors (PXF v0.72+).\n\n  directives(): readonly Directive[] {\n    return this.directivesList;\n  }\n\n  datasets(): readonly DatasetDirective[] {\n    return this.datasetsList;\n  }\n\n  protos(): readonly ProtoDirective[] {\n    return this.protosList;\n  }\n\n  addDirective(d: Directive): void {\n    this.directivesList.push(d);\n  }\n\n  addDataset(t: DatasetDirective): void {\n    this.datasetsList.push(t);\n  }\n\n  addProto(p: ProtoDirective): void {\n    this.protosList.push(p);\n  }\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Schema-bound PXF decoder.\n * Mirrors the AST-based path of `protowire/encoding/pxf/decode_fast.go`,\n * without the fused single-pass perf optimizations.\n *\n * Slice D4 scope: D3 plus `unmarshalFull` returning Result, `pxf.required` /\n * `pxf.default` annotations, and the `_null` FieldMask null-survival channel.\n */\n\nimport {\n  type DescField,\n  type DescMessage,\n  type DescOneof,\n  type MessageShape,\n  type Registry,\n  ScalarType,\n  create,\n  toBinary,\n} from \"@bufbuild/protobuf\";\nimport {\n  type ReflectList,\n  type ReflectMap,\n  type ReflectMessage,\n  reflect,\n} from \"@bufbuild/protobuf/reflect\";\n\nimport { findNullMaskField, getDefault, isRequired } from \"./annotations.js\";\nimport {\n  type Directive,\n  type DatasetDirective,\n  type DatasetRow,\n  type Value,\n} from \"./ast.js\";\nimport { parseGoDuration } from \"./duration.js\";\nimport { findMatchingBrace } from \"./parser.js\";\nimport {\n  findFieldByProtoName,\n  isAny,\n  isDuration,\n  isTimestamp,\n  isWrapperType,\n} from \"./descriptor.js\";\nimport { PxfError } from \"./errors.js\";\nimport { Lexer } from \"./lexer.js\";\nimport { Result } from \"./result.js\";\nimport { asValidationErrorMessage, FUTURE_RESERVED_DIRECTIVES, validateDescriptor } from \"./schema.js\";\nimport { type Position, type Token, TokenKind, tokenKindName } from \"./token.js\";\n\n/**\n * Resolves google.protobuf.Any type URLs to message descriptors. Mirrors the\n * Go interface of the same name. Pass a `Registry` directly (the URL prefix\n * is stripped automatically) or implement this interface for custom lookup\n * (e.g. lazy loading, alternative URL conventions).\n */\nexport interface TypeResolver {\n  findMessageByURL(url: string): DescMessage | undefined;\n}\n\n/**\n * Wrap a protobuf-es `Registry` as a `TypeResolver`. Strips the URL prefix\n * (everything up to and including the last `/`) before lookup, matching the\n * `type.googleapis.com/<typeName>` convention used by `anyPack`.\n */\nexport function registryAsTypeResolver(registry: Registry): TypeResolver {\n  return {\n    findMessageByURL(url) {\n      const slash = url.lastIndexOf(\"/\");\n      const name = slash >= 0 ? url.substring(slash + 1) : url;\n      return registry.getMessage(name);\n    },\n  };\n}\n\nexport interface UnmarshalOptions {\n  /** Silently skip fields not declared in the schema instead of erroring. */\n  discardUnknown?: boolean;\n  /**\n   * Resolves type URLs for `google.protobuf.Any` fields. When set, Any\n   * fields use sugar syntax (`@type = \"...\"` plus inline fields). When\n   * absent, Any fields decode as regular messages with `type_url` and\n   * `value` fields.\n   */\n  typeResolver?: TypeResolver;\n  /**\n   * Skip the per-call schema reserved-name check (draft §3.13).\n   * Callers that have already validated their descriptors (typically\n   * via `validateDescriptor` in a one-time codegen or registry-load\n   * pass) can set this to bypass the per-call recheck.\n   */\n  skipValidate?: boolean;\n}\n\nexport function unmarshal<Desc extends DescMessage>(\n  data: string,\n  schema: Desc,\n  options?: UnmarshalOptions,\n): MessageShape<Desc> {\n  checkSchema(schema, options);\n  const msg = create(schema);\n  const root = reflect(schema, msg);\n  new Decoder(\n    data,\n    options?.discardUnknown ?? false,\n    options?.typeResolver,\n    null,\n  ).decodeRoot(root);\n  return msg;\n}\n\nfunction checkSchema(desc: DescMessage, options: UnmarshalOptions | undefined): void {\n  if (options?.skipValidate) return;\n  const vs = validateDescriptor(desc);\n  const msg = asValidationErrorMessage(vs);\n  if (msg !== undefined) {\n    throw new PxfError({ line: 0, column: 0, offset: 0 }, msg);\n  }\n}\n\n/**\n * Decode PXF data into a fresh message and return field-presence metadata.\n *\n * Unlike `unmarshal`, this:\n * - tracks which fields were explicitly set, set to null, or absent;\n * - validates `(pxf.required) = true` fields and errors on absence;\n * - applies `(pxf.default) = \"...\"` defaults to absent (non-null) fields;\n * - mirrors null state into a top-level `_null` FieldMask field if present.\n */\nexport function unmarshalFull<Desc extends DescMessage>(\n  data: string,\n  schema: Desc,\n  options?: UnmarshalOptions,\n): { message: MessageShape<Desc>; result: Result } {\n  checkSchema(schema, options);\n  const msg = create(schema);\n  const root = reflect(schema, msg);\n  const result = new Result();\n  const decoder = new Decoder(\n    data,\n    options?.discardUnknown ?? false,\n    options?.typeResolver,\n    result,\n  );\n  decoder.decodeRoot(root);\n  postDecode(root, result, decoder.nullMaskFor(root.desc), \"\");\n  return { message: msg, result };\n}\n\nclass Decoder {\n  private readonly lex: Lexer;\n  private current!: Token;\n  private rootRefl: ReflectMessage | null = null;\n  private rootNullMaskFd: DescField | undefined = undefined;\n  private pathPrefix = \"\";\n\n  constructor(\n    input: string,\n    private readonly discardUnknown: boolean,\n    private readonly typeResolver: TypeResolver | undefined,\n    private readonly result: Result | null,\n  ) {\n    this.lex = new Lexer(input);\n    this.advance();\n  }\n\n  /** Cache the `_null` FieldMask descriptor for `desc`, if any. */\n  nullMaskFor(desc: DescMessage): DescField | undefined {\n    return findNullMaskField(desc);\n  }\n\n  private advance(): void {\n    for (;;) {\n      this.current = this.lex.next();\n      if (\n        this.current.kind !== TokenKind.COMMENT &&\n        this.current.kind !== TokenKind.NEWLINE\n      ) {\n        return;\n      }\n    }\n  }\n\n  /**\n   * Returns the current token kind as the full union, defeating control-flow\n   * narrowing that would otherwise carry across calls to `advance()`.\n   */\n  private peek(): TokenKind {\n    return this.current.kind;\n  }\n\n  private err(pos: Position, msg: string): PxfError {\n    return new PxfError(pos, msg);\n  }\n\n  /**\n   * Slice raw bytes between `{` and the matching `}` (both exclusive)\n   * without decoding the body as PXF entries — used for `@proto`\n   * brace-bounded bodies whose interior is protobuf source. LBRACE is\n   * current on entry. Repositions the lexer past the closing brace.\n   */\n  private captureProtoBraceBody(label: string, atPos: Position): Uint8Array {\n    const open = this.current.pos.offset;\n    const close = findMatchingBrace(this.lex.inputView(), open);\n    if (close < 0) {\n      throw this.err(atPos, `${label}: unmatched '{'`);\n    }\n    const body = new TextEncoder().encode(this.lex.inputView().slice(open + 1, close));\n    this.lex.repositionTo(close + 1);\n    this.advance();\n    return body;\n  }\n\n  decodeRoot(root: ReflectMessage): void {\n    this.rootRefl = root;\n    this.rootNullMaskFd = findNullMaskField(root.desc);\n    this.consumeDirectives();\n    this.decodeFields(root, false);\n  }\n\n  /**\n   * parseScalarCellValue consumes one scalar token at `this.current`\n   * and builds the corresponding Value. Mirrors the scalar branches of\n   * the AST parser's parseValue. Used by @dataset row parsing in\n   * consumeDirectives — list / block / unparseable cell tokens are\n   * already rejected by the caller.\n   */\n  private parseScalarCellValue(): Value {\n    const pos = this.current.pos;\n    const tok = this.current;\n    switch (tok.kind) {\n      case TokenKind.STRING: {\n        this.advance();\n        return { kind: \"string\", pos, value: tok.value };\n      }\n      case TokenKind.INT: {\n        this.advance();\n        return { kind: \"int\", pos, raw: tok.value };\n      }\n      case TokenKind.FLOAT: {\n        this.advance();\n        return { kind: \"float\", pos, raw: tok.value };\n      }\n      case TokenKind.BOOL: {\n        this.advance();\n        return { kind: \"bool\", pos, value: tok.value === \"true\" };\n      }\n      case TokenKind.BYTES: {\n        this.advance();\n        return { kind: \"bytes\", pos, value: decodeBase64(tok.value) };\n      }\n      case TokenKind.TIMESTAMP: {\n        this.advance();\n        return { kind: \"timestamp\", pos, raw: tok.value };\n      }\n      case TokenKind.DURATION: {\n        this.advance();\n        return { kind: \"duration\", pos, raw: tok.value };\n      }\n      case TokenKind.NULL: {\n        this.advance();\n        return { kind: \"null\", pos };\n      }\n      case TokenKind.IDENT: {\n        this.advance();\n        return { kind: \"ident\", pos, name: tok.value };\n      }\n      default:\n        throw this.err(\n          pos,\n          `unsupported @dataset cell value: ${tokenKindName(tok.kind)}`,\n        );\n    }\n  }\n\n  /**\n   * consumeDirectives drains any leading `@type` / `@<name>` / `@dataset`\n   * directives, leaving `this.current` at the first body token. When\n   * `result` is non-null (unmarshalFull path), populates\n   * `Result.directives()` and `Result.datasets()` with parsed Directive /\n   * DatasetDirective entries. When result is null (unmarshal path),\n   * performs the same syntactic walk for validation but discards the\n   * contents — no AST allocation occurs on the prelude.\n   *\n   * Enforces the standalone constraint (draft §3.4.4): a document\n   * containing any `@dataset` directive MUST NOT also carry `@type` or\n   * top-level field entries.\n   */\n  private consumeDirectives(): void {\n    let sawType = false;\n    let hasTable = false;\n    let firstTablePos: Position | null = null;\n    for (;;) {\n      switch (this.peek()) {\n        case TokenKind.AT_TYPE: {\n          if (hasTable) {\n            throw this.err(\n              this.current.pos,\n              \"@dataset directive cannot coexist with @type (draft §3.4.4)\",\n            );\n          }\n          sawType = true;\n          this.advance(); // consume @type\n          if (\n            this.peek() !== TokenKind.IDENT &&\n            this.peek() !== TokenKind.STRING\n          ) {\n            throw this.err(\n              this.current.pos,\n              `expected type name after @type, got ${tokenKindName(this.peek())}`,\n            );\n          }\n          this.advance();\n          break;\n        }\n        case TokenKind.AT_DIRECTIVE: {\n          const atPos = this.current.pos;\n          const name = this.current.value;\n          if (FUTURE_RESERVED_DIRECTIVES.has(name)) {\n            throw this.err(\n              atPos,\n              `@${name} is a spec-reserved directive name with no v1 semantics (draft §3.4.6)`,\n            );\n          }\n          const prefixes: string[] = [];\n          this.advance(); // consume @<name>\n          // Zero-or-more prefix identifiers with lookahead.\n          while (this.peek() === TokenKind.IDENT) {\n            const next = this.peekKind();\n            if (next === TokenKind.EQUALS || next === TokenKind.COLON) break;\n            prefixes.push(this.current.value);\n            this.advance();\n          }\n          // Back-compat: a single prefix populates the legacy `type`\n          // field, matching v0.72.0's single-Type shape.\n          const type = prefixes.length === 1 ? prefixes[0]! : \"\";\n          let body = \"\";\n          let hasBody = false;\n          // Optional inline block — slice raw bytes between `{` and\n          // `}` by walking brace depth at the token level. Strings /\n          // comments are handled by the lexer, so brace tokens here\n          // are always real braces.\n          if ((this.peek() as TokenKind) === TokenKind.LBRACE) {\n            const open = this.current.pos.offset;\n            let depth = 1;\n            this.advance();\n            while (depth > 0 && this.peek() !== TokenKind.EOF) {\n              if ((this.peek() as TokenKind) === TokenKind.LBRACE) {\n                depth++;\n              } else if ((this.peek() as TokenKind) === TokenKind.RBRACE) {\n                depth--;\n                if (depth === 0) {\n                  const close = this.current.pos.offset;\n                  body = this.lex.inputView().slice(open + 1, close);\n                  hasBody = true;\n                  this.advance();\n                  break;\n                }\n              }\n              this.advance();\n            }\n            if (depth !== 0) {\n              throw this.err(this.current.pos, \"unmatched '{' in directive block\");\n            }\n          }\n          if (this.result !== null) {\n            const dir: Directive = {\n              pos: atPos,\n              name,\n              prefixes,\n              type,\n              body,\n              hasBody,\n              leadingComments: [],\n            };\n            this.result.addDirective(dir);\n          }\n          break;\n        }\n        case TokenKind.AT_DATASET: {\n          if (sawType) {\n            throw this.err(\n              this.current.pos,\n              \"@dataset directive cannot coexist with @type (draft §3.4.4)\",\n            );\n          }\n          const tablePos = this.current.pos;\n          if (!hasTable) {\n            firstTablePos = tablePos;\n            hasTable = true;\n          }\n          this.advance(); // consume @dataset\n          // Optional row message type; MAY be omitted when an anonymous\n          // @proto precedes the @dataset (draft §3.4.4 Anonymous binding).\n          let tableType = \"\";\n          if (this.peek() === TokenKind.IDENT) {\n            tableType = this.current.value;\n            this.advance();\n          }\n          if ((this.peek() as TokenKind) !== TokenKind.LPAREN) {\n            throw this.err(\n              this.current.pos,\n              \"expected '(' to start @dataset column list\",\n            );\n          }\n          this.advance();\n          if (this.peek() !== TokenKind.IDENT) {\n            throw this.err(\n              this.current.pos,\n              \"@dataset column list must contain at least one field name\",\n            );\n          }\n          const columns: string[] = [];\n          for (;;) {\n            if (this.peek() !== TokenKind.IDENT) {\n              throw this.err(this.current.pos, \"expected column field name\");\n            }\n            if (this.current.value.includes(\".\")) {\n              throw this.err(\n                this.current.pos,\n                \"@dataset column has dotted path; not supported in v1 (draft §3.4.4)\",\n              );\n            }\n            columns.push(this.current.value);\n            this.advance();\n            if ((this.peek() as TokenKind) === TokenKind.COMMA) {\n              this.advance();\n              continue;\n            }\n            if ((this.peek() as TokenKind) === TokenKind.RPAREN) break;\n            throw this.err(\n              this.current.pos,\n              \"expected ',' or ')' in @dataset column list\",\n            );\n          }\n          this.advance(); // consume )\n          const nCols = columns.length;\n          const rows: DatasetRow[] = [];\n          // Zero or more rows; each cell is a single scalar token (or empty).\n          while ((this.peek() as TokenKind) === TokenKind.LPAREN) {\n            const rowPos = this.current.pos;\n            this.advance(); // (\n            const cells: (Value | null)[] = [];\n            // First cell.\n            if (\n              (this.peek() as TokenKind) === TokenKind.COMMA ||\n              (this.peek() as TokenKind) === TokenKind.RPAREN\n            ) {\n              cells.push(null);\n            } else if (\n              (this.peek() as TokenKind) === TokenKind.LBRACKET ||\n              (this.peek() as TokenKind) === TokenKind.LBRACE\n            ) {\n              throw this.err(\n                this.current.pos,\n                \"@dataset cells cannot contain list/block values in v1 (draft §3.4.4)\",\n              );\n            } else {\n              cells.push(this.parseScalarCellValue());\n            }\n            while ((this.peek() as TokenKind) === TokenKind.COMMA) {\n              this.advance();\n              if (\n                (this.peek() as TokenKind) === TokenKind.COMMA ||\n                (this.peek() as TokenKind) === TokenKind.RPAREN\n              ) {\n                cells.push(null);\n              } else if (\n                (this.peek() as TokenKind) === TokenKind.LBRACKET ||\n                (this.peek() as TokenKind) === TokenKind.LBRACE\n              ) {\n                throw this.err(\n                  this.current.pos,\n                  \"@dataset cells cannot contain list/block values in v1 (draft §3.4.4)\",\n                );\n              } else {\n                cells.push(this.parseScalarCellValue());\n              }\n            }\n            if ((this.peek() as TokenKind) !== TokenKind.RPAREN) {\n              throw this.err(this.current.pos, \"expected ',' or ')' in @dataset row\");\n            }\n            if (cells.length !== nCols) {\n              throw this.err(\n                rowPos,\n                `@dataset row has ${cells.length} cells, expected ${nCols} (column count)`,\n              );\n            }\n            this.advance(); // consume )\n            rows.push({ pos: rowPos, cells });\n          }\n          if (this.result !== null) {\n            const table: DatasetDirective = {\n              pos: tablePos,\n              type: tableType,\n              columns,\n              rows,\n              leadingComments: [],\n            };\n            this.result.addDataset(table);\n          }\n          break;\n        }\n        case TokenKind.AT_PROTO: {\n          const protoPos = this.current.pos;\n          this.advance(); // consume @proto\n          let shape: \"anonymous\" | \"named\" | \"source\" | \"descriptor\";\n          let typeName = \"\";\n          let body: Uint8Array;\n          switch (this.peek()) {\n            case TokenKind.LBRACE: {\n              shape = \"anonymous\";\n              body = this.captureProtoBraceBody(\"@proto (anonymous form)\", protoPos);\n              break;\n            }\n            case TokenKind.IDENT: {\n              shape = \"named\";\n              typeName = this.current.value;\n              this.advance();\n              if ((this.peek() as TokenKind) !== TokenKind.LBRACE) {\n                throw this.err(\n                  this.current.pos,\n                  `expected '{' after @proto ${typeName}, got ${tokenKindName(this.peek())}`,\n                );\n              }\n              body = this.captureProtoBraceBody(`@proto ${typeName}`, protoPos);\n              break;\n            }\n            case TokenKind.STRING: {\n              shape = \"source\";\n              body = new TextEncoder().encode(this.current.value);\n              this.advance();\n              break;\n            }\n            case TokenKind.BYTES: {\n              shape = \"descriptor\";\n              try {\n                body = decodeBase64(this.current.value);\n              } catch (e) {\n                throw this.err(\n                  this.current.pos,\n                  `@proto descriptor body: invalid base64: ${(e as Error).message}`,\n                );\n              }\n              this.advance();\n              break;\n            }\n            default:\n              throw this.err(\n                this.current.pos,\n                `expected '{', dotted identifier, triple-quoted string, or b\"...\" after @proto, got ${tokenKindName(this.peek())}`,\n              );\n          }\n          if (this.result !== null) {\n            this.result.addProto({ pos: protoPos, shape, typeName, body, leadingComments: [] });\n          }\n          break;\n        }\n        default:\n          if (hasTable && this.peek() !== TokenKind.EOF) {\n            throw this.err(\n              firstTablePos!,\n              \"@dataset directive cannot coexist with top-level field entries (draft §3.4.4)\",\n            );\n          }\n          return;\n      }\n    }\n  }\n\n  /** peekKind: one-token lookahead without consumption. Used by the\n   * directive-prefix disambiguator. */\n  private peekKind(): TokenKind {\n    const snap = this.lex.snapshot();\n    const saved = this.current;\n    this.advance();\n    const k = this.current.kind;\n    this.lex.restore(snap);\n    this.current = saved;\n    return k;\n  }\n\n  private decodeFields(parent: ReflectMessage, inBlock: boolean): void {\n    const desc = parent.desc;\n    const setOneofs = new Map<string, string>();\n\n    for (;;) {\n      if (inBlock && this.peek() === TokenKind.RBRACE) {\n        this.advance();\n        return;\n      }\n      if (this.peek() === TokenKind.EOF) {\n        if (inBlock) throw this.err(this.current.pos, \"expected '}', got EOF\");\n        return;\n      }\n\n      const pos = this.current.pos;\n      const keyKind = this.peek();\n      if (\n        keyKind !== TokenKind.IDENT &&\n        keyKind !== TokenKind.STRING &&\n        keyKind !== TokenKind.INT\n      ) {\n        throw this.err(\n          pos,\n          `expected identifier, string, or integer, got ${tokenKindName(keyKind)} (${JSON.stringify(this.current.value)})`,\n        );\n      }\n      const key = this.current.value;\n      this.advance();\n\n      switch (this.peek()) {\n        case TokenKind.EQUALS: {\n          this.advance();\n          const fd = findFieldByProtoName(desc, key);\n          if (!fd) {\n            if (this.discardUnknown) {\n              this.skipValue();\n              continue;\n            }\n            throw this.err(pos, `unknown field ${JSON.stringify(key)} in ${desc.typeName}`);\n          }\n          this.checkOneof(fd, setOneofs, pos);\n          if (this.peek() === TokenKind.NULL) {\n            this.markNull(fd);\n            this.advance();\n            continue;\n          }\n          this.markPresent(fd);\n          if (fd.fieldKind === \"message\" && this.result) {\n            this.decodeMessageWithPath(parent, fd);\n          } else {\n            this.decodeFieldValue(parent, fd);\n          }\n          break;\n        }\n        case TokenKind.LBRACE: {\n          this.advance();\n          const fd = findFieldByProtoName(desc, key);\n          if (!fd) {\n            if (this.discardUnknown) {\n              this.skipBraced();\n              continue;\n            }\n            throw this.err(pos, `unknown field ${JSON.stringify(key)} in ${desc.typeName}`);\n          }\n          if (fd.fieldKind !== \"message\") {\n            if (fd.fieldKind === \"list\") {\n              throw this.err(\n                pos,\n                `repeated field ${JSON.stringify(key)} must use list syntax: ${key} = [...]`,\n              );\n            }\n            if (fd.fieldKind === \"map\") {\n              throw this.err(\n                pos,\n                `map field ${JSON.stringify(key)} must use assignment syntax: ${key} = { ... }`,\n              );\n            }\n            throw this.err(\n              pos,\n              `field ${JSON.stringify(key)} is not a message type, cannot use block syntax`,\n            );\n          }\n          this.checkOneof(fd, setOneofs, pos);\n          this.markPresent(fd);\n          const sub = create(fd.message);\n          const subRefl = reflect(fd.message, sub);\n          if (\n            isAny(fd.message) &&\n            this.typeResolver &&\n            this.peek() === TokenKind.AT_TYPE\n          ) {\n            this.decodeAnyInner(subRefl);\n          } else {\n            const saved = this.pathPrefix;\n            if (this.result) this.pathPrefix = saved + fd.name + \".\";\n            this.decodeFields(subRefl, true);\n            this.pathPrefix = saved;\n          }\n          parent.set(fd, subRefl);\n          break;\n        }\n        case TokenKind.COLON:\n          throw this.err(\n            pos,\n            \"unexpected ':' in message context, use '=' for field assignments\",\n          );\n        default:\n          throw this.err(\n            this.current.pos,\n            `expected '=', ':', or '{' after ${JSON.stringify(key)}, got ${tokenKindName(this.peek())}`,\n          );\n      }\n    }\n  }\n\n  private markPresent(fd: DescField): void {\n    if (!this.result) return;\n    this.result.markPresent(this.pathPrefix + fd.name);\n  }\n\n  private markNull(fd: DescField): void {\n    if (!this.result) return;\n    const path = this.pathPrefix + fd.name;\n    this.result.markNull(path);\n    if (this.rootRefl && this.rootNullMaskFd) {\n      const fmRefl = this.rootRefl.get(this.rootNullMaskFd) as ReflectMessage;\n      const pathsFd = findFieldByProtoName(fmRefl.desc, \"paths\");\n      if (pathsFd) {\n        const list = fmRefl.get(pathsFd) as ReflectList;\n        list.add(path);\n      }\n      this.rootRefl.set(this.rootNullMaskFd, fmRefl);\n    }\n  }\n\n  /**\n   * Like the regular EQUALS-message branch, but extends `pathPrefix` so the\n   * Result captures dotted paths for nested fields. Only used when a Result\n   * is in play — the cheap path stays in `decodeFieldValue`.\n   */\n  private decodeMessageWithPath(parent: ReflectMessage, fd: DescField): void {\n    if (fd.fieldKind !== \"message\") {\n      throw this.err(this.current.pos, \"internal: decodeMessageWithPath on non-message field\");\n    }\n    const sub = create(fd.message);\n    const subRefl = reflect(fd.message, sub);\n    if (this.tryDecodeWkt(subRefl)) {\n      parent.set(fd, subRefl);\n      return;\n    }\n    if (this.peek() !== TokenKind.LBRACE) {\n      throw this.err(\n        this.current.pos,\n        `expected '{' for message field ${JSON.stringify(fd.name)}`,\n      );\n    }\n    this.advance();\n    if (\n      isAny(fd.message) &&\n      this.typeResolver &&\n      this.peek() === TokenKind.AT_TYPE\n    ) {\n      this.decodeAnyInner(subRefl);\n    } else {\n      const saved = this.pathPrefix;\n      this.pathPrefix = saved + fd.name + \".\";\n      this.decodeFields(subRefl, true);\n      this.pathPrefix = saved;\n    }\n    parent.set(fd, subRefl);\n  }\n\n  private checkOneof(\n    fd: DescField,\n    setOneofs: Map<string, string>,\n    pos: Position,\n  ): void {\n    const oo: DescOneof | undefined =\n      fd.fieldKind === \"scalar\" ||\n      fd.fieldKind === \"message\" ||\n      fd.fieldKind === \"enum\"\n        ? fd.oneof\n        : undefined;\n    if (!oo) return;\n    const prev = setOneofs.get(oo.name);\n    if (prev !== undefined) {\n      throw this.err(\n        pos,\n        `oneof ${JSON.stringify(oo.name)}: field ${JSON.stringify(fd.name)} conflicts with already-set field ${JSON.stringify(prev)}`,\n      );\n    }\n    setOneofs.set(oo.name, fd.name);\n  }\n\n  private decodeFieldValue(parent: ReflectMessage, fd: DescField): void {\n    if (fd.fieldKind === \"list\") {\n      this.decodeListInline(parent, fd);\n      return;\n    }\n    if (fd.fieldKind === \"map\") {\n      this.decodeMapInline(parent, fd);\n      return;\n    }\n    if (fd.fieldKind === \"message\") {\n      const sub = create(fd.message);\n      const subRefl = reflect(fd.message, sub);\n      if (this.tryDecodeWkt(subRefl)) {\n        parent.set(fd, subRefl);\n        return;\n      }\n      if (this.peek() !== TokenKind.LBRACE) {\n        throw this.err(\n          this.current.pos,\n          `expected '{' for message field ${JSON.stringify(fd.name)}`,\n        );\n      }\n      this.advance();\n      if (\n        isAny(fd.message) &&\n        this.typeResolver &&\n        this.peek() === TokenKind.AT_TYPE\n      ) {\n        this.decodeAnyInner(subRefl);\n      } else {\n        this.decodeFields(subRefl, true);\n      }\n      parent.set(fd, subRefl);\n      return;\n    }\n    if (fd.fieldKind === \"enum\") {\n      const v = this.consumeEnum(fd);\n      parent.set(fd, v);\n      return;\n    }\n    // scalar\n    const v = this.consumeScalar(fd, fd.scalar);\n    parent.set(fd, v);\n  }\n\n  /**\n   * Try to decode a Timestamp/Duration/wrapper sugar value into `target`.\n   * Returns true if a WKT shortcut matched and was consumed; false to fall\n   * through to the regular `{ ... }` block decode.\n   */\n  private tryDecodeWkt(target: ReflectMessage): boolean {\n    const mdesc = target.desc;\n    if (isTimestamp(mdesc) && this.peek() === TokenKind.TIMESTAMP) {\n      const { seconds, nanos } = parseRfc3339(this.current.value);\n      setSecondsNanos(target, seconds, nanos);\n      this.advance();\n      return true;\n    }\n    if (isDuration(mdesc) && this.peek() === TokenKind.DURATION) {\n      const { seconds, nanos } = parseGoDuration(this.current.value);\n      setSecondsNanos(target, seconds, nanos);\n      this.advance();\n      return true;\n    }\n    if (isWrapperType(mdesc) && this.peek() !== TokenKind.LBRACE) {\n      const innerFd = findFieldByProtoName(mdesc, \"value\");\n      if (!innerFd || innerFd.fieldKind !== \"scalar\") {\n        throw this.err(\n          this.current.pos,\n          `internal: wrapper ${mdesc.typeName} missing scalar 'value' field`,\n        );\n      }\n      const v = this.consumeScalar(innerFd, innerFd.scalar);\n      target.set(innerFd, v);\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Decode `google.protobuf.Any` sugar, with the opening `{` already consumed.\n   * Expects the body `@type = \"url\"` followed by inline fields of the\n   * resolved inner message, terminated by `}`. Pack the inner message to\n   * binary and store it as `Any.type_url` + `Any.value`.\n   */\n  private decodeAnyInner(target: ReflectMessage): void {\n    const resolver = this.typeResolver;\n    if (!resolver) {\n      throw this.err(this.current.pos, \"internal: decodeAnyInner without resolver\");\n    }\n    if (this.peek() !== TokenKind.AT_TYPE) {\n      throw this.err(this.current.pos, \"Any field requires @type as first entry\");\n    }\n    this.advance();\n    if (this.peek() !== TokenKind.EQUALS) {\n      throw this.err(this.current.pos, \"expected '=' after @type\");\n    }\n    this.advance();\n    if (this.peek() !== TokenKind.STRING) {\n      throw this.err(this.current.pos, \"expected string type URL after @type =\");\n    }\n    const typeURL = this.current.value;\n    const urlPos = this.current.pos;\n    this.advance();\n\n    const innerDesc = resolver.findMessageByURL(typeURL);\n    if (!innerDesc) {\n      throw this.err(urlPos, `cannot resolve Any type ${JSON.stringify(typeURL)}`);\n    }\n\n    const inner = create(innerDesc);\n    const innerRefl = reflect(innerDesc, inner);\n    this.decodeFields(innerRefl, true);\n\n    const packed = toBinary(innerDesc, inner);\n\n    const typeUrlFd = findFieldByProtoName(target.desc, \"type_url\");\n    const valueFd = findFieldByProtoName(target.desc, \"value\");\n    if (!typeUrlFd || !valueFd) {\n      throw this.err(\n        urlPos,\n        `internal: ${target.desc.typeName} missing type_url/value fields`,\n      );\n    }\n    target.set(typeUrlFd, typeURL);\n    target.set(valueFd, packed);\n  }\n\n  private decodeListInline(parent: ReflectMessage, fd: DescField): void {\n    if (fd.fieldKind !== \"list\") {\n      throw this.err(this.current.pos, \"internal: decodeListInline called on non-list field\");\n    }\n    if (this.peek() !== TokenKind.LBRACKET) {\n      throw this.err(\n        this.current.pos,\n        `expected '[' for repeated field ${JSON.stringify(fd.name)}`,\n      );\n    }\n    this.advance();\n\n    const list = parent.get(fd) as ReflectList;\n\n    while (this.peek() !== TokenKind.RBRACKET && this.peek() !== TokenKind.EOF) {\n      if (this.peek() === TokenKind.NULL) {\n        throw this.err(\n          this.current.pos,\n          `null is not allowed in repeated field ${JSON.stringify(fd.name)}`,\n        );\n      }\n      if (fd.listKind === \"message\") {\n        const elem = create(fd.message);\n        const elemRefl = reflect(fd.message, elem);\n        if (!this.tryDecodeWkt(elemRefl)) {\n          if (this.peek() !== TokenKind.LBRACE) {\n            throw this.err(this.current.pos, \"expected '{' for repeated message element\");\n          }\n          this.advance();\n          this.decodeFields(elemRefl, true);\n        }\n        list.add(elemRefl);\n      } else if (fd.listKind === \"enum\") {\n        list.add(this.consumeEnum(fd));\n      } else {\n        list.add(this.consumeScalar(fd, fd.scalar));\n      }\n      if (this.peek() === TokenKind.COMMA) this.advance();\n    }\n\n    if (this.peek() !== TokenKind.RBRACKET) {\n      throw this.err(\n        this.current.pos,\n        `expected ']', got ${tokenKindName(this.peek())}`,\n      );\n    }\n    this.advance();\n  }\n\n  private decodeMapInline(parent: ReflectMessage, fd: DescField): void {\n    if (fd.fieldKind !== \"map\") {\n      throw this.err(this.current.pos, \"internal: decodeMapInline called on non-map field\");\n    }\n    if (this.peek() !== TokenKind.LBRACE) {\n      throw this.err(\n        this.current.pos,\n        `expected '{' for map field ${JSON.stringify(fd.name)}`,\n      );\n    }\n    this.advance();\n\n    const map = parent.get(fd) as ReflectMap;\n    const keyKind = fd.mapKey;\n\n    while (this.peek() !== TokenKind.RBRACE && this.peek() !== TokenKind.EOF) {\n      const pos = this.current.pos;\n      const tk = this.peek();\n      if (\n        tk !== TokenKind.IDENT &&\n        tk !== TokenKind.STRING &&\n        tk !== TokenKind.INT &&\n        tk !== TokenKind.BOOL\n      ) {\n        throw this.err(pos, `expected map key, got ${tokenKindName(tk)}`);\n      }\n      const keyStr = this.current.value;\n      this.advance();\n\n      switch (this.peek()) {\n        case TokenKind.COLON:\n          this.advance();\n          break;\n        case TokenKind.EQUALS:\n          throw this.err(\n            this.current.pos,\n            \"unexpected '=' in map, use ':' for map entries\",\n          );\n        default:\n          throw this.err(\n            this.current.pos,\n            `expected ':' after map key, got ${tokenKindName(this.peek())}`,\n          );\n      }\n\n      const k = decodeMapKey(keyKind, keyStr, pos);\n\n      if (this.peek() === TokenKind.NULL) {\n        throw this.err(\n          this.current.pos,\n          `null is not allowed as map value in field ${JSON.stringify(fd.name)}`,\n        );\n      }\n\n      let v: unknown;\n      if (fd.mapKind === \"message\") {\n        const elem = create(fd.message);\n        const elemRefl = reflect(fd.message, elem);\n        if (!this.tryDecodeWkt(elemRefl)) {\n          if (this.peek() !== TokenKind.LBRACE) {\n            throw this.err(this.current.pos, \"expected '{' for map message value\");\n          }\n          this.advance();\n          this.decodeFields(elemRefl, true);\n        }\n        v = elemRefl;\n      } else if (fd.mapKind === \"enum\") {\n        v = this.consumeEnum(fd);\n      } else {\n        v = this.consumeScalar(fd, fd.scalar);\n      }\n\n      (map as ReflectMap<unknown, unknown>).set(k, v);\n    }\n\n    if (this.peek() !== TokenKind.RBRACE) {\n      throw this.err(\n        this.current.pos,\n        `expected '}', got ${tokenKindName(this.peek())}`,\n      );\n    }\n    this.advance();\n  }\n\n  private consumeScalar(fd: DescField, kind: ScalarType): unknown {\n    const pos = this.current.pos;\n\n    const tk = this.peek();\n    switch (kind) {\n      case ScalarType.STRING: {\n        if (tk !== TokenKind.STRING) {\n          throw this.err(pos, `expected string for field ${JSON.stringify(fd.name)}`);\n        }\n        const v = this.current.value;\n        this.advance();\n        return v;\n      }\n      case ScalarType.BOOL: {\n        if (tk !== TokenKind.BOOL) {\n          throw this.err(pos, `expected bool for field ${JSON.stringify(fd.name)}`);\n        }\n        const v = this.current.value === \"true\";\n        this.advance();\n        return v;\n      }\n      case ScalarType.INT32:\n      case ScalarType.SINT32:\n      case ScalarType.SFIXED32: {\n        if (tk !== TokenKind.INT) {\n          throw this.err(pos, `expected integer for field ${JSON.stringify(fd.name)}`);\n        }\n        const n = parseSignedInt32(this.current.value);\n        if (n === null) {\n          throw this.err(pos, `invalid int32: ${this.current.value}`);\n        }\n        this.advance();\n        return n;\n      }\n      case ScalarType.UINT32:\n      case ScalarType.FIXED32: {\n        if (tk !== TokenKind.INT) {\n          throw this.err(pos, `expected integer for field ${JSON.stringify(fd.name)}`);\n        }\n        const n = parseUnsignedInt32(this.current.value);\n        if (n === null) {\n          throw this.err(pos, `invalid uint32: ${this.current.value}`);\n        }\n        this.advance();\n        return n;\n      }\n      case ScalarType.INT64:\n      case ScalarType.SINT64:\n      case ScalarType.SFIXED64: {\n        if (tk !== TokenKind.INT) {\n          throw this.err(pos, `expected integer for field ${JSON.stringify(fd.name)}`);\n        }\n        const v = parseInt64(this.current.value);\n        if (v === null) {\n          throw this.err(pos, `invalid int64: ${this.current.value}`);\n        }\n        this.advance();\n        return v;\n      }\n      case ScalarType.UINT64:\n      case ScalarType.FIXED64: {\n        if (tk !== TokenKind.INT) {\n          throw this.err(pos, `expected integer for field ${JSON.stringify(fd.name)}`);\n        }\n        const v = parseUint64(this.current.value);\n        if (v === null) {\n          throw this.err(pos, `invalid uint64: ${this.current.value}`);\n        }\n        this.advance();\n        return v;\n      }\n      case ScalarType.FLOAT: {\n        if (tk !== TokenKind.FLOAT && tk !== TokenKind.INT) {\n          throw this.err(pos, `expected number for field ${JSON.stringify(fd.name)}`);\n        }\n        const f = Number(this.current.value);\n        if (Number.isNaN(f) && this.current.value !== \"NaN\") {\n          throw this.err(pos, `invalid float: ${this.current.value}`);\n        }\n        this.advance();\n        return Math.fround(f);\n      }\n      case ScalarType.DOUBLE: {\n        if (tk !== TokenKind.FLOAT && tk !== TokenKind.INT) {\n          throw this.err(pos, `expected number for field ${JSON.stringify(fd.name)}`);\n        }\n        const f = Number(this.current.value);\n        if (Number.isNaN(f) && this.current.value !== \"NaN\") {\n          throw this.err(pos, `invalid double: ${this.current.value}`);\n        }\n        this.advance();\n        return f;\n      }\n      case ScalarType.BYTES: {\n        if (tk !== TokenKind.BYTES) {\n          throw this.err(pos, `expected bytes for field ${JSON.stringify(fd.name)}`);\n        }\n        const v = decodeBase64(this.current.value);\n        this.advance();\n        return v;\n      }\n      default:\n        throw this.err(pos, `unsupported scalar kind ${kind} for field ${JSON.stringify(fd.name)}`);\n    }\n  }\n\n  private consumeEnum(fd: DescField): number {\n    const pos = this.current.pos;\n    const enumDesc = fd.enum;\n    if (!enumDesc) {\n      throw this.err(pos, `internal: missing enum descriptor for field ${JSON.stringify(fd.name)}`);\n    }\n    const tk = this.peek();\n    if (tk === TokenKind.IDENT) {\n      const found = enumDesc.values.find((ev) => ev.name === this.current.value);\n      if (!found) {\n        throw this.err(\n          pos,\n          `unknown enum value ${JSON.stringify(this.current.value)} for ${enumDesc.typeName}`,\n        );\n      }\n      this.advance();\n      return found.number;\n    }\n    if (tk === TokenKind.INT) {\n      const n = parseSignedInt32(this.current.value);\n      if (n === null) {\n        throw this.err(pos, `invalid enum number: ${this.current.value}`);\n      }\n      this.advance();\n      return n;\n    }\n    throw this.err(pos, `expected enum name or number for field ${JSON.stringify(fd.name)}`);\n  }\n\n  private skipValue(): void {\n    const tk = this.peek();\n    if (tk === TokenKind.LBRACE) {\n      this.advance();\n      this.skipBraced();\n      return;\n    }\n    if (tk === TokenKind.LBRACKET) {\n      this.advance();\n      this.skipBracketed();\n      return;\n    }\n    this.advance();\n  }\n\n  private skipBraced(): void {\n    let depth = 1;\n    while (depth > 0 && this.peek() !== TokenKind.EOF) {\n      const tk = this.peek();\n      if (tk === TokenKind.LBRACE) depth++;\n      else if (tk === TokenKind.RBRACE) depth--;\n      this.advance();\n    }\n  }\n\n  private skipBracketed(): void {\n    let depth = 1;\n    while (depth > 0 && this.peek() !== TokenKind.EOF) {\n      const tk = this.peek();\n      if (tk === TokenKind.LBRACKET) depth++;\n      else if (tk === TokenKind.RBRACKET) depth--;\n      this.advance();\n    }\n  }\n}\n\nfunction parseSignedInt32(s: string): number | null {\n  if (!/^-?\\d+$/.test(s)) return null;\n  const n = Number(s);\n  if (!Number.isInteger(n) || n < -2147483648 || n > 2147483647) return null;\n  return n;\n}\n\nfunction parseUnsignedInt32(s: string): number | null {\n  if (!/^\\d+$/.test(s)) return null;\n  const n = Number(s);\n  if (!Number.isInteger(n) || n < 0 || n > 4294967295) return null;\n  return n;\n}\n\nfunction parseInt64(s: string): bigint | null {\n  if (!/^-?\\d+$/.test(s)) return null;\n  try {\n    const v = BigInt(s);\n    if (v < -(1n << 63n) || v > (1n << 63n) - 1n) return null;\n    return v;\n  } catch {\n    return null;\n  }\n}\n\nfunction parseUint64(s: string): bigint | null {\n  if (!/^\\d+$/.test(s)) return null;\n  try {\n    const v = BigInt(s);\n    if (v < 0n || v > (1n << 64n) - 1n) return null;\n    return v;\n  } catch {\n    return null;\n  }\n}\n\nfunction decodeBase64(s: string): Uint8Array {\n  const buf = Buffer.from(s, \"base64\");\n  return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\nconst RFC3339_FRAC_RE =\n  /^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$/;\n\n/**\n * Parse an RFC 3339 timestamp into seconds-since-epoch and a non-negative\n * nanos remainder (matching the proto Timestamp invariant). The lexer has\n * already validated the syntax; here we just split out fractional seconds at\n * full nanosecond precision, which `Date.parse` cannot supply directly.\n */\nfunction parseRfc3339(s: string): { seconds: bigint; nanos: number } {\n  const m = RFC3339_FRAC_RE.exec(s);\n  if (!m) throw new Error(`invalid RFC 3339 timestamp: ${s}`);\n  const ms = Date.parse(s);\n  if (Number.isNaN(ms)) throw new Error(`invalid RFC 3339 timestamp: ${s}`);\n  let nanos = 0;\n  const frac = m[2];\n  if (frac) {\n    let digits = frac.slice(1);\n    if (digits.length > 9) digits = digits.slice(0, 9);\n    while (digits.length < 9) digits += \"0\";\n    nanos = Number(digits);\n  }\n  // Floor toward -∞ so `nanos` stays in [0, 1e9), matching proto Timestamp.\n  const seconds = BigInt(Math.floor(ms / 1000));\n  return { seconds, nanos };\n}\n\nfunction setSecondsNanos(target: ReflectMessage, seconds: bigint, nanos: number): void {\n  const sf = findFieldByProtoName(target.desc, \"seconds\");\n  const nf = findFieldByProtoName(target.desc, \"nanos\");\n  if (!sf || !nf) {\n    throw new Error(`${target.desc.typeName} missing seconds/nanos fields`);\n  }\n  target.set(sf, seconds);\n  target.set(nf, nanos);\n}\n\nfunction decodeMapKey(kind: ScalarType, key: string, pos: Position): unknown {\n  switch (kind) {\n    case ScalarType.STRING:\n      return key;\n    case ScalarType.INT32:\n    case ScalarType.SINT32:\n    case ScalarType.SFIXED32: {\n      const n = parseSignedInt32(key);\n      if (n === null) throw new PxfError(pos, `invalid int32 map key: ${key}`);\n      return n;\n    }\n    case ScalarType.UINT32:\n    case ScalarType.FIXED32: {\n      const n = parseUnsignedInt32(key);\n      if (n === null) throw new PxfError(pos, `invalid uint32 map key: ${key}`);\n      return n;\n    }\n    case ScalarType.INT64:\n    case ScalarType.SINT64:\n    case ScalarType.SFIXED64: {\n      const v = parseInt64(key);\n      if (v === null) throw new PxfError(pos, `invalid int64 map key: ${key}`);\n      return v;\n    }\n    case ScalarType.UINT64:\n    case ScalarType.FIXED64: {\n      const v = parseUint64(key);\n      if (v === null) throw new PxfError(pos, `invalid uint64 map key: ${key}`);\n      return v;\n    }\n    case ScalarType.BOOL:\n      if (key === \"true\") return true;\n      if (key === \"false\") return false;\n      throw new PxfError(pos, `invalid bool map key: ${key}`);\n    default:\n      throw new PxfError(pos, `unsupported map key kind: ${kind}`);\n  }\n}\n\n/**\n * Validate `(pxf.required) = true` annotations and apply `(pxf.default)`\n * values to absent fields. Recurses into present, non-null nested messages,\n * matching the Go reference's `postDecode`. The `_null` field itself is\n * skipped since it's metadata, not user data.\n */\nfunction postDecode(\n  parent: ReflectMessage,\n  result: Result,\n  nullMaskFd: DescField | undefined,\n  pathPrefix: string,\n): void {\n  for (const fd of parent.desc.fields) {\n    if (nullMaskFd && fd.number === nullMaskFd.number) continue;\n    const path = pathPrefix + fd.name;\n    if (result.isAbsent(path)) {\n      if (isRequired(fd)) {\n        throw new PxfError({ line: 1, column: 1, offset: 0 }, `required field ${JSON.stringify(path)} is absent`);\n      }\n      const def = getDefault(fd);\n      if (def !== undefined) {\n        applyDefault(parent, fd, def);\n      }\n      continue;\n    }\n    // Field is present. Skip nulls (don't recurse into a null subtree).\n    if (result.isNull(path)) continue;\n    if (\n      fd.fieldKind === \"message\" &&\n      parent.isSet(fd) &&\n      !isTimestamp(fd.message) &&\n      !isDuration(fd.message) &&\n      !isWrapperType(fd.message) &&\n      !isAny(fd.message)\n    ) {\n      const sub = parent.get(fd) as ReflectMessage;\n      postDecode(sub, result, undefined, path + \".\");\n    }\n  }\n}\n\nfunction applyDefault(parent: ReflectMessage, fd: DescField, def: string): void {\n  const errPos: Position = { line: 1, column: 1, offset: 0 };\n  if (fd.fieldKind === \"scalar\") {\n    parent.set(fd, parseScalarDefault(fd.scalar, def, fd, errPos));\n    return;\n  }\n  if (fd.fieldKind === \"enum\") {\n    const ev = fd.enum.values.find((v) => v.name === def);\n    if (ev) {\n      parent.set(fd, ev.number);\n      return;\n    }\n    const n = parseSignedInt32(def);\n    if (n === null) {\n      throw new PxfError(errPos, `invalid default enum ${JSON.stringify(def)} for field ${JSON.stringify(fd.name)}`);\n    }\n    parent.set(fd, n);\n    return;\n  }\n  if (fd.fieldKind === \"message\") {\n    applyMessageDefault(parent, fd, def, errPos);\n    return;\n  }\n  throw new PxfError(\n    errPos,\n    `default values not supported for ${fd.fieldKind} field ${JSON.stringify(fd.name)}`,\n  );\n}\n\nfunction parseScalarDefault(\n  kind: ScalarType,\n  def: string,\n  fd: DescField,\n  pos: Position,\n): unknown {\n  switch (kind) {\n    case ScalarType.STRING:\n      return def;\n    case ScalarType.BOOL:\n      return def === \"true\";\n    case ScalarType.INT32:\n    case ScalarType.SINT32:\n    case ScalarType.SFIXED32: {\n      const n = parseSignedInt32(def);\n      if (n === null) throw new PxfError(pos, `invalid default int32 ${JSON.stringify(def)} for field ${JSON.stringify(fd.name)}`);\n      return n;\n    }\n    case ScalarType.UINT32:\n    case ScalarType.FIXED32: {\n      const n = parseUnsignedInt32(def);\n      if (n === null) throw new PxfError(pos, `invalid default uint32 ${JSON.stringify(def)} for field ${JSON.stringify(fd.name)}`);\n      return n;\n    }\n    case ScalarType.INT64:\n    case ScalarType.SINT64:\n    case ScalarType.SFIXED64: {\n      const v = parseInt64(def);\n      if (v === null) throw new PxfError(pos, `invalid default int64 ${JSON.stringify(def)} for field ${JSON.stringify(fd.name)}`);\n      return v;\n    }\n    case ScalarType.UINT64:\n    case ScalarType.FIXED64: {\n      const v = parseUint64(def);\n      if (v === null) throw new PxfError(pos, `invalid default uint64 ${JSON.stringify(def)} for field ${JSON.stringify(fd.name)}`);\n      return v;\n    }\n    case ScalarType.FLOAT: {\n      const f = Number(def);\n      if (Number.isNaN(f) && def !== \"NaN\") {\n        throw new PxfError(pos, `invalid default float ${JSON.stringify(def)} for field ${JSON.stringify(fd.name)}`);\n      }\n      return Math.fround(f);\n    }\n    case ScalarType.DOUBLE: {\n      const f = Number(def);\n      if (Number.isNaN(f) && def !== \"NaN\") {\n        throw new PxfError(pos, `invalid default double ${JSON.stringify(def)} for field ${JSON.stringify(fd.name)}`);\n      }\n      return f;\n    }\n    case ScalarType.BYTES:\n      return decodeBase64(def);\n    default:\n      throw new PxfError(pos, `unsupported default scalar kind ${kind} for field ${JSON.stringify(fd.name)}`);\n  }\n}\n\nfunction applyMessageDefault(\n  parent: ReflectMessage,\n  fd: DescField,\n  def: string,\n  pos: Position,\n): void {\n  if (fd.fieldKind !== \"message\") {\n    throw new PxfError(pos, \"internal: applyMessageDefault on non-message field\");\n  }\n  const mdesc = fd.message;\n  const sub = create(mdesc);\n  const subRefl = reflect(mdesc, sub);\n\n  if (isTimestamp(mdesc)) {\n    const { seconds, nanos } = parseRfc3339(def);\n    const sf = findFieldByProtoName(mdesc, \"seconds\");\n    const nf = findFieldByProtoName(mdesc, \"nanos\");\n    if (sf && nf) {\n      subRefl.set(sf, seconds);\n      subRefl.set(nf, nanos);\n    }\n    parent.set(fd, subRefl);\n    return;\n  }\n  if (isDuration(mdesc)) {\n    const { seconds, nanos } = parseGoDuration(def);\n    const sf = findFieldByProtoName(mdesc, \"seconds\");\n    const nf = findFieldByProtoName(mdesc, \"nanos\");\n    if (sf && nf) {\n      subRefl.set(sf, seconds);\n      subRefl.set(nf, nanos);\n    }\n    parent.set(fd, subRefl);\n    return;\n  }\n  if (isWrapperType(mdesc)) {\n    const innerFd = findFieldByProtoName(mdesc, \"value\");\n    if (!innerFd || innerFd.fieldKind !== \"scalar\") {\n      throw new PxfError(pos, `internal: wrapper ${mdesc.typeName} missing 'value' field`);\n    }\n    subRefl.set(innerFd, parseScalarDefault(innerFd.scalar, def, fd, pos));\n    parent.set(fd, subRefl);\n    return;\n  }\n  throw new PxfError(\n    pos,\n    `default values not supported for message type ${mdesc.typeName} (field ${JSON.stringify(fd.name)})`,\n  );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Schema-bound PXF text encoder.\n * Mirrors `protowire/encoding/pxf/encode.go`.\n *\n * Handles scalars, enums, messages (block + WKT shortcuts), repeated lists,\n * maps (key-sorted), google.protobuf.Any sugar via a TypeResolver, and the\n * `_null` FieldMask channel for emitting `null` literals.\n */\n\nimport {\n  type DescField,\n  type DescMessage,\n  type MessageShape,\n  ScalarType,\n  fromBinary,\n} from \"@bufbuild/protobuf\";\nimport {\n  type ReflectList,\n  type ReflectMap,\n  type ReflectMessage,\n  reflect,\n} from \"@bufbuild/protobuf/reflect\";\n\nimport { findNullMaskField } from \"./annotations.js\";\nimport { type TypeResolver } from \"./decode.js\";\nimport {\n  findFieldByProtoName,\n  isAny,\n  isDuration,\n  isTimestamp,\n  isWrapperType,\n} from \"./descriptor.js\";\nimport { formatGoDuration } from \"./duration.js\";\nimport { Result } from \"./result.js\";\n\nexport interface MarshalOptions {\n  /** Indentation string per level. Defaults to two spaces. */\n  indent?: string;\n  /** Emit fields whose value is the proto3 default (zero) instead of skipping them. */\n  emitDefaults?: boolean;\n  /** When set, prefix the output with `@type <typeURL>` and a blank line. */\n  typeURL?: string;\n  /** Required to encode `google.protobuf.Any` with sugar syntax. */\n  typeResolver?: TypeResolver;\n  /**\n   * Alternative null source for messages without a top-level `_null`\n   * FieldMask. Paths in this Result that are marked null are emitted as\n   * `null` literals.\n   */\n  nullFields?: Result;\n  /**\n   * Strip trailing zero-valued h/m/s units from emitted Go-style\n   * Duration literals (e.g. `720h0m0s` → `720h`, `1h30m0s` → `1h30m`).\n   *\n   * Default `false` preserves byte-equivalence with the canonical\n   * Go reference's `time.Duration.String()` output. Set to `true`\n   * when round-trip readability of the source file matters more\n   * than wire-compatibility with the Go reference — typical for\n   * config files maintained by humans (e.g. an `*.pxf` config a\n   * maintainer edits via a UI, where seeing `720h` on disk is more\n   * idiomatic than `720h0m0s`).\n   *\n   * Only emit-side: the parser accepts both forms regardless.\n   * Sub-second durations (ns / µs / ms) already use a single unit\n   * and are unaffected. Internal zero units between non-zero ones\n   * (e.g. `1h0m30s` where the middle `0m` sits between non-zero h\n   * and s) are preserved — the Go format requires them.\n   */\n  compactDuration?: boolean;\n}\n\nexport function marshal<Desc extends DescMessage>(\n  message: MessageShape<Desc>,\n  schema: Desc,\n  options?: MarshalOptions,\n): string {\n  const indent = options?.indent ?? \"  \";\n  const root = reflect(schema, message);\n  const enc = new Encoder(\n    indent,\n    options?.emitDefaults ?? false,\n    options?.typeResolver,\n    options?.compactDuration ?? false,\n  );\n  enc.primeNullSet(root, options?.nullFields);\n  if (options?.typeURL) {\n    enc.buf += `@type ${options.typeURL}\\n\\n`;\n  }\n  enc.encodeMessage(root, 0);\n  return enc.buf;\n}\n\nclass Encoder {\n  buf = \"\";\n  private nullMaskFd: DescField | undefined;\n  private nullSet: Set<string> | undefined;\n  private pathPrefix = \"\";\n\n  constructor(\n    private readonly indent: string,\n    private readonly emitDefaults: boolean,\n    private readonly resolver: TypeResolver | undefined,\n    private readonly compactDuration: boolean,\n  ) {}\n\n  /**\n   * Discover the top-level `_null` FieldMask (if any) and snapshot its\n   * paths into a Set. Falls back to `MarshalOptions.nullFields` for\n   * schemas that don't carry a `_null` field. Mirrors the priming step\n   * in Go's `Marshal`.\n   */\n  primeNullSet(root: ReflectMessage, fallback: Result | undefined): void {\n    this.nullMaskFd = findNullMaskField(root.desc);\n    if (this.nullMaskFd && root.isSet(this.nullMaskFd)) {\n      const fmRefl = root.get(this.nullMaskFd) as ReflectMessage;\n      const pathsFd = findFieldByProtoName(fmRefl.desc, \"paths\");\n      if (pathsFd) {\n        const list = fmRefl.get(pathsFd) as ReflectList<string>;\n        const set = new Set<string>();\n        for (const p of list) set.add(p);\n        this.nullSet = set;\n      }\n      return;\n    }\n    if (fallback) {\n      this.nullSet = new Set(fallback.nullPaths());\n    }\n  }\n\n  private writeIndent(level: number): void {\n    for (let i = 0; i < level; i++) this.buf += this.indent;\n  }\n\n  private writeFieldPrefix(level: number, name: string): void {\n    this.writeIndent(level);\n    this.buf += `${name} = `;\n  }\n\n  encodeMessage(parent: ReflectMessage, level: number): void {\n    for (const fd of parent.desc.fields) {\n      // Skip the `_null` FieldMask itself at the top level — it's metadata.\n      if (\n        this.nullMaskFd &&\n        this.pathPrefix === \"\" &&\n        fd.number === this.nullMaskFd.number\n      ) {\n        continue;\n      }\n\n      const path = this.pathPrefix + fd.name;\n      if (this.nullSet?.has(path)) {\n        this.writeFieldPrefix(level, fd.name);\n        this.buf += \"null\\n\";\n        continue;\n      }\n\n      if (!this.emitDefaults && !parent.isSet(fd)) continue;\n\n      if (fd.fieldKind === \"map\") {\n        this.encodeMapField(parent, fd, level);\n        continue;\n      }\n      if (fd.fieldKind === \"list\") {\n        this.encodeListField(parent, fd, level);\n        continue;\n      }\n      if (fd.fieldKind === \"message\") {\n        if (!parent.isSet(fd)) continue;\n        this.encodeMessageField(fd, parent.get(fd) as ReflectMessage, level);\n        continue;\n      }\n\n      this.writeFieldPrefix(level, fd.name);\n      this.writeScalarOrEnum(fd, parent);\n      this.buf += \"\\n\";\n    }\n  }\n\n  private encodeMessageField(\n    fd: DescField,\n    sub: ReflectMessage,\n    level: number,\n  ): void {\n    if (fd.fieldKind !== \"message\") {\n      throw new Error(\"internal: encodeMessageField on non-message\");\n    }\n    const mdesc = fd.message;\n\n    if (isTimestamp(mdesc)) {\n      this.writeFieldPrefix(level, fd.name);\n      this.buf += formatRfc3339Nano(sub);\n      this.buf += \"\\n\";\n      return;\n    }\n    if (isDuration(mdesc)) {\n      this.writeFieldPrefix(level, fd.name);\n      this.buf += formatGoDurationFromReflect(sub, this.compactDuration);\n      this.buf += \"\\n\";\n      return;\n    }\n    if (isWrapperType(mdesc)) {\n      const innerFd = findFieldByProtoName(mdesc, \"value\");\n      if (!innerFd || innerFd.fieldKind !== \"scalar\") {\n        throw new Error(`wrapper ${mdesc.typeName} missing scalar 'value'`);\n      }\n      this.writeFieldPrefix(level, fd.name);\n      this.writeScalarValue(innerFd.scalar, sub.get(innerFd) as unknown);\n      this.buf += \"\\n\";\n      return;\n    }\n    if (isAny(mdesc) && this.resolver && this.tryEncodeAny(fd, sub, level)) {\n      return;\n    }\n\n    this.writeIndent(level);\n    this.buf += `${fd.name} {\\n`;\n    const saved = this.pathPrefix;\n    this.pathPrefix = saved + fd.name + \".\";\n    this.encodeMessage(sub, level + 1);\n    this.pathPrefix = saved;\n    this.writeIndent(level);\n    this.buf += \"}\\n\";\n  }\n\n  private encodeListField(parent: ReflectMessage, fd: DescField, level: number): void {\n    if (fd.fieldKind !== \"list\") {\n      throw new Error(\"internal: encodeListField on non-list\");\n    }\n    const list = parent.get(fd) as ReflectList;\n    if (list.size === 0 && !this.emitDefaults) return;\n\n    this.writeFieldPrefix(level, fd.name);\n    this.buf += \"[\\n\";\n\n    let i = 0;\n    for (const elem of list) {\n      if (fd.listKind === \"message\") {\n        const sub = elem as ReflectMessage;\n        const mdesc = fd.message;\n        if (isTimestamp(mdesc)) {\n          this.writeIndent(level + 1);\n          this.buf += formatRfc3339Nano(sub);\n        } else if (isDuration(mdesc)) {\n          this.writeIndent(level + 1);\n          this.buf += formatGoDurationFromReflect(sub, this.compactDuration);\n        } else if (isWrapperType(mdesc)) {\n          const innerFd = findFieldByProtoName(mdesc, \"value\");\n          if (!innerFd || innerFd.fieldKind !== \"scalar\") {\n            throw new Error(`wrapper ${mdesc.typeName} missing scalar 'value'`);\n          }\n          this.writeIndent(level + 1);\n          this.writeScalarValue(innerFd.scalar, sub.get(innerFd) as unknown);\n        } else {\n          this.writeIndent(level + 1);\n          this.buf += \"{\\n\";\n          this.encodeMessage(sub, level + 2);\n          this.writeIndent(level + 1);\n          this.buf += \"}\";\n        }\n      } else if (fd.listKind === \"enum\") {\n        this.writeIndent(level + 1);\n        this.writeEnumValue(fd, elem as number);\n      } else {\n        this.writeIndent(level + 1);\n        this.writeScalarValue(fd.scalar, elem);\n      }\n\n      if (i < list.size - 1) this.buf += \",\";\n      this.buf += \"\\n\";\n      i++;\n    }\n\n    this.writeIndent(level);\n    this.buf += \"]\\n\";\n  }\n\n  private encodeMapField(parent: ReflectMessage, fd: DescField, level: number): void {\n    if (fd.fieldKind !== \"map\") {\n      throw new Error(\"internal: encodeMapField on non-map\");\n    }\n    const map = parent.get(fd) as ReflectMap;\n    if (map.size === 0 && !this.emitDefaults) return;\n\n    this.writeFieldPrefix(level, fd.name);\n    this.buf += \"{\\n\";\n\n    const entries: Array<[string, unknown]> = [];\n    for (const [k, v] of map) {\n      entries.push([formatMapKey(fd.mapKey, k), v]);\n    }\n    entries.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));\n\n    for (const [keyStr, val] of entries) {\n      if (fd.mapKind === \"message\") {\n        this.writeIndent(level + 1);\n        this.buf += `${keyStr}: {\\n`;\n        this.encodeMessage(val as ReflectMessage, level + 2);\n        this.writeIndent(level + 1);\n        this.buf += \"}\\n\";\n      } else if (fd.mapKind === \"enum\") {\n        this.writeIndent(level + 1);\n        this.buf += `${keyStr}: `;\n        this.writeEnumValue(fd, val as number);\n        this.buf += \"\\n\";\n      } else {\n        this.writeIndent(level + 1);\n        this.buf += `${keyStr}: `;\n        this.writeScalarValue(fd.scalar, val);\n        this.buf += \"\\n\";\n      }\n    }\n\n    this.writeIndent(level);\n    this.buf += \"}\\n\";\n  }\n\n  /** Top-level scalar/enum dispatch for fields read off a parent ReflectMessage. */\n  private writeScalarOrEnum(fd: DescField, parent: ReflectMessage): void {\n    if (fd.fieldKind === \"enum\") {\n      this.writeEnumValue(fd, parent.get(fd) as number);\n      return;\n    }\n    if (fd.fieldKind !== \"scalar\") {\n      throw new Error(`internal: writeScalarOrEnum on ${fd.fieldKind} field`);\n    }\n    this.writeScalarValue(fd.scalar, parent.get(fd) as unknown);\n  }\n\n  private writeEnumValue(fd: DescField, num: number): void {\n    const enumDesc = fd.enum;\n    if (!enumDesc) {\n      throw new Error(`internal: missing enum descriptor for field ${fd.name}`);\n    }\n    const ev = enumDesc.values.find((v) => v.number === num);\n    this.buf += ev ? ev.name : String(num);\n  }\n\n  private writeScalarValue(kind: ScalarType, val: unknown): void {\n    switch (kind) {\n      case ScalarType.STRING:\n        this.buf += writeQuotedString(val as string);\n        return;\n      case ScalarType.BOOL:\n        this.buf += (val as boolean) ? \"true\" : \"false\";\n        return;\n      case ScalarType.INT32:\n      case ScalarType.SINT32:\n      case ScalarType.SFIXED32:\n      case ScalarType.UINT32:\n      case ScalarType.FIXED32:\n        this.buf += String(val as number);\n        return;\n      case ScalarType.INT64:\n      case ScalarType.SINT64:\n      case ScalarType.SFIXED64:\n      case ScalarType.UINT64:\n      case ScalarType.FIXED64:\n        this.buf += (val as bigint).toString();\n        return;\n      case ScalarType.FLOAT:\n      case ScalarType.DOUBLE:\n        this.buf += formatFloat(val as number);\n        return;\n      case ScalarType.BYTES:\n        this.buf += `b\"${encodeBase64(val as Uint8Array)}\"`;\n        return;\n      default:\n        throw new Error(`unsupported scalar kind: ${kind}`);\n    }\n  }\n\n  /**\n   * Try to encode an Any field with sugar syntax. Returns true on success;\n   * false to fall back to plain `{ type_url = ..., value = ... }` encoding\n   * when the resolver can't find the URL or the bytes can't be unpacked.\n   */\n  private tryEncodeAny(\n    fd: DescField,\n    anyMsg: ReflectMessage,\n    level: number,\n  ): boolean {\n    if (fd.fieldKind !== \"message\") return false;\n    const anyDesc = fd.message;\n    const typeUrlFd = findFieldByProtoName(anyDesc, \"type_url\");\n    const valueFd = findFieldByProtoName(anyDesc, \"value\");\n    if (!typeUrlFd || !valueFd) return false;\n\n    const typeURL = anyMsg.get(typeUrlFd) as string;\n    if (typeURL === \"\") return false;\n    const valueBytes = anyMsg.get(valueFd) as Uint8Array;\n\n    const innerDesc = this.resolver!.findMessageByURL(typeURL);\n    if (!innerDesc) return false;\n\n    let inner;\n    try {\n      inner = fromBinary(innerDesc, valueBytes);\n    } catch {\n      return false;\n    }\n    const innerRefl = reflect(innerDesc, inner);\n\n    this.writeIndent(level);\n    this.buf += `${fd.name} {\\n`;\n    this.writeIndent(level + 1);\n    this.buf += `@type = ${writeQuotedString(typeURL)}\\n`;\n    const saved = this.pathPrefix;\n    this.pathPrefix = saved + fd.name + \".\";\n    this.encodeMessage(innerRefl, level + 1);\n    this.pathPrefix = saved;\n    this.writeIndent(level);\n    this.buf += \"}\\n\";\n    return true;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Formatting helpers\n// ---------------------------------------------------------------------------\n\nconst HEX = \"0123456789abcdef\";\n\n/** Quote a string using PXF escape conventions. Same set as decode.ts. */\nfunction writeQuotedString(s: string): string {\n  let out = '\"';\n  for (let i = 0; i < s.length; i++) {\n    const ch = s.charCodeAt(i);\n    switch (ch) {\n      case 0x22: out += '\\\\\"'; break;\n      case 0x5c: out += \"\\\\\\\\\"; break;\n      case 0x0a: out += \"\\\\n\"; break;\n      case 0x0d: out += \"\\\\r\"; break;\n      case 0x09: out += \"\\\\t\"; break;\n      default:\n        if (ch < 0x20) {\n          out += `\\\\x${HEX[(ch >> 4) & 0xf]!}${HEX[ch & 0xf]!}`;\n        } else {\n          out += s[i];\n        }\n    }\n  }\n  out += '\"';\n  return out;\n}\n\nfunction formatFloat(f: number): string {\n  if (f === Infinity) return \"inf\";\n  if (f === -Infinity) return \"-inf\";\n  if (Number.isNaN(f)) return \"nan\";\n  // JS's default Number→String already uses the shortest round-trippable\n  // representation, which matches Go's %g in practice for typical values.\n  return String(f);\n}\n\nfunction encodeBase64(bytes: Uint8Array): string {\n  return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString(\"base64\");\n}\n\nfunction formatMapKey(kind: ScalarType, key: unknown): string {\n  switch (kind) {\n    case ScalarType.STRING: {\n      const s = key as string;\n      return isValidIdent(s) ? s : writeQuotedString(s);\n    }\n    case ScalarType.BOOL:\n      return (key as boolean) ? \"true\" : \"false\";\n    case ScalarType.INT32:\n    case ScalarType.SINT32:\n    case ScalarType.SFIXED32:\n    case ScalarType.UINT32:\n    case ScalarType.FIXED32:\n      return String(key as number);\n    case ScalarType.INT64:\n    case ScalarType.SINT64:\n    case ScalarType.SFIXED64:\n    case ScalarType.UINT64:\n    case ScalarType.FIXED64:\n      return (key as bigint).toString();\n    default:\n      return String(key);\n  }\n}\n\nfunction isValidIdent(s: string): boolean {\n  if (s === \"\" || s === \"true\" || s === \"false\" || s === \"null\") return false;\n  for (let i = 0; i < s.length; i++) {\n    const c = s.charCodeAt(i);\n    const isLetter = (c >= 0x41 && c <= 0x5a) || (c >= 0x61 && c <= 0x7a) || c === 0x5f;\n    const isDigit = c >= 0x30 && c <= 0x39;\n    if (i === 0 ? !isLetter : !(isLetter || isDigit)) return false;\n  }\n  return true;\n}\n\n/**\n * Format a Timestamp ReflectMessage as RFC 3339 with optional fractional\n * seconds (no trailing zeros), like Go's `time.Format(time.RFC3339Nano)`.\n */\nfunction formatRfc3339Nano(ts: ReflectMessage): string {\n  const sf = findFieldByProtoName(ts.desc, \"seconds\");\n  const nf = findFieldByProtoName(ts.desc, \"nanos\");\n  const seconds = (sf ? (ts.get(sf) as bigint) : 0n);\n  const nanos = nf ? (ts.get(nf) as number) : 0;\n\n  // Build the date portion from integer seconds (UTC).\n  const ms = Number(seconds) * 1000;\n  const d = new Date(ms);\n  const date =\n    `${pad4(d.getUTCFullYear())}-${pad2(d.getUTCMonth() + 1)}-${pad2(d.getUTCDate())}` +\n    `T${pad2(d.getUTCHours())}:${pad2(d.getUTCMinutes())}:${pad2(d.getUTCSeconds())}`;\n\n  if (nanos === 0) return `${date}Z`;\n\n  // Render 9 fractional digits then strip trailing zeros (RFC 3339 nano).\n  let frac = String(Math.abs(nanos)).padStart(9, \"0\");\n  frac = frac.replace(/0+$/, \"\");\n  return `${date}.${frac}Z`;\n}\n\nfunction pad2(n: number): string {\n  return n < 10 ? `0${n}` : String(n);\n}\n\nfunction pad4(n: number): string {\n  return String(n).padStart(4, \"0\");\n}\n\n/**\n * Adapter for the encoder's two Duration emit sites. Pulls\n * seconds + nanos off a Duration ReflectMessage and delegates to\n * the public `formatGoDuration` from ./duration. Compact-flag\n * routing is handled here so the call sites stay one line.\n */\nfunction formatGoDurationFromReflect(d: ReflectMessage, compact: boolean): string {\n  const sf = findFieldByProtoName(d.desc, \"seconds\");\n  const nf = findFieldByProtoName(d.desc, \"nanos\");\n  return formatGoDuration(\n    {\n      seconds: sf ? (d.get(sf) as bigint) : 0n,\n      nanos: nf ? (d.get(nf) as number) : 0,\n    },\n    { compact },\n  );\n}\n","// SPDX-License-Identifier: MIT\n// Copyright (c) 2026 TrendVidia, LLC.\n/**\n * Streaming consumption for the `@dataset` directive (draft §3.4.4).\n *\n * `unmarshalFull` materializes every row of an `@dataset` directive into\n * `Result.datasets()`. That works for small datasets and breaks for the\n * CSV-replacement workload `@dataset` was designed for. `DatasetReader`\n * pulls one row at a time from the input string; per-row arity and the\n * v1 cell-grammar rule are enforced at consume time (not deferred to\n * end-of-input), and rows are yielded in source order — both\n * invariants the spec requires of streaming consumers.\n *\n * Convenience: `scan(schema)` reads the next row and binds its cells\n * to a fresh message of `schema`; `bindRow(schema, columns, row)` is\n * exported for callers iterating `Result.datasets()[i].rows` from the\n * materializing path.\n *\n * Mirrors the cpp port at `protowire-cpp/src/pxf/dataset_reader.cc`.\n */\n\nimport {\n  type DescMessage,\n  type MessageShape,\n} from \"@bufbuild/protobuf\";\n\nimport { type Directive, type DatasetRow } from \"./ast.js\";\nimport { unmarshal } from \"./decode.js\";\nimport { PxfError } from \"./errors.js\";\nimport { parse } from \"./parser.js\";\nimport { type Position } from \"./token.js\";\n\n/**\n * Default cap on the @dataset header (leading directives plus the\n * `@dataset TYPE ( cols )` declaration). Real headers are tiny — a few\n * hundred bytes at most. The cap exists to fail-fast on misuse: a\n * DatasetReader pointed at a multi-megabyte non-`@dataset` input\n * shouldn't run through the whole buffer looking for one.\n */\nexport const DEFAULT_HEADER_MAX_BYTES = 64 * 1024;\n\n/**\n * Streaming row reader for a single `@dataset` directive.\n *\n * A DatasetReader is positioned at the first row after `fromString()`\n * returns. Iterate via standard `for ... of` (the reader implements\n * the iterator protocol) or call `next()` until it returns `null`.\n *\n * For documents containing multiple `@dataset` directives, call\n * `fromString()` again on the result of `tail()`.\n */\nexport class DatasetReader implements IterableIterator<DatasetRow> {\n  readonly type: string;\n  readonly columns: readonly string[];\n  readonly directives: readonly Directive[];\n  /** True once the row sequence has been exhausted. */\n  done = false;\n\n  private readonly input: string;\n  /** Byte offset of the next position to scan in `input`. */\n  private offset: number;\n\n  private constructor(\n    input: string,\n    type: string,\n    columns: string[],\n    directives: Directive[],\n    bodyOffset: number,\n  ) {\n    this.input = input;\n    this.type = type;\n    this.columns = columns;\n    this.directives = directives;\n    this.offset = bodyOffset;\n  }\n\n  /**\n   * Consume the leading directives and the `@dataset TYPE ( cols )`\n   * header. Returns a reader positioned at the first row.\n   *\n   * Throws if the input contains no `@dataset` directive before EOF, on\n   * a header parse error, or if the header byte budget is exceeded.\n   */\n  static fromString(input: string): DatasetReader {\n    if (input.length > DEFAULT_HEADER_MAX_BYTES) {\n      // Quick fail-fast — if there's no `@dataset` keyword anywhere in\n      // the first 64 KiB of input, refuse to scan further. The\n      // bytewise scan below would otherwise blast through the entire\n      // buffer for a non-`@dataset` document.\n      const at = findAtTableWithin(input, DEFAULT_HEADER_MAX_BYTES);\n      if (at < 0) {\n        throw new PxfError(\n          { line: 1, column: 1, offset: 0 },\n          `pxf: @dataset header exceeds ${DEFAULT_HEADER_MAX_BYTES} bytes; raise the budget or check that the input begins with \\`@dataset TYPE (cols)\\``,\n        );\n      }\n    }\n    // The header parse uses the AST parser. We only need the prelude\n    // (leading directives + the @dataset header up through its closing\n    // `)`); rows are parsed one at a time. Calling parse() on the\n    // whole input would also materialize every row — wasteful — so\n    // we slice up to the column-list `)` instead.\n    const headerEnd = scanHeaderEnd(input);\n    if (headerEnd < 0) {\n      // No `@dataset` in input.\n      throw new PxfError(\n        { line: 1, column: 1, offset: 0 },\n        \"pxf: no @dataset directive in stream\",\n      );\n    }\n    const headerSlice = input.slice(0, headerEnd + 1);\n    const doc = parse(headerSlice);\n    if (doc.datasets.length === 0) {\n      // Defensive — scanHeaderEnd found `@dataset` but parse() disagreed.\n      throw new PxfError(\n        { line: 1, column: 1, offset: 0 },\n        \"pxf: no @dataset directive in stream\",\n      );\n    }\n    const tbl = doc.datasets[0]!;\n    return new DatasetReader(\n      input,\n      tbl.type,\n      [...tbl.columns],\n      [...doc.directives],\n      headerEnd + 1,\n    );\n  }\n\n  /**\n   * Read the next row. Returns `null` when the table's row sequence\n   * is exhausted; once null is returned, subsequent calls return the\n   * same null (`done` is set).\n   */\n  next(): IteratorResult<DatasetRow> {\n    if (this.done) return { value: undefined, done: true };\n    // Skip whitespace + comments to the next `(` or end-of-rows.\n    let i = this.offset;\n    while (i < this.input.length) {\n      const ch = this.input[i]!;\n      if (ch === \" \" || ch === \"\\t\" || ch === \"\\r\" || ch === \"\\n\") {\n        i++;\n        continue;\n      }\n      const j = skipStringOrComment(this.input, i);\n      if (j === -1) {\n        // Incomplete construct mid-skip — for a string-backed reader\n        // we have the whole input, so an incomplete here means\n        // unterminated. Mirror the parser's error.\n        throw new PxfError(positionAt(this.input, i), \"pxf: unterminated string or comment\");\n      }\n      if (j !== i) {\n        i = j;\n        continue;\n      }\n      break;\n    }\n    if (i >= this.input.length || this.input[i] !== \"(\") {\n      this.done = true;\n      this.offset = i;\n      return { value: undefined, done: true };\n    }\n    // Find the matching `)` to delimit the row body. String-aware.\n    const end = findMatchingParen(this.input, i);\n    if (end < 0) {\n      throw new PxfError(positionAt(this.input, i), \"pxf: unterminated @dataset row\");\n    }\n    // Parse the row by handing a synthetic `@dataset _.Row (c1,...)\n    // <rowBytes>` to the AST parser, reusing parseDatasetRow's arity\n    // check and v1 cell-grammar enforcement.\n    const rowBytes = this.input.slice(i, end + 1);\n    const synthetic = buildSyntheticRow(this.columns, rowBytes);\n    let row: DatasetRow;\n    try {\n      const tdoc = parse(synthetic);\n      if (tdoc.datasets.length === 0 || tdoc.datasets[0]!.rows.length === 0) {\n        throw new PxfError(\n          positionAt(this.input, i),\n          \"pxf: DatasetReader: synthetic row parse produced no row\",\n        );\n      }\n      row = tdoc.datasets[0]!.rows[0]!;\n    } catch (e) {\n      // Advance past the bad row anyway so a re-call doesn't loop.\n      this.offset = end + 1;\n      throw e;\n    }\n    this.offset = end + 1;\n    return { value: row, done: false };\n  }\n\n  [Symbol.iterator](): IterableIterator<DatasetRow> {\n    return this;\n  }\n\n  /**\n   * Read the next row and bind its cells to a fresh message of\n   * `schema`. Returns the bound message, or `null` if the row\n   * sequence is exhausted (in which case `done` is set).\n   */\n  scan<Desc extends DescMessage>(\n    schema: Desc,\n    options?: { skipValidate?: boolean },\n  ): MessageShape<Desc> | null {\n    const r = this.next();\n    if (r.done) return null;\n    return bindRow(schema, this.columns, r.value, options);\n  }\n\n  /**\n   * Returns the unconsumed bytes of the input, so callers can chain a\n   * second `DatasetReader` for documents with multiple `@dataset`\n   * directives:\n   *\n   *     const tr1 = DatasetReader.fromString(src);\n   *     for (const row of tr1) { ... }\n   *     const tr2 = DatasetReader.fromString(tr1.tail());\n   *\n   * Should only be called after iteration has exhausted (i.e.\n   * `done === true`). Calling earlier returns bytes the current\n   * reader still intends to consume.\n   */\n  tail(): string {\n    return this.input.slice(this.offset);\n  }\n}\n\n/**\n * Bind a row's cells to fields of a fresh `schema` message by column\n * name. `columns` and `row.cells` MUST have the same length.\n *\n * Cell-state semantics:\n *   - `null` cell — field absent. (pxf.default) applies if declared;\n *     (pxf.required) errors if neither default nor value is present.\n *   - `NullVal` cell — field cleared (draft §3.9).\n *   - any other — field set to the cell's value.\n *\n * Strategy: render the row as a synthetic PXF body (`<col> = <val>`\n * per non-null cell) and run it through `unmarshal`. This mirrors\n * `protowire-cpp`'s BindRow and reuses every branch of the existing\n * decoder — WKT timestamps / durations, wrapper-type nullability,\n * enum-by-name resolution, `pxf.required` / `pxf.default`, oneof —\n * instead of growing a parallel Value→FieldDescriptor switch.\n *\n * `skipValidate` defaults to `true`: descriptors were validated once\n * when the caller constructed the schema/registry, and re-running\n * the reserved-name check per row is wasteful in tight loops.\n */\nexport function bindRow<Desc extends DescMessage>(\n  schema: Desc,\n  columns: readonly string[],\n  row: DatasetRow,\n  options?: { skipValidate?: boolean },\n): MessageShape<Desc> {\n  if (columns.length !== row.cells.length) {\n    throw new PxfError(\n      row.pos,\n      `pxf: bindRow: ${columns.length} columns vs ${row.cells.length} cells`,\n    );\n  }\n  let body = \"\";\n  for (let i = 0; i < columns.length; i++) {\n    const cell = row.cells[i]!;\n    if (cell === null) continue;\n    body += `${columns[i]} = ${cellToPxf(cell, row.pos)}\\n`;\n  }\n  return unmarshal(body, schema, {\n    skipValidate: options?.skipValidate ?? true,\n  });\n}\n\n// ---- internal helpers ----------------------------------------------------\n\nfunction cellToPxf(cell: NonNullable<DatasetRow[\"cells\"][number]>, pos: Position): string {\n  switch (cell.kind) {\n    case \"null\":\n      return \"null\";\n    case \"string\":\n      return `\"${cell.value.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')}\"`;\n    case \"int\":\n    case \"float\":\n    case \"timestamp\":\n    case \"duration\":\n      return cell.raw;\n    case \"bool\":\n      return cell.value ? \"true\" : \"false\";\n    case \"bytes\": {\n      // Re-encode bytes as base64 standard form. Both base64 chars\n      // and the closing `\"` make it through the lexer unchanged.\n      return `b\"${encodeBase64(cell.value)}\"`;\n    }\n    case \"ident\":\n      return cell.name;\n    default:\n      throw new PxfError(\n        pos,\n        // The parser rejects list/block cells before they reach us.\n        `pxf: bindRow: unexpected cell kind ${(cell as { kind: string }).kind}`,\n      );\n  }\n}\n\nfunction encodeBase64(bytes: Uint8Array): string {\n  if (typeof btoa !== \"undefined\") {\n    let bin = \"\";\n    for (let i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]!);\n    return btoa(bin);\n  }\n  // Node fallback (Buffer is global in Node; some bundlers strip it).\n  const buf = (globalThis as { Buffer?: { from(b: Uint8Array): { toString(enc: string): string } } })\n    .Buffer;\n  if (buf) return buf.from(bytes).toString(\"base64\");\n  throw new Error(\"no base64 encoder available (btoa / Buffer)\");\n}\n\nfunction buildSyntheticRow(columns: readonly string[], rowBytes: string): string {\n  // Use a placeholder type — the AST parser doesn't bind it to a\n  // schema, just records it in DatasetDirective.type which we discard.\n  return `@dataset _.Row (${columns.join(\",\")})\\n${rowBytes}\\n`;\n}\n\n/**\n * Find the byte offset of the next `@dataset` keyword outside strings /\n * comments, restricted to the first `maxBytes` of input. Returns the\n * offset on success, or -1 if not found.\n */\nfunction findAtTableWithin(input: string, maxBytes: number): number {\n  const limit = Math.min(input.length, maxBytes);\n  let i = 0;\n  while (i < limit) {\n    const j = skipStringOrComment(input, i);\n    if (j === -1) return -1; // unterminated within limit\n    if (j !== i) {\n      i = j;\n      continue;\n    }\n    if (\n      input[i] === \"@\" &&\n      i + 8 <= limit &&\n      input.slice(i, i + 8) === \"@dataset\"\n    ) {\n      const after = i + 8;\n      if (after === input.length) return -1; // could be longer ident\n      if (!isIdentPart(input[after]!)) return i;\n    }\n    i++;\n  }\n  return -1;\n}\n\n/**\n * Locates the end of the @dataset header — the closing `)` of the\n * column list. Returns the byte offset of that `)`, or -1 if no\n * `@dataset` is found.\n */\nfunction scanHeaderEnd(input: string): number {\n  const at = findAtTable(input);\n  if (at < 0) return -1;\n  const lparen = findNextChar(input, at + \"@dataset\".length, \"(\");\n  if (lparen < 0) return -1;\n  return findMatchingParen(input, lparen);\n}\n\nfunction findAtTable(input: string): number {\n  let i = 0;\n  while (i < input.length) {\n    const j = skipStringOrComment(input, i);\n    if (j === -1) return -1;\n    if (j !== i) {\n      i = j;\n      continue;\n    }\n    if (\n      input[i] === \"@\" &&\n      i + 8 <= input.length &&\n      input.slice(i, i + 8) === \"@dataset\"\n    ) {\n      const after = i + 8;\n      if (after === input.length) return -1;\n      if (!isIdentPart(input[after]!)) return i;\n    }\n    i++;\n  }\n  return -1;\n}\n\nfunction findNextChar(input: string, startFrom: number, ch: string): number {\n  let i = startFrom;\n  while (i < input.length) {\n    const j = skipStringOrComment(input, i);\n    if (j === -1) return -1;\n    if (j !== i) {\n      i = j;\n      continue;\n    }\n    if (input[i] === ch) return i;\n    i++;\n  }\n  return -1;\n}\n\n/**\n * Find the `)` that matches the `(` at `openIdx`. String / bytes-\n * literal / comment aware. Returns -1 on unterminated input.\n */\nfunction findMatchingParen(input: string, openIdx: number): number {\n  let depth = 1;\n  let i = openIdx + 1;\n  while (i < input.length) {\n    const j = skipStringOrComment(input, i);\n    if (j === -1) return -1;\n    if (j !== i) {\n      i = j;\n      continue;\n    }\n    const ch = input[i]!;\n    if (ch === \"(\") {\n      depth++;\n      i++;\n    } else if (ch === \")\") {\n      depth--;\n      if (depth === 0) return i;\n      i++;\n    } else {\n      i++;\n    }\n  }\n  return -1;\n}\n\n/**\n * Returns the byte offset past a string / bytes literal / comment\n * starting at `i`, or `i` unchanged if `i` is not at an opener.\n * Returns -1 if the construct is incomplete (unterminated).\n */\nfunction skipStringOrComment(input: string, i: number): number {\n  if (i >= input.length) return i;\n  const ch = input[i]!;\n  if (ch === '\"') {\n    if (i + 2 < input.length && input[i + 1] === '\"' && input[i + 2] === '\"') {\n      return skipTripleString(input, i);\n    }\n    return skipSimpleString(input, i);\n  }\n  if (ch === \"b\" && i + 1 < input.length && input[i + 1] === '\"') {\n    return skipBytesLiteral(input, i);\n  }\n  if (ch === \"#\") return skipLineComment(input, i + 1);\n  if (ch === \"/\" && i + 1 < input.length && input[i + 1] === \"/\") {\n    return skipLineComment(input, i + 2);\n  }\n  if (ch === \"/\" && i + 1 < input.length && input[i + 1] === \"*\") {\n    return skipBlockComment(input, i + 2);\n  }\n  return i;\n}\n\nfunction skipSimpleString(input: string, i: number): number {\n  let j = i + 1;\n  while (j < input.length) {\n    const c = input[j]!;\n    if (c === \"\\\\\") {\n      if (j + 1 >= input.length) return -1;\n      j += 2;\n      continue;\n    }\n    if (c === '\"') return j + 1;\n    if (c === \"\\n\") return -1;\n    j++;\n  }\n  return -1;\n}\n\nfunction skipTripleString(input: string, i: number): number {\n  let j = i + 3;\n  while (j + 2 < input.length) {\n    if (input[j] === '\"' && input[j + 1] === '\"' && input[j + 2] === '\"') return j + 3;\n    j++;\n  }\n  return -1;\n}\n\nfunction skipBytesLiteral(input: string, i: number): number {\n  let j = i + 2; // past `b\"`\n  while (j < input.length) {\n    const c = input[j]!;\n    if (c === \"\\\\\") {\n      if (j + 1 >= input.length) return -1;\n      j += 2;\n      continue;\n    }\n    if (c === '\"') return j + 1;\n    if (c === \"\\n\") return -1;\n    j++;\n  }\n  return -1;\n}\n\nfunction skipLineComment(input: string, from: number): number {\n  let j = from;\n  while (j < input.length && input[j] !== \"\\n\") j++;\n  return j;\n}\n\nfunction skipBlockComment(input: string, from: number): number {\n  let j = from;\n  while (j + 1 < input.length) {\n    if (input[j] === \"*\" && input[j + 1] === \"/\") return j + 2;\n    j++;\n  }\n  return -1;\n}\n\nfunction isIdentPart(c: string): boolean {\n  return (c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\") || (c >= \"0\" && c <= \"9\") || c === \"_\";\n}\n\n/**\n * Best-effort line/column from a byte offset. Used for error positions\n * in the byte-level scanner where we don't have a Token to read from.\n */\nfunction positionAt(input: string, offset: number): Position {\n  let line = 1;\n  let column = 1;\n  const limit = Math.min(offset, input.length);\n  for (let i = 0; i < limit; i++) {\n    if (input[i] === \"\\n\") {\n      line++;\n      column = 1;\n    } else {\n      column++;\n    }\n  }\n  return { line, column, offset };\n}\n"]}