Skip to content

Commit 302289c

Browse files
committed
Merge branch 'master' into next
2 parents 90159b0 + 8ad6d27 commit 302289c

33 files changed

+284
-61
lines changed

lib/BasicEvaluatedExpression.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ class BasicEvaluatedExpression {
5656
}
5757

5858
asBool() {
59-
if(this.isBoolean()) return this.bool;
59+
if(this.truthy) return true;
60+
else if(this.falsy) return false;
61+
else if(this.isBoolean()) return this.bool;
6062
else if(this.isNull()) return false;
6163
else if(this.isString()) return !!this.string;
6264
else if(this.isNumber()) return !!this.number;
@@ -163,6 +165,18 @@ class BasicEvaluatedExpression {
163165
return this;
164166
}
165167

168+
setTruthy() {
169+
this.falsy = false;
170+
this.truthy = true;
171+
return this;
172+
}
173+
174+
setFalsy() {
175+
this.falsy = true;
176+
this.truthy = false;
177+
return this;
178+
}
179+
166180
addOptions(options) {
167181
if(!this.options) this.options = [];
168182
options.forEach(item => {

lib/DefinePlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ class DefinePlugin {
111111
function applyObjectDefine(key, obj) {
112112
const code = stringifyObj(obj);
113113
parser.plugin("can-rename " + key, ParserHelpers.approve);
114-
parser.plugin("evaluate Identifier " + key, (expr) => new BasicEvaluatedExpression().setRange(expr.range));
114+
parser.plugin("evaluate Identifier " + key, (expr) => new BasicEvaluatedExpression().setTruthy().setRange(expr.range));
115115
parser.plugin("evaluate typeof " + key, ParserHelpers.evaluateToString("object"));
116116
parser.plugin("expression " + key, ParserHelpers.toConstantDependency(code));
117117
parser.plugin("typeof " + key, ParserHelpers.toConstantDependency(JSON.stringify("object")));
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
MIT License http://www.opensource.org/licenses/mit-license.php
3+
Author Tobias Koppers @sokra
4+
*/
5+
"use strict";
6+
7+
const ConcatSource = require("webpack-sources").ConcatSource;
8+
9+
function accessorToObjectAccess(accessor) {
10+
return accessor.map(a => `[${JSON.stringify(a)}]`).join("");
11+
}
12+
13+
class ExportPropertyMainTemplatePlugin {
14+
constructor(property) {
15+
this.property = property;
16+
}
17+
18+
apply(compilation) {
19+
const mainTemplate = compilation.mainTemplate;
20+
compilation.templatesPlugin("render-with-entry", (source, chunk, hash) => {
21+
const postfix = `${accessorToObjectAccess([].concat(this.property))}`;
22+
return new ConcatSource(source, postfix);
23+
});
24+
mainTemplate.plugin("hash", hash => {
25+
hash.update("export property");
26+
hash.update(`${this.property}`);
27+
});
28+
}
29+
}
30+
31+
module.exports = ExportPropertyMainTemplatePlugin;

lib/HotModuleReplacementPlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ HotModuleReplacementPlugin.prototype.apply = function(compiler) {
200200
parser.plugin("expression __webpack_hash__", ParserHelpers.toConstantDependency("__webpack_require__.h()"));
201201
parser.plugin("evaluate typeof __webpack_hash__", ParserHelpers.evaluateToString("string"));
202202
parser.plugin("evaluate Identifier module.hot", function(expr) {
203-
return ParserHelpers.evaluateToBoolean(!!this.state.compilation.hotUpdateChunkTemplate)(expr);
203+
return ParserHelpers.evaluateToIdentifier("module.hot", !!this.state.compilation.hotUpdateChunkTemplate)(expr);
204204
});
205205
parser.plugin("call module.hot.accept", function(expr) {
206206
if(!this.state.compilation.hotUpdateChunkTemplate) return false;

lib/LibraryTemplatePlugin.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,20 @@ function accessorAccess(base, accessor, joinWith) {
2626

2727
class LibraryTemplatePlugin {
2828

29-
constructor(name, target, umdNamedDefine, auxiliaryComment) {
29+
constructor(name, target, umdNamedDefine, auxiliaryComment, exportProperty) {
3030
this.name = name;
3131
this.target = target;
3232
this.umdNamedDefine = umdNamedDefine;
3333
this.auxiliaryComment = auxiliaryComment;
34+
this.exportProperty = exportProperty;
3435
}
3536

3637
apply(compiler) {
3738
compiler.plugin("this-compilation", (compilation) => {
39+
if(this.exportProperty) {
40+
var ExportPropertyMainTemplatePlugin = require("./ExportPropertyMainTemplatePlugin");
41+
compilation.apply(new ExportPropertyMainTemplatePlugin(this.exportProperty));
42+
}
3843
switch(this.target) {
3944
case "var":
4045
compilation.apply(new SetVarMainTemplatePlugin(`var ${accessorAccess(false, this.name)}`));

lib/NodeStuffPlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class NodeStuffPlugin {
7777
if(!isHarmony)
7878
return true;
7979
});
80-
parser.plugin("evaluate Identifier module.hot", ParserHelpers.evaluateToBoolean(false));
80+
parser.plugin("evaluate Identifier module.hot", ParserHelpers.evaluateToIdentifier("module.hot", false));
8181
parser.plugin("expression module", function() {
8282
const module = this.state.module;
8383
const isHarmony = module.meta && module.meta.harmonyModule;

lib/ParserHelpers.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,15 @@ ParserHelpers.evaluateToBoolean = function(value) {
5656
};
5757
};
5858

59+
ParserHelpers.evaluateToIdentifier = function(identifier, truthy) {
60+
return function identifierExpression(expr) {
61+
let evex = new BasicEvaluatedExpression().setIdentifier(identifier).setRange(expr.range);
62+
if(truthy === true) evex = evex.setTruthy();
63+
else if(truthy === false) evex = evex.setFalsy();
64+
return evex;
65+
};
66+
};
67+
5968
ParserHelpers.expressionIsUnsupported = function(message) {
6069
return function unsupportedExpression(expr) {
6170
var dep = new ConstDependency("(void 0)", expr.range);

lib/WebpackOptionsApply.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ class WebpackOptionsApply extends OptionsApply {
187187

188188
if(options.output.library || options.output.libraryTarget !== "var") {
189189
let LibraryTemplatePlugin = require("./LibraryTemplatePlugin");
190-
compiler.apply(new LibraryTemplatePlugin(options.output.library, options.output.libraryTarget, options.output.umdNamedDefine, options.output.auxiliaryComment || ""));
190+
compiler.apply(new LibraryTemplatePlugin(options.output.library, options.output.libraryTarget, options.output.umdNamedDefine, options.output.auxiliaryComment || "", options.output.libraryExport));
191191
}
192192
if(options.externals) {
193193
ExternalsPlugin = require("./ExternalsPlugin");
@@ -247,7 +247,7 @@ class WebpackOptionsApply extends OptionsApply {
247247
new UseStrictPlugin(),
248248
new RequireIncludePlugin(),
249249
new RequireEnsurePlugin(),
250-
new RequireContextPlugin(options.resolve.modules, options.resolve.extensions),
250+
new RequireContextPlugin(options.resolve.modules, options.resolve.extensions, options.resolve.mainFiles),
251251
new ImportPlugin(options.module),
252252
new SystemPlugin(options.module)
253253
);

lib/WebpackOptionsDefaulter.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ class WebpackOptionsDefaulter extends OptionsDefaulter {
8585
this.set("resolve.unsafeCache", true);
8686
this.set("resolve.modules", ["node_modules"]);
8787
this.set("resolve.extensions", [".js", ".json"]);
88+
this.set("resolve.mainFiles", ["index"]);
8889
this.set("resolve.aliasFields", "make", (options) => {
8990
if(options.target === "web" || options.target === "webworker")
9091
return ["browser"];
@@ -101,6 +102,7 @@ class WebpackOptionsDefaulter extends OptionsDefaulter {
101102
this.set("resolveLoader.unsafeCache", true);
102103
this.set("resolveLoader.mainFields", ["loader", "main"]);
103104
this.set("resolveLoader.extensions", [".js", ".json"]);
105+
this.set("resolveLoader.mainFiles", ["index"]);
104106
}
105107
}
106108

lib/dependencies/AMDPlugin.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ class AMDPlugin {
8282
parser.state.current.addVariable("__webpack_amd_options__", JSON.stringify(amdOptions)));
8383
parser.plugin("evaluate typeof define.amd", ParserHelpers.evaluateToString(typeof amdOptions));
8484
parser.plugin("evaluate typeof require.amd", ParserHelpers.evaluateToString(typeof amdOptions));
85-
parser.plugin("evaluate Identifier define.amd", ParserHelpers.evaluateToBoolean(true));
86-
parser.plugin("evaluate Identifier require.amd", ParserHelpers.evaluateToBoolean(true));
85+
parser.plugin("evaluate Identifier define.amd", ParserHelpers.evaluateToIdentifier("define.amd", true));
86+
parser.plugin("evaluate Identifier require.amd", ParserHelpers.evaluateToIdentifier("require.amd", true));
8787
parser.plugin("typeof define", ParserHelpers.toConstantDependency(JSON.stringify("function")));
8888
parser.plugin("evaluate typeof define", ParserHelpers.evaluateToString("function"));
8989
parser.plugin("can-rename define", ParserHelpers.approve);

0 commit comments

Comments
 (0)