{"version":3,"file":"concat-browser.mjs","sourceRoot":"","sources":["../../../src/util/concat-browser.mts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,SAAS,KAAK,CAAC,MAA+C;IAC5D,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,MAAgF;IAEhF,IAAI,MAAM,YAAY,IAAI,IAAI,MAAM,YAAY,UAAU,EAAE,CAAC;QAC3D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,MAAkB;IAC5C,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,cAAc;QACd,OAAO,MAAiC,CAAC;IAC3C,CAAC;IACD,oBAAoB;IACpB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC;AASD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAgD;IAC3E,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACpF,IAAI,QAAQ,YAAY,IAAI,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { isWebReadableStream } from \"#platform/typeGuards\";\n\n/**\n * Drain the content of the given ReadableStream into a Blob.\n */\nfunction drain(stream: ReadableStream<Uint8Array<ArrayBuffer>>): Promise<Blob> {\n  return new Response(stream).blob();\n}\n\nasync function toBlobPart(\n  source: ReadableStream<Uint8Array<ArrayBuffer>> | Uint8Array<ArrayBuffer> | Blob,\n): Promise<Blob | Uint8Array<ArrayBuffer>> {\n  if (source instanceof Blob || source instanceof Uint8Array) {\n    return source;\n  }\n\n  if (isWebReadableStream(source)) {\n    return drain(source);\n  }\n\n  throw new Error(\n    \"Unsupported source type. Only Blob, Uint8Array, and ReadableStream are supported in browser.\",\n  );\n}\n\n/**\n * Converts a Uint8Array to a Uint8Array<ArrayBuffer>.\n */\nfunction arrayToArrayBuffer(source: Uint8Array): Uint8Array<ArrayBuffer> {\n  if (\"resize\" in source.buffer) {\n    // ArrayBuffer\n    return source as Uint8Array<ArrayBuffer>;\n  }\n  // SharedArrayBuffer\n  return source.map((x) => x);\n}\n\n/**\n * Accepted binary data types for concat\n *\n * @internal\n */\nexport type ConcatSource = ReadableStream<Uint8Array<ArrayBuffer>> | Uint8Array<ArrayBuffer> | Blob;\n\n/**\n * Utility function that concatenates a set of binary inputs into one combined output.\n *\n * @param sources - array of sources for the concatenation\n * @returns a `Blob` representing all the concatenated inputs.\n *\n * @internal\n */\nexport async function concat(sources: (ConcatSource | (() => ConcatSource))[]): Promise<Blob> {\n  const parts: Blob[] = [];\n  for (const source of sources) {\n    const blobPart = await toBlobPart(typeof source === \"function\" ? source() : source);\n    if (blobPart instanceof Blob) {\n      parts.push(blobPart);\n    } else {\n      parts.push(new Blob([arrayToArrayBuffer(blobPart)]));\n    }\n  }\n\n  return new Blob(parts);\n}\n"]}