webpack 5.59.0 → 5.76.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 (236) hide show
  1. package/README.md +22 -24
  2. package/bin/webpack.js +0 -0
  3. package/hot/dev-server.js +17 -4
  4. package/hot/lazy-compilation-node.js +3 -1
  5. package/hot/poll.js +1 -1
  6. package/hot/signal.js +1 -1
  7. package/lib/APIPlugin.js +33 -0
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +1 -1
  10. package/lib/CacheFacade.js +4 -11
  11. package/lib/Chunk.js +6 -3
  12. package/lib/ChunkGraph.js +94 -8
  13. package/lib/ChunkGroup.js +1 -1
  14. package/lib/CleanPlugin.js +81 -20
  15. package/lib/Compilation.js +188 -93
  16. package/lib/Compiler.js +87 -18
  17. package/lib/ConstPlugin.js +2 -2
  18. package/lib/ContextModule.js +142 -51
  19. package/lib/ContextModuleFactory.js +65 -25
  20. package/lib/DelegatedModule.js +1 -1
  21. package/lib/DelegatedModuleFactoryPlugin.js +1 -1
  22. package/lib/Dependency.js +17 -0
  23. package/lib/DependencyTemplate.js +9 -0
  24. package/lib/DependencyTemplates.js +1 -1
  25. package/lib/DllModule.js +1 -1
  26. package/lib/DllReferencePlugin.js +1 -1
  27. package/lib/EntryOptionPlugin.js +2 -0
  28. package/lib/ErrorHelpers.js +2 -2
  29. package/lib/EvalDevToolModulePlugin.js +16 -1
  30. package/lib/EvalSourceMapDevToolPlugin.js +25 -4
  31. package/lib/ExportsInfo.js +5 -5
  32. package/lib/ExternalModule.js +94 -54
  33. package/lib/ExternalModuleFactoryPlugin.js +5 -5
  34. package/lib/FileSystemInfo.js +124 -58
  35. package/lib/Generator.js +3 -0
  36. package/lib/HookWebpackError.js +1 -1
  37. package/lib/HotModuleReplacementPlugin.js +3 -1
  38. package/lib/LoaderOptionsPlugin.js +1 -1
  39. package/lib/Module.js +28 -4
  40. package/lib/ModuleFilenameHelpers.js +8 -4
  41. package/lib/ModuleHashingError.js +29 -0
  42. package/lib/MultiCompiler.js +1 -1
  43. package/lib/MultiWatching.js +1 -1
  44. package/lib/NodeStuffPlugin.js +13 -3
  45. package/lib/NormalModule.js +51 -33
  46. package/lib/NormalModuleFactory.js +42 -37
  47. package/lib/ProgressPlugin.js +4 -5
  48. package/lib/RawModule.js +1 -1
  49. package/lib/RuntimeGlobals.js +29 -1
  50. package/lib/RuntimeModule.js +1 -1
  51. package/lib/RuntimePlugin.js +84 -1
  52. package/lib/RuntimeTemplate.js +114 -2
  53. package/lib/Template.js +3 -2
  54. package/lib/TemplatedPathPlugin.js +48 -23
  55. package/lib/WatchIgnorePlugin.js +19 -7
  56. package/lib/Watching.js +33 -19
  57. package/lib/WebpackOptionsApply.js +79 -11
  58. package/lib/asset/AssetGenerator.js +228 -71
  59. package/lib/asset/AssetModulesPlugin.js +3 -0
  60. package/lib/asset/AssetParser.js +1 -0
  61. package/lib/asset/AssetSourceGenerator.js +31 -6
  62. package/lib/asset/AssetSourceParser.js +1 -0
  63. package/lib/asset/RawDataUrlModule.js +148 -0
  64. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
  65. package/lib/buildChunkGraph.js +38 -7
  66. package/lib/cache/PackFileCacheStrategy.js +15 -8
  67. package/lib/cache/ResolverCachePlugin.js +90 -29
  68. package/lib/cli.js +44 -3
  69. package/lib/config/browserslistTargetHandler.js +41 -6
  70. package/lib/config/defaults.js +123 -19
  71. package/lib/config/normalization.js +10 -2
  72. package/lib/config/target.js +10 -0
  73. package/lib/container/ContainerEntryModule.js +8 -5
  74. package/lib/container/FallbackModule.js +4 -4
  75. package/lib/container/ModuleFederationPlugin.js +2 -0
  76. package/lib/container/RemoteModule.js +4 -2
  77. package/lib/container/RemoteRuntimeModule.js +8 -7
  78. package/lib/css/CssExportsGenerator.js +139 -0
  79. package/lib/css/CssGenerator.js +109 -0
  80. package/lib/css/CssLoadingRuntimeModule.js +442 -0
  81. package/lib/css/CssModulesPlugin.js +462 -0
  82. package/lib/css/CssParser.js +618 -0
  83. package/lib/css/walkCssTokens.js +659 -0
  84. package/lib/debug/ProfilingPlugin.js +24 -21
  85. package/lib/dependencies/AMDRequireDependency.js +6 -6
  86. package/lib/dependencies/CommonJsExportsParserPlugin.js +1 -2
  87. package/lib/dependencies/CommonJsFullRequireDependency.js +5 -1
  88. package/lib/dependencies/CommonJsImportsParserPlugin.js +344 -61
  89. package/lib/dependencies/CommonJsRequireContextDependency.js +6 -2
  90. package/lib/dependencies/CommonJsRequireDependency.js +2 -1
  91. package/lib/dependencies/ContextDependency.js +16 -2
  92. package/lib/dependencies/ContextDependencyHelpers.js +21 -8
  93. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  94. package/lib/dependencies/ContextElementDependency.js +25 -3
  95. package/lib/dependencies/CreateScriptUrlDependency.js +12 -0
  96. package/lib/dependencies/CssExportDependency.js +85 -0
  97. package/lib/dependencies/CssImportDependency.js +75 -0
  98. package/lib/dependencies/CssLocalIdentifierDependency.js +119 -0
  99. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +101 -0
  100. package/lib/dependencies/CssUrlDependency.js +132 -0
  101. package/lib/dependencies/ExportsInfoDependency.js +6 -0
  102. package/lib/dependencies/HarmonyAcceptImportDependency.js +5 -3
  103. package/lib/dependencies/HarmonyCompatibilityDependency.js +5 -5
  104. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +127 -0
  105. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +12 -3
  106. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +25 -17
  107. package/lib/dependencies/HarmonyExportInitFragment.js +4 -1
  108. package/lib/dependencies/HarmonyImportDependency.js +23 -0
  109. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +142 -45
  110. package/lib/dependencies/HarmonyImportSpecifierDependency.js +46 -22
  111. package/lib/dependencies/HarmonyModulesPlugin.js +10 -0
  112. package/lib/dependencies/ImportContextDependency.js +0 -2
  113. package/lib/dependencies/ImportMetaContextDependency.js +35 -0
  114. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +252 -0
  115. package/lib/dependencies/ImportMetaContextPlugin.js +59 -0
  116. package/lib/dependencies/ImportMetaPlugin.js +22 -3
  117. package/lib/dependencies/ImportParserPlugin.js +35 -29
  118. package/lib/dependencies/JsonExportsDependency.js +17 -21
  119. package/lib/dependencies/LoaderDependency.js +13 -0
  120. package/lib/dependencies/LoaderImportDependency.js +13 -0
  121. package/lib/dependencies/LoaderPlugin.js +4 -2
  122. package/lib/dependencies/ModuleDependency.js +11 -1
  123. package/lib/dependencies/ProvidedDependency.js +31 -8
  124. package/lib/dependencies/RequireContextDependency.js +0 -16
  125. package/lib/dependencies/RequireEnsureDependency.js +2 -2
  126. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  127. package/lib/dependencies/RequireResolveDependency.js +2 -1
  128. package/lib/dependencies/URLDependency.js +3 -8
  129. package/lib/dependencies/URLPlugin.js +22 -1
  130. package/lib/dependencies/WorkerPlugin.js +2 -0
  131. package/lib/esm/ModuleChunkFormatPlugin.js +74 -49
  132. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -1
  133. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +25 -9
  134. package/lib/hmr/HotModuleReplacement.runtime.js +29 -14
  135. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +4 -3
  136. package/lib/hmr/LazyCompilationPlugin.js +54 -26
  137. package/lib/hmr/lazyCompilationBackend.js +51 -12
  138. package/lib/ids/DeterministicModuleIdsPlugin.js +55 -35
  139. package/lib/ids/HashedModuleIdsPlugin.js +11 -14
  140. package/lib/ids/IdHelpers.js +26 -12
  141. package/lib/ids/NamedModuleIdsPlugin.js +6 -9
  142. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  143. package/lib/ids/OccurrenceModuleIdsPlugin.js +13 -10
  144. package/lib/ids/SyncModuleIdsPlugin.js +140 -0
  145. package/lib/index.js +20 -0
  146. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +2 -2
  147. package/lib/javascript/BasicEvaluatedExpression.js +5 -2
  148. package/lib/javascript/ChunkHelpers.js +33 -0
  149. package/lib/javascript/JavascriptGenerator.js +1 -0
  150. package/lib/javascript/JavascriptModulesPlugin.js +27 -2
  151. package/lib/javascript/JavascriptParser.js +143 -73
  152. package/lib/javascript/StartupHelpers.js +7 -30
  153. package/lib/json/JsonData.js +8 -0
  154. package/lib/json/JsonParser.js +4 -6
  155. package/lib/library/AssignLibraryPlugin.js +39 -15
  156. package/lib/library/EnableLibraryPlugin.js +11 -0
  157. package/lib/library/UmdLibraryPlugin.js +5 -3
  158. package/lib/node/NodeTargetPlugin.js +3 -0
  159. package/lib/node/NodeWatchFileSystem.js +85 -31
  160. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +23 -8
  161. package/lib/node/RequireChunkLoadingRuntimeModule.js +24 -9
  162. package/lib/optimize/ConcatenatedModule.js +62 -26
  163. package/lib/optimize/ModuleConcatenationPlugin.js +26 -4
  164. package/lib/optimize/RealContentHashPlugin.js +45 -15
  165. package/lib/optimize/SplitChunksPlugin.js +8 -1
  166. package/lib/runtime/AsyncModuleRuntimeModule.js +50 -66
  167. package/lib/runtime/BaseUriRuntimeModule.js +31 -0
  168. package/lib/runtime/CreateScriptRuntimeModule.js +36 -0
  169. package/lib/runtime/CreateScriptUrlRuntimeModule.js +9 -34
  170. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +76 -0
  171. package/lib/runtime/LoadScriptRuntimeModule.js +11 -9
  172. package/lib/runtime/NonceRuntimeModule.js +24 -0
  173. package/lib/schemes/HttpUriPlugin.js +77 -14
  174. package/lib/serialization/FileMiddleware.js +44 -9
  175. package/lib/sharing/ConsumeSharedModule.js +8 -2
  176. package/lib/sharing/ConsumeSharedRuntimeModule.js +26 -5
  177. package/lib/sharing/ProvideSharedModule.js +4 -2
  178. package/lib/sharing/ProvideSharedPlugin.js +1 -2
  179. package/lib/sharing/ShareRuntimeModule.js +1 -1
  180. package/lib/sharing/utils.js +1 -1
  181. package/lib/stats/DefaultStatsFactoryPlugin.js +113 -68
  182. package/lib/stats/DefaultStatsPrinterPlugin.js +90 -25
  183. package/lib/util/ArrayHelpers.js +30 -0
  184. package/lib/util/AsyncQueue.js +1 -1
  185. package/lib/util/compileBooleanMatcher.js +1 -1
  186. package/lib/util/create-schema-validation.js +9 -2
  187. package/lib/util/createHash.js +12 -0
  188. package/lib/util/deprecation.js +10 -2
  189. package/lib/util/deterministicGrouping.js +1 -1
  190. package/lib/util/extractUrlAndGlobal.js +3 -0
  191. package/lib/util/fs.js +11 -0
  192. package/lib/util/hash/BatchedHash.js +7 -4
  193. package/lib/util/hash/md4.js +20 -0
  194. package/lib/util/hash/wasm-hash.js +163 -0
  195. package/lib/util/hash/xxhash64.js +5 -139
  196. package/lib/util/identifier.js +65 -44
  197. package/lib/util/internalSerializables.js +15 -0
  198. package/lib/util/nonNumericOnlyHash.js +22 -0
  199. package/lib/util/semver.js +17 -10
  200. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +9 -3
  201. package/lib/wasm-sync/WebAssemblyParser.js +1 -1
  202. package/lib/web/JsonpChunkLoadingRuntimeModule.js +31 -18
  203. package/lib/webpack.js +10 -3
  204. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -11
  205. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +33 -22
  206. package/module.d.ts +215 -0
  207. package/package.json +28 -32
  208. package/schemas/WebpackOptions.check.js +1 -1
  209. package/schemas/WebpackOptions.json +321 -30
  210. package/schemas/plugins/BannerPlugin.check.js +1 -1
  211. package/schemas/plugins/BannerPlugin.json +4 -0
  212. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  213. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  214. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  215. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  216. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  217. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  218. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  219. package/schemas/plugins/container/ContainerPlugin.json +2 -1
  220. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  221. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  222. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  223. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  224. package/schemas/plugins/container/ModuleFederationPlugin.json +3 -1
  225. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  226. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  227. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  228. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  229. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  230. package/schemas/plugins/css/CssParserOptions.json +3 -0
  231. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  232. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  233. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  234. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  235. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  236. package/types.d.ts +869 -296
@@ -28,8 +28,8 @@ const splitContextFromPrefix = prefix => {
28
28
  const idx = prefix.lastIndexOf("/");
29
29
  let context = ".";
30
30
  if (idx >= 0) {
31
- context = prefix.substr(0, idx);
32
- prefix = `.${prefix.substr(idx)}`;
31
+ context = prefix.slice(0, idx);
32
+ prefix = `.${prefix.slice(idx)}`;
33
33
  }
34
34
  return {
35
35
  context,
@@ -37,9 +37,9 @@ const splitContextFromPrefix = prefix => {
37
37
  };
38
38
  };
39
39
 
40
- /** @typedef {Partial<Omit<ContextDependencyOptions, "resource"|"recursive"|"regExp">>} PartialContextDependencyOptions */
40
+ /** @typedef {Partial<Omit<ContextDependencyOptions, "resource">>} PartialContextDependencyOptions */
41
41
 
42
- /** @typedef {{ new(options: ContextDependencyOptions, range: [number, number], valueRange: [number, number]): ContextDependency }} ContextDependencyConstructor */
42
+ /** @typedef {{ new(options: ContextDependencyOptions, range: [number, number], valueRange: [number, number], ...args: any[]): ContextDependency }} ContextDependencyConstructor */
43
43
 
44
44
  /**
45
45
  * @param {ContextDependencyConstructor} Dep the Dependency class
@@ -49,9 +49,19 @@ const splitContextFromPrefix = prefix => {
49
49
  * @param {Pick<JavascriptParserOptions, `${"expr"|"wrapped"}Context${"Critical"|"Recursive"|"RegExp"}` | "exprContextRequest">} options options for context creation
50
50
  * @param {PartialContextDependencyOptions} contextOptions options for the ContextModule
51
51
  * @param {JavascriptParser} parser the parser
52
+ * @param {...any} depArgs depArgs
52
53
  * @returns {ContextDependency} the created Dependency
53
54
  */
54
- exports.create = (Dep, range, param, expr, options, contextOptions, parser) => {
55
+ exports.create = (
56
+ Dep,
57
+ range,
58
+ param,
59
+ expr,
60
+ options,
61
+ contextOptions,
62
+ parser,
63
+ ...depArgs
64
+ ) => {
55
65
  if (param.isTemplateString()) {
56
66
  let prefixRaw = param.quasis[0].string;
57
67
  let postfixRaw =
@@ -97,7 +107,8 @@ exports.create = (Dep, range, param, expr, options, contextOptions, parser) => {
97
107
  ...contextOptions
98
108
  },
99
109
  range,
100
- valueRange
110
+ valueRange,
111
+ ...depArgs
101
112
  );
102
113
  dep.loc = expr.loc;
103
114
  const replaces = [];
@@ -180,7 +191,8 @@ exports.create = (Dep, range, param, expr, options, contextOptions, parser) => {
180
191
  ...contextOptions
181
192
  },
182
193
  range,
183
- valueRange
194
+ valueRange,
195
+ ...depArgs
184
196
  );
185
197
  dep.loc = expr.loc;
186
198
  const replaces = [];
@@ -218,7 +230,8 @@ exports.create = (Dep, range, param, expr, options, contextOptions, parser) => {
218
230
  ...contextOptions
219
231
  },
220
232
  range,
221
- param.range
233
+ param.range,
234
+ ...depArgs
222
235
  );
223
236
  dep.loc = expr.loc;
224
237
  dep.critical =
@@ -24,13 +24,16 @@ class ContextDependencyTemplateAsRequireCall extends ContextDependency.Template
24
24
  { runtimeTemplate, moduleGraph, chunkGraph, runtimeRequirements }
25
25
  ) {
26
26
  const dep = /** @type {ContextDependency} */ (dependency);
27
- const moduleExports = runtimeTemplate.moduleExports({
27
+ let moduleExports = runtimeTemplate.moduleExports({
28
28
  module: moduleGraph.getModule(dep),
29
29
  chunkGraph,
30
30
  request: dep.request,
31
31
  runtimeRequirements
32
32
  });
33
33
 
34
+ if (dep.inShorthand) {
35
+ moduleExports = `${dep.inShorthand}: ${moduleExports}`;
36
+ }
34
37
  if (moduleGraph.getModule(dep)) {
35
38
  if (dep.valueRange) {
36
39
  if (Array.isArray(dep.replaces)) {
@@ -14,11 +14,27 @@ const ModuleDependency = require("./ModuleDependency");
14
14
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
15
15
 
16
16
  class ContextElementDependency extends ModuleDependency {
17
- constructor(request, userRequest, typePrefix, category, referencedExports) {
17
+ /**
18
+ * @param {string} request request
19
+ * @param {string|undefined} userRequest user request
20
+ * @param {string} typePrefix type prefix
21
+ * @param {string} category category
22
+ * @param {string[][]=} referencedExports referenced exports
23
+ * @param {string=} context context
24
+ */
25
+ constructor(
26
+ request,
27
+ userRequest,
28
+ typePrefix,
29
+ category,
30
+ referencedExports,
31
+ context
32
+ ) {
18
33
  super(request);
19
34
  this.referencedExports = referencedExports;
20
35
  this._typePrefix = typePrefix;
21
36
  this._category = category;
37
+ this._context = context || undefined;
22
38
 
23
39
  if (userRequest) {
24
40
  this.userRequest = userRequest;
@@ -53,12 +69,18 @@ class ContextElementDependency extends ModuleDependency {
53
69
  }
54
70
 
55
71
  serialize(context) {
56
- context.write(this.referencedExports);
72
+ const { write } = context;
73
+ write(this._typePrefix);
74
+ write(this._category);
75
+ write(this.referencedExports);
57
76
  super.serialize(context);
58
77
  }
59
78
 
60
79
  deserialize(context) {
61
- this.referencedExports = context.read();
80
+ const { read } = context;
81
+ this._typePrefix = read();
82
+ this._category = read();
83
+ this.referencedExports = read();
62
84
  super.deserialize(context);
63
85
  }
64
86
  }
@@ -25,6 +25,18 @@ class CreateScriptUrlDependency extends NullDependency {
25
25
  get type() {
26
26
  return "create script url";
27
27
  }
28
+
29
+ serialize(context) {
30
+ const { write } = context;
31
+ write(this.range);
32
+ super.serialize(context);
33
+ }
34
+
35
+ deserialize(context) {
36
+ const { read } = context;
37
+ this.range = read();
38
+ super.deserialize(context);
39
+ }
28
40
  }
29
41
 
30
42
  CreateScriptUrlDependency.Template = class CreateScriptUrlDependencyTemplate extends (
@@ -0,0 +1,85 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Ivan Kopeykin @vankop
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const makeSerializable = require("../util/makeSerializable");
9
+ const NullDependency = require("./NullDependency");
10
+
11
+ /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
+ /** @typedef {import("../Dependency")} Dependency */
13
+ /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
14
+ /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
15
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
16
+
17
+ class CssExportDependency extends NullDependency {
18
+ /**
19
+ * @param {string} name name
20
+ * @param {string} value value
21
+ */
22
+ constructor(name, value) {
23
+ super();
24
+ this.name = name;
25
+ this.value = value;
26
+ }
27
+
28
+ get type() {
29
+ return "css :export";
30
+ }
31
+
32
+ /**
33
+ * Returns the exported names
34
+ * @param {ModuleGraph} moduleGraph module graph
35
+ * @returns {ExportsSpec | undefined} export names
36
+ */
37
+ getExports(moduleGraph) {
38
+ const name = this.name;
39
+ return {
40
+ exports: [
41
+ {
42
+ name,
43
+ canMangle: true
44
+ }
45
+ ],
46
+ dependencies: undefined
47
+ };
48
+ }
49
+
50
+ serialize(context) {
51
+ const { write } = context;
52
+ write(this.name);
53
+ write(this.value);
54
+ super.serialize(context);
55
+ }
56
+
57
+ deserialize(context) {
58
+ const { read } = context;
59
+ this.name = read();
60
+ this.value = read();
61
+ super.deserialize(context);
62
+ }
63
+ }
64
+
65
+ CssExportDependency.Template = class CssExportDependencyTemplate extends (
66
+ NullDependency.Template
67
+ ) {
68
+ /**
69
+ * @param {Dependency} dependency the dependency for which the template should be applied
70
+ * @param {ReplaceSource} source the current replace source which can be modified
71
+ * @param {DependencyTemplateContext} templateContext the context object
72
+ * @returns {void}
73
+ */
74
+ apply(dependency, source, { cssExports }) {
75
+ const dep = /** @type {CssExportDependency} */ (dependency);
76
+ cssExports.set(dep.name, dep.value);
77
+ }
78
+ };
79
+
80
+ makeSerializable(
81
+ CssExportDependency,
82
+ "webpack/lib/dependencies/CssExportDependency"
83
+ );
84
+
85
+ module.exports = CssExportDependency;
@@ -0,0 +1,75 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Ivan Kopeykin @vankop
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const makeSerializable = require("../util/makeSerializable");
9
+ const ModuleDependency = require("./ModuleDependency");
10
+
11
+ /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
13
+ /** @typedef {import("../Dependency")} Dependency */
14
+ /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
15
+ /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
16
+ /** @typedef {import("../Module")} Module */
17
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
18
+ /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
19
+ /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
20
+ /** @typedef {import("../util/Hash")} Hash */
21
+ /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
22
+
23
+ class CssImportDependency extends ModuleDependency {
24
+ /**
25
+ * @param {string} request request
26
+ * @param {[number, number]} range range of the argument
27
+ * @param {string | undefined} supports list of supports conditions
28
+ * @param {string | undefined} media list of media conditions
29
+ */
30
+ constructor(request, range, supports, media) {
31
+ super(request);
32
+ this.range = range;
33
+ this.supports = supports;
34
+ this.media = media;
35
+ }
36
+
37
+ get type() {
38
+ return "css @import";
39
+ }
40
+
41
+ get category() {
42
+ return "css-import";
43
+ }
44
+
45
+ /**
46
+ * @param {string} context context directory
47
+ * @returns {Module} a module
48
+ */
49
+ createIgnoredModule(context) {
50
+ return null;
51
+ }
52
+ }
53
+
54
+ CssImportDependency.Template = class CssImportDependencyTemplate extends (
55
+ ModuleDependency.Template
56
+ ) {
57
+ /**
58
+ * @param {Dependency} dependency the dependency for which the template should be applied
59
+ * @param {ReplaceSource} source the current replace source which can be modified
60
+ * @param {DependencyTemplateContext} templateContext the context object
61
+ * @returns {void}
62
+ */
63
+ apply(dependency, source, templateContext) {
64
+ const dep = /** @type {CssImportDependency} */ (dependency);
65
+
66
+ source.replace(dep.range[0], dep.range[1] - 1, "");
67
+ }
68
+ };
69
+
70
+ makeSerializable(
71
+ CssImportDependency,
72
+ "webpack/lib/dependencies/CssImportDependency"
73
+ );
74
+
75
+ module.exports = CssImportDependency;
@@ -0,0 +1,119 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Ivan Kopeykin @vankop
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const makeSerializable = require("../util/makeSerializable");
9
+ const NullDependency = require("./NullDependency");
10
+
11
+ /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
+ /** @typedef {import("../Dependency")} Dependency */
13
+ /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
14
+ /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
15
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
16
+
17
+ class CssLocalIdentifierDependency extends NullDependency {
18
+ /**
19
+ * @param {string} name name
20
+ * @param {[number, number]} range range
21
+ * @param {string=} prefix prefix
22
+ */
23
+ constructor(name, range, prefix = "") {
24
+ super();
25
+ this.name = name;
26
+ this.range = range;
27
+ this.prefix = prefix;
28
+ }
29
+
30
+ get type() {
31
+ return "css local identifier";
32
+ }
33
+
34
+ /**
35
+ * Returns the exported names
36
+ * @param {ModuleGraph} moduleGraph module graph
37
+ * @returns {ExportsSpec | undefined} export names
38
+ */
39
+ getExports(moduleGraph) {
40
+ const name = this.name;
41
+ return {
42
+ exports: [
43
+ {
44
+ name,
45
+ canMangle: true
46
+ }
47
+ ],
48
+ dependencies: undefined
49
+ };
50
+ }
51
+
52
+ serialize(context) {
53
+ const { write } = context;
54
+ write(this.name);
55
+ write(this.range);
56
+ write(this.prefix);
57
+ super.serialize(context);
58
+ }
59
+
60
+ deserialize(context) {
61
+ const { read } = context;
62
+ this.name = read();
63
+ this.range = read();
64
+ this.prefix = read();
65
+ super.deserialize(context);
66
+ }
67
+ }
68
+
69
+ const escapeCssIdentifier = (str, omitUnderscore) => {
70
+ const escaped = `${str}`.replace(
71
+ // cspell:word uffff
72
+ /[^a-zA-Z0-9_\u0081-\uffff-]/g,
73
+ s => `\\${s}`
74
+ );
75
+ return !omitUnderscore && /^(?!--)[0-9-]/.test(escaped)
76
+ ? `_${escaped}`
77
+ : escaped;
78
+ };
79
+
80
+ CssLocalIdentifierDependency.Template = class CssLocalIdentifierDependencyTemplate extends (
81
+ NullDependency.Template
82
+ ) {
83
+ /**
84
+ * @param {Dependency} dependency the dependency for which the template should be applied
85
+ * @param {ReplaceSource} source the current replace source which can be modified
86
+ * @param {DependencyTemplateContext} templateContext the context object
87
+ * @returns {void}
88
+ */
89
+ apply(
90
+ dependency,
91
+ source,
92
+ { module, moduleGraph, chunkGraph, runtime, runtimeTemplate, cssExports }
93
+ ) {
94
+ const dep = /** @type {CssLocalIdentifierDependency} */ (dependency);
95
+ const used = moduleGraph
96
+ .getExportInfo(module, dep.name)
97
+ .getUsedName(dep.name, runtime);
98
+ const moduleId = chunkGraph.getModuleId(module);
99
+ const identifier =
100
+ dep.prefix +
101
+ (runtimeTemplate.outputOptions.uniqueName
102
+ ? runtimeTemplate.outputOptions.uniqueName + "-"
103
+ : "") +
104
+ (used ? moduleId + "-" + used : "-");
105
+ source.replace(
106
+ dep.range[0],
107
+ dep.range[1] - 1,
108
+ escapeCssIdentifier(identifier, dep.prefix)
109
+ );
110
+ if (used) cssExports.set(used, identifier);
111
+ }
112
+ };
113
+
114
+ makeSerializable(
115
+ CssLocalIdentifierDependency,
116
+ "webpack/lib/dependencies/CssLocalIdentifierDependency"
117
+ );
118
+
119
+ module.exports = CssLocalIdentifierDependency;
@@ -0,0 +1,101 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Ivan Kopeykin @vankop
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const Dependency = require("../Dependency");
9
+ const makeSerializable = require("../util/makeSerializable");
10
+ const CssLocalIdentifierDependency = require("./CssLocalIdentifierDependency");
11
+
12
+ /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
13
+ /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
14
+ /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
15
+ /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
16
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
17
+ /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
18
+
19
+ class CssSelfLocalIdentifierDependency extends CssLocalIdentifierDependency {
20
+ /**
21
+ * @param {string} name name
22
+ * @param {[number, number]} range range
23
+ * @param {string=} prefix prefix
24
+ * @param {Set<string>=} declaredSet set of declared names (will only be active when in declared set)
25
+ */
26
+ constructor(name, range, prefix = "", declaredSet = undefined) {
27
+ super(name, range, prefix);
28
+ this.declaredSet = declaredSet;
29
+ }
30
+
31
+ get type() {
32
+ return "css self local identifier";
33
+ }
34
+
35
+ get category() {
36
+ return "self";
37
+ }
38
+
39
+ /**
40
+ * @returns {string | null} an identifier to merge equal requests
41
+ */
42
+ getResourceIdentifier() {
43
+ return `self`;
44
+ }
45
+ /**
46
+ * Returns the exported names
47
+ * @param {ModuleGraph} moduleGraph module graph
48
+ * @returns {ExportsSpec | undefined} export names
49
+ */
50
+ getExports(moduleGraph) {
51
+ if (this.declaredSet && !this.declaredSet.has(this.name)) return;
52
+ return super.getExports(moduleGraph);
53
+ }
54
+
55
+ /**
56
+ * Returns list of exports referenced by this dependency
57
+ * @param {ModuleGraph} moduleGraph module graph
58
+ * @param {RuntimeSpec} runtime the runtime for which the module is analysed
59
+ * @returns {(string[] | ReferencedExport)[]} referenced exports
60
+ */
61
+ getReferencedExports(moduleGraph, runtime) {
62
+ if (this.declaredSet && !this.declaredSet.has(this.name))
63
+ return Dependency.NO_EXPORTS_REFERENCED;
64
+ return [[this.name]];
65
+ }
66
+
67
+ serialize(context) {
68
+ const { write } = context;
69
+ write(this.declaredSet);
70
+ super.serialize(context);
71
+ }
72
+
73
+ deserialize(context) {
74
+ const { read } = context;
75
+ this.declaredSet = read();
76
+ super.deserialize(context);
77
+ }
78
+ }
79
+
80
+ CssSelfLocalIdentifierDependency.Template = class CssSelfLocalIdentifierDependencyTemplate extends (
81
+ CssLocalIdentifierDependency.Template
82
+ ) {
83
+ /**
84
+ * @param {Dependency} dependency the dependency for which the template should be applied
85
+ * @param {ReplaceSource} source the current replace source which can be modified
86
+ * @param {DependencyTemplateContext} templateContext the context object
87
+ * @returns {void}
88
+ */
89
+ apply(dependency, source, templateContext) {
90
+ const dep = /** @type {CssSelfLocalIdentifierDependency} */ (dependency);
91
+ if (dep.declaredSet && !dep.declaredSet.has(dep.name)) return;
92
+ super.apply(dependency, source, templateContext);
93
+ }
94
+ };
95
+
96
+ makeSerializable(
97
+ CssSelfLocalIdentifierDependency,
98
+ "webpack/lib/dependencies/CssSelfLocalIdentifierDependency"
99
+ );
100
+
101
+ module.exports = CssSelfLocalIdentifierDependency;
@@ -0,0 +1,132 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Ivan Kopeykin @vankop
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const makeSerializable = require("../util/makeSerializable");
9
+ const memoize = require("../util/memoize");
10
+ const ModuleDependency = require("./ModuleDependency");
11
+
12
+ /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
13
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
14
+ /** @typedef {import("../Dependency")} Dependency */
15
+ /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
16
+ /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
17
+ /** @typedef {import("../Module")} Module */
18
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
19
+ /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
20
+ /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
21
+ /** @typedef {import("../util/Hash")} Hash */
22
+ /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
23
+
24
+ const getRawDataUrlModule = memoize(() => require("../asset/RawDataUrlModule"));
25
+
26
+ class CssUrlDependency extends ModuleDependency {
27
+ /**
28
+ * @param {string} request request
29
+ * @param {[number, number]} range range of the argument
30
+ * @param {string} cssFunctionKind kind of css function, e. g. url(), image()
31
+ */
32
+ constructor(request, range, cssFunctionKind) {
33
+ super(request);
34
+ this.range = range;
35
+ this.cssFunctionKind = cssFunctionKind;
36
+ }
37
+
38
+ get type() {
39
+ return "css url()";
40
+ }
41
+
42
+ get category() {
43
+ return "url";
44
+ }
45
+
46
+ /**
47
+ * @param {string} context context directory
48
+ * @returns {Module} a module
49
+ */
50
+ createIgnoredModule(context) {
51
+ const RawDataUrlModule = getRawDataUrlModule();
52
+ return new RawDataUrlModule("data:,", `ignored-asset`, `(ignored asset)`);
53
+ }
54
+
55
+ serialize(context) {
56
+ const { write } = context;
57
+ write(this.cssFunctionKind);
58
+ super.serialize(context);
59
+ }
60
+
61
+ deserialize(context) {
62
+ const { read } = context;
63
+ this.cssFunctionKind = read();
64
+ super.deserialize(context);
65
+ }
66
+ }
67
+
68
+ const cssEscapeString = str => {
69
+ let countWhiteOrBracket = 0;
70
+ let countQuotation = 0;
71
+ let countApostrophe = 0;
72
+ for (let i = 0; i < str.length; i++) {
73
+ const cc = str.charCodeAt(i);
74
+ switch (cc) {
75
+ case 9: // tab
76
+ case 10: // nl
77
+ case 32: // space
78
+ case 40: // (
79
+ case 41: // )
80
+ countWhiteOrBracket++;
81
+ break;
82
+ case 34:
83
+ countQuotation++;
84
+ break;
85
+ case 39:
86
+ countApostrophe++;
87
+ break;
88
+ }
89
+ }
90
+ if (countWhiteOrBracket < 2) {
91
+ return str.replace(/[\n\t ()'"\\]/g, m => `\\${m}`);
92
+ } else if (countQuotation <= countApostrophe) {
93
+ return `"${str.replace(/[\n"\\]/g, m => `\\${m}`)}"`;
94
+ } else {
95
+ return `'${str.replace(/[\n'\\]/g, m => `\\${m}`)}'`;
96
+ }
97
+ };
98
+
99
+ CssUrlDependency.Template = class CssUrlDependencyTemplate extends (
100
+ ModuleDependency.Template
101
+ ) {
102
+ /**
103
+ * @param {Dependency} dependency the dependency for which the template should be applied
104
+ * @param {ReplaceSource} source the current replace source which can be modified
105
+ * @param {DependencyTemplateContext} templateContext the context object
106
+ * @returns {void}
107
+ */
108
+ apply(
109
+ dependency,
110
+ source,
111
+ { runtime, moduleGraph, runtimeTemplate, codeGenerationResults }
112
+ ) {
113
+ const dep = /** @type {CssUrlDependency} */ (dependency);
114
+
115
+ source.replace(
116
+ dep.range[0],
117
+ dep.range[1] - 1,
118
+ `${dep.cssFunctionKind}(${cssEscapeString(
119
+ runtimeTemplate.assetUrl({
120
+ publicPath: "",
121
+ runtime,
122
+ module: moduleGraph.getModule(dep),
123
+ codeGenerationResults
124
+ })
125
+ )})`
126
+ );
127
+ }
128
+ };
129
+
130
+ makeSerializable(CssUrlDependency, "webpack/lib/dependencies/CssUrlDependency");
131
+
132
+ module.exports = CssUrlDependency;
@@ -46,6 +46,12 @@ const getProperty = (moduleGraph, module, exportName, property, runtime) => {
46
46
  }
47
47
  }
48
48
  switch (property) {
49
+ case "canMangle": {
50
+ const exportsInfo = moduleGraph.getExportsInfo(module);
51
+ const exportInfo = exportsInfo.getExportInfo(exportName);
52
+ if (exportInfo) return exportInfo.canMangle;
53
+ return exportsInfo.otherExportsInfo.canMangle;
54
+ }
49
55
  case "used":
50
56
  return (
51
57
  moduleGraph.getExportsInfo(module).getUsed(exportName, runtime) !==