{"version":3,"file":"protobuf-size-estimator.js","sourceRoot":"","sources":["../../../../src/common/protobuf/protobuf-size-estimator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,mCAA6C;AAE7C;;;GAGG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,0EAA0E;IAC1E,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACvB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,IAAI,GAAG,IAAI,EAAE;YACf,OAAO,IAAI,CAAC,CAAC;SACd;aAAM,IAAI,IAAI,GAAG,KAAK,EAAE;YACvB,OAAO,IAAI,CAAC,CAAC;SACd;aAAM,IAAI,IAAI,GAAG,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE;YAC1C,OAAO,IAAI,CAAC,CAAC;SACd;aAAM;YACL,iBAAiB;YACjB,CAAC,EAAE,CAAC,CAAC,0BAA0B;YAC/B,OAAO,IAAI,CAAC,CAAC;SACd;KACF;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAa,qBAAqB;IACzB,GAAG,GAAW,CAAC,CAAC;IAEvB,oBAAoB;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,qBAAqB,CAAC,CAAS,EAAE,MAAc;QAC7C,IAAI,CAAC,GAAG,IAAI,IAAA,0BAAkB,EAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC,GAAG,IAAI,IAAA,0BAAkB,EAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,KAAa;QACtC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,KAAiB;QAC1B,IAAI,CAAC,GAAG,IAAI,IAAA,0BAAkB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,QAAQ,CAAC,WAAmB,EAAE,QAAgB;QAC5C,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,IAAI,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC;IACtB,CAAC;CACF;AAzCD,sDAyCC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { IProtobufWriter } from './i-protobuf-writer';\nimport { estimateVarintSize } from './utils';\n\n/**\n * Calculate UTF-8 byte length without encoding\n * @param str valid UTF-16 string\n */\nfunction utf8ByteLength(str: string): number {\n  // No quick path for ASCII, since we need to loop though all chars anyway.\n  const len = str.length;\n  let byteLen = 0;\n  for (let i = 0; i < len; i++) {\n    const code = str.charCodeAt(i);\n    if (code < 0x80) {\n      byteLen += 1;\n    } else if (code < 0x800) {\n      byteLen += 2;\n    } else if (code < 0xd800 || code >= 0xe000) {\n      byteLen += 3;\n    } else {\n      // Surrogate pair\n      i++; // Skip the next character\n      byteLen += 4;\n    }\n  }\n  return byteLen;\n}\n\n/**\n * Size estimator for protobuf messages.\n * Implements the same interface as ProtobufWriter but only counts bytes without allocating a buffer.\n * @internal\n */\nexport class ProtobufSizeEstimator implements IProtobufWriter {\n  public pos: number = 0;\n\n  startLengthDelimited(): number {\n    return this.pos;\n  }\n\n  finishLengthDelimited(_: number, length: number): void {\n    this.pos += estimateVarintSize(length);\n  }\n\n  writeVarint(value: number): void {\n    this.pos += estimateVarintSize(value);\n  }\n\n  writeFixed32(_value: number): void {\n    this.pos += 4;\n  }\n\n  writeFixed64(_low: number, _high: number): void {\n    this.pos += 8;\n  }\n\n  writeBytes(bytes: Uint8Array): void {\n    this.pos += estimateVarintSize(bytes.length);\n    this.pos += bytes.length;\n  }\n\n  writeTag(fieldNumber: number, wireType: number): void {\n    this.writeVarint((fieldNumber << 3) | wireType);\n  }\n\n  writeDouble(_value: number): void {\n    this.pos += 8;\n  }\n\n  writeString(str: string): void {\n    const byteLen = utf8ByteLength(str);\n    this.pos += estimateVarintSize(byteLen);\n    this.pos += byteLen;\n  }\n}\n"]}