12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- const utils = require("../../utils/ast-utils");
- /**
- *
- * Check whether `node` is the invocation of the plugin denoted by `pluginName`
- *
- * @param {Object} j - jscodeshift top-level import
- * @param {Node} node - ast node to check
- * @param {String} pluginName - name of the plugin
- * @returns {Boolean} isPluginInvocation - whether `node` is the invocation of the plugin denoted by `pluginName`
- */
- function findInvocation(j, node, pluginName) {
- let found = false;
- found =
- j(node)
- .find(j.MemberExpression)
- .filter(p => p.get("object").value.name === pluginName)
- .size() > 0;
- return found;
- }
- /**
- *
- * Transform for ExtractTextPlugin arguments. Consolidates arguments into single options object.
- *
- * @param {Object} j - jscodeshift top-level import
- * @param {Node} ast - jscodeshift ast to transform
- * @returns {Node} ast - jscodeshift ast
- */
- module.exports = function(j, ast) {
- const changeArguments = function(p) {
- const args = p.value.arguments;
- const literalArgs = args.filter(p => utils.isType(p, "Literal"));
- if (literalArgs && literalArgs.length > 1) {
- const newArgs = j.objectExpression(
- literalArgs.map((p, index) =>
- utils.createProperty(j, index === 0 ? "fallback" : "use", p.value)
- )
- );
- p.value.arguments = [newArgs];
- }
- return p;
- };
- const name = utils.findVariableToPlugin(
- j,
- ast,
- "extract-text-webpack-plugin"
- );
- if (!name) return ast;
- return ast
- .find(j.CallExpression)
- .filter(p => findInvocation(j, p, name))
- .forEach(changeArguments);
- };
|