( parser, options, getContext, requireBindingData )
| 161 | * @returns {(callNew: boolean) => (expr: CallExpression | NewExpression) => (boolean | void)} handler factory |
| 162 | */ |
| 163 | const createRequireCallHandler = ( |
| 164 | parser, |
| 165 | options, |
| 166 | getContext, |
| 167 | requireBindingData |
| 168 | ) => { |
| 169 | /** |
| 170 | * Process require item. |
| 171 | * @param {CallExpression | NewExpression} expr expression |
| 172 | * @param {BasicEvaluatedExpression} param param |
| 173 | * @returns {boolean | void} true when handled |
| 174 | */ |
| 175 | const processRequireItem = (expr, param) => { |
| 176 | if (param.isString()) { |
| 177 | let referencedExports = getRequireReferencedExportsFromDestructuring( |
| 178 | parser, |
| 179 | expr |
| 180 | ); |
| 181 | const binding = |
| 182 | requireBindingData && |
| 183 | requireBindingData.get(/** @type {CallExpression} */ (expr)); |
| 184 | if (binding && !referencedExports) { |
| 185 | // `const NAME = require(LITERAL)` — let later member-access walks |
| 186 | // on `NAME` populate the dependency's referenced exports. |
| 187 | referencedExports = binding.referencedExports; |
| 188 | } |
| 189 | const dep = new CommonJsRequireDependency( |
| 190 | /** @type {string} */ (param.string), |
| 191 | /** @type {Range} */ (param.range), |
| 192 | getContext(), |
| 193 | referencedExports, |
| 194 | /** @type {Range} */ (expr.range) |
| 195 | ); |
| 196 | if (binding) binding.dep = dep; |
| 197 | dep.loc = /** @type {DependencyLocation} */ (expr.loc); |
| 198 | dep.optional = Boolean(parser.scope.inTry); |
| 199 | parser.state.current.addDependency(dep); |
| 200 | getHarmonyImportGuard().attachDependencyGuards(parser, dep); |
| 201 | return true; |
| 202 | } |
| 203 | }; |
| 204 | /** |
| 205 | * Process require context. |
| 206 | * @param {CallExpression | NewExpression} expr expression |
| 207 | * @param {BasicEvaluatedExpression} param param |
| 208 | * @returns {boolean | void} true when handled |
| 209 | */ |
| 210 | const processRequireContext = (expr, param) => { |
| 211 | const referencedExports = getRequireReferencedExportsFromDestructuring( |
| 212 | parser, |
| 213 | expr |
| 214 | ); |
| 215 | const dep = ContextDependencyHelpers.create( |
| 216 | CommonJsRequireContextDependency, |
| 217 | /** @type {Range} */ (expr.range), |
| 218 | param, |
| 219 | expr, |
| 220 | options, |
no test coverage detected