mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-25 11:28:51 +01:00
9f4820ee98
* wip * build - breakout sentry-install bundle * deps - move new build sys deps to published versions * chore: lint fix * clean - remove unused file * clean - remove unsused package script * lavamoat - update build system policy * build - render html to all platforms * development - improve sourcemap debugger output * deps - update lavapack * lint - fix * deps - update lavapack for bugfix * deps - update lavapack for bugfix * deps - bump lavapack for line ending normalization * sourcemap explorer - disable boundary validation * ci - reset normal ci flow * build - re-enable minification on prod * build - remove noisy log about html dest * build - update terser and remove gulp wrapper for sourcemap fix * Revert "sourcemap explorer - disable boundary validation" This reverts commit 94112209ed880a6ebf4ee2ded411e59db6908162. * build - reenable react-devtools in dev mode * wip * build - breakout sentry-install bundle * deps - move new build sys deps to published versions * chore: lint fix * clean - remove unused file * clean - remove unsused package script * lavamoat - update build system policy * build - render html to all platforms * development - improve sourcemap debugger output * deps - update lavapack * lint - fix * deps - update lavapack for bugfix * deps - update lavapack for bugfix * deps - bump lavapack for line ending normalization * sourcemap explorer - disable boundary validation * ci - reset normal ci flow * build - re-enable minification on prod * build - remove noisy log about html dest * build - update terser and remove gulp wrapper for sourcemap fix * Revert "sourcemap explorer - disable boundary validation" This reverts commit 94112209ed880a6ebf4ee2ded411e59db6908162. * build - reenable react-devtools in dev mode * Updating lockfile * lint fix * build/dev - patch watchifys incompatible binary stats output * ui - add comment about conditional import * build - improve comment * Update development/stream-flat-map.js Co-authored-by: Brad Decker <git@braddecker.dev> * Outputting all bundle file links (metamaskbot) Co-authored-by: ryanml <ryanlanese@gmail.com> Co-authored-by: Brad Decker <git@braddecker.dev>
44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
const { PassThrough: ThroughStream } = require('stream');
|
|
// eslint-ignore-next-line node/no-extraneous-require
|
|
const duplexify = require('duplexify').obj;
|
|
|
|
module.exports = {
|
|
streamFlatMap,
|
|
asyncGeneratorToStream,
|
|
};
|
|
|
|
// returns an async generator that maps each chunk to a stream with the specified
|
|
// "entryToStream" mapping fn, and forwards child streams out
|
|
// useable with streams.pipeline
|
|
function streamFlatMap(entryToStream) {
|
|
const duplex = asyncGeneratorToStream(flatMapGenerator);
|
|
return duplex;
|
|
|
|
async function* flatMapGenerator(source) {
|
|
for await (const entry of source) {
|
|
const subStream = entryToStream(entry);
|
|
yield* subStream;
|
|
}
|
|
}
|
|
}
|
|
|
|
// this stupid utility turns an async iterator factory into a duplex stream
|
|
function asyncGeneratorToStream(factoryFn) {
|
|
const writableStream = new ThroughStream({ objectMode: true });
|
|
const readableStream = new ThroughStream({ objectMode: true });
|
|
const duplex = duplexify(writableStream, readableStream);
|
|
const asyncIter = factoryFn(writableStream);
|
|
// drain iterator into readable stream
|
|
process.nextTick(async () => {
|
|
try {
|
|
for await (const item of asyncIter) {
|
|
readableStream.write(item);
|
|
}
|
|
readableStream.end();
|
|
} catch (err) {
|
|
readableStream.destroy(err);
|
|
}
|
|
});
|
|
return duplex;
|
|
}
|