{"version":3,"sources":["../src/utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport type {\n  ByteStreamInfo as ProtoByteStreamInfo,\n  TextStreamInfo as ProtoTextStreamInfo,\n} from '@livekit/rtc-ffi-bindings';\nimport type { ByteStreamInfo, TextStreamInfo } from './data_streams/types.js';\n\n/** convert bigints to numbers preserving undefined values */\nexport function bigIntToNumber<T extends bigint | undefined>(\n  value: T,\n): T extends bigint ? number : undefined {\n  return (value !== undefined ? Number(value) : undefined) as T extends bigint ? number : undefined;\n}\n\n/** convert numbers to bigints preserving undefined values */\nexport function numberToBigInt<T extends number | undefined>(\n  value: T,\n): T extends number ? bigint : undefined {\n  return (value !== undefined ? BigInt(value) : undefined) as T extends number ? bigint : undefined;\n}\n\nexport function splitUtf8(s: string, n: number): Uint8Array[] {\n  if (n < 4) {\n    throw new Error('n must be at least 4 due to utf8 encoding rules');\n  }\n  // adapted from https://stackoverflow.com/a/6043797\n  const result: Uint8Array[] = [];\n  let encoded = new TextEncoder().encode(s);\n  while (encoded.length > n) {\n    let k = n;\n    while (k > 0) {\n      const byte = encoded[k];\n      if (byte !== undefined && (byte & 0xc0) !== 0x80) {\n        break;\n      }\n      k--;\n    }\n    result.push(encoded.slice(0, k));\n    encoded = encoded.slice(k);\n  }\n  if (encoded.length > 0) {\n    result.push(encoded);\n  }\n  return result;\n}\n\n/** @internal */\nexport function textStreamInfoFromProto(info: ProtoTextStreamInfo): TextStreamInfo {\n  return {\n    streamId: info.streamId!,\n    mimeType: info.mimeType!,\n    topic: info.topic!,\n    timestamp: bigIntToNumber(info.timestamp!),\n    totalSize: info.totalLength ? bigIntToNumber(info.totalLength) : undefined,\n    attributes: info.attributes,\n  };\n}\n\n/** @internal */\nexport function byteStreamInfoFromProto(info: ProtoByteStreamInfo): ByteStreamInfo {\n  return {\n    streamId: info.streamId!,\n    name: info.name ?? 'unknown',\n    mimeType: info.mimeType!,\n    topic: info.topic!,\n    timestamp: bigIntToNumber(info.timestamp!),\n    totalSize: info.totalLength !== undefined ? bigIntToNumber(info.totalLength) : undefined,\n    attributes: info.attributes,\n  };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,SAAS,eACd,OACuC;AACvC,SAAQ,UAAU,SAAY,OAAO,KAAK,IAAI;AAChD;AAGO,SAAS,eACd,OACuC;AACvC,SAAQ,UAAU,SAAY,OAAO,KAAK,IAAI;AAChD;AAEO,SAAS,UAAU,GAAW,GAAyB;AAC5D,MAAI,IAAI,GAAG;AACT,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAEA,QAAM,SAAuB,CAAC;AAC9B,MAAI,UAAU,IAAI,YAAY,EAAE,OAAO,CAAC;AACxC,SAAO,QAAQ,SAAS,GAAG;AACzB,QAAI,IAAI;AACR,WAAO,IAAI,GAAG;AACZ,YAAM,OAAO,QAAQ,CAAC;AACtB,UAAI,SAAS,WAAc,OAAO,SAAU,KAAM;AAChD;AAAA,MACF;AACA;AAAA,IACF;AACA,WAAO,KAAK,QAAQ,MAAM,GAAG,CAAC,CAAC;AAC/B,cAAU,QAAQ,MAAM,CAAC;AAAA,EAC3B;AACA,MAAI,QAAQ,SAAS,GAAG;AACtB,WAAO,KAAK,OAAO;AAAA,EACrB;AACA,SAAO;AACT;AAGO,SAAS,wBAAwB,MAA2C;AACjF,SAAO;AAAA,IACL,UAAU,KAAK;AAAA,IACf,UAAU,KAAK;AAAA,IACf,OAAO,KAAK;AAAA,IACZ,WAAW,eAAe,KAAK,SAAU;AAAA,IACzC,WAAW,KAAK,cAAc,eAAe,KAAK,WAAW,IAAI;AAAA,IACjE,YAAY,KAAK;AAAA,EACnB;AACF;AAGO,SAAS,wBAAwB,MAA2C;AACjF,SAAO;AAAA,IACL,UAAU,KAAK;AAAA,IACf,MAAM,KAAK,QAAQ;AAAA,IACnB,UAAU,KAAK;AAAA,IACf,OAAO,KAAK;AAAA,IACZ,WAAW,eAAe,KAAK,SAAU;AAAA,IACzC,WAAW,KAAK,gBAAgB,SAAY,eAAe,KAAK,WAAW,IAAI;AAAA,IAC/E,YAAY,KAAK;AAAA,EACnB;AACF;","names":[]}