| /* |
| MIT License http://www.opensource.org/licenses/mit-license.php |
| Author Tobias Koppers @sokra |
| */ |
| "use strict"; |
| |
| const RequireContextDependency = require("./RequireContextDependency"); |
| |
| module.exports = class RequireContextDependencyParserPlugin { |
| apply(parser) { |
| parser.hooks.call |
| .for("require.context") |
| .tap("RequireContextDependencyParserPlugin", expr => { |
| let regExp = /^\.\/.*$/; |
| let recursive = true; |
| let mode = "sync"; |
| switch (expr.arguments.length) { |
| case 4: { |
| const modeExpr = parser.evaluateExpression(expr.arguments[3]); |
| if (!modeExpr.isString()) return; |
| mode = modeExpr.string; |
| } |
| // falls through |
| case 3: { |
| const regExpExpr = parser.evaluateExpression(expr.arguments[2]); |
| if (!regExpExpr.isRegExp()) return; |
| regExp = regExpExpr.regExp; |
| } |
| // falls through |
| case 2: { |
| const recursiveExpr = parser.evaluateExpression(expr.arguments[1]); |
| if (!recursiveExpr.isBoolean()) return; |
| recursive = recursiveExpr.bool; |
| } |
| // falls through |
| case 1: { |
| const requestExpr = parser.evaluateExpression(expr.arguments[0]); |
| if (!requestExpr.isString()) return; |
| const dep = new RequireContextDependency( |
| { |
| request: requestExpr.string, |
| recursive, |
| regExp, |
| mode |
| }, |
| expr.range |
| ); |
| dep.loc = expr.loc; |
| dep.optional = parser.scope.inTry; |
| parser.state.current.addDependency(dep); |
| return true; |
| } |
| } |
| }); |
| } |
| }; |