{"version":3,"file":"newline-async-iterator.min.cjs","sources":["../../src/decodeUTF8.ts","../../src/index.ts"],"sourcesContent":["// https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64\n/* c8 ignore start */\nlet decodeUTF8 = function decode(uint8Array: Uint8Array): string {\n  let sView = '';\n\n  for (let nPart: number, nLen = uint8Array.length, nIdx = 0; nIdx < nLen; nIdx++) {\n    nPart = uint8Array[nIdx];\n    sView += String.fromCharCode(\n      nPart > 251 && nPart < 254 && nIdx + 5 < nLen /* six bytes */\n        ? /* (nPart - 252 << 30) may be not so safe in ECMAScript! So...: */\n          (nPart - 252) * 1073741824 + ((uint8Array[++nIdx] - 128) << 24) + ((uint8Array[++nIdx] - 128) << 18) + ((uint8Array[++nIdx] - 128) << 12) + ((uint8Array[++nIdx] - 128) << 6) + uint8Array[++nIdx] - 128\n        : nPart > 247 && nPart < 252 && nIdx + 4 < nLen /* five bytes */\n          ? ((nPart - 248) << 24) + ((uint8Array[++nIdx] - 128) << 18) + ((uint8Array[++nIdx] - 128) << 12) + ((uint8Array[++nIdx] - 128) << 6) + uint8Array[++nIdx] - 128\n          : nPart > 239 && nPart < 248 && nIdx + 3 < nLen /* four bytes */\n            ? ((nPart - 240) << 18) + ((uint8Array[++nIdx] - 128) << 12) + ((uint8Array[++nIdx] - 128) << 6) + uint8Array[++nIdx] - 128\n            : nPart > 223 && nPart < 240 && nIdx + 2 < nLen /* three bytes */\n              ? ((nPart - 224) << 12) + ((uint8Array[++nIdx] - 128) << 6) + uint8Array[++nIdx] - 128\n              : nPart > 191 && nPart < 224 && nIdx + 1 < nLen /* two bytes */\n                ? ((nPart - 192) << 6) + uint8Array[++nIdx] - 128\n                : /* nPart < 127 ? */ /* one byte */\n                  nPart\n    );\n  }\n\n  return sView;\n};\n/* c8 ignore stop */\n\nif (typeof TextDecoder !== 'undefined') {\n  const decoder = new TextDecoder('utf8');\n  decodeUTF8 = function decodeTextDecoder(uint8Array: Uint8Array): string {\n    return decoder.decode(uint8Array);\n  };\n}\n\nexport default decodeUTF8;\n","import decodeUTF8 from './decodeUTF8.ts';\n\nconst REGEX_NEW_LINE = /\\r?\\n|\\r/g;\n\nconst root = typeof window === 'undefined' ? global : window;\n// biome-ignore lint/suspicious/noShadowRestrictedNames: Legacy\nconst Symbol: SymbolConstructor = typeof root.Symbol === 'undefined' ? ({ asyncIterator: undefined } as unknown as SymbolConstructor) : root.Symbol;\n\n/**\n * Create a newline iterator recognizing CR, LF, and CRLF using the Symbol.asyncIterator interface\n *\n * @param source The string to iterate through\n *\n * ```typescript\n * import newlineIterator from \"newline-async-iterator\";\n *\n * const iterator = newlineIterator(\"some\\r\\nstring\\ncombination\\r\");\n * const results = [];\n * for (const line of iterator) results.push(line);\n * console.log(results); // [\"some\", \"string\", \"combination\"];\n * ```\n */\n\nexport default function newlineIterator(source: AsyncIterable<Uint8Array> | AsyncIterator<Uint8Array>): AsyncIterableIterator<string> {\n  const lines = [];\n  let last = '';\n  let done = false;\n\n  const sourceIterator = Symbol.asyncIterator ? source[Symbol.asyncIterator]() : source;\n\n  function generateNext(): Promise<IteratorResult<string, boolean>> {\n    return new Promise((resolve, reject) => {\n      sourceIterator.next().then((next) => {\n        if (next.done) done = true;\n        else last += decodeUTF8(next.value);\n\n        const end = last.length > 0 ? last[last.length - 1] : '';\n        if (done || (end !== '\\r' && end !== '\\n')) {\n          const moreLines = last.split(REGEX_NEW_LINE);\n          last = moreLines.pop();\n          moreLines.forEach((line) => lines.unshift(line));\n          if (done && last.length > 0) {\n            lines.unshift(last);\n            last = '';\n          }\n        }\n\n        if (lines.length > 0) {\n          const value = lines.pop();\n          if (done && lines.length === 0 && value.length === 0) return resolve({ value: null, done: true });\n          return resolve({ value, done: false });\n        }\n        if (done) return resolve({ value: null, done: true });\n        generateNext().then(resolve).catch(reject); // get more\n      });\n    });\n  }\n\n  const iterator = {\n    next(): Promise<IteratorResult<string, boolean>> {\n      return generateNext();\n    },\n    [Symbol.asyncIterator](): AsyncIterator<string> {\n      return this;\n    },\n  };\n\n  return iterator as AsyncIterableIterator<string>;\n}\n"],"names":["decodeUTF8","uint8Array","nPart","sView","nLen","length","nIdx","String","fromCharCode","TextDecoder","decoder","decode","decodeUTF8$1","REGEX_NEW_LINE","root","window","global","Symbol","asyncIterator","undefined","source","lines","last","done","sourceIterator","generateNext","Promise","resolve","reject","next","then","value","end","moreLines","split","pop","forEach","line","unshift","catch","this"],"mappings":"oPAEA,IAAIA,EAAa,SAAgBC,GAG/B,IAFA,IAESC,EAFLC,EAAQ,GAEYC,EAAOH,EAAWI,OAAQC,EAAO,EAAGA,EAAOF,EAAME,IACvEJ,EAAQD,EAAWK,GACnBH,GAASI,OAAOC,aACdN,EAAQ,KAAOA,EAAQ,KAAOI,EAAO,EAAIF,EAErB,YAAfF,EAAQ,MAAqBD,IAAcK,GAAQ,KAAQ,KAAQL,IAAaK,GAAQ,KAAQ,KAAQL,IAAaK,GAAQ,KAAQ,KAAOL,IAAcK,GAAQ,KAAQ,GAAKL,IAAaK,GAAQ,IACrMJ,EAAQ,KAAOA,EAAQ,KAAOI,EAAO,EAAIF,GACrCF,EAAQ,KAAQ,KAAOD,IAAcK,GAAQ,KAAQ,KAAQL,IAAaK,GAAQ,KAAQ,KAAQL,IAAaK,GAAQ,KAAQ,GAAKL,IAAaK,GAAQ,IAC3JJ,EAAQ,KAAOA,EAAQ,KAAOI,EAAO,EAAIF,GACtCF,EAAS,KAAQ,KAAOD,IAAcK,GAAQ,KAAQ,KAAOL,IAAcK,GAAQ,KAAQ,GAAKL,IAAaK,GAAQ,IACtHJ,EAAQ,KAAOA,EAAQ,KAAOI,EAAO,EAAIF,GACtCF,EAAS,KAAQ,KAAOD,IAAcK,GAAQ,KAAQ,GAAKL,IAAaK,GAAQ,IACjFJ,EAAQ,KAAOA,EAAQ,KAAOI,EAAO,EAAIF,GACtCF,EAAS,KAAQ,GAAKD,IAAaK,GAAQ,IAE5CJ,GAIhB,OAAOC,CACT,EAGA,GAA2B,oBAAhBM,YAA6B,CACtC,IAAMC,EAAU,IAAID,YAAY,QAChCT,EAAa,SAA2BC,GACtC,OAAOS,EAAQC,OAAOV,EACxB,CACF,CAEA,IAAAW,EAAeZ,ECjCf,IAAMa,EAAiB,YAEjBC,EAAyB,oBAAXC,OAAyBC,OAASD,OAEhDE,OAAmD,IAAhBH,EAAKG,OAA0B,CAAEC,mBAAeC,GAA+CL,EAAKG,cAiB9H,SAAyBG,GACtC,UAAMC,EAAQ,GACVC,EAAO,GACPC,GAAO,EAELC,EAAiBP,EAAOC,cAAgBE,EAAOH,EAAOC,iBAAmBE,EAE/E,SAASK,IACP,OAAO,IAAIC,QAAQ,SAACC,EAASC,GAC3BJ,EAAeK,OAAOC,KAAK,SAACD,GACtBA,EAAKN,KAAMA,GAAO,EACjBD,GAAQtB,EAAW6B,EAAKE,OAE7B,IAAMC,EAAMV,EAAKjB,OAAS,EAAIiB,EAAKA,EAAKjB,OAAS,GAAK,GACtD,GAAIkB,GAAiB,OAARS,GAAwB,OAARA,EAAe,CAC1C,IAAMC,EAAYX,EAAKY,MAAMrB,GAC7BS,EAAOW,EAAUE,MACjBF,EAAUG,QAAQ,SAACC,GAAShB,OAAAA,EAAMiB,QAAQD,KACtCd,GAAQD,EAAKjB,OAAS,IACxBgB,EAAMiB,QAAQhB,GACdA,EAAO,GAEX,CAEA,GAAID,EAAMhB,OAAS,EAAG,CACpB,IAAM0B,EAAQV,EAAMc,MACpB,OAAIZ,GAAyB,IAAjBF,EAAMhB,QAAiC,IAAjB0B,EAAM1B,OAAqBsB,EAAQ,CAAEI,MAAO,KAAMR,MAAM,IACnFI,EAAQ,CAAEI,MAAAA,EAAOR,MAAM,GAChC,CACA,GAAIA,EAAM,OAAOI,EAAQ,CAAEI,MAAO,KAAMR,MAAM,IAC9CE,IAAeK,KAAKH,GAASY,MAAMX,EACrC,EACF,EACF,CAWA,SALE,CAHAC,KAAAA,WACE,OAAOJ,GACT,KACCR,EAAOC,gBAAR,WACE,OAAOsB,IACT,gGAIJ"}