webpack 2.1.0-beta.21 → 2.1.0-beta.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/config-yargs.js +6 -5
- package/bin/convert-argv.js +59 -31
- package/bin/webpack.js +30 -2
- package/lib/APIPlugin.js +19 -16
- package/lib/Chunk.js +1 -1
- package/lib/CommonJsHarmonyMainTemplatePlugin.js +21 -0
- package/lib/CompatibilityPlugin.js +24 -17
- package/lib/Compilation.js +36 -15
- package/lib/Compiler.js +48 -15
- package/lib/ConstPlugin.js +40 -37
- package/lib/DefinePlugin.js +107 -103
- package/lib/DelegatedModule.js +1 -2
- package/lib/Dependency.js +5 -0
- package/lib/DllReferencePlugin.js +41 -15
- package/lib/ExtendedAPIPlugin.js +14 -11
- package/lib/FlagDependencyExportsPlugin.js +102 -0
- package/lib/FlagInitialModulesAsUsedPlugin.js +23 -23
- package/lib/FunctionModuleTemplatePlugin.js +4 -0
- package/lib/HotModuleReplacement.runtime.js +1 -1
- package/lib/HotModuleReplacementPlugin.js +71 -68
- package/lib/LibManifestPlugin.js +1 -2
- package/lib/LibraryTemplatePlugin.js +4 -0
- package/lib/MainTemplate.js +12 -13
- package/lib/Module.js +10 -1
- package/lib/MovedToPluginWarningPlugin.js +3 -1
- package/lib/MultiCompiler.js +81 -7
- package/lib/NodeStuffPlugin.js +97 -86
- package/lib/NormalModule.js +6 -0
- package/lib/NormalModuleFactory.js +87 -34
- package/lib/Parser.js +13 -4
- package/lib/ProvidePlugin.js +30 -27
- package/lib/RequireJsStuffPlugin.js +27 -21
- package/lib/RuleSet.js +369 -0
- package/lib/Stats.js +74 -90
- package/lib/UseStrictPlugin.js +12 -8
- package/lib/WebpackOptionsApply.js +3 -13
- package/lib/WebpackOptionsDefaulter.js +0 -1
- package/lib/WebpackOptionsValidationError.js +186 -0
- package/lib/dependencies/AMDPlugin.js +64 -55
- package/lib/dependencies/CommonJsPlugin.js +55 -45
- package/lib/dependencies/HarmonyExportExpressionDependency.js +6 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +76 -16
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -4
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +6 -4
- package/lib/dependencies/HarmonyModulesHelpers.js +0 -29
- package/lib/dependencies/HarmonyModulesPlugin.js +11 -4
- package/lib/dependencies/RequireContextPlugin.js +12 -5
- package/lib/dependencies/RequireEnsurePlugin.js +17 -10
- package/lib/dependencies/RequireIncludePlugin.js +18 -10
- package/lib/dependencies/SystemPlugin.js +48 -29
- package/lib/node/NodeMainTemplate.runtime.js +2 -2
- package/lib/node/NodeMainTemplateAsync.runtime.js +2 -2
- package/lib/node/NodeSourcePlugin.js +84 -71
- package/lib/optimize/ChunkModuleIdRangePlugin.js +52 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +7 -2
- package/lib/validateWebpackOptions.js +63 -0
- package/lib/webpack.js +9 -6
- package/lib/webworker/WebWorkerMainTemplate.runtime.js +35 -33
- package/package.json +13 -8
- package/schemas/webpackOptionsSchema.json +802 -0
- package/README.md +0 -315
- package/lib/LoadersList.js +0 -110
- package/lib/dependencies/LabeledExportsDependency.js +0 -21
- package/lib/dependencies/LabeledModuleDependency.js +0 -36
- package/lib/dependencies/LabeledModuleDependencyParserPlugin.js +0 -78
- package/lib/dependencies/LabeledModulesPlugin.js +0 -26
@@ -0,0 +1,186 @@
|
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Gajus Kuizinas @gajus
|
4
|
+
*/
|
5
|
+
var webpackOptionsSchema = require("../schemas/webpackOptionsSchema.json");
|
6
|
+
|
7
|
+
function WebpackOptionsValidationError(validationErrors) {
|
8
|
+
Error.call(this);
|
9
|
+
Error.captureStackTrace(this, WebpackOptionsValidationError);
|
10
|
+
this.name = "WebpackOptionsValidationError";
|
11
|
+
this.message = "Invalid configuration object. " +
|
12
|
+
"Webpack has been initialised using a configuration object that does not match the API schema.\n" +
|
13
|
+
validationErrors.map(function(err) {
|
14
|
+
return " - " + indent(WebpackOptionsValidationError.formatValidationError(err), " ", false);
|
15
|
+
}).join("\n");
|
16
|
+
this.validationErrors = validationErrors;
|
17
|
+
}
|
18
|
+
module.exports = WebpackOptionsValidationError;
|
19
|
+
|
20
|
+
WebpackOptionsValidationError.prototype = Object.create(Error.prototype);
|
21
|
+
WebpackOptionsValidationError.prototype.constructor = WebpackOptionsValidationError;
|
22
|
+
|
23
|
+
WebpackOptionsValidationError.formatValidationError = function formatValidationError(err) {
|
24
|
+
var dataPath = "configuration" + err.dataPath;
|
25
|
+
switch(err.keyword) {
|
26
|
+
case "additionalProperties":
|
27
|
+
var baseMessage = dataPath + " has an unknown property '" + err.params.additionalProperty + "'. These properties are valid:\n" +
|
28
|
+
getSchemaPartText(err.parentSchema);
|
29
|
+
if(!err.dataPath) {
|
30
|
+
switch(err.params.additionalProperty) {
|
31
|
+
case "debug":
|
32
|
+
return baseMessage + "\n" +
|
33
|
+
"The 'debug' property was removed in webpack 2.\n" +
|
34
|
+
"Loaders should be updated to allow passing this option via loader options in module.rules.\n" +
|
35
|
+
"Until loaders are updated one can use the LoaderOptionsPlugin to switch loaders into debug mode:\n" +
|
36
|
+
"plugins: {\n" +
|
37
|
+
" new webpack.LoaderOptionsPlugin({\n" +
|
38
|
+
" debug: true\n" +
|
39
|
+
" })\n" +
|
40
|
+
"}";
|
41
|
+
}
|
42
|
+
return baseMessage + "\n" +
|
43
|
+
"For typos: please correct them.\n" +
|
44
|
+
"For loader options: webpack 2 no longer allows custom properties in configuration.\n" +
|
45
|
+
" Loaders should be updated to allow passing options via loader options in module.rules.\n" +
|
46
|
+
" Until loaders are updated one can use the LoaderOptionsPlugin to pass these options to the loader:\n" +
|
47
|
+
" plugins: {\n" +
|
48
|
+
" new webpack.LoaderOptionsPlugin({\n" +
|
49
|
+
" // test: /\\.xxx$/, // may apply this only for some modules\n" +
|
50
|
+
" options: {\n" +
|
51
|
+
" " + err.params.additionalProperty + ": ...\n" +
|
52
|
+
" }\n" +
|
53
|
+
" })\n" +
|
54
|
+
" }";
|
55
|
+
}
|
56
|
+
return baseMessage;
|
57
|
+
case "oneOf":
|
58
|
+
case "anyOf":
|
59
|
+
case "enum":
|
60
|
+
return dataPath + " should be one of these:\n" +
|
61
|
+
getSchemaPartText(err.parentSchema);
|
62
|
+
case "allOf":
|
63
|
+
return dataPath + " should be:\n" +
|
64
|
+
getSchemaPartText(err.parentSchema);
|
65
|
+
case "type":
|
66
|
+
switch(err.params.type) {
|
67
|
+
case "object":
|
68
|
+
return dataPath + " should be an object.";
|
69
|
+
case "string":
|
70
|
+
return dataPath + " should be a string.";
|
71
|
+
case "boolean":
|
72
|
+
return dataPath + " should be a boolean.";
|
73
|
+
case "number":
|
74
|
+
return dataPath + " should be a number.";
|
75
|
+
}
|
76
|
+
return dataPath + " should be " + err.params.type + ":\n" +
|
77
|
+
getSchemaPartText(err.parentSchema);
|
78
|
+
case "required":
|
79
|
+
var missingProperty = err.params.missingProperty.replace(/^\./, "");
|
80
|
+
return dataPath + " misses the property '" + missingProperty + "'.\n" +
|
81
|
+
getSchemaPartText(err.parentSchema, ["properties", missingProperty]);
|
82
|
+
case "minLength":
|
83
|
+
if(err.params.limit === 1)
|
84
|
+
return dataPath + " should not be empty.";
|
85
|
+
else
|
86
|
+
return dataPath + " " + err.message;
|
87
|
+
default:
|
88
|
+
return dataPath + " " + err.message + " (" + JSON.stringify(err, 0, 2) + ").\n" +
|
89
|
+
getSchemaPartText(err.parentSchema);
|
90
|
+
}
|
91
|
+
}
|
92
|
+
|
93
|
+
function getSchemaPart(path, parents, additionalPath) {
|
94
|
+
parents = parents || 0;
|
95
|
+
path = path.split("/");
|
96
|
+
path = path.slice(0, path.length - parents);
|
97
|
+
if(additionalPath) {
|
98
|
+
additionalPath = additionalPath.split("/");
|
99
|
+
path = path.concat(additionalPath);
|
100
|
+
}
|
101
|
+
var schemaPart = webpackOptionsSchema;
|
102
|
+
for(var i = 1; i < path.length; i++) {
|
103
|
+
var inner = schemaPart[path[i]];
|
104
|
+
if(inner)
|
105
|
+
schemaPart = inner;
|
106
|
+
}
|
107
|
+
return schemaPart;
|
108
|
+
}
|
109
|
+
|
110
|
+
function getSchemaPartText2(path, parents, additionalPath) {
|
111
|
+
var schemaPart = getSchemaPart(path, parents, additionalPath);
|
112
|
+
while(schemaPart.$ref) schemaPart = getSchemaPart(schemaPart.$ref);
|
113
|
+
var schemaText = WebpackOptionsValidationError.formatSchema(schemaPart);
|
114
|
+
if(schemaPart.description)
|
115
|
+
schemaText += "\n" + schemaPart.description;
|
116
|
+
return schemaText;
|
117
|
+
}
|
118
|
+
|
119
|
+
function getSchemaPartText(schemaPart, additionalPath) {
|
120
|
+
if(additionalPath) {
|
121
|
+
for(var i = 0; i < additionalPath.length; i++) {
|
122
|
+
var inner = schemaPart[additionalPath[i]];
|
123
|
+
if(inner)
|
124
|
+
schemaPart = inner;
|
125
|
+
}
|
126
|
+
}
|
127
|
+
while(schemaPart.$ref) schemaPart = getSchemaPart(schemaPart.$ref);
|
128
|
+
var schemaText = WebpackOptionsValidationError.formatSchema(schemaPart);
|
129
|
+
if(schemaPart.description)
|
130
|
+
schemaText += "\n" + schemaPart.description;
|
131
|
+
return schemaText;
|
132
|
+
}
|
133
|
+
|
134
|
+
function formatSchema(schema, prevSchemas) {
|
135
|
+
prevSchemas = prevSchemas || [];
|
136
|
+
|
137
|
+
function formatInnerSchema(innerSchema, addSelf) {
|
138
|
+
if(!addSelf) return formatSchema(innerSchema, prevSchemas);
|
139
|
+
if(prevSchemas.indexOf(innerSchema) >= 0) return "(recursive)";
|
140
|
+
return formatSchema(innerSchema, prevSchemas.concat(schema));
|
141
|
+
}
|
142
|
+
switch(schema.type) {
|
143
|
+
case "string":
|
144
|
+
return "string";
|
145
|
+
case "boolean":
|
146
|
+
return "boolean";
|
147
|
+
case "object":
|
148
|
+
if(schema.properties) {
|
149
|
+
var required = schema.required || [];
|
150
|
+
return "object { " + Object.keys(schema.properties).map(function(property) {
|
151
|
+
if(required.indexOf(property) < 0) return property + "?";
|
152
|
+
return property;
|
153
|
+
}).concat(schema.additionalProperties ? ["..."] : []).join(", ") + " }";
|
154
|
+
}
|
155
|
+
if(schema.additionalProperties) {
|
156
|
+
return "object { <key>: " + formatInnerSchema(schema.additionalProperties) + " }";
|
157
|
+
}
|
158
|
+
return "object";
|
159
|
+
case "array":
|
160
|
+
return "[" + formatInnerSchema(schema.items) + "]";
|
161
|
+
}
|
162
|
+
switch(schema.instanceof) {
|
163
|
+
case "Function":
|
164
|
+
return "function";
|
165
|
+
case "RegExp":
|
166
|
+
return "RegExp";
|
167
|
+
}
|
168
|
+
if(schema.$ref) return formatInnerSchema(getSchemaPart(schema.$ref), true);
|
169
|
+
if(schema.allOf) return schema.allOf.map(formatInnerSchema).join(" & ");
|
170
|
+
if(schema.oneOf) return schema.oneOf.map(formatInnerSchema).join(" | ");
|
171
|
+
if(schema.anyOf) return schema.anyOf.map(formatInnerSchema).join(" | ");
|
172
|
+
if(schema.enum) return schema.enum.map(function(item) {
|
173
|
+
return JSON.stringify(item);
|
174
|
+
}).join(" | ");
|
175
|
+
return JSON.stringify(schema, 0, 2);
|
176
|
+
}
|
177
|
+
|
178
|
+
function indent(str, prefix, firstLine) {
|
179
|
+
if(firstLine) {
|
180
|
+
return prefix + str.replace(/\n(?!$)/g, "\n" + prefix);
|
181
|
+
} else {
|
182
|
+
return str.replace(/\n(?!$)/g, "\n" + prefix);
|
183
|
+
}
|
184
|
+
}
|
185
|
+
|
186
|
+
WebpackOptionsValidationError.formatSchema = formatSchema;
|
@@ -28,27 +28,7 @@ function AMDPlugin(options, amdOptions) {
|
|
28
28
|
module.exports = AMDPlugin;
|
29
29
|
|
30
30
|
AMDPlugin.prototype.apply = function(compiler) {
|
31
|
-
|
32
|
-
compiler.parser.plugin("evaluate typeof " + expr, function(expr) {
|
33
|
-
return new BasicEvaluatedExpression().setString(value).setRange(expr.range);
|
34
|
-
});
|
35
|
-
compiler.parser.plugin("typeof " + expr, function(expr) {
|
36
|
-
var dep = new ConstDependency(JSON.stringify(value), expr.range);
|
37
|
-
dep.loc = expr.loc;
|
38
|
-
this.state.current.addDependency(dep);
|
39
|
-
return true;
|
40
|
-
});
|
41
|
-
}
|
42
|
-
|
43
|
-
function setExpressionToModule(expr, module) {
|
44
|
-
compiler.parser.plugin("expression " + expr, function(expr) {
|
45
|
-
var dep = new AMDRequireItemDependency(module, expr.range);
|
46
|
-
dep.userRequest = expr;
|
47
|
-
dep.loc = expr.loc;
|
48
|
-
this.state.current.addDependency(dep);
|
49
|
-
return true;
|
50
|
-
});
|
51
|
-
}
|
31
|
+
var options = this.options;
|
52
32
|
var amdOptions = this.amdOptions;
|
53
33
|
compiler.plugin("compilation", function(compilation, params) {
|
54
34
|
var normalModuleFactory = params.normalModuleFactory;
|
@@ -74,41 +54,70 @@ AMDPlugin.prototype.apply = function(compiler) {
|
|
74
54
|
|
75
55
|
compilation.dependencyFactories.set(LocalModuleDependency, new NullFactory());
|
76
56
|
compilation.dependencyTemplates.set(LocalModuleDependency, new LocalModuleDependency.Template());
|
57
|
+
|
58
|
+
params.normalModuleFactory.plugin("parser", function(parser, parserOptions) {
|
59
|
+
|
60
|
+
if(typeof parserOptions.amd !== "undefined" && !parserOptions.amd)
|
61
|
+
return;
|
62
|
+
|
63
|
+
function setTypeof(expr, value) {
|
64
|
+
parser.plugin("evaluate typeof " + expr, function(expr) {
|
65
|
+
return new BasicEvaluatedExpression().setString(value).setRange(expr.range);
|
66
|
+
});
|
67
|
+
parser.plugin("typeof " + expr, function(expr) {
|
68
|
+
var dep = new ConstDependency(JSON.stringify(value), expr.range);
|
69
|
+
dep.loc = expr.loc;
|
70
|
+
this.state.current.addDependency(dep);
|
71
|
+
return true;
|
72
|
+
});
|
73
|
+
}
|
74
|
+
|
75
|
+
function setExpressionToModule(expr, module) {
|
76
|
+
parser.plugin("expression " + expr, function(expr) {
|
77
|
+
var dep = new AMDRequireItemDependency(module, expr.range);
|
78
|
+
dep.userRequest = expr;
|
79
|
+
dep.loc = expr.loc;
|
80
|
+
this.state.current.addDependency(dep);
|
81
|
+
return true;
|
82
|
+
});
|
83
|
+
}
|
84
|
+
|
85
|
+
parser.apply(
|
86
|
+
new AMDRequireDependenciesBlockParserPlugin(options),
|
87
|
+
new AMDDefineDependencyParserPlugin(options)
|
88
|
+
);
|
89
|
+
setExpressionToModule("require.amd", "!!webpack amd options");
|
90
|
+
setExpressionToModule("define.amd", "!!webpack amd options");
|
91
|
+
setExpressionToModule("define", "!!webpack amd define");
|
92
|
+
parser.plugin("expression __webpack_amd_options__", function() {
|
93
|
+
return this.state.current.addVariable("__webpack_amd_options__", JSON.stringify(amdOptions));
|
94
|
+
});
|
95
|
+
parser.plugin("evaluate typeof define.amd", function(expr) {
|
96
|
+
return new BasicEvaluatedExpression().setString(typeof amdOptions).setRange(expr.range);
|
97
|
+
});
|
98
|
+
parser.plugin("evaluate typeof require.amd", function(expr) {
|
99
|
+
return new BasicEvaluatedExpression().setString(typeof amdOptions).setRange(expr.range);
|
100
|
+
});
|
101
|
+
parser.plugin("evaluate Identifier define.amd", function(expr) {
|
102
|
+
return new BasicEvaluatedExpression().setBoolean(true).setRange(expr.range);
|
103
|
+
});
|
104
|
+
parser.plugin("evaluate Identifier require.amd", function(expr) {
|
105
|
+
return new BasicEvaluatedExpression().setBoolean(true).setRange(expr.range);
|
106
|
+
});
|
107
|
+
setTypeof("define", "function");
|
108
|
+
parser.plugin("can-rename define", function() {
|
109
|
+
return true;
|
110
|
+
});
|
111
|
+
parser.plugin("rename define", function(expr) {
|
112
|
+
var dep = new AMDRequireItemDependency("!!webpack amd define", expr.range);
|
113
|
+
dep.userRequest = "define";
|
114
|
+
dep.loc = expr.loc;
|
115
|
+
this.state.current.addDependency(dep);
|
116
|
+
return false;
|
117
|
+
});
|
118
|
+
setTypeof("require", "function");
|
119
|
+
});
|
77
120
|
});
|
78
|
-
compiler.parser.apply(
|
79
|
-
new AMDRequireDependenciesBlockParserPlugin(this.options),
|
80
|
-
new AMDDefineDependencyParserPlugin(this.options)
|
81
|
-
);
|
82
|
-
setExpressionToModule("require.amd", "!!webpack amd options");
|
83
|
-
setExpressionToModule("define.amd", "!!webpack amd options");
|
84
|
-
setExpressionToModule("define", "!!webpack amd define");
|
85
|
-
compiler.parser.plugin("expression __webpack_amd_options__", function() {
|
86
|
-
return this.state.current.addVariable("__webpack_amd_options__", JSON.stringify(amdOptions));
|
87
|
-
});
|
88
|
-
compiler.parser.plugin("evaluate typeof define.amd", function(expr) {
|
89
|
-
return new BasicEvaluatedExpression().setString(typeof amdOptions).setRange(expr.range);
|
90
|
-
});
|
91
|
-
compiler.parser.plugin("evaluate typeof require.amd", function(expr) {
|
92
|
-
return new BasicEvaluatedExpression().setString(typeof amdOptions).setRange(expr.range);
|
93
|
-
});
|
94
|
-
compiler.parser.plugin("evaluate Identifier define.amd", function(expr) {
|
95
|
-
return new BasicEvaluatedExpression().setBoolean(true).setRange(expr.range);
|
96
|
-
});
|
97
|
-
compiler.parser.plugin("evaluate Identifier require.amd", function(expr) {
|
98
|
-
return new BasicEvaluatedExpression().setBoolean(true).setRange(expr.range);
|
99
|
-
});
|
100
|
-
setTypeof("define", "function");
|
101
|
-
compiler.parser.plugin("can-rename define", function() {
|
102
|
-
return true;
|
103
|
-
});
|
104
|
-
compiler.parser.plugin("rename define", function(expr) {
|
105
|
-
var dep = new AMDRequireItemDependency("!!webpack amd define", expr.range);
|
106
|
-
dep.userRequest = "define";
|
107
|
-
dep.loc = expr.loc;
|
108
|
-
this.state.current.addDependency(dep);
|
109
|
-
return false;
|
110
|
-
});
|
111
|
-
setTypeof("require", "function");
|
112
121
|
compiler.resolvers.normal.apply(
|
113
122
|
new AliasPlugin("described-resolve", {
|
114
123
|
name: "amdefine",
|
@@ -23,17 +23,7 @@ function CommonJsPlugin(options) {
|
|
23
23
|
module.exports = CommonJsPlugin;
|
24
24
|
|
25
25
|
CommonJsPlugin.prototype.apply = function(compiler) {
|
26
|
-
|
27
|
-
compiler.parser.plugin("evaluate typeof " + expr, function(expr) {
|
28
|
-
return new BasicEvaluatedExpression().setString(value).setRange(expr.range);
|
29
|
-
});
|
30
|
-
compiler.parser.plugin("typeof " + expr, function(expr) {
|
31
|
-
var dep = new ConstDependency(JSON.stringify(value), expr.range);
|
32
|
-
dep.loc = expr.loc;
|
33
|
-
this.state.current.addDependency(dep);
|
34
|
-
return true;
|
35
|
-
});
|
36
|
-
}
|
26
|
+
var options = this.options;
|
37
27
|
compiler.plugin("compilation", function(compilation, params) {
|
38
28
|
var normalModuleFactory = params.normalModuleFactory;
|
39
29
|
var contextModuleFactory = params.contextModuleFactory;
|
@@ -55,39 +45,59 @@ CommonJsPlugin.prototype.apply = function(compiler) {
|
|
55
45
|
|
56
46
|
compilation.dependencyFactories.set(RequireHeaderDependency, new NullFactory());
|
57
47
|
compilation.dependencyTemplates.set(RequireHeaderDependency, new RequireHeaderDependency.Template());
|
48
|
+
|
49
|
+
params.normalModuleFactory.plugin("parser", function(parser, parserOptions) {
|
50
|
+
|
51
|
+
if(typeof parserOptions.commonjs !== "undefined" && !parserOptions.commonjs)
|
52
|
+
return;
|
53
|
+
|
54
|
+
function setTypeof(expr, value) {
|
55
|
+
parser.plugin("evaluate typeof " + expr, function(expr) {
|
56
|
+
return new BasicEvaluatedExpression().setString(value).setRange(expr.range);
|
57
|
+
});
|
58
|
+
parser.plugin("typeof " + expr, function(expr) {
|
59
|
+
var dep = new ConstDependency(JSON.stringify(value), expr.range);
|
60
|
+
dep.loc = expr.loc;
|
61
|
+
this.state.current.addDependency(dep);
|
62
|
+
return true;
|
63
|
+
});
|
64
|
+
}
|
65
|
+
|
66
|
+
setTypeof("require", "function");
|
67
|
+
setTypeof("require.resolve", "function");
|
68
|
+
setTypeof("require.resolveWeak", "function");
|
69
|
+
parser.plugin("evaluate typeof module", function(expr) {
|
70
|
+
return new BasicEvaluatedExpression().setString("object").setRange(expr.range);
|
71
|
+
});
|
72
|
+
parser.plugin("assign require", function(expr) {
|
73
|
+
// to not leak to global "require", we need to define a local require here.
|
74
|
+
var dep = new ConstDependency("var require;", 0);
|
75
|
+
dep.loc = expr.loc;
|
76
|
+
this.state.current.addDependency(dep);
|
77
|
+
this.scope.definitions.push("require");
|
78
|
+
return true;
|
79
|
+
});
|
80
|
+
parser.plugin("can-rename require", function() {
|
81
|
+
return true;
|
82
|
+
});
|
83
|
+
parser.plugin("rename require", function(expr) {
|
84
|
+
// define the require variable. It's still undefined, but not "not defined".
|
85
|
+
var dep = new ConstDependency("var require;", 0);
|
86
|
+
dep.loc = expr.loc;
|
87
|
+
this.state.current.addDependency(dep);
|
88
|
+
return false;
|
89
|
+
});
|
90
|
+
parser.plugin("typeof module", function() {
|
91
|
+
return true;
|
92
|
+
});
|
93
|
+
parser.plugin("evaluate typeof exports", function(expr) {
|
94
|
+
return new BasicEvaluatedExpression().setString("object").setRange(expr.range);
|
95
|
+
});
|
96
|
+
parser.apply(
|
97
|
+
new CommonJsRequireDependencyParserPlugin(options),
|
98
|
+
new RequireResolveDependencyParserPlugin(options)
|
99
|
+
);
|
100
|
+
});
|
58
101
|
});
|
59
|
-
|
60
|
-
setTypeof("require.resolve", "function");
|
61
|
-
setTypeof("require.resolveWeak", "function");
|
62
|
-
compiler.parser.plugin("evaluate typeof module", function(expr) {
|
63
|
-
return new BasicEvaluatedExpression().setString("object").setRange(expr.range);
|
64
|
-
});
|
65
|
-
compiler.parser.plugin("assign require", function(expr) {
|
66
|
-
// to not leak to global "require", we need to define a local require here.
|
67
|
-
var dep = new ConstDependency("var require;", 0);
|
68
|
-
dep.loc = expr.loc;
|
69
|
-
this.state.current.addDependency(dep);
|
70
|
-
this.scope.definitions.push("require");
|
71
|
-
return true;
|
72
|
-
});
|
73
|
-
compiler.parser.plugin("can-rename require", function() {
|
74
|
-
return true;
|
75
|
-
});
|
76
|
-
compiler.parser.plugin("rename require", function(expr) {
|
77
|
-
// define the require variable. It's still undefined, but not "not defined".
|
78
|
-
var dep = new ConstDependency("var require;", 0);
|
79
|
-
dep.loc = expr.loc;
|
80
|
-
this.state.current.addDependency(dep);
|
81
|
-
return false;
|
82
|
-
});
|
83
|
-
compiler.parser.plugin("typeof module", function() {
|
84
|
-
return true;
|
85
|
-
});
|
86
|
-
compiler.parser.plugin("evaluate typeof exports", function(expr) {
|
87
|
-
return new BasicEvaluatedExpression().setString("object").setRange(expr.range);
|
88
|
-
});
|
89
|
-
compiler.parser.apply(
|
90
|
-
new CommonJsRequireDependencyParserPlugin(this.options),
|
91
|
-
new RequireResolveDependencyParserPlugin(this.options)
|
92
|
-
);
|
102
|
+
|
93
103
|
};
|
@@ -16,6 +16,12 @@ HarmonyExportExpressionDependency.prototype = Object.create(NullDependency.proto
|
|
16
16
|
HarmonyExportExpressionDependency.prototype.constructor = HarmonyExportExpressionDependency;
|
17
17
|
HarmonyExportExpressionDependency.prototype.type = "harmony export expression";
|
18
18
|
|
19
|
+
HarmonyExportExpressionDependency.prototype.getExports = function() {
|
20
|
+
return {
|
21
|
+
exports: ["default"]
|
22
|
+
};
|
23
|
+
};
|
24
|
+
|
19
25
|
HarmonyExportExpressionDependency.prototype.describeHarmonyExport = function() {
|
20
26
|
return {
|
21
27
|
exportedName: "default",
|
@@ -31,10 +31,26 @@ HarmonyExportImportedSpecifierDependency.prototype.getReference = function() {
|
|
31
31
|
if(Array.isArray(this.originModule.usedExports)) {
|
32
32
|
// reexport * with known used exports
|
33
33
|
var activeExports = HarmonyModulesHelpers.getActiveExports(this.originModule);
|
34
|
+
if(Array.isArray(m.providedExports)) {
|
35
|
+
return {
|
36
|
+
module: m,
|
37
|
+
importedNames: this.originModule.usedExports.filter(function(id) {
|
38
|
+
return activeExports.indexOf(id) < 0 && m.providedExports.indexOf(id) >= 0 && id !== "default";
|
39
|
+
}, this)
|
40
|
+
}
|
41
|
+
} else {
|
42
|
+
return {
|
43
|
+
module: m,
|
44
|
+
importedNames: this.originModule.usedExports.filter(function(id) {
|
45
|
+
return activeExports.indexOf(id) < 0 && id !== "default";
|
46
|
+
}, this)
|
47
|
+
}
|
48
|
+
}
|
49
|
+
} else if(Array.isArray(m.providedExports)) {
|
34
50
|
return {
|
35
51
|
module: m,
|
36
|
-
importedNames:
|
37
|
-
return
|
52
|
+
importedNames: m.providedExports.filter(function(id) {
|
53
|
+
return id !== "default"
|
38
54
|
})
|
39
55
|
}
|
40
56
|
} else {
|
@@ -61,6 +77,36 @@ HarmonyExportImportedSpecifierDependency.prototype.getReference = function() {
|
|
61
77
|
}
|
62
78
|
};
|
63
79
|
|
80
|
+
HarmonyExportImportedSpecifierDependency.prototype.getExports = function() {
|
81
|
+
if(this.name) {
|
82
|
+
return {
|
83
|
+
exports: [this.name]
|
84
|
+
}
|
85
|
+
};
|
86
|
+
if(this.importDependency.module && Array.isArray(this.importDependency.module.providedExports)) {
|
87
|
+
return {
|
88
|
+
exports: this.importDependency.module.providedExports.filter(function(id) {
|
89
|
+
return id !== "default"
|
90
|
+
}),
|
91
|
+
dependencies: [this.importDependency.module]
|
92
|
+
};
|
93
|
+
}
|
94
|
+
if(this.importDependency.module && this.importDependency.module.providedExports) {
|
95
|
+
return {
|
96
|
+
exports: true
|
97
|
+
};
|
98
|
+
}
|
99
|
+
if(this.importDependency.module) {
|
100
|
+
return {
|
101
|
+
exports: null,
|
102
|
+
dependencies: [this.importDependency.module]
|
103
|
+
};
|
104
|
+
}
|
105
|
+
return {
|
106
|
+
exports: null
|
107
|
+
}
|
108
|
+
};
|
109
|
+
|
64
110
|
HarmonyExportImportedSpecifierDependency.prototype.describeHarmonyExport = function() {
|
65
111
|
return {
|
66
112
|
exportedName: this.name,
|
@@ -71,7 +117,7 @@ HarmonyExportImportedSpecifierDependency.prototype.describeHarmonyExport = funct
|
|
71
117
|
HarmonyExportImportedSpecifierDependency.prototype.updateHash = function(hash) {
|
72
118
|
NullDependency.prototype.updateHash.call(this, hash);
|
73
119
|
var importedModule = this.importDependency.module;
|
74
|
-
hash.update((importedModule && (importedModule.used + JSON.stringify(importedModule.usedExports))) + "");
|
120
|
+
hash.update((importedModule && (importedModule.used + JSON.stringify(importedModule.usedExports) + JSON.stringify(importedModule.providedExports))) + "");
|
75
121
|
};
|
76
122
|
|
77
123
|
HarmonyExportImportedSpecifierDependency.Template = function HarmonyExportImportedSpecifierDependencyTemplate() {};
|
@@ -83,43 +129,57 @@ HarmonyExportImportedSpecifierDependency.Template.prototype.apply = function(dep
|
|
83
129
|
var active = HarmonyModulesHelpers.isActive(dep.originModule, dep);
|
84
130
|
var content;
|
85
131
|
var activeExports;
|
132
|
+
var items;
|
133
|
+
var importIsHarmony = importedModule && (!importedModule.meta || importedModule.meta.harmonyModule);
|
86
134
|
|
87
135
|
function getReexportStatement(key, valueKey) {
|
88
136
|
return(importIsHarmony || !valueKey ? "" : "if(__webpack_require__.o(" + name + ", " + valueKey + ")) ") +
|
89
137
|
"__webpack_require__.d(exports, " + key + ", " +
|
90
|
-
"function() { return " + name + (valueKey === null ? "_default.a" : valueKey && "[" + valueKey + "]") + "; })
|
138
|
+
"function() { return " + name + (valueKey === null ? "_default.a" : valueKey && "[" + valueKey + "]") + "; });\n"
|
91
139
|
}
|
92
140
|
if(!used) { // we want to rexport something, but the export isn't used
|
93
141
|
content = "/* unused harmony reexport " + dep.name + " */\n";
|
94
142
|
} else if(!active) { // we want to reexport something but another exports overrides this one
|
95
143
|
content = "/* inactive harmony reexport " + (dep.name || "namespace") + " */\n";
|
96
144
|
} else if(dep.name && dep.id === "default" && !(importedModule && (!importedModule.meta || importedModule.meta.harmonyModule))) { // we want to reexport the default export from a non-hamory module
|
97
|
-
content = "/* harmony reexport */ " + getReexportStatement(JSON.stringify(used), null)
|
145
|
+
content = "/* harmony reexport (default from non-hamory) */ " + getReexportStatement(JSON.stringify(used), null);
|
98
146
|
} else if(dep.name && dep.id) { // we want to reexport a key as new key
|
99
147
|
var idUsed = importedModule && importedModule.isUsed(dep.id);
|
100
|
-
content = "/* harmony reexport */ " + getReexportStatement(JSON.stringify(used), JSON.stringify(idUsed))
|
148
|
+
content = "/* harmony reexport (binding) */ " + getReexportStatement(JSON.stringify(used), JSON.stringify(idUsed));
|
101
149
|
} else if(dep.name) { // we want to reexport the module object as named export
|
102
|
-
content = "/* harmony reexport */ " + getReexportStatement(JSON.stringify(used), "")
|
150
|
+
content = "/* harmony reexport (module object) */ " + getReexportStatement(JSON.stringify(used), "");
|
103
151
|
} else if(Array.isArray(dep.originModule.usedExports)) { // we know which exports are used
|
104
152
|
activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule);
|
105
|
-
|
106
|
-
var importActiveExports = importedModule && HarmonyModulesHelpers.getActiveExports(importedModule);
|
107
|
-
var items = dep.originModule.usedExports.map(function(id) {
|
153
|
+
items = dep.originModule.usedExports.map(function(id) {
|
108
154
|
if(id === "default") return;
|
109
155
|
if(activeExports.indexOf(id) >= 0) return;
|
110
|
-
if(
|
156
|
+
if(importedModule.isProvided(id) === false) return;
|
111
157
|
var exportUsed = dep.originModule.isUsed(id);
|
112
158
|
var idUsed = importedModule && importedModule.isUsed(id);
|
113
159
|
return [exportUsed, idUsed];
|
114
160
|
}).filter(Boolean);
|
115
161
|
if(items.length > 0) {
|
116
|
-
content =
|
117
|
-
return getReexportStatement(JSON.stringify(item[0]), JSON.stringify(item[1]));
|
118
|
-
}).join("
|
162
|
+
content = items.map(function(item) {
|
163
|
+
return "/* harmony namespace reexport (by used) */ " + getReexportStatement(JSON.stringify(item[0]), JSON.stringify(item[1]));
|
164
|
+
}).join("");
|
119
165
|
} else content = "/* unused harmony namespace reexport */\n";
|
120
|
-
} else if(dep.originModule.usedExports) { // not sure which exports are used
|
166
|
+
} else if(dep.originModule.usedExports && importedModule && Array.isArray(importedModule.providedExports)) { // not sure which exports are used, but we know which are provided
|
167
|
+
activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule);
|
168
|
+
items = importedModule.providedExports.map(function(id) {
|
169
|
+
if(id === "default") return;
|
170
|
+
if(activeExports.indexOf(id) >= 0) return;
|
171
|
+
var exportUsed = dep.originModule.isUsed(id);
|
172
|
+
var idUsed = importedModule && importedModule.isUsed(id);
|
173
|
+
return [exportUsed, idUsed];
|
174
|
+
}).filter(Boolean);
|
175
|
+
if(items.length > 0) {
|
176
|
+
content = items.map(function(item) {
|
177
|
+
return "/* harmony namespace reexport (by provided) */ " + getReexportStatement(JSON.stringify(item[0]), JSON.stringify(item[1]));
|
178
|
+
}).join("");
|
179
|
+
} else content = "/* empty harmony namespace reexport */\n";
|
180
|
+
} else if(dep.originModule.usedExports) { // not sure which exports are used and provided
|
121
181
|
activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule);
|
122
|
-
content = "/* harmony namespace reexport */ for(var __WEBPACK_IMPORT_KEY__ in " + name + ") ";
|
182
|
+
content = "/* harmony namespace reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in " + name + ") ";
|
123
183
|
|
124
184
|
// Filter out exports which are defined by other exports
|
125
185
|
// and filter out default export because it cannot be reexported with *
|
@@ -19,6 +19,12 @@ HarmonyExportSpecifierDependency.prototype = Object.create(NullDependency.protot
|
|
19
19
|
HarmonyExportSpecifierDependency.prototype.constructor = HarmonyExportSpecifierDependency;
|
20
20
|
HarmonyExportSpecifierDependency.prototype.type = "harmony export specifier";
|
21
21
|
|
22
|
+
HarmonyExportSpecifierDependency.prototype.getExports = function() {
|
23
|
+
return {
|
24
|
+
exports: [this.name]
|
25
|
+
}
|
26
|
+
};
|
27
|
+
|
22
28
|
HarmonyExportSpecifierDependency.prototype.describeHarmonyExport = function() {
|
23
29
|
return {
|
24
30
|
exportedName: this.name,
|
@@ -33,14 +39,16 @@ HarmonyExportSpecifierDependency.Template.prototype.apply = function(dep, source
|
|
33
39
|
var active = HarmonyModulesHelpers.isActive(dep.originModule, dep);
|
34
40
|
var content;
|
35
41
|
if(!used) {
|
36
|
-
content = "/* unused harmony export " + (dep.name || "namespace") + "
|
42
|
+
content = "/* unused harmony export " + (dep.name || "namespace") + " */\n";
|
37
43
|
} else if(!active) {
|
38
|
-
content = "/* inactive harmony export " + (dep.name || "namespace") + "
|
44
|
+
content = "/* inactive harmony export " + (dep.name || "namespace") + " */\n";
|
39
45
|
} else if(dep.immutable) {
|
40
|
-
content = "/* harmony export */ exports[" + JSON.stringify(used) + "] = " + dep.id + "
|
46
|
+
content = "/* harmony export (immutable) */ exports[" + JSON.stringify(used) + "] = " + dep.id + ";\n";
|
41
47
|
} else {
|
42
|
-
content = "
|
48
|
+
content = "/* harmony export (binding) */ __webpack_require__.d(exports, " + JSON.stringify(used) + ", function() { return " + dep.id + "; });\n";
|
43
49
|
}
|
50
|
+
if(dep.position > 0)
|
51
|
+
content = "\n" + content;
|
44
52
|
source.insert(dep.position, content);
|
45
53
|
|
46
54
|
};
|
@@ -30,11 +30,13 @@ HarmonyImportSpecifierDependency.prototype.getReference = function() {
|
|
30
30
|
HarmonyImportSpecifierDependency.prototype.getWarnings = function() {
|
31
31
|
var importedModule = this.importDependency.module;
|
32
32
|
if(importedModule && importedModule.meta && importedModule.meta.harmonyModule) {
|
33
|
-
if(this.id &&
|
33
|
+
if(this.id && importedModule.isProvided(this.id) === false) {
|
34
|
+
var err = new Error("export '" + this.id + "'" +
|
35
|
+
(this.id !== this.name ? " (imported as '" + this.name + "')" : "") +
|
36
|
+
" was not found in '" + this.importDependency.userRequest + "'");
|
37
|
+
err.hideStack = true;
|
34
38
|
return [
|
35
|
-
|
36
|
-
(this.id !== this.name ? " (imported as '" + this.name + "')" : "") +
|
37
|
-
" was not found in '" + this.importDependency.userRequest + "'")
|
39
|
+
err
|
38
40
|
];
|
39
41
|
}
|
40
42
|
}
|
@@ -68,32 +68,3 @@ HarmonyModulesHelpers.getActiveExports = function(module) {
|
|
68
68
|
return arr;
|
69
69
|
}, [])
|
70
70
|
};
|
71
|
-
|
72
|
-
HarmonyModulesHelpers.hasStarExport = function(module) {
|
73
|
-
if(typeof module.hasStarExport === "boolean")
|
74
|
-
return module.hasStarExport;
|
75
|
-
return module.dependencies.some(function(dep) {
|
76
|
-
if(!dep.describeHarmonyExport) return false;
|
77
|
-
var d = dep.describeHarmonyExport();
|
78
|
-
if(!d) return false;
|
79
|
-
var name = d.exportedName;
|
80
|
-
return !name;
|
81
|
-
}, [])
|
82
|
-
};
|
83
|
-
|
84
|
-
HarmonyModulesHelpers.isExportedByHarmony = function(module, exportedName) {
|
85
|
-
if(module.hasStarExport)
|
86
|
-
return exportedName !== "default";
|
87
|
-
if(module.activeExports && module.activeExports.indexOf(exportedName) >= 0)
|
88
|
-
return true;
|
89
|
-
if(module.activeExports && typeof module.hasStarExport === "boolean")
|
90
|
-
return false;
|
91
|
-
return module.dependencies.some(function(dep) {
|
92
|
-
if(!dep.describeHarmonyExport) return false;
|
93
|
-
var d = dep.describeHarmonyExport();
|
94
|
-
if(!d) return false;
|
95
|
-
var name = d.exportedName;
|
96
|
-
if(!name) return exportedName !== "default"; // namespace export
|
97
|
-
return name === exportedName; // direct export
|
98
|
-
}, [])
|
99
|
-
};
|