webpack 5.65.0 → 5.69.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 (134) hide show
  1. package/README.md +1 -1
  2. package/lib/APIPlugin.js +33 -0
  3. package/lib/Cache.js +1 -1
  4. package/lib/CacheFacade.js +4 -11
  5. package/lib/Chunk.js +2 -0
  6. package/lib/ChunkGraph.js +1 -2
  7. package/lib/CleanPlugin.js +1 -1
  8. package/lib/Compilation.js +93 -47
  9. package/lib/Compiler.js +57 -3
  10. package/lib/ContextModule.js +100 -41
  11. package/lib/ContextModuleFactory.js +60 -21
  12. package/lib/DelegatedModule.js +1 -1
  13. package/lib/Dependency.js +10 -0
  14. package/lib/DependencyTemplate.js +9 -0
  15. package/lib/DependencyTemplates.js +1 -1
  16. package/lib/DllModule.js +1 -1
  17. package/lib/EvalDevToolModulePlugin.js +16 -1
  18. package/lib/EvalSourceMapDevToolPlugin.js +18 -1
  19. package/lib/ExportsInfo.js +4 -4
  20. package/lib/ExternalModule.js +93 -53
  21. package/lib/ExternalModuleFactoryPlugin.js +1 -1
  22. package/lib/FileSystemInfo.js +29 -25
  23. package/lib/Generator.js +2 -0
  24. package/lib/HookWebpackError.js +1 -1
  25. package/lib/Module.js +25 -4
  26. package/lib/ModuleFilenameHelpers.js +5 -1
  27. package/lib/MultiCompiler.js +1 -1
  28. package/lib/MultiWatching.js +1 -1
  29. package/lib/NormalModule.js +9 -5
  30. package/lib/NormalModuleFactory.js +25 -27
  31. package/lib/ProgressPlugin.js +1 -1
  32. package/lib/RawModule.js +1 -1
  33. package/lib/RuntimeGlobals.js +29 -1
  34. package/lib/RuntimeModule.js +1 -1
  35. package/lib/RuntimePlugin.js +50 -0
  36. package/lib/RuntimeTemplate.js +21 -0
  37. package/lib/Template.js +2 -1
  38. package/lib/TemplatedPathPlugin.js +48 -23
  39. package/lib/Watching.js +2 -2
  40. package/lib/WebpackOptionsApply.js +43 -2
  41. package/lib/asset/AssetGenerator.js +67 -26
  42. package/lib/asset/AssetModulesPlugin.js +3 -0
  43. package/lib/asset/RawDataUrlModule.js +148 -0
  44. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
  45. package/lib/buildChunkGraph.js +1 -1
  46. package/lib/cache/ResolverCachePlugin.js +81 -29
  47. package/lib/cli.js +44 -3
  48. package/lib/config/defaults.js +86 -7
  49. package/lib/config/normalization.js +5 -0
  50. package/lib/container/ContainerEntryModule.js +4 -2
  51. package/lib/container/FallbackModule.js +4 -4
  52. package/lib/container/RemoteModule.js +4 -2
  53. package/lib/css/CssExportsGenerator.js +139 -0
  54. package/lib/css/CssGenerator.js +109 -0
  55. package/lib/css/CssLoadingRuntimeModule.js +440 -0
  56. package/lib/css/CssModulesPlugin.js +462 -0
  57. package/lib/css/CssParser.js +618 -0
  58. package/lib/css/walkCssTokens.js +659 -0
  59. package/lib/debug/ProfilingPlugin.js +15 -14
  60. package/lib/dependencies/ContextElementDependency.js +8 -2
  61. package/lib/dependencies/CreateScriptUrlDependency.js +12 -0
  62. package/lib/dependencies/CssExportDependency.js +85 -0
  63. package/lib/dependencies/CssImportDependency.js +75 -0
  64. package/lib/dependencies/CssLocalIdentifierDependency.js +119 -0
  65. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +101 -0
  66. package/lib/dependencies/CssUrlDependency.js +132 -0
  67. package/lib/dependencies/ExportsInfoDependency.js +6 -0
  68. package/lib/dependencies/HarmonyCompatibilityDependency.js +5 -5
  69. package/lib/dependencies/ImportMetaPlugin.js +22 -3
  70. package/lib/dependencies/LoaderPlugin.js +2 -2
  71. package/lib/dependencies/URLDependency.js +3 -8
  72. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +1 -1
  73. package/lib/hmr/LazyCompilationPlugin.js +45 -21
  74. package/lib/hmr/lazyCompilationBackend.js +4 -2
  75. package/lib/ids/DeterministicModuleIdsPlugin.js +55 -35
  76. package/lib/ids/HashedModuleIdsPlugin.js +9 -12
  77. package/lib/ids/IdHelpers.js +24 -10
  78. package/lib/ids/NamedModuleIdsPlugin.js +6 -9
  79. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  80. package/lib/ids/OccurrenceModuleIdsPlugin.js +13 -10
  81. package/lib/ids/SyncModuleIdsPlugin.js +140 -0
  82. package/lib/index.js +10 -0
  83. package/lib/javascript/JavascriptGenerator.js +1 -0
  84. package/lib/javascript/JavascriptModulesPlugin.js +27 -2
  85. package/lib/javascript/StartupHelpers.js +6 -5
  86. package/lib/library/AssignLibraryPlugin.js +34 -5
  87. package/lib/library/EnableLibraryPlugin.js +11 -0
  88. package/lib/node/NodeTargetPlugin.js +1 -0
  89. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +1 -1
  90. package/lib/node/RequireChunkLoadingRuntimeModule.js +1 -1
  91. package/lib/optimize/ConcatenatedModule.js +21 -9
  92. package/lib/runtime/AsyncModuleRuntimeModule.js +25 -15
  93. package/lib/runtime/CreateScriptRuntimeModule.js +36 -0
  94. package/lib/runtime/CreateScriptUrlRuntimeModule.js +9 -34
  95. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +76 -0
  96. package/lib/schemes/HttpUriPlugin.js +32 -11
  97. package/lib/serialization/FileMiddleware.js +44 -9
  98. package/lib/sharing/ConsumeSharedModule.js +4 -2
  99. package/lib/sharing/ProvideSharedModule.js +4 -2
  100. package/lib/sharing/utils.js +1 -1
  101. package/lib/stats/DefaultStatsFactoryPlugin.js +112 -67
  102. package/lib/stats/DefaultStatsPrinterPlugin.js +88 -23
  103. package/lib/util/ArrayHelpers.js +18 -4
  104. package/lib/util/AsyncQueue.js +1 -1
  105. package/lib/util/compileBooleanMatcher.js +1 -1
  106. package/lib/util/deterministicGrouping.js +1 -1
  107. package/lib/util/hash/xxhash64.js +2 -2
  108. package/lib/util/identifier.js +65 -44
  109. package/lib/util/internalSerializables.js +11 -0
  110. package/lib/util/nonNumericOnlyHash.js +22 -0
  111. package/lib/util/semver.js +17 -10
  112. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +9 -3
  113. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -2
  114. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -11
  115. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  116. package/package.json +16 -23
  117. package/schemas/WebpackOptions.check.js +1 -1
  118. package/schemas/WebpackOptions.json +96 -1
  119. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  120. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  121. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  122. package/schemas/plugins/container/ContainerPlugin.json +2 -1
  123. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  124. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  125. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  126. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  127. package/schemas/plugins/container/ModuleFederationPlugin.json +3 -1
  128. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  129. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  130. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  131. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  132. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  133. package/schemas/plugins/css/CssParserOptions.json +3 -0
  134. package/types.d.ts +295 -59
@@ -53,12 +53,18 @@ class ContextElementDependency extends ModuleDependency {
53
53
  }
54
54
 
55
55
  serialize(context) {
56
- context.write(this.referencedExports);
56
+ const { write } = context;
57
+ write(this._typePrefix);
58
+ write(this._category);
59
+ write(this.referencedExports);
57
60
  super.serialize(context);
58
61
  }
59
62
 
60
63
  deserialize(context) {
61
- this.referencedExports = context.read();
64
+ const { read } = context;
65
+ this._typePrefix = read();
66
+ this._category = read();
67
+ this.referencedExports = read();
62
68
  super.deserialize(context);
63
69
  }
64
70
  }
@@ -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) !==
@@ -74,14 +74,14 @@ HarmonyCompatibilityDependency.Template = class HarmonyExportDependencyTemplate
74
74
  initFragments.push(
75
75
  new InitFragment(
76
76
  runtimeTemplate.supportsArrowFunction()
77
- ? `${RuntimeGlobals.asyncModule}(${module.moduleArgument}, async (__webpack_handle_async_dependencies__) => {\n`
78
- : `${RuntimeGlobals.asyncModule}(${module.moduleArgument}, async function (__webpack_handle_async_dependencies__) {\n`,
77
+ ? `${RuntimeGlobals.asyncModule}(${module.moduleArgument}, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n`
78
+ : `${RuntimeGlobals.asyncModule}(${module.moduleArgument}, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {\n`,
79
79
  InitFragment.STAGE_ASYNC_BOUNDARY,
80
80
  0,
81
81
  undefined,
82
- module.buildMeta.async
83
- ? `\n__webpack_handle_async_dependencies__();\n}, 1);`
84
- : "\n});"
82
+ `\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } }${
83
+ module.buildMeta.async ? ", 1" : ""
84
+ });`
85
85
  )
86
86
  );
87
87
  }
@@ -20,6 +20,7 @@ const propertyAccess = require("../util/propertyAccess");
20
20
  const ConstDependency = require("./ConstDependency");
21
21
 
22
22
  /** @typedef {import("estree").MemberExpression} MemberExpression */
23
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
23
24
  /** @typedef {import("../Compiler")} Compiler */
24
25
  /** @typedef {import("../NormalModule")} NormalModule */
25
26
  /** @typedef {import("../javascript/JavascriptParser")} Parser */
@@ -44,11 +45,29 @@ class ImportMetaPlugin {
44
45
  return pathToFileURL(module.resource).toString();
45
46
  };
46
47
  /**
47
- * @param {Parser} parser parser
48
- * @param {Object} parserOptions parserOptions
48
+ * @param {Parser} parser parser parser
49
+ * @param {JavascriptParserOptions} parserOptions parserOptions
49
50
  * @returns {void}
50
51
  */
51
- const parserHandler = (parser, parserOptions) => {
52
+ const parserHandler = (parser, { importMeta }) => {
53
+ if (importMeta === false) {
54
+ const { importMetaName } = compilation.outputOptions;
55
+ if (importMetaName === "import.meta") return;
56
+
57
+ parser.hooks.expression
58
+ .for("import.meta")
59
+ .tap("ImportMetaPlugin", metaProperty => {
60
+ const dep = new ConstDependency(
61
+ importMetaName,
62
+ metaProperty.range
63
+ );
64
+ dep.loc = metaProperty.loc;
65
+ parser.state.module.addPresentationalDependency(dep);
66
+ return true;
67
+ });
68
+ return;
69
+ }
70
+
52
71
  /// import.meta direct ///
53
72
  parser.hooks.typeof
54
73
  .for("import.meta")
@@ -16,7 +16,7 @@ const LoaderImportDependency = require("./LoaderImportDependency");
16
16
 
17
17
  /**
18
18
  * @callback LoadModuleCallback
19
- * @param {Error=} err error object
19
+ * @param {(Error | null)=} err error object
20
20
  * @param {string | Buffer=} source source code
21
21
  * @param {object=} map source map
22
22
  * @param {Module=} module loaded module if successful
@@ -24,7 +24,7 @@ const LoaderImportDependency = require("./LoaderImportDependency");
24
24
 
25
25
  /**
26
26
  * @callback ImportModuleCallback
27
- * @param {Error=} err error object
27
+ * @param {(Error | null)=} err error object
28
28
  * @param {any=} exports exports of the evaluated module
29
29
  */
30
30
 
@@ -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),