You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// Duplicate the code from `run-async.js` but as synchronous functions
export const pushChunksSync = (getChunksSync, getChunksArguments, transformStream, done) => { try { for (const chunk of getChunksSync(...getChunksArguments)) { transformStream.push(chunk); }
done(); } catch (error) { done(error); }};
// Run synchronous generators with `execaSync()`
export const runTransformSync = (generators, chunks) => [ ...chunks.flatMap(chunk => [...transformChunkSync(chunk, generators, 0)]), ...finalChunksSync(generators),];
export const transformChunkSync = function * (chunk, generators, index) { if (index === generators.length) { yield chunk; return; }
const {transform = identityGenerator} = generators[index]; for (const transformedChunk of transform(chunk)) { yield * transformChunkSync(transformedChunk, generators, index + 1); }};
export const finalChunksSync = function * (generators) { for (const [index, {final}] of Object.entries(generators)) { yield * generatorFinalChunksSync(final, Number(index), generators); }};
const generatorFinalChunksSync = function * (final, index, generators) { if (final === undefined) { return; }
for (const finalChunk of final()) { yield * transformChunkSync(finalChunk, generators, index + 1); }};
const identityGenerator = function * (chunk) { yield chunk;};
|