MCPcopy Create free account
hub / github.com/sindresorhus/execa / generatorToStream

Function generatorToStream

lib/transform/generator.js:38–72  ·  view source on GitHub ↗
({
	value,
	value: {transform, final, writableObjectMode, readableObjectMode},
	optionName,
}, {encoding})

Source from the content-addressed store, hash-verified

36`Duplex.from(generator)` cannot be used because it does not allow setting the `objectMode` and `highWaterMark`.
37*/
38export 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
75export const runGeneratorsSync = (chunks, stdioItems, encoding, isInput) => {

Callers

nothing calls this directly

Calls 2

isAsyncGeneratorFunction · 0.90
addInternalGeneratorsFunction · 0.85

Tested by

no test coverage detected