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.
- package/lib/CacheFacade.js +2 -9
- package/lib/Chunk.js +2 -0
- package/lib/Compilation.js +79 -38
- package/lib/Dependency.js +10 -0
- package/lib/DependencyTemplate.js +9 -0
- package/lib/ExternalModule.js +92 -52
- package/lib/Generator.js +2 -0
- package/lib/Module.js +24 -1
- package/lib/ModuleFilenameHelpers.js +5 -1
- package/lib/NormalModule.js +3 -1
- package/lib/RuntimeGlobals.js +11 -1
- package/lib/RuntimePlugin.js +25 -0
- package/lib/RuntimeTemplate.js +21 -0
- package/lib/Template.js +2 -1
- package/lib/Watching.js +1 -1
- package/lib/WebpackOptionsApply.js +43 -2
- package/lib/asset/AssetGenerator.js +3 -1
- package/lib/asset/RawDataUrlModule.js +145 -0
- package/lib/config/defaults.js +59 -3
- package/lib/css/CssGenerator.js +106 -0
- package/lib/css/CssLoadingRuntimeModule.js +393 -0
- package/lib/css/CssModulesPlugin.js +444 -0
- package/lib/css/CssParser.js +618 -0
- package/lib/css/walkCssTokens.js +659 -0
- package/lib/dependencies/CssExportDependency.js +85 -0
- package/lib/dependencies/CssImportDependency.js +75 -0
- package/lib/dependencies/CssLocalIdentifierDependency.js +119 -0
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +101 -0
- package/lib/dependencies/CssUrlDependency.js +132 -0
- package/lib/dependencies/URLDependency.js +3 -8
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +1 -1
- package/lib/hmr/lazyCompilationBackend.js +3 -1
- package/lib/javascript/JavascriptGenerator.js +1 -0
- package/lib/javascript/StartupHelpers.js +3 -3
- package/lib/library/AssignLibraryPlugin.js +26 -3
- package/lib/library/EnableLibraryPlugin.js +11 -0
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +1 -1
- package/lib/node/RequireChunkLoadingRuntimeModule.js +1 -1
- package/lib/optimize/ConcatenatedModule.js +10 -4
- package/lib/util/hash/xxhash64.js +2 -2
- package/lib/util/internalSerializables.js +11 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -2
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
- package/package.json +2 -2
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +55 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +2 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +3 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssParserOptions.json +3 -0
- 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
|
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
|
72
|
-
return new
|
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 ||
|
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(
|
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 (
|
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),
|