asyncerator
Version:
Provide supporting types for AsyncIterable/AsyncIterableIterators, promisified stream.pipeline implementation, and Array-like utility operators, sources and sinks.
40 lines (39 loc) • 2.49 kB
JavaScript
// src/operator/split.ts
function split_default(separator, limit = Number.POSITIVE_INFINITY) {
return async function* (iterator) {
const actualLimit = limit <= -1 ? Number.POSITIVE_INFINITY : limit <= 0 ? 0 : Math.floor(limit);
if (actualLimit === 0) {
return;
}
let previous = "";
let count = 0;
let receivedChunks = false;
for await (const chunk of iterator) {
if (
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
chunk === void 0 || // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
chunk === null || typeof chunk.toString !== "function"
) {
throw new Error(`${JSON.stringify(chunk)} not convertible to a string`);
}
receivedChunks = true;
previous += chunk.toString();
let index;
while (previous.length > 0 && (index = separator === "" ? 1 : previous.indexOf(separator)) >= 0) {
const line = previous.slice(0, index);
yield line;
if (++count >= actualLimit) {
return;
}
previous = previous.slice(index + (separator === "" ? 0 : 1));
}
}
if (separator !== "" && receivedChunks || previous.length > 0 && count < actualLimit) {
yield previous;
}
};
}
export {
split_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29wZXJhdG9yL3NwbGl0LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQW9CZSxTQUFSLGNBQ0wsV0FDQSxRQUFnQixPQUFPLG1CQUNFO0FBQ3pCLFNBQU8saUJBQWlCLFVBQThCO0FBR3BELFVBQU0sY0FBYyxTQUFTLEtBQUssT0FBTyxvQkFBb0IsU0FBUyxJQUFJLElBQUksS0FBSyxNQUFNLEtBQUs7QUFDOUYsUUFBSSxnQkFBZ0IsR0FBRztBQUNyQjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFdBQVc7QUFDZixRQUFJLFFBQVE7QUFDWixRQUFJLGlCQUFpQjtBQUVyQixxQkFBaUIsU0FBUyxVQUFVO0FBQ2xDO0FBQUE7QUFBQSxRQUVFLFVBQVU7QUFBQSxRQUVWLFVBQVUsUUFDVixPQUFRLE1BQXFDLGFBQWE7QUFBQSxRQUMxRDtBQUNBLGNBQU0sSUFBSSxNQUFNLEdBQUcsS0FBSyxVQUFVLEtBQUssQ0FBQyw4QkFBOEI7QUFBQSxNQUN4RTtBQUNBLHVCQUFpQjtBQUNqQixrQkFBWSxNQUFNLFNBQVM7QUFDM0IsVUFBSTtBQUNKLGFBQU8sU0FBUyxTQUFTLE1BQU0sUUFBUSxjQUFjLEtBQUssSUFBSSxTQUFTLFFBQVEsU0FBUyxNQUFNLEdBQUc7QUFDL0YsY0FBTSxPQUFPLFNBQVMsTUFBTSxHQUFHLEtBQUs7QUFDcEMsY0FBTTtBQUNOLFlBQUksRUFBRSxTQUFTLGFBQWE7QUFDMUI7QUFBQSxRQUNGO0FBQ0EsbUJBQVcsU0FBUyxNQUFNLFNBQVMsY0FBYyxLQUFLLElBQUksRUFBRTtBQUFBLE1BQzlEO0FBQUEsSUFDRjtBQUVBLFFBQUssY0FBYyxNQUFNLGtCQUFvQixTQUFTLFNBQVMsS0FBSyxRQUFRLGFBQWM7QUFDeEYsWUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==