webpack 5.93.0 → 5.95.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 +8 -5
- package/bin/webpack.js +6 -7
- package/hot/log.js +1 -2
- package/hot/only-dev-server.js +1 -1
- package/hot/poll.js +1 -1
- package/hot/signal.js +1 -1
- package/lib/APIPlugin.js +4 -3
- package/lib/AbstractMethodError.js +10 -5
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +12 -6
- package/lib/Cache.js +8 -10
- package/lib/CacheFacade.js +3 -3
- package/lib/CaseSensitiveModulesWarning.js +5 -7
- package/lib/Chunk.js +14 -11
- package/lib/ChunkGraph.js +58 -36
- package/lib/ChunkGroup.js +2 -3
- package/lib/ChunkTemplate.js +43 -0
- package/lib/CleanPlugin.js +10 -11
- package/lib/CodeGenerationResults.js +6 -5
- package/lib/CommentCompilationWarning.js +0 -1
- package/lib/Compilation.js +223 -191
- package/lib/Compiler.js +81 -82
- package/lib/ConcatenationScope.js +3 -6
- package/lib/ConditionalInitFragment.js +6 -7
- package/lib/ConstPlugin.js +7 -15
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +33 -20
- package/lib/ContextModuleFactory.js +89 -44
- package/lib/ContextReplacementPlugin.js +10 -9
- package/lib/DefinePlugin.js +75 -68
- package/lib/DelegatedModule.js +7 -3
- package/lib/DelegatedModuleFactoryPlugin.js +36 -22
- package/lib/DelegatedPlugin.js +4 -0
- package/lib/DependenciesBlock.js +0 -1
- package/lib/Dependency.js +10 -14
- package/lib/DllEntryPlugin.js +4 -2
- package/lib/DllModuleFactory.js +1 -0
- package/lib/DllPlugin.js +9 -7
- package/lib/DllReferencePlugin.js +30 -15
- package/lib/EntryPlugin.js +1 -3
- package/lib/EnvironmentPlugin.js +6 -2
- package/lib/ErrorHelpers.js +11 -12
- package/lib/EvalDevToolModulePlugin.js +10 -12
- package/lib/EvalSourceMapDevToolPlugin.js +15 -13
- package/lib/ExportsInfo.js +185 -120
- package/lib/ExternalModule.js +41 -15
- package/lib/ExternalModuleFactoryPlugin.js +23 -10
- package/lib/FileSystemInfo.js +791 -422
- package/lib/FlagAllModulesAsUsedPlugin.js +1 -1
- package/lib/FlagDependencyExportsPlugin.js +12 -11
- package/lib/FlagDependencyUsagePlugin.js +1 -1
- package/lib/Generator.js +2 -5
- package/lib/GraphHelpers.js +3 -2
- package/lib/HookWebpackError.js +8 -10
- package/lib/HotModuleReplacementPlugin.js +78 -64
- package/lib/IgnoreErrorModuleFactory.js +3 -3
- package/lib/IgnorePlugin.js +1 -3
- package/lib/IgnoreWarningsPlugin.js +6 -9
- package/lib/InitFragment.js +2 -3
- package/lib/LibManifestPlugin.js +4 -3
- package/lib/MainTemplate.js +72 -19
- package/lib/Module.js +25 -9
- package/lib/ModuleBuildError.js +4 -11
- package/lib/ModuleDependencyError.js +5 -5
- package/lib/ModuleDependencyWarning.js +5 -5
- package/lib/ModuleError.js +1 -5
- package/lib/ModuleFilenameHelpers.js +29 -46
- package/lib/ModuleGraph.js +7 -6
- package/lib/ModuleGraphConnection.js +6 -6
- package/lib/ModuleInfoHeaderPlugin.js +82 -30
- package/lib/ModuleParseError.js +8 -9
- package/lib/ModuleRestoreError.js +1 -1
- package/lib/ModuleStoreError.js +1 -1
- package/lib/ModuleTemplate.js +33 -1
- package/lib/ModuleTypeConstants.js +21 -22
- package/lib/ModuleWarning.js +1 -5
- package/lib/MultiCompiler.js +24 -26
- package/lib/MultiStats.js +73 -31
- package/lib/MultiWatching.js +1 -1
- package/lib/NormalModule.js +130 -69
- package/lib/NormalModuleFactory.js +53 -49
- package/lib/OptimizationStages.js +3 -3
- package/lib/ProgressPlugin.js +9 -9
- package/lib/ProvidePlugin.js +4 -4
- package/lib/RuntimeGlobals.js +71 -70
- package/lib/RuntimeModule.js +1 -1
- package/lib/RuntimePlugin.js +24 -12
- package/lib/RuntimeTemplate.js +40 -44
- package/lib/SizeFormatHelpers.js +2 -4
- package/lib/SourceMapDevToolPlugin.js +42 -34
- package/lib/Stats.js +5 -11
- package/lib/Template.js +18 -24
- package/lib/TemplatedPathPlugin.js +21 -13
- package/lib/WarnDeprecatedOptionPlugin.js +0 -1
- package/lib/WatchIgnorePlugin.js +26 -9
- package/lib/Watching.js +10 -5
- package/lib/WebpackOptionsApply.js +84 -62
- package/lib/asset/AssetGenerator.js +107 -42
- package/lib/asset/AssetModulesPlugin.js +29 -23
- package/lib/asset/AssetSourceGenerator.js +2 -7
- package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
- package/lib/buildChunkGraph.js +93 -81
- package/lib/cache/IdleFileCachePlugin.js +4 -4
- package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
- package/lib/cache/PackFileCacheStrategy.js +51 -50
- package/lib/cache/ResolverCachePlugin.js +6 -6
- package/lib/cache/mergeEtags.js +16 -21
- package/lib/cli.js +148 -104
- package/lib/config/browserslistTargetHandler.js +16 -13
- package/lib/config/defaults.js +32 -28
- package/lib/config/normalization.js +335 -344
- package/lib/config/target.js +42 -52
- package/lib/container/ContainerEntryModule.js +2 -2
- package/lib/container/ContainerPlugin.js +1 -1
- package/lib/container/RemoteRuntimeModule.js +11 -8
- package/lib/container/options.js +18 -4
- package/lib/css/CssExportsGenerator.js +26 -24
- package/lib/css/CssGenerator.js +9 -4
- package/lib/css/CssLoadingRuntimeModule.js +10 -10
- package/lib/css/CssModulesPlugin.js +127 -47
- package/lib/css/CssParser.js +20 -18
- package/lib/css/walkCssTokens.js +80 -95
- package/lib/debug/ProfilingPlugin.js +19 -20
- package/lib/dependencies/AMDDefineDependency.js +1 -1
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
- package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
- package/lib/dependencies/AMDRuntimeModules.js +2 -2
- package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
- package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
- package/lib/dependencies/CommonJsExportsDependency.js +0 -1
- package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
- package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
- package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
- package/lib/dependencies/ConstDependency.js +1 -1
- package/lib/dependencies/ContextDependency.js +7 -2
- package/lib/dependencies/ContextDependencyHelpers.js +31 -34
- package/lib/dependencies/ContextElementDependency.js +35 -8
- package/lib/dependencies/CriticalDependencyWarning.js +1 -1
- package/lib/dependencies/CssExportDependency.js +7 -7
- package/lib/dependencies/CssImportDependency.js +0 -2
- package/lib/dependencies/CssLocalIdentifierDependency.js +3 -3
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
- package/lib/dependencies/CssUrlDependency.js +4 -5
- package/lib/dependencies/DynamicExports.js +5 -5
- package/lib/dependencies/ExportsInfoDependency.js +1 -2
- package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
- package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
- package/lib/dependencies/HarmonyExports.js +2 -2
- package/lib/dependencies/HarmonyImportDependency.js +2 -4
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -15
- package/lib/dependencies/ImportDependency.js +1 -1
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
- package/lib/dependencies/ImportMetaPlugin.js +11 -13
- package/lib/dependencies/ImportParserPlugin.js +39 -44
- package/lib/dependencies/JsonExportsDependency.js +22 -18
- package/lib/dependencies/LoaderPlugin.js +47 -36
- package/lib/dependencies/LocalModule.js +1 -1
- package/lib/dependencies/LocalModulesHelpers.js +4 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
- package/lib/dependencies/ProvidedDependency.js +1 -1
- package/lib/dependencies/PureExpressionDependency.js +6 -6
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
- package/lib/dependencies/SystemPlugin.js +1 -1
- package/lib/dependencies/URLDependency.js +3 -3
- package/lib/dependencies/URLPlugin.js +66 -12
- package/lib/dependencies/WorkerPlugin.js +25 -24
- package/lib/dependencies/processExportInfo.js +3 -1
- package/lib/electron/ElectronTargetPlugin.js +1 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +3 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
- package/lib/formatLocation.js +1 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
- package/lib/hmr/LazyCompilationPlugin.js +27 -12
- package/lib/hmr/lazyCompilationBackend.js +64 -40
- package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
- package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +5 -1
- package/lib/ids/IdHelpers.js +29 -39
- package/lib/ids/SyncModuleIdsPlugin.js +7 -2
- package/lib/index.js +1 -5
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -4
- package/lib/javascript/BasicEvaluatedExpression.js +4 -19
- package/lib/javascript/ChunkHelpers.js +1 -1
- package/lib/javascript/CommonJsChunkFormatPlugin.js +3 -2
- package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
- package/lib/javascript/JavascriptGenerator.js +23 -7
- package/lib/javascript/JavascriptModulesPlugin.js +133 -86
- package/lib/javascript/JavascriptParser.js +179 -200
- package/lib/javascript/JavascriptParserHelpers.js +20 -21
- package/lib/javascript/StartupHelpers.js +41 -13
- package/lib/json/JsonGenerator.js +7 -13
- package/lib/json/JsonModulesPlugin.js +1 -4
- package/lib/json/JsonParser.js +5 -3
- package/lib/library/AmdLibraryPlugin.js +12 -16
- package/lib/library/AssignLibraryPlugin.js +8 -10
- package/lib/library/EnableLibraryPlugin.js +15 -14
- package/lib/library/JsonpLibraryPlugin.js +2 -1
- package/lib/library/ModernModuleLibraryPlugin.js +8 -6
- package/lib/library/ModuleLibraryPlugin.js +2 -1
- package/lib/library/SystemLibraryPlugin.js +2 -1
- package/lib/library/UmdLibraryPlugin.js +66 -92
- package/lib/logging/Logger.js +32 -4
- package/lib/logging/createConsoleLogger.js +12 -13
- package/lib/logging/runtime.js +7 -8
- package/lib/logging/truncateArgs.js +5 -8
- package/lib/node/NodeWatchFileSystem.js +3 -18
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
- package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
- package/lib/node/nodeConsole.js +22 -22
- package/lib/optimize/AggressiveMergingPlugin.js +2 -4
- package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
- package/lib/optimize/ConcatenatedModule.js +81 -51
- package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
- package/lib/optimize/InnerGraph.js +17 -17
- package/lib/optimize/InnerGraphPlugin.js +8 -7
- package/lib/optimize/LimitChunkCountPlugin.js +2 -3
- package/lib/optimize/MangleExportsPlugin.js +1 -0
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -2
- package/lib/optimize/MinMaxSizeWarning.js +1 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +54 -78
- package/lib/optimize/RealContentHashPlugin.js +7 -10
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
- package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
- package/lib/optimize/SplitChunksPlugin.js +34 -30
- package/lib/performance/SizeLimitsPlugin.js +2 -2
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
- package/lib/rules/BasicEffectRulePlugin.js +3 -1
- package/lib/rules/BasicMatcherRulePlugin.js +3 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
- package/lib/rules/RuleSetCompiler.js +41 -22
- package/lib/rules/UseEffectRulePlugin.js +36 -32
- package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
- package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
- package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
- package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +241 -126
- package/lib/serialization/BinaryMiddleware.js +44 -28
- package/lib/serialization/DateObjectSerializer.js +1 -0
- package/lib/serialization/ErrorObjectSerializer.js +2 -0
- package/lib/serialization/FileMiddleware.js +154 -106
- package/lib/serialization/MapObjectSerializer.js +2 -1
- package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
- package/lib/serialization/ObjectMiddleware.js +52 -56
- package/lib/serialization/PlainObjectSerializer.js +32 -6
- package/lib/serialization/RegExpObjectSerializer.js +1 -0
- package/lib/serialization/Serializer.js +4 -5
- package/lib/serialization/SerializerMiddleware.js +6 -6
- package/lib/serialization/SetObjectSerializer.js +2 -1
- package/lib/sharing/ConsumeSharedPlugin.js +116 -97
- package/lib/sharing/ConsumeSharedRuntimeModule.js +4 -4
- package/lib/sharing/ProvideForSharedDependency.js +0 -1
- package/lib/sharing/ProvideSharedPlugin.js +2 -2
- package/lib/sharing/resolveMatchedConfigs.js +2 -1
- package/lib/sharing/utils.js +15 -27
- package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
- package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
- package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
- package/lib/stats/StatsFactory.js +127 -56
- package/lib/stats/StatsPrinter.js +75 -44
- package/lib/util/ArrayHelpers.js +8 -4
- package/lib/util/ArrayQueue.js +1 -1
- package/lib/util/AsyncQueue.js +31 -12
- package/lib/util/IterableHelpers.js +3 -4
- package/lib/util/LazyBucketSortedSet.js +60 -44
- package/lib/util/LazySet.js +13 -0
- package/lib/util/MapHelpers.js +1 -3
- package/lib/util/ParallelismFactorCalculator.js +1 -1
- package/lib/util/Queue.js +1 -1
- package/lib/util/Semaphore.js +4 -7
- package/lib/util/SetHelpers.js +5 -5
- package/lib/util/SortableSet.js +4 -3
- package/lib/util/StackedCacheMap.js +4 -6
- package/lib/util/StackedMap.js +1 -3
- package/lib/util/StringXor.js +0 -5
- package/lib/util/TupleQueue.js +1 -1
- package/lib/util/TupleSet.js +15 -5
- package/lib/util/URLAbsoluteSpecifier.js +7 -7
- package/lib/util/WeakTupleMap.js +19 -21
- package/lib/util/binarySearchBounds.js +5 -12
- package/lib/util/chainedImports.js +1 -1
- package/lib/util/cleverMerge.js +21 -19
- package/lib/util/comparators.js +57 -52
- package/lib/util/compileBooleanMatcher.js +3 -6
- package/lib/util/conventions.js +8 -11
- package/lib/util/createHash.js +9 -6
- package/lib/util/deprecation.js +22 -12
- package/lib/util/deterministicGrouping.js +19 -26
- package/lib/util/findGraphRoots.js +2 -2
- package/lib/util/fs.js +32 -32
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/wasm-hash.js +7 -7
- package/lib/util/hash/xxhash64.js +2 -2
- package/lib/util/identifier.js +81 -59
- package/lib/util/memoize.js +8 -10
- package/lib/util/mergeScope.js +6 -9
- package/lib/util/nonNumericOnlyHash.js +2 -2
- package/lib/util/numberHash.js +1 -6
- package/lib/util/objectToMap.js +0 -1
- package/lib/util/propertyAccess.js +2 -5
- package/lib/util/propertyName.js +1 -3
- package/lib/util/registerExternalSerializer.js +1 -1
- package/lib/util/runtime.js +109 -113
- package/lib/util/semver.js +29 -27
- package/lib/util/serialization.js +16 -1
- package/lib/util/smartGrouping.js +5 -5
- package/lib/util/source.js +1 -1
- package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
- package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
- package/package.json +18 -17
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +5 -0
- 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 +1 -0
- package/types.d.ts +681 -355
@@ -5,6 +5,7 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
/** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
|
8
9
|
/** @typedef {import("./RuleSetCompiler")} RuleSetCompiler */
|
9
10
|
/** @typedef {import("./RuleSetCompiler").RuleCondition} RuleCondition */
|
10
11
|
/** @typedef {import("./RuleSetCompiler").RuleConditionFunction} RuleConditionFunction */
|
@@ -32,7 +33,9 @@ class ObjectMatcherRulePlugin {
|
|
32
33
|
(path, rule, unhandledProperties, result) => {
|
33
34
|
if (unhandledProperties.has(ruleProperty)) {
|
34
35
|
unhandledProperties.delete(ruleProperty);
|
35
|
-
const value =
|
36
|
+
const value =
|
37
|
+
/** @type {Record<string, any>} */
|
38
|
+
(rule[/** @type {keyof RuleSetRule} */ (ruleProperty)]);
|
36
39
|
for (const property of Object.keys(value)) {
|
37
40
|
const nestedDataProperties = property.split(".");
|
38
41
|
const condition = ruleSetCompiler.compileCondition(
|
@@ -7,6 +7,9 @@
|
|
7
7
|
|
8
8
|
const { SyncHook } = require("tapable");
|
9
9
|
|
10
|
+
/** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
|
11
|
+
/** @typedef {import("../../declarations/WebpackOptions").RuleSetRules} RuleSetRules */
|
12
|
+
|
10
13
|
/** @typedef {function(string): boolean} RuleConditionFunction */
|
11
14
|
|
12
15
|
/**
|
@@ -22,10 +25,14 @@ const { SyncHook } = require("tapable");
|
|
22
25
|
* @property {RuleConditionFunction} fn
|
23
26
|
*/
|
24
27
|
|
28
|
+
/**
|
29
|
+
* @typedef {Record<string, TODO>} EffectData
|
30
|
+
*/
|
31
|
+
|
25
32
|
/**
|
26
33
|
* @typedef {object} CompiledRule
|
27
34
|
* @property {RuleCondition[]} conditions
|
28
|
-
* @property {(Effect|function(
|
35
|
+
* @property {(Effect|function(EffectData): Effect[])[]} effects
|
29
36
|
* @property {CompiledRule[]=} rules
|
30
37
|
* @property {CompiledRule[]=} oneOf
|
31
38
|
*/
|
@@ -39,13 +46,18 @@ const { SyncHook } = require("tapable");
|
|
39
46
|
/**
|
40
47
|
* @typedef {object} RuleSet
|
41
48
|
* @property {Map<string, any>} references map of references in the rule set (may grow over time)
|
42
|
-
* @property {function(
|
49
|
+
* @property {function(EffectData): Effect[]} exec execute the rule set
|
43
50
|
*/
|
44
51
|
|
52
|
+
/** @typedef {{ apply: (function(RuleSetCompiler): void) }} RuleSetPlugin */
|
53
|
+
|
45
54
|
class RuleSetCompiler {
|
55
|
+
/**
|
56
|
+
* @param {RuleSetPlugin[]} plugins plugins
|
57
|
+
*/
|
46
58
|
constructor(plugins) {
|
47
59
|
this.hooks = Object.freeze({
|
48
|
-
/** @type {SyncHook<[string,
|
60
|
+
/** @type {SyncHook<[string, RuleSetRule, Set<string>, CompiledRule, Map<string | undefined, any>]>} */
|
49
61
|
rule: new SyncHook([
|
50
62
|
"path",
|
51
63
|
"rule",
|
@@ -62,7 +74,7 @@ class RuleSetCompiler {
|
|
62
74
|
}
|
63
75
|
|
64
76
|
/**
|
65
|
-
* @param {
|
77
|
+
* @param {TODO[]} ruleSet raw user provided rules
|
66
78
|
* @returns {RuleSet} compiled RuleSet
|
67
79
|
*/
|
68
80
|
compile(ruleSet) {
|
@@ -70,7 +82,7 @@ class RuleSetCompiler {
|
|
70
82
|
const rules = this.compileRules("ruleSet", ruleSet, refs);
|
71
83
|
|
72
84
|
/**
|
73
|
-
* @param {
|
85
|
+
* @param {EffectData} data data passed in
|
74
86
|
* @param {CompiledRule} rule the compiled rule
|
75
87
|
* @param {Effect[]} effects an array where effects are pushed to
|
76
88
|
* @returns {boolean} true, if the rule has matched
|
@@ -79,6 +91,7 @@ class RuleSetCompiler {
|
|
79
91
|
for (const condition of rule.conditions) {
|
80
92
|
const p = condition.property;
|
81
93
|
if (Array.isArray(p)) {
|
94
|
+
/** @type {EffectData | string | undefined} */
|
82
95
|
let current = data;
|
83
96
|
for (const subProperty of p) {
|
84
97
|
if (
|
@@ -93,7 +106,7 @@ class RuleSetCompiler {
|
|
93
106
|
}
|
94
107
|
}
|
95
108
|
if (current !== undefined) {
|
96
|
-
if (!condition.fn(current)) return false;
|
109
|
+
if (!condition.fn(/** @type {string} */ (current))) return false;
|
97
110
|
continue;
|
98
111
|
}
|
99
112
|
} else if (p in data) {
|
@@ -147,25 +160,33 @@ class RuleSetCompiler {
|
|
147
160
|
|
148
161
|
/**
|
149
162
|
* @param {string} path current path
|
150
|
-
* @param {
|
163
|
+
* @param {RuleSetRules} rules the raw rules provided by user
|
151
164
|
* @param {Map<string, any>} refs references
|
152
165
|
* @returns {CompiledRule[]} rules
|
153
166
|
*/
|
154
167
|
compileRules(path, rules, refs) {
|
155
168
|
return rules
|
156
169
|
.filter(Boolean)
|
157
|
-
.map((rule, i) =>
|
170
|
+
.map((rule, i) =>
|
171
|
+
this.compileRule(
|
172
|
+
`${path}[${i}]`,
|
173
|
+
/** @type {RuleSetRule} */ (rule),
|
174
|
+
refs
|
175
|
+
)
|
176
|
+
);
|
158
177
|
}
|
159
178
|
|
160
179
|
/**
|
161
180
|
* @param {string} path current path
|
162
|
-
* @param {
|
181
|
+
* @param {RuleSetRule} rule the raw rule provided by user
|
163
182
|
* @param {Map<string, any>} refs references
|
164
183
|
* @returns {CompiledRule} normalized and compiled rule for processing
|
165
184
|
*/
|
166
185
|
compileRule(path, rule, refs) {
|
167
186
|
const unhandledProperties = new Set(
|
168
|
-
Object.keys(rule).filter(
|
187
|
+
Object.keys(rule).filter(
|
188
|
+
key => rule[/** @type {keyof RuleSetRule} */ (key)] !== undefined
|
189
|
+
)
|
169
190
|
);
|
170
191
|
|
171
192
|
/** @type {CompiledRule} */
|
@@ -236,7 +257,7 @@ class RuleSetCompiler {
|
|
236
257
|
matchWhenEmpty: condition(""),
|
237
258
|
fn: condition
|
238
259
|
};
|
239
|
-
} catch (
|
260
|
+
} catch (_err) {
|
240
261
|
throw this.error(
|
241
262
|
path,
|
242
263
|
condition,
|
@@ -303,7 +324,7 @@ class RuleSetCompiler {
|
|
303
324
|
const fn = matcher.fn;
|
304
325
|
conditions.push({
|
305
326
|
matchWhenEmpty: !matcher.matchWhenEmpty,
|
306
|
-
fn: v => !fn(v)
|
327
|
+
fn: /** @type {RuleConditionFunction} */ (v => !fn(v))
|
307
328
|
});
|
308
329
|
}
|
309
330
|
break;
|
@@ -337,12 +358,11 @@ class RuleSetCompiler {
|
|
337
358
|
};
|
338
359
|
} else if (conditions.length === 1) {
|
339
360
|
return conditions[0];
|
340
|
-
} else {
|
341
|
-
return {
|
342
|
-
matchWhenEmpty: conditions.some(c => c.matchWhenEmpty),
|
343
|
-
fn: v => conditions.some(c => c.fn(v))
|
344
|
-
};
|
345
361
|
}
|
362
|
+
return {
|
363
|
+
matchWhenEmpty: conditions.some(c => c.matchWhenEmpty),
|
364
|
+
fn: v => conditions.some(c => c.fn(v))
|
365
|
+
};
|
346
366
|
}
|
347
367
|
|
348
368
|
/**
|
@@ -357,12 +377,11 @@ class RuleSetCompiler {
|
|
357
377
|
};
|
358
378
|
} else if (conditions.length === 1) {
|
359
379
|
return conditions[0];
|
360
|
-
} else {
|
361
|
-
return {
|
362
|
-
matchWhenEmpty: conditions.every(c => c.matchWhenEmpty),
|
363
|
-
fn: v => conditions.every(c => c.fn(v))
|
364
|
-
};
|
365
380
|
}
|
381
|
+
return {
|
382
|
+
matchWhenEmpty: conditions.every(c => c.matchWhenEmpty),
|
383
|
+
fn: v => conditions.every(c => c.fn(v))
|
384
|
+
};
|
366
385
|
}
|
367
386
|
|
368
387
|
/**
|
@@ -7,6 +7,9 @@
|
|
7
7
|
|
8
8
|
const util = require("util");
|
9
9
|
|
10
|
+
/** @typedef {import("../../declarations/WebpackOptions").RuleSetLoader} RuleSetLoader */
|
11
|
+
/** @typedef {import("../../declarations/WebpackOptions").RuleSetLoaderOptions} RuleSetLoaderOptions */
|
12
|
+
/** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
|
10
13
|
/** @typedef {import("./RuleSetCompiler")} RuleSetCompiler */
|
11
14
|
/** @typedef {import("./RuleSetCompiler").Effect} Effect */
|
12
15
|
|
@@ -19,6 +22,10 @@ class UseEffectRulePlugin {
|
|
19
22
|
ruleSetCompiler.hooks.rule.tap(
|
20
23
|
"UseEffectRulePlugin",
|
21
24
|
(path, rule, unhandledProperties, result, references) => {
|
25
|
+
/**
|
26
|
+
* @param {keyof RuleSetRule} property property
|
27
|
+
* @param {string} correctProperty correct property
|
28
|
+
*/
|
22
29
|
const conflictWith = (property, correctProperty) => {
|
23
30
|
if (unhandledProperties.has(property)) {
|
24
31
|
throw ruleSetCompiler.error(
|
@@ -42,7 +49,6 @@ class UseEffectRulePlugin {
|
|
42
49
|
const type = enforce ? `use-${enforce}` : "use";
|
43
50
|
|
44
51
|
/**
|
45
|
-
*
|
46
52
|
* @param {string} path options path
|
47
53
|
* @param {string} defaultIdent default ident when none is provided
|
48
54
|
* @param {object} item user provided use value
|
@@ -51,16 +57,14 @@ class UseEffectRulePlugin {
|
|
51
57
|
const useToEffect = (path, defaultIdent, item) => {
|
52
58
|
if (typeof item === "function") {
|
53
59
|
return data => useToEffectsWithoutIdent(path, item(data));
|
54
|
-
} else {
|
55
|
-
return useToEffectRaw(path, defaultIdent, item);
|
56
60
|
}
|
61
|
+
return useToEffectRaw(path, defaultIdent, item);
|
57
62
|
};
|
58
63
|
|
59
64
|
/**
|
60
|
-
*
|
61
65
|
* @param {string} path options path
|
62
66
|
* @param {string} defaultIdent default ident when none is provided
|
63
|
-
* @param {
|
67
|
+
* @param {{ ident?: string, loader?: RuleSetLoader, options?: RuleSetLoaderOptions }} item user provided use value
|
64
68
|
* @returns {Effect} effect
|
65
69
|
*/
|
66
70
|
const useToEffectRaw = (path, defaultIdent, item) => {
|
@@ -73,30 +77,29 @@ class UseEffectRulePlugin {
|
|
73
77
|
ident: undefined
|
74
78
|
}
|
75
79
|
};
|
76
|
-
} else {
|
77
|
-
const loader = item.loader;
|
78
|
-
const options = item.options;
|
79
|
-
let ident = item.ident;
|
80
|
-
if (options && typeof options === "object") {
|
81
|
-
if (!ident) ident = defaultIdent;
|
82
|
-
references.set(ident, options);
|
83
|
-
}
|
84
|
-
if (typeof options === "string") {
|
85
|
-
util.deprecate(
|
86
|
-
() => {},
|
87
|
-
`Using a string as loader options is deprecated (${path}.options)`,
|
88
|
-
"DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING"
|
89
|
-
)();
|
90
|
-
}
|
91
|
-
return {
|
92
|
-
type: enforce ? `use-${enforce}` : "use",
|
93
|
-
value: {
|
94
|
-
loader,
|
95
|
-
options,
|
96
|
-
ident
|
97
|
-
}
|
98
|
-
};
|
99
80
|
}
|
81
|
+
const loader = item.loader;
|
82
|
+
const options = item.options;
|
83
|
+
let ident = item.ident;
|
84
|
+
if (options && typeof options === "object") {
|
85
|
+
if (!ident) ident = defaultIdent;
|
86
|
+
references.set(ident, options);
|
87
|
+
}
|
88
|
+
if (typeof options === "string") {
|
89
|
+
util.deprecate(
|
90
|
+
() => {},
|
91
|
+
`Using a string as loader options is deprecated (${path}.options)`,
|
92
|
+
"DEP_WEBPACK_RULE_LOADER_OPTIONS_STRING"
|
93
|
+
)();
|
94
|
+
}
|
95
|
+
return {
|
96
|
+
type: enforce ? `use-${enforce}` : "use",
|
97
|
+
value: {
|
98
|
+
loader,
|
99
|
+
options,
|
100
|
+
ident
|
101
|
+
}
|
102
|
+
};
|
100
103
|
};
|
101
104
|
|
102
105
|
/**
|
@@ -132,7 +135,10 @@ class UseEffectRulePlugin {
|
|
132
135
|
|
133
136
|
if (typeof use === "function") {
|
134
137
|
result.effects.push(data =>
|
135
|
-
useToEffectsWithoutIdent(
|
138
|
+
useToEffectsWithoutIdent(
|
139
|
+
`${path}.use`,
|
140
|
+
use(/** @type {TODO} */ (data))
|
141
|
+
)
|
136
142
|
);
|
137
143
|
} else {
|
138
144
|
for (const effect of useToEffects(`${path}.use`, use)) {
|
@@ -146,7 +152,7 @@ class UseEffectRulePlugin {
|
|
146
152
|
unhandledProperties.delete("options");
|
147
153
|
unhandledProperties.delete("enforce");
|
148
154
|
|
149
|
-
const loader = rule.loader;
|
155
|
+
const loader = /** @type {RuleSetLoader} */ (rule.loader);
|
150
156
|
const options = rule.options;
|
151
157
|
const enforce = rule.enforce;
|
152
158
|
|
@@ -189,8 +195,6 @@ class UseEffectRulePlugin {
|
|
189
195
|
}
|
190
196
|
);
|
191
197
|
}
|
192
|
-
|
193
|
-
useItemToEffects(path, item) {}
|
194
198
|
}
|
195
199
|
|
196
200
|
module.exports = UseEffectRulePlugin;
|
@@ -10,6 +10,7 @@ const Template = require("../Template");
|
|
10
10
|
const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
|
11
11
|
const { getUndoPath } = require("../util/identifier");
|
12
12
|
|
13
|
+
/** @typedef {import("../Chunk")} Chunk */
|
13
14
|
/** @typedef {import("../Compilation")} Compilation */
|
14
15
|
|
15
16
|
class AutoPublicPathRuntimeModule extends RuntimeModule {
|
@@ -25,7 +26,8 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
|
|
25
26
|
const { scriptType, importMetaName, path } = compilation.outputOptions;
|
26
27
|
const chunkName = compilation.getPath(
|
27
28
|
JavascriptModulesPlugin.getChunkFilenameTemplate(
|
28
|
-
|
29
|
+
/** @type {Chunk} */
|
30
|
+
(this.chunk),
|
29
31
|
compilation.outputOptions
|
30
32
|
),
|
31
33
|
{
|
@@ -48,8 +50,11 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
|
|
48
50
|
`var document = ${RuntimeGlobals.global}.document;`,
|
49
51
|
"if (!scriptUrl && document) {",
|
50
52
|
Template.indent([
|
51
|
-
`
|
52
|
-
|
53
|
+
// Technically we could use `document.currentScript instanceof window.HTMLScriptElement`,
|
54
|
+
// but an attacker could try to inject `<script>HTMLScriptElement = HTMLImageElement</script>`
|
55
|
+
// and use `<img name="currentScript" src="https://attacker.controlled.server/"></img>`
|
56
|
+
"if (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')",
|
57
|
+
Template.indent("scriptUrl = document.currentScript.src;"),
|
53
58
|
"if (!scriptUrl) {",
|
54
59
|
Template.indent([
|
55
60
|
'var scripts = document.getElementsByTagName("script");',
|
@@ -37,8 +37,8 @@ class CreateFakeNamespaceObjectRuntimeModule extends HelperRuntimeModule {
|
|
37
37
|
// Note: must be a function (not arrow), because this is used in body!
|
38
38
|
`${fn} = function(value, mode) {`,
|
39
39
|
Template.indent([
|
40
|
-
|
41
|
-
|
40
|
+
"if(mode & 1) value = this(value);",
|
41
|
+
"if(mode & 8) return value;",
|
42
42
|
"if(typeof value === 'object' && value) {",
|
43
43
|
Template.indent([
|
44
44
|
"if((mode & 4) && value.__esModule) return value;",
|
@@ -25,7 +25,7 @@ class DefinePropertyGettersRuntimeModule extends HelperRuntimeModule {
|
|
25
25
|
return Template.asString([
|
26
26
|
"// define getter functions for harmony exports",
|
27
27
|
`${fn} = ${runtimeTemplate.basicFunction("exports, definition", [
|
28
|
-
|
28
|
+
"for(var key in definition) {",
|
29
29
|
Template.indent([
|
30
30
|
`if(${RuntimeGlobals.hasOwnProperty}(definition, key) && !${RuntimeGlobals.hasOwnProperty}(exports, key)) {`,
|
31
31
|
Template.indent([
|
@@ -51,18 +51,17 @@ class EnsureChunkRuntimeModule extends RuntimeModule {
|
|
51
51
|
]
|
52
52
|
)};`
|
53
53
|
]);
|
54
|
-
} else {
|
55
|
-
// There ensureChunk is used somewhere in the tree, so we need an empty requireEnsure
|
56
|
-
// function. This can happen with multiple entrypoints.
|
57
|
-
return Template.asString([
|
58
|
-
"// The chunk loading function for additional chunks",
|
59
|
-
"// Since all referenced chunks are already included",
|
60
|
-
"// in this file, this function is empty here.",
|
61
|
-
`${RuntimeGlobals.ensureChunk} = ${runtimeTemplate.returningFunction(
|
62
|
-
"Promise.resolve()"
|
63
|
-
)};`
|
64
|
-
]);
|
65
54
|
}
|
55
|
+
// There ensureChunk is used somewhere in the tree, so we need an empty requireEnsure
|
56
|
+
// function. This can happen with multiple entrypoints.
|
57
|
+
return Template.asString([
|
58
|
+
"// The chunk loading function for additional chunks",
|
59
|
+
"// Since all referenced chunks are already included",
|
60
|
+
"// in this file, this function is empty here.",
|
61
|
+
`${RuntimeGlobals.ensureChunk} = ${runtimeTemplate.returningFunction(
|
62
|
+
"Promise.resolve()"
|
63
|
+
)};`
|
64
|
+
]);
|
66
65
|
}
|
67
66
|
}
|
68
67
|
|
@@ -13,16 +13,14 @@ const { first } = require("../util/SetHelpers");
|
|
13
13
|
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
14
14
|
/** @typedef {import("../Compilation")} Compilation */
|
15
15
|
/** @typedef {import("../Compilation").AssetInfo} AssetInfo */
|
16
|
-
/** @typedef {import("../
|
17
|
-
|
18
|
-
/** @typedef {function(PathData, AssetInfo=): string} FilenameFunction */
|
16
|
+
/** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
|
19
17
|
|
20
18
|
class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
21
19
|
/**
|
22
20
|
* @param {string} contentType the contentType to use the content hash for
|
23
21
|
* @param {string} name kind of filename
|
24
22
|
* @param {string} global function name to be assigned
|
25
|
-
* @param {function(Chunk):
|
23
|
+
* @param {function(Chunk): TemplatePath} getFilenameForChunk functor to get the filename or function
|
26
24
|
* @param {boolean} allChunks when false, only async chunks are included
|
27
25
|
*/
|
28
26
|
constructor(contentType, name, global, getFilenameForChunk, allChunks) {
|
@@ -44,7 +42,7 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
44
42
|
const chunk = /** @type {Chunk} */ (this.chunk);
|
45
43
|
const { runtimeTemplate } = compilation;
|
46
44
|
|
47
|
-
/** @type {Map<string |
|
45
|
+
/** @type {Map<string | TemplatePath, Set<Chunk>>} */
|
48
46
|
const chunkFilenames = new Map();
|
49
47
|
let maxChunks = 0;
|
50
48
|
/** @type {string | undefined} */
|
@@ -74,11 +72,10 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
74
72
|
|
75
73
|
if (
|
76
74
|
chunkFilename.length ===
|
77
|
-
|
75
|
+
/** @type {string} */ (dynamicFilename).length &&
|
76
|
+
chunkFilename < /** @type {string} */ (dynamicFilename)
|
78
77
|
) {
|
79
|
-
|
80
|
-
return;
|
81
|
-
}
|
78
|
+
return;
|
82
79
|
}
|
83
80
|
}
|
84
81
|
maxChunks = set.size;
|
@@ -122,7 +119,7 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
122
119
|
|
123
120
|
/**
|
124
121
|
* @param {Chunk} c the chunk
|
125
|
-
* @param {string |
|
122
|
+
* @param {string | TemplatePath} chunkFilename the filename template for the chunk
|
126
123
|
* @returns {void}
|
127
124
|
*/
|
128
125
|
const addStaticUrl = (c, chunkFilename) => {
|
@@ -137,7 +134,7 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
137
134
|
return '" + chunkId + "';
|
138
135
|
}
|
139
136
|
const s = JSON.stringify(str);
|
140
|
-
return s.slice(1,
|
137
|
+
return s.slice(1, -1);
|
141
138
|
};
|
142
139
|
/**
|
143
140
|
* @param {string} value string
|
@@ -231,17 +228,14 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
231
228
|
* @param {function(Chunk): string | number} fn function from chunk to value
|
232
229
|
* @returns {string} code with static mapping of results of fn for including in quoted string
|
233
230
|
*/
|
234
|
-
const mapExpr = fn => {
|
235
|
-
return `" + ${createMap(fn)} + "`;
|
236
|
-
};
|
231
|
+
const mapExpr = fn => `" + ${createMap(fn)} + "`;
|
237
232
|
|
238
233
|
/**
|
239
234
|
* @param {function(Chunk): string | number} fn function from chunk to value
|
240
235
|
* @returns {function(number): string} function which generates code with static mapping of results of fn for including in quoted string for specific length
|
241
236
|
*/
|
242
|
-
const mapExprWithLength = fn => length =>
|
243
|
-
|
244
|
-
};
|
237
|
+
const mapExprWithLength = fn => length =>
|
238
|
+
`" + ${createMap(c => `${fn(c)}`.slice(0, length))} + "`;
|
245
239
|
|
246
240
|
const url =
|
247
241
|
dynamicFilename &&
|
@@ -113,7 +113,7 @@ class LoadScriptRuntimeModule extends HelperRuntimeModule {
|
|
113
113
|
return Template.asString([
|
114
114
|
"var inProgress = {};",
|
115
115
|
uniqueName
|
116
|
-
? `var dataWebpackPrefix = ${JSON.stringify(uniqueName
|
116
|
+
? `var dataWebpackPrefix = ${JSON.stringify(`${uniqueName}:`)};`
|
117
117
|
: "// data-webpack is not used as build has no uniqueName",
|
118
118
|
"// loadScript function to load a script via script tag",
|
119
119
|
`${fn} = ${runtimeTemplate.basicFunction(
|
@@ -145,23 +145,22 @@ class LoadScriptRuntimeModule extends HelperRuntimeModule {
|
|
145
145
|
]),
|
146
146
|
"}",
|
147
147
|
"inProgress[url] = [done];",
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
),
|
148
|
+
`var onScriptComplete = ${runtimeTemplate.basicFunction(
|
149
|
+
"prev, event",
|
150
|
+
Template.asString([
|
151
|
+
"// avoid mem leaks in IE.",
|
152
|
+
"script.onerror = script.onload = null;",
|
153
|
+
"clearTimeout(timeout);",
|
154
|
+
"var doneFns = inProgress[url];",
|
155
|
+
"delete inProgress[url];",
|
156
|
+
"script.parentNode && script.parentNode.removeChild(script);",
|
157
|
+
`doneFns && doneFns.forEach(${runtimeTemplate.returningFunction(
|
158
|
+
"fn(event)",
|
159
|
+
"fn"
|
160
|
+
)});`,
|
161
|
+
"if(prev) return prev(event);"
|
162
|
+
])
|
163
|
+
)}`,
|
165
164
|
`var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), ${loadTimeout});`,
|
166
165
|
"script.onerror = onScriptComplete.bind(null, script.onerror);",
|
167
166
|
"script.onload = onScriptComplete.bind(null, script.onload);",
|
@@ -30,9 +30,7 @@ class StartupChunkDependenciesRuntimeModule extends RuntimeModule {
|
|
30
30
|
const chunk = /** @type {Chunk} */ (this.chunk);
|
31
31
|
const chunkIds = Array.from(
|
32
32
|
chunkGraph.getChunkEntryDependentChunksIterable(chunk)
|
33
|
-
).map(chunk =>
|
34
|
-
return chunk.id;
|
35
|
-
});
|
33
|
+
).map(chunk => chunk.id);
|
36
34
|
const compilation = /** @type {Compilation} */ (this.compilation);
|
37
35
|
const { runtimeTemplate } = compilation;
|
38
36
|
return Template.asString([
|
@@ -15,7 +15,7 @@ const URIRegEx = /^data:([^;,]+)?((?:;[^;,]+)*?)(?:;(base64))?,(.*)$/i;
|
|
15
15
|
|
16
16
|
/**
|
17
17
|
* @param {string} uri data URI
|
18
|
-
* @returns {Buffer|null} decoded data
|
18
|
+
* @returns {Buffer | null} decoded data
|
19
19
|
*/
|
20
20
|
const decodeDataURI = uri => {
|
21
21
|
const match = URIRegEx.exec(uri);
|