Quiero canalizar dos flujos, ambos flujos de transformación.
Secuencia 1 ( line2Arr ): convierte una línea en una matriz dentro de un objeto y la envía de vuelta a la secuencia
Secuencia 2 ( arr2Json ): toma el objeto con la matriz, crea un objeto diferente con la información y lo envía de vuelta a la secuencia.
Quiero resumir todo esto en una secuencia ( line2JsonStream ) para poder hacer, por ejemplo:
pipeline(readStream, line2JsonStream, writeStream) ¿Qué debe ser la clase line2JsonStream para poder hacer eso? ¿Necesita extender Transform ? y si es así, ¿qué devolvería exactamente?
Cuando los uso por separado pipeline(readStream, line2Arr, arr2Json, writeStream) funcionan, pero quiero poder usarlos como una sola transmisión, y todo lo que he hecho hasta ahora no funcionó.
Al implementar line2Arr y arr2Json como instancias de un Transfom como este
const line2Arr = new Transform({ transform( chunk, enc, cb ) { const transformed = doSomeTransformMagic( chunk ); cb( null, transformed ); } });Podrías hacerlo
readStream.pipe( line2Arr ).pipe( arr2Json ).pipe( writeStream )Si entiendo su pregunta correctamente, desea aplastar las dos instancias de Transform en una sola Stream para que pueda hacer
readStream.pipe( line2ArrAndArr2Json ).pipe( writeStream )lo cual creo que no es fácilmente posible usando las dos instancias de Transform creadas line2Arr y arr2Json. La función pipe() requiere un Writable como argumento y devuelve el mismo objeto. En nuestro caso, es un Transform que también implementa Readable y su función pipe(). Para que el código anterior funcione, debe pasar la interfaz de escritura de line2Arr a readStream.pipe() pero devolver la interfaz de lectura de arr2Json desde readStream.pipe(), lo cual no creo que sea posible.