webpack 3.6.0 → 3.8.1

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.
Files changed (229) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +716 -716
  3. package/bin/convert-argv.js +1 -1
  4. package/bin/webpack.js +6 -0
  5. package/buildin/.eslintrc +7 -7
  6. package/buildin/amd-define.js +3 -3
  7. package/buildin/amd-options.js +2 -2
  8. package/buildin/global.js +21 -21
  9. package/buildin/harmony-module.js +24 -24
  10. package/buildin/module.js +22 -22
  11. package/buildin/system.js +7 -7
  12. package/hot/.eslintrc +9 -9
  13. package/hot/dev-server.js +53 -53
  14. package/hot/emitter.js +2 -2
  15. package/hot/log-apply-result.js +38 -38
  16. package/hot/log.js +44 -44
  17. package/hot/only-dev-server.js +71 -71
  18. package/hot/poll.js +34 -34
  19. package/hot/signal.js +51 -51
  20. package/lib/APIPlugin.js +45 -45
  21. package/lib/AsyncDependenciesBlock.js +43 -43
  22. package/lib/AsyncDependencyToInitialChunkWarning.js +21 -0
  23. package/lib/AutomaticPrefetchPlugin.js +36 -36
  24. package/lib/BasicEvaluatedExpression.js +203 -203
  25. package/lib/CaseSensitiveModulesWarning.js +49 -49
  26. package/lib/Chunk.js +3 -0
  27. package/lib/ChunkRenderError.js +24 -24
  28. package/lib/ChunkTemplate.js +36 -36
  29. package/lib/CompatibilityPlugin.js +57 -57
  30. package/lib/Compilation.js +158 -51
  31. package/lib/Compiler.js +523 -523
  32. package/lib/ConstPlugin.js +60 -60
  33. package/lib/ContextExclusionPlugin.js +17 -0
  34. package/lib/ContextModule.js +431 -431
  35. package/lib/ContextModuleFactory.js +14 -5
  36. package/lib/ContextReplacementPlugin.js +111 -111
  37. package/lib/DefinePlugin.js +123 -123
  38. package/lib/DelegatedModule.js +98 -92
  39. package/lib/DelegatedModuleFactoryPlugin.js +59 -59
  40. package/lib/DelegatedPlugin.js +30 -30
  41. package/lib/DependenciesBlockVariable.js +51 -51
  42. package/lib/DllEntryPlugin.js +37 -37
  43. package/lib/DllModule.js +58 -58
  44. package/lib/DllModuleFactory.js +20 -20
  45. package/lib/DllPlugin.js +38 -38
  46. package/lib/DllReferencePlugin.js +62 -62
  47. package/lib/DynamicEntryPlugin.js +59 -59
  48. package/lib/EntryModuleNotFoundError.js +22 -22
  49. package/lib/EntryOptionPlugin.js +31 -31
  50. package/lib/EnvironmentPlugin.js +50 -50
  51. package/lib/ErrorHelpers.js +31 -31
  52. package/lib/EvalDevToolModulePlugin.js +22 -22
  53. package/lib/EvalDevToolModuleTemplatePlugin.js +33 -33
  54. package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +75 -75
  55. package/lib/EvalSourceMapDevToolPlugin.js +32 -32
  56. package/lib/ExportPropertyMainTemplatePlugin.js +31 -31
  57. package/lib/ExtendedAPIPlugin.js +47 -47
  58. package/lib/ExternalModule.js +7 -0
  59. package/lib/ExternalModuleFactoryPlugin.js +91 -91
  60. package/lib/ExternalsPlugin.js +21 -21
  61. package/lib/FlagDependencyExportsPlugin.js +101 -101
  62. package/lib/FunctionModulePlugin.js +24 -24
  63. package/lib/FunctionModuleTemplatePlugin.js +7 -3
  64. package/lib/HashedModuleIdsPlugin.js +42 -42
  65. package/lib/HotUpdateChunkTemplate.js +31 -31
  66. package/lib/IgnorePlugin.js +69 -69
  67. package/lib/JsonpExportMainTemplatePlugin.js +37 -37
  68. package/lib/JsonpHotUpdateChunkTemplatePlugin.js +27 -27
  69. package/lib/JsonpMainTemplate.runtime.js +2 -1
  70. package/lib/JsonpMainTemplatePlugin.js +2 -0
  71. package/lib/JsonpTemplatePlugin.js +21 -21
  72. package/lib/LibManifestPlugin.js +63 -63
  73. package/lib/LibraryTemplatePlugin.js +92 -92
  74. package/lib/LoaderOptionsPlugin.js +36 -36
  75. package/lib/LoaderTargetPlugin.js +19 -19
  76. package/lib/MemoryOutputFileSystem.js +5 -5
  77. package/lib/ModuleBuildError.js +42 -42
  78. package/lib/ModuleDependencyError.js +22 -22
  79. package/lib/ModuleDependencyWarning.js +22 -22
  80. package/lib/ModuleError.js +24 -24
  81. package/lib/ModuleFilenameHelpers.js +162 -162
  82. package/lib/ModuleNotFoundError.js +26 -26
  83. package/lib/ModuleParseError.js +1 -1
  84. package/lib/ModuleReason.js +50 -50
  85. package/lib/ModuleTemplate.js +23 -23
  86. package/lib/ModuleWarning.js +24 -24
  87. package/lib/MovedToPluginWarningPlugin.js +21 -21
  88. package/lib/MultiCompiler.js +164 -164
  89. package/lib/MultiEntryPlugin.js +39 -39
  90. package/lib/MultiModuleFactory.js +19 -19
  91. package/lib/MultiStats.js +79 -79
  92. package/lib/MultiWatching.js +32 -32
  93. package/lib/NamedChunksPlugin.js +30 -30
  94. package/lib/NamedModulesPlugin.js +27 -27
  95. package/lib/NewWatchingPlugin.js +15 -15
  96. package/lib/NoEmitOnErrorsPlugin.js +22 -22
  97. package/lib/NoErrorsPlugin.js +29 -29
  98. package/lib/NodeStuffPlugin.js +97 -97
  99. package/lib/NormalModuleReplacementPlugin.js +45 -45
  100. package/lib/NullFactory.js +12 -12
  101. package/lib/OptionsApply.js +10 -10
  102. package/lib/Parser.js +65 -34
  103. package/lib/ParserHelpers.js +85 -85
  104. package/lib/PrefetchPlugin.js +31 -31
  105. package/lib/ProgressPlugin.js +192 -192
  106. package/lib/ProvidePlugin.js +55 -55
  107. package/lib/RawModule.js +54 -54
  108. package/lib/RequestShortener.js +63 -63
  109. package/lib/RequireJsStuffPlugin.js +31 -31
  110. package/lib/RuleSet.js +444 -444
  111. package/lib/SetVarMainTemplatePlugin.js +41 -41
  112. package/lib/SingleEntryPlugin.js +35 -35
  113. package/lib/SizeFormatHelpers.js +18 -18
  114. package/lib/SourceMapDevToolModuleOptionsPlugin.js +37 -37
  115. package/lib/Stats.js +27 -8
  116. package/lib/UmdMainTemplatePlugin.js +1 -1
  117. package/lib/UnsupportedFeatureWarning.js +21 -21
  118. package/lib/UseStrictPlugin.js +34 -34
  119. package/lib/WarnCaseSensitiveModulesPlugin.js +31 -31
  120. package/lib/WatchIgnorePlugin.js +49 -49
  121. package/lib/WebpackError.js +11 -11
  122. package/lib/WebpackOptionsDefaulter.js +129 -129
  123. package/lib/WebpackOptionsValidationError.js +196 -196
  124. package/lib/compareLocations.js +36 -36
  125. package/lib/dependencies/AMDDefineDependency.js +142 -142
  126. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +5 -1
  127. package/lib/dependencies/AMDPlugin.js +119 -119
  128. package/lib/dependencies/AMDRequireArrayDependency.js +2 -0
  129. package/lib/dependencies/AMDRequireContextDependency.js +0 -9
  130. package/lib/dependencies/AMDRequireDependenciesBlock.js +33 -33
  131. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +177 -177
  132. package/lib/dependencies/AMDRequireDependency.js +67 -67
  133. package/lib/dependencies/AMDRequireItemDependency.js +22 -22
  134. package/lib/dependencies/CommonJsRequireContextDependency.js +0 -10
  135. package/lib/dependencies/CommonJsRequireDependency.js +22 -22
  136. package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +89 -89
  137. package/lib/dependencies/ConstDependency.js +32 -32
  138. package/lib/dependencies/ContextDependency.js +20 -0
  139. package/lib/dependencies/ContextDependencyHelpers.js +71 -71
  140. package/lib/dependencies/ContextElementDependency.js +21 -21
  141. package/lib/dependencies/CriticalDependencyWarning.js +20 -20
  142. package/lib/dependencies/DelegatedExportsDependency.js +33 -33
  143. package/lib/dependencies/DelegatedSourceDependency.js +18 -18
  144. package/lib/dependencies/DllEntryDependency.js +20 -20
  145. package/lib/dependencies/HarmonyCompatibilityDependency.js +30 -30
  146. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +14 -2
  147. package/lib/dependencies/HarmonyExportExpressionDependency.js +0 -7
  148. package/lib/dependencies/HarmonyExportHeaderDependency.js +28 -28
  149. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +45 -45
  150. package/lib/dependencies/HarmonyExportSpecifierDependency.js +0 -13
  151. package/lib/dependencies/HarmonyModulesHelpers.js +0 -53
  152. package/lib/dependencies/ImportContextDependency.js +0 -10
  153. package/lib/dependencies/ImportDependenciesBlock.js +17 -17
  154. package/lib/dependencies/ImportEagerContextDependency.js +22 -22
  155. package/lib/dependencies/ImportLazyContextDependency.js +22 -22
  156. package/lib/dependencies/ImportLazyOnceContextDependency.js +22 -22
  157. package/lib/dependencies/ImportParserPlugin.js +89 -89
  158. package/lib/dependencies/ImportPlugin.js +60 -60
  159. package/lib/dependencies/ImportWeakContextDependency.js +22 -22
  160. package/lib/dependencies/LoaderDependency.js +18 -18
  161. package/lib/dependencies/LoaderPlugin.js +60 -60
  162. package/lib/dependencies/LocalModule.js +23 -23
  163. package/lib/dependencies/LocalModuleDependency.js +24 -24
  164. package/lib/dependencies/LocalModulesHelpers.js +46 -46
  165. package/lib/dependencies/ModuleDependency.js +23 -23
  166. package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
  167. package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
  168. package/lib/dependencies/MultiEntryDependency.js +20 -20
  169. package/lib/dependencies/NullDependency.js +24 -24
  170. package/lib/dependencies/PrefetchDependency.js +18 -18
  171. package/lib/dependencies/RequireContextDependency.js +26 -26
  172. package/lib/dependencies/RequireContextDependencyParserPlugin.js +50 -50
  173. package/lib/dependencies/RequireContextPlugin.js +96 -96
  174. package/lib/dependencies/RequireEnsureDependenciesBlock.js +22 -22
  175. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +102 -102
  176. package/lib/dependencies/RequireEnsureDependency.js +38 -38
  177. package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
  178. package/lib/dependencies/RequireEnsurePlugin.js +40 -40
  179. package/lib/dependencies/RequireHeaderDependency.js +26 -26
  180. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +21 -21
  181. package/lib/dependencies/RequireIncludePlugin.js +33 -33
  182. package/lib/dependencies/RequireResolveContextDependency.js +0 -10
  183. package/lib/dependencies/RequireResolveDependency.js +22 -22
  184. package/lib/dependencies/RequireResolveDependencyParserPlugin.js +71 -71
  185. package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
  186. package/lib/dependencies/SingleEntryDependency.js +18 -18
  187. package/lib/dependencies/SystemPlugin.js +44 -44
  188. package/lib/dependencies/UnsupportedDependency.js +23 -23
  189. package/lib/dependencies/WebpackMissingModule.js +18 -18
  190. package/lib/dependencies/getFunctionExpression.js +44 -44
  191. package/lib/formatLocation.js +54 -54
  192. package/lib/node/NodeChunkTemplatePlugin.js +27 -27
  193. package/lib/node/NodeEnvironmentPlugin.js +25 -25
  194. package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +27 -27
  195. package/lib/node/NodeMainTemplate.runtime.js +24 -24
  196. package/lib/node/NodeMainTemplateAsync.runtime.js +40 -40
  197. package/lib/node/NodeOutputFileSystem.js +22 -22
  198. package/lib/node/NodeSourcePlugin.js +88 -88
  199. package/lib/node/NodeTargetPlugin.js +15 -15
  200. package/lib/node/NodeTemplatePlugin.js +27 -27
  201. package/lib/node/NodeWatchFileSystem.js +72 -72
  202. package/lib/optimize/ChunkModuleIdRangePlugin.js +53 -53
  203. package/lib/optimize/CommonsChunkPlugin.js +40 -19
  204. package/lib/optimize/ConcatenatedModule.js +27 -24
  205. package/lib/optimize/DedupePlugin.js +15 -15
  206. package/lib/optimize/FlagIncludedChunksPlugin.js +35 -35
  207. package/lib/optimize/LimitChunkCountPlugin.js +59 -59
  208. package/lib/optimize/MinChunkSizePlugin.js +65 -65
  209. package/lib/optimize/RemoveEmptyChunksPlugin.js +21 -21
  210. package/lib/optimize/UglifyJsPlugin.js +9 -9
  211. package/lib/performance/AssetsOverSizeLimitWarning.js +23 -23
  212. package/lib/performance/EntrypointsOverSizeLimitWarning.js +28 -28
  213. package/lib/performance/NoAsyncChunksWarning.js +20 -20
  214. package/lib/performance/SizeLimitsPlugin.js +102 -102
  215. package/lib/prepareOptions.js +29 -29
  216. package/lib/removeAndDo.js +15 -15
  217. package/lib/util/Queue.js +42 -0
  218. package/lib/util/Semaphore.js +32 -32
  219. package/lib/util/identifier.js +38 -38
  220. package/lib/validateSchema.js +66 -66
  221. package/lib/web/WebEnvironmentPlugin.js +18 -18
  222. package/lib/webpack.js +1 -0
  223. package/lib/webworker/WebWorkerChunkTemplatePlugin.js +29 -29
  224. package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +28 -28
  225. package/lib/webworker/WebWorkerMainTemplate.runtime.js +58 -58
  226. package/lib/webworker/WebWorkerTemplatePlugin.js +20 -20
  227. package/package.json +1 -1
  228. package/schemas/ajv.absolutePath.js +29 -29
  229. package/schemas/webpackOptionsSchema.json +69 -0
@@ -1,20 +1,20 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const Dependency = require("../Dependency");
7
-
8
- class DllEntryDependency extends Dependency {
9
- constructor(dependencies, name) {
10
- super();
11
- this.dependencies = dependencies;
12
- this.name = name;
13
- }
14
-
15
- get type() {
16
- return "dll entry";
17
- }
18
- }
19
-
20
- module.exports = DllEntryDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const Dependency = require("../Dependency");
7
+
8
+ class DllEntryDependency extends Dependency {
9
+ constructor(dependencies, name) {
10
+ super();
11
+ this.dependencies = dependencies;
12
+ this.name = name;
13
+ }
14
+
15
+ get type() {
16
+ return "dll entry";
17
+ }
18
+ }
19
+
20
+ module.exports = DllEntryDependency;
@@ -1,30 +1,30 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const NullDependency = require("./NullDependency");
7
-
8
- class HarmonyCompatibilityDependency extends NullDependency {
9
- constructor(originModule) {
10
- super();
11
- this.originModule = originModule;
12
- }
13
-
14
- get type() {
15
- return "harmony export header";
16
- }
17
- }
18
-
19
- HarmonyCompatibilityDependency.Template = class HarmonyExportDependencyTemplate {
20
- apply(dep, source) {
21
- const usedExports = dep.originModule.usedExports;
22
- if(usedExports && !Array.isArray(usedExports)) {
23
- const exportName = dep.originModule.exportsArgument || "exports";
24
- const content = `Object.defineProperty(${exportName}, "__esModule", { value: true });\n`;
25
- source.insert(-10, content);
26
- }
27
- }
28
- };
29
-
30
- module.exports = HarmonyCompatibilityDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const NullDependency = require("./NullDependency");
7
+
8
+ class HarmonyCompatibilityDependency extends NullDependency {
9
+ constructor(originModule) {
10
+ super();
11
+ this.originModule = originModule;
12
+ }
13
+
14
+ get type() {
15
+ return "harmony export header";
16
+ }
17
+ }
18
+
19
+ HarmonyCompatibilityDependency.Template = class HarmonyExportDependencyTemplate {
20
+ apply(dep, source) {
21
+ const usedExports = dep.originModule.usedExports;
22
+ if(usedExports && !Array.isArray(usedExports)) {
23
+ const exportName = dep.originModule.exportsArgument || "exports";
24
+ const content = `Object.defineProperty(${exportName}, "__esModule", { value: true });\n`;
25
+ source.insert(-10, content);
26
+ }
27
+ }
28
+ };
29
+
30
+ module.exports = HarmonyCompatibilityDependency;
@@ -39,9 +39,11 @@ module.exports = class HarmonyExportDependencyParserPlugin {
39
39
  parser.plugin("export specifier", (statement, id, name, idx) => {
40
40
  const rename = parser.scope.renames[`$${id}`];
41
41
  let dep;
42
+ const harmonyNamedExports = parser.state.harmonyNamedExports = parser.state.harmonyNamedExports || new Set();
43
+ harmonyNamedExports.add(name);
42
44
  if(rename === "imported var") {
43
45
  const settings = parser.state.harmonySpecifier[`$${id}`];
44
- dep = new HarmonyExportImportedSpecifierDependency(parser.state.module, settings[0], settings[1], settings[2], name);
46
+ dep = new HarmonyExportImportedSpecifierDependency(parser.state.module, settings[0], settings[1], settings[2], name, harmonyNamedExports, null);
45
47
  } else {
46
48
  const immutable = statement.declaration && isImmutableStatement(statement.declaration);
47
49
  const hoisted = statement.declaration && isHoistedStatement(statement.declaration);
@@ -53,7 +55,17 @@ module.exports = class HarmonyExportDependencyParserPlugin {
53
55
  return true;
54
56
  });
55
57
  parser.plugin("export import specifier", (statement, source, id, name, idx) => {
56
- const dep = new HarmonyExportImportedSpecifierDependency(parser.state.module, parser.state.lastHarmonyImport, HarmonyModulesHelpers.getModuleVar(parser.state, source), id, name);
58
+ const harmonyNamedExports = parser.state.harmonyNamedExports = parser.state.harmonyNamedExports || new Set();
59
+ let harmonyStarExports = null;
60
+ if(name) {
61
+ harmonyNamedExports.add(name);
62
+ } else {
63
+ harmonyStarExports = parser.state.harmonyStarExports = parser.state.harmonyStarExports || [];
64
+ }
65
+ const dep = new HarmonyExportImportedSpecifierDependency(parser.state.module, parser.state.lastHarmonyImport, HarmonyModulesHelpers.getModuleVar(parser.state, source), id, name, harmonyNamedExports, harmonyStarExports && harmonyStarExports.slice());
66
+ if(harmonyStarExports) {
67
+ harmonyStarExports.push(dep);
68
+ }
57
69
  dep.loc = Object.create(statement.loc);
58
70
  dep.loc.index = idx;
59
71
  parser.state.current.addDependency(dep);
@@ -22,13 +22,6 @@ class HarmonyExportExpressionDependency extends NullDependency {
22
22
  exports: ["default"]
23
23
  };
24
24
  }
25
-
26
- describeHarmonyExport() {
27
- return {
28
- exportedName: "default",
29
- precedence: 1,
30
- };
31
- }
32
25
  }
33
26
 
34
27
  HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTemplate {
@@ -1,28 +1,28 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const NullDependency = require("./NullDependency");
7
-
8
- class HarmonyExportHeaderDependency extends NullDependency {
9
- constructor(range, rangeStatement) {
10
- super();
11
- this.range = range;
12
- this.rangeStatement = rangeStatement;
13
- }
14
-
15
- get type() {
16
- return "harmony export header";
17
- }
18
- }
19
-
20
- HarmonyExportHeaderDependency.Template = class HarmonyExportDependencyTemplate {
21
- apply(dep, source) {
22
- const content = "";
23
- const replaceUntil = dep.range ? dep.range[0] - 1 : dep.rangeStatement[1] - 1;
24
- source.replace(dep.rangeStatement[0], replaceUntil, content);
25
- }
26
- };
27
-
28
- module.exports = HarmonyExportHeaderDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const NullDependency = require("./NullDependency");
7
+
8
+ class HarmonyExportHeaderDependency extends NullDependency {
9
+ constructor(range, rangeStatement) {
10
+ super();
11
+ this.range = range;
12
+ this.rangeStatement = rangeStatement;
13
+ }
14
+
15
+ get type() {
16
+ return "harmony export header";
17
+ }
18
+ }
19
+
20
+ HarmonyExportHeaderDependency.Template = class HarmonyExportDependencyTemplate {
21
+ apply(dep, source) {
22
+ const content = "";
23
+ const replaceUntil = dep.range ? dep.range[0] - 1 : dep.rangeStatement[1] - 1;
24
+ source.replace(dep.rangeStatement[0], replaceUntil, content);
25
+ }
26
+ };
27
+
28
+ module.exports = HarmonyExportHeaderDependency;
@@ -4,16 +4,17 @@
4
4
  */
5
5
  "use strict";
6
6
  const NullDependency = require("./NullDependency");
7
- const HarmonyModulesHelpers = require("./HarmonyModulesHelpers");
8
7
 
9
8
  class HarmonyExportImportedSpecifierDependency extends NullDependency {
10
- constructor(originModule, importDependency, importedVar, id, name) {
9
+ constructor(originModule, importDependency, importedVar, id, name, activeExports, otherStarExports) {
11
10
  super();
12
11
  this.originModule = originModule;
13
12
  this.importDependency = importDependency;
14
13
  this.importedVar = importedVar;
15
14
  this.id = id;
16
15
  this.name = name;
16
+ this.activeExports = activeExports;
17
+ this.otherStarExports = otherStarExports;
17
18
  }
18
19
 
19
20
  get type() {
@@ -23,10 +24,9 @@ class HarmonyExportImportedSpecifierDependency extends NullDependency {
23
24
  getReference() {
24
25
  const name = this.name;
25
26
  const used = this.originModule.isUsed(name);
26
- const active = HarmonyModulesHelpers.isActive(this.originModule, this);
27
27
  const importedModule = this.importDependency.module;
28
28
 
29
- if(!importedModule || !used || !active || !this.originModule.usedExports) return null;
29
+ if(!importedModule || !used || !this.originModule.usedExports) return null;
30
30
 
31
31
  const hasUsedExports = Array.isArray(this.originModule.usedExports);
32
32
 
@@ -50,21 +50,18 @@ class HarmonyExportImportedSpecifierDependency extends NullDependency {
50
50
  }
51
51
 
52
52
  const hasProvidedExports = Array.isArray(importedModule.providedExports);
53
+ const activeFromOtherStarExports = this._discoverActiveExportsFromOtherStartExports();
53
54
 
54
55
  // export *
55
56
  if(hasUsedExports) {
56
57
  // reexport * with known used exports
57
- const activeExports = HarmonyModulesHelpers.getActiveExports(this.originModule, this);
58
58
  const importedNames = this.originModule.usedExports.filter(id => {
59
- const notInActiveExports = activeExports.indexOf(id) < 0;
60
- const notDefault = id !== "default";
61
-
62
- if(hasProvidedExports) {
63
- const inProvidedExports = importedModule.providedExports.indexOf(id) >= 0;
64
- return notInActiveExports && notDefault && inProvidedExports;
65
- } else {
66
- return notInActiveExports && notDefault;
67
- }
59
+ if(id === "default") return false;
60
+ if(this.activeExports.has(id)) return false;
61
+ if(activeFromOtherStarExports.has(id)) return false;
62
+ if(hasProvidedExports && importedModule.providedExports.indexOf(id) < 0) return false;
63
+
64
+ return true;
68
65
  });
69
66
 
70
67
  return {
@@ -76,7 +73,13 @@ class HarmonyExportImportedSpecifierDependency extends NullDependency {
76
73
  if(hasProvidedExports) {
77
74
  return {
78
75
  module: importedModule,
79
- importedNames: importedModule.providedExports.filter(id => id !== "default"),
76
+ importedNames: importedModule.providedExports.filter(id => {
77
+ if(id === "default") return false;
78
+ if(this.activeExports.has(id)) return false;
79
+ if(activeFromOtherStarExports.has(id)) return false;
80
+
81
+ return true;
82
+ })
80
83
  };
81
84
  }
82
85
 
@@ -86,6 +89,21 @@ class HarmonyExportImportedSpecifierDependency extends NullDependency {
86
89
  };
87
90
  }
88
91
 
92
+ _discoverActiveExportsFromOtherStartExports() {
93
+ if(!this.otherStarExports)
94
+ return new Set();
95
+ const result = new Set();
96
+ // try to learn impossible exports from other star exports with provided exports
97
+ for(const otherStarExport of this.otherStarExports) {
98
+ const otherImportedModule = otherStarExport.importDependency.module;
99
+ if(otherImportedModule && Array.isArray(otherImportedModule.providedExports)) {
100
+ for(const exportName of otherImportedModule.providedExports)
101
+ result.add(exportName);
102
+ }
103
+ }
104
+ return result;
105
+ }
106
+
89
107
  getExports() {
90
108
  if(this.name) {
91
109
  return {
@@ -121,22 +139,6 @@ class HarmonyExportImportedSpecifierDependency extends NullDependency {
121
139
  };
122
140
  }
123
141
 
124
- describeHarmonyExport() {
125
- const importedModule = this.importDependency.module;
126
- if(!this.name && importedModule && Array.isArray(importedModule.providedExports)) {
127
- // for a star export and when we know which exports are provided, we can tell so
128
- return {
129
- exportedName: importedModule.providedExports,
130
- precedence: 3
131
- };
132
- }
133
-
134
- return {
135
- exportedName: this.name,
136
- precedence: this.name ? 2 : 3
137
- };
138
- }
139
-
140
142
  updateHash(hash) {
141
143
  super.updateHash(hash);
142
144
  const hashValue = this.getHashValue(this.importDependency.module);
@@ -166,7 +168,6 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
166
168
  const name = dep.importedVar;
167
169
  const used = dep.originModule.isUsed(dep.name);
168
170
  const importedModule = dep.importDependency.module;
169
- const active = HarmonyModulesHelpers.isActive(dep.originModule, dep);
170
171
  const importsExportsUnknown = !importedModule || !Array.isArray(importedModule.providedExports);
171
172
 
172
173
  const getReexportStatement = this.reexportStatementCreator(dep.originModule, importsExportsUnknown, name);
@@ -176,11 +177,6 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
176
177
  return "/* unused harmony reexport " + dep.name + " */\n";
177
178
  }
178
179
 
179
- // we want to reexport something but another exports overrides this one
180
- if(!active) {
181
- return "/* inactive harmony reexport " + (dep.name || "namespace") + " */\n";
182
- }
183
-
184
180
  // we want to reexport the default export from a non-hamory module
185
181
  const isNotAHarmonyModule = !(importedModule && (!importedModule.meta || importedModule.meta.harmonyModule));
186
182
  if(dep.name && dep.id === "default" && isNotAHarmonyModule) {
@@ -198,13 +194,17 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
198
194
  return "/* harmony reexport (module object) */ " + getReexportStatement(JSON.stringify(used), "");
199
195
  }
200
196
 
197
+ const hasProvidedExports = importedModule && Array.isArray(importedModule.providedExports);
198
+
199
+ const activeFromOtherStarExports = dep._discoverActiveExportsFromOtherStartExports();
200
+
201
201
  // we know which exports are used
202
202
  if(Array.isArray(dep.originModule.usedExports)) {
203
- const activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule, dep);
204
- const items = dep.originModule.usedExports.map(function(id) {
203
+ const items = dep.originModule.usedExports.map(id => {
205
204
  if(id === "default") return;
206
- if(activeExports.indexOf(id) >= 0) return;
205
+ if(dep.activeExports.has(id)) return;
207
206
  if(importedModule.isProvided(id) === false) return;
207
+ if(activeFromOtherStarExports.has(id)) return;
208
208
  var exportUsed = dep.originModule.isUsed(id);
209
209
  var idUsed = importedModule && importedModule.isUsed(id);
210
210
  return [exportUsed, idUsed];
@@ -220,11 +220,11 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
220
220
  }
221
221
 
222
222
  // not sure which exports are used, but we know which are provided
223
- if(dep.originModule.usedExports && importedModule && Array.isArray(importedModule.providedExports)) {
224
- const activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule, dep);
225
- const items = importedModule.providedExports.map(function(id) {
223
+ if(dep.originModule.usedExports && importedModule && hasProvidedExports) {
224
+ const items = importedModule.providedExports.map(id => {
226
225
  if(id === "default") return;
227
- if(activeExports.indexOf(id) >= 0) return;
226
+ if(dep.activeExports.has(id)) return;
227
+ if(activeFromOtherStarExports.has(id)) return;
228
228
  var exportUsed = dep.originModule.isUsed(id);
229
229
  var idUsed = importedModule && importedModule.isUsed(id);
230
230
  return [exportUsed, idUsed];
@@ -241,7 +241,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
241
241
 
242
242
  // not sure which exports are used and provided
243
243
  if(dep.originModule.usedExports) {
244
- const activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule, dep);
244
+ const activeExports = Array.from(dep.activeExports).concat(Array.from(activeFromOtherStarExports));
245
245
  let content = "/* harmony namespace reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in " + name + ") ";
246
246
 
247
247
  // Filter out exports which are defined by other exports
@@ -4,7 +4,6 @@
4
4
  */
5
5
  "use strict";
6
6
  const NullDependency = require("./NullDependency");
7
- const HarmonyModulesHelpers = require("./HarmonyModulesHelpers");
8
7
 
9
8
  class HarmonyExportSpecifierDependency extends NullDependency {
10
9
  constructor(originModule, id, name, position, immutable) {
@@ -25,13 +24,6 @@ class HarmonyExportSpecifierDependency extends NullDependency {
25
24
  exports: [this.name]
26
25
  };
27
26
  }
28
-
29
- describeHarmonyExport() {
30
- return {
31
- exportedName: this.name,
32
- precedence: 1
33
- };
34
- }
35
27
  }
36
28
 
37
29
  HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependencyTemplate {
@@ -46,15 +38,10 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
46
38
 
47
39
  getContent(dep) {
48
40
  const used = dep.originModule.isUsed(dep.name);
49
- const active = HarmonyModulesHelpers.isActive(dep.originModule, dep);
50
41
  if(!used) {
51
42
  return `/* unused harmony export ${(dep.name || "namespace")} */\n`;
52
43
  }
53
44
 
54
- if(!active) {
55
- return `/* inactive harmony export ${(dep.name || "namespace")} */\n`;
56
- }
57
-
58
45
  const exportsName = dep.originModule.exportsArgument || "exports";
59
46
  if(dep.immutable) {
60
47
  return `/* harmony export (immutable) */ ${exportsName}[${JSON.stringify(used)}] = ${dep.id};\n`;
@@ -27,59 +27,6 @@ class HarmonyModulesHelpers {
27
27
  return null;
28
28
  return this.getModuleVar(state, request);
29
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
30
  }
84
31
 
85
32
  module.exports = HarmonyModulesHelpers;
@@ -4,7 +4,6 @@
4
4
  */
5
5
  "use strict";
6
6
  const ContextDependency = require("./ContextDependency");
7
- const CriticalDependencyWarning = require("./CriticalDependencyWarning");
8
7
  const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
9
8
 
10
9
  class ImportContextDependency extends ContextDependency {
@@ -19,15 +18,6 @@ class ImportContextDependency extends ContextDependency {
19
18
  return "import() context";
20
19
  }
21
20
 
22
- getWarnings() {
23
- if(!this.critical) {
24
- return;
25
- }
26
-
27
- return [
28
- new CriticalDependencyWarning(this.critical)
29
- ];
30
- }
31
21
  }
32
22
 
33
23
  ImportContextDependency.Template = ContextDependencyTemplateAsRequireCall;
@@ -1,17 +1,17 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
7
- const ImportDependency = require("./ImportDependency");
8
-
9
- module.exports = class ImportDependenciesBlock extends AsyncDependenciesBlock {
10
- constructor(request, range, chunkName, module, loc) {
11
- super(chunkName, module, loc);
12
- this.range = range;
13
- const dep = new ImportDependency(request, this);
14
- dep.loc = loc;
15
- this.addDependency(dep);
16
- }
17
- };
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
7
+ const ImportDependency = require("./ImportDependency");
8
+
9
+ module.exports = class ImportDependenciesBlock extends AsyncDependenciesBlock {
10
+ constructor(request, range, chunkName, module, loc) {
11
+ super(chunkName, module, loc);
12
+ this.range = range;
13
+ const dep = new ImportDependency(request, this);
14
+ dep.loc = loc;
15
+ this.addDependency(dep);
16
+ }
17
+ };
@@ -1,22 +1,22 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const ImportContextDependency = require("./ImportContextDependency");
7
- const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
8
-
9
- class ImportEagerContextDependency extends ImportContextDependency {
10
- constructor(request, recursive, regExp, range, valueRange, chunkName) {
11
- super(request, recursive, regExp, range, valueRange, chunkName);
12
- this.async = "eager";
13
- }
14
-
15
- get type() {
16
- return "import() context eager";
17
- }
18
- }
19
-
20
- ImportEagerContextDependency.Template = ContextDependencyTemplateAsRequireCall;
21
-
22
- module.exports = ImportEagerContextDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const ImportContextDependency = require("./ImportContextDependency");
7
+ const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
8
+
9
+ class ImportEagerContextDependency extends ImportContextDependency {
10
+ constructor(request, recursive, regExp, range, valueRange, chunkName) {
11
+ super(request, recursive, regExp, range, valueRange, chunkName);
12
+ this.async = "eager";
13
+ }
14
+
15
+ get type() {
16
+ return "import() context eager";
17
+ }
18
+ }
19
+
20
+ ImportEagerContextDependency.Template = ContextDependencyTemplateAsRequireCall;
21
+
22
+ module.exports = ImportEagerContextDependency;
@@ -1,22 +1,22 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const ImportContextDependency = require("./ImportContextDependency");
7
- const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
8
-
9
- class ImportLazyContextDependency extends ImportContextDependency {
10
- constructor(request, recursive, regExp, range, valueRange, chunkName) {
11
- super(request, recursive, regExp, range, valueRange, chunkName);
12
- this.async = "lazy";
13
- }
14
-
15
- get type() {
16
- return "import() context lazy";
17
- }
18
- }
19
-
20
- ImportLazyContextDependency.Template = ContextDependencyTemplateAsRequireCall;
21
-
22
- module.exports = ImportLazyContextDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const ImportContextDependency = require("./ImportContextDependency");
7
+ const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
8
+
9
+ class ImportLazyContextDependency extends ImportContextDependency {
10
+ constructor(request, recursive, regExp, range, valueRange, chunkName) {
11
+ super(request, recursive, regExp, range, valueRange, chunkName);
12
+ this.async = "lazy";
13
+ }
14
+
15
+ get type() {
16
+ return "import() context lazy";
17
+ }
18
+ }
19
+
20
+ ImportLazyContextDependency.Template = ContextDependencyTemplateAsRequireCall;
21
+
22
+ module.exports = ImportLazyContextDependency;