UNPKG

newline-async-iterator

Version:

Line-by-line async iterator for the browser and node

100 lines 3.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, /** * Create a newline iterator recognizing CR, LF, and CRLF using the Symbol.asyncIterator interface * * @param source The async iterable of Uint8Array chunks to iterate through * * ```typescript * import newlineIterator from "newline-async-iterator"; * * const iterator = newlineIterator(readableStream); * const results = []; * for await (const line of iterator) results.push(line); * console.log(results); // ["some", "string", "combination"]; * ``` */ "default", { enumerable: true, get: function() { return newlineIterator; } }); var _decodeUTF8ts = /*#__PURE__*/ _interop_require_default(require("./decodeUTF8.js")); function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var REGEX_NEW_LINE = /\r?\n|\r/g; var root = typeof window === 'undefined' ? global : window; // biome-ignore lint/suspicious/noShadowRestrictedNames: Legacy var Symbol = typeof root.Symbol === 'undefined' ? { asyncIterator: undefined } : root.Symbol; function newlineIterator(source) { var decodeUTF8 = (0, _decodeUTF8ts.default)(); var lines = []; var last = ''; var done = false; var sourceIterator = Symbol.asyncIterator ? source[Symbol.asyncIterator]() : source; function generateNext() { return new Promise(function(resolve, reject) { sourceIterator.next().then(function(next) { if (next.done) done = true; else last += decodeUTF8(next.value); var end = last.length > 0 ? last[last.length - 1] : ''; if (done || end !== '\r' && end !== '\n') { var moreLines = last.split(REGEX_NEW_LINE); last = moreLines.pop(); moreLines.forEach(function(line) { lines.unshift(line); }); if (done && last.length > 0) { lines.unshift(last); last = ''; } } if (lines.length > 0) { var value = lines.pop(); if (done && lines.length === 0 && value.length === 0) return resolve({ value: null, done: true }); return resolve({ value: value, done: false }); } if (done) return resolve({ value: null, done: true }); generateNext().then(resolve).catch(reject); // get more }); }); } var iterator = _define_property({ next: function next() { return generateNext(); } }, Symbol.asyncIterator, function() { return this; }); return iterator; } /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }