Skip to content

Commit 5002366

Browse files
committed
fix(migrate): move options to use
1 parent 3aabdf4 commit 5002366

File tree

3 files changed

+68
-6
lines changed

3 files changed

+68
-6
lines changed

lib/migrate/loaders/__snapshots__/loaders.test.js.snap

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,12 +229,14 @@ exports[`loaders transforms correctly using "loaders-7" data 1`] = `
229229
{
230230
test: /\\\\.js$/,
231231
exclude: /(node_modules)/,
232+
232233
use: [{
233-
loader: 'babel-loader'
234-
}],
235-
options: {
236-
presets: ['env']
237-
}
234+
loader: 'babel-loader',
235+
236+
options: {
237+
presets: ['env']
238+
}
239+
}]
238240
}
239241
]
240242
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module.exports = {
2+
module: {
3+
loaders: [
4+
{
5+
test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
6+
loader: 'url-loader',
7+
options: {
8+
limit: 10000,
9+
name: 'static/media/[name].[hash:8].[ext]'
10+
}
11+
}
12+
]
13+
}
14+
}

lib/migrate/loaders/loaders.js

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,13 +319,59 @@ module.exports = function(j, ast) {
319319
});
320320
});
321321

322+
/**
323+
*
324+
* Puts options object outside use object into use object
325+
*
326+
* @param {Node} p - object expression ast that has a key for either 'options' or 'use'
327+
* @returns {Node} objectExpression - an use object expression ast containing the options and loader
328+
*/
329+
330+
const fitOptionsToUse = p => {
331+
let options;
332+
p.value.properties.map(prop => {
333+
const keyName = prop.key.name;
334+
if (keyName === "options") {
335+
options = prop;
336+
}
337+
});
338+
339+
if (options) {
340+
p.value.properties = p.value.properties.filter(
341+
prop => prop.key.name !== "options"
342+
);
343+
344+
p.value.properties.map(prop => {
345+
const keyName = prop.key.name;
346+
if (keyName === "use") {
347+
prop.value.elements[0].properties.push(options);
348+
}
349+
});
350+
}
351+
352+
return p;
353+
};
354+
355+
/**
356+
* Move `options` inside the Array of {Rule.Use}
357+
*
358+
* @returns {Node} ast - jscodeshift ast
359+
*/
360+
361+
const moveOptionsToUse = () =>
362+
ast
363+
.find(j.ObjectExpression)
364+
.filter(p => utils.findObjWithOneOfKeys(p, ["use"]))
365+
.forEach(fitOptionsToUse);
366+
322367
const transforms = [
323368
prepostLoaders,
324369
loadersToRules,
325370
loadersToArrayExpression,
326371
loaderWithQueryParam,
327372
loaderWithQueryProp,
328-
addLoaderSuffix
373+
addLoaderSuffix,
374+
moveOptionsToUse
329375
];
330376
transforms.forEach(t => t());
331377

0 commit comments

Comments
 (0)