Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | 14x 29x 29x 11x 18x 18x 18x 18x 7x 11x 11x 2x 9x 39x 39x 39x 39x 4x 4x 35x 4x 4x 31x 31x 31x 4x 1x 4x 27x 12x 45x 45x 54x 30x 54x | export default function () { return { name: 'transform-remove-imports', visitor: { // https://babeljs.io/docs/en/babel-types#callexpression CallExpression(path, state) { const { node } = path; if (node.callee.name !== 'require') { return; } const argument = node.arguments[0]; const moduleId = argument.value; const options = state.opts; if (options.test && !testMatches(moduleId, options.test)) { return; } const parentType = path.parentPath.node.type; // In remove effects mode we should delete only requires that are // simple expression statements if ( options.remove === 'effects' && parentType !== 'ExpressionStatement' ) { return; } path.remove(); }, // https://babeljs.io/docs/en/babel-types#importdeclaration ImportDeclaration(path, state) { const { node } = path; const { source } = node; const { opts } = state; if (opts.removeAll) { path.remove(); return; } if (!opts.test) { console.warn('transform-remove-imports: "test" option should be specified'); return; } /** @var {string} importName */ const importName = (source && source.value ? source.value : undefined); const isMatch = testMatches(importName, opts.test); // https://github.com/uiwjs/babel-plugin-transform-remove-imports/issues/3 if (opts.remove === 'effects') { if (node.specifiers && node.specifiers.length === 0 && importName && isMatch) { path.remove(); } return; } if (importName && isMatch) { path.remove(); } }, } }; } /** * Determines if the import matches the specified tests. * * @param {string} importName * @param {RegExp|RegExp[]|string|string[]} test * @returns {Boolean} */ function testMatches(importName, test) { // Normalizing tests const tests = Array.isArray(test) ? test : [test]; // Finding out if at least one test matches return tests.some(regex => { if (typeof regex === 'string') { regex = new RegExp(regex); } return regex.test(importName || ''); }); } |