{"version":3,"file":"index.cjs","names":["createBinEncoder","encodeToUint8Array","readAny","createDecoder","toUint8Array","writeVarUint8Array","writeVarUint","writeUint8","writeUint16","writeUint32","writeVarInt","writeFloat32","writeVarString","writeAny","length","readUint8Array","readVarUint8Array","readVarUint","readUint8","readUint16","readUint32","readVarInt","readFloat32","readVarString"],"sources":["../../../src/common/bin/index.ts"],"sourcesContent":["import type { BinInput } from '../data/bin-types'\nimport type { Encoder } from '../msg/encoder'\nimport { assertCondition } from '../assert'\nimport { toUint8Array } from '../data/bin'\nimport { createDecoder, readAny, readFloat32, readUint8, readUint8Array, readUint16, readUint32, readVarInt, readVarString, readVarUint, readVarUint8Array } from './lib0/decoding'\nimport { createBinEncoder, encodeToUint8Array, length, writeAny, writeFloat32, writeUint8, writeUint8Array, writeUint16, writeUint32, writeVarInt, writeVarString, writeVarUint, writeVarUint8Array } from './lib0/encoding'\n\n// Use in Zeed channels\n\nexport class BinaryEncoder implements Encoder {\n  async encode(data: any): Promise<Uint8Array> {\n    const dataEncoder = createBinEncoder()\n    writeAny(dataEncoder, data)\n    return encodeToUint8Array(dataEncoder)\n  }\n\n  async decode(data: Uint8Array | ArrayBuffer): Promise<any> {\n    return readAny(createDecoder(toUint8Array(data)))\n  }\n}\n\n// Json like\n\n/** Encode any object, including Uint8Array data */\nexport function encodeJson(data: any): Uint8Array {\n  const dataEncoder = createBinEncoder()\n  writeAny(dataEncoder, data)\n  return encodeToUint8Array(dataEncoder)\n}\n\n/** Decode any object, including Uint8Array data */\nexport function decodeJson(data: Uint8Array | ArrayBuffer): any {\n  return readAny(createDecoder(toUint8Array(data)))\n}\n\n// Stream like\n\n/** Incrementally encode binary data */\nexport function createBinaryStreamEncoder(initialData?: BinInput) {\n  const dataEncoder = createBinEncoder()\n\n  if (initialData != null)\n    writeUint8Array(dataEncoder, toUint8Array(initialData))\n\n  return {\n    /** Just writes the bytes. Length is not stored! */\n    writeBytes: (data: BinInput, expectedLength: number) => {\n      const bin = toUint8Array(data)\n      assertCondition(!(expectedLength != null && bin.length !== expectedLength), `Expected ${expectedLength} bytes, got ${bin.length}`)\n      writeUint8Array(dataEncoder, bin)\n    },\n    writeBytesVar: (data: BinInput) => writeVarUint8Array(dataEncoder, toUint8Array(data)),\n    writeUintVar: (data: number) => writeVarUint(dataEncoder, data),\n    writeUint8: (data: number) => writeUint8(dataEncoder, data),\n    writeUint16: (data: number) => writeUint16(dataEncoder, data),\n    writeUint32: (data: number) => writeUint32(dataEncoder, data),\n    writeIntVar: (data: number) => writeVarInt(dataEncoder, data),\n    writeFloat: (data: number) => writeFloat32(dataEncoder, data),\n    writeStringVar: (data: string) => writeVarString(dataEncoder, data),\n    write: (data: any) => writeAny(dataEncoder, data),\n    getUint8Array: (): Uint8Array => encodeToUint8Array(dataEncoder),\n    getLength: () => length(dataEncoder),\n  }\n}\n\n/** Incrementally decode binary data */\nexport function createBinaryStreamDecoder(data: BinInput) {\n  const dataDecoder = createDecoder(toUint8Array(data))\n  return {\n    readBytes: (len: number): Uint8Array => readUint8Array(dataDecoder, len),\n    readBytesVar: (): Uint8Array => readVarUint8Array(dataDecoder),\n    readUintVar: (): number => readVarUint(dataDecoder),\n    readUint8: (): number => readUint8(dataDecoder),\n    readUint16: (): number => readUint16(dataDecoder),\n    readUint32: (): number => readUint32(dataDecoder),\n    readIntVar: (): number => readVarInt(dataDecoder),\n    readFloat: (): number => readFloat32(dataDecoder),\n    readStringVar: (): string => readVarString(dataDecoder),\n    read: (): any => readAny(dataDecoder),\n    getOffset: (): number => dataDecoder.pos || 0,\n  }\n}\n\n// https://stackoverflow.com/a/1436448/140927\nexport function bitfield(bitfield = 0) {\n  return {\n    setBit: (bit: number, value = true): number => value ? (bitfield |= 1 << bit) : (bitfield &= ~(1 << bit)),\n    unsetBit: (bit: number): number => (bitfield &= 1 << bit),\n    toggleBit: (bit: number): number => (bitfield ^= 1 << bit),\n    getBit: (bit: number): boolean => (bitfield & (1 << bit)) !== 0,\n    getValue: () => bitfield,\n  }\n}\n\n// Cast\n\nexport async function blobToArrayBuffer(blob: Blob | File): Promise<ArrayBuffer | undefined> {\n  if (blob.arrayBuffer)\n    return await blob.arrayBuffer()\n\n  // Fallback for older browsers\n  try {\n    return new Promise((resolve, reject) => {\n      try {\n        const reader = new FileReader()\n        reader.onloadend = () => resolve(reader.result as ArrayBuffer)\n        reader.onerror = err => reject(err)\n        reader.onabort = err => reject(err)\n        reader.readAsArrayBuffer(blob)\n      }\n      catch (err) {\n        reject(err)\n      }\n    })\n  }\n  catch (err) {}\n}\n\nexport async function blobToUint8Array(blob: Blob | File): Promise<Uint8Array | undefined> {\n  const buffer = await blobToArrayBuffer(blob)\n  if (buffer != null)\n    return toUint8Array(buffer)\n}\n"],"mappings":";;;;;;;AASA,IAAa,gBAAb,MAA8C;CAC5C,MAAM,OAAO,MAAgC;EAC3C,MAAM,cAAcA,mDAAkB;AACtC,4CAAS,aAAa,KAAK;AAC3B,SAAOC,oDAAmB,YAAY;;CAGxC,MAAM,OAAO,MAA8C;AACzD,SAAOC,yCAAQC,+CAAcC,yBAAa,KAAK,CAAC,CAAC;;;;AAOrD,SAAgB,WAAW,MAAuB;CAChD,MAAM,cAAcJ,mDAAkB;AACtC,2CAAS,aAAa,KAAK;AAC3B,QAAOC,oDAAmB,YAAY;;;AAIxC,SAAgB,WAAW,MAAqC;AAC9D,QAAOC,yCAAQC,+CAAcC,yBAAa,KAAK,CAAC,CAAC;;;AAMnD,SAAgB,0BAA0B,aAAwB;CAChE,MAAM,cAAcJ,mDAAkB;AAEtC,KAAI,eAAe,KACjB,kDAAgB,aAAaI,yBAAa,YAAY,CAAC;AAEzD,QAAO;EAEL,aAAa,MAAgB,mBAA2B;GACtD,MAAM,MAAMA,yBAAa,KAAK;AAC9B,yCAAgB,EAAE,kBAAkB,QAAQ,IAAI,WAAW,iBAAiB,YAAY,eAAe,cAAc,IAAI,SAAS;AAClI,oDAAgB,aAAa,IAAI;;EAEnC,gBAAgB,SAAmBC,oDAAmB,aAAaD,yBAAa,KAAK,CAAC;EACtF,eAAe,SAAiBE,8CAAa,aAAa,KAAK;EAC/D,aAAa,SAAiBC,4CAAW,aAAa,KAAK;EAC3D,cAAc,SAAiBC,6CAAY,aAAa,KAAK;EAC7D,cAAc,SAAiBC,6CAAY,aAAa,KAAK;EAC7D,cAAc,SAAiBC,6CAAY,aAAa,KAAK;EAC7D,aAAa,SAAiBC,8CAAa,aAAa,KAAK;EAC7D,iBAAiB,SAAiBC,gDAAe,aAAa,KAAK;EACnE,QAAQ,SAAcC,0CAAS,aAAa,KAAK;EACjD,qBAAiCZ,oDAAmB,YAAY;EAChE,iBAAiBa,wCAAO,YAAY;EACrC;;;AAIH,SAAgB,0BAA0B,MAAgB;CACxD,MAAM,cAAcX,+CAAcC,yBAAa,KAAK,CAAC;AACrD,QAAO;EACL,YAAY,QAA4BW,gDAAe,aAAa,IAAI;EACxE,oBAAgCC,mDAAkB,YAAY;EAC9D,mBAA2BC,6CAAY,YAAY;EACnD,iBAAyBC,2CAAU,YAAY;EAC/C,kBAA0BC,4CAAW,YAAY;EACjD,kBAA0BC,4CAAW,YAAY;EACjD,kBAA0BC,4CAAW,YAAY;EACjD,iBAAyBC,6CAAY,YAAY;EACjD,qBAA6BC,+CAAc,YAAY;EACvD,YAAiBrB,yCAAQ,YAAY;EACrC,iBAAyB,YAAY,OAAO;EAC7C;;AAIH,SAAgB,SAAS,WAAW,GAAG;AACrC,QAAO;EACL,SAAS,KAAa,QAAQ,SAAiB,QAAS,YAAY,KAAK,MAAQ,YAAY,EAAE,KAAK;EACpG,WAAW,QAAyB,YAAY,KAAK;EACrD,YAAY,QAAyB,YAAY,KAAK;EACtD,SAAS,SAA0B,WAAY,KAAK,SAAU;EAC9D,gBAAgB;EACjB;;AAKH,eAAsB,kBAAkB,MAAqD;AAC3F,KAAI,KAAK,YACP,QAAO,MAAM,KAAK,aAAa;AAGjC,KAAI;AACF,SAAO,IAAI,SAAS,SAAS,WAAW;AACtC,OAAI;IACF,MAAM,SAAS,IAAI,YAAY;AAC/B,WAAO,kBAAkB,QAAQ,OAAO,OAAsB;AAC9D,WAAO,WAAU,QAAO,OAAO,IAAI;AACnC,WAAO,WAAU,QAAO,OAAO,IAAI;AACnC,WAAO,kBAAkB,KAAK;YAEzB,KAAK;AACV,WAAO,IAAI;;IAEb;UAEG,KAAK;;AAGd,eAAsB,iBAAiB,MAAoD;CACzF,MAAM,SAAS,MAAM,kBAAkB,KAAK;AAC5C,KAAI,UAAU,KACZ,QAAOE,yBAAa,OAAO"}