sflow
Version:
sflow is a powerful and highly-extensible library designed for processing and manipulating streams of data effortlessly. Inspired by the functional programming paradigm, it provides a rich set of utilities for transforming streams, including chunking, fil
33 lines (32 loc) • 882 B
text/typescript
/**
* Convert a readable stream to it's latest value
*
* the return object is dynamic updated
*/
export function toLatests<T>(r: ReadableStream<T>): { latest: Promise<T>, next: Promise<T> } {
let latest: T | undefined;
let nextPromise = Promise.withResolvers<T>();
r.pipeTo(
new WritableStream<T>({
write: (value) => {
latest = value;
nextPromise.resolve(value);
nextPromise = Promise.withResolvers<T>();
},
close: () => {
nextPromise.resolve(undefined);
}
})
);
return {
get latest() {
if (latest === undefined) {
return nextPromise.promise;
}
return Promise.resolve(latest);
},
get next() {
return nextPromise.promise;
}
};
}