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
@@ -12,6 +12,8 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
12
12
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
13
13
  /** @typedef {import("../Dependency")} Dependency */
14
14
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
15
17
 
16
18
  /**
17
19
  * Dependency for static evaluating import specifier. e.g.
@@ -30,12 +32,18 @@ class HarmonyEvaluatedImportSpecifierDependency extends HarmonyImportSpecifierDe
30
32
  return `evaluated X ${this.operator} harmony import specifier`;
31
33
  }
32
34
 
35
+ /**
36
+ * @param {ObjectSerializerContext} context context
37
+ */
33
38
  serialize(context) {
34
39
  super.serialize(context);
35
40
  const { write } = context;
36
41
  write(this.operator);
37
42
  }
38
43
 
44
+ /**
45
+ * @param {ObjectDeserializerContext} context context
46
+ */
39
47
  deserialize(context) {
40
48
  super.deserialize(context);
41
49
  const { read } = context;
@@ -17,6 +17,8 @@ const NullDependency = require("./NullDependency");
17
17
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
18
18
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
19
19
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
20
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
21
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
20
22
 
21
23
  class HarmonyExportExpressionDependency extends NullDependency {
22
24
  constructor(range, rangeStatement, prefix, declarationId) {
@@ -54,6 +56,9 @@ class HarmonyExportExpressionDependency extends NullDependency {
54
56
  return false;
55
57
  }
56
58
 
59
+ /**
60
+ * @param {ObjectSerializerContext} context context
61
+ */
57
62
  serialize(context) {
58
63
  const { write } = context;
59
64
  write(this.range);
@@ -63,6 +68,9 @@ class HarmonyExportExpressionDependency extends NullDependency {
63
68
  super.serialize(context);
64
69
  }
65
70
 
71
+ /**
72
+ * @param {ObjectDeserializerContext} context context
73
+ */
66
74
  deserialize(context) {
67
75
  const { read } = context;
68
76
  this.range = 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 HarmonyExportHeaderDependency extends NullDependency {
16
18
  constructor(range, rangeStatement) {
@@ -23,6 +25,9 @@ class HarmonyExportHeaderDependency extends NullDependency {
23
25
  return "harmony export header";
24
26
  }
25
27
 
28
+ /**
29
+ * @param {ObjectSerializerContext} context context
30
+ */
26
31
  serialize(context) {
27
32
  const { write } = context;
28
33
  write(this.range);
@@ -30,6 +35,9 @@ class HarmonyExportHeaderDependency extends NullDependency {
30
35
  super.serialize(context);
31
36
  }
32
37
 
38
+ /**
39
+ * @param {ObjectDeserializerContext} context context
40
+ */
33
41
  deserialize(context) {
34
42
  const { read } = context;
35
43
  this.range = read();
@@ -35,6 +35,8 @@ const processExportInfo = require("./processExportInfo");
35
35
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
36
36
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
37
37
  /** @typedef {import("../WebpackError")} WebpackError */
38
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
39
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
38
40
  /** @typedef {import("../util/Hash")} Hash */
39
41
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
40
42
 
@@ -856,6 +858,9 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
856
858
  return errors;
857
859
  }
858
860
 
861
+ /**
862
+ * @param {ObjectSerializerContext} context context
863
+ */
859
864
  serialize(context) {
860
865
  const { write, setCircularReference } = context;
861
866
 
@@ -870,6 +875,9 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
870
875
  super.serialize(context);
871
876
  }
872
877
 
878
+ /**
879
+ * @param {ObjectDeserializerContext} context context
880
+ */
873
881
  deserialize(context) {
874
882
  const { read, setCircularReference } = context;
875
883
 
@@ -1251,11 +1259,17 @@ class HarmonyStarExportsList {
1251
1259
  return this.dependencies.slice();
1252
1260
  }
1253
1261
 
1262
+ /**
1263
+ * @param {ObjectSerializerContext} context context
1264
+ */
1254
1265
  serialize({ write, setCircularReference }) {
1255
1266
  setCircularReference(this);
1256
1267
  write(this.dependencies);
1257
1268
  }
1258
1269
 
1270
+ /**
1271
+ * @param {ObjectDeserializerContext} context context
1272
+ */
1259
1273
  deserialize({ read, setCircularReference }) {
1260
1274
  setCircularReference(this);
1261
1275
  this.dependencies = read();
@@ -15,6 +15,8 @@ const NullDependency = require("./NullDependency");
15
15
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
16
16
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
17
17
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
18
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
19
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
18
20
 
19
21
  class HarmonyExportSpecifierDependency extends NullDependency {
20
22
  constructor(id, name) {
@@ -49,6 +51,9 @@ class HarmonyExportSpecifierDependency extends NullDependency {
49
51
  return false;
50
52
  }
51
53
 
54
+ /**
55
+ * @param {ObjectSerializerContext} context context
56
+ */
52
57
  serialize(context) {
53
58
  const { write } = context;
54
59
  write(this.id);
@@ -56,6 +61,9 @@ class HarmonyExportSpecifierDependency extends NullDependency {
56
61
  super.serialize(context);
57
62
  }
58
63
 
64
+ /**
65
+ * @param {ObjectDeserializerContext} context context
66
+ */
59
67
  deserialize(context) {
60
68
  const { read } = context;
61
69
  this.id = read();
@@ -24,6 +24,8 @@ const ModuleDependency = require("./ModuleDependency");
24
24
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
25
25
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
26
26
  /** @typedef {import("../WebpackError")} WebpackError */
27
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
28
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
27
29
  /** @typedef {import("../util/Hash")} Hash */
28
30
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
29
31
 
@@ -221,6 +223,9 @@ class HarmonyImportDependency extends ModuleDependency {
221
223
  }
222
224
  }
223
225
 
226
+ /**
227
+ * @param {ObjectSerializerContext} context context
228
+ */
224
229
  serialize(context) {
225
230
  const { write } = context;
226
231
  write(this.sourceOrder);
@@ -228,6 +233,9 @@ class HarmonyImportDependency extends ModuleDependency {
228
233
  super.serialize(context);
229
234
  }
230
235
 
236
+ /**
237
+ * @param {ObjectDeserializerContext} context context
238
+ */
231
239
  deserialize(context) {
232
240
  const { read } = context;
233
241
  this.sourceOrder = read();
@@ -23,6 +23,8 @@ const HarmonyImportDependency = require("./HarmonyImportDependency");
23
23
  /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
24
24
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
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/runtime").RuntimeSpec} RuntimeSpec */
28
30
 
@@ -237,6 +239,9 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
237
239
  return 0;
238
240
  }
239
241
 
242
+ /**
243
+ * @param {ObjectSerializerContext} context context
244
+ */
240
245
  serialize(context) {
241
246
  const { write } = context;
242
247
  write(this.ids);
@@ -253,6 +258,9 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
253
258
  super.serialize(context);
254
259
  }
255
260
 
261
+ /**
262
+ * @param {ObjectDeserializerContext} context context
263
+ */
256
264
  deserialize(context) {
257
265
  const { read } = context;
258
266
  this.ids = read();
@@ -9,6 +9,9 @@ const makeSerializable = require("../util/makeSerializable");
9
9
  const ContextDependency = require("./ContextDependency");
10
10
  const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
11
11
 
12
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
13
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
14
+
12
15
  class ImportContextDependency extends ContextDependency {
13
16
  constructor(options, range, valueRange) {
14
17
  super(options);
@@ -25,6 +28,9 @@ class ImportContextDependency extends ContextDependency {
25
28
  return "esm";
26
29
  }
27
30
 
31
+ /**
32
+ * @param {ObjectSerializerContext} context context
33
+ */
28
34
  serialize(context) {
29
35
  const { write } = context;
30
36
 
@@ -33,6 +39,9 @@ class ImportContextDependency extends ContextDependency {
33
39
  super.serialize(context);
34
40
  }
35
41
 
42
+ /**
43
+ * @param {ObjectDeserializerContext} context context
44
+ */
36
45
  deserialize(context) {
37
46
  const { read } = context;
38
47
 
@@ -14,6 +14,8 @@ const ModuleDependency = require("./ModuleDependency");
14
14
  /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
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/runtime").RuntimeSpec} RuntimeSpec */
18
20
 
19
21
  class ImportDependency extends ModuleDependency {
@@ -51,12 +53,18 @@ class ImportDependency extends ModuleDependency {
51
53
  : Dependency.EXPORTS_OBJECT_REFERENCED;
52
54
  }
53
55
 
56
+ /**
57
+ * @param {ObjectSerializerContext} context context
58
+ */
54
59
  serialize(context) {
55
60
  context.write(this.range);
56
61
  context.write(this.referencedExports);
57
62
  super.serialize(context);
58
63
  }
59
64
 
65
+ /**
66
+ * @param {ObjectDeserializerContext} context context
67
+ */
60
68
  deserialize(context) {
61
69
  this.range = context.read();
62
70
  this.referencedExports = context.read();
@@ -75,6 +75,17 @@ class ImportMetaPlugin {
75
75
  }
76
76
 
77
77
  /// import.meta direct ///
78
+ const webpackVersion = parseInt(
79
+ require("../../package.json").version,
80
+ 10
81
+ );
82
+ const importMetaUrl = () =>
83
+ JSON.stringify(getUrl(parser.state.module));
84
+ const importMetaWebpackVersion = () => JSON.stringify(webpackVersion);
85
+ const importMetaUnknownProperty = members =>
86
+ `${Template.toNormalComment(
87
+ "unsupported import.meta." + members.join(".")
88
+ )} undefined${propertyAccess(members, 1)}`;
78
89
  parser.hooks.typeof
79
90
  .for("import.meta")
80
91
  .tap(
@@ -84,20 +95,48 @@ class ImportMetaPlugin {
84
95
  parser.hooks.expression
85
96
  .for("import.meta")
86
97
  .tap(PLUGIN_NAME, metaProperty => {
87
- const CriticalDependencyWarning = getCriticalDependencyWarning();
88
- parser.state.module.addWarning(
89
- new ModuleDependencyWarning(
90
- parser.state.module,
91
- new CriticalDependencyWarning(
92
- "Accessing import.meta directly is unsupported (only property access is supported)"
93
- ),
94
- metaProperty.loc
95
- )
96
- );
97
- const dep = new ConstDependency(
98
- `${parser.isAsiPosition(metaProperty.range[0]) ? ";" : ""}({})`,
99
- metaProperty.range
100
- );
98
+ const referencedPropertiesInDestructuring =
99
+ parser.destructuringAssignmentPropertiesFor(metaProperty);
100
+ if (!referencedPropertiesInDestructuring) {
101
+ const CriticalDependencyWarning =
102
+ getCriticalDependencyWarning();
103
+ parser.state.module.addWarning(
104
+ new ModuleDependencyWarning(
105
+ parser.state.module,
106
+ new CriticalDependencyWarning(
107
+ "Accessing import.meta directly is unsupported (only property access or destructuring is supported)"
108
+ ),
109
+ metaProperty.loc
110
+ )
111
+ );
112
+ const dep = new ConstDependency(
113
+ `${
114
+ parser.isAsiPosition(metaProperty.range[0]) ? ";" : ""
115
+ }({})`,
116
+ metaProperty.range
117
+ );
118
+ dep.loc = metaProperty.loc;
119
+ parser.state.module.addPresentationalDependency(dep);
120
+ return true;
121
+ }
122
+
123
+ let str = "";
124
+ for (const prop of referencedPropertiesInDestructuring) {
125
+ switch (prop) {
126
+ case "url":
127
+ str += `url: ${importMetaUrl()},`;
128
+ break;
129
+ case "webpack":
130
+ str += `webpack: ${importMetaWebpackVersion()},`;
131
+ break;
132
+ default:
133
+ str += `[${JSON.stringify(
134
+ prop
135
+ )}]: ${importMetaUnknownProperty([prop])},`;
136
+ break;
137
+ }
138
+ }
139
+ const dep = new ConstDependency(`({${str}})`, metaProperty.range);
101
140
  dep.loc = metaProperty.loc;
102
141
  parser.state.module.addPresentationalDependency(dep);
103
142
  return true;
@@ -120,10 +159,7 @@ class ImportMetaPlugin {
120
159
  parser.hooks.expression
121
160
  .for("import.meta.url")
122
161
  .tap(PLUGIN_NAME, expr => {
123
- const dep = new ConstDependency(
124
- JSON.stringify(getUrl(parser.state.module)),
125
- expr.range
126
- );
162
+ const dep = new ConstDependency(importMetaUrl(), expr.range);
127
163
  dep.loc = expr.loc;
128
164
  parser.state.module.addPresentationalDependency(dep);
129
165
  return true;
@@ -140,10 +176,6 @@ class ImportMetaPlugin {
140
176
  });
141
177
 
142
178
  /// import.meta.webpack ///
143
- const webpackVersion = parseInt(
144
- require("../../package.json").version,
145
- 10
146
- );
147
179
  parser.hooks.typeof
148
180
  .for("import.meta.webpack")
149
181
  .tap(
@@ -154,7 +186,7 @@ class ImportMetaPlugin {
154
186
  .for("import.meta.webpack")
155
187
  .tap(
156
188
  PLUGIN_NAME,
157
- toConstantDependency(parser, JSON.stringify(webpackVersion))
189
+ toConstantDependency(parser, importMetaWebpackVersion())
158
190
  );
159
191
  parser.hooks.evaluateTypeof
160
192
  .for("import.meta.webpack")
@@ -168,9 +200,7 @@ class ImportMetaPlugin {
168
200
  .for("import.meta")
169
201
  .tap(PLUGIN_NAME, (expr, members) => {
170
202
  const dep = new ConstDependency(
171
- `${Template.toNormalComment(
172
- "unsupported import.meta." + members.join(".")
173
- )} undefined${propertyAccess(members, 1)}`,
203
+ importMetaUnknownProperty(members),
174
204
  expr.range
175
205
  );
176
206
  dep.loc = expr.loc;
@@ -27,6 +27,8 @@ class ImportParserPlugin {
27
27
  }
28
28
 
29
29
  apply(parser) {
30
+ const exportsFromEnumerable = enumerable =>
31
+ Array.from(enumerable, e => [e]);
30
32
  parser.hooks.importCall.tap("ImportParserPlugin", expr => {
31
33
  const param = parser.evaluateExpression(expr.source);
32
34
 
@@ -184,7 +186,7 @@ class ImportParserPlugin {
184
186
  if (typeof importOptions.webpackExports === "string") {
185
187
  exports = [[importOptions.webpackExports]];
186
188
  } else {
187
- exports = Array.from(importOptions.webpackExports, e => [e]);
189
+ exports = exportsFromEnumerable(importOptions.webpackExports);
188
190
  }
189
191
  }
190
192
  }
@@ -205,6 +207,20 @@ class ImportParserPlugin {
205
207
  mode = "lazy";
206
208
  }
207
209
 
210
+ const referencedPropertiesInDestructuring =
211
+ parser.destructuringAssignmentPropertiesFor(expr);
212
+ if (referencedPropertiesInDestructuring) {
213
+ if (exports) {
214
+ parser.state.module.addWarning(
215
+ new UnsupportedFeatureWarning(
216
+ `\`webpackExports\` could not be used with destructuring assignment.`,
217
+ expr.loc
218
+ )
219
+ );
220
+ }
221
+ exports = exportsFromEnumerable(referencedPropertiesInDestructuring);
222
+ }
223
+
208
224
  if (param.isString()) {
209
225
  if (mode === "eager") {
210
226
  const dep = new ImportEagerDependency(
@@ -14,6 +14,8 @@ const NullDependency = require("./NullDependency");
14
14
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
15
15
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
16
16
  /** @typedef {import("../json/JsonData")} JsonData */
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
  const getExportsFromData = data => {
@@ -78,12 +80,18 @@ class JsonExportsDependency extends NullDependency {
78
80
  this.data.updateHash(hash);
79
81
  }
80
82
 
83
+ /**
84
+ * @param {ObjectSerializerContext} context context
85
+ */
81
86
  serialize(context) {
82
87
  const { write } = context;
83
88
  write(this.data);
84
89
  super.serialize(context);
85
90
  }
86
91
 
92
+ /**
93
+ * @param {ObjectDeserializerContext} context context
94
+ */
87
95
  deserialize(context) {
88
96
  const { read } = context;
89
97
  this.data = 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 LocalModuleDependency extends NullDependency {
16
18
  constructor(localModule, range, callNew) {
@@ -21,6 +23,9 @@ class LocalModuleDependency extends NullDependency {
21
23
  this.callNew = callNew;
22
24
  }
23
25
 
26
+ /**
27
+ * @param {ObjectSerializerContext} context context
28
+ */
24
29
  serialize(context) {
25
30
  const { write } = context;
26
31
 
@@ -31,6 +36,9 @@ class LocalModuleDependency extends NullDependency {
31
36
  super.serialize(context);
32
37
  }
33
38
 
39
+ /**
40
+ * @param {ObjectDeserializerContext} context context
41
+ */
34
42
  deserialize(context) {
35
43
  const { read } = context;
36
44
 
@@ -18,6 +18,8 @@ const NullDependency = require("./NullDependency");
18
18
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
19
19
  /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
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
 
@@ -76,6 +78,9 @@ class ModuleDecoratorDependency extends NullDependency {
76
78
  hash.update(this._hashUpdate);
77
79
  }
78
80
 
81
+ /**
82
+ * @param {ObjectSerializerContext} context context
83
+ */
79
84
  serialize(context) {
80
85
  const { write } = context;
81
86
  write(this.decorator);
@@ -83,6 +88,9 @@ class ModuleDecoratorDependency extends NullDependency {
83
88
  super.serialize(context);
84
89
  }
85
90
 
91
+ /**
92
+ * @param {ObjectDeserializerContext} context context
93
+ */
86
94
  deserialize(context) {
87
95
  const { read } = context;
88
96
  this.decorator = read();
@@ -11,6 +11,8 @@ const memoize = require("../util/memoize");
11
11
 
12
12
  /** @typedef {import("../Dependency").TRANSITIVE} TRANSITIVE */
13
13
  /** @typedef {import("../Module")} Module */
14
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
14
16
 
15
17
  const getRawModule = memoize(() => require("../RawModule"));
16
18
 
@@ -67,6 +69,9 @@ class ModuleDependency extends Dependency {
67
69
  );
68
70
  }
69
71
 
72
+ /**
73
+ * @param {ObjectSerializerContext} context context
74
+ */
70
75
  serialize(context) {
71
76
  const { write } = context;
72
77
  write(this.request);
@@ -76,6 +81,9 @@ class ModuleDependency extends Dependency {
76
81
  super.serialize(context);
77
82
  }
78
83
 
84
+ /**
85
+ * @param {ObjectDeserializerContext} context context
86
+ */
79
87
  deserialize(context) {
80
88
  const { read } = context;
81
89
  this.request = read();
@@ -18,6 +18,8 @@ const ModuleDependency = require("./ModuleDependency");
18
18
  /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
19
19
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
20
20
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
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
 
@@ -78,6 +80,9 @@ class ProvidedDependency extends ModuleDependency {
78
80
  hash.update(this._hashUpdate);
79
81
  }
80
82
 
83
+ /**
84
+ * @param {ObjectSerializerContext} context context
85
+ */
81
86
  serialize(context) {
82
87
  const { write } = context;
83
88
  write(this.identifier);
@@ -85,6 +90,9 @@ class ProvidedDependency extends ModuleDependency {
85
90
  super.serialize(context);
86
91
  }
87
92
 
93
+ /**
94
+ * @param {ObjectDeserializerContext} context context
95
+ */
88
96
  deserialize(context) {
89
97
  const { read } = context;
90
98
  this.identifier = read();
@@ -17,6 +17,8 @@ const NullDependency = require("./NullDependency");
17
17
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
18
18
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
19
19
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
20
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
21
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
20
22
  /** @typedef {import("../util/Hash")} Hash */
21
23
 
22
24
  class PureExpressionDependency extends NullDependency {
@@ -52,6 +54,9 @@ class PureExpressionDependency extends NullDependency {
52
54
  return false;
53
55
  }
54
56
 
57
+ /**
58
+ * @param {ObjectSerializerContext} context context
59
+ */
55
60
  serialize(context) {
56
61
  const { write } = context;
57
62
  write(this.range);
@@ -59,6 +64,9 @@ class PureExpressionDependency extends NullDependency {
59
64
  super.serialize(context);
60
65
  }
61
66
 
67
+ /**
68
+ * @param {ObjectDeserializerContext} context context
69
+ */
62
70
  deserialize(context) {
63
71
  const { read } = context;
64
72
  this.range = read();
@@ -13,6 +13,8 @@ const NullDependency = require("./NullDependency");
13
13
  /** @typedef {import("../AsyncDependenciesBlock")} AsyncDependenciesBlock */
14
14
  /** @typedef {import("../Dependency")} Dependency */
15
15
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
16
18
 
17
19
  class RequireEnsureDependency extends NullDependency {
18
20
  constructor(range, contentRange, errorHandlerRange) {
@@ -27,6 +29,9 @@ class RequireEnsureDependency extends NullDependency {
27
29
  return "require.ensure";
28
30
  }
29
31
 
32
+ /**
33
+ * @param {ObjectSerializerContext} context context
34
+ */
30
35
  serialize(context) {
31
36
  const { write } = context;
32
37
 
@@ -37,6 +42,9 @@ class RequireEnsureDependency extends NullDependency {
37
42
  super.serialize(context);
38
43
  }
39
44
 
45
+ /**
46
+ * @param {ObjectDeserializerContext} context context
47
+ */
40
48
  deserialize(context) {
41
49
  const { read } = context;
42
50
 
@@ -12,6 +12,8 @@ const NullDependency = require("./NullDependency");
12
12
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
13
13
  /** @typedef {import("../Dependency")} Dependency */
14
14
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
15
17
 
16
18
  class RequireHeaderDependency extends NullDependency {
17
19
  constructor(range) {
@@ -20,6 +22,9 @@ class RequireHeaderDependency 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
  write(this.range);