webpack 5.98.0 → 5.99.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.
- package/README.md +7 -3
- package/lib/AsyncDependenciesBlock.js +3 -1
- package/lib/BannerPlugin.js +1 -1
- package/lib/Cache.js +9 -7
- package/lib/CacheFacade.js +5 -5
- package/lib/Chunk.js +2 -2
- package/lib/ChunkGraph.js +21 -16
- package/lib/ChunkTemplate.js +6 -6
- package/lib/CleanPlugin.js +10 -10
- package/lib/CodeGenerationResults.js +4 -3
- package/lib/CompatibilityPlugin.js +4 -1
- package/lib/Compilation.js +326 -152
- package/lib/Compiler.js +13 -18
- package/lib/ConditionalInitFragment.js +1 -1
- package/lib/ConstPlugin.js +5 -3
- package/lib/ContextModule.js +4 -2
- package/lib/ContextModuleFactory.js +3 -3
- package/lib/ContextReplacementPlugin.js +43 -16
- package/lib/DefinePlugin.js +25 -24
- package/lib/DelegatedModule.js +4 -2
- package/lib/DelegatedModuleFactoryPlugin.js +2 -1
- package/lib/Dependency.js +19 -13
- package/lib/DependencyTemplates.js +4 -3
- package/lib/DllModule.js +4 -2
- package/lib/DllModuleFactory.js +2 -2
- package/lib/DllReferencePlugin.js +2 -1
- package/lib/DynamicEntryPlugin.js +1 -1
- package/lib/EnvironmentPlugin.js +4 -2
- package/lib/ExportsInfo.js +72 -40
- package/lib/ExternalModule.js +14 -5
- package/lib/ExternalModuleFactoryPlugin.js +24 -12
- package/lib/FileSystemInfo.js +129 -94
- package/lib/FlagDependencyExportsPlugin.js +6 -4
- package/lib/FlagDependencyUsagePlugin.js +1 -1
- package/lib/Generator.js +29 -1
- package/lib/HookWebpackError.js +2 -2
- package/lib/HotModuleReplacementPlugin.js +3 -9
- package/lib/IgnoreErrorModuleFactory.js +2 -2
- package/lib/IgnorePlugin.js +0 -5
- package/lib/InitFragment.js +1 -1
- package/lib/LoaderOptionsPlugin.js +8 -5
- package/lib/MainTemplate.js +7 -7
- package/lib/Module.js +40 -17
- package/lib/ModuleBuildError.js +3 -1
- package/lib/ModuleDependencyError.js +4 -3
- package/lib/ModuleDependencyWarning.js +4 -3
- package/lib/ModuleFactory.js +9 -3
- package/lib/ModuleFilenameHelpers.js +13 -13
- package/lib/ModuleGraph.js +20 -14
- package/lib/ModuleGraphConnection.js +7 -13
- package/lib/ModuleNotFoundError.js +1 -1
- package/lib/ModuleParseError.js +2 -1
- package/lib/ModuleSourceTypesConstants.js +11 -0
- package/lib/ModuleTemplate.js +5 -5
- package/lib/ModuleTypeConstants.js +15 -0
- package/lib/MultiCompiler.js +4 -4
- package/lib/MultiStats.js +1 -1
- package/lib/NormalModule.js +101 -54
- package/lib/NormalModuleFactory.js +38 -33
- package/lib/NormalModuleReplacementPlugin.js +3 -2
- package/lib/NullFactory.js +2 -2
- package/lib/Parser.js +4 -3
- package/lib/ProgressPlugin.js +1 -2
- package/lib/RawModule.js +4 -2
- package/lib/RecordIdsPlugin.js +6 -2
- package/lib/RequestShortener.js +3 -1
- package/lib/ResolverFactory.js +12 -9
- package/lib/RuntimeModule.js +4 -2
- package/lib/RuntimeTemplate.js +2 -1
- package/lib/SelfModuleFactory.js +2 -2
- package/lib/SourceMapDevToolPlugin.js +0 -8
- package/lib/Template.js +6 -5
- package/lib/TemplatedPathPlugin.js +15 -12
- package/lib/WebpackOptionsApply.js +1 -1
- package/lib/asset/AssetGenerator.js +237 -170
- package/lib/asset/AssetModulesPlugin.js +50 -8
- package/lib/asset/AssetSourceGenerator.js +18 -0
- package/lib/asset/RawDataUrlModule.js +4 -2
- package/lib/buildChunkGraph.js +14 -4
- package/lib/cache/MemoryWithGcCachePlugin.js +6 -2
- package/lib/cache/PackFileCacheStrategy.js +137 -121
- package/lib/cache/ResolverCachePlugin.js +15 -7
- package/lib/cache/getLazyHashedEtag.js +4 -3
- package/lib/cli.js +23 -15
- package/lib/config/defaults.js +93 -26
- package/lib/config/normalization.js +14 -13
- package/lib/config/target.js +8 -8
- package/lib/container/ContainerEntryModule.js +4 -2
- package/lib/container/ContainerEntryModuleFactory.js +2 -2
- package/lib/container/FallbackModule.js +4 -2
- package/lib/container/FallbackModuleFactory.js +2 -2
- package/lib/container/RemoteModule.js +4 -2
- package/lib/container/options.js +5 -5
- package/lib/css/CssGenerator.js +71 -9
- package/lib/css/CssModulesPlugin.js +30 -5
- package/lib/css/CssParser.js +37 -17
- package/lib/css/walkCssTokens.js +17 -17
- package/lib/debug/ProfilingPlugin.js +98 -38
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +10 -4
- package/lib/dependencies/AMDPlugin.js +5 -2
- package/lib/dependencies/AMDRequireArrayDependency.js +4 -3
- package/lib/dependencies/AMDRequireContextDependency.js +2 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +15 -7
- package/lib/dependencies/AMDRuntimeModules.js +3 -1
- package/lib/dependencies/CommonJsExportRequireDependency.js +4 -5
- package/lib/dependencies/CommonJsExportsParserPlugin.js +3 -3
- package/lib/dependencies/CommonJsImportsParserPlugin.js +8 -7
- package/lib/dependencies/CommonJsRequireContextDependency.js +2 -1
- package/lib/dependencies/ContextDependencyHelpers.js +13 -6
- package/lib/dependencies/CssIcssExportDependency.js +15 -12
- package/lib/dependencies/CssIcssImportDependency.js +4 -1
- package/lib/dependencies/CssLocalIdentifierDependency.js +17 -14
- package/lib/dependencies/ExportsInfoDependency.js +6 -1
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +5 -5
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +22 -15
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +23 -8
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
- package/lib/dependencies/HarmonyImportDependency.js +8 -6
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -14
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +5 -5
- package/lib/dependencies/ImportContextDependency.js +2 -1
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +8 -4
- package/lib/dependencies/JsonExportsDependency.js +24 -8
- package/lib/dependencies/LoaderPlugin.js +4 -14
- package/lib/dependencies/RequireContextDependency.js +2 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +6 -3
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -2
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +11 -5
- package/lib/dependencies/RequireResolveContextDependency.js +1 -1
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +1 -1
- package/lib/dependencies/WorkerDependency.js +6 -3
- package/lib/dependencies/WorkerPlugin.js +100 -41
- package/lib/esm/ModuleChunkFormatPlugin.js +5 -0
- package/lib/hmr/HotModuleReplacement.runtime.js +1 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +32 -24
- package/lib/hmr/lazyCompilationBackend.js +1 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/ids/IdHelpers.js +15 -14
- package/lib/ids/SyncModuleIdsPlugin.js +9 -5
- package/lib/index.js +5 -5
- package/lib/javascript/BasicEvaluatedExpression.js +6 -6
- package/lib/javascript/JavascriptGenerator.js +11 -1
- package/lib/javascript/JavascriptModulesPlugin.js +51 -31
- package/lib/javascript/JavascriptParser.js +272 -188
- package/lib/javascript/JavascriptParserHelpers.js +10 -9
- package/lib/javascript/StartupHelpers.js +4 -1
- package/lib/json/JsonData.js +4 -4
- package/lib/json/JsonGenerator.js +54 -22
- package/lib/json/JsonModulesPlugin.js +16 -2
- package/lib/json/JsonParser.js +8 -4
- package/lib/library/AbstractLibraryPlugin.js +7 -3
- package/lib/library/AssignLibraryPlugin.js +29 -1
- package/lib/library/EnableLibraryPlugin.js +7 -10
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
- package/lib/library/ModuleLibraryPlugin.js +121 -15
- package/lib/logging/Logger.js +2 -2
- package/lib/logging/createConsoleLogger.js +4 -4
- package/lib/node/NodeEnvironmentPlugin.js +6 -2
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +1 -2
- package/lib/node/nodeConsole.js +3 -1
- package/lib/optimize/AggressiveSplittingPlugin.js +1 -1
- package/lib/optimize/ConcatenatedModule.js +19 -12
- package/lib/optimize/InnerGraph.js +3 -2
- package/lib/optimize/InnerGraphPlugin.js +13 -7
- package/lib/optimize/LimitChunkCountPlugin.js +20 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +10 -7
- package/lib/optimize/RealContentHashPlugin.js +8 -4
- package/lib/optimize/SideEffectsFlagPlugin.js +4 -2
- package/lib/optimize/SplitChunksPlugin.js +87 -65
- package/lib/rules/BasicEffectRulePlugin.js +9 -1
- package/lib/rules/BasicMatcherRulePlugin.js +15 -4
- package/lib/rules/ObjectMatcherRulePlugin.js +12 -3
- package/lib/rules/RuleSetCompiler.js +25 -14
- package/lib/rules/UseEffectRulePlugin.js +47 -17
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +6 -6
- package/lib/schemes/HttpUriPlugin.js +38 -17
- package/lib/serialization/BinaryMiddleware.js +52 -19
- package/lib/serialization/FileMiddleware.js +78 -48
- package/lib/serialization/ObjectMiddleware.js +78 -29
- package/lib/serialization/PlainObjectSerializer.js +1 -1
- package/lib/serialization/Serializer.js +15 -10
- package/lib/serialization/SerializerMiddleware.js +80 -41
- package/lib/serialization/SingleItemMiddleware.js +10 -7
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedModule.js +4 -2
- package/lib/sharing/ProvideSharedModule.js +4 -2
- package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
- package/lib/sharing/utils.js +2 -2
- package/lib/stats/DefaultStatsFactoryPlugin.js +80 -78
- package/lib/stats/DefaultStatsPresetPlugin.js +43 -23
- package/lib/stats/DefaultStatsPrinterPlugin.js +85 -43
- package/lib/stats/StatsFactory.js +11 -11
- package/lib/stats/StatsPrinter.js +7 -7
- package/lib/util/ArrayHelpers.js +2 -4
- package/lib/util/ArrayQueue.js +1 -1
- package/lib/util/AsyncQueue.js +4 -4
- package/lib/util/IterableHelpers.js +1 -1
- package/lib/util/LazyBucketSortedSet.js +41 -23
- package/lib/util/LazySet.js +3 -2
- package/lib/util/MapHelpers.js +1 -1
- package/lib/util/ParallelismFactorCalculator.js +1 -1
- package/lib/util/Semaphore.js +3 -3
- package/lib/util/SetHelpers.js +1 -1
- package/lib/util/SortableSet.js +9 -7
- package/lib/util/TupleQueue.js +9 -8
- package/lib/util/TupleSet.js +2 -2
- package/lib/util/WeakTupleMap.js +12 -11
- package/lib/util/binarySearchBounds.js +2 -1
- package/lib/util/cleverMerge.js +84 -54
- package/lib/util/comparators.js +22 -21
- package/lib/util/compileBooleanMatcher.js +3 -3
- package/lib/util/concatenate.js +6 -4
- package/lib/util/create-schema-validation.js +4 -4
- package/lib/util/createHash.js +2 -2
- package/lib/util/deprecation.js +35 -33
- package/lib/util/deterministicGrouping.js +6 -6
- package/lib/util/findGraphRoots.js +1 -1
- package/lib/util/fs.js +39 -39
- package/lib/util/hash/wasm-hash.js +2 -2
- package/lib/util/identifier.js +15 -18
- package/lib/util/makeSerializable.js +1 -1
- package/lib/util/memoize.js +4 -1
- package/lib/util/objectToMap.js +3 -2
- package/lib/util/processAsyncTree.js +2 -2
- package/lib/util/propertyName.js +0 -1
- package/lib/util/registerExternalSerializer.js +15 -18
- package/lib/util/removeBOM.js +25 -0
- package/lib/util/runtime.js +34 -27
- package/lib/util/serialization.js +5 -16
- package/lib/util/smartGrouping.js +3 -3
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +11 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +10 -0
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +4 -0
- package/lib/wasm-sync/WebAssemblyGenerator.js +28 -12
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +10 -0
- package/lib/wasm-sync/WebAssemblyParser.js +9 -4
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -25
- package/package.json +19 -17
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +48 -13
- package/schemas/plugins/JsonModulesPluginGenerator.check.d.ts +7 -0
- package/schemas/plugins/JsonModulesPluginGenerator.check.js +6 -0
- package/schemas/plugins/JsonModulesPluginGenerator.json +11 -0
- package/schemas/plugins/SourceMapDevToolPlugin.json +2 -2
- package/types.d.ts +918 -615
- package/lib/library/ModernModuleLibraryPlugin.js +0 -144
package/lib/ids/IdHelpers.js
CHANGED
@@ -14,6 +14,7 @@ const numberHash = require("../util/numberHash");
|
|
14
14
|
/** @typedef {import("../Compilation")} Compilation */
|
15
15
|
/** @typedef {import("../Module")} Module */
|
16
16
|
/** @typedef {typeof import("../util/Hash")} Hash */
|
17
|
+
/** @typedef {import("../util/identifier").AssociatedObjectForCache} AssociatedObjectForCache */
|
17
18
|
|
18
19
|
/**
|
19
20
|
* @param {string} str string to hash
|
@@ -75,7 +76,7 @@ const shortenLongString = (string, delimiter, hashFunction) => {
|
|
75
76
|
/**
|
76
77
|
* @param {Module} module the module
|
77
78
|
* @param {string} context context directory
|
78
|
-
* @param {
|
79
|
+
* @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
|
79
80
|
* @returns {string} short module name
|
80
81
|
*/
|
81
82
|
const getShortModuleName = (module, context, associatedObjectForCache) => {
|
@@ -95,7 +96,7 @@ module.exports.getShortModuleName = getShortModuleName;
|
|
95
96
|
* @param {Module} module the module
|
96
97
|
* @param {string} context context directory
|
97
98
|
* @param {string | Hash} hashFunction hash function to use
|
98
|
-
* @param {
|
99
|
+
* @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
|
99
100
|
* @returns {string} long module name
|
100
101
|
*/
|
101
102
|
const getLongModuleName = (
|
@@ -113,7 +114,7 @@ module.exports.getLongModuleName = getLongModuleName;
|
|
113
114
|
/**
|
114
115
|
* @param {Module} module the module
|
115
116
|
* @param {string} context context directory
|
116
|
-
* @param {
|
117
|
+
* @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
|
117
118
|
* @returns {string} full module name
|
118
119
|
*/
|
119
120
|
const getFullModuleName = (module, context, associatedObjectForCache) =>
|
@@ -126,7 +127,7 @@ module.exports.getFullModuleName = getFullModuleName;
|
|
126
127
|
* @param {string} context context directory
|
127
128
|
* @param {string} delimiter delimiter for names
|
128
129
|
* @param {string | Hash} hashFunction hash function to use
|
129
|
-
* @param {
|
130
|
+
* @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
|
130
131
|
* @returns {string} short chunk name
|
131
132
|
*/
|
132
133
|
const getShortChunkName = (
|
@@ -156,7 +157,7 @@ module.exports.getShortChunkName = getShortChunkName;
|
|
156
157
|
* @param {string} context context directory
|
157
158
|
* @param {string} delimiter delimiter for names
|
158
159
|
* @param {string | Hash} hashFunction hash function to use
|
159
|
-
* @param {
|
160
|
+
* @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
|
160
161
|
* @returns {string} short chunk name
|
161
162
|
*/
|
162
163
|
const getLongChunkName = (
|
@@ -189,7 +190,7 @@ module.exports.getLongChunkName = getLongChunkName;
|
|
189
190
|
* @param {Chunk} chunk the chunk
|
190
191
|
* @param {ChunkGraph} chunkGraph the chunk graph
|
191
192
|
* @param {string} context context directory
|
192
|
-
* @param {
|
193
|
+
* @param {AssociatedObjectForCache=} associatedObjectForCache an object to which the cache will be attached
|
193
194
|
* @returns {string} full chunk name
|
194
195
|
*/
|
195
196
|
const getFullChunkName = (
|
@@ -226,7 +227,7 @@ const addToMapOfItems = (map, key, value) => {
|
|
226
227
|
|
227
228
|
/**
|
228
229
|
* @param {Compilation} compilation the compilation
|
229
|
-
* @param {
|
230
|
+
* @param {((module: Module) => boolean)=} filter filter modules
|
230
231
|
* @returns {[Set<string>, Module[]]} used module ids as strings and modules without id matching the filter
|
231
232
|
*/
|
232
233
|
const getUsedModuleIdsAndModules = (compilation, filter) => {
|
@@ -286,11 +287,11 @@ module.exports.getUsedChunkIds = getUsedChunkIds;
|
|
286
287
|
/**
|
287
288
|
* @template T
|
288
289
|
* @param {Iterable<T>} items list of items to be named
|
289
|
-
* @param {
|
290
|
-
* @param {
|
291
|
-
* @param {
|
290
|
+
* @param {(item: T) => string} getShortName get a short name for an item
|
291
|
+
* @param {(item: T, name: string) => string} getLongName get a long name for an item
|
292
|
+
* @param {(a: T, b: T) => -1 | 0 | 1} comparator order of items
|
292
293
|
* @param {Set<string>} usedIds already used ids, will not be assigned
|
293
|
-
* @param {
|
294
|
+
* @param {(item: T, name: string) => void} assignName assign a name to an item
|
294
295
|
* @returns {T[]} list of items without a name
|
295
296
|
*/
|
296
297
|
const assignNames = (
|
@@ -354,9 +355,9 @@ module.exports.assignNames = assignNames;
|
|
354
355
|
/**
|
355
356
|
* @template T
|
356
357
|
* @param {T[]} items list of items to be named
|
357
|
-
* @param {
|
358
|
-
* @param {
|
359
|
-
* @param {
|
358
|
+
* @param {(item: T) => string} getName get a name for an item
|
359
|
+
* @param {(a: T, n: T) => -1 | 0 | 1} comparator order of items
|
360
|
+
* @param {(item: T, id: number) => boolean} assignId assign an id to an item
|
360
361
|
* @param {number[]} ranges usable ranges for ids
|
361
362
|
* @param {number} expandFactor factor to create more ranges
|
362
363
|
* @param {number} extraSpace extra space to allocate, i. e. when some ids are already used
|
@@ -14,13 +14,17 @@ const { getUsedModuleIdsAndModules } = require("./IdHelpers");
|
|
14
14
|
|
15
15
|
const plugin = "SyncModuleIdsPlugin";
|
16
16
|
|
17
|
+
/**
|
18
|
+
* @typedef {object} SyncModuleIdsPluginOptions
|
19
|
+
* @property {string} path path to file
|
20
|
+
* @property {string=} context context for module names
|
21
|
+
* @property {((module: Module) => boolean)=} test selector for modules
|
22
|
+
* @property {"read" | "create" | "merge" | "update"=} mode operation mode (defaults to merge)
|
23
|
+
*/
|
24
|
+
|
17
25
|
class SyncModuleIdsPlugin {
|
18
26
|
/**
|
19
|
-
* @param {
|
20
|
-
* @param {string} options.path path to file
|
21
|
-
* @param {string=} options.context context for module names
|
22
|
-
* @param {function(Module): boolean} options.test selector for modules
|
23
|
-
* @param {"read" | "create" | "merge" | "update"=} options.mode operation mode (defaults to merge)
|
27
|
+
* @param {SyncModuleIdsPluginOptions} options options
|
24
28
|
*/
|
25
29
|
constructor({ path, context, test, mode }) {
|
26
30
|
this._path = path;
|
package/lib/index.js
CHANGED
@@ -64,15 +64,15 @@ const memoize = require("./util/memoize");
|
|
64
64
|
/** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
|
65
65
|
|
66
66
|
/**
|
67
|
-
* @template {
|
68
|
-
* @param {
|
67
|
+
* @template {EXPECTED_FUNCTION} T
|
68
|
+
* @param {() => T} factory factory function
|
69
69
|
* @returns {T} function
|
70
70
|
*/
|
71
71
|
const lazyFunction = factory => {
|
72
72
|
const fac = memoize(factory);
|
73
73
|
const f = /** @type {any} */ (
|
74
74
|
/**
|
75
|
-
* @param {...
|
75
|
+
* @param {...EXPECTED_ANY} args args
|
76
76
|
* @returns {T} result
|
77
77
|
*/
|
78
78
|
(...args) => fac()(...args)
|
@@ -120,13 +120,13 @@ module.exports = mergeExports(fn, {
|
|
120
120
|
return require("./webpack");
|
121
121
|
},
|
122
122
|
/**
|
123
|
-
* @returns {
|
123
|
+
* @returns {(configuration: Configuration | Configuration[]) => void} validate fn
|
124
124
|
*/
|
125
125
|
get validate() {
|
126
126
|
const webpackOptionsSchemaCheck = require("../schemas/WebpackOptions.check.js");
|
127
127
|
const getRealValidate = memoize(
|
128
128
|
/**
|
129
|
-
* @returns {
|
129
|
+
* @returns {(configuration: Configuration | Configuration[]) => void} validate fn
|
130
130
|
*/
|
131
131
|
() => {
|
132
132
|
const validateSchema = require("./validateSchema");
|
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
/** @typedef {import("estree").Node} Node */
|
9
9
|
/** @typedef {import("./JavascriptParser").Range} Range */
|
10
|
-
/** @typedef {import("./JavascriptParser").
|
10
|
+
/** @typedef {import("./JavascriptParser").VariableInfo} VariableInfo */
|
11
11
|
|
12
12
|
const TypeUnknown = 0;
|
13
13
|
const TypeUndefined = 1;
|
@@ -51,7 +51,7 @@ class BasicEvaluatedExpression {
|
|
51
51
|
this.quasis = undefined;
|
52
52
|
/** @type {BasicEvaluatedExpression[] | undefined} */
|
53
53
|
this.parts = undefined;
|
54
|
-
/** @type {
|
54
|
+
/** @type {EXPECTED_ANY[] | undefined} */
|
55
55
|
this.array = undefined;
|
56
56
|
/** @type {BasicEvaluatedExpression[] | undefined} */
|
57
57
|
this.items = undefined;
|
@@ -63,9 +63,9 @@ class BasicEvaluatedExpression {
|
|
63
63
|
this.postfix = undefined;
|
64
64
|
/** @type {BasicEvaluatedExpression[] | undefined} */
|
65
65
|
this.wrappedInnerExpressions = undefined;
|
66
|
-
/** @type {string |
|
66
|
+
/** @type {string | VariableInfo | undefined} */
|
67
67
|
this.identifier = undefined;
|
68
|
-
/** @type {string |
|
68
|
+
/** @type {string | VariableInfo | undefined} */
|
69
69
|
this.rootInfo = undefined;
|
70
70
|
/** @type {(() => string[]) | undefined} */
|
71
71
|
this.getMembers = undefined;
|
@@ -386,8 +386,8 @@ class BasicEvaluatedExpression {
|
|
386
386
|
|
387
387
|
/**
|
388
388
|
* Set's the value of this expression to a particular identifier and its members.
|
389
|
-
* @param {string |
|
390
|
-
* @param {string |
|
389
|
+
* @param {string | VariableInfo} identifier identifier to set
|
390
|
+
* @param {string | VariableInfo} rootInfo root info
|
391
391
|
* @param {() => string[]} getMembers members
|
392
392
|
* @param {() => boolean[]=} getMembersOptionals optional members
|
393
393
|
* @param {() => Range[]=} getMemberRanges ranges of progressively increasing sub-expressions
|
@@ -36,7 +36,7 @@ const deprecatedGetInitFragments = util.deprecate(
|
|
36
36
|
* @returns {InitFragment<GenerateContext>[]} init fragments
|
37
37
|
*/
|
38
38
|
(template, dependency, templateContext) =>
|
39
|
-
/** @type {DependencyTemplate & { getInitFragments:
|
39
|
+
/** @type {DependencyTemplate & { getInitFragments: (dependency: Dependency, dependencyTemplateContext: DependencyTemplateContext) => InitFragment<GenerateContext>[] }} */
|
40
40
|
(template).getInitFragments(dependency, templateContext),
|
41
41
|
"DependencyTemplate.getInitFragment is deprecated (use apply(dep, source, { initFragments }) instead)",
|
42
42
|
"DEP_WEBPACK_JAVASCRIPT_GENERATOR_GET_INIT_FRAGMENTS"
|
@@ -110,6 +110,16 @@ class JavascriptGenerator extends Generator {
|
|
110
110
|
return InitFragment.addToSource(source, initFragments, generateContext);
|
111
111
|
}
|
112
112
|
|
113
|
+
/**
|
114
|
+
* @param {Error} error the error
|
115
|
+
* @param {NormalModule} module module for which the code should be generated
|
116
|
+
* @param {GenerateContext} generateContext context for generate
|
117
|
+
* @returns {Source | null} generated code
|
118
|
+
*/
|
119
|
+
generateError(error, module, generateContext) {
|
120
|
+
return new RawSource(`throw new Error(${JSON.stringify(error.message)});`);
|
121
|
+
}
|
122
|
+
|
113
123
|
/**
|
114
124
|
* @param {Module} module the module to generate
|
115
125
|
* @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
|
@@ -26,6 +26,7 @@ const {
|
|
26
26
|
JAVASCRIPT_MODULE_TYPE_ESM,
|
27
27
|
WEBPACK_MODULE_TYPE_RUNTIME
|
28
28
|
} = require("../ModuleTypeConstants");
|
29
|
+
const NormalModule = require("../NormalModule");
|
29
30
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
30
31
|
const Template = require("../Template");
|
31
32
|
const { last, someInIterable } = require("../util/IterableHelpers");
|
@@ -41,6 +42,7 @@ const {
|
|
41
42
|
} = require("../util/concatenate");
|
42
43
|
const createHash = require("../util/createHash");
|
43
44
|
const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
|
45
|
+
const removeBOM = require("../util/removeBOM");
|
44
46
|
const { intersectRuntime } = require("../util/runtime");
|
45
47
|
const JavascriptGenerator = require("./JavascriptGenerator");
|
46
48
|
const JavascriptParser = require("./JavascriptParser");
|
@@ -48,13 +50,14 @@ const JavascriptParser = require("./JavascriptParser");
|
|
48
50
|
/** @typedef {import("eslint-scope").Reference} Reference */
|
49
51
|
/** @typedef {import("eslint-scope").Scope} Scope */
|
50
52
|
/** @typedef {import("eslint-scope").Variable} Variable */
|
53
|
+
/** @typedef {import("estree").Program} Program */
|
51
54
|
/** @typedef {import("webpack-sources").Source} Source */
|
52
55
|
/** @typedef {import("../../declarations/WebpackOptions").Output} OutputOptions */
|
53
56
|
/** @typedef {import("../Chunk")} Chunk */
|
54
57
|
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
55
58
|
/** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
|
56
59
|
/** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
|
57
|
-
/** @typedef {import("../Compilation").
|
60
|
+
/** @typedef {import("../Compilation").ExecuteModuleObject} ExecuteModuleObject */
|
58
61
|
/** @typedef {import("../Compiler")} Compiler */
|
59
62
|
/** @typedef {import("../DependencyTemplates")} DependencyTemplates */
|
60
63
|
/** @typedef {import("../Entrypoint")} Entrypoint */
|
@@ -248,7 +251,7 @@ class JavascriptModulesPlugin {
|
|
248
251
|
|
249
252
|
constructor(options = {}) {
|
250
253
|
this.options = options;
|
251
|
-
/** @type {WeakMap<Source,
|
254
|
+
/** @type {WeakMap<Source, { source: Source, needModule:boolean, needExports: boolean, needRequire: boolean, needThisAsExports: boolean, needStrict: boolean | undefined }>} */
|
252
255
|
this._moduleFactoryCache = new WeakMap();
|
253
256
|
}
|
254
257
|
|
@@ -262,24 +265,45 @@ class JavascriptModulesPlugin {
|
|
262
265
|
PLUGIN_NAME,
|
263
266
|
(compilation, { normalModuleFactory }) => {
|
264
267
|
const hooks = JavascriptModulesPlugin.getCompilationHooks(compilation);
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
268
|
+
|
269
|
+
for (const type of [
|
270
|
+
JAVASCRIPT_MODULE_TYPE_AUTO,
|
271
|
+
JAVASCRIPT_MODULE_TYPE_DYNAMIC,
|
272
|
+
JAVASCRIPT_MODULE_TYPE_ESM
|
273
|
+
]) {
|
274
|
+
normalModuleFactory.hooks.createParser
|
275
|
+
.for(type)
|
276
|
+
.tap(PLUGIN_NAME, _options => {
|
277
|
+
switch (type) {
|
278
|
+
case JAVASCRIPT_MODULE_TYPE_AUTO: {
|
279
|
+
return new JavascriptParser("auto");
|
280
|
+
}
|
281
|
+
case JAVASCRIPT_MODULE_TYPE_DYNAMIC: {
|
282
|
+
return new JavascriptParser("script");
|
283
|
+
}
|
284
|
+
case JAVASCRIPT_MODULE_TYPE_ESM: {
|
285
|
+
return new JavascriptParser("module");
|
286
|
+
}
|
287
|
+
}
|
288
|
+
});
|
289
|
+
normalModuleFactory.hooks.createGenerator
|
290
|
+
.for(type)
|
291
|
+
.tap(PLUGIN_NAME, () => new JavascriptGenerator());
|
292
|
+
|
293
|
+
NormalModule.getCompilationHooks(compilation).processResult.tap(
|
294
|
+
PLUGIN_NAME,
|
295
|
+
(result, module) => {
|
296
|
+
if (module.type === type) {
|
297
|
+
const [source, ...rest] = result;
|
298
|
+
|
299
|
+
return [removeBOM(source), ...rest];
|
300
|
+
}
|
301
|
+
|
302
|
+
return result;
|
303
|
+
}
|
304
|
+
);
|
305
|
+
}
|
306
|
+
|
283
307
|
compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
|
284
308
|
const {
|
285
309
|
hash,
|
@@ -487,7 +511,7 @@ class JavascriptModulesPlugin {
|
|
487
511
|
);
|
488
512
|
|
489
513
|
const moduleObject =
|
490
|
-
/** @type {
|
514
|
+
/** @type {ExecuteModuleObject} */
|
491
515
|
(options.moduleObject);
|
492
516
|
|
493
517
|
try {
|
@@ -977,7 +1001,7 @@ class JavascriptModulesPlugin {
|
|
977
1001
|
const lastEntryModule =
|
978
1002
|
/** @type {Module} */
|
979
1003
|
(last(chunkGraph.getChunkEntryModulesIterable(chunk)));
|
980
|
-
/** @type {
|
1004
|
+
/** @type {(content: string[], name: string) => Source} */
|
981
1005
|
const toSource = useSourceMap
|
982
1006
|
? (content, name) =>
|
983
1007
|
new OriginalSource(Template.asString(content), name)
|
@@ -1506,7 +1530,7 @@ class JavascriptModulesPlugin {
|
|
1506
1530
|
const renamedInlinedModules = new Map();
|
1507
1531
|
const { runtimeTemplate } = renderContext;
|
1508
1532
|
|
1509
|
-
/** @typedef {{ source: Source, module: Module, ast:
|
1533
|
+
/** @typedef {{ source: Source, module: Module, ast: Program, variables: Set<Variable>, through: Set<Reference>, usedInNonInlined: Set<Variable>, moduleScope: Scope }} Info */
|
1510
1534
|
/** @type {Map<Module, Info>} */
|
1511
1535
|
const inlinedModulesToInfo = new Map();
|
1512
1536
|
/** @type {Set<string>} */
|
@@ -1583,12 +1607,6 @@ class JavascriptModulesPlugin {
|
|
1583
1607
|
}
|
1584
1608
|
|
1585
1609
|
for (const variable of info.variables) {
|
1586
|
-
allUsedNames.add(variable.name);
|
1587
|
-
const references = getAllReferences(variable);
|
1588
|
-
const allIdentifiers = new Set(
|
1589
|
-
references.map(r => r.identifier).concat(variable.identifiers)
|
1590
|
-
);
|
1591
|
-
|
1592
1610
|
const usedNamesInScopeInfo = new Map();
|
1593
1611
|
const ignoredScopes = new Set();
|
1594
1612
|
|
@@ -1601,6 +1619,9 @@ class JavascriptModulesPlugin {
|
|
1601
1619
|
|
1602
1620
|
if (allUsedNames.has(name) || usedNames.has(name)) {
|
1603
1621
|
const references = getAllReferences(variable);
|
1622
|
+
const allIdentifiers = new Set(
|
1623
|
+
references.map(r => r.identifier).concat(variable.identifiers)
|
1624
|
+
);
|
1604
1625
|
for (const ref of references) {
|
1605
1626
|
addScopeSymbols(
|
1606
1627
|
ref.from,
|
@@ -1635,9 +1656,8 @@ class JavascriptModulesPlugin {
|
|
1635
1656
|
}
|
1636
1657
|
source.replace(r[0], r[1] - 1, newName);
|
1637
1658
|
}
|
1638
|
-
} else {
|
1639
|
-
allUsedNames.add(name);
|
1640
1659
|
}
|
1660
|
+
allUsedNames.add(name);
|
1641
1661
|
}
|
1642
1662
|
|
1643
1663
|
renamedInlinedModules.set(m, source);
|