webpack 5.65.0 → 5.66.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 (60) hide show
  1. package/lib/CacheFacade.js +2 -9
  2. package/lib/Chunk.js +2 -0
  3. package/lib/Compilation.js +79 -38
  4. package/lib/Dependency.js +10 -0
  5. package/lib/DependencyTemplate.js +9 -0
  6. package/lib/ExternalModule.js +92 -52
  7. package/lib/Generator.js +2 -0
  8. package/lib/Module.js +24 -1
  9. package/lib/ModuleFilenameHelpers.js +5 -1
  10. package/lib/NormalModule.js +3 -1
  11. package/lib/RuntimeGlobals.js +11 -1
  12. package/lib/RuntimePlugin.js +25 -0
  13. package/lib/RuntimeTemplate.js +21 -0
  14. package/lib/Template.js +2 -1
  15. package/lib/Watching.js +1 -1
  16. package/lib/WebpackOptionsApply.js +43 -2
  17. package/lib/asset/AssetGenerator.js +3 -1
  18. package/lib/asset/RawDataUrlModule.js +145 -0
  19. package/lib/config/defaults.js +59 -3
  20. package/lib/css/CssGenerator.js +106 -0
  21. package/lib/css/CssLoadingRuntimeModule.js +393 -0
  22. package/lib/css/CssModulesPlugin.js +444 -0
  23. package/lib/css/CssParser.js +618 -0
  24. package/lib/css/walkCssTokens.js +659 -0
  25. package/lib/dependencies/CssExportDependency.js +85 -0
  26. package/lib/dependencies/CssImportDependency.js +75 -0
  27. package/lib/dependencies/CssLocalIdentifierDependency.js +119 -0
  28. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +101 -0
  29. package/lib/dependencies/CssUrlDependency.js +132 -0
  30. package/lib/dependencies/URLDependency.js +3 -8
  31. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +1 -1
  32. package/lib/hmr/lazyCompilationBackend.js +3 -1
  33. package/lib/javascript/JavascriptGenerator.js +1 -0
  34. package/lib/javascript/StartupHelpers.js +3 -3
  35. package/lib/library/AssignLibraryPlugin.js +26 -3
  36. package/lib/library/EnableLibraryPlugin.js +11 -0
  37. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +1 -1
  38. package/lib/node/RequireChunkLoadingRuntimeModule.js +1 -1
  39. package/lib/optimize/ConcatenatedModule.js +10 -4
  40. package/lib/util/hash/xxhash64.js +2 -2
  41. package/lib/util/internalSerializables.js +11 -0
  42. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -2
  43. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  44. package/package.json +2 -2
  45. package/schemas/WebpackOptions.check.js +1 -1
  46. package/schemas/WebpackOptions.json +55 -1
  47. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  48. package/schemas/plugins/container/ContainerPlugin.json +2 -1
  49. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  50. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  51. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  52. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  53. package/schemas/plugins/container/ModuleFederationPlugin.json +3 -1
  54. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  55. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  56. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  57. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  58. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  59. package/schemas/plugins/css/CssParserOptions.json +3 -0
  60. package/types.d.ts +86 -2
@@ -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;
@@ -25,7 +25,7 @@ const ModuleDependency = require("./ModuleDependency");
25
25
  /** @typedef {import("../util/Hash")} Hash */
26
26
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
27
27
 
28
- const getRawModule = memoize(() => require("../RawModule"));
28
+ const getRawDataUrlModule = memoize(() => require("../asset/RawDataUrlModule"));
29
29
 
30
30
  class URLDependency extends ModuleDependency {
31
31
  /**
@@ -68,13 +68,8 @@ class URLDependency extends ModuleDependency {
68
68
  * @returns {Module} a module
69
69
  */
70
70
  createIgnoredModule(context) {
71
- const RawModule = getRawModule();
72
- return new RawModule(
73
- 'module.exports = "data:,";',
74
- `ignored-asset`,
75
- `(ignored asset)`,
76
- new Set([RuntimeGlobals.module])
77
- );
71
+ const RawDataUrlModule = getRawDataUrlModule();
72
+ return new RawDataUrlModule("data:,", `ignored-asset`, `(ignored asset)`);
78
73
  }
79
74
 
80
75
  serialize(context) {
@@ -81,7 +81,7 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
81
81
  );
82
82
  const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
83
83
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
84
- const initialChunkIds = getInitialChunkIds(chunk, chunkGraph);
84
+ const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
85
85
 
86
86
  const outputName = this.compilation.getPath(
87
87
  getChunkFilenameTemplate(chunk, this.compilation.outputOptions),
@@ -68,7 +68,9 @@ module.exports = options => (compiler, callback) => {
68
68
  req.socket.setNoDelay(true);
69
69
  res.writeHead(200, {
70
70
  "content-type": "text/event-stream",
71
- "Access-Control-Allow-Origin": "*"
71
+ "Access-Control-Allow-Origin": "*",
72
+ "Access-Control-Allow-Methods": "*",
73
+ "Access-Control-Allow-Headers": "*"
72
74
  });
73
75
  res.write("\n");
74
76
  let moduleActivated = false;
@@ -199,6 +199,7 @@ class JavascriptGenerator extends Generator {
199
199
  runtime: generateContext.runtime,
200
200
  runtimeRequirements: generateContext.runtimeRequirements,
201
201
  concatenationScope: generateContext.concatenationScope,
202
+ codeGenerationResults: generateContext.codeGenerationResults,
202
203
  initFragments
203
204
  };
204
205
 
@@ -9,7 +9,6 @@ const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const Template = require("../Template");
10
10
  const { isSubset } = require("../util/SetHelpers");
11
11
  const { getAllChunks } = require("./ChunkHelpers");
12
- const { chunkHasJs } = require("./JavascriptModulesPlugin");
13
12
 
14
13
  /** @typedef {import("../util/Hash")} Hash */
15
14
  /** @typedef {import("../Chunk")} Chunk */
@@ -119,12 +118,13 @@ exports.updateHashForEntryStartup = (hash, chunkGraph, entries, chunk) => {
119
118
  /**
120
119
  * @param {Chunk} chunk the chunk
121
120
  * @param {ChunkGraph} chunkGraph the chunk graph
121
+ * @param {function(Chunk, ChunkGraph): boolean} filterFn filter function
122
122
  * @returns {Set<number | string>} initially fulfilled chunk ids
123
123
  */
124
- exports.getInitialChunkIds = (chunk, chunkGraph) => {
124
+ exports.getInitialChunkIds = (chunk, chunkGraph, filterFn) => {
125
125
  const initialChunkIds = new Set(chunk.ids);
126
126
  for (const c of chunk.getAllInitialChunks()) {
127
- if (c === chunk || chunkHasJs(c, chunkGraph)) continue;
127
+ if (c === chunk || filterFn(c, chunkGraph)) continue;
128
128
  for (const id of c.ids) initialChunkIds.add(id);
129
129
  }
130
130
  return initialChunkIds;
@@ -92,7 +92,7 @@ const accessWithInit = (accessor, existingLength, initLast = false) => {
92
92
  * @property {LibraryType} type
93
93
  * @property {string[] | "global"} prefix name prefix
94
94
  * @property {string | false} declare declare name as variable
95
- * @property {"error"|"copy"|"assign"} unnamed behavior for unnamed library name
95
+ * @property {"error"|"static"|"copy"|"assign"} unnamed behavior for unnamed library name
96
96
  * @property {"copy"|"assign"=} named behavior for named library name
97
97
  */
98
98
 
@@ -261,19 +261,42 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
261
261
  * @param {LibraryContext<T>} libraryContext context
262
262
  * @returns {Source} source with library export
263
263
  */
264
- renderStartup(source, module, { chunk }, { options, compilation }) {
264
+ renderStartup(
265
+ source,
266
+ module,
267
+ { moduleGraph, chunk },
268
+ { options, compilation }
269
+ ) {
265
270
  const fullNameResolved = this._getResolvedFullName(
266
271
  options,
267
272
  chunk,
268
273
  compilation
269
274
  );
275
+ const staticExports = this.unnamed === "static";
270
276
  const exportAccess = options.export
271
277
  ? propertyAccess(
272
278
  Array.isArray(options.export) ? options.export : [options.export]
273
279
  )
274
280
  : "";
275
281
  const result = new ConcatSource(source);
276
- if (options.name ? this.named === "copy" : this.unnamed === "copy") {
282
+ if (staticExports) {
283
+ const exportsInfo = moduleGraph.getExportsInfo(module);
284
+ const exportTarget = accessWithInit(
285
+ fullNameResolved,
286
+ this._getPrefix(compilation).length,
287
+ true
288
+ );
289
+ for (const exportInfo of exportsInfo.orderedExports) {
290
+ if (!exportInfo.provided) continue;
291
+ const nameAccess = propertyAccess([exportInfo.name]);
292
+ result.add(
293
+ `${exportTarget}${nameAccess} = __webpack_exports__${exportAccess}${nameAccess};\n`
294
+ );
295
+ }
296
+ result.add(
297
+ `Object.defineProperty(${exportTarget}, "__esModule", { value: true });\n`
298
+ );
299
+ } else if (options.name ? this.named === "copy" : this.unnamed === "copy") {
277
300
  result.add(
278
301
  `var __webpack_export_target__ = ${accessWithInit(
279
302
  fullNameResolved,
@@ -167,6 +167,17 @@ class EnableLibraryPlugin {
167
167
  }).apply(compiler);
168
168
  break;
169
169
  }
170
+ case "commonjs-static": {
171
+ //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
172
+ const AssignLibraryPlugin = require("./AssignLibraryPlugin");
173
+ new AssignLibraryPlugin({
174
+ type,
175
+ prefix: ["exports"],
176
+ declare: false,
177
+ unnamed: "static"
178
+ }).apply(compiler);
179
+ break;
180
+ }
170
181
  case "commonjs2":
171
182
  case "commonjs-module": {
172
183
  //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
@@ -46,7 +46,7 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
46
46
  );
47
47
  const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
48
48
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
49
- const initialChunkIds = getInitialChunkIds(chunk, chunkGraph);
49
+ const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
50
50
 
51
51
  const outputName = this.compilation.getPath(
52
52
  getChunkFilenameTemplate(chunk, this.compilation.outputOptions),
@@ -46,7 +46,7 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
46
46
  );
47
47
  const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
48
48
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
49
- const initialChunkIds = getInitialChunkIds(chunk, chunkGraph);
49
+ const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
50
50
 
51
51
  const outputName = this.compilation.getPath(
52
52
  getChunkFilenameTemplate(chunk, this.compilation.outputOptions),