webpack 5.79.0 → 5.81.0

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.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (115) hide show
  1. package/README.md +3 -0
  2. package/lib/AsyncDependenciesBlock.js +8 -0
  3. package/lib/CodeGenerationResults.js +2 -2
  4. package/lib/Compilation.js +2 -2
  5. package/lib/ContextModule.js +8 -0
  6. package/lib/CssModule.js +137 -0
  7. package/lib/DefinePlugin.js +81 -44
  8. package/lib/DelegatedModule.js +5 -0
  9. package/lib/DependenciesBlock.js +8 -0
  10. package/lib/Dependency.js +8 -0
  11. package/lib/DllModule.js +8 -0
  12. package/lib/ExportsInfo.js +3 -0
  13. package/lib/ExternalModule.js +8 -0
  14. package/lib/FileSystemInfo.js +8 -0
  15. package/lib/LoaderOptionsPlugin.js +12 -2
  16. package/lib/Module.js +8 -0
  17. package/lib/ModuleBuildError.js +9 -0
  18. package/lib/ModuleError.js +9 -0
  19. package/lib/ModuleFilenameHelpers.js +113 -4
  20. package/lib/ModuleParseError.js +9 -0
  21. package/lib/ModuleTypeConstants.js +21 -0
  22. package/lib/ModuleWarning.js +9 -0
  23. package/lib/NormalModule.js +8 -0
  24. package/lib/NormalModuleFactory.js +26 -4
  25. package/lib/RawModule.js +8 -0
  26. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  27. package/lib/WebpackError.js +8 -0
  28. package/lib/asset/AssetGenerator.js +11 -3
  29. package/lib/asset/RawDataUrlModule.js +8 -0
  30. package/lib/cache/ResolverCachePlugin.js +3 -0
  31. package/lib/config/normalization.js +1 -0
  32. package/lib/container/ContainerEntryModule.js +5 -0
  33. package/lib/container/ContainerExposedDependency.js +9 -0
  34. package/lib/container/FallbackDependency.js +6 -0
  35. package/lib/container/FallbackModule.js +5 -0
  36. package/lib/container/RemoteModule.js +5 -0
  37. package/lib/css/CssModulesPlugin.js +91 -50
  38. package/lib/css/CssParser.js +226 -72
  39. package/lib/css/walkCssTokens.js +152 -117
  40. package/lib/dependencies/AMDDefineDependency.js +8 -0
  41. package/lib/dependencies/AMDRequireArrayDependency.js +8 -0
  42. package/lib/dependencies/AMDRequireContextDependency.js +9 -0
  43. package/lib/dependencies/AMDRequireDependency.js +8 -0
  44. package/lib/dependencies/CachedConstDependency.js +8 -0
  45. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  46. package/lib/dependencies/CommonJsExportRequireDependency.js +8 -0
  47. package/lib/dependencies/CommonJsExportsDependency.js +8 -0
  48. package/lib/dependencies/CommonJsExportsParserPlugin.js +65 -3
  49. package/lib/dependencies/CommonJsFullRequireDependency.js +8 -0
  50. package/lib/dependencies/CommonJsRequireContextDependency.js +9 -0
  51. package/lib/dependencies/CommonJsSelfReferenceDependency.js +8 -0
  52. package/lib/dependencies/ConstDependency.js +8 -0
  53. package/lib/dependencies/ContextDependency.js +8 -0
  54. package/lib/dependencies/ContextElementDependency.js +8 -0
  55. package/lib/dependencies/CreateScriptUrlDependency.js +8 -0
  56. package/lib/dependencies/CssExportDependency.js +8 -0
  57. package/lib/dependencies/CssImportDependency.js +52 -1
  58. package/lib/dependencies/CssLocalIdentifierDependency.js +8 -0
  59. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +8 -0
  60. package/lib/dependencies/CssUrlDependency.js +38 -18
  61. package/lib/dependencies/DllEntryDependency.js +9 -0
  62. package/lib/dependencies/ExportsInfoDependency.js +5 -0
  63. package/lib/dependencies/HarmonyAcceptDependency.js +8 -0
  64. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +8 -0
  65. package/lib/dependencies/HarmonyExportExpressionDependency.js +8 -0
  66. package/lib/dependencies/HarmonyExportHeaderDependency.js +8 -0
  67. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +14 -0
  68. package/lib/dependencies/HarmonyExportSpecifierDependency.js +8 -0
  69. package/lib/dependencies/HarmonyImportDependency.js +8 -0
  70. package/lib/dependencies/HarmonyImportSpecifierDependency.js +8 -0
  71. package/lib/dependencies/ImportContextDependency.js +9 -0
  72. package/lib/dependencies/ImportDependency.js +8 -0
  73. package/lib/dependencies/ImportMetaPlugin.js +56 -26
  74. package/lib/dependencies/ImportParserPlugin.js +17 -1
  75. package/lib/dependencies/JsonExportsDependency.js +8 -0
  76. package/lib/dependencies/LocalModuleDependency.js +8 -0
  77. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  78. package/lib/dependencies/ModuleDependency.js +8 -0
  79. package/lib/dependencies/ProvidedDependency.js +8 -0
  80. package/lib/dependencies/PureExpressionDependency.js +8 -0
  81. package/lib/dependencies/RequireEnsureDependency.js +8 -0
  82. package/lib/dependencies/RequireHeaderDependency.js +5 -0
  83. package/lib/dependencies/RequireResolveContextDependency.js +9 -0
  84. package/lib/dependencies/RequireResolveHeaderDependency.js +5 -0
  85. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  86. package/lib/dependencies/StaticExportsDependency.js +8 -0
  87. package/lib/dependencies/URLDependency.js +8 -0
  88. package/lib/dependencies/UnsupportedDependency.js +8 -0
  89. package/lib/dependencies/WebAssemblyExportImportedDependency.js +8 -0
  90. package/lib/dependencies/WebAssemblyImportDependency.js +8 -0
  91. package/lib/dependencies/WorkerDependency.js +8 -0
  92. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  93. package/lib/index.js +1 -0
  94. package/lib/javascript/JavascriptParser.js +14 -4
  95. package/lib/optimize/RealContentHashPlugin.js +6 -0
  96. package/lib/runtime/AutoPublicPathRuntimeModule.js +6 -1
  97. package/lib/schemes/DataUriPlugin.js +12 -3
  98. package/lib/serialization/ObjectMiddleware.js +2 -0
  99. package/lib/sharing/ConsumeSharedModule.js +8 -0
  100. package/lib/sharing/ConsumeSharedRuntimeModule.js +9 -3
  101. package/lib/sharing/ProvideSharedDependency.js +6 -0
  102. package/lib/sharing/ProvideSharedModule.js +5 -0
  103. package/lib/sharing/ShareRuntimeModule.js +7 -4
  104. package/lib/stats/DefaultStatsFactoryPlugin.js +98 -25
  105. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  106. package/lib/stats/DefaultStatsPrinterPlugin.js +4 -0
  107. package/lib/util/LazySet.js +10 -2
  108. package/lib/util/MapHelpers.js +19 -5
  109. package/lib/util/binarySearchBounds.js +49 -0
  110. package/lib/util/internalSerializables.js +1 -0
  111. package/lib/util/semver.js +1 -1
  112. package/package.json +19 -22
  113. package/schemas/WebpackOptions.check.js +1 -1
  114. package/schemas/WebpackOptions.json +16 -0
  115. package/types.d.ts +108 -39
@@ -9,6 +9,9 @@ const makeSerializable = require("../util/makeSerializable");
9
9
  const ContextDependency = require("./ContextDependency");
10
10
  const ContextDependencyTemplateAsId = require("./ContextDependencyTemplateAsId");
11
11
 
12
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
13
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
14
+
12
15
  class RequireResolveContextDependency extends ContextDependency {
13
16
  constructor(options, range, valueRange, context) {
14
17
  super(options, context);
@@ -21,6 +24,9 @@ class RequireResolveContextDependency extends ContextDependency {
21
24
  return "amd require context";
22
25
  }
23
26
 
27
+ /**
28
+ * @param {ObjectSerializerContext} context context
29
+ */
24
30
  serialize(context) {
25
31
  const { write } = context;
26
32
 
@@ -30,6 +36,9 @@ class RequireResolveContextDependency extends ContextDependency {
30
36
  super.serialize(context);
31
37
  }
32
38
 
39
+ /**
40
+ * @param {ObjectDeserializerContext} context context
41
+ */
33
42
  deserialize(context) {
34
43
  const { read } = context;
35
44
 
@@ -11,6 +11,8 @@ const NullDependency = require("./NullDependency");
11
11
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
12
  /** @typedef {import("../Dependency")} Dependency */
13
13
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
14
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
14
16
 
15
17
  class RequireResolveHeaderDependency extends NullDependency {
16
18
  constructor(range) {
@@ -21,6 +23,9 @@ class RequireResolveHeaderDependency extends NullDependency {
21
23
  this.range = range;
22
24
  }
23
25
 
26
+ /**
27
+ * @param {ObjectSerializerContext} context context
28
+ */
24
29
  serialize(context) {
25
30
  const { write } = context;
26
31
 
@@ -14,6 +14,8 @@ const NullDependency = require("./NullDependency");
14
14
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
15
15
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
16
16
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
18
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
17
19
  /** @typedef {import("../util/Hash")} Hash */
18
20
 
19
21
  class RuntimeRequirementsDependency extends NullDependency {
@@ -39,12 +41,18 @@ class RuntimeRequirementsDependency extends NullDependency {
39
41
  hash.update(this._hashUpdate);
40
42
  }
41
43
 
44
+ /**
45
+ * @param {ObjectSerializerContext} context context
46
+ */
42
47
  serialize(context) {
43
48
  const { write } = context;
44
49
  write(this.runtimeRequirements);
45
50
  super.serialize(context);
46
51
  }
47
52
 
53
+ /**
54
+ * @param {ObjectDeserializerContext} context context
55
+ */
48
56
  deserialize(context) {
49
57
  const { read } = context;
50
58
  this.runtimeRequirements = read();
@@ -13,6 +13,8 @@ const NullDependency = require("./NullDependency");
13
13
  /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
14
14
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
15
15
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
16
18
  /** @typedef {import("../util/Hash")} Hash */
17
19
 
18
20
  class StaticExportsDependency extends NullDependency {
@@ -43,6 +45,9 @@ class StaticExportsDependency extends NullDependency {
43
45
  };
44
46
  }
45
47
 
48
+ /**
49
+ * @param {ObjectSerializerContext} context context
50
+ */
46
51
  serialize(context) {
47
52
  const { write } = context;
48
53
  write(this.exports);
@@ -50,6 +55,9 @@ class StaticExportsDependency extends NullDependency {
50
55
  super.serialize(context);
51
56
  }
52
57
 
58
+ /**
59
+ * @param {ObjectDeserializerContext} context context
60
+ */
53
61
  deserialize(context) {
54
62
  const { read } = context;
55
63
  this.exports = read();
@@ -22,6 +22,8 @@ const ModuleDependency = require("./ModuleDependency");
22
22
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
23
23
  /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
24
24
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
25
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
26
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
25
27
  /** @typedef {import("../util/Hash")} Hash */
26
28
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
27
29
 
@@ -72,6 +74,9 @@ class URLDependency extends ModuleDependency {
72
74
  return new RawDataUrlModule("data:,", `ignored-asset`, `(ignored asset)`);
73
75
  }
74
76
 
77
+ /**
78
+ * @param {ObjectSerializerContext} context context
79
+ */
75
80
  serialize(context) {
76
81
  const { write } = context;
77
82
  write(this.outerRange);
@@ -80,6 +85,9 @@ class URLDependency extends ModuleDependency {
80
85
  super.serialize(context);
81
86
  }
82
87
 
88
+ /**
89
+ * @param {ObjectDeserializerContext} context context
90
+ */
83
91
  deserialize(context) {
84
92
  const { read } = context;
85
93
  this.outerRange = read();
@@ -11,6 +11,8 @@ const NullDependency = require("./NullDependency");
11
11
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
12
  /** @typedef {import("../Dependency")} Dependency */
13
13
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
14
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
14
16
 
15
17
  class UnsupportedDependency extends NullDependency {
16
18
  constructor(request, range) {
@@ -20,6 +22,9 @@ class UnsupportedDependency extends NullDependency {
20
22
  this.range = range;
21
23
  }
22
24
 
25
+ /**
26
+ * @param {ObjectSerializerContext} context context
27
+ */
23
28
  serialize(context) {
24
29
  const { write } = context;
25
30
 
@@ -29,6 +34,9 @@ class UnsupportedDependency extends NullDependency {
29
34
  super.serialize(context);
30
35
  }
31
36
 
37
+ /**
38
+ * @param {ObjectDeserializerContext} context context
39
+ */
32
40
  deserialize(context) {
33
41
  const { read } = context;
34
42
 
@@ -12,6 +12,8 @@ const ModuleDependency = require("./ModuleDependency");
12
12
  /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
13
13
  /** @typedef {import("../Dependency").TRANSITIVE} TRANSITIVE */
14
14
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
15
17
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
16
18
 
17
19
  class WebAssemblyExportImportedDependency extends ModuleDependency {
@@ -50,6 +52,9 @@ class WebAssemblyExportImportedDependency extends ModuleDependency {
50
52
  return "wasm";
51
53
  }
52
54
 
55
+ /**
56
+ * @param {ObjectSerializerContext} context context
57
+ */
53
58
  serialize(context) {
54
59
  const { write } = context;
55
60
 
@@ -60,6 +65,9 @@ class WebAssemblyExportImportedDependency extends ModuleDependency {
60
65
  super.serialize(context);
61
66
  }
62
67
 
68
+ /**
69
+ * @param {ObjectDeserializerContext} context context
70
+ */
63
71
  deserialize(context) {
64
72
  const { read } = context;
65
73
 
@@ -13,6 +13,8 @@ const ModuleDependency = require("./ModuleDependency");
13
13
  /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
14
14
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
15
15
  /** @typedef {import("../WebpackError")} WebpackError */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
16
18
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
17
19
 
18
20
  class WebAssemblyImportDependency extends ModuleDependency {
@@ -71,6 +73,9 @@ class WebAssemblyImportDependency extends ModuleDependency {
71
73
  }
72
74
  }
73
75
 
76
+ /**
77
+ * @param {ObjectSerializerContext} context context
78
+ */
74
79
  serialize(context) {
75
80
  const { write } = context;
76
81
 
@@ -81,6 +86,9 @@ class WebAssemblyImportDependency extends ModuleDependency {
81
86
  super.serialize(context);
82
87
  }
83
88
 
89
+ /**
90
+ * @param {ObjectDeserializerContext} context context
91
+ */
84
92
  deserialize(context) {
85
93
  const { read } = context;
86
94
 
@@ -18,6 +18,8 @@ const ModuleDependency = require("./ModuleDependency");
18
18
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
19
19
  /** @typedef {import("../Entrypoint")} Entrypoint */
20
20
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
21
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
22
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
21
23
  /** @typedef {import("../util/Hash")} Hash */
22
24
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
23
25
 
@@ -68,12 +70,18 @@ class WorkerDependency extends ModuleDependency {
68
70
  hash.update(this._hashUpdate);
69
71
  }
70
72
 
73
+ /**
74
+ * @param {ObjectSerializerContext} context context
75
+ */
71
76
  serialize(context) {
72
77
  const { write } = context;
73
78
  write(this.options);
74
79
  super.serialize(context);
75
80
  }
76
81
 
82
+ /**
83
+ * @param {ObjectDeserializerContext} context context
84
+ */
77
85
  deserialize(context) {
78
86
  const { read } = context;
79
87
  this.options = read();
@@ -81,7 +81,7 @@ class OccurrenceModuleIdsPlugin {
81
81
  ] of moduleGraph.getIncomingConnectionsByOriginModule(module)) {
82
82
  if (!originModule) continue;
83
83
  if (!connections.some(c => c.isTargetActive(undefined))) continue;
84
- sum += initialChunkChunkMap.get(originModule);
84
+ sum += initialChunkChunkMap.get(originModule) || 0;
85
85
  }
86
86
  return sum;
87
87
  };
package/lib/index.js CHANGED
@@ -18,6 +18,7 @@ const memoize = require("./util/memoize");
18
18
  /** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
19
19
  /** @typedef {import("../declarations/WebpackOptions").FileCacheOptions} FileCacheOptions */
20
20
  /** @typedef {import("../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
21
+ /** @typedef {import("../declarations/WebpackOptions").MemoryCacheOptions} MemoryCacheOptions */
21
22
  /** @typedef {import("../declarations/WebpackOptions").ModuleOptions} ModuleOptions */
22
23
  /** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
23
24
  /** @typedef {import("../declarations/WebpackOptions").RuleSetCondition} RuleSetCondition */
@@ -1743,7 +1743,7 @@ class JavascriptParser extends Parser {
1743
1743
  preWalkTryStatement(statement) {
1744
1744
  this.preWalkStatement(statement.block);
1745
1745
  if (statement.handler) this.preWalkCatchClause(statement.handler);
1746
- if (statement.finializer) this.preWalkStatement(statement.finializer);
1746
+ if (statement.finalizer) this.preWalkStatement(statement.finalizer);
1747
1747
  }
1748
1748
 
1749
1749
  walkTryStatement(statement) {
@@ -1927,7 +1927,12 @@ class JavascriptParser extends Parser {
1927
1927
  for (const id of set) keys.add(id);
1928
1928
  }
1929
1929
 
1930
- this.destructuringAssignmentProperties.set(expression.right, keys);
1930
+ this.destructuringAssignmentProperties.set(
1931
+ expression.right.type === "AwaitExpression"
1932
+ ? expression.right.argument
1933
+ : expression.right,
1934
+ keys
1935
+ );
1931
1936
 
1932
1937
  if (expression.right.type === "AssignmentExpression") {
1933
1938
  this.preWalkAssignmentExpression(expression.right);
@@ -2183,7 +2188,12 @@ class JavascriptParser extends Parser {
2183
2188
  const keys = this._preWalkObjectPattern(declarator.id);
2184
2189
 
2185
2190
  if (!keys) return;
2186
- this.destructuringAssignmentProperties.set(declarator.init, keys);
2191
+ this.destructuringAssignmentProperties.set(
2192
+ declarator.init.type === "AwaitExpression"
2193
+ ? declarator.init.argument
2194
+ : declarator.init,
2195
+ keys
2196
+ );
2187
2197
 
2188
2198
  if (declarator.init.type === "AssignmentExpression") {
2189
2199
  this.preWalkAssignmentExpression(declarator.init);
@@ -2472,7 +2482,7 @@ class JavascriptParser extends Parser {
2472
2482
  walkFunctionExpression(expression) {
2473
2483
  const wasTopLevel = this.scope.topLevelScope;
2474
2484
  this.scope.topLevelScope = false;
2475
- const scopeParams = expression.params;
2485
+ const scopeParams = [...expression.params];
2476
2486
 
2477
2487
  // Add function name in scope for recursive calls
2478
2488
  if (expression.id) {
@@ -15,6 +15,7 @@ const createHash = require("../util/createHash");
15
15
  /** @typedef {import("webpack-sources").Source} Source */
16
16
  /** @typedef {import("../Compilation").AssetInfo} AssetInfo */
17
17
  /** @typedef {import("../Compiler")} Compiler */
18
+ /** @typedef {typeof import("../util/Hash")} Hash */
18
19
 
19
20
  const EMPTY_SET = new Set();
20
21
 
@@ -115,6 +116,11 @@ class RealContentHashPlugin {
115
116
  return hooks;
116
117
  }
117
118
 
119
+ /**
120
+ * @param {Object} options options object
121
+ * @param {string | Hash} options.hashFunction the hash function to use
122
+ * @param {string} options.hashDigest the hash digest to use
123
+ */
118
124
  constructor({ hashFunction, hashDigest }) {
119
125
  this._hashFunction = hashFunction;
120
126
  this._hashDigest = hashDigest;
@@ -47,7 +47,12 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
47
47
  "if (!scriptUrl) {",
48
48
  Template.indent([
49
49
  'var scripts = document.getElementsByTagName("script");',
50
- "if(scripts.length) scriptUrl = scripts[scripts.length - 1].src"
50
+ "if(scripts.length) {",
51
+ Template.indent([
52
+ "var i = scripts.length - 1;",
53
+ "while (i > -1 && !scriptUrl) scriptUrl = scripts[i--].src;"
54
+ ]),
55
+ "}"
51
56
  ]),
52
57
  "}"
53
58
  ]),
@@ -19,9 +19,18 @@ const decodeDataURI = uri => {
19
19
 
20
20
  const isBase64 = match[3];
21
21
  const body = match[4];
22
- return isBase64
23
- ? Buffer.from(body, "base64")
24
- : Buffer.from(decodeURIComponent(body), "ascii");
22
+
23
+ if (isBase64) {
24
+ return Buffer.from(body, "base64");
25
+ }
26
+
27
+ // CSS allows to use `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" style="stroke: rgb(223,224,225); stroke-width: 2px; fill: none; stroke-dasharray: 6px 3px" /></svg>`
28
+ // so we return original body if we can't `decodeURIComponent`
29
+ try {
30
+ return Buffer.from(decodeURIComponent(body), "ascii");
31
+ } catch (_) {
32
+ return Buffer.from(body, "ascii");
33
+ }
25
34
  };
26
35
 
27
36
  class DataUriPlugin {
@@ -46,11 +46,13 @@ Technically any value can be used.
46
46
  /**
47
47
  * @typedef {Object} ObjectSerializerContext
48
48
  * @property {function(any): void} write
49
+ * @property {function(any): void} setCircularReference
49
50
  */
50
51
 
51
52
  /**
52
53
  * @typedef {Object} ObjectDeserializerContext
53
54
  * @property {function(): any} read
55
+ * @property {function(any): void} setCircularReference
54
56
  */
55
57
 
56
58
  /**
@@ -25,6 +25,8 @@ const ConsumeSharedFallbackDependency = require("./ConsumeSharedFallbackDependen
25
25
  /** @typedef {import("../RequestShortener")} RequestShortener */
26
26
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
27
27
  /** @typedef {import("../WebpackError")} WebpackError */
28
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
29
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
28
30
  /** @typedef {import("../util/Hash")} Hash */
29
31
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
30
32
  /** @typedef {import("../util/semver").SemVerRange} SemVerRange */
@@ -230,12 +232,18 @@ class ConsumeSharedModule extends Module {
230
232
  };
231
233
  }
232
234
 
235
+ /**
236
+ * @param {ObjectSerializerContext} context context
237
+ */
233
238
  serialize(context) {
234
239
  const { write } = context;
235
240
  write(this.options);
236
241
  super.serialize(context);
237
242
  }
238
243
 
244
+ /**
245
+ * @param {ObjectDeserializerContext} context context
246
+ */
239
247
  deserialize(context) {
240
248
  const { read } = context;
241
249
  this.options = read();
@@ -119,8 +119,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
119
119
  "scope, scopeName, key, requiredVersion",
120
120
  [
121
121
  "var version = findSingletonVersionKey(scope, key);",
122
- "if (!satisfy(requiredVersion, version)) " +
123
- 'typeof console !== "undefined" && console.warn && console.warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));',
122
+ "if (!satisfy(requiredVersion, version)) warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));",
124
123
  "return get(scope[key][version]);"
125
124
  ]
126
125
  )};`,
@@ -166,10 +165,17 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
166
165
  "throw new Error(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));"
167
166
  ]
168
167
  )};`,
168
+ `var warn = ${
169
+ this.compilation.options.output.ignoreBrowserWarnings
170
+ ? runtimeTemplate.basicFunction("", "")
171
+ : runtimeTemplate.basicFunction("msg", [
172
+ 'if (typeof console !== "undefined" && console.warn) console.warn(msg);'
173
+ ])
174
+ };`,
169
175
  `var warnInvalidVersion = ${runtimeTemplate.basicFunction(
170
176
  "scope, scopeName, key, requiredVersion",
171
177
  [
172
- 'typeof console !== "undefined" && console.warn && console.warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));'
178
+ "warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));"
173
179
  ]
174
180
  )};`,
175
181
  `var get = ${runtimeTemplate.basicFunction("entry", [
@@ -8,6 +8,9 @@
8
8
  const Dependency = require("../Dependency");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
+
11
14
  class ProvideSharedDependency extends Dependency {
12
15
  constructor(shareScope, name, version, request, eager) {
13
16
  super();
@@ -31,6 +34,9 @@ class ProvideSharedDependency extends Dependency {
31
34
  } @ ${this.version}${this.eager ? " (eager)" : ""}`;
32
35
  }
33
36
 
37
+ /**
38
+ * @param {ObjectSerializerContext} context context
39
+ */
34
40
  serialize(context) {
35
41
  context.write(this.shareScope);
36
42
  context.write(this.name);
@@ -23,6 +23,8 @@ const ProvideForSharedDependency = require("./ProvideForSharedDependency");
23
23
  /** @typedef {import("../RequestShortener")} RequestShortener */
24
24
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
25
25
  /** @typedef {import("../WebpackError")} WebpackError */
26
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
27
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
26
28
  /** @typedef {import("../util/Hash")} Hash */
27
29
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
28
30
 
@@ -158,6 +160,9 @@ class ProvideSharedModule extends Module {
158
160
  return { sources, data, runtimeRequirements };
159
161
  }
160
162
 
163
+ /**
164
+ * @param {ObjectSerializerContext} context context
165
+ */
161
166
  serialize(context) {
162
167
  const { write } = context;
163
168
  write(this._shareScope);
@@ -77,10 +77,13 @@ class ShareRuntimeModule extends RuntimeModule {
77
77
  `if(!${RuntimeGlobals.hasOwnProperty}(${RuntimeGlobals.shareScopeMap}, name)) ${RuntimeGlobals.shareScopeMap}[name] = {};`,
78
78
  "// runs all init snippets from all modules reachable",
79
79
  `var scope = ${RuntimeGlobals.shareScopeMap}[name];`,
80
- `var warn = ${runtimeTemplate.returningFunction(
81
- 'typeof console !== "undefined" && console.warn && console.warn(msg)',
82
- "msg"
83
- )};`,
80
+ `var warn = ${
81
+ this.compilation.options.output.ignoreBrowserWarnings
82
+ ? runtimeTemplate.basicFunction("", "")
83
+ : runtimeTemplate.basicFunction("msg", [
84
+ 'if (typeof console !== "undefined" && console.warn) console.warn(msg);'
85
+ ])
86
+ };`,
84
87
  `var uniqueName = ${JSON.stringify(uniqueName || undefined)};`,
85
88
  `var register = ${runtimeTemplate.basicFunction(
86
89
  "name, version, factory, eager",
@@ -811,11 +811,32 @@ const SIMPLE_EXTRACTORS = {
811
811
  },
812
812
  errors: (object, compilation, context, options, factory) => {
813
813
  const { type, cachedGetErrors } = context;
814
- object.errors = factory.create(
814
+ const rawErrors = cachedGetErrors(compilation);
815
+ const factorizedErrors = factory.create(
815
816
  `${type}.errors`,
816
817
  cachedGetErrors(compilation),
817
818
  context
818
819
  );
820
+ let filtered = 0;
821
+ if (options.errorDetails === "auto" && rawErrors.length >= 3) {
822
+ filtered = rawErrors
823
+ .map(e => typeof e !== "string" && e.details)
824
+ .filter(Boolean).length;
825
+ }
826
+ if (
827
+ options.errorDetails === true ||
828
+ !Number.isFinite(options.errorsSpace)
829
+ ) {
830
+ object.errors = factorizedErrors;
831
+ if (filtered) object.filteredErrorDetailsCount = filtered;
832
+ return;
833
+ }
834
+ const [errors, filteredBySpace] = errorsSpaceLimit(
835
+ factorizedErrors,
836
+ options.errorsSpace
837
+ );
838
+ object.filteredErrorDetailsCount = filtered + filteredBySpace;
839
+ object.errors = errors;
819
840
  },
820
841
  errorsCount: (object, compilation, { cachedGetErrors }) => {
821
842
  object.errorsCount = countWithChildren(compilation, c =>
@@ -824,11 +845,31 @@ const SIMPLE_EXTRACTORS = {
824
845
  },
825
846
  warnings: (object, compilation, context, options, factory) => {
826
847
  const { type, cachedGetWarnings } = context;
827
- object.warnings = factory.create(
848
+ const rawWarnings = factory.create(
828
849
  `${type}.warnings`,
829
850
  cachedGetWarnings(compilation),
830
851
  context
831
852
  );
853
+ let filtered = 0;
854
+ if (options.errorDetails === "auto") {
855
+ filtered = cachedGetWarnings(compilation)
856
+ .map(e => typeof e !== "string" && e.details)
857
+ .filter(Boolean).length;
858
+ }
859
+ if (
860
+ options.errorDetails === true ||
861
+ !Number.isFinite(options.warningsSpace)
862
+ ) {
863
+ object.warnings = rawWarnings;
864
+ if (filtered) object.filteredWarningDetailsCount = filtered;
865
+ return;
866
+ }
867
+ const [warnings, filteredBySpace] = errorsSpaceLimit(
868
+ rawWarnings,
869
+ options.warningsSpace
870
+ );
871
+ object.filteredWarningDetailsCount = filtered + filteredBySpace;
872
+ object.warnings = warnings;
832
873
  },
833
874
  warningsCount: (
834
875
  object,
@@ -853,29 +894,6 @@ const SIMPLE_EXTRACTORS = {
853
894
  });
854
895
  });
855
896
  },
856
- errorDetails: (
857
- object,
858
- compilation,
859
- { cachedGetErrors, cachedGetWarnings },
860
- { errorDetails, errors, warnings }
861
- ) => {
862
- if (errorDetails === "auto") {
863
- if (warnings) {
864
- const warnings = cachedGetWarnings(compilation);
865
- object.filteredWarningDetailsCount = warnings
866
- .map(e => typeof e !== "string" && e.details)
867
- .filter(Boolean).length;
868
- }
869
- if (errors) {
870
- const errors = cachedGetErrors(compilation);
871
- if (errors.length >= 3) {
872
- object.filteredErrorDetailsCount = errors
873
- .map(e => typeof e !== "string" && e.details)
874
- .filter(Boolean).length;
875
- }
876
- }
877
- }
878
- },
879
897
  children: (object, compilation, context, options, factory) => {
880
898
  const { type } = context;
881
899
  object.children = factory.create(
@@ -1779,6 +1797,61 @@ const spaceLimited = (
1779
1797
  };
1780
1798
  };
1781
1799
 
1800
+ const errorsSpaceLimit = (errors, max) => {
1801
+ let filtered = 0;
1802
+ // Can not fit into limit
1803
+ // print only messages
1804
+ if (errors.length + 1 >= max)
1805
+ return [
1806
+ errors.map(error => {
1807
+ if (typeof error === "string" || !error.details) return error;
1808
+ filtered++;
1809
+ return { ...error, details: "" };
1810
+ }),
1811
+ filtered
1812
+ ];
1813
+ let fullLength = errors.length;
1814
+ let result = errors;
1815
+
1816
+ let i = 0;
1817
+ for (; i < errors.length; i++) {
1818
+ const error = errors[i];
1819
+ if (typeof error !== "string" && error.details) {
1820
+ const splitted = error.details.split("\n");
1821
+ const len = splitted.length;
1822
+ fullLength += len;
1823
+ if (fullLength > max) {
1824
+ result = i > 0 ? errors.slice(0, i) : [];
1825
+ const overLimit = fullLength - max + 1;
1826
+ const error = errors[i++];
1827
+ result.push({
1828
+ ...error,
1829
+ details: error.details.split("\n").slice(0, -overLimit).join("\n"),
1830
+ filteredDetails: overLimit
1831
+ });
1832
+ filtered = errors.length - i;
1833
+ for (; i < errors.length; i++) {
1834
+ const error = errors[i];
1835
+ if (typeof error === "string" || !error.details) result.push(error);
1836
+ result.push({ ...error, details: "" });
1837
+ }
1838
+ break;
1839
+ } else if (fullLength === max) {
1840
+ result = errors.slice(0, ++i);
1841
+ filtered = errors.length - i;
1842
+ for (; i < errors.length; i++) {
1843
+ const error = errors[i];
1844
+ if (typeof error === "string" || !error.details) result.push(error);
1845
+ result.push({ ...error, details: "" });
1846
+ }
1847
+ break;
1848
+ }
1849
+ }
1850
+ }
1851
+
1852
+ return [result, filtered];
1853
+ };
1854
+
1782
1855
  const assetGroup = (children, assets) => {
1783
1856
  let size = 0;
1784
1857
  for (const asset of children) {