Skip to content

Commit

Permalink
add ResolveLoader distinguished from resolve
Browse files Browse the repository at this point in the history
  • Loading branch information
evenstensberg committed Dec 20, 2017
1 parent 7c713ce commit 3c90e83
Show file tree
Hide file tree
Showing 7 changed files with 168 additions and 3 deletions.
4 changes: 3 additions & 1 deletion lib/init/transformations/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ const pluginsTransform = require("./plugins/plugins");
const topScopeTransform = require("./top-scope/top-scope");
const devServerTransform = require("./devServer/devServer");
const modeTransform = require("./mode/mode");
const resolveLoaderTransform = require("./resolveLoader/resolveLoader");

/**
*
Expand Down Expand Up @@ -70,7 +71,8 @@ const transformsObject = {
parallelismTransform,
recordsInputPathTransform,
recordsOutputPathTransform,
recordsPathTransform
recordsPathTransform,
resolveLoaderTransform
};

module.exports = function runTransform(webpackProperties, action) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
entry: 'index.js',
output: {
filename: 'bundle.js'
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module.exports = {
entry: 'index.js',
output: {
filename: 'bundle.js'
},
resolveLoader: {
moduleExtensions: [ '-loader' ]
}
}
96 changes: 96 additions & 0 deletions lib/init/transformations/resolveLoader/resolveLoader.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
"use strict";

const utils = require("../../../utils/ast-utils");

/**
*
* Transform for resolveLoader. Finds the resolveLoader property from yeoman and creates a
* property based on what the user has given us.
*
* @param j — jscodeshift API
* @param ast - jscodeshift API
* @param {any} webpackProperties - transformation object to scaffold
* @param {String} action - action that indicates what to be done to the AST
* @returns ast - jscodeshift API
*/

module.exports = function resolveLoaderTransform(
j,
ast,
webpackProperties,
action
) {
function createResolveLoaderProperty(p) {
utils.pushCreateProperty(j, p, "resolveLoader", j.objectExpression([]));
return utils.pushObjectKeys(j, p, webpackProperties, "resolveLoader");
}
if (webpackProperties) {
if (action === "init" && typeof webpackProperties === "object") {
return ast
.find(j.ObjectExpression)
.filter(p => utils.isAssignment(null, p, createResolveLoaderProperty));
} else if (action === "init" && webpackProperties.length) {
return ast
.find(j.ObjectExpression)
.filter(p =>
utils.isAssignment(
j,
p,
utils.pushCreateProperty,
"resolveLoader",
webpackProperties
)
);
} else if (action === "add") {
const resolveLoaderNode = utils.findRootNodesByName(
j,
ast,
"resolveLoader"
);
if (
resolveLoaderNode.size() !== 0 &&
typeof webpackProperties === "object"
) {
return ast
.find(j.ObjectExpression)
.filter(
p =>
utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
"resolveLoader"
)
.filter(p => {
Object.keys(webpackProperties).forEach(prop => {
utils.checkIfExistsAndAddValue(
j,
p,
prop,
utils.createIdentifierOrLiteral(j, webpackProperties[prop])
);
});
return ast;
});
} else if (resolveLoaderNode.size() !== 0 && webpackProperties.length) {
return ast
.find(j.ObjectExpression)
.filter(
p =>
utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
"resolveLoader"
)
.forEach(p => {
j(p).replaceWith(
utils.createIdentifierOrLiteral(j, webpackProperties)
);
});
} else {
return resolveLoaderTransform(j, ast, webpackProperties, "init");
}
} else if (action === "remove") {
// TODO
} else if (action === "update") {
// TODO
}
} else {
return ast;
}
};
27 changes: 27 additions & 0 deletions lib/init/transformations/resolveLoader/resolveLoader.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
"use strict";

const defineTest = require("../../../utils/defineTest");

defineTest(
__dirname,
"resolve",
"resolveLoader-0",
{
modules: ["'ok'", "mode_nodules"],
mainFields: ["no", "'main'"],
moduleExtensions: ["'-kn'", "ok"]
},
"init"
);

defineTest(
__dirname,
"resolve",
"resolveLoader-1",
{
modules: ["'ok'", "mode_nodules"],
mainFields: ["no", "'main'"],
moduleExtensions: ["'-kn'", "ok"]
},
"add"
);
3 changes: 2 additions & 1 deletion lib/utils/prop-types.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@ module.exports = new Set([
"parallelism",
"recordsInputPath",
"recordsOutputPath",
"recordsPath"
"recordsPath",
"resolveLoader"
]);
26 changes: 25 additions & 1 deletion webpack.config.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,27 @@
const webpack = require('webpack');
module.exports = {
plugins: []
resolve: {
alias: {
inject: "{{#isdf_eq buildasda 'staasdndalone'}}",
hello: "'worlasdd'",
inject_1: '{{/asd}}',
world: 'asdc'
},

aliasFields: ["'as'"],
descriptionFiles: ["'d'", 'e', 'f'],
enforceExtension: true,
extensions: ['ok', "'ho'"],
mainFields: ['ok', "'story'"],
mainFiles: ["'noMainFileHere'", 'niGuess'],

resolveLoader: {
modules: ["'ok'", 'mode_nodules'],
mainFields: ['no', "'main'"],
moduleExtensions: ["'-kn'", 'ok']
},

plugins: ['somePlugin', "'stringVal'"],
symlinks: false,
}
};

0 comments on commit 3c90e83

Please sign in to comment.