Skip to content

Commit 36659f5

Browse files
committed
ES6 refactor of ContextModuleFactory
1 parent f2a6439 commit 36659f5

File tree

1 file changed

+132
-131
lines changed

1 file changed

+132
-131
lines changed

lib/ContextModuleFactory.js

Lines changed: 132 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -2,158 +2,159 @@
22
MIT License http://www.opensource.org/licenses/mit-license.php
33
Author Tobias Koppers @sokra
44
*/
5-
var asyncLib = require("async");
6-
var path = require("path");
7-
8-
var Tapable = require("tapable");
9-
var ContextModule = require("./ContextModule");
10-
var ContextElementDependency = require("./dependencies/ContextElementDependency");
11-
12-
function ContextModuleFactory(resolvers) {
13-
Tapable.call(this);
14-
this.resolvers = resolvers;
15-
}
16-
module.exports = ContextModuleFactory;
17-
18-
ContextModuleFactory.prototype = Object.create(Tapable.prototype);
19-
ContextModuleFactory.prototype.constructor = ContextModuleFactory;
20-
21-
ContextModuleFactory.prototype.create = function(data, callback) {
22-
var module = this;
23-
var context = data.context;
24-
var dependencies = data.dependencies;
25-
var dependency = dependencies[0];
26-
this.applyPluginsAsyncWaterfall("before-resolve", {
27-
context: context,
28-
request: dependency.request,
29-
recursive: dependency.recursive,
30-
regExp: dependency.regExp,
31-
async: dependency.async,
32-
dependencies: dependencies
33-
}, function(err, result) {
34-
if(err) return callback(err);
35-
36-
// Ignored
37-
if(!result) return callback();
38-
39-
var context = result.context;
40-
var request = result.request;
41-
var recursive = result.recursive;
42-
var regExp = result.regExp;
43-
var asyncContext = result.async;
44-
var dependencies = result.dependencies;
45-
46-
var loaders, resource, loadersPrefix = "";
47-
var idx = request.lastIndexOf("!");
48-
if(idx >= 0) {
49-
loaders = request.substr(0, idx + 1);
50-
for(var i = 0; i < loaders.length && loaders[i] === "!"; i++) {
51-
loadersPrefix += "!";
5+
"use strict";
6+
7+
const asyncLib = require("async");
8+
const path = require("path");
9+
10+
const Tapable = require("tapable");
11+
const ContextModule = require("./ContextModule");
12+
const ContextElementDependency = require("./dependencies/ContextElementDependency");
13+
14+
module.exports = class ContextModuleFactory extends Tapable {
15+
constructor(resolvers) {
16+
super();
17+
this.resolvers = resolvers;
18+
}
19+
20+
create(data, callback) {
21+
const module = this;
22+
const context = data.context;
23+
const dependencies = data.dependencies;
24+
const dependency = dependencies[0];
25+
this.applyPluginsAsyncWaterfall("before-resolve", {
26+
context: context,
27+
request: dependency.request,
28+
recursive: dependency.recursive,
29+
regExp: dependency.regExp,
30+
async: dependency.async,
31+
dependencies: dependencies
32+
}, (err, result) => {
33+
if(err) return callback(err);
34+
35+
// Ignored
36+
if(!result) return callback();
37+
38+
const context = result.context;
39+
const request = result.request;
40+
const recursive = result.recursive;
41+
const regExp = result.regExp;
42+
const asyncContext = result.async;
43+
const dependencies = result.dependencies;
44+
45+
let loaders, resource, loadersPrefix = "";
46+
const idx = request.lastIndexOf("!");
47+
if(idx >= 0) {
48+
loaders = request.substr(0, idx + 1);
49+
let i;
50+
for(i = 0; i < loaders.length && loaders[i] === "!"; i++) {
51+
loadersPrefix += "!";
52+
}
53+
loaders = loaders.substr(i).replace(/!+$/, "").replace(/!!+/g, "!");
54+
if(loaders === "") loaders = [];
55+
else loaders = loaders.split("!");
56+
resource = request.substr(idx + 1);
57+
} else {
58+
loaders = [];
59+
resource = request;
5260
}
53-
loaders = loaders.substr(i).replace(/!+$/, "").replace(/!!+/g, "!");
54-
if(loaders === "") loaders = [];
55-
else loaders = loaders.split("!");
56-
resource = request.substr(idx + 1);
57-
} else {
58-
loaders = [];
59-
resource = request;
60-
}
61-
62-
var resolvers = module.resolvers;
63-
64-
asyncLib.parallel([
65-
function(callback) {
66-
resolvers.context.resolve({}, context, resource, function(err, result) {
67-
if(err) return callback(err);
68-
callback(null, result);
69-
});
70-
},
71-
function(callback) {
72-
asyncLib.map(loaders, function(loader, callback) {
73-
resolvers.loader.resolve({}, context, loader, function(err, result) {
61+
62+
const resolvers = module.resolvers;
63+
64+
asyncLib.parallel([
65+
function(callback) {
66+
resolvers.context.resolve({}, context, resource, function(err, result) {
7467
if(err) return callback(err);
7568
callback(null, result);
7669
});
77-
}, callback);
78-
}
79-
], function(err, result) {
80-
if(err) return callback(err);
81-
82-
module.applyPluginsAsyncWaterfall("after-resolve", {
83-
loaders: loadersPrefix + result[1].join("!") + (result[1].length > 0 ? "!" : ""),
84-
resource: result[0],
85-
recursive: recursive,
86-
regExp: regExp,
87-
async: asyncContext,
88-
dependencies: dependencies,
89-
resolveDependencies: module.resolveDependencies.bind(module)
90-
}, function(err, result) {
70+
},
71+
function(callback) {
72+
asyncLib.map(loaders, function(loader, callback) {
73+
resolvers.loader.resolve({}, context, loader, function(err, result) {
74+
if(err) return callback(err);
75+
callback(null, result);
76+
});
77+
}, callback);
78+
}
79+
], (err, result) => {
9180
if(err) return callback(err);
9281

93-
// Ignored
94-
if(!result) return callback();
82+
module.applyPluginsAsyncWaterfall("after-resolve", {
83+
loaders: loadersPrefix + result[1].join("!") + (result[1].length > 0 ? "!" : ""),
84+
resource: result[0],
85+
recursive: recursive,
86+
regExp: regExp,
87+
async: asyncContext,
88+
dependencies: dependencies,
89+
resolveDependencies: module.resolveDependencies.bind(module)
90+
}, function(err, result) {
91+
if(err) return callback(err);
92+
93+
// Ignored
94+
if(!result) return callback();
9595

96-
return callback(null, new ContextModule(result.resolveDependencies, result.resource, result.recursive, result.regExp, result.loaders, result.async, dependency.chunkName));
96+
return callback(null, new ContextModule(result.resolveDependencies, result.resource, result.recursive, result.regExp, result.loaders, result.async, dependency.chunkName));
97+
});
9798
});
9899
});
99-
});
100-
};
100+
}
101101

102-
ContextModuleFactory.prototype.resolveDependencies = function resolveDependencies(fs, resource, recursive, regExp, callback) {
103-
if(!regExp || !resource)
104-
return callback(null, []);
105-
(function addDirectory(directory, callback) {
106-
fs.readdir(directory, function(err, files) {
107-
if(err) return callback(err);
108-
if(!files || files.length === 0) return callback(null, []);
109-
asyncLib.map(files.filter(function(p) {
110-
return p.indexOf(".") !== 0;
111-
}), function(seqment, callback) {
102+
resolveDependencies(fs, resource, recursive, regExp, callback) {
103+
if(!regExp || !resource)
104+
return callback(null, []);
105+
(function addDirectory(directory, callback) {
106+
fs.readdir(directory, function(err, files) {
107+
if(err) return callback(err);
108+
if(!files || files.length === 0) return callback(null, []);
109+
asyncLib.map(files.filter(function(p) {
110+
return p.indexOf(".") !== 0;
111+
}), function(seqment, callback) {
112112

113-
var subResource = path.join(directory, seqment);
113+
const subResource = path.join(directory, seqment);
114114

115-
fs.stat(subResource, function(err, stat) {
116-
if(err) return callback(err);
115+
fs.stat(subResource, function(err, stat) {
116+
if(err) return callback(err);
117117

118-
if(stat.isDirectory()) {
118+
if(stat.isDirectory()) {
119119

120-
if(!recursive) return callback();
121-
addDirectory.call(this, subResource, callback);
120+
if(!recursive) return callback();
121+
addDirectory.call(this, subResource, callback);
122122

123-
} else if(stat.isFile()) {
123+
} else if(stat.isFile()) {
124124

125-
var obj = {
126-
context: resource,
127-
request: "." + subResource.substr(resource.length).replace(/\\/g, "/")
128-
};
125+
const obj = {
126+
context: resource,
127+
request: "." + subResource.substr(resource.length).replace(/\\/g, "/")
128+
};
129129

130-
this.applyPluginsAsyncWaterfall("alternatives", [obj], function(err, alternatives) {
131-
if(err) return callback(err);
132-
alternatives = alternatives.filter(function(obj) {
133-
return regExp.test(obj.request);
134-
}).map(function(obj) {
135-
var dep = new ContextElementDependency(obj.request);
136-
dep.optional = true;
137-
return dep;
130+
this.applyPluginsAsyncWaterfall("alternatives", [obj], (err, alternatives) => {
131+
if(err) return callback(err);
132+
alternatives = alternatives.filter(function(obj) {
133+
return regExp.test(obj.request);
134+
}).map(function(obj) {
135+
const dep = new ContextElementDependency(obj.request);
136+
dep.optional = true;
137+
return dep;
138+
});
139+
callback(null, alternatives);
138140
});
139-
callback(null, alternatives);
140-
});
141141

142-
} else callback();
142+
} else callback();
143143

144-
}.bind(this));
144+
}.bind(this));
145145

146-
}.bind(this), function(err, result) {
147-
if(err) return callback(err);
146+
}.bind(this), (err, result) => {
147+
if(err) return callback(err);
148148

149-
if(!result) return callback(null, []);
149+
if(!result) return callback(null, []);
150150

151-
callback(null, result.filter(function(i) {
152-
return !!i;
153-
}).reduce(function(a, i) {
154-
return a.concat(i);
155-
}, []));
156-
});
157-
}.bind(this));
158-
}.call(this, resource, callback));
151+
callback(null, result.filter(function(i) {
152+
return !!i;
153+
}).reduce(function(a, i) {
154+
return a.concat(i);
155+
}, []));
156+
});
157+
}.bind(this));
158+
}.call(this, resource, callback));
159+
}
159160
};

0 commit comments

Comments
 (0)