({
value,
value: {transform, final, writableObjectMode, readableObjectMode},
optionName,
}, {encoding})
| 36 | `Duplex.from(generator)` cannot be used because it does not allow setting the `objectMode` and `highWaterMark`. |
| 37 | */ |
| 38 | export const generatorToStream = ({ |
| 39 | value, |
| 40 | value: {transform, final, writableObjectMode, readableObjectMode}, |
| 41 | optionName, |
| 42 | }, {encoding}) => { |
| 43 | const state = {}; |
| 44 | const generators = addInternalGenerators(value, encoding, optionName); |
| 45 | |
| 46 | const transformAsync = isAsyncGenerator(transform); |
| 47 | const finalAsync = isAsyncGenerator(final); |
| 48 | const transformMethod = transformAsync |
| 49 | ? pushChunks.bind(undefined, transformChunk, state) |
| 50 | : pushChunksSync.bind(undefined, transformChunkSync); |
| 51 | const finalMethod = transformAsync || finalAsync |
| 52 | ? pushChunks.bind(undefined, finalChunks, state) |
| 53 | : pushChunksSync.bind(undefined, finalChunksSync); |
| 54 | const destroyMethod = transformAsync || finalAsync |
| 55 | ? destroyTransform.bind(undefined, state) |
| 56 | : undefined; |
| 57 | |
| 58 | const stream = new Transform({ |
| 59 | writableObjectMode, |
| 60 | writableHighWaterMark: getDefaultHighWaterMark(writableObjectMode), |
| 61 | readableObjectMode, |
| 62 | readableHighWaterMark: getDefaultHighWaterMark(readableObjectMode), |
| 63 | transform(chunk, encoding, done) { |
| 64 | transformMethod([chunk, generators, 0], this, done); |
| 65 | }, |
| 66 | flush(done) { |
| 67 | finalMethod([generators], this, done); |
| 68 | }, |
| 69 | destroy: destroyMethod, |
| 70 | }); |
| 71 | return {stream}; |
| 72 | }; |
| 73 | |
| 74 | // Applies transform generators in sync mode |
| 75 | export const runGeneratorsSync = (chunks, stdioItems, encoding, isInput) => { |
nothing calls this directly
no test coverage detected