babel-plugin-parallel-es
A Babel Plugin that rewrites your Parallel.ES code to add support for debugging your worker code, accessing variables and calling functions from the outer scope from parallel functions. This plugin can be used on a standalone basis, however, it is advised that it is used from a bundler, e.g. with webpack.
Architecture
The Plugin actually consists out of two babel plugins:
Function Extractor Plugin
The function extractor plugin extracts all functions passed to a parallel method. E.g. for the following code:
; const factor = 2; { return value * factor;} { return parallel;}
The plugin detects that the mapper function is passed to a parallel method. Therefore it stores a reference to the function declaration of the mapper
in the ModulesUsingParallelRegistry
. It then replaces the mapper with a function id that uniquely identifies the function:
; const factor = 2; { return factor: factor ;} { return value * factor;} { return parallel;}
However, not only the mapper
function is replaced with a function id, also an additional call to inEnvironment
is added that extracts the variables used inside the mapper
(factor
).
Worker Rewriter
This plugin takes the Code of the parallel-es worker as input and inserts all of the functions extracted by the function-extractor-plugin into the worker code and registers them. For the example above, the following functions and registrations are inserted into the worker code:
{ let factor; { return value * factor; } { try const _environment = argumentsargumentslength - 1; factor = _environmentfactor; return mapper; finally factor = undefined } slaveFunctionLookupTable;};
Besides inserting and registrating all the used functions, the worker rewriter also inserts references to all the used imports. However, it only adds import statements and does not include the imported resources into the bundles itself. To do so, a bundler like webpack should be used.
Test Cases
Test cases showing the expected output can be found in the test-cases directory.