webpack 4.14.0 → 4.16.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 (111) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +5 -2
  3. package/bin/webpack.js +7 -2
  4. package/buildin/amd-define.js +3 -3
  5. package/buildin/amd-options.js +2 -2
  6. package/buildin/system.js +7 -7
  7. package/hot/dev-server.js +2 -2
  8. package/hot/emitter.js +2 -2
  9. package/hot/only-dev-server.js +2 -2
  10. package/hot/poll.js +5 -2
  11. package/hot/signal.js +2 -2
  12. package/lib/AsyncDependenciesBlock.js +44 -0
  13. package/lib/AutomaticPrefetchPlugin.js +2 -2
  14. package/lib/Chunk.js +56 -6
  15. package/lib/ChunkGroup.js +2 -2
  16. package/lib/ChunkTemplate.js +14 -2
  17. package/lib/CommentCompilationWarning.js +3 -3
  18. package/lib/CompatibilityPlugin.js +1 -1
  19. package/lib/Compilation.js +442 -37
  20. package/lib/Compiler.js +57 -4
  21. package/lib/ContextModule.js +23 -16
  22. package/lib/DefinePlugin.js +49 -0
  23. package/lib/DelegatedModule.js +9 -1
  24. package/lib/DelegatedModuleFactoryPlugin.js +7 -1
  25. package/lib/DependenciesBlock.js +36 -3
  26. package/lib/DependenciesBlockVariable.js +22 -0
  27. package/lib/Dependency.js +33 -6
  28. package/lib/DllEntryPlugin.js +4 -1
  29. package/lib/DynamicEntryPlugin.js +21 -1
  30. package/lib/EntryOptionPlugin.js +12 -0
  31. package/lib/Entrypoint.js +1 -1
  32. package/lib/EnvironmentPlugin.js +8 -1
  33. package/lib/ExtendedAPIPlugin.js +8 -4
  34. package/lib/ExternalModuleFactoryPlugin.js +1 -1
  35. package/lib/Generator.js +1 -1
  36. package/lib/GraphHelpers.js +2 -1
  37. package/lib/HotModuleReplacement.runtime.js +8 -5
  38. package/lib/HotModuleReplacementPlugin.js +115 -117
  39. package/lib/IgnorePlugin.js +1 -1
  40. package/lib/MainTemplate.js +19 -4
  41. package/lib/MemoryOutputFileSystem.js +5 -5
  42. package/lib/Module.js +9 -3
  43. package/lib/ModuleReason.js +8 -0
  44. package/lib/MultiEntryPlugin.js +25 -3
  45. package/lib/NormalModule.js +5 -23
  46. package/lib/NullFactory.js +12 -12
  47. package/lib/OptionsApply.js +10 -10
  48. package/lib/RuleSet.js +3 -3
  49. package/lib/SingleEntryPlugin.js +20 -1
  50. package/lib/Stats.js +12 -5
  51. package/lib/Template.js +4 -1
  52. package/lib/UmdMainTemplatePlugin.js +12 -12
  53. package/lib/UseStrictPlugin.js +1 -1
  54. package/lib/WebpackError.js +4 -0
  55. package/lib/WebpackOptionsApply.js +92 -10
  56. package/lib/WebpackOptionsDefaulter.js +23 -6
  57. package/lib/WebpackOptionsValidationError.js +0 -1
  58. package/lib/compareLocations.js +13 -17
  59. package/lib/debug/ProfilingPlugin.js +5 -7
  60. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +4 -6
  61. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +0 -2
  62. package/lib/dependencies/AMDRequireItemDependency.js +22 -22
  63. package/lib/dependencies/CommonJsRequireDependency.js +22 -22
  64. package/lib/dependencies/CriticalDependencyWarning.js +20 -20
  65. package/lib/dependencies/DelegatedSourceDependency.js +18 -18
  66. package/lib/dependencies/DllEntryDependency.js +20 -20
  67. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +2 -1
  68. package/lib/dependencies/LoaderDependency.js +3 -0
  69. package/lib/dependencies/LoaderPlugin.js +21 -2
  70. package/lib/dependencies/LocalModule.js +23 -23
  71. package/lib/dependencies/ModuleDependency.js +3 -0
  72. package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
  73. package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
  74. package/lib/dependencies/MultiEntryDependency.js +5 -0
  75. package/lib/dependencies/PrefetchDependency.js +18 -18
  76. package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
  77. package/lib/dependencies/RequireResolveDependency.js +22 -22
  78. package/lib/dependencies/SingleEntryDependency.js +3 -0
  79. package/lib/dependencies/SystemPlugin.js +1 -1
  80. package/lib/formatLocation.js +55 -41
  81. package/lib/node/NodeMainTemplateAsync.runtime.js +1 -1
  82. package/lib/node/NodeMainTemplatePlugin.js +2 -2
  83. package/lib/node/NodeOutputFileSystem.js +22 -22
  84. package/lib/node/NodeSourcePlugin.js +1 -1
  85. package/lib/optimize/ConcatenatedModule.js +1 -0
  86. package/lib/optimize/NaturalChunkOrderPlugin.js +41 -0
  87. package/lib/optimize/OccurrenceChunkOrderPlugin.js +61 -0
  88. package/lib/optimize/OccurrenceModuleOrderPlugin.js +103 -0
  89. package/lib/optimize/OccurrenceOrderPlugin.js +4 -2
  90. package/lib/optimize/SplitChunksPlugin.js +168 -18
  91. package/lib/util/Semaphore.js +12 -0
  92. package/lib/util/SetHelpers.js +4 -4
  93. package/lib/util/SortableSet.js +1 -1
  94. package/lib/util/cachedMerge.js +1 -1
  95. package/lib/util/createHash.js +15 -0
  96. package/lib/util/deterministicGrouping.js +251 -0
  97. package/lib/util/identifier.js +27 -0
  98. package/lib/wasm/WasmFinalizeExportsPlugin.js +1 -1
  99. package/lib/wasm/WasmMainTemplatePlugin.js +10 -4
  100. package/lib/wasm/WebAssemblyGenerator.js +12 -12
  101. package/lib/wasm/WebAssemblyInInitialChunkError.js +88 -0
  102. package/lib/wasm/WebAssemblyModulesPlugin.js +28 -0
  103. package/lib/web/JsonpMainTemplatePlugin.js +1 -1
  104. package/lib/web/WebEnvironmentPlugin.js +18 -18
  105. package/lib/webpack.js +4 -0
  106. package/lib/webpack.web.js +2 -2
  107. package/lib/webworker/WebWorkerMainTemplatePlugin.js +1 -1
  108. package/package.json +27 -17
  109. package/schemas/WebpackOptions.json +71 -9
  110. package/schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json +10 -0
  111. package/schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json +10 -0
@@ -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 ModuleDependency = require("./ModuleDependency");
7
- const ModuleDependencyTemplateAsId = require("./ModuleDependencyTemplateAsId");
8
-
9
- class CommonJsRequireDependency extends ModuleDependency {
10
- constructor(request, range) {
11
- super(request);
12
- this.range = range;
13
- }
14
-
15
- get type() {
16
- return "cjs require";
17
- }
18
- }
19
-
20
- CommonJsRequireDependency.Template = ModuleDependencyTemplateAsId;
21
-
22
- module.exports = CommonJsRequireDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const ModuleDependency = require("./ModuleDependency");
7
+ const ModuleDependencyTemplateAsId = require("./ModuleDependencyTemplateAsId");
8
+
9
+ class CommonJsRequireDependency extends ModuleDependency {
10
+ constructor(request, range) {
11
+ super(request);
12
+ this.range = range;
13
+ }
14
+
15
+ get type() {
16
+ return "cjs require";
17
+ }
18
+ }
19
+
20
+ CommonJsRequireDependency.Template = ModuleDependencyTemplateAsId;
21
+
22
+ module.exports = CommonJsRequireDependency;
@@ -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
-
7
- const WebpackError = require("../WebpackError");
8
-
9
- class CriticalDependencyWarning extends WebpackError {
10
- constructor(message) {
11
- super();
12
-
13
- this.name = "CriticalDependencyWarning";
14
- this.message = "Critical dependency: " + message;
15
-
16
- Error.captureStackTrace(this, this.constructor);
17
- }
18
- }
19
-
20
- module.exports = CriticalDependencyWarning;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ const WebpackError = require("../WebpackError");
8
+
9
+ class CriticalDependencyWarning extends WebpackError {
10
+ constructor(message) {
11
+ super();
12
+
13
+ this.name = "CriticalDependencyWarning";
14
+ this.message = "Critical dependency: " + message;
15
+
16
+ Error.captureStackTrace(this, this.constructor);
17
+ }
18
+ }
19
+
20
+ module.exports = CriticalDependencyWarning;
@@ -1,18 +1,18 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const ModuleDependency = require("./ModuleDependency");
7
-
8
- class DelegatedSourceDependency extends ModuleDependency {
9
- constructor(request) {
10
- super(request);
11
- }
12
-
13
- get type() {
14
- return "delegated source";
15
- }
16
- }
17
-
18
- module.exports = DelegatedSourceDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const ModuleDependency = require("./ModuleDependency");
7
+
8
+ class DelegatedSourceDependency extends ModuleDependency {
9
+ constructor(request) {
10
+ super(request);
11
+ }
12
+
13
+ get type() {
14
+ return "delegated source";
15
+ }
16
+ }
17
+
18
+ module.exports = DelegatedSourceDependency;
@@ -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;
@@ -244,7 +244,8 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
244
244
  return new DependencyReference(
245
245
  mode.module,
246
246
  Array.from(mode.map.values()),
247
- false
247
+ false,
248
+ this.sourceOrder
248
249
  );
249
250
 
250
251
  case "dynamic-reexport":
@@ -6,6 +6,9 @@
6
6
  const ModuleDependency = require("./ModuleDependency");
7
7
 
8
8
  class LoaderDependency extends ModuleDependency {
9
+ /**
10
+ * @param {string} request request string
11
+ */
9
12
  constructor(request) {
10
13
  super(request);
11
14
  }
@@ -5,6 +5,17 @@
5
5
  "use strict";
6
6
 
7
7
  const LoaderDependency = require("./LoaderDependency");
8
+ const NormalModule = require("../NormalModule");
9
+
10
+ /** @typedef {import("../Module")} Module */
11
+
12
+ /**
13
+ * @callback LoadModuleCallback
14
+ * @param {Error=} err error object
15
+ * @param {string=} source source code
16
+ * @param {object=} map source map
17
+ * @param {Module=} module loaded module if successful
18
+ */
8
19
 
9
20
  class LoaderPlugin {
10
21
  apply(compiler) {
@@ -22,9 +33,16 @@ class LoaderPlugin {
22
33
  compilation.hooks.normalModuleLoader.tap(
23
34
  "LoaderPlugin",
24
35
  (loaderContext, module) => {
36
+ /**
37
+ * @param {string} request the request string to load the module from
38
+ * @param {LoadModuleCallback} callback callback returning the loaded module or error
39
+ * @returns {void}
40
+ */
25
41
  loaderContext.loadModule = (request, callback) => {
26
42
  const dep = new LoaderDependency(request);
27
- dep.loc = request;
43
+ dep.loc = {
44
+ name: request
45
+ };
28
46
  const factory = compilation.dependencyFactories.get(
29
47
  dep.constructor
30
48
  );
@@ -57,7 +75,8 @@ class LoaderPlugin {
57
75
  if (!dep.module) {
58
76
  return callback(new Error("Cannot load the module"));
59
77
  }
60
- if (dep.module.error) {
78
+ // TODO consider removing this in webpack 5
79
+ if (dep.module instanceof NormalModule && dep.module.error) {
61
80
  return callback(dep.module.error);
62
81
  }
63
82
  if (!dep.module._source) {
@@ -1,23 +1,23 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
-
7
- class LocalModule {
8
- constructor(module, name, idx) {
9
- this.module = module;
10
- this.name = name;
11
- this.idx = idx;
12
- this.used = false;
13
- }
14
-
15
- flagUsed() {
16
- this.used = true;
17
- }
18
-
19
- variableName() {
20
- return "__WEBPACK_LOCAL_MODULE_" + this.idx + "__";
21
- }
22
- }
23
- module.exports = LocalModule;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+
7
+ class LocalModule {
8
+ constructor(module, name, idx) {
9
+ this.module = module;
10
+ this.name = name;
11
+ this.idx = idx;
12
+ this.used = false;
13
+ }
14
+
15
+ flagUsed() {
16
+ this.used = true;
17
+ }
18
+
19
+ variableName() {
20
+ return "__WEBPACK_LOCAL_MODULE_" + this.idx + "__";
21
+ }
22
+ }
23
+ module.exports = LocalModule;
@@ -6,6 +6,9 @@
6
6
  const Dependency = require("../Dependency");
7
7
 
8
8
  class ModuleDependency extends Dependency {
9
+ /**
10
+ * @param {string} request request path which needs resolving
11
+ */
9
12
  constructor(request) {
10
13
  super();
11
14
  this.request = request;
@@ -1,23 +1,23 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const ModuleDependency = require("./ModuleDependency");
7
- const ModuleDependencyTemplateAsId = require("./ModuleDependencyTemplateAsId");
8
-
9
- class ModuleHotAcceptDependency extends ModuleDependency {
10
- constructor(request, range) {
11
- super(request);
12
- this.range = range;
13
- this.weak = true;
14
- }
15
-
16
- get type() {
17
- return "module.hot.accept";
18
- }
19
- }
20
-
21
- ModuleHotAcceptDependency.Template = ModuleDependencyTemplateAsId;
22
-
23
- module.exports = ModuleHotAcceptDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const ModuleDependency = require("./ModuleDependency");
7
+ const ModuleDependencyTemplateAsId = require("./ModuleDependencyTemplateAsId");
8
+
9
+ class ModuleHotAcceptDependency extends ModuleDependency {
10
+ constructor(request, range) {
11
+ super(request);
12
+ this.range = range;
13
+ this.weak = true;
14
+ }
15
+
16
+ get type() {
17
+ return "module.hot.accept";
18
+ }
19
+ }
20
+
21
+ ModuleHotAcceptDependency.Template = ModuleDependencyTemplateAsId;
22
+
23
+ module.exports = ModuleHotAcceptDependency;
@@ -1,23 +1,23 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const ModuleDependency = require("./ModuleDependency");
7
- const ModuleDependencyTemplateAsId = require("./ModuleDependencyTemplateAsId");
8
-
9
- class ModuleHotDeclineDependency extends ModuleDependency {
10
- constructor(request, range) {
11
- super(request);
12
- this.range = range;
13
- this.weak = true;
14
- }
15
-
16
- get type() {
17
- return "module.hot.decline";
18
- }
19
- }
20
-
21
- ModuleHotDeclineDependency.Template = ModuleDependencyTemplateAsId;
22
-
23
- module.exports = ModuleHotDeclineDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const ModuleDependency = require("./ModuleDependency");
7
+ const ModuleDependencyTemplateAsId = require("./ModuleDependencyTemplateAsId");
8
+
9
+ class ModuleHotDeclineDependency extends ModuleDependency {
10
+ constructor(request, range) {
11
+ super(request);
12
+ this.range = range;
13
+ this.weak = true;
14
+ }
15
+
16
+ get type() {
17
+ return "module.hot.decline";
18
+ }
19
+ }
20
+
21
+ ModuleHotDeclineDependency.Template = ModuleDependencyTemplateAsId;
22
+
23
+ module.exports = ModuleHotDeclineDependency;
@@ -3,9 +3,14 @@
3
3
  Author Tobias Koppers @sokra
4
4
  */
5
5
  "use strict";
6
+ /** @typedef {import("./SingleEntryDependency")} SingleEntryDependency */
6
7
  const Dependency = require("../Dependency");
7
8
 
8
9
  class MultiEntryDependency extends Dependency {
10
+ /**
11
+ * @param {SingleEntryDependency[]} dependencies an array of SingleEntryDependencies
12
+ * @param {string} name entry name
13
+ */
9
14
  constructor(dependencies, name) {
10
15
  super();
11
16
  this.dependencies = dependencies;
@@ -1,18 +1,18 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const ModuleDependency = require("./ModuleDependency");
7
-
8
- class PrefetchDependency extends ModuleDependency {
9
- constructor(request) {
10
- super(request);
11
- }
12
-
13
- get type() {
14
- return "prefetch";
15
- }
16
- }
17
-
18
- module.exports = PrefetchDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const ModuleDependency = require("./ModuleDependency");
7
+
8
+ class PrefetchDependency extends ModuleDependency {
9
+ constructor(request) {
10
+ super(request);
11
+ }
12
+
13
+ get type() {
14
+ return "prefetch";
15
+ }
16
+ }
17
+
18
+ module.exports = PrefetchDependency;
@@ -1,21 +1,21 @@
1
- /*
2
- MIT License http://www.opensource.org/licenses/mit-license.php
3
- Author Tobias Koppers @sokra
4
- */
5
- "use strict";
6
- const ModuleDependency = require("./ModuleDependency");
7
- const NullDependency = require("./NullDependency");
8
-
9
- class RequireEnsureItemDependency extends ModuleDependency {
10
- constructor(request) {
11
- super(request);
12
- }
13
-
14
- get type() {
15
- return "require.ensure item";
16
- }
17
- }
18
-
19
- RequireEnsureItemDependency.Template = NullDependency.Template;
20
-
21
- module.exports = RequireEnsureItemDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const ModuleDependency = require("./ModuleDependency");
7
+ const NullDependency = require("./NullDependency");
8
+
9
+ class RequireEnsureItemDependency extends ModuleDependency {
10
+ constructor(request) {
11
+ super(request);
12
+ }
13
+
14
+ get type() {
15
+ return "require.ensure item";
16
+ }
17
+ }
18
+
19
+ RequireEnsureItemDependency.Template = NullDependency.Template;
20
+
21
+ module.exports = RequireEnsureItemDependency;
@@ -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 ModuleDependency = require("./ModuleDependency");
7
- const ModuleDependencyAsId = require("./ModuleDependencyTemplateAsId");
8
-
9
- class RequireResolveDependency extends ModuleDependency {
10
- constructor(request, range) {
11
- super(request);
12
- this.range = range;
13
- }
14
-
15
- get type() {
16
- return "require.resolve";
17
- }
18
- }
19
-
20
- RequireResolveDependency.Template = ModuleDependencyAsId;
21
-
22
- module.exports = RequireResolveDependency;
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+ "use strict";
6
+ const ModuleDependency = require("./ModuleDependency");
7
+ const ModuleDependencyAsId = require("./ModuleDependencyTemplateAsId");
8
+
9
+ class RequireResolveDependency extends ModuleDependency {
10
+ constructor(request, range) {
11
+ super(request);
12
+ this.range = range;
13
+ }
14
+
15
+ get type() {
16
+ return "require.resolve";
17
+ }
18
+ }
19
+
20
+ RequireResolveDependency.Template = ModuleDependencyAsId;
21
+
22
+ module.exports = RequireResolveDependency;
@@ -6,6 +6,9 @@
6
6
  const ModuleDependency = require("./ModuleDependency");
7
7
 
8
8
  class SingleEntryDependency extends ModuleDependency {
9
+ /**
10
+ * @param {string} request request path for entry
11
+ */
9
12
  constructor(request) {
10
13
  super(request);
11
14
  }
@@ -72,7 +72,7 @@ class SystemPlugin {
72
72
  parser.hooks.expression.for("System").tap("SystemPlugin", () => {
73
73
  const systemPolyfillRequire = ParserHelpers.requireFileAsExpression(
74
74
  parser.state.module.context,
75
- require.resolve("../../buildin/system.js")
75
+ require.resolve("../../buildin/system")
76
76
  );
77
77
  return ParserHelpers.addParsedVariableToModule(
78
78
  parser,
@@ -5,57 +5,71 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
9
+ /** @typedef {import("./Dependency").SourcePosition} SourcePosition */
10
+
11
+ // TODO webpack 5: pos must be SourcePosition
12
+ /**
13
+ * @param {SourcePosition|DependencyLocation|string} pos position
14
+ * @returns {string} formatted position
15
+ */
8
16
  const formatPosition = pos => {
9
17
  if (pos === null) return "";
10
- const typeOfPos = typeof pos;
11
- switch (typeOfPos) {
12
- case "string":
13
- return pos;
14
- case "number":
15
- return `${pos}`;
16
- case "object":
17
- if (typeof pos.line === "number" && typeof pos.column === "number") {
18
- return `${pos.line}:${pos.column}`;
19
- } else if (typeof pos.line === "number") {
20
- return `${pos.line}:?`;
21
- } else if (typeof pos.index === "number") {
22
- return `+${pos.index}`;
23
- } else {
24
- return "";
25
- }
26
- default:
18
+ // TODO webpack 5: Simplify this
19
+ if (typeof pos === "string") return pos;
20
+ if (typeof pos === "number") return `${pos}`;
21
+ if (typeof pos === "object") {
22
+ if ("line" in pos && "column" in pos) {
23
+ return `${pos.line}:${pos.column}`;
24
+ } else if ("line" in pos) {
25
+ return `${pos.line}:?`;
26
+ } else if ("index" in pos) {
27
+ // TODO webpack 5 remove this case
28
+ return `+${pos.index}`;
29
+ } else {
27
30
  return "";
31
+ }
28
32
  }
33
+ return "";
29
34
  };
30
35
 
36
+ // TODO webpack 5: loc must be DependencyLocation
37
+ /**
38
+ * @param {DependencyLocation|SourcePosition|string} loc location
39
+ * @returns {string} formatted location
40
+ */
31
41
  const formatLocation = loc => {
32
42
  if (loc === null) return "";
33
- const typeOfLoc = typeof loc;
34
- switch (typeOfLoc) {
35
- case "string":
36
- return loc;
37
- case "number":
38
- return `${loc}`;
39
- case "object":
40
- if (loc.start && loc.end) {
41
- if (
42
- typeof loc.start.line === "number" &&
43
- typeof loc.end.line === "number" &&
44
- typeof loc.end.column === "number" &&
45
- loc.start.line === loc.end.line
46
- ) {
47
- return `${formatPosition(loc.start)}-${loc.end.column}`;
48
- } else {
49
- return `${formatPosition(loc.start)}-${formatPosition(loc.end)}`;
50
- }
51
- }
52
- if (loc.start) {
53
- return formatPosition(loc.start);
43
+ // TODO webpack 5: Simplify this
44
+ if (typeof loc === "string") return loc;
45
+ if (typeof loc === "number") return `${loc}`;
46
+ if (typeof loc === "object") {
47
+ if ("start" in loc && loc.start && "end" in loc && loc.end) {
48
+ if (
49
+ typeof loc.start === "object" &&
50
+ typeof loc.start.line === "number" &&
51
+ typeof loc.end === "object" &&
52
+ typeof loc.end.line === "number" &&
53
+ typeof loc.end.column === "number" &&
54
+ loc.start.line === loc.end.line
55
+ ) {
56
+ return `${formatPosition(loc.start)}-${loc.end.column}`;
57
+ } else {
58
+ return `${formatPosition(loc.start)}-${formatPosition(loc.end)}`;
54
59
  }
55
- return formatPosition(loc);
56
- default:
57
- return "";
60
+ }
61
+ if ("start" in loc && loc.start) {
62
+ return formatPosition(loc.start);
63
+ }
64
+ if ("name" in loc && "index" in loc) {
65
+ return `${loc.name}[${loc.index}]`;
66
+ }
67
+ if ("name" in loc) {
68
+ return loc.name;
69
+ }
70
+ return formatPosition(loc);
58
71
  }
72
+ return "";
59
73
  };
60
74
 
61
75
  module.exports = formatLocation;