Skip to content

Commit 3c90e83

Browse files
committedDec 20, 2017
add ResolveLoader distinguished from resolve
1 parent 7c713ce commit 3c90e83

File tree

7 files changed

+168
-3
lines changed

7 files changed

+168
-3
lines changed
 

‎lib/init/transformations/index.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ const pluginsTransform = require("./plugins/plugins");
3333
const topScopeTransform = require("./top-scope/top-scope");
3434
const devServerTransform = require("./devServer/devServer");
3535
const modeTransform = require("./mode/mode");
36+
const resolveLoaderTransform = require("./resolveLoader/resolveLoader");
3637

3738
/**
3839
*
@@ -70,7 +71,8 @@ const transformsObject = {
7071
parallelismTransform,
7172
recordsInputPathTransform,
7273
recordsOutputPathTransform,
73-
recordsPathTransform
74+
recordsPathTransform,
75+
resolveLoaderTransform
7476
};
7577

7678
module.exports = function runTransform(webpackProperties, action) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module.exports = {
2+
entry: 'index.js',
3+
output: {
4+
filename: 'bundle.js'
5+
}
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module.exports = {
2+
entry: 'index.js',
3+
output: {
4+
filename: 'bundle.js'
5+
},
6+
resolveLoader: {
7+
moduleExtensions: [ '-loader' ]
8+
}
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
"use strict";
2+
3+
const utils = require("../../../utils/ast-utils");
4+
5+
/**
6+
*
7+
* Transform for resolveLoader. Finds the resolveLoader property from yeoman and creates a
8+
* property based on what the user has given us.
9+
*
10+
* @param j — jscodeshift API
11+
* @param ast - jscodeshift API
12+
* @param {any} webpackProperties - transformation object to scaffold
13+
* @param {String} action - action that indicates what to be done to the AST
14+
* @returns ast - jscodeshift API
15+
*/
16+
17+
module.exports = function resolveLoaderTransform(
18+
j,
19+
ast,
20+
webpackProperties,
21+
action
22+
) {
23+
function createResolveLoaderProperty(p) {
24+
utils.pushCreateProperty(j, p, "resolveLoader", j.objectExpression([]));
25+
return utils.pushObjectKeys(j, p, webpackProperties, "resolveLoader");
26+
}
27+
if (webpackProperties) {
28+
if (action === "init" && typeof webpackProperties === "object") {
29+
return ast
30+
.find(j.ObjectExpression)
31+
.filter(p => utils.isAssignment(null, p, createResolveLoaderProperty));
32+
} else if (action === "init" && webpackProperties.length) {
33+
return ast
34+
.find(j.ObjectExpression)
35+
.filter(p =>
36+
utils.isAssignment(
37+
j,
38+
p,
39+
utils.pushCreateProperty,
40+
"resolveLoader",
41+
webpackProperties
42+
)
43+
);
44+
} else if (action === "add") {
45+
const resolveLoaderNode = utils.findRootNodesByName(
46+
j,
47+
ast,
48+
"resolveLoader"
49+
);
50+
if (
51+
resolveLoaderNode.size() !== 0 &&
52+
typeof webpackProperties === "object"
53+
) {
54+
return ast
55+
.find(j.ObjectExpression)
56+
.filter(
57+
p =>
58+
utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
59+
"resolveLoader"
60+
)
61+
.filter(p => {
62+
Object.keys(webpackProperties).forEach(prop => {
63+
utils.checkIfExistsAndAddValue(
64+
j,
65+
p,
66+
prop,
67+
utils.createIdentifierOrLiteral(j, webpackProperties[prop])
68+
);
69+
});
70+
return ast;
71+
});
72+
} else if (resolveLoaderNode.size() !== 0 && webpackProperties.length) {
73+
return ast
74+
.find(j.ObjectExpression)
75+
.filter(
76+
p =>
77+
utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
78+
"resolveLoader"
79+
)
80+
.forEach(p => {
81+
j(p).replaceWith(
82+
utils.createIdentifierOrLiteral(j, webpackProperties)
83+
);
84+
});
85+
} else {
86+
return resolveLoaderTransform(j, ast, webpackProperties, "init");
87+
}
88+
} else if (action === "remove") {
89+
// TODO
90+
} else if (action === "update") {
91+
// TODO
92+
}
93+
} else {
94+
return ast;
95+
}
96+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"use strict";
2+
3+
const defineTest = require("../../../utils/defineTest");
4+
5+
defineTest(
6+
__dirname,
7+
"resolve",
8+
"resolveLoader-0",
9+
{
10+
modules: ["'ok'", "mode_nodules"],
11+
mainFields: ["no", "'main'"],
12+
moduleExtensions: ["'-kn'", "ok"]
13+
},
14+
"init"
15+
);
16+
17+
defineTest(
18+
__dirname,
19+
"resolve",
20+
"resolveLoader-1",
21+
{
22+
modules: ["'ok'", "mode_nodules"],
23+
mainFields: ["no", "'main'"],
24+
moduleExtensions: ["'-kn'", "ok"]
25+
},
26+
"add"
27+
);

‎lib/utils/prop-types.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,6 @@ module.exports = new Set([
3030
"parallelism",
3131
"recordsInputPath",
3232
"recordsOutputPath",
33-
"recordsPath"
33+
"recordsPath",
34+
"resolveLoader"
3435
]);

‎webpack.config.js

+25-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,27 @@
1+
const webpack = require('webpack');
12
module.exports = {
2-
plugins: []
3+
resolve: {
4+
alias: {
5+
inject: "{{#isdf_eq buildasda 'staasdndalone'}}",
6+
hello: "'worlasdd'",
7+
inject_1: '{{/asd}}',
8+
world: 'asdc'
9+
},
10+
11+
aliasFields: ["'as'"],
12+
descriptionFiles: ["'d'", 'e', 'f'],
13+
enforceExtension: true,
14+
extensions: ['ok', "'ho'"],
15+
mainFields: ['ok', "'story'"],
16+
mainFiles: ["'noMainFileHere'", 'niGuess'],
17+
18+
resolveLoader: {
19+
modules: ["'ok'", 'mode_nodules'],
20+
mainFields: ['no', "'main'"],
21+
moduleExtensions: ["'-kn'", 'ok']
22+
},
23+
24+
plugins: ['somePlugin', "'stringVal'"],
25+
symlinks: false,
26+
}
327
};

0 commit comments

Comments
 (0)
Please sign in to comment.