webpack 5.76.3 → 5.78.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 (68) hide show
  1. package/bin/webpack.js +0 -0
  2. package/lib/APIPlugin.js +25 -18
  3. package/lib/CompatibilityPlugin.js +53 -52
  4. package/lib/ConstPlugin.js +22 -15
  5. package/lib/ContextModule.js +3 -2
  6. package/lib/DefinePlugin.js +44 -36
  7. package/lib/DelegatedModule.js +2 -1
  8. package/lib/DllModule.js +2 -1
  9. package/lib/ErrorHelpers.js +61 -22
  10. package/lib/ExportsInfoApiPlugin.js +16 -9
  11. package/lib/ExternalModule.js +2 -1
  12. package/lib/FlagAllModulesAsUsedPlugin.js +22 -27
  13. package/lib/FlagDependencyExportsPlugin.js +336 -348
  14. package/lib/FlagDependencyUsagePlugin.js +6 -8
  15. package/lib/FlagEntryExportAsUsedPlugin.js +22 -23
  16. package/lib/HotModuleReplacementPlugin.js +50 -45
  17. package/lib/JavascriptMetaInfoPlugin.js +16 -9
  18. package/lib/ModuleTypeConstants.js +50 -0
  19. package/lib/NodeStuffPlugin.js +35 -31
  20. package/lib/NormalModule.js +2 -1
  21. package/lib/NormalModuleFactory.js +27 -1
  22. package/lib/ProvidePlugin.js +17 -10
  23. package/lib/RawModule.js +2 -1
  24. package/lib/RequireJsStuffPlugin.js +15 -15
  25. package/lib/UseStrictPlugin.js +15 -8
  26. package/lib/WebpackIsIncludedPlugin.js +16 -9
  27. package/lib/WebpackOptionsApply.js +2 -1
  28. package/lib/config/defaults.js +17 -8
  29. package/lib/config/normalization.js +5 -0
  30. package/lib/container/ContainerEntryModule.js +2 -1
  31. package/lib/css/CssParser.js +22 -2
  32. package/lib/debug/ProfilingPlugin.js +20 -12
  33. package/lib/dependencies/AMDPlugin.js +26 -20
  34. package/lib/dependencies/CommonJsImportsParserPlugin.js +5 -4
  35. package/lib/dependencies/CommonJsPlugin.js +29 -25
  36. package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -1
  37. package/lib/dependencies/HarmonyModulesPlugin.js +11 -5
  38. package/lib/dependencies/ImportMetaContextPlugin.js +11 -5
  39. package/lib/dependencies/ImportMetaPlugin.js +26 -20
  40. package/lib/dependencies/ImportPlugin.js +14 -7
  41. package/lib/dependencies/RequireContextPlugin.js +12 -6
  42. package/lib/dependencies/RequireEnsurePlugin.js +13 -7
  43. package/lib/dependencies/RequireIncludePlugin.js +11 -5
  44. package/lib/dependencies/SystemPlugin.js +21 -15
  45. package/lib/dependencies/URLPlugin.js +15 -9
  46. package/lib/dependencies/WorkerDependency.js +37 -2
  47. package/lib/dependencies/WorkerPlugin.js +19 -10
  48. package/lib/javascript/JavascriptModulesPlugin.js +157 -164
  49. package/lib/json/JsonModulesPlugin.js +13 -5
  50. package/lib/library/AmdLibraryPlugin.js +22 -6
  51. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +2 -1
  52. package/lib/node/ReadFileCompileWasmPlugin.js +2 -1
  53. package/lib/optimize/ConcatenatedModule.js +2 -1
  54. package/lib/optimize/InnerGraphPlugin.js +47 -46
  55. package/lib/optimize/SideEffectsFlagPlugin.js +43 -43
  56. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  57. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +9 -6
  58. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +42 -43
  59. package/lib/web/FetchCompileAsyncWasmPlugin.js +2 -1
  60. package/lib/web/FetchCompileWasmPlugin.js +40 -40
  61. package/package.json +1 -1
  62. package/schemas/WebpackOptions.check.js +1 -1
  63. package/schemas/WebpackOptions.json +28 -0
  64. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  65. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  66. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  67. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  68. package/types.d.ts +20 -0
@@ -5,12 +5,19 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
11
+ JAVASCRIPT_MODULE_TYPE_ESM
12
+ } = require("./ModuleTypeConstants");
8
13
  const ConstDependency = require("./dependencies/ConstDependency");
9
14
  const ProvidedDependency = require("./dependencies/ProvidedDependency");
10
15
  const { approve } = require("./javascript/JavascriptParserHelpers");
11
16
 
12
17
  /** @typedef {import("./Compiler")} Compiler */
13
18
 
19
+ const PLUGIN_NAME = "ProvidePlugin";
20
+
14
21
  class ProvidePlugin {
15
22
  /**
16
23
  * @param {Record<string, string | string[]>} definitions the provided identifiers
@@ -27,7 +34,7 @@ class ProvidePlugin {
27
34
  apply(compiler) {
28
35
  const definitions = this.definitions;
29
36
  compiler.hooks.compilation.tap(
30
- "ProvidePlugin",
37
+ PLUGIN_NAME,
31
38
  (compilation, { normalModuleFactory }) => {
32
39
  compilation.dependencyTemplates.set(
33
40
  ConstDependency,
@@ -48,11 +55,11 @@ class ProvidePlugin {
48
55
  if (splittedName.length > 0) {
49
56
  splittedName.slice(1).forEach((_, i) => {
50
57
  const name = splittedName.slice(0, i + 1).join(".");
51
- parser.hooks.canRename.for(name).tap("ProvidePlugin", approve);
58
+ parser.hooks.canRename.for(name).tap(PLUGIN_NAME, approve);
52
59
  });
53
60
  }
54
61
 
55
- parser.hooks.expression.for(name).tap("ProvidePlugin", expr => {
62
+ parser.hooks.expression.for(name).tap(PLUGIN_NAME, expr => {
56
63
  const nameIdentifier = name.includes(".")
57
64
  ? `__webpack_provided_${name.replace(/\./g, "_dot_")}`
58
65
  : name;
@@ -67,7 +74,7 @@ class ProvidePlugin {
67
74
  return true;
68
75
  });
69
76
 
70
- parser.hooks.call.for(name).tap("ProvidePlugin", expr => {
77
+ parser.hooks.call.for(name).tap(PLUGIN_NAME, expr => {
71
78
  const nameIdentifier = name.includes(".")
72
79
  ? `__webpack_provided_${name.replace(/\./g, "_dot_")}`
73
80
  : name;
@@ -85,14 +92,14 @@ class ProvidePlugin {
85
92
  });
86
93
  };
87
94
  normalModuleFactory.hooks.parser
88
- .for("javascript/auto")
89
- .tap("ProvidePlugin", handler);
95
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
96
+ .tap(PLUGIN_NAME, handler);
90
97
  normalModuleFactory.hooks.parser
91
- .for("javascript/dynamic")
92
- .tap("ProvidePlugin", handler);
98
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
99
+ .tap(PLUGIN_NAME, handler);
93
100
  normalModuleFactory.hooks.parser
94
- .for("javascript/esm")
95
- .tap("ProvidePlugin", handler);
101
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
102
+ .tap(PLUGIN_NAME, handler);
96
103
  }
97
104
  );
98
105
  }
package/lib/RawModule.js CHANGED
@@ -7,6 +7,7 @@
7
7
 
8
8
  const { OriginalSource, RawSource } = require("webpack-sources");
9
9
  const Module = require("./Module");
10
+ const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
10
11
  const makeSerializable = require("./util/makeSerializable");
11
12
 
12
13
  /** @typedef {import("webpack-sources").Source} Source */
@@ -35,7 +36,7 @@ class RawModule extends Module {
35
36
  * @param {ReadonlySet<string>=} runtimeRequirements runtime requirements needed for the source code
36
37
  */
37
38
  constructor(source, identifier, readableIdentifier, runtimeRequirements) {
38
- super("javascript/dynamic", null);
39
+ super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
39
40
  this.sourceStr = source;
40
41
  this.identifierStr = identifier || this.sourceStr;
41
42
  this.readableIdentifierStr = readableIdentifier || this.identifierStr;
@@ -5,6 +5,10 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC
11
+ } = require("./ModuleTypeConstants");
8
12
  const RuntimeGlobals = require("./RuntimeGlobals");
9
13
  const ConstDependency = require("./dependencies/ConstDependency");
10
14
  const {
@@ -13,6 +17,8 @@ const {
13
17
 
14
18
  /** @typedef {import("./Compiler")} Compiler */
15
19
 
20
+ const PLUGIN_NAME = "RequireJsStuffPlugin";
21
+
16
22
  module.exports = class RequireJsStuffPlugin {
17
23
  /**
18
24
  * Apply the plugin
@@ -21,7 +27,7 @@ module.exports = class RequireJsStuffPlugin {
21
27
  */
22
28
  apply(compiler) {
23
29
  compiler.hooks.compilation.tap(
24
- "RequireJsStuffPlugin",
30
+ PLUGIN_NAME,
25
31
  (compilation, { normalModuleFactory }) => {
26
32
  compilation.dependencyTemplates.set(
27
33
  ConstDependency,
@@ -37,27 +43,21 @@ module.exports = class RequireJsStuffPlugin {
37
43
 
38
44
  parser.hooks.call
39
45
  .for("require.config")
40
- .tap(
41
- "RequireJsStuffPlugin",
42
- toConstantDependency(parser, "undefined")
43
- );
46
+ .tap(PLUGIN_NAME, toConstantDependency(parser, "undefined"));
44
47
  parser.hooks.call
45
48
  .for("requirejs.config")
46
- .tap(
47
- "RequireJsStuffPlugin",
48
- toConstantDependency(parser, "undefined")
49
- );
49
+ .tap(PLUGIN_NAME, toConstantDependency(parser, "undefined"));
50
50
 
51
51
  parser.hooks.expression
52
52
  .for("require.version")
53
53
  .tap(
54
- "RequireJsStuffPlugin",
54
+ PLUGIN_NAME,
55
55
  toConstantDependency(parser, JSON.stringify("0.0.0"))
56
56
  );
57
57
  parser.hooks.expression
58
58
  .for("requirejs.onError")
59
59
  .tap(
60
- "RequireJsStuffPlugin",
60
+ PLUGIN_NAME,
61
61
  toConstantDependency(
62
62
  parser,
63
63
  RuntimeGlobals.uncaughtErrorHandler,
@@ -66,11 +66,11 @@ module.exports = class RequireJsStuffPlugin {
66
66
  );
67
67
  };
68
68
  normalModuleFactory.hooks.parser
69
- .for("javascript/auto")
70
- .tap("RequireJsStuffPlugin", handler);
69
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
70
+ .tap(PLUGIN_NAME, handler);
71
71
  normalModuleFactory.hooks.parser
72
- .for("javascript/dynamic")
73
- .tap("RequireJsStuffPlugin", handler);
72
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
73
+ .tap(PLUGIN_NAME, handler);
74
74
  }
75
75
  );
76
76
  }
@@ -5,10 +5,17 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
11
+ JAVASCRIPT_MODULE_TYPE_ESM
12
+ } = require("./ModuleTypeConstants");
8
13
  const ConstDependency = require("./dependencies/ConstDependency");
9
14
 
10
15
  /** @typedef {import("./Compiler")} Compiler */
11
16
 
17
+ const PLUGIN_NAME = "UseStrictPlugin";
18
+
12
19
  class UseStrictPlugin {
13
20
  /**
14
21
  * Apply the plugin
@@ -17,10 +24,10 @@ class UseStrictPlugin {
17
24
  */
18
25
  apply(compiler) {
19
26
  compiler.hooks.compilation.tap(
20
- "UseStrictPlugin",
27
+ PLUGIN_NAME,
21
28
  (compilation, { normalModuleFactory }) => {
22
29
  const handler = parser => {
23
- parser.hooks.program.tap("UseStrictPlugin", ast => {
30
+ parser.hooks.program.tap(PLUGIN_NAME, ast => {
24
31
  const firstNode = ast.body[0];
25
32
  if (
26
33
  firstNode &&
@@ -40,14 +47,14 @@ class UseStrictPlugin {
40
47
  };
41
48
 
42
49
  normalModuleFactory.hooks.parser
43
- .for("javascript/auto")
44
- .tap("UseStrictPlugin", handler);
50
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
51
+ .tap(PLUGIN_NAME, handler);
45
52
  normalModuleFactory.hooks.parser
46
- .for("javascript/dynamic")
47
- .tap("UseStrictPlugin", handler);
53
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
54
+ .tap(PLUGIN_NAME, handler);
48
55
  normalModuleFactory.hooks.parser
49
- .for("javascript/esm")
50
- .tap("UseStrictPlugin", handler);
56
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
57
+ .tap(PLUGIN_NAME, handler);
51
58
  }
52
59
  );
53
60
  }
@@ -6,6 +6,11 @@
6
6
  "use strict";
7
7
 
8
8
  const IgnoreErrorModuleFactory = require("./IgnoreErrorModuleFactory");
9
+ const {
10
+ JAVASCRIPT_MODULE_TYPE_AUTO,
11
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
12
+ JAVASCRIPT_MODULE_TYPE_ESM
13
+ } = require("./ModuleTypeConstants");
9
14
  const WebpackIsIncludedDependency = require("./dependencies/WebpackIsIncludedDependency");
10
15
  const {
11
16
  toConstantDependency
@@ -16,6 +21,8 @@ const {
16
21
  /** @typedef {import("./Module")} Module */
17
22
  /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
18
23
 
24
+ const PLUGIN_NAME = "WebpackIsIncludedPlugin";
25
+
19
26
  class WebpackIsIncludedPlugin {
20
27
  /**
21
28
  * @param {Compiler} compiler the compiler instance
@@ -23,7 +30,7 @@ class WebpackIsIncludedPlugin {
23
30
  */
24
31
  apply(compiler) {
25
32
  compiler.hooks.compilation.tap(
26
- "WebpackIsIncludedPlugin",
33
+ PLUGIN_NAME,
27
34
  (compilation, { normalModuleFactory }) => {
28
35
  compilation.dependencyFactories.set(
29
36
  WebpackIsIncludedDependency,
@@ -41,7 +48,7 @@ class WebpackIsIncludedPlugin {
41
48
  const handler = parser => {
42
49
  parser.hooks.call
43
50
  .for("__webpack_is_included__")
44
- .tap("WebpackIsIncludedPlugin", expr => {
51
+ .tap(PLUGIN_NAME, expr => {
45
52
  if (
46
53
  expr.type !== "CallExpression" ||
47
54
  expr.arguments.length !== 1 ||
@@ -64,19 +71,19 @@ class WebpackIsIncludedPlugin {
64
71
  parser.hooks.typeof
65
72
  .for("__webpack_is_included__")
66
73
  .tap(
67
- "WebpackIsIncludedPlugin",
74
+ PLUGIN_NAME,
68
75
  toConstantDependency(parser, JSON.stringify("function"))
69
76
  );
70
77
  };
71
78
  normalModuleFactory.hooks.parser
72
- .for("javascript/auto")
73
- .tap("WebpackIsIncludedPlugin", handler);
79
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
80
+ .tap(PLUGIN_NAME, handler);
74
81
  normalModuleFactory.hooks.parser
75
- .for("javascript/dynamic")
76
- .tap("WebpackIsIncludedPlugin", handler);
82
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
83
+ .tap(PLUGIN_NAME, handler);
77
84
  normalModuleFactory.hooks.parser
78
- .for("javascript/esm")
79
- .tap("WebpackIsIncludedPlugin", handler);
85
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
86
+ .tap(PLUGIN_NAME, handler);
80
87
  }
81
88
  );
82
89
  }
@@ -391,7 +391,8 @@ class WebpackOptionsApply extends OptionsApply {
391
391
  new WorkerPlugin(
392
392
  options.output.workerChunkLoading,
393
393
  options.output.workerWasmLoading,
394
- options.output.module
394
+ options.output.module,
395
+ options.output.workerPublicPath
395
396
  ).apply(compiler);
396
397
 
397
398
  new DefaultStatsFactoryPlugin().apply(compiler);
@@ -7,6 +7,14 @@
7
7
 
8
8
  const fs = require("fs");
9
9
  const path = require("path");
10
+ const {
11
+ JAVASCRIPT_MODULE_TYPE_AUTO,
12
+ JSON_MODULE_TYPE,
13
+ WEBASSEMBLY_MODULE_TYPE_ASYNC,
14
+ JAVASCRIPT_MODULE_TYPE_ESM,
15
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
16
+ WEBASSEMBLY_MODULE_TYPE_SYNC
17
+ } = require("../ModuleTypeConstants");
10
18
  const Template = require("../Template");
11
19
  const { cleverMerge } = require("../util/cleverMerge");
12
20
  const {
@@ -517,7 +525,7 @@ const applyModuleDefaults = (
517
525
 
518
526
  A(module, "defaultRules", () => {
519
527
  const esm = {
520
- type: "javascript/esm",
528
+ type: JAVASCRIPT_MODULE_TYPE_ESM,
521
529
  resolve: {
522
530
  byDependency: {
523
531
  esm: {
@@ -527,21 +535,21 @@ const applyModuleDefaults = (
527
535
  }
528
536
  };
529
537
  const commonjs = {
530
- type: "javascript/dynamic"
538
+ type: JAVASCRIPT_MODULE_TYPE_DYNAMIC
531
539
  };
532
540
  /** @type {RuleSetRules} */
533
541
  const rules = [
534
542
  {
535
543
  mimetype: "application/node",
536
- type: "javascript/auto"
544
+ type: JAVASCRIPT_MODULE_TYPE_AUTO
537
545
  },
538
546
  {
539
547
  test: /\.json$/i,
540
- type: "json"
548
+ type: JSON_MODULE_TYPE
541
549
  },
542
550
  {
543
551
  mimetype: "application/json",
544
- type: "json"
552
+ type: JSON_MODULE_TYPE
545
553
  },
546
554
  {
547
555
  test: /\.mjs$/i,
@@ -574,7 +582,7 @@ const applyModuleDefaults = (
574
582
  ];
575
583
  if (asyncWebAssembly) {
576
584
  const wasm = {
577
- type: "webassembly/async",
585
+ type: WEBASSEMBLY_MODULE_TYPE_ASYNC,
578
586
  rules: [
579
587
  {
580
588
  descriptionData: {
@@ -596,7 +604,7 @@ const applyModuleDefaults = (
596
604
  });
597
605
  } else if (syncWebAssembly) {
598
606
  const wasm = {
599
- type: "webassembly/sync",
607
+ type: WEBASSEMBLY_MODULE_TYPE_SYNC,
600
608
  rules: [
601
609
  {
602
610
  descriptionData: {
@@ -667,7 +675,7 @@ const applyModuleDefaults = (
667
675
  },
668
676
  {
669
677
  assert: { type: "json" },
670
- type: "json"
678
+ type: JSON_MODULE_TYPE
671
679
  }
672
680
  );
673
681
  return rules;
@@ -916,6 +924,7 @@ const applyOutputDefaults = (
916
924
  ? "auto"
917
925
  : ""
918
926
  );
927
+ D(output, "workerPublicPath", "");
919
928
  D(output, "chunkLoadTimeout", 120000);
920
929
  D(output, "hashFunction", futureDefaults ? "xxhash64" : "md4");
921
930
  D(output, "hashDigest", "hex");
@@ -340,6 +340,10 @@ const getNormalizedWebpackOptions = config => {
340
340
  output.auxiliaryComment !== undefined
341
341
  ? output.auxiliaryComment
342
342
  : libraryBase.auxiliaryComment,
343
+ amdContainer:
344
+ output.amdContainer !== undefined
345
+ ? output.amdContainer
346
+ : libraryBase.amdContainer,
343
347
  export:
344
348
  output.libraryExport !== undefined
345
349
  ? output.libraryExport
@@ -369,6 +373,7 @@ const getNormalizedWebpackOptions = config => {
369
373
  uniqueName: output.uniqueName,
370
374
  wasmLoading: output.wasmLoading,
371
375
  webassemblyModuleFilename: output.webassemblyModuleFilename,
376
+ workerPublicPath: output.workerPublicPath,
372
377
  workerChunkLoading: output.workerChunkLoading,
373
378
  workerWasmLoading: output.workerWasmLoading
374
379
  };
@@ -8,6 +8,7 @@
8
8
  const { OriginalSource, RawSource } = require("webpack-sources");
9
9
  const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
10
10
  const Module = require("../Module");
11
+ const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("../ModuleTypeConstants");
11
12
  const RuntimeGlobals = require("../RuntimeGlobals");
12
13
  const Template = require("../Template");
13
14
  const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
@@ -44,7 +45,7 @@ class ContainerEntryModule extends Module {
44
45
  * @param {string} shareScope name of the share scope
45
46
  */
46
47
  constructor(name, exposes, shareScope) {
47
- super("javascript/dynamic", null);
48
+ super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
48
49
  this._name = name;
49
50
  this._exposes = exposes;
50
51
  this._shareScope = shareScope;
@@ -138,6 +138,7 @@ class CssParser extends Parser {
138
138
  let singleClassSelector = undefined;
139
139
  let lastIdentifier = undefined;
140
140
  const modeStack = [];
141
+ let awaitRightParenthesis = false;
141
142
  const isTopLevelLocal = () =>
142
143
  modeData === "local" ||
143
144
  (this.defaultMode === "local" && modeData === undefined);
@@ -296,6 +297,7 @@ class CssParser extends Parser {
296
297
  module.addDependency(dep);
297
298
  }
298
299
  };
300
+ const eatAtRuleNested = eatUntil("{};/");
299
301
  const eatKeyframes = eatUntil("{};/");
300
302
  const eatNameInVar = eatUntil(",)};/");
301
303
  walkCssTokens(source, {
@@ -380,6 +382,18 @@ class CssParser extends Parser {
380
382
  modeNestingLevel = 1;
381
383
  return pos + 1;
382
384
  }
385
+ if (name === "@media" || name === "@supports") {
386
+ let pos = end;
387
+ const [newPos] = eatText(input, pos, eatAtRuleNested);
388
+ pos = newPos;
389
+ if (pos === input.length) return pos;
390
+ if (input.charCodeAt(pos) !== CC_LEFT_CURLY) {
391
+ throw new Error(
392
+ `Unexpected ${input[pos]} at ${pos} during parsing of @media or @supports (expected '{')`
393
+ );
394
+ }
395
+ return pos + 1;
396
+ }
383
397
  return end;
384
398
  },
385
399
  semicolon: (input, start, end) => {
@@ -511,6 +525,9 @@ class CssParser extends Parser {
511
525
  rightParenthesis: (input, start, end) => {
512
526
  switch (mode) {
513
527
  case CSS_MODE_TOP_LEVEL: {
528
+ if (awaitRightParenthesis) {
529
+ awaitRightParenthesis = false;
530
+ }
514
531
  const newModeData = modeStack.pop();
515
532
  if (newModeData !== false) {
516
533
  modeData = newModeData;
@@ -561,6 +578,7 @@ class CssParser extends Parser {
561
578
  const dep = new ConstDependency("", [start, end]);
562
579
  module.addPresentationalDependency(dep);
563
580
  } else {
581
+ awaitRightParenthesis = true;
564
582
  modeStack.push(false);
565
583
  }
566
584
  break;
@@ -597,8 +615,10 @@ class CssParser extends Parser {
597
615
  comma: (input, start, end) => {
598
616
  switch (mode) {
599
617
  case CSS_MODE_TOP_LEVEL:
600
- modeData = undefined;
601
- modeStack.length = 0;
618
+ if (!awaitRightParenthesis) {
619
+ modeData = undefined;
620
+ modeStack.length = 0;
621
+ }
602
622
  break;
603
623
  case CSS_MODE_IN_LOCAL_RULE:
604
624
  processDeclarationValueDone(input, start);
@@ -5,6 +5,14 @@
5
5
  "use strict";
6
6
 
7
7
  const { Tracer } = require("chrome-trace-event");
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
11
+ JAVASCRIPT_MODULE_TYPE_ESM,
12
+ WEBASSEMBLY_MODULE_TYPE_ASYNC,
13
+ WEBASSEMBLY_MODULE_TYPE_SYNC,
14
+ JSON_MODULE_TYPE
15
+ } = require("../ModuleTypeConstants");
8
16
  const createSchemaValidation = require("../util/create-schema-validation");
9
17
  const { dirname, mkdirpSync } = require("../util/fs");
10
18
 
@@ -182,7 +190,7 @@ const createTrace = (fs, outputPath) => {
182
190
  };
183
191
  };
184
192
 
185
- const pluginName = "ProfilingPlugin";
193
+ const PLUGIN_NAME = "ProfilingPlugin";
186
194
 
187
195
  class ProfilingPlugin {
188
196
  /**
@@ -216,7 +224,7 @@ class ProfilingPlugin {
216
224
  });
217
225
 
218
226
  compiler.hooks.compilation.tap(
219
- pluginName,
227
+ PLUGIN_NAME,
220
228
  (compilation, { normalModuleFactory, contextModuleFactory }) => {
221
229
  interceptAllHooksFor(compilation, tracer, "Compilation");
222
230
  interceptAllHooksFor(
@@ -237,7 +245,7 @@ class ProfilingPlugin {
237
245
  // We need to write out the CPU profile when we are all done.
238
246
  compiler.hooks.done.tapAsync(
239
247
  {
240
- name: pluginName,
248
+ name: PLUGIN_NAME,
241
249
  stage: Infinity
242
250
  },
243
251
  (stats, callback) => {
@@ -312,18 +320,18 @@ const interceptAllHooksFor = (instance, tracer, logLabel) => {
312
320
 
313
321
  const interceptAllParserHooks = (moduleFactory, tracer) => {
314
322
  const moduleTypes = [
315
- "javascript/auto",
316
- "javascript/dynamic",
317
- "javascript/esm",
318
- "json",
319
- "webassembly/async",
320
- "webassembly/sync"
323
+ JAVASCRIPT_MODULE_TYPE_AUTO,
324
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
325
+ JAVASCRIPT_MODULE_TYPE_ESM,
326
+ JSON_MODULE_TYPE,
327
+ WEBASSEMBLY_MODULE_TYPE_ASYNC,
328
+ WEBASSEMBLY_MODULE_TYPE_SYNC
321
329
  ];
322
330
 
323
331
  moduleTypes.forEach(moduleType => {
324
332
  moduleFactory.hooks.parser
325
333
  .for(moduleType)
326
- .tap("ProfilingPlugin", (parser, parserOpts) => {
334
+ .tap(PLUGIN_NAME, (parser, parserOpts) => {
327
335
  interceptAllHooksFor(parser, tracer, "Parser");
328
336
  });
329
337
  });
@@ -347,7 +355,7 @@ const makeInterceptorFor = (instance, tracer) => hookName => ({
347
355
  const { name, type, fn } = tapInfo;
348
356
  const newFn =
349
357
  // Don't tap our own hooks to ensure stream can close cleanly
350
- name === pluginName
358
+ name === PLUGIN_NAME
351
359
  ? fn
352
360
  : makeNewProfiledTapFn(hookName, tracer, {
353
361
  name,
@@ -418,7 +426,7 @@ const makeNewProfiledTapFn = (hookName, tracer, { name, type, fn }) => {
418
426
  const id = ++tracer.counter;
419
427
  // Do not instrument ourself due to the CPU
420
428
  // profile needing to be the last event in the trace.
421
- if (name === pluginName) {
429
+ if (name === PLUGIN_NAME) {
422
430
  return fn(...args);
423
431
  }
424
432