From 467b9ad2ce07aed209a4c2599c19f702a1b59ca5 Mon Sep 17 00:00:00 2001 From: Sendil Kumar Date: Sun, 4 Mar 2018 18:10:27 +0100 Subject: [PATCH 1/2] chore(migrate): move options to use --- .../__snapshots__/loaders.test.js.snap | 12 +++-- .../__testfixtures__/loaders-9.input.js | 14 ++++++ lib/migrate/loaders/loaders.js | 48 ++++++++++++++++++- 3 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 lib/migrate/loaders/__testfixtures__/loaders-9.input.js diff --git a/lib/migrate/loaders/__snapshots__/loaders.test.js.snap b/lib/migrate/loaders/__snapshots__/loaders.test.js.snap index 4a54f71ec3d..7fa15906328 100644 --- a/lib/migrate/loaders/__snapshots__/loaders.test.js.snap +++ b/lib/migrate/loaders/__snapshots__/loaders.test.js.snap @@ -229,12 +229,14 @@ exports[`loaders transforms correctly using "loaders-7" data 1`] = ` { test: /\\\\.js$/, exclude: /(node_modules)/, + use: [{ - loader: 'babel-loader' - }], - options: { - presets: ['env'] - } + loader: 'babel-loader', + + options: { + presets: ['env'] + } + }] } ] } diff --git a/lib/migrate/loaders/__testfixtures__/loaders-9.input.js b/lib/migrate/loaders/__testfixtures__/loaders-9.input.js new file mode 100644 index 00000000000..0bf440bce28 --- /dev/null +++ b/lib/migrate/loaders/__testfixtures__/loaders-9.input.js @@ -0,0 +1,14 @@ +module.exports = { + module: { + loaders: [ + { + test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/], + loader: 'url-loader', + options: { + limit: 10000, + name: 'static/media/[name].[hash:8].[ext]' + } + } + ] + } +} diff --git a/lib/migrate/loaders/loaders.js b/lib/migrate/loaders/loaders.js index a2820068be7..571ed4c6bb0 100644 --- a/lib/migrate/loaders/loaders.js +++ b/lib/migrate/loaders/loaders.js @@ -319,13 +319,59 @@ module.exports = function(j, ast) { }); }); + /** + * + * Puts options object outside use object into use object + * + * @param {Node} p - object expression ast that has a key for either 'options' or 'use' + * @returns {Node} objectExpression - an use object expression ast containing the options and loader + */ + + const fitOptionsToUse = p => { + let options; + p.value.properties.map(prop => { + const keyName = prop.key.name; + if (keyName === "options") { + options = prop; + } + }); + + if (options) { + p.value.properties = p.value.properties.filter( + prop => prop.key.name !== "options" + ); + + p.value.properties.map(prop => { + const keyName = prop.key.name; + if (keyName === "use") { + prop.value.elements[0].properties.push(options); + } + }); + } + + return p; + }; + + /** + * Move `options` inside the Array of {Rule.Use} + * + * @returns {Node} ast - jscodeshift ast + */ + + const moveOptionsToUse = () => + ast + .find(j.ObjectExpression) + .filter(p => utils.findObjWithOneOfKeys(p, ["use"])) + .forEach(fitOptionsToUse); + const transforms = [ prepostLoaders, loadersToRules, loadersToArrayExpression, loaderWithQueryParam, loaderWithQueryProp, - addLoaderSuffix + addLoaderSuffix, + moveOptionsToUse ]; transforms.forEach(t => t()); From bcf56ef98f1799a1ab41d12f9ae6c5aaecaa1f0c Mon Sep 17 00:00:00 2001 From: Sendil Kumar Date: Tue, 6 Mar 2018 18:14:30 +0100 Subject: [PATCH 2/2] chore: fix review comments --- lib/migrate/loaders/loaders.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/migrate/loaders/loaders.js b/lib/migrate/loaders/loaders.js index 571ed4c6bb0..23903f89ce4 100644 --- a/lib/migrate/loaders/loaders.js +++ b/lib/migrate/loaders/loaders.js @@ -329,7 +329,7 @@ module.exports = function(j, ast) { const fitOptionsToUse = p => { let options; - p.value.properties.map(prop => { + p.value.properties.forEach(prop => { const keyName = prop.key.name; if (keyName === "options") { options = prop; @@ -341,7 +341,7 @@ module.exports = function(j, ast) { prop => prop.key.name !== "options" ); - p.value.properties.map(prop => { + p.value.properties.forEach(prop => { const keyName = prop.key.name; if (keyName === "use") { prop.value.elements[0].properties.push(options);