webpack 5.99.9 → 5.100.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/bin/webpack.js +8 -2
- package/hot/log.js +15 -15
- package/hot/poll.js +1 -0
- package/lib/APIPlugin.js +3 -3
- package/lib/AbstractMethodError.js +1 -0
- package/lib/AutomaticPrefetchPlugin.js +1 -0
- package/lib/BannerPlugin.js +1 -1
- package/lib/CaseSensitiveModulesWarning.js +4 -4
- package/lib/Chunk.js +6 -6
- package/lib/ChunkGraph.js +37 -31
- package/lib/ChunkGroup.js +4 -4
- package/lib/ChunkTemplate.js +1 -1
- package/lib/CleanPlugin.js +94 -17
- package/lib/CodeGenerationResults.js +1 -1
- package/lib/CompatibilityPlugin.js +5 -2
- package/lib/Compilation.js +67 -45
- package/lib/Compiler.js +46 -16
- package/lib/ConcatenationScope.js +15 -6
- package/lib/ConstPlugin.js +5 -3
- package/lib/ContextModule.js +16 -12
- package/lib/ContextModuleFactory.js +4 -3
- package/lib/ContextReplacementPlugin.js +4 -2
- package/lib/CssModule.js +2 -2
- package/lib/DefinePlugin.js +111 -3
- package/lib/DelegatedModuleFactoryPlugin.js +18 -18
- package/lib/Dependency.js +6 -1
- package/lib/DependencyTemplate.js +1 -0
- package/lib/DllEntryPlugin.js +3 -1
- package/lib/DllPlugin.js +4 -3
- package/lib/DllReferencePlugin.js +2 -2
- package/lib/DynamicEntryPlugin.js +1 -1
- package/lib/EntryOptionPlugin.js +5 -0
- package/lib/ErrorHelpers.js +4 -4
- package/lib/EvalDevToolModulePlugin.js +3 -3
- package/lib/EvalSourceMapDevToolPlugin.js +7 -7
- package/lib/ExportsInfo.js +48 -39
- package/lib/ExternalModule.js +15 -11
- package/lib/ExternalModuleFactoryPlugin.js +5 -2
- package/lib/FileSystemInfo.js +51 -36
- package/lib/FlagDependencyExportsPlugin.js +14 -7
- package/lib/FlagDependencyUsagePlugin.js +1 -1
- package/lib/Generator.js +14 -1
- package/lib/HookWebpackError.js +1 -0
- package/lib/HotModuleReplacementPlugin.js +77 -50
- package/lib/IgnorePlugin.js +1 -1
- package/lib/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/JavascriptMetaInfoPlugin.js +0 -1
- package/lib/LibManifestPlugin.js +4 -2
- package/lib/LoaderOptionsPlugin.js +6 -4
- package/lib/MainTemplate.js +2 -2
- package/lib/Module.js +21 -6
- package/lib/ModuleFactory.js +1 -0
- package/lib/ModuleGraph.js +24 -2
- package/lib/ModuleGraphConnection.js +5 -5
- package/lib/ModuleInfoHeaderPlugin.js +2 -1
- package/lib/ModuleParseError.js +1 -0
- package/lib/ModuleSourceTypesConstants.js +12 -12
- package/lib/ModuleTemplate.js +1 -1
- package/lib/ModuleTypeConstants.js +21 -21
- package/lib/MultiCompiler.js +6 -6
- package/lib/NormalModule.js +31 -44
- package/lib/NormalModuleFactory.js +29 -19
- package/lib/NormalModuleReplacementPlugin.js +1 -1
- package/lib/NullFactory.js +1 -0
- package/lib/OptimizationStages.js +1 -1
- package/lib/Parser.js +1 -0
- package/lib/ProgressPlugin.js +12 -5
- package/lib/ProvidePlugin.js +5 -1
- package/lib/RecordIdsPlugin.js +3 -3
- package/lib/RuntimeGlobals.js +175 -155
- package/lib/RuntimeModule.js +1 -0
- package/lib/RuntimePlugin.js +33 -7
- package/lib/RuntimeTemplate.js +111 -11
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +15 -25
- package/lib/SourceMapDevToolPlugin.js +19 -17
- package/lib/Template.js +2 -2
- package/lib/TemplatedPathPlugin.js +1 -1
- package/lib/WarnDeprecatedOptionPlugin.js +7 -8
- package/lib/WatchIgnorePlugin.js +4 -3
- package/lib/WebpackIsIncludedPlugin.js +2 -1
- package/lib/WebpackOptionsApply.js +115 -27
- package/lib/asset/AssetGenerator.js +15 -11
- package/lib/asset/AssetModulesPlugin.js +19 -17
- package/lib/asset/AssetSourceGenerator.js +4 -4
- package/lib/asset/RawDataUrlModule.js +4 -2
- package/lib/async-modules/AwaitDependenciesInitFragment.js +1 -1
- package/lib/buildChunkGraph.js +6 -3
- package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
- package/lib/cache/IdleFileCachePlugin.js +7 -4
- package/lib/cache/MemoryCachePlugin.js +1 -0
- package/lib/cache/MemoryWithGcCachePlugin.js +1 -0
- package/lib/cache/PackFileCacheStrategy.js +26 -20
- package/lib/cache/ResolverCachePlugin.js +16 -8
- package/lib/cli.js +15 -10
- package/lib/config/browserslistTargetHandler.js +3 -3
- package/lib/config/defaults.js +25 -17
- package/lib/config/normalization.js +2 -1
- package/lib/config/target.js +6 -5
- package/lib/container/ContainerPlugin.js +1 -1
- package/lib/container/ContainerReferencePlugin.js +1 -1
- package/lib/container/FallbackModule.js +2 -1
- package/lib/container/HoistContainerReferencesPlugin.js +1 -1
- package/lib/container/ModuleFederationPlugin.js +2 -2
- package/lib/container/RemoteModule.js +1 -1
- package/lib/css/CssGenerator.js +9 -6
- package/lib/css/CssModulesPlugin.js +44 -31
- package/lib/css/CssParser.js +6 -4
- package/lib/css/walkCssTokens.js +33 -37
- package/lib/debug/ProfilingPlugin.js +6 -6
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +8 -8
- package/lib/dependencies/AMDPlugin.js +12 -8
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -26
- package/lib/dependencies/CachedConstDependency.js +1 -5
- package/lib/dependencies/CommonJsExportRequireDependency.js +6 -4
- package/lib/dependencies/CommonJsExportsParserPlugin.js +22 -25
- package/lib/dependencies/CommonJsFullRequireDependency.js +1 -9
- package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -114
- package/lib/dependencies/CommonJsPlugin.js +15 -16
- package/lib/dependencies/ContextDependencyHelpers.js +2 -1
- package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
- package/lib/dependencies/CssIcssExportDependency.js +1 -1
- package/lib/dependencies/CssLocalIdentifierDependency.js +2 -2
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
- package/lib/dependencies/DynamicExports.js +9 -9
- package/lib/dependencies/ExportsInfoDependency.js +1 -1
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +122 -101
- package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +95 -19
- package/lib/dependencies/HarmonyExportInitFragment.js +1 -1
- package/lib/dependencies/HarmonyImportDependency.js +11 -5
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +238 -162
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +20 -9
- package/lib/dependencies/HarmonyModulesPlugin.js +23 -12
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -0
- package/lib/dependencies/ImportMetaContextPlugin.js +2 -1
- package/lib/dependencies/ImportMetaPlugin.js +2 -2
- package/lib/dependencies/ImportParserPlugin.js +40 -9
- package/lib/dependencies/ImportPlugin.js +3 -1
- package/lib/dependencies/LoaderPlugin.js +1 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/RequireContextPlugin.js +3 -1
- package/lib/dependencies/RequireEnsurePlugin.js +6 -6
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
- package/lib/dependencies/RequireIncludePlugin.js +1 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
- package/lib/dependencies/SystemPlugin.js +1 -1
- package/lib/dependencies/URLContextDependency.js +65 -0
- package/lib/dependencies/URLPlugin.js +17 -157
- package/lib/dependencies/WorkerPlugin.js +23 -10
- package/lib/dependencies/processExportInfo.js +2 -1
- package/lib/esm/ModuleChunkFormatPlugin.js +269 -185
- package/lib/esm/ModuleChunkLoadingPlugin.js +39 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +70 -3
- package/lib/hmr/HotModuleReplacement.runtime.js +0 -1
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
- package/lib/hmr/LazyCompilationPlugin.js +4 -2
- package/lib/hmr/lazyCompilationBackend.js +4 -2
- package/lib/ids/ChunkModuleIdRangePlugin.js +6 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +30 -35
- package/lib/ids/DeterministicModuleIdsPlugin.js +4 -3
- package/lib/ids/HashedModuleIdsPlugin.js +5 -4
- package/lib/ids/IdHelpers.js +21 -17
- package/lib/ids/NamedChunkIdsPlugin.js +5 -5
- package/lib/ids/NamedModuleIdsPlugin.js +4 -4
- package/lib/ids/NaturalChunkIdsPlugin.js +2 -1
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +3 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
- package/lib/ids/SyncModuleIdsPlugin.js +1 -1
- package/lib/index.js +13 -3
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +113 -119
- package/lib/javascript/BasicEvaluatedExpression.js +2 -1
- package/lib/javascript/ChunkHelpers.js +1 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +121 -136
- package/lib/javascript/EnableChunkLoadingPlugin.js +6 -3
- package/lib/javascript/JavascriptGenerator.js +14 -2
- package/lib/javascript/JavascriptModulesPlugin.js +68 -27
- package/lib/javascript/JavascriptParser.js +117 -76
- package/lib/javascript/JavascriptParserHelpers.js +41 -41
- package/lib/javascript/StartupHelpers.js +17 -17
- package/lib/json/JsonGenerator.js +4 -2
- package/lib/json/JsonModulesPlugin.js +2 -2
- package/lib/json/JsonParser.js +1 -1
- package/lib/library/AbstractLibraryPlugin.js +6 -2
- package/lib/library/AssignLibraryPlugin.js +21 -6
- package/lib/library/EnableLibraryPlugin.js +23 -3
- package/lib/library/UmdLibraryPlugin.js +15 -6
- package/lib/logging/createConsoleLogger.js +3 -3
- package/lib/logging/runtime.js +9 -9
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +4 -22
- package/lib/node/RequireChunkLoadingRuntimeModule.js +4 -22
- package/lib/node/nodeConsole.js +4 -2
- package/lib/optimize/AggressiveMergingPlugin.js +45 -46
- package/lib/optimize/AggressiveSplittingPlugin.js +13 -12
- package/lib/optimize/ConcatenatedModule.js +227 -57
- package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -1
- package/lib/optimize/InnerGraph.js +115 -112
- package/lib/optimize/InnerGraphPlugin.js +2 -2
- package/lib/optimize/LimitChunkCountPlugin.js +4 -2
- package/lib/optimize/MangleExportsPlugin.js +4 -3
- package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
- package/lib/optimize/MinChunkSizePlugin.js +6 -3
- package/lib/optimize/ModuleConcatenationPlugin.js +31 -22
- package/lib/optimize/RealContentHashPlugin.js +26 -20
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
- package/lib/optimize/RemoveParentModulesPlugin.js +1 -0
- package/lib/optimize/SideEffectsFlagPlugin.js +3 -2
- package/lib/optimize/SplitChunksPlugin.js +16 -13
- package/lib/rules/BasicEffectRulePlugin.js +4 -2
- package/lib/rules/BasicMatcherRulePlugin.js +3 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +3 -1
- package/lib/rules/RuleSetCompiler.js +6 -3
- package/lib/rules/UseEffectRulePlugin.js +3 -1
- package/lib/runtime/AsyncModuleRuntimeModule.js +64 -9
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +214 -0
- package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +8 -7
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +27 -19
- package/lib/schemes/VirtualUrlPlugin.js +222 -0
- package/lib/serialization/AggregateErrorSerializer.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +5 -4
- package/lib/serialization/FileMiddleware.js +7 -4
- package/lib/serialization/ObjectMiddleware.js +14 -8
- package/lib/serialization/Serializer.js +5 -3
- package/lib/serialization/SerializerMiddleware.js +2 -0
- package/lib/sharing/ConsumeSharedModule.js +1 -1
- package/lib/sharing/ConsumeSharedPlugin.js +3 -3
- package/lib/sharing/ConsumeSharedRuntimeModule.js +2 -2
- package/lib/sharing/ProvideSharedModule.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +3 -2
- package/lib/sharing/SharePlugin.js +2 -1
- package/lib/sharing/ShareRuntimeModule.js +3 -5
- package/lib/sharing/utils.js +34 -34
- package/lib/stats/DefaultStatsFactoryPlugin.js +49 -46
- package/lib/stats/DefaultStatsPresetPlugin.js +4 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +15 -9
- package/lib/stats/StatsFactory.js +4 -2
- package/lib/stats/StatsPrinter.js +3 -2
- package/lib/url/URLParserPlugin.js +266 -0
- package/lib/util/ArrayQueue.js +1 -1
- package/lib/util/AsyncQueue.js +1 -1
- package/lib/util/Hash.js +2 -0
- package/lib/util/IterableHelpers.js +1 -1
- package/lib/util/LazyBucketSortedSet.js +2 -1
- package/lib/util/LazySet.js +11 -6
- package/lib/util/ParallelismFactorCalculator.js +1 -1
- package/lib/util/SetHelpers.js +3 -3
- package/lib/util/SortableSet.js +2 -2
- package/lib/util/StackedCacheMap.js +3 -1
- package/lib/util/StackedMap.js +2 -2
- package/lib/util/StringXor.js +1 -0
- package/lib/util/TupleSet.js +1 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -1
- package/lib/util/cleverMerge.js +12 -8
- package/lib/util/comparators.js +154 -127
- package/lib/util/compileBooleanMatcher.js +8 -3
- package/lib/util/concatenate.js +8 -7
- package/lib/util/conventions.js +72 -73
- package/lib/util/create-schema-validation.js +2 -1
- package/lib/util/createHash.js +10 -4
- package/lib/util/deprecation.js +69 -66
- package/lib/util/deterministicGrouping.js +4 -2
- package/lib/util/extractUrlAndGlobal.js +1 -1
- package/lib/util/findGraphRoots.js +2 -2
- package/lib/util/fs.js +30 -23
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/wasm-hash.js +4 -2
- package/lib/util/identifier.js +13 -12
- package/lib/util/internalSerializables.js +2 -0
- package/lib/util/magicComment.js +5 -5
- package/lib/util/processAsyncTree.js +1 -1
- package/lib/util/propertyAccess.js +1 -1
- package/lib/util/propertyName.js +1 -1
- package/lib/util/registerExternalSerializer.js +1 -2
- package/lib/util/removeBOM.js +1 -1
- package/lib/util/runtime.js +29 -21
- package/lib/util/semver.js +1 -1
- package/lib/util/serialization.js +3 -0
- package/lib/util/source.js +3 -2
- package/lib/validateSchema.js +1 -0
- package/lib/wasm/EnableWasmLoadingPlugin.js +6 -3
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +4 -1
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +46 -49
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +2 -2
- package/lib/wasm-sync/WebAssemblyGenerator.js +2 -3
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +3 -2
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +3 -0
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +4 -22
- package/lib/webpack.js +4 -5
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +1 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -24
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
- package/package.json +119 -113
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +17 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
- package/types.d.ts +1230 -360
|
@@ -344,14 +344,15 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
|
344
344
|
const processedFiles = cmf.hooks.contextModuleFiles.call(
|
|
345
345
|
/** @type {string[]} */ (files).map(file => file.normalize("NFC"))
|
|
346
346
|
);
|
|
347
|
-
if (!processedFiles || processedFiles.length === 0)
|
|
347
|
+
if (!processedFiles || processedFiles.length === 0) {
|
|
348
348
|
return callback(null, []);
|
|
349
|
+
}
|
|
349
350
|
asyncLib.map(
|
|
350
351
|
processedFiles.filter(p => p.indexOf(".") !== 0),
|
|
351
352
|
(segment, callback) => {
|
|
352
353
|
const subResource = join(fs, directory, segment);
|
|
353
354
|
|
|
354
|
-
if (!exclude || !
|
|
355
|
+
if (!exclude || !exclude.test(subResource)) {
|
|
355
356
|
fs.stat(subResource, (err, _stat) => {
|
|
356
357
|
if (err) {
|
|
357
358
|
if (err.code === "ENOENT") {
|
|
@@ -369,7 +370,7 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
|
|
|
369
370
|
addSubDirectory(ctx, subResource, callback);
|
|
370
371
|
} else if (
|
|
371
372
|
stat.isFile() &&
|
|
372
|
-
(!include ||
|
|
373
|
+
(!include || include.test(subResource))
|
|
373
374
|
) {
|
|
374
375
|
/** @type {{ context: string, request: string }} */
|
|
375
376
|
const obj = {
|
|
@@ -131,7 +131,8 @@ class ContextReplacementPlugin {
|
|
|
131
131
|
result.resource = newContentResource;
|
|
132
132
|
} else {
|
|
133
133
|
result.resource = join(
|
|
134
|
-
/** @type {InputFileSystem} */
|
|
134
|
+
/** @type {InputFileSystem} */
|
|
135
|
+
(compiler.inputFileSystem),
|
|
135
136
|
result.resource,
|
|
136
137
|
newContentResource
|
|
137
138
|
);
|
|
@@ -159,7 +160,8 @@ class ContextReplacementPlugin {
|
|
|
159
160
|
) {
|
|
160
161
|
// When the function changed it to an relative path
|
|
161
162
|
result.resource = join(
|
|
162
|
-
/** @type {InputFileSystem} */
|
|
163
|
+
/** @type {InputFileSystem} */
|
|
164
|
+
(compiler.inputFileSystem),
|
|
163
165
|
origResource,
|
|
164
166
|
result.resource
|
|
165
167
|
);
|
package/lib/CssModule.js
CHANGED
|
@@ -18,9 +18,9 @@ const makeSerializable = require("./util/makeSerializable");
|
|
|
18
18
|
/** @typedef {string | undefined} Supports */
|
|
19
19
|
/** @typedef {string | undefined} Media */
|
|
20
20
|
/** @typedef {[CssLayer, Supports, Media]} InheritanceItem */
|
|
21
|
-
/** @typedef {
|
|
21
|
+
/** @typedef {InheritanceItem[]} Inheritance */
|
|
22
22
|
|
|
23
|
-
/** @typedef {NormalModuleCreateData & { cssLayer: CssLayer, supports: Supports, media: Media, inheritance
|
|
23
|
+
/** @typedef {NormalModuleCreateData & { cssLayer: CssLayer, supports: Supports, media: Media, inheritance?: Inheritance }} CSSModuleCreateData */
|
|
24
24
|
|
|
25
25
|
class CssModule extends NormalModule {
|
|
26
26
|
/**
|
package/lib/DefinePlugin.js
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
const {
|
|
9
9
|
JAVASCRIPT_MODULE_TYPE_AUTO,
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
JAVASCRIPT_MODULE_TYPE_DYNAMIC,
|
|
11
|
+
JAVASCRIPT_MODULE_TYPE_ESM
|
|
12
12
|
} = require("./ModuleTypeConstants");
|
|
13
13
|
const RuntimeGlobals = require("./RuntimeGlobals");
|
|
14
14
|
const WebpackError = require("./WebpackError");
|
|
@@ -356,6 +356,16 @@ class DefinePlugin {
|
|
|
356
356
|
*/
|
|
357
357
|
apply(compiler) {
|
|
358
358
|
const definitions = this.definitions;
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* @type {Map<string, Set<string>>}
|
|
362
|
+
*/
|
|
363
|
+
const finalByNestedKey = new Map();
|
|
364
|
+
/**
|
|
365
|
+
* @type {Map<string, Set<string>>}
|
|
366
|
+
*/
|
|
367
|
+
const nestedByFinalKey = new Map();
|
|
368
|
+
|
|
359
369
|
compiler.hooks.compilation.tap(
|
|
360
370
|
PLUGIN_NAME,
|
|
361
371
|
(compilation, { normalModuleFactory }) => {
|
|
@@ -381,6 +391,7 @@ class DefinePlugin {
|
|
|
381
391
|
* @returns {void}
|
|
382
392
|
*/
|
|
383
393
|
const handler = parser => {
|
|
394
|
+
const hooked = new Set();
|
|
384
395
|
const mainValue =
|
|
385
396
|
/** @type {ValueCacheVersion} */
|
|
386
397
|
(compilation.valueCacheVersions.get(VALUE_DEP_MAIN));
|
|
@@ -388,8 +399,9 @@ class DefinePlugin {
|
|
|
388
399
|
const buildInfo = /** @type {BuildInfo} */ (
|
|
389
400
|
parser.state.module.buildInfo
|
|
390
401
|
);
|
|
391
|
-
if (!buildInfo.valueDependencies)
|
|
402
|
+
if (!buildInfo.valueDependencies) {
|
|
392
403
|
buildInfo.valueDependencies = new Map();
|
|
404
|
+
}
|
|
393
405
|
buildInfo.valueDependencies.set(VALUE_DEP_MAIN, mainValue);
|
|
394
406
|
});
|
|
395
407
|
|
|
@@ -469,6 +481,61 @@ class DefinePlugin {
|
|
|
469
481
|
return true;
|
|
470
482
|
});
|
|
471
483
|
}
|
|
484
|
+
if (prefix === "") {
|
|
485
|
+
const final = splittedKey[splittedKey.length - 1];
|
|
486
|
+
const nestedSet = nestedByFinalKey.get(final);
|
|
487
|
+
if (!nestedSet || nestedSet.size <= 0) return;
|
|
488
|
+
for (const nested of /** @type {Set<string>} */ (nestedSet)) {
|
|
489
|
+
if (nested && !hooked.has(nested)) {
|
|
490
|
+
// only detect the same nested key once
|
|
491
|
+
hooked.add(nested);
|
|
492
|
+
parser.hooks.expression.for(nested).tap(
|
|
493
|
+
{
|
|
494
|
+
name: PLUGIN_NAME,
|
|
495
|
+
// why 100? Ensures it runs after object define
|
|
496
|
+
stage: 100
|
|
497
|
+
},
|
|
498
|
+
expr => {
|
|
499
|
+
const destructed =
|
|
500
|
+
parser.destructuringAssignmentPropertiesFor(expr);
|
|
501
|
+
if (destructed === undefined) {
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
/** @type {Record<string, CodeValue>} */
|
|
505
|
+
const obj = {};
|
|
506
|
+
const finalSet = finalByNestedKey.get(nested);
|
|
507
|
+
for (const { id } of destructed) {
|
|
508
|
+
const fullKey = `${nested}.${id}`;
|
|
509
|
+
if (
|
|
510
|
+
!finalSet ||
|
|
511
|
+
!finalSet.has(id) ||
|
|
512
|
+
!definitions[fullKey]
|
|
513
|
+
) {
|
|
514
|
+
return;
|
|
515
|
+
}
|
|
516
|
+
obj[id] = definitions[fullKey];
|
|
517
|
+
}
|
|
518
|
+
let strCode = stringifyObj(
|
|
519
|
+
obj,
|
|
520
|
+
parser,
|
|
521
|
+
compilation.valueCacheVersions,
|
|
522
|
+
key,
|
|
523
|
+
runtimeTemplate,
|
|
524
|
+
logger,
|
|
525
|
+
!parser.isAsiPosition(
|
|
526
|
+
/** @type {Range} */ (expr.range)[0]
|
|
527
|
+
),
|
|
528
|
+
getObjKeys(destructed)
|
|
529
|
+
);
|
|
530
|
+
if (parser.scope.inShorthand) {
|
|
531
|
+
strCode = `${parser.scope.inShorthand}:${strCode}`;
|
|
532
|
+
}
|
|
533
|
+
return toConstantDependency(parser, strCode)(expr);
|
|
534
|
+
}
|
|
535
|
+
);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
}
|
|
472
539
|
};
|
|
473
540
|
|
|
474
541
|
/**
|
|
@@ -707,6 +774,46 @@ class DefinePlugin {
|
|
|
707
774
|
}
|
|
708
775
|
};
|
|
709
776
|
|
|
777
|
+
/**
|
|
778
|
+
* @param {Record<string, CodeValue>} definitions Definitions map
|
|
779
|
+
* @returns {void}
|
|
780
|
+
*/
|
|
781
|
+
const walkDefinitionsForKeys = definitions => {
|
|
782
|
+
/**
|
|
783
|
+
* @param {Map<string, Set<string>>} map Map
|
|
784
|
+
* @param {string} key key
|
|
785
|
+
* @param {string} value v
|
|
786
|
+
* @returns {void}
|
|
787
|
+
*/
|
|
788
|
+
const addToMap = (map, key, value) => {
|
|
789
|
+
if (map.has(key)) {
|
|
790
|
+
/** @type {Set<string>} */
|
|
791
|
+
(map.get(key)).add(value);
|
|
792
|
+
} else {
|
|
793
|
+
map.set(key, new Set([value]));
|
|
794
|
+
}
|
|
795
|
+
};
|
|
796
|
+
for (const key of Object.keys(definitions)) {
|
|
797
|
+
const code = definitions[key];
|
|
798
|
+
if (
|
|
799
|
+
!code ||
|
|
800
|
+
typeof code === "object" ||
|
|
801
|
+
TYPEOF_OPERATOR_REGEXP.test(key)
|
|
802
|
+
) {
|
|
803
|
+
continue;
|
|
804
|
+
}
|
|
805
|
+
const idx = key.lastIndexOf(".");
|
|
806
|
+
if (idx <= 0 || idx >= key.length - 1) {
|
|
807
|
+
continue;
|
|
808
|
+
}
|
|
809
|
+
const nested = key.slice(0, idx);
|
|
810
|
+
const final = key.slice(idx + 1);
|
|
811
|
+
addToMap(finalByNestedKey, nested, final);
|
|
812
|
+
addToMap(nestedByFinalKey, final, nested);
|
|
813
|
+
}
|
|
814
|
+
};
|
|
815
|
+
|
|
816
|
+
walkDefinitionsForKeys(definitions);
|
|
710
817
|
walkDefinitionsForValues(definitions, "");
|
|
711
818
|
|
|
712
819
|
compilation.valueCacheVersions.set(
|
|
@@ -717,4 +824,5 @@ class DefinePlugin {
|
|
|
717
824
|
);
|
|
718
825
|
}
|
|
719
826
|
}
|
|
827
|
+
|
|
720
828
|
module.exports = DefinePlugin;
|
|
@@ -25,6 +25,8 @@ const DelegatedModule = require("./DelegatedModule");
|
|
|
25
25
|
* @property {AssociatedObjectForCache=} associatedObjectForCache object for caching
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
+
const PLUGIN_NAME = "DelegatedModuleFactoryPlugin";
|
|
29
|
+
|
|
28
30
|
class DelegatedModuleFactoryPlugin {
|
|
29
31
|
/**
|
|
30
32
|
* @param {Options} options options
|
|
@@ -43,7 +45,7 @@ class DelegatedModuleFactoryPlugin {
|
|
|
43
45
|
const scope = this.options.scope;
|
|
44
46
|
if (scope) {
|
|
45
47
|
normalModuleFactory.hooks.factorize.tapAsync(
|
|
46
|
-
|
|
48
|
+
PLUGIN_NAME,
|
|
47
49
|
(data, callback) => {
|
|
48
50
|
const [dependency] = data.dependencies;
|
|
49
51
|
const { request } = dependency;
|
|
@@ -90,25 +92,23 @@ class DelegatedModuleFactoryPlugin {
|
|
|
90
92
|
}
|
|
91
93
|
);
|
|
92
94
|
} else {
|
|
93
|
-
normalModuleFactory.hooks.module.tap(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
module
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
return module;
|
|
95
|
+
normalModuleFactory.hooks.module.tap(PLUGIN_NAME, module => {
|
|
96
|
+
const request = module.libIdent(this.options);
|
|
97
|
+
if (request && request in this.options.content) {
|
|
98
|
+
const resolved = this.options.content[request];
|
|
99
|
+
return new DelegatedModule(
|
|
100
|
+
this.options.source,
|
|
101
|
+
resolved,
|
|
102
|
+
/** @type {DelegatedModuleType} */
|
|
103
|
+
(this.options.type),
|
|
104
|
+
request,
|
|
105
|
+
module
|
|
106
|
+
);
|
|
109
107
|
}
|
|
110
|
-
|
|
108
|
+
return module;
|
|
109
|
+
});
|
|
111
110
|
}
|
|
112
111
|
}
|
|
113
112
|
}
|
|
113
|
+
|
|
114
114
|
module.exports = DelegatedModuleFactoryPlugin;
|
package/lib/Dependency.js
CHANGED
|
@@ -101,7 +101,10 @@ class Dependency {
|
|
|
101
101
|
/** @type {boolean} */
|
|
102
102
|
this.weak = false;
|
|
103
103
|
// TODO check if this can be moved into ModuleDependency
|
|
104
|
-
/** @type {boolean} */
|
|
104
|
+
/** @type {boolean | undefined} */
|
|
105
|
+
this.defer = false;
|
|
106
|
+
// TODO check if this can be moved into ModuleDependency
|
|
107
|
+
/** @type {boolean | undefined} */
|
|
105
108
|
this.optional = false;
|
|
106
109
|
this._locSL = 0;
|
|
107
110
|
this._locSC = 0;
|
|
@@ -309,6 +312,7 @@ class Dependency {
|
|
|
309
312
|
write(this._locEC);
|
|
310
313
|
write(this._locI);
|
|
311
314
|
write(this._locN);
|
|
315
|
+
write(this.defer);
|
|
312
316
|
}
|
|
313
317
|
|
|
314
318
|
/**
|
|
@@ -323,6 +327,7 @@ class Dependency {
|
|
|
323
327
|
this._locEC = read();
|
|
324
328
|
this._locI = read();
|
|
325
329
|
this._locN = read();
|
|
330
|
+
this.defer = read();
|
|
326
331
|
}
|
|
327
332
|
}
|
|
328
333
|
|
package/lib/DllEntryPlugin.js
CHANGED
|
@@ -10,8 +10,10 @@ const DllEntryDependency = require("./dependencies/DllEntryDependency");
|
|
|
10
10
|
const EntryDependency = require("./dependencies/EntryDependency");
|
|
11
11
|
|
|
12
12
|
/** @typedef {import("./Compiler")} Compiler */
|
|
13
|
+
/** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
|
|
14
|
+
|
|
13
15
|
/** @typedef {string[]} Entries */
|
|
14
|
-
/** @typedef {{ name: string
|
|
16
|
+
/** @typedef {EntryOptions & { name: string }} Options */
|
|
15
17
|
|
|
16
18
|
const PLUGIN_NAME = "DllEntryPlugin";
|
|
17
19
|
|
package/lib/DllPlugin.js
CHANGED
|
@@ -16,7 +16,7 @@ const createSchemaValidation = require("./util/create-schema-validation");
|
|
|
16
16
|
/** @typedef {import("./DllEntryPlugin").Options} Options */
|
|
17
17
|
|
|
18
18
|
const validate = createSchemaValidation(
|
|
19
|
-
require("../schemas/plugins/DllPlugin.check
|
|
19
|
+
require("../schemas/plugins/DllPlugin.check"),
|
|
20
20
|
() => require("../schemas/plugins/DllPlugin.json"),
|
|
21
21
|
{
|
|
22
22
|
name: "Dll Plugin",
|
|
@@ -48,10 +48,11 @@ class DllPlugin {
|
|
|
48
48
|
if (typeof entry !== "function") {
|
|
49
49
|
for (const name of Object.keys(entry)) {
|
|
50
50
|
/** @type {Options} */
|
|
51
|
-
const options = { name
|
|
51
|
+
const options = { name };
|
|
52
52
|
new DllEntryPlugin(
|
|
53
53
|
context,
|
|
54
|
-
/** @type {Entries} */
|
|
54
|
+
/** @type {Entries} */
|
|
55
|
+
(entry[name].import),
|
|
55
56
|
options
|
|
56
57
|
).apply(compiler);
|
|
57
58
|
}
|
|
@@ -22,7 +22,7 @@ const makePathsRelative = require("./util/identifier").makePathsRelative;
|
|
|
22
22
|
/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
|
|
23
23
|
|
|
24
24
|
const validate = createSchemaValidation(
|
|
25
|
-
require("../schemas/plugins/DllReferencePlugin.check
|
|
25
|
+
require("../schemas/plugins/DllReferencePlugin.check"),
|
|
26
26
|
() => require("../schemas/plugins/DllReferencePlugin.json"),
|
|
27
27
|
{
|
|
28
28
|
name: "Dll Reference Plugin",
|
|
@@ -78,7 +78,7 @@ class DllReferencePlugin {
|
|
|
78
78
|
// or malformed manifest files don't kill the process.
|
|
79
79
|
try {
|
|
80
80
|
data.data = parseJson(
|
|
81
|
-
/** @type {Buffer} */ (result).toString("
|
|
81
|
+
/** @type {Buffer} */ (result).toString("utf8")
|
|
82
82
|
);
|
|
83
83
|
} catch (parseErr) {
|
|
84
84
|
// Store the error in the params so that it can
|
package/lib/EntryOptionPlugin.js
CHANGED
|
@@ -33,9 +33,11 @@ class EntryOptionPlugin {
|
|
|
33
33
|
static applyEntryOption(compiler, context, entry) {
|
|
34
34
|
if (typeof entry === "function") {
|
|
35
35
|
const DynamicEntryPlugin = require("./DynamicEntryPlugin");
|
|
36
|
+
|
|
36
37
|
new DynamicEntryPlugin(context, entry).apply(compiler);
|
|
37
38
|
} else {
|
|
38
39
|
const EntryPlugin = require("./EntryPlugin");
|
|
40
|
+
|
|
39
41
|
for (const name of Object.keys(entry)) {
|
|
40
42
|
const desc = entry[name];
|
|
41
43
|
const options = EntryOptionPlugin.entryDescriptionToOptions(
|
|
@@ -81,14 +83,17 @@ class EntryOptionPlugin {
|
|
|
81
83
|
}
|
|
82
84
|
if (desc.chunkLoading) {
|
|
83
85
|
const EnableChunkLoadingPlugin = require("./javascript/EnableChunkLoadingPlugin");
|
|
86
|
+
|
|
84
87
|
EnableChunkLoadingPlugin.checkEnabled(compiler, desc.chunkLoading);
|
|
85
88
|
}
|
|
86
89
|
if (desc.wasmLoading) {
|
|
87
90
|
const EnableWasmLoadingPlugin = require("./wasm/EnableWasmLoadingPlugin");
|
|
91
|
+
|
|
88
92
|
EnableWasmLoadingPlugin.checkEnabled(compiler, desc.wasmLoading);
|
|
89
93
|
}
|
|
90
94
|
if (desc.library) {
|
|
91
95
|
const EnableLibraryPlugin = require("./library/EnableLibraryPlugin");
|
|
96
|
+
|
|
92
97
|
EnableLibraryPlugin.checkEnabled(compiler, desc.library.type);
|
|
93
98
|
}
|
|
94
99
|
return options;
|
package/lib/ErrorHelpers.js
CHANGED
|
@@ -91,10 +91,10 @@ const cleanUpWebpackOptions = (stack, message) => {
|
|
|
91
91
|
return stack;
|
|
92
92
|
};
|
|
93
93
|
|
|
94
|
+
module.exports.cleanUp = cleanUp;
|
|
95
|
+
module.exports.cleanUpWebpackOptions = cleanUpWebpackOptions;
|
|
94
96
|
module.exports.cutOffByFlag = cutOffByFlag;
|
|
95
97
|
module.exports.cutOffLoaderExecution = cutOffLoaderExecution;
|
|
96
|
-
module.exports.cutOffWebpackOptions = cutOffWebpackOptions;
|
|
97
|
-
module.exports.cutOffMultilineMessage = cutOffMultilineMessage;
|
|
98
98
|
module.exports.cutOffMessage = cutOffMessage;
|
|
99
|
-
module.exports.
|
|
100
|
-
module.exports.
|
|
99
|
+
module.exports.cutOffMultilineMessage = cutOffMultilineMessage;
|
|
100
|
+
module.exports.cutOffWebpackOptions = cutOffWebpackOptions;
|
|
@@ -95,9 +95,9 @@ class EvalDevToolModulePlugin {
|
|
|
95
95
|
`eval(${
|
|
96
96
|
compilation.outputOptions.trustedTypes
|
|
97
97
|
? `${RuntimeGlobals.createScript}(${JSON.stringify(
|
|
98
|
-
content + footer
|
|
98
|
+
`{${content + footer}\n}`
|
|
99
99
|
)})`
|
|
100
|
-
: JSON.stringify(content + footer)
|
|
100
|
+
: JSON.stringify(`{${content + footer}\n}`)
|
|
101
101
|
});`
|
|
102
102
|
);
|
|
103
103
|
cache.set(source, result);
|
|
@@ -119,7 +119,7 @@ class EvalDevToolModulePlugin {
|
|
|
119
119
|
if (compilation.outputOptions.trustedTypes) {
|
|
120
120
|
compilation.hooks.additionalModuleRuntimeRequirements.tap(
|
|
121
121
|
PLUGIN_NAME,
|
|
122
|
-
(module, set,
|
|
122
|
+
(module, set, _context) => {
|
|
123
123
|
set.add(RuntimeGlobals.createScript);
|
|
124
124
|
}
|
|
125
125
|
);
|
|
@@ -15,12 +15,12 @@ const ConcatenatedModule = require("./optimize/ConcatenatedModule");
|
|
|
15
15
|
const generateDebugId = require("./util/generateDebugId");
|
|
16
16
|
const { makePathsAbsolute } = require("./util/identifier");
|
|
17
17
|
|
|
18
|
+
/** @typedef {import("webpack-sources").RawSourceMap} RawSourceMap */
|
|
18
19
|
/** @typedef {import("webpack-sources").Source} Source */
|
|
19
20
|
/** @typedef {import("../declarations/WebpackOptions").DevTool} DevToolOptions */
|
|
20
21
|
/** @typedef {import("../declarations/plugins/SourceMapDevToolPlugin").SourceMapDevToolPluginOptions} SourceMapDevToolPluginOptions */
|
|
21
22
|
/** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
|
|
22
23
|
/** @typedef {import("./Compiler")} Compiler */
|
|
23
|
-
/** @typedef {import("./NormalModule").SourceMap} SourceMap */
|
|
24
24
|
|
|
25
25
|
/** @type {WeakMap<Source, Source>} */
|
|
26
26
|
const cache = new WeakMap();
|
|
@@ -117,15 +117,15 @@ class EvalSourceMapDevToolPlugin {
|
|
|
117
117
|
const namespace = compilation.getPath(this.namespace, {
|
|
118
118
|
chunk
|
|
119
119
|
});
|
|
120
|
-
/** @type {
|
|
120
|
+
/** @type {RawSourceMap} */
|
|
121
121
|
let sourceMap;
|
|
122
122
|
let content;
|
|
123
123
|
if (source.sourceAndMap) {
|
|
124
124
|
const sourceAndMap = source.sourceAndMap(options);
|
|
125
|
-
sourceMap = /** @type {
|
|
125
|
+
sourceMap = /** @type {RawSourceMap} */ (sourceAndMap.map);
|
|
126
126
|
content = sourceAndMap.source;
|
|
127
127
|
} else {
|
|
128
|
-
sourceMap = /** @type {
|
|
128
|
+
sourceMap = /** @type {RawSourceMap} */ (source.map(options));
|
|
129
129
|
content = source.source();
|
|
130
130
|
}
|
|
131
131
|
if (!sourceMap) {
|
|
@@ -191,16 +191,16 @@ class EvalSourceMapDevToolPlugin {
|
|
|
191
191
|
`eval(${
|
|
192
192
|
compilation.outputOptions.trustedTypes
|
|
193
193
|
? `${RuntimeGlobals.createScript}(${JSON.stringify(
|
|
194
|
-
content + footer
|
|
194
|
+
`{${content + footer}\n}`
|
|
195
195
|
)})`
|
|
196
|
-
: JSON.stringify(content + footer)
|
|
196
|
+
: JSON.stringify(`{${content + footer}\n}`)
|
|
197
197
|
});`
|
|
198
198
|
)
|
|
199
199
|
);
|
|
200
200
|
}
|
|
201
201
|
);
|
|
202
202
|
hooks.inlineInRuntimeBailout.tap(
|
|
203
|
-
|
|
203
|
+
PLUGIN_NAME,
|
|
204
204
|
() => "the eval-source-map devtool is used."
|
|
205
205
|
);
|
|
206
206
|
hooks.render.tap(
|