PR #6793 added the ability for DefinePlugin to use function that return values.
This PR just add the ability to these functions to access the module being parsed (see #8301).
eg.
```
webpack.DefinePlugin.runtimeValue(module => module.resource ....)
```
This adds the following API to DefinePlugin:
new webpack.DefinePlugin({
BUILT_AT: webpack.DefinePlugin.runtimeValue(() => Date.now(), [fileDep, ...])
})
* rename ModuleParserHelpers to ParserHelpers
- rename module and file from ModuleParserHelpers to ParserHelpers
- change imports and usages
- rename addParsedVariable to addParsedVariableToModule to add module context again
* introduce setTypeof helper to ParserHelpers
* switch setTypeof in amdplugin - use ParsersHelpers instead
* switch setTypeof in CommonJsPlugin - use ParsersHelpers instead
* switch setTypeof in SystemPlugin - use ParsersHelpers instead
* add ParserHelpers.expressionIsUnsupported method
* use ParserHelpers.expressionIsUnsupported in SystemPlugin and NodeStuffPlugin
* refactor setTypeOf to more atomic helper methods
- reduces sideeffects as parser is called outside of helper
- allows better reuse
* use ParserHelper on more pieces in CommonJsPlugin making BasicEvaluatedExpression obsolete
* switch new BasicEvaluatedExpression().setString(<somestring>).setRange(expr.range) in dependencies to ParserHelpers
* switch other new BasicEvaluatedExpression().setString(<somestring>).setRange(expr.range) to ParserHelpers
* rename wrongly named function - name anonymous functions
breaking change: compiler.parser must no longer be used. Use this instead:
``` js
compiler.plugin("compilation", function(compilation, params) {
params.normalModuleFactory.plugin("parser", function(parser, parserOptions) {
parser.plugin(/* ... */);
});
});
```
required for #2978