Transformers
proc
ships with some useful
transformers.
A transformer is a plain-old JavaScript function with this signature:
type Transformer<T, U> = (it: AsyncIterable<T>) => AsyncIterable<U>;
Transformers are functions (and may be defined using asynchronous generator
functions). You can compose them into new functions relatively easily. The
transform
operation is like pipeThrough
in streaming.
A transformer transforms objects from one type to another. It is like map
but
with with complete control over the whole stream of data - including control
over error handling.
You can create a transformer using an asynchronous generator. This one will transform strings to lower-case:
async function* toLower(texts: AsyncIterable<string>) {
for await (const text of texts) {
yield text.toLocaleLowerCase();
}
}
Here it is in action:
const lowered = await enumerable(["A", "B", "C"])
.transform(toLower)
.collect();
assertEquals(lowered, ["a", "b", "c"], "Transformed to lower-case.");