Skip to content

Commit

Permalink
fix(migrate): move options to use
Browse files Browse the repository at this point in the history
  • Loading branch information
sendilkumarn committed Mar 4, 2018
1 parent 3aabdf4 commit 5002366
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 6 deletions.
12 changes: 7 additions & 5 deletions lib/migrate/loaders/__snapshots__/loaders.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -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']
}
}]
}
]
}
Expand Down
14 changes: 14 additions & 0 deletions lib/migrate/loaders/__testfixtures__/loaders-9.input.js
Original file line number Diff line number Diff line change
@@ -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]'
}
}
]
}
}
48 changes: 47 additions & 1 deletion lib/migrate/loaders/loaders.js
Original file line number Diff line number Diff line change
Expand Up @@ -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());

Expand Down

0 comments on commit 5002366

Please sign in to comment.