newline-async-iterator
Version:
Line-by-line async iterator for the browser and node
100 lines • 3.57 kB
JavaScript
;
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; }