newline-async-iterator
Version:
Line-by-line async iterator for the browser and node
1 lines • 8.9 kB
Source Map (JSON)
{"version":3,"file":"newline-async-iterator.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","decode","uint8Array","sView","nPart","nLen","length","nIdx","String","fromCharCode","TextDecoder","decoder","decodeTextDecoder","REGEX_NEW_LINE","root","window","global","Symbol","asyncIterator","undefined","newlineIterator","source","lines","last","done","sourceIterator","generateNext","Promise","resolve","reject","next","then","value","end","moreLines","split","pop","forEach","line","unshift","catch","iterator"],"mappings":"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"}