webpack 5.103.0 → 5.104.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.
Files changed (176) hide show
  1. package/hot/dev-server.js +18 -3
  2. package/hot/emitter-event-target.js +7 -0
  3. package/hot/lazy-compilation-node.js +45 -29
  4. package/hot/lazy-compilation-universal.js +18 -0
  5. package/hot/lazy-compilation-web.js +15 -5
  6. package/hot/load-http.js +7 -0
  7. package/hot/only-dev-server.js +19 -4
  8. package/lib/APIPlugin.js +6 -0
  9. package/lib/Chunk.js +1 -1
  10. package/lib/ChunkGraph.js +9 -7
  11. package/lib/ChunkGroup.js +8 -5
  12. package/lib/CleanPlugin.js +6 -3
  13. package/lib/CodeGenerationResults.js +2 -1
  14. package/lib/CompatibilityPlugin.js +3 -0
  15. package/lib/Compilation.js +33 -19
  16. package/lib/Compiler.js +3 -3
  17. package/lib/ContextModule.js +6 -3
  18. package/lib/ContextModuleFactory.js +6 -4
  19. package/lib/DefinePlugin.js +34 -3
  20. package/lib/DelegatedModule.js +7 -4
  21. package/lib/DllModule.js +6 -3
  22. package/lib/DotenvPlugin.js +11 -6
  23. package/lib/ExportsInfo.js +5 -5
  24. package/lib/ExternalModule.js +8 -7
  25. package/lib/ExternalModuleFactoryPlugin.js +1 -1
  26. package/lib/FileSystemInfo.js +1 -1
  27. package/lib/Generator.js +10 -7
  28. package/lib/HookWebpackError.js +33 -4
  29. package/lib/HotModuleReplacementPlugin.js +22 -0
  30. package/lib/ManifestPlugin.js +1 -1
  31. package/lib/Module.js +24 -15
  32. package/lib/ModuleBuildError.js +1 -1
  33. package/lib/ModuleError.js +1 -1
  34. package/lib/ModuleFilenameHelpers.js +1 -1
  35. package/lib/ModuleGraph.js +27 -12
  36. package/lib/ModuleGraphConnection.js +2 -2
  37. package/lib/ModuleSourceTypeConstants.js +189 -0
  38. package/lib/ModuleTypeConstants.js +1 -4
  39. package/lib/ModuleWarning.js +1 -1
  40. package/lib/NodeStuffPlugin.js +52 -42
  41. package/lib/NormalModule.js +6 -4
  42. package/lib/NormalModuleFactory.js +7 -10
  43. package/lib/Parser.js +1 -1
  44. package/lib/RawModule.js +7 -4
  45. package/lib/RuntimeModule.js +1 -1
  46. package/lib/RuntimeTemplate.js +5 -1
  47. package/lib/SourceMapDevToolPlugin.js +6 -1
  48. package/lib/Template.js +17 -6
  49. package/lib/TemplatedPathPlugin.js +5 -6
  50. package/lib/WebpackError.js +0 -1
  51. package/lib/WebpackOptionsApply.js +37 -9
  52. package/lib/asset/AssetBytesGenerator.js +15 -11
  53. package/lib/asset/AssetGenerator.js +30 -24
  54. package/lib/asset/AssetSourceGenerator.js +15 -11
  55. package/lib/asset/RawDataUrlModule.js +6 -3
  56. package/lib/buildChunkGraph.js +4 -2
  57. package/lib/cache/PackFileCacheStrategy.js +6 -5
  58. package/lib/cli.js +2 -43
  59. package/lib/config/browserslistTargetHandler.js +19 -0
  60. package/lib/config/defaults.js +128 -43
  61. package/lib/config/normalization.js +2 -2
  62. package/lib/config/target.js +5 -0
  63. package/lib/container/ContainerEntryModule.js +6 -3
  64. package/lib/container/FallbackModule.js +6 -3
  65. package/lib/container/RemoteModule.js +1 -3
  66. package/lib/css/CssGenerator.js +26 -24
  67. package/lib/css/CssLoadingRuntimeModule.js +12 -4
  68. package/lib/css/CssModulesPlugin.js +29 -74
  69. package/lib/css/CssParser.js +828 -341
  70. package/lib/css/walkCssTokens.js +33 -13
  71. package/lib/dependencies/CachedConstDependency.js +24 -10
  72. package/lib/dependencies/CommonJsRequireContextDependency.js +1 -1
  73. package/lib/dependencies/ContextDependencyHelpers.js +2 -2
  74. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +3 -1
  75. package/lib/dependencies/CssIcssExportDependency.js +242 -104
  76. package/lib/dependencies/CssIcssImportDependency.js +61 -4
  77. package/lib/dependencies/CssIcssSymbolDependency.js +2 -6
  78. package/lib/dependencies/CssImportDependency.js +2 -1
  79. package/lib/dependencies/CssUrlDependency.js +3 -2
  80. package/lib/dependencies/DynamicExports.js +7 -7
  81. package/lib/dependencies/ExternalModuleDependency.js +7 -4
  82. package/lib/dependencies/ExternalModuleInitFragment.js +2 -1
  83. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +2 -1
  84. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +3 -2
  85. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +1 -1
  86. package/lib/dependencies/HarmonyExports.js +4 -4
  87. package/lib/dependencies/HarmonyImportDependency.js +8 -3
  88. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -1
  89. package/lib/dependencies/ImportMetaPlugin.js +57 -0
  90. package/lib/dependencies/ImportParserPlugin.js +2 -2
  91. package/lib/dependencies/LocalModulesHelpers.js +3 -3
  92. package/lib/dependencies/WorkerPlugin.js +2 -2
  93. package/lib/dependencies/getFunctionExpression.js +1 -1
  94. package/lib/esm/ModuleChunkFormatPlugin.js +5 -4
  95. package/lib/hmr/HotModuleReplacement.runtime.js +2 -1
  96. package/lib/hmr/LazyCompilationPlugin.js +4 -3
  97. package/lib/ids/IdHelpers.js +16 -7
  98. package/lib/javascript/ChunkHelpers.js +1 -1
  99. package/lib/javascript/JavascriptGenerator.js +4 -3
  100. package/lib/javascript/JavascriptModulesPlugin.js +57 -24
  101. package/lib/javascript/JavascriptParser.js +19 -6
  102. package/lib/json/JsonGenerator.js +5 -4
  103. package/lib/json/JsonParser.js +2 -1
  104. package/lib/library/AbstractLibraryPlugin.js +1 -1
  105. package/lib/library/AmdLibraryPlugin.js +4 -1
  106. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  107. package/lib/library/ModuleLibraryPlugin.js +41 -13
  108. package/lib/library/SystemLibraryPlugin.js +4 -1
  109. package/lib/library/UmdLibraryPlugin.js +1 -1
  110. package/lib/logging/Logger.js +5 -4
  111. package/lib/logging/createConsoleLogger.js +2 -2
  112. package/lib/optimize/ConcatenatedModule.js +47 -32
  113. package/lib/optimize/ModuleConcatenationPlugin.js +5 -4
  114. package/lib/optimize/SideEffectsFlagPlugin.js +3 -2
  115. package/lib/optimize/SplitChunksPlugin.js +60 -46
  116. package/lib/rules/RuleSetCompiler.js +1 -1
  117. package/lib/runtime/GetChunkFilenameRuntimeModule.js +3 -2
  118. package/lib/schemes/HttpUriPlugin.js +78 -7
  119. package/lib/serialization/AggregateErrorSerializer.js +1 -2
  120. package/lib/serialization/ObjectMiddleware.js +0 -2
  121. package/lib/serialization/SingleItemMiddleware.js +1 -1
  122. package/lib/sharing/ConsumeSharedModule.js +1 -1
  123. package/lib/sharing/ConsumeSharedPlugin.js +5 -3
  124. package/lib/sharing/ProvideSharedModule.js +1 -1
  125. package/lib/sharing/resolveMatchedConfigs.js +15 -9
  126. package/lib/sharing/utils.js +1 -1
  127. package/lib/stats/DefaultStatsFactoryPlugin.js +8 -5
  128. package/lib/stats/DefaultStatsPresetPlugin.js +1 -1
  129. package/lib/stats/DefaultStatsPrinterPlugin.js +1 -1
  130. package/lib/util/StringXor.js +1 -1
  131. package/lib/util/URLAbsoluteSpecifier.js +2 -2
  132. package/lib/util/binarySearchBounds.js +2 -2
  133. package/lib/util/comparators.js +53 -76
  134. package/lib/util/compileBooleanMatcher.js +78 -6
  135. package/lib/util/createHash.js +20 -199
  136. package/lib/util/deprecation.js +1 -1
  137. package/lib/util/deterministicGrouping.js +6 -3
  138. package/lib/util/fs.js +75 -75
  139. package/lib/util/hash/BatchedHash.js +10 -9
  140. package/lib/util/hash/BulkUpdateHash.js +138 -0
  141. package/lib/util/hash/DebugHash.js +75 -0
  142. package/lib/util/hash/hash-digest.js +216 -0
  143. package/lib/util/identifier.js +82 -17
  144. package/lib/util/internalSerializables.js +2 -6
  145. package/lib/util/runtime.js +3 -3
  146. package/lib/util/source.js +2 -2
  147. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +3 -2
  148. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +3 -2
  149. package/lib/wasm-sync/WebAssemblyGenerator.js +9 -6
  150. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +3 -2
  151. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +6 -2
  152. package/lib/webpack.js +1 -1
  153. package/package.json +29 -25
  154. package/schemas/WebpackOptions.check.js +1 -1
  155. package/schemas/WebpackOptions.json +59 -82
  156. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -1
  157. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  158. package/types.d.ts +225 -157
  159. package/lib/ModuleSourceTypesConstants.js +0 -117
  160. package/lib/dependencies/CssIcssFromIdentifierDependency.js +0 -124
  161. package/lib/dependencies/CssIcssGlobalIdentifierDependency.js +0 -48
  162. package/lib/dependencies/CssIcssLocalIdentifierDependency.js +0 -61
  163. package/lib/dependencies/CssIcssSelfLocalIdentifierDependency.js +0 -190
  164. package/lib/util/jsonParseEvenBetterErrors.js +0 -10
  165. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  166. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  167. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  168. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  169. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  170. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  171. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +0 -7
  172. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  173. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  174. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +0 -7
  175. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  176. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -7,6 +7,11 @@
7
7
 
8
8
  const fs = require("fs");
9
9
  const path = require("path");
10
+ const {
11
+ CSS_TYPE,
12
+ JAVASCRIPT_TYPE,
13
+ UNKNOWN_TYPE
14
+ } = require("../ModuleSourceTypeConstants");
10
15
  const {
11
16
  ASSET_MODULE_TYPE,
12
17
  ASSET_MODULE_TYPE_BYTES,
@@ -52,6 +57,9 @@ const {
52
57
  /** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
53
58
  /** @typedef {import("../../declarations/WebpackOptions").Loader} Loader */
54
59
  /** @typedef {import("../../declarations/WebpackOptions").Mode} Mode */
60
+ /** @typedef {import("../../declarations/WebpackOptions").HashSalt} HashSalt */
61
+ /** @typedef {import("../../declarations/WebpackOptions").HashSalt} HashDigest */
62
+ /** @typedef {import("../../declarations/WebpackOptions").HashDigestLength} HashDigestLength */
55
63
  /** @typedef {import("../../declarations/WebpackOptions").ModuleOptionsNormalized} ModuleOptions */
56
64
  /** @typedef {import("../../declarations/WebpackOptions").Node} WebpackNode */
57
65
  /** @typedef {import("../../declarations/WebpackOptions").OptimizationNormalized} Optimization */
@@ -390,6 +398,15 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
390
398
 
391
399
  applyModuleDefaults(options.module, {
392
400
  cache,
401
+ hashSalt: /** @type {NonNullable<Output["hashSalt"]>} */ (
402
+ options.output.hashSalt
403
+ ),
404
+ hashDigest: /** @type {NonNullable<Output["hashDigest"]>} */ (
405
+ options.output.hashDigest
406
+ ),
407
+ hashDigestLength: /** @type {NonNullable<Output["hashDigestLength"]>} */ (
408
+ options.output.hashDigestLength
409
+ ),
393
410
  syncWebAssembly:
394
411
  /** @type {NonNullable<ExperimentsNormalized["syncWebAssembly"]>} */
395
412
  (options.experiments.syncWebAssembly),
@@ -766,11 +783,17 @@ const applyCssGeneratorOptionsDefaults = (
766
783
  * @param {boolean} options.deferImport is defer import enabled
767
784
  * @param {TargetProperties | false} options.targetProperties target properties
768
785
  * @param {Mode | undefined} options.mode mode
786
+ * @param {HashSalt} options.hashSalt hash salt
787
+ * @param {HashDigest} options.hashDigest hash digest
788
+ * @param {HashDigestLength} options.hashDigestLength hash digest length
769
789
  * @returns {void}
770
790
  */
771
791
  const applyModuleDefaults = (
772
792
  module,
773
793
  {
794
+ hashSalt,
795
+ hashDigest,
796
+ hashDigestLength,
774
797
  cache,
775
798
  syncWebAssembly,
776
799
  asyncWebAssembly,
@@ -871,6 +894,51 @@ const applyModuleDefaults = (
871
894
  true
872
895
  );
873
896
 
897
+ for (const type of [
898
+ CSS_MODULE_TYPE_AUTO,
899
+ CSS_MODULE_TYPE_MODULE,
900
+ CSS_MODULE_TYPE_GLOBAL
901
+ ]) {
902
+ F(module.parser, type, () => ({}));
903
+
904
+ D(
905
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
906
+ (module.parser[type]),
907
+ "animation",
908
+ true
909
+ );
910
+ D(
911
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
912
+ (module.parser[type]),
913
+ "container",
914
+ true
915
+ );
916
+ D(
917
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
918
+ (module.parser[type]),
919
+ "customIdents",
920
+ true
921
+ );
922
+ D(
923
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
924
+ (module.parser[type]),
925
+ "dashedIdents",
926
+ true
927
+ );
928
+ D(
929
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
930
+ (module.parser[type]),
931
+ "function",
932
+ true
933
+ );
934
+ D(
935
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
936
+ (module.parser[type]),
937
+ "grid",
938
+ true
939
+ );
940
+ }
941
+
874
942
  F(module.generator, CSS_MODULE_TYPE, () => ({}));
875
943
 
876
944
  applyCssGeneratorOptionsDefaults(
@@ -880,49 +948,58 @@ const applyModuleDefaults = (
880
948
  );
881
949
 
882
950
  const localIdentName =
883
- uniqueName.length > 0 ? "[uniqueName]-[id]-[local]" : "[id]-[local]";
951
+ mode === "development"
952
+ ? uniqueName.length > 0
953
+ ? "[uniqueName]-[id]-[local]"
954
+ : "[id]-[local]"
955
+ : "[fullhash]";
956
+ const localIdentHashSalt = hashSalt;
957
+ const localIdentHashDigest = "base64url";
958
+ const localIdentHashDigestLength = 6;
959
+ const exportsConvention = "as-is";
960
+
961
+ for (const type of [
962
+ CSS_MODULE_TYPE_AUTO,
963
+ CSS_MODULE_TYPE_MODULE,
964
+ CSS_MODULE_TYPE_GLOBAL
965
+ ]) {
966
+ F(module.generator, type, () => ({}));
884
967
 
885
- F(module.generator, CSS_MODULE_TYPE_AUTO, () => ({}));
886
- D(
887
- /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]>} */
888
- (module.generator[CSS_MODULE_TYPE_AUTO]),
889
- "localIdentName",
890
- localIdentName
891
- );
892
- D(
893
- /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]>} */
894
- (module.generator[CSS_MODULE_TYPE_AUTO]),
895
- "exportsConvention",
896
- "as-is"
897
- );
968
+ D(
969
+ /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
970
+ (module.generator[type]),
971
+ "localIdentName",
972
+ localIdentName
973
+ );
898
974
 
899
- F(module.generator, CSS_MODULE_TYPE_MODULE, () => ({}));
900
- D(
901
- /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]>} */
902
- (module.generator[CSS_MODULE_TYPE_MODULE]),
903
- "localIdentName",
904
- localIdentName
905
- );
906
- D(
907
- /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]>} */
908
- (module.generator[CSS_MODULE_TYPE_MODULE]),
909
- "exportsConvention",
910
- "as-is"
911
- );
975
+ D(
976
+ /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
977
+ (module.generator[type]),
978
+ "localIdentHashSalt",
979
+ localIdentHashSalt
980
+ );
912
981
 
913
- F(module.generator, CSS_MODULE_TYPE_GLOBAL, () => ({}));
914
- D(
915
- /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
916
- (module.generator[CSS_MODULE_TYPE_GLOBAL]),
917
- "localIdentName",
918
- localIdentName
919
- );
920
- D(
921
- /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
922
- (module.generator[CSS_MODULE_TYPE_GLOBAL]),
923
- "exportsConvention",
924
- "as-is"
925
- );
982
+ D(
983
+ /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]>} */
984
+ (module.generator[type]),
985
+ "localIdentHashDigest",
986
+ localIdentHashDigest
987
+ );
988
+
989
+ D(
990
+ /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]>} */
991
+ (module.generator[type]),
992
+ "localIdentHashDigestLength",
993
+ localIdentHashDigestLength
994
+ );
995
+
996
+ D(
997
+ /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
998
+ (module.generator[type]),
999
+ "exportsConvention",
1000
+ exportsConvention
1001
+ );
1002
+ }
926
1003
  }
927
1004
 
928
1005
  A(module, "defaultRules", () => {
@@ -1218,6 +1295,12 @@ const applyOutputDefaults = (
1218
1295
  "const",
1219
1296
  () => tp && optimistic(/** @type {boolean | undefined} */ (tp.const))
1220
1297
  );
1298
+ F(
1299
+ environment,
1300
+ "methodShorthand",
1301
+ () =>
1302
+ tp && optimistic(/** @type {boolean | undefined} */ (tp.methodShorthand))
1303
+ );
1221
1304
  F(
1222
1305
  environment,
1223
1306
  "arrowFunction",
@@ -1331,7 +1414,7 @@ const applyOutputDefaults = (
1331
1414
  }
1332
1415
  return "[id].css";
1333
1416
  });
1334
- D(output, "assetModuleFilename", "[hash][ext][query]");
1417
+ D(output, "assetModuleFilename", "[hash][ext][query][fragment]");
1335
1418
  D(output, "webassemblyModuleFilename", "[hash].module.wasm");
1336
1419
  D(output, "compareBeforeEmit", true);
1337
1420
  D(output, "charset", !futureDefaults);
@@ -1516,7 +1599,7 @@ const applyOutputDefaults = (
1516
1599
  */
1517
1600
  const forEachEntry = (fn) => {
1518
1601
  for (const name of Object.keys(entry)) {
1519
- fn(/** @type {{[k: string] : EntryDescription}} */ (entry)[name]);
1602
+ fn(/** @type {{ [k: string]: EntryDescription }} */ (entry)[name]);
1520
1603
  }
1521
1604
  };
1522
1605
  A(output, "enabledLibraryTypes", () => {
@@ -1792,7 +1875,9 @@ const applyOptimizationDefaults = (
1792
1875
  const { splitChunks } = optimization;
1793
1876
  if (splitChunks) {
1794
1877
  A(splitChunks, "defaultSizeTypes", () =>
1795
- css ? ["javascript", "css", "unknown"] : ["javascript", "unknown"]
1878
+ css
1879
+ ? [JAVASCRIPT_TYPE, CSS_TYPE, UNKNOWN_TYPE]
1880
+ : [JAVASCRIPT_TYPE, UNKNOWN_TYPE]
1796
1881
  );
1797
1882
  D(splitChunks, "hidePathInfo", production);
1798
1883
  D(splitChunks, "chunks", "async");
@@ -54,7 +54,7 @@ const nestedConfig = (value, fn) =>
54
54
 
55
55
  /**
56
56
  * @template T
57
- * @param {T|undefined} value value or not
57
+ * @param {T | undefined} value value or not
58
58
  * @returns {T} result value
59
59
  */
60
60
  const cloneObject = (value) => /** @type {T} */ ({ ...value });
@@ -90,7 +90,7 @@ const optionalNestedArray = (value, fn) =>
90
90
  /**
91
91
  * @template T
92
92
  * @template R
93
- * @param {Record<string, T>|undefined} value value or not
93
+ * @param {Record<string, T> | undefined} value value or not
94
94
  * @param {(value: T) => R} fn nested handler
95
95
  * @param {Record<string, (value: T) => R>=} customKeys custom nested handler for some keys
96
96
  * @returns {Record<string, R>} result value
@@ -55,6 +55,7 @@ const getDefaultTarget = (context) => {
55
55
  * @property {boolean | null} globalThis has globalThis variable available
56
56
  * @property {boolean | null} bigIntLiteral big int literal syntax is available
57
57
  * @property {boolean | null} const const and let variable declarations are available
58
+ * @property {boolean | null} methodShorthand object method shorthand is available
58
59
  * @property {boolean | null} arrowFunction arrow functions are available
59
60
  * @property {boolean | null} forOf for of iteration is available
60
61
  * @property {boolean | null} destructuring destructuring is available
@@ -192,6 +193,7 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
192
193
  const: v(6),
193
194
  templateLiteral: v(4),
194
195
  optionalChaining: v(14),
196
+ methodShorthand: v(4),
195
197
  arrowFunction: v(6),
196
198
  asyncFunction: v(7, 6),
197
199
  forOf: v(5),
@@ -240,6 +242,7 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
240
242
  const: v(1, 1),
241
243
  templateLiteral: v(1, 1),
242
244
  optionalChaining: v(8),
245
+ methodShorthand: v(1, 1),
243
246
  arrowFunction: v(1, 1),
244
247
  asyncFunction: v(1, 7),
245
248
  forOf: v(0, 36),
@@ -278,6 +281,7 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
278
281
  const: v(0, 15),
279
282
  templateLiteral: v(0, 13),
280
283
  optionalChaining: v(0, 44),
284
+ methodShorthand: v(0, 15),
281
285
  arrowFunction: v(0, 15),
282
286
  asyncFunction: v(0, 21),
283
287
  forOf: v(0, 13),
@@ -300,6 +304,7 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
300
304
  const: v >= 2015,
301
305
  templateLiteral: v >= 2015,
302
306
  optionalChaining: v >= 2020,
307
+ methodShorthand: v >= 2015,
303
308
  arrowFunction: v >= 2015,
304
309
  forOf: v >= 2015,
305
310
  destructuring: v >= 2015,
@@ -8,7 +8,10 @@
8
8
  const { OriginalSource, RawSource } = require("webpack-sources");
9
9
  const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
10
10
  const Module = require("../Module");
11
- const { JS_TYPES } = require("../ModuleSourceTypesConstants");
11
+ const {
12
+ JAVASCRIPT_TYPE,
13
+ JAVASCRIPT_TYPES
14
+ } = require("../ModuleSourceTypeConstants");
12
15
  const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("../ModuleTypeConstants");
13
16
  const RuntimeGlobals = require("../RuntimeGlobals");
14
17
  const Template = require("../Template");
@@ -57,7 +60,7 @@ class ContainerEntryModule extends Module {
57
60
  * @returns {SourceTypes} types available (do not mutate)
58
61
  */
59
62
  getSourceTypes() {
60
- return JS_TYPES;
63
+ return JAVASCRIPT_TYPES;
61
64
  }
62
65
 
63
66
  /**
@@ -242,7 +245,7 @@ class ContainerEntryModule extends Module {
242
245
  ]);
243
246
 
244
247
  sources.set(
245
- "javascript",
248
+ JAVASCRIPT_TYPE,
246
249
  this.useSourceMap || this.useSimpleSourceMap
247
250
  ? new OriginalSource(source, "webpack/container-entry")
248
251
  : new RawSource(source)
@@ -7,7 +7,10 @@
7
7
 
8
8
  const { RawSource } = require("webpack-sources");
9
9
  const Module = require("../Module");
10
- const { JS_TYPES } = require("../ModuleSourceTypesConstants");
10
+ const {
11
+ JAVASCRIPT_TYPE,
12
+ JAVASCRIPT_TYPES
13
+ } = require("../ModuleSourceTypeConstants");
11
14
  const { WEBPACK_MODULE_TYPE_FALLBACK } = require("../ModuleTypeConstants");
12
15
  const RuntimeGlobals = require("../RuntimeGlobals");
13
16
  const Template = require("../Template");
@@ -122,7 +125,7 @@ class FallbackModule extends Module {
122
125
  * @returns {SourceTypes} types available (do not mutate)
123
126
  */
124
127
  getSourceTypes() {
125
- return JS_TYPES;
128
+ return JAVASCRIPT_TYPES;
126
129
  }
127
130
 
128
131
  /**
@@ -156,7 +159,7 @@ class FallbackModule extends Module {
156
159
  "module.exports = loop();"
157
160
  ]);
158
161
  const sources = new Map();
159
- sources.set("javascript", new RawSource(code));
162
+ sources.set(JAVASCRIPT_TYPE, new RawSource(code));
160
163
  return { sources, runtimeRequirements: RUNTIME_REQUIREMENTS };
161
164
  }
162
165
 
@@ -7,9 +7,7 @@
7
7
 
8
8
  const { RawSource } = require("webpack-sources");
9
9
  const Module = require("../Module");
10
- const {
11
- REMOTE_AND_SHARE_INIT_TYPES
12
- } = require("../ModuleSourceTypesConstants");
10
+ const { REMOTE_AND_SHARE_INIT_TYPES } = require("../ModuleSourceTypeConstants");
13
11
  const { WEBPACK_MODULE_TYPE_REMOTE } = require("../ModuleTypeConstants");
14
12
  const RuntimeGlobals = require("../RuntimeGlobals");
15
13
  const makeSerializable = require("../util/makeSerializable");
@@ -12,10 +12,10 @@ const InitFragment = require("../InitFragment");
12
12
  const {
13
13
  CSS_TYPE,
14
14
  CSS_TYPES,
15
- JS_AND_CSS_TYPES,
16
- JS_TYPE,
17
- JS_TYPES
18
- } = require("../ModuleSourceTypesConstants");
15
+ JAVASCRIPT_AND_CSS_TYPES,
16
+ JAVASCRIPT_TYPE,
17
+ JAVASCRIPT_TYPES
18
+ } = require("../ModuleSourceTypeConstants");
19
19
  const RuntimeGlobals = require("../RuntimeGlobals");
20
20
  const Template = require("../Template");
21
21
  const CssImportDependency = require("../dependencies/CssImportDependency");
@@ -23,8 +23,6 @@ const { getUndoPath } = require("../util/identifier");
23
23
  const memoize = require("../util/memoize");
24
24
 
25
25
  /** @typedef {import("webpack-sources").Source} Source */
26
- /** @typedef {import("../../declarations/WebpackOptions").CssAutoGeneratorOptions} CssAutoGeneratorOptions */
27
- /** @typedef {import("../../declarations/WebpackOptions").CssGlobalGeneratorOptions} CssGlobalGeneratorOptions */
28
26
  /** @typedef {import("../../declarations/WebpackOptions").CssModuleGeneratorOptions} CssModuleGeneratorOptions */
29
27
  /** @typedef {import("../Compilation").DependencyConstructor} DependencyConstructor */
30
28
  /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
@@ -36,6 +34,7 @@ const memoize = require("../util/memoize");
36
34
  /** @typedef {import("../Module").BuildInfo} BuildInfo */
37
35
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
38
36
  /** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
37
+ /** @typedef {import("../Module").SourceType} SourceType */
39
38
  /** @typedef {import("../Module").SourceTypes} SourceTypes */
40
39
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
41
40
  /** @typedef {import("../NormalModule")} NormalModule */
@@ -51,13 +50,12 @@ const getCssModulesPlugin = memoize(() => require("./CssModulesPlugin"));
51
50
 
52
51
  class CssGenerator extends Generator {
53
52
  /**
54
- * @param {CssAutoGeneratorOptions | CssGlobalGeneratorOptions | CssModuleGeneratorOptions} options options
53
+ * @param {CssModuleGeneratorOptions} options options
55
54
  * @param {ModuleGraph} moduleGraph the module graph
56
55
  */
57
56
  constructor(options, moduleGraph) {
58
57
  super();
59
- this.convention = options.exportsConvention;
60
- this.localIdentName = options.localIdentName;
58
+ this.options = options;
61
59
  this._exportsOnly = options.exportsOnly;
62
60
  this._esModule = options.esModule;
63
61
  this._moduleGraph = moduleGraph;
@@ -127,7 +125,7 @@ class CssGenerator extends Generator {
127
125
  const moduleSourceContent = /** @type {Source} */ (
128
126
  this.generate(module, {
129
127
  ...generateContext,
130
- type: "css"
128
+ type: CSS_TYPE
131
129
  })
132
130
  );
133
131
 
@@ -266,7 +264,7 @@ class CssGenerator extends Generator {
266
264
  generate(module, generateContext) {
267
265
  const exportType = /** @type {BuildMeta} */ (module.buildMeta).exportType;
268
266
  const source =
269
- generateContext.type === "javascript"
267
+ generateContext.type === JAVASCRIPT_TYPE
270
268
  ? exportType === "link"
271
269
  ? new ReplaceSource(new RawSource(""))
272
270
  : new ReplaceSource(/** @type {Source} */ (module.originalSource()))
@@ -330,7 +328,7 @@ class CssGenerator extends Generator {
330
328
  };
331
329
 
332
330
  switch (generateContext.type) {
333
- case "javascript": {
331
+ case JAVASCRIPT_TYPE: {
334
332
  const isCSSModule = /** @type {BuildMeta} */ (module.buildMeta)
335
333
  .isCSSModule;
336
334
  const defaultExport = generateJSDefaultExport();
@@ -374,14 +372,15 @@ class CssGenerator extends Generator {
374
372
  if (!usedName) {
375
373
  continue;
376
374
  }
377
- let identifier = Template.toIdentifier(usedName);
378
375
 
376
+ let identifier = Template.toIdentifier(usedName);
379
377
  if (RESERVED_IDENTIFIER.has(identifier)) {
380
378
  identifier = `_${identifier}`;
381
379
  }
382
- const i = 0;
380
+ let i = 0;
383
381
  while (usedIdentifiers.has(identifier)) {
384
382
  identifier = Template.toIdentifier(name + i);
383
+ i += 1;
385
384
  }
386
385
  usedIdentifiers.add(identifier);
387
386
  generateContext.concatenationScope.registerExport(name, identifier);
@@ -428,7 +427,7 @@ class CssGenerator extends Generator {
428
427
  }.exports = {\n${exports.join(",\n")}\n}${needNsObj ? ")" : ""};`
429
428
  );
430
429
  }
431
- case "css": {
430
+ case CSS_TYPE: {
432
431
  if (!this._generatesJsOnly(module)) {
433
432
  generateContext.runtimeRequirements.add(RuntimeGlobals.hasCssModules);
434
433
  }
@@ -448,12 +447,12 @@ class CssGenerator extends Generator {
448
447
  */
449
448
  generateError(error, module, generateContext) {
450
449
  switch (generateContext.type) {
451
- case "javascript": {
450
+ case JAVASCRIPT_TYPE: {
452
451
  return new RawSource(
453
452
  `throw new Error(${JSON.stringify(error.message)});`
454
453
  );
455
454
  }
456
- case "css": {
455
+ case CSS_TYPE: {
457
456
  return new RawSource(`/**\n ${error.message} \n**/`);
458
457
  }
459
458
  default:
@@ -467,32 +466,35 @@ class CssGenerator extends Generator {
467
466
  */
468
467
  getTypes(module) {
469
468
  if (this._generatesJsOnly(module)) {
470
- return JS_TYPES;
469
+ return JAVASCRIPT_TYPES;
471
470
  }
472
471
  const sourceTypes = new Set();
473
472
  const connections = this._moduleGraph.getIncomingConnections(module);
474
473
  for (const connection of connections) {
474
+ if (connection.dependency instanceof CssImportDependency) {
475
+ continue;
476
+ }
475
477
  if (!connection.originModule) {
476
478
  continue;
477
479
  }
478
480
  if (connection.originModule.type.split("/")[0] !== CSS_TYPE) {
479
- sourceTypes.add(JS_TYPE);
481
+ sourceTypes.add(JAVASCRIPT_TYPE);
480
482
  }
481
483
  }
482
- if (sourceTypes.has(JS_TYPE)) {
483
- return JS_AND_CSS_TYPES;
484
+ if (sourceTypes.has(JAVASCRIPT_TYPE)) {
485
+ return JAVASCRIPT_AND_CSS_TYPES;
484
486
  }
485
487
  return CSS_TYPES;
486
488
  }
487
489
 
488
490
  /**
489
491
  * @param {NormalModule} module the module
490
- * @param {string=} type source type
492
+ * @param {SourceType=} type source type
491
493
  * @returns {number} estimate size of the module
492
494
  */
493
495
  getSize(module, type) {
494
496
  switch (type) {
495
- case "javascript": {
497
+ case JAVASCRIPT_TYPE: {
496
498
  const cssData = /** @type {BuildInfo} */ (module.buildInfo).cssData;
497
499
  if (!cssData) {
498
500
  return 42;
@@ -513,7 +515,7 @@ class CssGenerator extends Generator {
513
515
 
514
516
  return stringifiedExports.length + 42;
515
517
  }
516
- case "css": {
518
+ case CSS_TYPE: {
517
519
  const originalSource = module.originalSource();
518
520
 
519
521
  if (!originalSource) {
@@ -7,6 +7,7 @@
7
7
 
8
8
  const { SyncWaterfallHook } = require("tapable");
9
9
  const Compilation = require("../Compilation");
10
+ const { CSS_TYPE } = require("../ModuleSourceTypeConstants");
10
11
  const RuntimeGlobals = require("../RuntimeGlobals");
11
12
  const RuntimeModule = require("../RuntimeModule");
12
13
  const Template = require("../Template");
@@ -86,7 +87,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
86
87
  * @returns {boolean} true, if the chunk has css
87
88
  */
88
89
  (chunk, chunkGraph) =>
89
- Boolean(chunkGraph.getChunkModulesIterableBySourceType(chunk, "css"))
90
+ Boolean(chunkGraph.getChunkModulesIterableBySourceType(chunk, CSS_TYPE))
90
91
  );
91
92
  const hasCssMatcher = compileBooleanMatcher(conditionMap);
92
93
 
@@ -429,7 +430,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
429
430
  "while(oldTags.length) {",
430
431
  Template.indent([
431
432
  "var oldTag = oldTags.pop();",
432
- "if(oldTag.parentNode) oldTag.parentNode.removeChild(oldTag);"
433
+ "if(oldTag && oldTag.parentNode) oldTag.parentNode.removeChild(oldTag);"
433
434
  ]),
434
435
  "}"
435
436
  ])}, apply: ${runtimeTemplate.basicFunction("", [
@@ -451,17 +452,24 @@ class CssLoadingRuntimeModule extends RuntimeModule {
451
452
  `${
452
453
  RuntimeGlobals.hmrDownloadUpdateHandlers
453
454
  }.css = ${runtimeTemplate.basicFunction(
454
- "chunkIds, removedChunks, removedModules, promises, applyHandlers, updatedModulesList",
455
+ "chunkIds, removedChunks, removedModules, promises, applyHandlers, updatedModulesList, css",
455
456
  [
456
457
  isNeutralPlatform
457
458
  ? "if (typeof document === 'undefined') return;"
458
459
  : "",
459
460
  "applyHandlers.push(applyHandler);",
461
+ "// Read CSS removed chunks from update manifest",
462
+ "var cssRemovedChunks = css && css.r;",
460
463
  `chunkIds.forEach(${runtimeTemplate.basicFunction("chunkId", [
461
464
  `var filename = ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
462
465
  `var url = ${RuntimeGlobals.publicPath} + filename;`,
463
466
  "var oldTag = loadStylesheet(chunkId, url);",
464
- "if(!oldTag) return;",
467
+ `if(!oldTag && !${withHmr} ) return;`,
468
+ "// Skip if CSS was removed",
469
+ "if(cssRemovedChunks && cssRemovedChunks.indexOf(chunkId) >= 0) {",
470
+ Template.indent(["oldTags.push(oldTag);", "return;"]),
471
+ "}",
472
+ "",
465
473
  "// create error before stack unwound to get useful stacktrace later",
466
474
  "var error = new Error();",
467
475
  `promises.push(new Promise(${runtimeTemplate.basicFunction(