webpack 3.5.5 → 3.5.6
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/README.md +567 -567
- package/bin/config-yargs.js +1 -1
- package/bin/convert-argv.js +4 -4
- package/lib/HotModuleReplacement.runtime.js +602 -601
- package/lib/Module.js +250 -249
- package/lib/NormalModule.js +556 -555
- package/lib/OptionsDefaulter.js +73 -71
- package/lib/SourceMapDevToolPlugin.js +209 -207
- package/lib/Template.js +176 -166
- package/lib/WebpackOptionsDefaulter.js +129 -115
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +285 -286
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -121
- package/lib/dependencies/HarmonyModulesHelpers.js +85 -85
- package/lib/optimize/ConcatenatedModule.js +814 -814
- package/lib/webpack.js +119 -118
- package/package.json +1 -1
@@ -1,121 +1,124 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const HarmonyImportDependency = require("./HarmonyImportDependency");
|
8
|
-
const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
|
9
|
-
const HarmonyAcceptImportDependency = require("./HarmonyAcceptImportDependency");
|
10
|
-
const HarmonyAcceptDependency = require("./HarmonyAcceptDependency");
|
11
|
-
const HarmonyModulesHelpers = require("./HarmonyModulesHelpers");
|
12
|
-
|
13
|
-
module.exports = class HarmonyImportDependencyParserPlugin {
|
14
|
-
constructor(moduleOptions) {
|
15
|
-
this.strictExportPresence = moduleOptions.strictExportPresence;
|
16
|
-
this.strictThisContextOnImports = moduleOptions.strictThisContextOnImports;
|
17
|
-
}
|
18
|
-
|
19
|
-
apply(parser) {
|
20
|
-
parser.plugin("import", (statement, source) => {
|
21
|
-
const dep = new HarmonyImportDependency(source, HarmonyModulesHelpers.getNewModuleVar(parser.state, source), statement.range);
|
22
|
-
dep.loc = statement.loc;
|
23
|
-
parser.state.current.addDependency(dep);
|
24
|
-
parser.state.lastHarmonyImport = dep;
|
25
|
-
return true;
|
26
|
-
});
|
27
|
-
parser.plugin("import specifier", (statement, source, id, name) => {
|
28
|
-
parser.scope.definitions.length--;
|
29
|
-
parser.scope.renames[`$${name}`] = "imported var";
|
30
|
-
if(!parser.state.harmonySpecifier) parser.state.harmonySpecifier = {};
|
31
|
-
parser.state.harmonySpecifier[`$${name}`] = [parser.state.lastHarmonyImport, HarmonyModulesHelpers.getModuleVar(parser.state, source), id];
|
32
|
-
return true;
|
33
|
-
});
|
34
|
-
parser.plugin("expression imported var", (expr) => {
|
35
|
-
const name = expr.name;
|
36
|
-
const settings = parser.state.harmonySpecifier[`$${name}`];
|
37
|
-
const dep = new HarmonyImportSpecifierDependency(settings[0], settings[1], settings[2], name, expr.range, this.strictExportPresence);
|
38
|
-
dep.shorthand = parser.scope.inShorthand;
|
39
|
-
dep.directImport = true;
|
40
|
-
dep.loc = expr.loc;
|
41
|
-
parser.state.current.addDependency(dep);
|
42
|
-
return true;
|
43
|
-
});
|
44
|
-
parser.plugin("expression imported var.*", (expr) => {
|
45
|
-
const name = expr.object.name;
|
46
|
-
const settings = parser.state.harmonySpecifier[`$${name}`];
|
47
|
-
if(settings[2] !== null)
|
48
|
-
return false;
|
49
|
-
const dep = new HarmonyImportSpecifierDependency(settings[0], settings[1], expr.property.name || expr.property.value, name, expr.range, this.strictExportPresence);
|
50
|
-
dep.shorthand = parser.scope.inShorthand;
|
51
|
-
dep.directImport = false;
|
52
|
-
dep.loc = expr.loc;
|
53
|
-
parser.state.current.addDependency(dep);
|
54
|
-
return true;
|
55
|
-
});
|
56
|
-
if(this.strictThisContextOnImports) {
|
57
|
-
// only in case when we strictly follow the spec we need a special case here
|
58
|
-
parser.plugin("call imported var.*", (expr) => {
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
dep
|
66
|
-
dep.
|
67
|
-
dep.
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
const
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
dep
|
84
|
-
dep.
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
}
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const HarmonyImportDependency = require("./HarmonyImportDependency");
|
8
|
+
const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
|
9
|
+
const HarmonyAcceptImportDependency = require("./HarmonyAcceptImportDependency");
|
10
|
+
const HarmonyAcceptDependency = require("./HarmonyAcceptDependency");
|
11
|
+
const HarmonyModulesHelpers = require("./HarmonyModulesHelpers");
|
12
|
+
|
13
|
+
module.exports = class HarmonyImportDependencyParserPlugin {
|
14
|
+
constructor(moduleOptions) {
|
15
|
+
this.strictExportPresence = moduleOptions.strictExportPresence;
|
16
|
+
this.strictThisContextOnImports = moduleOptions.strictThisContextOnImports;
|
17
|
+
}
|
18
|
+
|
19
|
+
apply(parser) {
|
20
|
+
parser.plugin("import", (statement, source) => {
|
21
|
+
const dep = new HarmonyImportDependency(source, HarmonyModulesHelpers.getNewModuleVar(parser.state, source), statement.range);
|
22
|
+
dep.loc = statement.loc;
|
23
|
+
parser.state.current.addDependency(dep);
|
24
|
+
parser.state.lastHarmonyImport = dep;
|
25
|
+
return true;
|
26
|
+
});
|
27
|
+
parser.plugin("import specifier", (statement, source, id, name) => {
|
28
|
+
parser.scope.definitions.length--;
|
29
|
+
parser.scope.renames[`$${name}`] = "imported var";
|
30
|
+
if(!parser.state.harmonySpecifier) parser.state.harmonySpecifier = {};
|
31
|
+
parser.state.harmonySpecifier[`$${name}`] = [parser.state.lastHarmonyImport, HarmonyModulesHelpers.getModuleVar(parser.state, source), id];
|
32
|
+
return true;
|
33
|
+
});
|
34
|
+
parser.plugin("expression imported var", (expr) => {
|
35
|
+
const name = expr.name;
|
36
|
+
const settings = parser.state.harmonySpecifier[`$${name}`];
|
37
|
+
const dep = new HarmonyImportSpecifierDependency(settings[0], settings[1], settings[2], name, expr.range, this.strictExportPresence);
|
38
|
+
dep.shorthand = parser.scope.inShorthand;
|
39
|
+
dep.directImport = true;
|
40
|
+
dep.loc = expr.loc;
|
41
|
+
parser.state.current.addDependency(dep);
|
42
|
+
return true;
|
43
|
+
});
|
44
|
+
parser.plugin("expression imported var.*", (expr) => {
|
45
|
+
const name = expr.object.name;
|
46
|
+
const settings = parser.state.harmonySpecifier[`$${name}`];
|
47
|
+
if(settings[2] !== null)
|
48
|
+
return false;
|
49
|
+
const dep = new HarmonyImportSpecifierDependency(settings[0], settings[1], expr.property.name || expr.property.value, name, expr.range, this.strictExportPresence);
|
50
|
+
dep.shorthand = parser.scope.inShorthand;
|
51
|
+
dep.directImport = false;
|
52
|
+
dep.loc = expr.loc;
|
53
|
+
parser.state.current.addDependency(dep);
|
54
|
+
return true;
|
55
|
+
});
|
56
|
+
if(this.strictThisContextOnImports) {
|
57
|
+
// only in case when we strictly follow the spec we need a special case here
|
58
|
+
parser.plugin("call imported var.*", (expr) => {
|
59
|
+
if(expr.callee.type !== "MemberExpression") return;
|
60
|
+
if(expr.callee.object.type !== "Identifier") return;
|
61
|
+
const name = expr.callee.object.name;
|
62
|
+
const settings = parser.state.harmonySpecifier[`$${name}`];
|
63
|
+
if(settings[2] !== null)
|
64
|
+
return false;
|
65
|
+
const dep = new HarmonyImportSpecifierDependency(settings[0], settings[1], expr.callee.property.name || expr.callee.property.value, name, expr.callee.range, this.strictExportPresence);
|
66
|
+
dep.shorthand = parser.scope.inShorthand;
|
67
|
+
dep.directImport = false;
|
68
|
+
dep.namespaceObjectAsContext = true;
|
69
|
+
dep.loc = expr.callee.loc;
|
70
|
+
parser.state.current.addDependency(dep);
|
71
|
+
if(expr.arguments)
|
72
|
+
parser.walkExpressions(expr.arguments);
|
73
|
+
return true;
|
74
|
+
});
|
75
|
+
}
|
76
|
+
parser.plugin("call imported var", (expr) => {
|
77
|
+
const args = expr.arguments;
|
78
|
+
const fullExpr = expr;
|
79
|
+
expr = expr.callee;
|
80
|
+
if(expr.type !== "Identifier") return;
|
81
|
+
const name = expr.name;
|
82
|
+
const settings = parser.state.harmonySpecifier[`$${name}`];
|
83
|
+
const dep = new HarmonyImportSpecifierDependency(settings[0], settings[1], settings[2], name, expr.range, this.strictExportPresence);
|
84
|
+
dep.directImport = true;
|
85
|
+
dep.callArgs = args;
|
86
|
+
dep.call = fullExpr;
|
87
|
+
dep.loc = expr.loc;
|
88
|
+
parser.state.current.addDependency(dep);
|
89
|
+
if(args)
|
90
|
+
parser.walkExpressions(args);
|
91
|
+
return true;
|
92
|
+
});
|
93
|
+
parser.plugin("hot accept callback", (expr, requests) => {
|
94
|
+
const dependencies = requests
|
95
|
+
.filter(request => HarmonyModulesHelpers.checkModuleVar(parser.state, request))
|
96
|
+
.map(request => {
|
97
|
+
const dep = new HarmonyAcceptImportDependency(request, HarmonyModulesHelpers.getModuleVar(parser.state, request), expr.range);
|
98
|
+
dep.loc = expr.loc;
|
99
|
+
parser.state.current.addDependency(dep);
|
100
|
+
return dep;
|
101
|
+
});
|
102
|
+
if(dependencies.length > 0) {
|
103
|
+
const dep = new HarmonyAcceptDependency(expr.range, dependencies, true);
|
104
|
+
dep.loc = expr.loc;
|
105
|
+
parser.state.current.addDependency(dep);
|
106
|
+
}
|
107
|
+
});
|
108
|
+
parser.plugin("hot accept without callback", (expr, requests) => {
|
109
|
+
const dependencies = requests
|
110
|
+
.filter(request => HarmonyModulesHelpers.checkModuleVar(parser.state, request))
|
111
|
+
.map(request => {
|
112
|
+
const dep = new HarmonyAcceptImportDependency(request, HarmonyModulesHelpers.getModuleVar(parser.state, request), expr.range);
|
113
|
+
dep.loc = expr.loc;
|
114
|
+
parser.state.current.addDependency(dep);
|
115
|
+
return dep;
|
116
|
+
});
|
117
|
+
if(dependencies.length > 0) {
|
118
|
+
const dep = new HarmonyAcceptDependency(expr.range, dependencies, false);
|
119
|
+
dep.loc = expr.loc;
|
120
|
+
parser.state.current.addDependency(dep);
|
121
|
+
}
|
122
|
+
});
|
123
|
+
}
|
124
|
+
};
|
@@ -1,85 +1,85 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
class HarmonyModulesHelpers {
|
8
|
-
|
9
|
-
static getModuleVar(state, request) {
|
10
|
-
if(!state.harmonyModules) state.harmonyModules = [];
|
11
|
-
let idx = state.harmonyModules.indexOf(request);
|
12
|
-
if(idx < 0) {
|
13
|
-
idx = state.harmonyModules.length;
|
14
|
-
state.harmonyModules.push(request);
|
15
|
-
}
|
16
|
-
return `__WEBPACK_IMPORTED_MODULE_${idx}_${request.replace(/[^A-Za-z0-9_]/g, "_").replace(/__+/g, "_")}__`;
|
17
|
-
}
|
18
|
-
|
19
|
-
static getNewModuleVar(state, request) {
|
20
|
-
if(state.harmonyModules && state.harmonyModules.indexOf(request) >= 0)
|
21
|
-
return null;
|
22
|
-
return this.getModuleVar(state, request);
|
23
|
-
}
|
24
|
-
|
25
|
-
static checkModuleVar(state, request) {
|
26
|
-
if(!state.harmonyModules || state.harmonyModules.indexOf(request) < 0)
|
27
|
-
return null;
|
28
|
-
return this.getModuleVar(state, request);
|
29
|
-
}
|
30
|
-
|
31
|
-
// checks if an harmony dependency is active in a module according to
|
32
|
-
// precedence rules.
|
33
|
-
static isActive(module, depInQuestion) {
|
34
|
-
const desc = depInQuestion.describeHarmonyExport();
|
35
|
-
if(!desc.exportedName) return true;
|
36
|
-
let before = true;
|
37
|
-
for(
|
38
|
-
const dep =
|
39
|
-
if(dep === depInQuestion) {
|
40
|
-
before = false;
|
41
|
-
continue;
|
42
|
-
}
|
43
|
-
if(!dep.describeHarmonyExport) continue;
|
44
|
-
const d = dep.describeHarmonyExport();
|
45
|
-
if(!d || !d.exportedName) continue;
|
46
|
-
if(d.exportedName === desc.exportedName) {
|
47
|
-
if(d.precedence < desc.precedence) {
|
48
|
-
return false;
|
49
|
-
}
|
50
|
-
if(d.precedence === desc.precedence && !before) {
|
51
|
-
return false;
|
52
|
-
}
|
53
|
-
}
|
54
|
-
}
|
55
|
-
return true;
|
56
|
-
}
|
57
|
-
|
58
|
-
// get a list of named exports defined in a module
|
59
|
-
// doesn't include * reexports.
|
60
|
-
static getActiveExports(module, currentDependency) {
|
61
|
-
const desc = currentDependency && currentDependency.describeHarmonyExport();
|
62
|
-
var currentIndex = currentDependency ? module.dependencies.indexOf(currentDependency) : -1;
|
63
|
-
return module.dependencies.map((dep, idx) => {
|
64
|
-
return {
|
65
|
-
dep: dep,
|
66
|
-
idx: idx
|
67
|
-
};
|
68
|
-
}).reduce((arr, data) => {
|
69
|
-
const dep = data.dep;
|
70
|
-
if(!dep.describeHarmonyExport) return arr;
|
71
|
-
const d = dep.describeHarmonyExport();
|
72
|
-
if(!d) return arr;
|
73
|
-
if(!desc || (d.precedence < desc.precedence) || (d.precedence === desc.precedence && data.idx < currentIndex)) {
|
74
|
-
var names = [].concat(d.exportedName);
|
75
|
-
names.forEach(function(name) {
|
76
|
-
if(name && arr.indexOf(name) < 0)
|
77
|
-
arr.push(name);
|
78
|
-
});
|
79
|
-
}
|
80
|
-
return arr;
|
81
|
-
}, []);
|
82
|
-
}
|
83
|
-
}
|
84
|
-
|
85
|
-
module.exports = HarmonyModulesHelpers;
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
class HarmonyModulesHelpers {
|
8
|
+
|
9
|
+
static getModuleVar(state, request) {
|
10
|
+
if(!state.harmonyModules) state.harmonyModules = [];
|
11
|
+
let idx = state.harmonyModules.indexOf(request);
|
12
|
+
if(idx < 0) {
|
13
|
+
idx = state.harmonyModules.length;
|
14
|
+
state.harmonyModules.push(request);
|
15
|
+
}
|
16
|
+
return `__WEBPACK_IMPORTED_MODULE_${idx}_${request.replace(/[^A-Za-z0-9_]/g, "_").replace(/__+/g, "_")}__`;
|
17
|
+
}
|
18
|
+
|
19
|
+
static getNewModuleVar(state, request) {
|
20
|
+
if(state.harmonyModules && state.harmonyModules.indexOf(request) >= 0)
|
21
|
+
return null;
|
22
|
+
return this.getModuleVar(state, request);
|
23
|
+
}
|
24
|
+
|
25
|
+
static checkModuleVar(state, request) {
|
26
|
+
if(!state.harmonyModules || state.harmonyModules.indexOf(request) < 0)
|
27
|
+
return null;
|
28
|
+
return this.getModuleVar(state, request);
|
29
|
+
}
|
30
|
+
|
31
|
+
// checks if an harmony dependency is active in a module according to
|
32
|
+
// precedence rules.
|
33
|
+
static isActive(module, depInQuestion) {
|
34
|
+
const desc = depInQuestion.describeHarmonyExport();
|
35
|
+
if(!desc.exportedName) return true;
|
36
|
+
let before = true;
|
37
|
+
for(let idx = 0; idx < module.dependencies.length; idx++) {
|
38
|
+
const dep = module.dependencies[idx];
|
39
|
+
if(dep === depInQuestion) {
|
40
|
+
before = false;
|
41
|
+
continue;
|
42
|
+
}
|
43
|
+
if(!dep.describeHarmonyExport) continue;
|
44
|
+
const d = dep.describeHarmonyExport();
|
45
|
+
if(!d || !d.exportedName) continue;
|
46
|
+
if(d.exportedName === desc.exportedName) {
|
47
|
+
if(d.precedence < desc.precedence) {
|
48
|
+
return false;
|
49
|
+
}
|
50
|
+
if(d.precedence === desc.precedence && !before) {
|
51
|
+
return false;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|
55
|
+
return true;
|
56
|
+
}
|
57
|
+
|
58
|
+
// get a list of named exports defined in a module
|
59
|
+
// doesn't include * reexports.
|
60
|
+
static getActiveExports(module, currentDependency) {
|
61
|
+
const desc = currentDependency && currentDependency.describeHarmonyExport();
|
62
|
+
var currentIndex = currentDependency ? module.dependencies.indexOf(currentDependency) : -1;
|
63
|
+
return module.dependencies.map((dep, idx) => {
|
64
|
+
return {
|
65
|
+
dep: dep,
|
66
|
+
idx: idx
|
67
|
+
};
|
68
|
+
}).reduce((arr, data) => {
|
69
|
+
const dep = data.dep;
|
70
|
+
if(!dep.describeHarmonyExport) return arr;
|
71
|
+
const d = dep.describeHarmonyExport();
|
72
|
+
if(!d) return arr;
|
73
|
+
if(!desc || (d.precedence < desc.precedence) || (d.precedence === desc.precedence && data.idx < currentIndex)) {
|
74
|
+
var names = [].concat(d.exportedName);
|
75
|
+
names.forEach(function(name) {
|
76
|
+
if(name && arr.indexOf(name) < 0)
|
77
|
+
arr.push(name);
|
78
|
+
});
|
79
|
+
}
|
80
|
+
return arr;
|
81
|
+
}, []);
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
module.exports = HarmonyModulesHelpers;
|