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
36 lines (35 loc) • 764 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;
},
};
}